Skip to content

Commit c9847c9

Browse files
author
devsh
committed
Thanks to realizing that only TLASes can be written into a descriptor set, I could remove all weird templating and inheritance in asset::IXXXAccelerationStructures
1 parent a3be452 commit c9847c9

10 files changed

+146
-128
lines changed

include/nbl/asset/IAccelerationStructure.h

Lines changed: 61 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -20,39 +20,53 @@
2020
namespace nbl::asset
2121
{
2222

23-
class IAccelerationStructure : public IDescriptor
23+
class IAccelerationStructure : public virtual core::IReferenceCounted
2424
{
2525
public:
26+
// build flags, we don't expose flags that don't make sense for certain levels
27+
enum class BUILD_FLAGS : uint8_t
28+
{
29+
ALLOW_UPDATE_BIT = 0x1u << 0u,
30+
ALLOW_COMPACTION_BIT = 0x1u << 1u,
31+
PREFER_FAST_TRACE_BIT = 0x1u << 2u,
32+
PREFER_FAST_BUILD_BIT = 0x1u << 3u,
33+
LOW_MEMORY_BIT = 0x1u << 4u,
34+
// Provided by VK_NV_ray_tracing_motion_blur, but is ignored for BLASes and we always override and deduce from TLAS creation flag because of
35+
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkAccelerationStructureBuildGeometryInfoKHR-dstAccelerationStructure-04927
36+
//MOTION_BIT = 0x1u<<5u,
37+
ALL_MASK = (01u<<5u)-1,
38+
};
39+
2640
// we don't expose the GENERIC type because Vulkan only intends it for API-translation layers like VKD3D or MoltenVK
2741
virtual bool isBLAS() const = 0;
2842

29-
//!
30-
inline E_CATEGORY getTypeCategory() const override { return EC_ACCELERATION_STRUCTURE; }
43+
virtual bool usesMotion() const = 0;
3144

3245
protected:
3346
IAccelerationStructure() = default;
3447
};
3548

36-
template<class AccelerationStructure>
37-
class IBottomLevelAccelerationStructure : public AccelerationStructure
49+
NBL_ENUM_ADD_BITWISE_OPERATORS(IAccelerationStructure::BUILD_FLAGS);
50+
51+
// To avoid having duplicate instantiations of flags, etc.
52+
class IBottomLevelAccelerationStructure : public IAccelerationStructure
3853
{
39-
static_assert(std::is_base_of_v<IAccelerationStructure,AccelerationStructure>);
54+
using base_build_flags_t = IAccelerationStructure::BUILD_FLAGS;
55+
4056
public:
41-
inline bool isBLAS() const override {return true;}
57+
inline bool isBLAS() const override { return true; }
4258

4359
// build flags, we don't expose flags that don't make sense for certain levels
4460
enum class BUILD_FLAGS : uint16_t
4561
{
46-
ALLOW_UPDATE_BIT = 0x1u<<0u,
47-
ALLOW_COMPACTION_BIT = 0x1u<<1u,
48-
PREFER_FAST_TRACE_BIT = 0x1u<<2u,
49-
PREFER_FAST_BUILD_BIT = 0x1u<<3u,
50-
LOW_MEMORY_BIT = 0x1u<<4u,
62+
ALLOW_UPDATE_BIT = base_build_flags_t::ALLOW_UPDATE_BIT,
63+
ALLOW_COMPACTION_BIT = base_build_flags_t::ALLOW_COMPACTION_BIT,
64+
PREFER_FAST_TRACE_BIT = base_build_flags_t::PREFER_FAST_TRACE_BIT,
65+
PREFER_FAST_BUILD_BIT = base_build_flags_t::PREFER_FAST_BUILD_BIT,
66+
LOW_MEMORY_BIT = base_build_flags_t::LOW_MEMORY_BIT,
5167
// Synthetic flag we use to indicate that the build data are AABBs instead of triangles, we've taken away the per-geometry choice thanks to:
5268
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03792
5369
GEOMETRY_TYPE_IS_AABB_BIT = 0x1u<<5u,
54-
// Provided by VK_NV_ray_tracing_motion_blur, but is ignored for BLASes
55-
//MOTION_BIT = 0x1u<<5u
5670
// Provided by VK_EXT_opacity_micromap
5771
ALLOW_OPACITY_MICROMAP_UPDATE_BIT = 0x1u<<6u,
5872
ALLOW_DISABLE_OPACITY_MICROMAPS_BIT = 0x1u<<7u,
@@ -62,18 +76,7 @@ class IBottomLevelAccelerationStructure : public AccelerationStructure
6276
// Provided by VK_KHR_ray_tracing_position_fetch
6377
ALLOW_DATA_ACCESS = 0x1u<<11u,
6478
};
65-
static inline bool validBuildFlags(const core::bitflag<BUILD_FLAGS> flags)
66-
{
67-
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkAccelerationStructureBuildGeometryInfoKHR-flags-03796
68-
if (flags.hasFlags(BUILD_FLAGS::PREFER_FAST_BUILD_BIT) && flags.hasFlags(BUILD_FLAGS::PREFER_FAST_TRACE_BIT))
69-
return false;
7079

71-
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkAccelerationStructureBuildGeometryInfoKHR-flags-07334
72-
if (flags.hasFlags(BUILD_FLAGS::ALLOW_OPACITY_MICROMAP_UPDATE_BIT) && flags.hasFlags(BUILD_FLAGS::ALLOW_OPACITY_MICROMAP_DATA_UPDATE_BIT))
73-
return false;
74-
75-
return true;
76-
}
7780

7881
// Apparently Vulkan allows setting these on TLAS Geometry (which are instances) but applying them to a TLAS doesn't make any SENSE AT ALL!
7982
enum class GEOMETRY_FLAGS : uint8_t
@@ -132,42 +135,40 @@ class IBottomLevelAccelerationStructure : public AccelerationStructure
132135
using AABB_t = core::aabbox3d<float>;
133136

134137
protected:
135-
using AccelerationStructure::AccelerationStructure;
138+
using base_build_flags_t = IAccelerationStructure::BUILD_FLAGS;
139+
using IAccelerationStructure::IAccelerationStructure;
136140
virtual ~IBottomLevelAccelerationStructure() = default;
141+
142+
static inline bool validBuildFlags(const core::bitflag<BUILD_FLAGS> flags)
143+
{
144+
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkAccelerationStructureBuildGeometryInfoKHR-flags-03796
145+
if (flags.hasFlags(BUILD_FLAGS::PREFER_FAST_BUILD_BIT) && flags.hasFlags(BUILD_FLAGS::PREFER_FAST_TRACE_BIT))
146+
return false;
147+
148+
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkAccelerationStructureBuildGeometryInfoKHR-flags-07334
149+
if (flags.hasFlags(BUILD_FLAGS::ALLOW_OPACITY_MICROMAP_UPDATE_BIT) && flags.hasFlags(BUILD_FLAGS::ALLOW_OPACITY_MICROMAP_DATA_UPDATE_BIT))
150+
return false;
151+
152+
return true;
153+
}
137154
};
155+
NBL_ENUM_ADD_BITWISE_OPERATORS(IBottomLevelAccelerationStructure::BUILD_FLAGS);
138156

139157
// forward declare for `static_assert`
140158
class ICPUBottomLevelAccelerationStructure;
141159

142-
// TODO: maybe we should introduce a base class so that flags and Instance declarations aren't doubled up
143-
template<class AccelerationStructure>
144-
class ITopLevelAccelerationStructure : public AccelerationStructure
160+
class ITopLevelAccelerationStructure : public IDescriptor, public IAccelerationStructure
145161
{
146-
static_assert(std::is_base_of_v<IAccelerationStructure,AccelerationStructure>);
162+
using base_build_flags_t = IAccelerationStructure::BUILD_FLAGS;
147163

148164
public:
149-
inline bool isBLAS() const override {return false;}
165+
//!
166+
inline E_CATEGORY getTypeCategory() const override {return EC_ACCELERATION_STRUCTURE;}
150167

151-
// build flags, we don't expose flags that don't make sense for certain levels
152-
enum class BUILD_FLAGS : uint8_t
153-
{
154-
ALLOW_UPDATE_BIT = 0x1u<<0u,
155-
ALLOW_COMPACTION_BIT = 0x1u<<1u,
156-
PREFER_FAST_TRACE_BIT = 0x1u<<2u,
157-
PREFER_FAST_BUILD_BIT = 0x1u<<3u,
158-
LOW_MEMORY_BIT = 0x1u<<4u,
159-
// Provided by VK_NV_ray_tracing_motion_blur, but we always override and deduce from creation flag because of
160-
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkAccelerationStructureBuildGeometryInfoKHR-dstAccelerationStructure-04927
161-
//MOTION_BIT = 0x1u<<5u,
162-
};
163-
static inline bool validBuildFlags(const core::bitflag<BUILD_FLAGS> flags)
164-
{
165-
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkAccelerationStructureBuildGeometryInfoKHR-flags-03796
166-
if (flags.hasFlags(BUILD_FLAGS::PREFER_FAST_BUILD_BIT) && flags.hasFlags(BUILD_FLAGS::PREFER_FAST_TRACE_BIT))
167-
return false;
168+
inline bool isBLAS() const override {return false;}
168169

169-
return true;
170-
}
170+
// No extra flags for TLAS builds
171+
using BUILD_FLAGS = base_build_flags_t;
171172

172173
enum class INSTANCE_FLAGS : uint8_t
173174
{
@@ -253,7 +254,7 @@ class ITopLevelAccelerationStructure : public AccelerationStructure
253254
switch (type)
254255
{
255256
case INSTANCE_TYPE::SRT_MOTION:
256-
return sizeof(SRTMotionInstance<ptrdiff_t>);
257+
return sizeof( SRTMotionInstance<ptrdiff_t>);
257258
break;
258259
case INSTANCE_TYPE::MATRIX_MOTION:
259260
return sizeof(MatrixMotionInstance<ptrdiff_t>);
@@ -265,8 +266,16 @@ class ITopLevelAccelerationStructure : public AccelerationStructure
265266
}
266267

267268
protected:
268-
using AccelerationStructure::AccelerationStructure;
269+
using IAccelerationStructure::IAccelerationStructure;
269270
virtual ~ITopLevelAccelerationStructure() = default;
271+
272+
static inline bool validBuildFlags(const core::bitflag<BUILD_FLAGS> flags)
273+
{
274+
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkAccelerationStructureBuildGeometryInfoKHR-flags-03796
275+
if (flags.hasFlags(BUILD_FLAGS::PREFER_FAST_BUILD_BIT) && flags.hasFlags(BUILD_FLAGS::PREFER_FAST_TRACE_BIT))
276+
return false;
277+
return true;
278+
}
270279
};
271280

272281
} // end namespace nbl::asset

include/nbl/asset/ICPUAccelerationStructure.h

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,14 @@
1313
namespace nbl::asset
1414
{
1515

16-
class ICPUAccelerationStructure : public IAsset, public IAccelerationStructure
16+
class ICPUBottomLevelAccelerationStructure final : public IAsset, public IBottomLevelAccelerationStructure//TODO: sort this out later, public IPreHashed
1717
{
1818
public:
19-
// WARNING: This call is expensive, especially for TLASes!
20-
virtual bool usesMotion() const = 0;
19+
static inline bool validBuildFlags(const core::bitflag<BUILD_FLAGS> flags) {return validBuildFlags(flags);}
2120

22-
protected:
23-
using IAccelerationStructure::IAccelerationStructure;
24-
};
25-
NBL_ENUM_ADD_BITWISE_OPERATORS(IBottomLevelAccelerationStructure<ICPUAccelerationStructure>::BUILD_FLAGS);
26-
NBL_ENUM_ADD_BITWISE_OPERATORS(ITopLevelAccelerationStructure<ICPUAccelerationStructure>::BUILD_FLAGS);
21+
//
22+
inline ICPUBottomLevelAccelerationStructure() = default;
2723

28-
class ICPUBottomLevelAccelerationStructure final : public IBottomLevelAccelerationStructure<ICPUAccelerationStructure>//TODO: sort this out later, public IPreHashed
29-
{
30-
public:
3124
//
3225
inline core::bitflag<BUILD_FLAGS> getBuildFlags() const { return m_buildFlags; }
3326
// you will not be able to set the `GEOMETRY_TYPE_IS_AABB_BIT` flag this way
@@ -110,7 +103,7 @@ class ICPUBottomLevelAccelerationStructure final : public IBottomLevelAccelerati
110103
return true;
111104
}
112105

113-
//
106+
// WARNING: This call is expensive
114107
inline bool usesMotion() const override
115108
{
116109
if (m_buildFlags.hasFlags(BUILD_FLAGS::GEOMETRY_TYPE_IS_AABB_BIT))
@@ -286,11 +279,14 @@ class ICPUBottomLevelAccelerationStructure final : public IBottomLevelAccelerati
286279
core::bitflag<BUILD_FLAGS> m_buildFlags = BUILD_FLAGS::PREFER_FAST_TRACE_BIT;
287280
};
288281

289-
class ICPUTopLevelAccelerationStructure final : public ITopLevelAccelerationStructure<ICPUAccelerationStructure>
282+
class ICPUTopLevelAccelerationStructure final : public IAsset, public ITopLevelAccelerationStructure
290283
{
291284
using blas_ref_t = core::smart_refctd_ptr<ICPUBottomLevelAccelerationStructure>;
292285

293286
public:
287+
static inline bool validBuildFlags(const core::bitflag<BUILD_FLAGS> flags) {return validBuildFlags(flags);}
288+
289+
//
294290
ICPUTopLevelAccelerationStructure() = default;
295291

296292
//
@@ -355,7 +351,7 @@ class ICPUTopLevelAccelerationStructure final : public ITopLevelAccelerationStru
355351
return true;
356352
}
357353

358-
//
354+
// WARNING: This call is expensive, much more than for BLASes!
359355
inline bool usesMotion() const override
360356
{
361357
for (const auto& instance : *m_instances)

include/nbl/video/IDescriptorPool.h

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -105,45 +105,45 @@ class NBL_API2 IDescriptorPool : public IBackendObject
105105
core::smart_refctd_ptr<asset::IDescriptor>* baseAddress;
106106
switch (type)
107107
{
108-
case asset::IDescriptor::E_TYPE::ET_SAMPLER:
109-
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_samplerStorage.get());
110-
break;
111-
case asset::IDescriptor::E_TYPE::ET_COMBINED_IMAGE_SAMPLER:
112-
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_textureStorage.get());
113-
break;
114-
case asset::IDescriptor::E_TYPE::ET_SAMPLED_IMAGE:
115-
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_textureStorage.get()) + m_creationParameters.maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_COMBINED_IMAGE_SAMPLER)];
116-
break;
117-
case asset::IDescriptor::E_TYPE::ET_STORAGE_IMAGE:
118-
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_storageImageStorage.get());
119-
break;
120-
case asset::IDescriptor::E_TYPE::ET_UNIFORM_TEXEL_BUFFER:
121-
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_UTB_STBStorage.get());
122-
break;
123-
case asset::IDescriptor::E_TYPE::ET_STORAGE_TEXEL_BUFFER:
124-
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_UTB_STBStorage.get()) + m_creationParameters.maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_UNIFORM_TEXEL_BUFFER)];
125-
break;
126-
case asset::IDescriptor::E_TYPE::ET_UNIFORM_BUFFER:
127-
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_UBO_SSBOStorage.get());
128-
break;
129-
case asset::IDescriptor::E_TYPE::ET_STORAGE_BUFFER:
130-
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_UBO_SSBOStorage.get()) + m_creationParameters.maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_UNIFORM_BUFFER)];
131-
break;
132-
case asset::IDescriptor::E_TYPE::ET_UNIFORM_BUFFER_DYNAMIC:
133-
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_UBO_SSBOStorage.get()) + (m_creationParameters.maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_UNIFORM_BUFFER)] + m_creationParameters.maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_STORAGE_BUFFER)]);
134-
break;
135-
case asset::IDescriptor::E_TYPE::ET_STORAGE_BUFFER_DYNAMIC:
136-
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_UBO_SSBOStorage.get()) + (m_creationParameters.maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_UNIFORM_BUFFER)] + m_creationParameters.maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_STORAGE_BUFFER)] + m_creationParameters.maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_UNIFORM_BUFFER_DYNAMIC)]);
137-
break;
138-
case asset::IDescriptor::E_TYPE::ET_INPUT_ATTACHMENT:
139-
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_storageImageStorage.get()) + m_creationParameters.maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_STORAGE_IMAGE)];
140-
break;
141-
case asset::IDescriptor::E_TYPE::ET_ACCELERATION_STRUCTURE:
142-
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_accelerationStructureStorage.get());
143-
break;
144-
default:
145-
assert(!"Invalid code path.");
146-
return nullptr;
108+
case asset::IDescriptor::E_TYPE::ET_SAMPLER:
109+
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_samplerStorage.get());
110+
break;
111+
case asset::IDescriptor::E_TYPE::ET_COMBINED_IMAGE_SAMPLER:
112+
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_textureStorage.get());
113+
break;
114+
case asset::IDescriptor::E_TYPE::ET_SAMPLED_IMAGE:
115+
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_textureStorage.get()) + m_creationParameters.maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_COMBINED_IMAGE_SAMPLER)];
116+
break;
117+
case asset::IDescriptor::E_TYPE::ET_STORAGE_IMAGE:
118+
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_storageImageStorage.get());
119+
break;
120+
case asset::IDescriptor::E_TYPE::ET_UNIFORM_TEXEL_BUFFER:
121+
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_UTB_STBStorage.get());
122+
break;
123+
case asset::IDescriptor::E_TYPE::ET_STORAGE_TEXEL_BUFFER:
124+
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_UTB_STBStorage.get()) + m_creationParameters.maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_UNIFORM_TEXEL_BUFFER)];
125+
break;
126+
case asset::IDescriptor::E_TYPE::ET_UNIFORM_BUFFER:
127+
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_UBO_SSBOStorage.get());
128+
break;
129+
case asset::IDescriptor::E_TYPE::ET_STORAGE_BUFFER:
130+
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_UBO_SSBOStorage.get()) + m_creationParameters.maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_UNIFORM_BUFFER)];
131+
break;
132+
case asset::IDescriptor::E_TYPE::ET_UNIFORM_BUFFER_DYNAMIC:
133+
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_UBO_SSBOStorage.get()) + (m_creationParameters.maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_UNIFORM_BUFFER)] + m_creationParameters.maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_STORAGE_BUFFER)]);
134+
break;
135+
case asset::IDescriptor::E_TYPE::ET_STORAGE_BUFFER_DYNAMIC:
136+
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_UBO_SSBOStorage.get()) + (m_creationParameters.maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_UNIFORM_BUFFER)] + m_creationParameters.maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_STORAGE_BUFFER)] + m_creationParameters.maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_UNIFORM_BUFFER_DYNAMIC)]);
137+
break;
138+
case asset::IDescriptor::E_TYPE::ET_INPUT_ATTACHMENT:
139+
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_storageImageStorage.get()) + m_creationParameters.maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_STORAGE_IMAGE)];
140+
break;
141+
case asset::IDescriptor::E_TYPE::ET_ACCELERATION_STRUCTURE:
142+
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_accelerationStructureStorage.get());
143+
break;
144+
default:
145+
assert(!"Invalid code path.");
146+
return nullptr;
147147
}
148148

149149
return baseAddress;
@@ -232,7 +232,7 @@ class NBL_API2 IDescriptorPool : public IBackendObject
232232
std::unique_ptr<core::StorageTrivializer<core::smart_refctd_ptr<IGPUImageView>>[]> m_storageImageStorage; // storage image | input attachment
233233
std::unique_ptr<core::StorageTrivializer<core::smart_refctd_ptr<IGPUBuffer>>[]> m_UBO_SSBOStorage; // ubo | ssbo | ubo dynamic | ssbo dynamic
234234
std::unique_ptr<core::StorageTrivializer<core::smart_refctd_ptr<IGPUBufferView>>[]> m_UTB_STBStorage; // utb | stb
235-
std::unique_ptr<core::StorageTrivializer<core::smart_refctd_ptr<IGPUAccelerationStructure>>[]> m_accelerationStructureStorage;
235+
std::unique_ptr<core::StorageTrivializer<core::smart_refctd_ptr<IGPUTopLevelAccelerationStructure>>[]> m_accelerationStructureStorage;
236236

237237
system::logger_opt_ptr m_logger;
238238
};

0 commit comments

Comments
 (0)