Skip to content

Commit ccd3c3a

Browse files
committed
Modify ICPUVirtualTexture::getDescriptorSetWrites to directly update the given descriptor set and also renamed it.
1 parent 9128500 commit ccd3c3a

File tree

2 files changed

+33
-17
lines changed

2 files changed

+33
-17
lines changed

include/nbl/asset/utils/ICPUVirtualTexture.h

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -528,9 +528,38 @@ class ICPUVirtualTexture final : public IVirtualTexture<ICPUImageView, ICPUSampl
528528
return getDSlayoutBindings_internal<ICPUDescriptorSetLayout>(_outBindings, _outSamplers, _pgtBinding, _fsamplersBinding, _isamplersBinding, _usamplersBinding);
529529
}
530530

531-
auto getDescriptorSetWrites(ICPUDescriptorSet::SWriteDescriptorSet* _outWrites, ICPUDescriptorSet::SDescriptorInfo* _outInfo, ICPUDescriptorSet* _dstSet, uint32_t _pgtBinding = 0u, uint32_t _fsamplersBinding = 1u, uint32_t _isamplersBinding = 2u, uint32_t _usamplersBinding = 3u) const
531+
bool updateDescriptorSet(ICPUDescriptorSet* _dstSet, uint32_t _pgtBinding = 0u, uint32_t _fsamplersBinding = 1u, uint32_t _isamplersBinding = 2u, uint32_t _usamplersBinding = 3u) const
532532
{
533-
return getDescriptorSetWrites_internal<ICPUDescriptorSet>(_outWrites, _outInfo, _dstSet, _pgtBinding, _fsamplersBinding, _isamplersBinding, _usamplersBinding);
533+
// Update _pgtBinding.
534+
{
535+
auto pgtInfos = _dstSet->getDescriptorInfos(_pgtBinding, IDescriptor::E_TYPE::ET_COMBINED_IMAGE_SAMPLER);
536+
if (pgtInfos.empty())
537+
return false;
538+
539+
assert(pgtInfos.size() == 1ull);
540+
auto& info = pgtInfos.begin()[0];
541+
info.info.image.imageLayout = IImage::EL_UNDEFINED;
542+
info.info.image.sampler = nullptr;
543+
info.desc = core::smart_refctd_ptr<ICPUImageView>(getPageTableView());
544+
}
545+
546+
auto updateSamplersBinding = [&](const uint32_t binding, const auto& views)
547+
{
548+
auto infos = _dstSet->getDescriptorInfos(binding, IDescriptor::E_TYPE::ET_COMBINED_IMAGE_SAMPLER);
549+
550+
for (uint32_t i = 0; i < infos.size(); ++i)
551+
{
552+
auto& info = infos.begin()[i];
553+
554+
info.info.image.imageLayout = IImage::EL_UNDEFINED;
555+
info.info.image.sampler = nullptr;
556+
info.desc = views.begin()[i].view;
557+
}
558+
};
559+
560+
updateSamplersBinding(_fsamplersBinding, getFloatViews());
561+
updateSamplersBinding(_isamplersBinding, getIntViews());
562+
updateSamplersBinding(_usamplersBinding, getUintViews());
534563
}
535564

536565
protected:

src/nbl/ext/MitsubaLoader/CMitsubaLoader.cpp

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1189,21 +1189,8 @@ inline core::smart_refctd_ptr<asset::ICPUDescriptorSet> CMitsubaLoader::createDS
11891189
auto* ds0layout = _layout->getDescriptorSetLayout(0u);
11901190

11911191
auto ds0 = core::make_smart_refctd_ptr<ICPUDescriptorSet>(core::smart_refctd_ptr<asset::ICPUDescriptorSetLayout>(ds0layout));
1192-
{
1193-
auto count = _ctx.backend_ctx.vt.vt->getDescriptorSetWrites(nullptr, nullptr, nullptr);
1194-
1195-
auto writes = core::make_refctd_dynamic_array<core::smart_refctd_dynamic_array<asset::ICPUDescriptorSet::SWriteDescriptorSet>>(count.first);
1196-
auto info = core::make_refctd_dynamic_array<core::smart_refctd_dynamic_array<asset::ICPUDescriptorSet::SDescriptorInfo>>(count.second);
1197-
1198-
_ctx.backend_ctx.vt.vt->getDescriptorSetWrites(writes->data(), info->data(), ds0.get());
1199-
1200-
for (const auto& w : (*writes))
1201-
{
1202-
auto descRng = ds0->getDescriptors(w.binding);
1203-
for (uint32_t i = 0u; i < w.count; ++i)
1204-
descRng.begin()[w.arrayElement+i].assign(w.info[i], w.descriptorType);
1205-
}
1206-
}
1192+
_ctx.backend_ctx.vt.vt->updateDescriptorSet(ds0.get());
1193+
12071194
auto d = ds0->getDescriptors(PRECOMPUTED_VT_DATA_BINDING).begin();
12081195
{
12091196
auto precompDataBuf = core::make_smart_refctd_ptr<ICPUBuffer>(sizeof(asset::ICPUVirtualTexture::SPrecomputedData));

0 commit comments

Comments
 (0)