Skip to content

Commit f8f2447

Browse files
committed
Introduce IDescriptorPool::SCreateInfo.
1 parent 51a4960 commit f8f2447

File tree

7 files changed

+55
-73
lines changed

7 files changed

+55
-73
lines changed

include/nbl/scene/ITransformTree.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,8 +142,10 @@ class NBL_API ITransformTree : public virtual core::IReferenceCounted
142142
if (!outPool)
143143
return false;
144144

145-
video::IDescriptorPool::SDescriptorPoolSize size = {asset::IDescriptor::E_TYPE::ET_STORAGE_BUFFER,property_pool_t::PropertyCount+TransformTree::RenderDescriptorSetBindingCount};
146-
auto dsp = device->createDescriptorPool(video::IDescriptorPool::ECF_NONE,2u,1u,&size);
145+
video::IDescriptorPool::SCreateInfo createInfo;
146+
createInfo.maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_STORAGE_BUFFER)] = property_pool_t::PropertyCount + TransformTree::RenderDescriptorSetBindingCount;
147+
createInfo.maxSets = 2;
148+
auto dsp = device->createDescriptorPool(std::move(createInfo));
147149
if (!dsp)
148150
return false;
149151

include/nbl/video/IDescriptorPool.h

Lines changed: 21 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,11 @@ class NBL_API IDescriptorPool : public core::IReferenceCounted, public IBackendO
3030
ECF_HOST_ONLY_BIT_VALVE = 0x04
3131
};
3232

33-
struct SDescriptorPoolSize
33+
struct SCreateInfo
3434
{
35-
asset::IDescriptor::E_TYPE type;
36-
uint32_t count;
35+
core::bitflag<E_CREATE_FLAGS> flags = ECF_NONE;
36+
uint32_t maxSets = 0;
37+
uint32_t maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_COUNT)] = { 0 };
3738
};
3839

3940
struct SDescriptorOffsets
@@ -62,31 +63,25 @@ class NBL_API IDescriptorPool : public core::IReferenceCounted, public IBackendO
6263

6364
bool reset();
6465

65-
inline uint32_t getCapacity() const { return m_maxSets; }
66+
inline uint32_t getCapacity() const { return m_creationParameters.maxSets; }
6667

6768
protected:
68-
explicit IDescriptorPool(core::smart_refctd_ptr<const ILogicalDevice>&& dev, const IDescriptorPool::E_CREATE_FLAGS flags, uint32_t _maxSets,
69-
const uint32_t poolSizeCount, const IDescriptorPool::SDescriptorPoolSize* poolSizes)
70-
: IBackendObject(std::move(dev)), m_maxSets(_maxSets), m_flags(flags), m_version(0u)
69+
explicit IDescriptorPool(core::smart_refctd_ptr<const ILogicalDevice>&& dev, SCreateInfo&& createInfo)
70+
: IBackendObject(std::move(dev)), m_creationParameters(std::move(createInfo)), m_version(0u)
7171
{
72-
std::fill_n(m_maxDescriptorCount, static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_COUNT), 0u);
73-
74-
for (auto i = 0; i < poolSizeCount; ++i)
75-
m_maxDescriptorCount[static_cast<uint32_t>(poolSizes[i].type)] += poolSizes[i].count;
76-
7772
for (auto i = 0; i < static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_COUNT); ++i)
78-
m_descriptorAllocators[i] = std::make_unique<allocator_state_t>(m_maxDescriptorCount[i], m_flags & ECF_FREE_DESCRIPTOR_SET_BIT);
73+
m_descriptorAllocators[i] = std::make_unique<allocator_state_t>(m_creationParameters.maxDescriptorCount[i], m_creationParameters.flags.hasFlags(ECF_FREE_DESCRIPTOR_SET_BIT));
7974

8075
// For (possibly) mutable samplers.
81-
m_descriptorAllocators[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_COUNT)] = std::make_unique<allocator_state_t>(m_maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_COMBINED_IMAGE_SAMPLER)], m_flags & ECF_FREE_DESCRIPTOR_SET_BIT);
76+
m_descriptorAllocators[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_COUNT)] = std::make_unique<allocator_state_t>(m_creationParameters.maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_COMBINED_IMAGE_SAMPLER)], m_creationParameters.flags.hasFlags(ECF_FREE_DESCRIPTOR_SET_BIT));
8277

8378
// Initialize the storages.
84-
m_textureStorage = std::make_unique<core::StorageTrivializer<core::smart_refctd_ptr<video::IGPUImageView>>[]>(m_maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_COMBINED_IMAGE_SAMPLER)]);
85-
m_mutableSamplerStorage = std::make_unique<core::StorageTrivializer<core::smart_refctd_ptr<video::IGPUSampler>>[]>(m_maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_COMBINED_IMAGE_SAMPLER)]);
86-
m_storageImageStorage = std::make_unique<core::StorageTrivializer<core::smart_refctd_ptr<IGPUImageView>>[]>(m_maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_STORAGE_IMAGE)] + m_maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_INPUT_ATTACHMENT)]);
87-
m_UBO_SSBOStorage = std::make_unique<core::StorageTrivializer<core::smart_refctd_ptr<IGPUBuffer>>[]>(m_maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_UNIFORM_BUFFER)] + m_maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_STORAGE_BUFFER)] + m_maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_UNIFORM_BUFFER_DYNAMIC)] + m_maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_STORAGE_BUFFER_DYNAMIC)]);
88-
m_UTB_STBStorage = std::make_unique<core::StorageTrivializer<core::smart_refctd_ptr<IGPUBufferView>>[]>(m_maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_UNIFORM_TEXEL_BUFFER)] + m_maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_STORAGE_BUFFER_DYNAMIC)]);
89-
m_accelerationStructureStorage = std::make_unique<core::StorageTrivializer<core::smart_refctd_ptr<IGPUAccelerationStructure>>[]>(m_maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_ACCELERATION_STRUCTURE)]);
79+
m_textureStorage = std::make_unique<core::StorageTrivializer<core::smart_refctd_ptr<video::IGPUImageView>>[]>(m_creationParameters.maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_COMBINED_IMAGE_SAMPLER)]);
80+
m_mutableSamplerStorage = std::make_unique<core::StorageTrivializer<core::smart_refctd_ptr<video::IGPUSampler>>[]>(m_creationParameters.maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_COMBINED_IMAGE_SAMPLER)]);
81+
m_storageImageStorage = std::make_unique<core::StorageTrivializer<core::smart_refctd_ptr<IGPUImageView>>[]>(m_creationParameters.maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_STORAGE_IMAGE)] + m_creationParameters.maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_INPUT_ATTACHMENT)]);
82+
m_UBO_SSBOStorage = std::make_unique<core::StorageTrivializer<core::smart_refctd_ptr<IGPUBuffer>>[]>(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)] + m_creationParameters.maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_STORAGE_BUFFER_DYNAMIC)]);
83+
m_UTB_STBStorage = std::make_unique<core::StorageTrivializer<core::smart_refctd_ptr<IGPUBufferView>>[]>(m_creationParameters.maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_UNIFORM_TEXEL_BUFFER)] + m_creationParameters.maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_STORAGE_BUFFER_DYNAMIC)]);
84+
m_accelerationStructureStorage = std::make_unique<core::StorageTrivializer<core::smart_refctd_ptr<IGPUAccelerationStructure>>[]>(m_creationParameters.maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_ACCELERATION_STRUCTURE)]);
9085
}
9186

9287
virtual ~IDescriptorPool() {}
@@ -95,8 +90,6 @@ class NBL_API IDescriptorPool : public core::IReferenceCounted, public IBackendO
9590

9691
virtual bool reset_impl() = 0;
9792

98-
uint32_t m_maxSets;
99-
10093
private:
10194
inline core::smart_refctd_ptr<asset::IDescriptor>* getDescriptorStorage(const asset::IDescriptor::E_TYPE type) const
10295
{
@@ -113,22 +106,22 @@ class NBL_API IDescriptorPool : public core::IReferenceCounted, public IBackendO
113106
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_UTB_STBStorage.get());
114107
break;
115108
case asset::IDescriptor::E_TYPE::ET_STORAGE_TEXEL_BUFFER:
116-
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_UTB_STBStorage.get()) + m_maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_UNIFORM_TEXEL_BUFFER)];
109+
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)];
117110
break;
118111
case asset::IDescriptor::E_TYPE::ET_UNIFORM_BUFFER:
119112
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_UBO_SSBOStorage.get());
120113
break;
121114
case asset::IDescriptor::E_TYPE::ET_STORAGE_BUFFER:
122-
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_UBO_SSBOStorage.get()) + m_maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_UNIFORM_BUFFER)];
115+
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)];
123116
break;
124117
case asset::IDescriptor::E_TYPE::ET_UNIFORM_BUFFER_DYNAMIC:
125-
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_UBO_SSBOStorage.get()) + (m_maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_UNIFORM_BUFFER)] + m_maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_STORAGE_BUFFER)]);
118+
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)]);
126119
break;
127120
case asset::IDescriptor::E_TYPE::ET_STORAGE_BUFFER_DYNAMIC:
128-
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_UBO_SSBOStorage.get()) + (m_maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_UNIFORM_BUFFER)] + m_maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_STORAGE_BUFFER)] + m_maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_UNIFORM_BUFFER_DYNAMIC)]);
121+
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)]);
129122
break;
130123
case asset::IDescriptor::E_TYPE::ET_INPUT_ATTACHMENT:
131-
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_storageImageStorage.get()) + m_maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_STORAGE_IMAGE)];
124+
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)];
132125
break;
133126
case asset::IDescriptor::E_TYPE::ET_ACCELERATION_STRUCTURE:
134127
baseAddress = reinterpret_cast<core::smart_refctd_ptr<asset::IDescriptor>*>(m_accelerationStructureStorage.get());
@@ -215,8 +208,7 @@ class NBL_API IDescriptorPool : public core::IReferenceCounted, public IBackendO
215208
};
216209
std::unique_ptr<allocator_state_t> m_descriptorAllocators[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_COUNT) + 1];
217210

218-
const IDescriptorPool::E_CREATE_FLAGS m_flags;
219-
uint32_t m_maxDescriptorCount[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_COUNT)];
211+
const SCreateInfo m_creationParameters;
220212
std::atomic_uint32_t m_version;
221213

222214
std::unique_ptr<core::StorageTrivializer<core::smart_refctd_ptr<video::IGPUImageView>>[]> m_textureStorage;

include/nbl/video/ILogicalDevice.h

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ class NBL_API ILogicalDevice : public core::IReferenceCounted, public IDeviceMem
145145

146146
virtual core::smart_refctd_ptr<IDeferredOperation> createDeferredOperation() = 0;
147147
virtual core::smart_refctd_ptr<IGPUCommandPool> createCommandPool(uint32_t _familyIx, core::bitflag<IGPUCommandPool::E_CREATE_FLAGS> flags) = 0;
148-
virtual core::smart_refctd_ptr<IDescriptorPool> createDescriptorPool(IDescriptorPool::E_CREATE_FLAGS flags, uint32_t maxSets, uint32_t poolSizeCount, const IDescriptorPool::SDescriptorPoolSize* poolSizes) = 0;
148+
virtual core::smart_refctd_ptr<IDescriptorPool> createDescriptorPool(IDescriptorPool::SCreateInfo&& createInfo) = 0;
149149

150150
core::smart_refctd_ptr<IGPUFramebuffer> createFramebuffer(IGPUFramebuffer::SCreationParams&& params)
151151
{
@@ -234,36 +234,23 @@ class NBL_API ILogicalDevice : public core::IReferenceCounted, public IDeviceMem
234234

235235
core::smart_refctd_ptr<IDescriptorPool> createDescriptorPoolForDSLayouts(const IDescriptorPool::E_CREATE_FLAGS flags, const IGPUDescriptorSetLayout* const* const begin, const IGPUDescriptorSetLayout* const* const end, const uint32_t* setCounts=nullptr)
236236
{
237-
uint32_t totalSetCount = 0;
238-
std::vector<IDescriptorPool::SDescriptorPoolSize> poolSizes; // TODO: use a map
237+
IDescriptorPool::SCreateInfo createInfo;
238+
239239
auto setCountsIt = setCounts;
240240
for (auto* curLayout = begin; curLayout!=end; curLayout++,setCountsIt++)
241241
{
242242
const auto setCount = setCounts ? (*setCountsIt):1u;
243-
totalSetCount += setCount;
243+
createInfo.maxSets += setCount;
244244

245245
for (uint32_t t = 0u; t < static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_COUNT); ++t)
246246
{
247247
const auto type = static_cast<asset::IDescriptor::E_TYPE>(t);
248248
const auto& redirect = (*curLayout)->getDescriptorRedirect(type);
249-
const auto declaredBindingCount = redirect.getBindingCount();
250-
251-
auto ps = std::find_if(poolSizes.begin(), poolSizes.end(), [&](const IDescriptorPool::SDescriptorPoolSize& poolSize) { return poolSize.type == type; });
252-
if (ps != poolSizes.end())
253-
{
254-
for (uint32_t i = 0; i < declaredBindingCount; ++i)
255-
ps->count += setCount * redirect.getCount(i);
256-
}
257-
else
258-
{
259-
for (uint32_t i = 0; i < declaredBindingCount; ++i)
260-
poolSizes.push_back(IDescriptorPool::SDescriptorPoolSize{ type, setCount * redirect.getCount(i)});
261-
}
249+
createInfo.maxDescriptorCount[t] += setCount * redirect.getTotalCount();
262250
}
263-
264251
}
265252

266-
core::smart_refctd_ptr<IDescriptorPool> dsPool = createDescriptorPool(flags, totalSetCount, poolSizes.size(), poolSizes.data());
253+
auto dsPool = createDescriptorPool(std::move(createInfo));
267254
return dsPool;
268255
}
269256

src/nbl/video/CVulkanDescriptorPool.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ class ILogicalDevice;
1212
class CVulkanDescriptorPool : public IDescriptorPool
1313
{
1414
public:
15-
CVulkanDescriptorPool(core::smart_refctd_ptr<ILogicalDevice>&& dev, const IDescriptorPool::E_CREATE_FLAGS flags, uint32_t maxSets, const uint32_t poolSizeCount, const IDescriptorPool::SDescriptorPoolSize* poolSizes, VkDescriptorPool descriptorPool)
16-
: IDescriptorPool(std::move(dev), flags, maxSets, poolSizeCount, poolSizes), m_descriptorPool(descriptorPool)
15+
CVulkanDescriptorPool(core::smart_refctd_ptr<ILogicalDevice>&& dev, IDescriptorPool::SCreateInfo&& createInfo, VkDescriptorPool descriptorPool)
16+
: IDescriptorPool(std::move(dev), std::move(createInfo)), m_descriptorPool(descriptorPool)
1717
{}
1818

1919
~CVulkanDescriptorPool();

src/nbl/video/CVulkanLogicalDevice.h

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -223,33 +223,32 @@ class CVulkanLogicalDevice final : public ILogicalDevice
223223
}
224224
}
225225

226-
core::smart_refctd_ptr<IDescriptorPool> createDescriptorPool(
227-
IDescriptorPool::E_CREATE_FLAGS flags, uint32_t maxSets, uint32_t poolSizeCount,
228-
const IDescriptorPool::SDescriptorPoolSize* poolSizes) override
226+
core::smart_refctd_ptr<IDescriptorPool> createDescriptorPool(IDescriptorPool::SCreateInfo&& createInfo) override
229227
{
230-
constexpr uint32_t MAX_DESCRIPTOR_POOL_SIZE_COUNT = 100u;
228+
uint32_t poolSizeCount = 0;
229+
VkDescriptorPoolSize poolSizes[static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_COUNT)];
231230

232-
assert(poolSizeCount <= MAX_DESCRIPTOR_POOL_SIZE_COUNT);
233-
234-
// I wonder if I can memcpy the entire array
235-
VkDescriptorPoolSize vk_descriptorPoolSizes[MAX_DESCRIPTOR_POOL_SIZE_COUNT];
236-
for (uint32_t i = 0u; i < poolSizeCount; ++i)
231+
for (uint32_t t = 0; t < static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_COUNT); ++t)
237232
{
238-
vk_descriptorPoolSizes[i].type = getVkDescriptorTypeFromDescriptorType(poolSizes[i].type);
239-
vk_descriptorPoolSizes[i].descriptorCount = poolSizes[i].count;
233+
if (createInfo.maxDescriptorCount[t] == 0)
234+
continue;
235+
236+
auto& poolSize = poolSizes[poolSizeCount++];
237+
poolSize.type = getVkDescriptorTypeFromDescriptorType(static_cast<asset::IDescriptor::E_TYPE>(t));
238+
poolSize.descriptorCount = createInfo.maxDescriptorCount[t];
240239
}
241240

242241
VkDescriptorPoolCreateInfo vk_createInfo = { VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO };
243242
vk_createInfo.pNext = nullptr; // Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkDescriptorPoolInlineUniformBlockCreateInfoEXT or VkMutableDescriptorTypeCreateInfoVALVE
244-
vk_createInfo.flags = static_cast<VkDescriptorPoolCreateFlags>(flags);
245-
vk_createInfo.maxSets = maxSets;
243+
vk_createInfo.flags = static_cast<VkDescriptorPoolCreateFlags>(createInfo.flags.value);
244+
vk_createInfo.maxSets = createInfo.maxSets;
246245
vk_createInfo.poolSizeCount = poolSizeCount;
247-
vk_createInfo.pPoolSizes = vk_descriptorPoolSizes;
246+
vk_createInfo.pPoolSizes = poolSizes;
248247

249248
VkDescriptorPool vk_descriptorPool;
250249
if (m_devf.vk.vkCreateDescriptorPool(m_vkdev, &vk_createInfo, nullptr, &vk_descriptorPool) == VK_SUCCESS)
251250
{
252-
return core::make_smart_refctd_ptr<CVulkanDescriptorPool>(core::smart_refctd_ptr<CVulkanLogicalDevice>(this), flags, maxSets, poolSizeCount, poolSizes, vk_descriptorPool);
251+
return core::make_smart_refctd_ptr<CVulkanDescriptorPool>(core::smart_refctd_ptr<CVulkanLogicalDevice>(this), std::move(createInfo), vk_descriptorPool);
253252
}
254253
else
255254
{

0 commit comments

Comments
 (0)