Skip to content

Commit afc837b

Browse files
author
devsh
committed
backport Clang fixes
1 parent 29077b1 commit afc837b

File tree

1 file changed

+79
-80
lines changed

1 file changed

+79
-80
lines changed

src/nbl/video/utilities/CAssetConverter.cpp

Lines changed: 79 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ bool CAssetConverter::patch_impl_t<ICPUShader>::valid(const ILogicalDevice* devi
5252
case IGPUShader::E_SHADER_STAGE::ESS_FRAGMENT:
5353
case IGPUShader::E_SHADER_STAGE::ESS_COMPUTE:
5454
return true;
55-
break;
5655
case IGPUShader::E_SHADER_STAGE::ESS_TESSELLATION_CONTROL:
5756
case IGPUShader::E_SHADER_STAGE::ESS_TESSELLATION_EVALUATION:
5857
if (features.tessellationShader)
@@ -653,7 +652,7 @@ class AssetVisitor : public CRTP
653652
case IDescriptor::EC_IMAGE:
654653
{
655654
auto imageView = static_cast<const ICPUImageView*>(untypedDesc);
656-
IGPUImage::E_USAGE_FLAGS usage;
655+
IGPUImage::E_USAGE_FLAGS usage = IGPUImage::E_USAGE_FLAGS::EUF_NONE; // silence a warning
657656
switch (type)
658657
{
659658
case IDescriptor::E_TYPE::ET_COMBINED_IMAGE_SAMPLER:
@@ -1593,26 +1592,26 @@ void CAssetConverter::CHashCache::eraseStale(const IPatchOverride* patchOverride
15931592
);
15941593
};
15951594
// to make the process more efficient we start ejecting from "lowest level" assets
1596-
rehash.operator()<ICPUSampler>();
1597-
rehash.operator()<ICPUDescriptorSetLayout>();
1598-
rehash.operator()<ICPUPipelineLayout>();
1595+
rehash.template operator()<ICPUSampler>();
1596+
rehash.template operator()<ICPUDescriptorSetLayout>();
1597+
rehash.template operator()<ICPUPipelineLayout>();
15991598
// shaders and images depend on buffers for data sourcing
1600-
rehash.operator()<ICPUBuffer>();
1601-
rehash.operator()<ICPUBufferView>();
1602-
rehash.operator()<ICPUImage>();
1603-
rehash.operator()<ICPUImageView>();
1604-
rehash.operator()<ICPUBottomLevelAccelerationStructure>();
1605-
rehash.operator()<ICPUTopLevelAccelerationStructure>();
1599+
rehash.template operator()<ICPUBuffer>();
1600+
rehash.template operator()<ICPUBufferView>();
1601+
rehash.template operator()<ICPUImage>();
1602+
rehash.template operator()<ICPUImageView>();
1603+
rehash.template operator()<ICPUBottomLevelAccelerationStructure>();
1604+
rehash.template operator()<ICPUTopLevelAccelerationStructure>();
16061605
// only once all the descriptor types have been hashed, we can hash sets
1607-
rehash.operator()<ICPUDescriptorSet>();
1606+
rehash.template operator()<ICPUDescriptorSet>();
16081607
// naturally any pipeline depends on shaders and pipeline cache
1609-
rehash.operator()<ICPUShader>();
1610-
rehash.operator()<ICPUPipelineCache>();
1611-
rehash.operator()<ICPUComputePipeline>();
1608+
rehash.template operator()<ICPUShader>();
1609+
rehash.template operator()<ICPUPipelineCache>();
1610+
rehash.template operator()<ICPUComputePipeline>();
16121611
// graphics pipeline needs a renderpass
1613-
rehash.operator()<ICPURenderpass>();
1614-
rehash.operator()<ICPUGraphicsPipeline>();
1615-
// rehash.operator()<ICPUFramebuffer>();
1612+
rehash.template operator()<ICPURenderpass>();
1613+
rehash.template operator()<ICPUGraphicsPipeline>();
1614+
// rehash.template operator()<ICPUFramebuffer>();
16161615
}
16171616

16181617

@@ -2230,7 +2229,7 @@ class MetaDeviceMemoryAllocator final
22302229
.image = std::get<asset_cached_t<ICPUImage>*>(toBind)->get(),
22312230
.binding = binding
22322231
};
2233-
bindSuccess = device->bindImageMemory(1,&info);
2232+
bindSuccess = device->bindImageMemory(std::span(&info,1));
22342233
}
22352234
break;
22362235
default:
@@ -2386,28 +2385,28 @@ auto CAssetConverter::reserve(const SInputs& inputs) -> SReserveResult
23862385
switch (entry.instance.asset->getAssetType())
23872386
{
23882387
case ICPUDescriptorSetLayout::AssetType:
2389-
visit.operator()<ICPUDescriptorSetLayout>(entry);
2388+
visit.template operator()<ICPUDescriptorSetLayout>(entry);
23902389
break;
23912390
case ICPUPipelineLayout::AssetType:
2392-
visit.operator()<ICPUPipelineLayout>(entry);
2391+
visit.template operator()<ICPUPipelineLayout>(entry);
23932392
break;
23942393
case ICPUComputePipeline::AssetType:
2395-
visit.operator()<ICPUComputePipeline>(entry);
2394+
visit.template operator()<ICPUComputePipeline>(entry);
23962395
break;
23972396
case ICPUGraphicsPipeline::AssetType:
2398-
visit.operator()<ICPUGraphicsPipeline>(entry);
2397+
visit.template operator()<ICPUGraphicsPipeline>(entry);
23992398
break;
24002399
case ICPUDescriptorSet::AssetType:
2401-
visit.operator()<ICPUDescriptorSet>(entry);
2400+
visit.template operator()<ICPUDescriptorSet>(entry);
24022401
break;
24032402
case ICPUBufferView::AssetType:
2404-
visit.operator()<ICPUBufferView>(entry);
2403+
visit.template operator()<ICPUBufferView>(entry);
24052404
break;
24062405
case ICPUImageView::AssetType:
2407-
visit.operator()<ICPUImageView>(entry);
2406+
visit.template operator()<ICPUImageView>(entry);
24082407
break;
24092408
case ICPUTopLevelAccelerationStructure::AssetType:
2410-
visit.operator()<ICPUTopLevelAccelerationStructure>(entry);
2409+
visit.template operator()<ICPUTopLevelAccelerationStructure>(entry);
24112410
break;
24122411
// these assets have no dependants, should have never been pushed on the stack
24132412
default:
@@ -2687,7 +2686,7 @@ auto CAssetConverter::reserve(const SInputs& inputs) -> SReserveResult
26872686
{
26882687
for (auto& entry : conversionRequests)
26892688
for (auto i=0ull; i<entry.second.copyCount; i++)
2690-
assign.operator()<true>(entry.first,entry.second.firstCopyIx,i,device->createSampler(entry.second.canonicalAsset->getParams()));
2689+
assign.template operator()<true>(entry.first,entry.second.firstCopyIx,i,device->createSampler(entry.second.canonicalAsset->getParams()));
26912690
}
26922691
if constexpr (std::is_same_v<AssetType,ICPUBuffer>)
26932692
{
@@ -3135,7 +3134,7 @@ auto CAssetConverter::reserve(const SInputs& inputs) -> SReserveResult
31353134
{
31363135
// since we don't have dependants we don't care about our group ID
31373136
// we create threadsafe pipeline caches, because we have no idea how they may be used
3138-
assign.operator()<true>(entry.first,entry.second.firstCopyIx,i,device->createPipelineCache(asset,false));
3137+
assign.template operator()<true>(entry.first,entry.second.firstCopyIx,i,device->createPipelineCache(asset,false));
31393138
}
31403139
}
31413140
}
@@ -3180,7 +3179,7 @@ auto CAssetConverter::reserve(const SInputs& inputs) -> SReserveResult
31803179
{
31813180
// since we don't have dependants we don't care about our group ID
31823181
// we create threadsafe pipeline caches, because we have no idea how they may be used
3183-
assign.operator()<true>(entry.first,entry.second.firstCopyIx,i,device->createRenderpass(asset->getCreationParameters()));
3182+
assign.template operator()<true>(entry.first,entry.second.firstCopyIx,i,device->createRenderpass(asset->getCreationParameters()));
31843183
}
31853184
}
31863185
}
@@ -3331,7 +3330,7 @@ auto CAssetConverter::reserve(const SInputs& inputs) -> SReserveResult
33313330
gpuObj.get()->setObjectDebugName(debugName.str().c_str());
33323331
}
33333332
// insert into staging cache
3334-
stagingCache.emplace(gpuObj.get(),CCache<AssetType>::key_t(contentHash,uniqueCopyGroupID));
3333+
stagingCache.emplace(gpuObj.get(),typename CCache<AssetType>::key_t(contentHash,uniqueCopyGroupID));
33353334
// propagate back to dfsCache
33363335
created.gpuObj = std::move(gpuObj);
33373336
// record if a device memory allocation will be needed
@@ -3359,10 +3358,10 @@ auto CAssetConverter::reserve(const SInputs& inputs) -> SReserveResult
33593358
// The order of these calls is super important to go BOTTOM UP in terms of hashing and conversion dependants.
33603359
// Both so we can hash in O(Depth) and not O(Depth^2) but also so we have all the possible dependants ready.
33613360
// If two Asset chains are independent then we order them from most catastrophic failure to least.
3362-
dedupCreateProp.operator()<ICPUBuffer>();
3363-
dedupCreateProp.operator()<ICPUBottomLevelAccelerationStructure>();
3364-
dedupCreateProp.operator()<ICPUTopLevelAccelerationStructure>();
3365-
dedupCreateProp.operator()<ICPUImage>();
3361+
dedupCreateProp.template operator()<ICPUBuffer>();
3362+
dedupCreateProp.template operator()<ICPUBottomLevelAccelerationStructure>();
3363+
dedupCreateProp.template operator()<ICPUTopLevelAccelerationStructure>();
3364+
dedupCreateProp.template operator()<ICPUImage>();
33663365
// now allocate the memory for buffers and images
33673366
deferredAllocator.finalize();
33683367

@@ -3441,18 +3440,18 @@ auto CAssetConverter::reserve(const SInputs& inputs) -> SReserveResult
34413440
retval.m_queueFlags |= IQueue::FAMILY_FLAGS::COMPUTE_BIT;
34423441
}
34433442

3444-
dedupCreateProp.operator()<ICPUBufferView>();
3445-
dedupCreateProp.operator()<ICPUImageView>();
3446-
dedupCreateProp.operator()<ICPUShader>();
3447-
dedupCreateProp.operator()<ICPUSampler>();
3448-
dedupCreateProp.operator()<ICPUDescriptorSetLayout>();
3449-
dedupCreateProp.operator()<ICPUPipelineLayout>();
3450-
dedupCreateProp.operator()<ICPUPipelineCache>();
3451-
dedupCreateProp.operator()<ICPUComputePipeline>();
3452-
dedupCreateProp.operator()<ICPURenderpass>();
3453-
dedupCreateProp.operator()<ICPUGraphicsPipeline>();
3454-
dedupCreateProp.operator()<ICPUDescriptorSet>();
3455-
// dedupCreateProp.operator()<ICPUFramebuffer>();
3443+
dedupCreateProp.template operator()<ICPUBufferView>();
3444+
dedupCreateProp.template operator()<ICPUImageView>();
3445+
dedupCreateProp.template operator()<ICPUShader>();
3446+
dedupCreateProp.template operator()<ICPUSampler>();
3447+
dedupCreateProp.template operator()<ICPUDescriptorSetLayout>();
3448+
dedupCreateProp.template operator()<ICPUPipelineLayout>();
3449+
dedupCreateProp.template operator()<ICPUPipelineCache>();
3450+
dedupCreateProp.template operator()<ICPUComputePipeline>();
3451+
dedupCreateProp.template operator()<ICPURenderpass>();
3452+
dedupCreateProp.template operator()<ICPUGraphicsPipeline>();
3453+
dedupCreateProp.template operator()<ICPUDescriptorSet>();
3454+
// dedupCreateProp.template operator()<ICPUFramebuffer>();
34563455
}
34573456

34583457
// write out results
@@ -3482,7 +3481,7 @@ auto CAssetConverter::reserve(const SInputs& inputs) -> SReserveResult
34823481
// if something with this content hash is in the stagingCache, then it must match the `found->gpuObj`
34833482
if (auto finalCacheIt=stagingCache.find(gpuObj.get()); finalCacheIt!=stagingCache.end())
34843483
{
3485-
const bool matches = finalCacheIt->second==CCache<AssetType>::key_t(found.contentHash,uniqueCopyGroupID);
3484+
const bool matches = finalCacheIt->second==typename CCache<AssetType>::key_t(found.contentHash,uniqueCopyGroupID);
34863485
assert(matches);
34873486
}
34883487
}
@@ -3665,7 +3664,7 @@ ISemaphore::future_t<IQueue::RESULT> CAssetConverter::convert_impl(SReserveResul
36653664
auto findInStaging = [&reservations]<Asset AssetType>(const typename asset_traits<AssetType>::video_t* gpuObj)->core::blake3_hash_t*
36663665
{
36673666
auto& stagingCache = std::get<SReserveResult::staging_cache_t<AssetType>>(reservations.m_stagingCaches);
3668-
const auto found = stagingCache.find(const_cast<asset_traits<AssetType>::video_t*>(gpuObj));
3667+
const auto found = stagingCache.find(const_cast<typename asset_traits<AssetType>::video_t*>(gpuObj));
36693668
assert(found!=stagingCache.end());
36703669
return const_cast<core::blake3_hash_t*>(&found->second.value);
36713670
};
@@ -3678,7 +3677,7 @@ ISemaphore::future_t<IQueue::RESULT> CAssetConverter::convert_impl(SReserveResul
36783677
outputReverseMap[gpuObj.value.get()] = i++;
36793678
}
36803679
);
3681-
auto markFailureInStaging = [&reservations,&outputReverseMap,logger]<Asset AssetType>(const char* message, smart_refctd_ptr<const AssetType>& canonical, const asset_traits<AssetType>::video_t* gpuObj, core::blake3_hash_t* hash)->void
3680+
auto markFailureInStaging = [&reservations,&outputReverseMap,logger]<Asset AssetType>(const char* message, smart_refctd_ptr<const AssetType>& canonical, const typename asset_traits<AssetType>::video_t* gpuObj, core::blake3_hash_t* hash)->void
36823681
{
36833682
// wipe the smart pointer to the canonical, make sure we release that memory ASAP if no other user is around
36843683
canonical = nullptr;
@@ -3766,7 +3765,7 @@ ISemaphore::future_t<IQueue::RESULT> CAssetConverter::convert_impl(SReserveResul
37663765
.size = item.gpuObj->getCreationParams().size,
37673766
.buffer = core::smart_refctd_ptr<IGPUBuffer>(buffer)
37683767
};
3769-
auto pFoundHash = findInStaging.operator()<ICPUBuffer>(buffer);
3768+
auto pFoundHash = findInStaging.template operator()<ICPUBuffer>(buffer);
37703769
//
37713770
const auto ownerQueueFamily = checkOwnership(buffer,params.getFinalOwnerQueueFamily(buffer,*pFoundHash),transferFamily);
37723771
if (ownerQueueFamily==QueueFamilyInvalid)
@@ -3946,7 +3945,7 @@ ISemaphore::future_t<IQueue::RESULT> CAssetConverter::convert_impl(SReserveResul
39463945
// basiscs
39473946
const auto* cpuImg = item.canonical.get();
39483947
auto* image = item.gpuObj;
3949-
auto pFoundHash = findInStaging.operator()<ICPUImage>(image);
3948+
auto pFoundHash = findInStaging.template operator()<ICPUImage>(image);
39503949
// get params
39513950
const auto& creationParams = image->getCreationParameters();
39523951
const auto format = creationParams.format;
@@ -4429,7 +4428,7 @@ ISemaphore::future_t<IQueue::RESULT> CAssetConverter::convert_impl(SReserveResul
44294428
if (!success)
44304429
for (const auto& info : buildInfos)
44314430
{
4432-
const auto pFoundHash = findInStaging.operator()<ICPUTopLevelAccelerationStructure>(info.dstAS);
4431+
const auto pFoundHash = findInStaging.template operator()<ICPUTopLevelAccelerationStructure>(info.dstAS);
44334432
smart_refctd_ptr<const ICPUTopLevelAccelerationStructure> dummy; // already null at this point
44344433
markFailureInStaging("AS Build Command Recording",dummy,info.dstAS,pFoundHash);
44354434
}
@@ -4477,7 +4476,7 @@ ISemaphore::future_t<IQueue::RESULT> CAssetConverter::convert_impl(SReserveResul
44774476
for (auto& item : blasToBuild)
44784477
{
44794478
auto* as = item.gpuObj;
4480-
auto pFoundHash = findInStaging.operator()<ICPUBottomLevelAccelerationStructure>(as);
4479+
auto pFoundHash = findInStaging.template operator()<ICPUBottomLevelAccelerationStructure>(as);
44814480
if (item.asBuildParams.host)
44824481
{
44834482
auto dOp = device->createDeferredOperation();
@@ -4580,7 +4579,7 @@ ISemaphore::future_t<IQueue::RESULT> CAssetConverter::convert_impl(SReserveResul
45804579
{
45814580
dedupBLASesUsed.clear();
45824581
const auto as = tlasToBuild.gpuObj;
4583-
const auto pFoundHash = findInStaging.operator()<ICPUTopLevelAccelerationStructure>(as);
4582+
const auto pFoundHash = findInStaging.template operator()<ICPUTopLevelAccelerationStructure>(as);
45844583
const auto& backingRange = as->getCreationParams().bufferRange;
45854584
// checking ownership for the future on old buffer, but compacted will be made with same sharing creation parameters
45864585
const auto finalOwnerQueueFamily = checkOwnership(backingRange.buffer.get(),params.getFinalOwnerQueueFamily(as,*pFoundHash),computeFamily);
@@ -4938,7 +4937,7 @@ if (worstSize>minScratchSize)
49384937
auto missingDependent = [&reservations]<Asset AssetType>(const typename asset_traits<AssetType>::video_t* dep)->bool
49394938
{
49404939
auto& stagingCache = std::get<SReserveResult::staging_cache_t<AssetType>>(reservations.m_stagingCaches);
4941-
auto found = stagingCache.find(const_cast<asset_traits<AssetType>::video_t*>(dep));
4940+
auto found = stagingCache.find(const_cast<typename asset_traits<AssetType>::video_t*>(dep));
49424941
// this only checks if whether we had to convert and failed
49434942
if (found!=stagingCache.end() && found->second.value==CHashCache::NoContentHash)
49444943
return true;
@@ -4965,9 +4964,9 @@ if (worstSize>minScratchSize)
49654964
}
49664965

49674966
if constexpr (std::is_same_v<AssetType,ICPUBufferView>)
4968-
depsMissing = missingDependent.operator()<ICPUBuffer>(item.first->getUnderlyingBuffer());
4967+
depsMissing = missingDependent.template operator()<ICPUBuffer>(item.first->getUnderlyingBuffer());
49694968
if constexpr (std::is_same_v<AssetType,ICPUImageView>)
4970-
depsMissing = missingDependent.operator()<ICPUImage>(item.first->getCreationParameters().image.get());
4969+
depsMissing = missingDependent.template operator()<ICPUImage>(item.first->getCreationParameters().image.get());
49714970
if constexpr (std::is_same_v<AssetType,ICPUDescriptorSet>)
49724971
{
49734972
const IGPUDescriptorSetLayout* layout = item.first->getLayout();
@@ -4977,7 +4976,7 @@ if (worstSize>minScratchSize)
49774976
const auto* samplers = item.first->getAllMutableCombinedSamplers();
49784977
for (auto i=0u; !depsMissing && i<count; i++)
49794978
if (samplers[i])
4980-
depsMissing = missingDependent.operator()<ICPUSampler>(samplers[i].get());
4979+
depsMissing = missingDependent.template operator()<ICPUSampler>(samplers[i].get());
49814980
}
49824981
for (auto i=0u; !depsMissing && i<static_cast<uint32_t>(asset::IDescriptor::E_TYPE::ET_COUNT); i++)
49834982
{
@@ -4993,16 +4992,16 @@ if (worstSize>minScratchSize)
49934992
switch (asset::IDescriptor::GetTypeCategory(type))
49944993
{
49954994
case asset::IDescriptor::EC_BUFFER:
4996-
depsMissing = missingDependent.operator()<ICPUBuffer>(static_cast<const IGPUBuffer*>(untypedDesc));
4995+
depsMissing = missingDependent.template operator()<ICPUBuffer>(static_cast<const IGPUBuffer*>(untypedDesc));
49974996
break;
49984997
case asset::IDescriptor::EC_SAMPLER:
4999-
depsMissing = missingDependent.operator()<ICPUSampler>(static_cast<const IGPUSampler*>(untypedDesc));
4998+
depsMissing = missingDependent.template operator()<ICPUSampler>(static_cast<const IGPUSampler*>(untypedDesc));
50004999
break;
50015000
case asset::IDescriptor::EC_IMAGE:
5002-
depsMissing = missingDependent.operator()<ICPUImageView>(static_cast<const IGPUImageView*>(untypedDesc));
5001+
depsMissing = missingDependent.template operator()<ICPUImageView>(static_cast<const IGPUImageView*>(untypedDesc));
50035002
break;
50045003
case asset::IDescriptor::EC_BUFFER_VIEW:
5005-
depsMissing = missingDependent.operator()<ICPUBufferView>(static_cast<const IGPUBufferView*>(untypedDesc));
5004+
depsMissing = missingDependent.template operator()<ICPUBufferView>(static_cast<const IGPUBufferView*>(untypedDesc));
50065005
break;
50075006
case asset::IDescriptor::EC_ACCELERATION_STRUCTURE:
50085007
{
@@ -5059,20 +5058,20 @@ if (worstSize>minScratchSize)
50595058
}
50605059
};
50615060
// again, need to go bottom up so we can check dependencies being successes
5062-
mergeCache.operator()<ICPUBuffer>();
5063-
mergeCache.operator()<ICPUImage>();
5064-
mergeCache.operator()<ICPUBottomLevelAccelerationStructure>();
5065-
mergeCache.operator()<ICPUTopLevelAccelerationStructure>();
5066-
mergeCache.operator()<ICPUBufferView>();
5067-
mergeCache.operator()<ICPUImageView>();
5068-
mergeCache.operator()<ICPUShader>();
5069-
mergeCache.operator()<ICPUSampler>();
5070-
mergeCache.operator()<ICPUDescriptorSetLayout>();
5071-
mergeCache.operator()<ICPUPipelineLayout>();
5072-
mergeCache.operator()<ICPUPipelineCache>();
5073-
mergeCache.operator()<ICPUComputePipeline>();
5074-
mergeCache.operator()<ICPURenderpass>();
5075-
mergeCache.operator()<ICPUGraphicsPipeline>();
5061+
mergeCache.template operator()<ICPUBuffer>();
5062+
mergeCache.template operator()<ICPUImage>();
5063+
mergeCache.template operator()<ICPUBottomLevelAccelerationStructure>();
5064+
mergeCache.template operator()<ICPUTopLevelAccelerationStructure>();
5065+
mergeCache.template operator()<ICPUBufferView>();
5066+
mergeCache.template operator()<ICPUImageView>();
5067+
mergeCache.template operator()<ICPUShader>();
5068+
mergeCache.template operator()<ICPUSampler>();
5069+
mergeCache.template operator()<ICPUDescriptorSetLayout>();
5070+
mergeCache.template operator()<ICPUPipelineLayout>();
5071+
mergeCache.template operator()<ICPUPipelineCache>();
5072+
mergeCache.template operator()<ICPUComputePipeline>();
5073+
mergeCache.template operator()<ICPURenderpass>();
5074+
mergeCache.template operator()<ICPUGraphicsPipeline>();
50765075
// write the TLASes into Descriptor Set finally
50775076
if (auto& tlasWriteMap=reservations.m_deferredTLASDescriptorWrites; !tlasWriteMap.empty())
50785077
{
@@ -5085,7 +5084,7 @@ if (worstSize>minScratchSize)
50855084
// I know what I'm doing, this member has no influence on the set key hash
50865085
auto& tlas = const_cast<smart_refctd_ptr<IGPUTopLevelAccelerationStructure>&>(inWrite.tlas);
50875086
assert(tlas);
5088-
if (missingDependent.operator()<ICPUTopLevelAccelerationStructure>(tlas.get()))
5087+
if (missingDependent.template operator()<ICPUTopLevelAccelerationStructure>(tlas.get()))
50895088
{
50905089
tlas = nullptr;
50915090
continue;
@@ -5108,10 +5107,10 @@ if (worstSize>minScratchSize)
51085107
for (auto& inWrite : tlasWriteMap)
51095108
const_cast<smart_refctd_ptr<IGPUTopLevelAccelerationStructure>&>(inWrite.tlas) = nullptr;
51105109
}
5111-
mergeCache.operator()<ICPUDescriptorSet>();
5110+
mergeCache.template operator()<ICPUDescriptorSet>();
51125111
// needed for the IGPUDescriptorSets to check if TLAS exists/was written, can be released now
51135112
reservations.m_deferredTLASDescriptorWrites.clear();
5114-
// mergeCache.operator()<ICPUFramebuffer>();
5113+
// mergeCache.template operator()<ICPUFramebuffer>();
51155114

51165115
// no submit was necessary, so should signal the extra semaphores from the host
51175116
if (!retval.blocking())

0 commit comments

Comments
 (0)