Skip to content

Commit 7856d51

Browse files
Return struct values by output pointer for C API compatibility (#765)
Change these methods to return values by reference (output pointer) instead of by value: - ITopLevelAS::GetBuildInfo - ITopLevelAS::GetScratchBufferSizes - IBottomLevelAS::GetScratchBufferSizes - IEngineFactoryVk::GetVulkanVersion
1 parent 163fb0c commit 7856d51

8 files changed

Lines changed: 27 additions & 22 deletions

File tree

Graphics/GraphicsEngine/include/BottomLevelASBase.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2019-2022 Diligent Graphics LLC
2+
* Copyright 2019-2026 Diligent Graphics LLC
33
* Copyright 2015-2019 Egor Yusov
44
*
55
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -176,7 +176,7 @@ class BottomLevelASBase : public DeviceObjectBase<typename EngineImplTraits::Bot
176176
}
177177

178178
/// Implementation of IBottomLevelAS::GetScratchBufferSizes()
179-
virtual ScratchBufferSizes DILIGENT_CALL_TYPE GetScratchBufferSizes() const override final
179+
virtual const ScratchBufferSizes& DILIGENT_CALL_TYPE GetScratchBufferSizes() const override final
180180
{
181181
return this->m_ScratchSize;
182182
}

Graphics/GraphicsEngine/include/TopLevelASBase.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2019-2025 Diligent Graphics LLC
2+
* Copyright 2019-2026 Diligent Graphics LLC
33
* Copyright 2015-2019 Egor Yusov
44
*
55
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -266,7 +266,7 @@ class TopLevelASBase : public DeviceObjectBase<typename EngineImplTraits::TopLev
266266
}
267267

268268
/// Implementation of ITopLevelAS::GetBuildInfo().
269-
virtual TLASBuildInfo DILIGENT_CALL_TYPE GetBuildInfo() const override final
269+
virtual const TLASBuildInfo& DILIGENT_CALL_TYPE GetBuildInfo() const override final
270270
{
271271
return m_BuildInfo;
272272
}
@@ -286,7 +286,7 @@ class TopLevelASBase : public DeviceObjectBase<typename EngineImplTraits::TopLev
286286
}
287287

288288
/// Implementation of ITopLevelAS::GetScratchBufferSizes().
289-
virtual ScratchBufferSizes DILIGENT_CALL_TYPE GetScratchBufferSizes() const override final
289+
virtual const ScratchBufferSizes& DILIGENT_CALL_TYPE GetScratchBufferSizes() const override final
290290
{
291291
return this->m_ScratchSize;
292292
}

Graphics/GraphicsEngine/interface/BottomLevelAS.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2019-2025 Diligent Graphics LLC
2+
* Copyright 2019-2026 Diligent Graphics LLC
33
* Copyright 2015-2019 Egor Yusov
44
*
55
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -321,7 +321,7 @@ DILIGENT_BEGIN_INTERFACE(IBottomLevelAS, IDeviceObject)
321321
/// Returns the scratch buffer info for the current acceleration structure.
322322

323323
/// \return ScratchBufferSizes object, see Diligent::ScratchBufferSizes.
324-
VIRTUAL ScratchBufferSizes METHOD(GetScratchBufferSizes)(THIS) CONST PURE;
324+
VIRTUAL const ScratchBufferSizes REF METHOD(GetScratchBufferSizes)(THIS) CONST PURE;
325325

326326

327327
/// Returns the native acceleration structure handle specific to the underlying graphics API

Graphics/GraphicsEngine/interface/TopLevelAS.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2019-2025 Diligent Graphics LLC
2+
* Copyright 2019-2026 Diligent Graphics LLC
33
* Copyright 2015-2019 Egor Yusov
44
*
55
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -180,13 +180,13 @@ DILIGENT_BEGIN_INTERFACE(ITopLevelAS, IDeviceObject)
180180
/// \return TLASBuildInfo object, see Diligent::TLASBuildInfo.
181181
///
182182
/// \note Access to the TLAS must be externally synchronized.
183-
VIRTUAL TLASBuildInfo METHOD(GetBuildInfo)(THIS) CONST PURE;
183+
VIRTUAL const TLASBuildInfo REF METHOD(GetBuildInfo)(THIS) CONST PURE;
184184

185185

186186
/// Returns scratch buffer info for the current acceleration structure.
187187

188188
/// \return ScratchBufferSizes object, see Diligent::ScratchBufferSizes.
189-
VIRTUAL ScratchBufferSizes METHOD(GetScratchBufferSizes)(THIS) CONST PURE;
189+
VIRTUAL const ScratchBufferSizes REF METHOD(GetScratchBufferSizes)(THIS) CONST PURE;
190190

191191

192192
/// Returns native acceleration structure handle specific to the underlying graphics API

Graphics/GraphicsEngineVulkan/interface/EngineFactoryVk.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2019-2025 Diligent Graphics LLC
2+
* Copyright 2019-2026 Diligent Graphics LLC
33
* Copyright 2015-2019 Egor Yusov
44
*
55
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -111,7 +111,7 @@ DILIGENT_BEGIN_INTERFACE(IEngineFactoryVk, IEngineFactory)
111111
/// Returns the supported Vulkan version. If Vulkan is not supported, returns 0.
112112

113113
/// This function can be used to check whether Vulkan is supported on the platform.
114-
VIRTUAL Version METHOD(GetVulkanVersion)(THIS) CONST PURE;
114+
VIRTUAL const Version REF METHOD(GetVulkanVersion)(THIS) PURE;
115115
};
116116
DILIGENT_END_INTERFACE
117117

Graphics/GraphicsEngineVulkan/src/EngineFactoryVk.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2019-2025 Diligent Graphics LLC
2+
* Copyright 2019-2026 Diligent Graphics LLC
33
* Copyright 2015-2019 Egor Yusov
44
*
55
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -116,10 +116,14 @@ class EngineFactoryVkImpl final : public EngineFactoryBase<IEngineFactoryVk>
116116
m_EnableDeviceSimulation = true;
117117
}
118118

119-
virtual Version DILIGENT_CALL_TYPE GetVulkanVersion() const override final
119+
virtual const Version& DILIGENT_CALL_TYPE GetVulkanVersion() override final
120120
{
121-
uint32_t ApiVersion = VulkanUtilities::Instance::GetApiVersion();
122-
return {VK_VERSION_MAJOR(ApiVersion), VK_VERSION_MINOR(ApiVersion)};
121+
if (m_VulkanVersion == Version{})
122+
{
123+
uint32_t ApiVersion = VulkanUtilities::Instance::GetApiVersion();
124+
m_VulkanVersion = {VK_VERSION_MAJOR(ApiVersion), VK_VERSION_MINOR(ApiVersion)};
125+
}
126+
return m_VulkanVersion;
123127
}
124128

125129
virtual void DILIGENT_CALL_TYPE CreateDearchiver(const DearchiverCreateInfo& CreateInfo,
@@ -140,7 +144,8 @@ class EngineFactoryVkImpl final : public EngineFactoryBase<IEngineFactoryVk>
140144
// To track that there is only one render device
141145
RefCntWeakPtr<IRenderDevice> m_wpDevice;
142146

143-
bool m_EnableDeviceSimulation = false;
147+
bool m_EnableDeviceSimulation = false;
148+
Version m_VulkanVersion = {};
144149
};
145150

146151

Tests/IncludeTest/GraphicsEngine/BottomLevelASH_test.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2019-2022 Diligent Graphics LLC
2+
* Copyright 2019-2026 Diligent Graphics LLC
33
* Copyright 2015-2019 Egor Yusov
44
*
55
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -41,7 +41,7 @@ void TestBottomLevelAS_CInterface(IBottomLevelAS* pBLAS)
4141
Uint32 GeomCount = IBottomLevelAS_GetActualGeometryCount(pBLAS);
4242
(void)GeomCount;
4343

44-
ScratchBufferSizes ScratchSizes = IBottomLevelAS_GetScratchBufferSizes(pBLAS);
44+
const ScratchBufferSizes* ScratchSizes = IBottomLevelAS_GetScratchBufferSizes(pBLAS);
4545
(void)ScratchSizes;
4646

4747
Uint64 NativeHandle = IBottomLevelAS_GetNativeHandle(pBLAS);

Tests/IncludeTest/GraphicsEngine/TopLevelASH_test.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2019-2022 Diligent Graphics LLC
2+
* Copyright 2019-2026 Diligent Graphics LLC
33
* Copyright 2015-2019 Egor Yusov
44
*
55
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -35,10 +35,10 @@ void TestTopLevelAS_CInterface(ITopLevelAS* pTLAS)
3535
TLASInstanceDesc InstDesc = ITopLevelAS_GetInstanceDesc(pTLAS, "Name");
3636
(void)InstDesc;
3737

38-
TLASBuildInfo BuildInfo = ITopLevelAS_GetBuildInfo(pTLAS);
38+
const TLASBuildInfo* BuildInfo = ITopLevelAS_GetBuildInfo(pTLAS);
3939
(void)BuildInfo;
4040

41-
ScratchBufferSizes ScratchSizes = ITopLevelAS_GetScratchBufferSizes(pTLAS);
41+
const ScratchBufferSizes* ScratchSizes = ITopLevelAS_GetScratchBufferSizes(pTLAS);
4242
(void)ScratchSizes;
4343

4444
Uint64 Handle = ITopLevelAS_GetNativeHandle(pTLAS);

0 commit comments

Comments
 (0)