Skip to content

Commit 8555fad

Browse files
author
devsh
committed
turned conversion requests into unordered_maps so they're easier to knock out
1 parent b044144 commit 8555fad

File tree

2 files changed

+156
-124
lines changed

2 files changed

+156
-124
lines changed

include/nbl/video/utilities/CAssetConverter.h

Lines changed: 13 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1085,36 +1085,29 @@ class CAssetConverter : public core::IReferenceCounted
10851085
core::tuple_transform_t<staging_cache_t,supported_asset_types> m_stagingCaches;
10861086

10871087
// need a more explicit list of GPU objects that need device-assisted conversion
1088-
template<asset::Asset AssetType>
1089-
struct SConversionRequestBase
1090-
{
1091-
// canonical asset (the one that provides content)
1092-
core::smart_refctd_ptr<const AssetType> canonical;
1093-
// gpu object to transfer canonical's data to or build it from
1094-
asset_traits<AssetType>::video_t* gpuObj;
1095-
};
1096-
using SConvReqBuffer = SConversionRequestBase<asset::ICPUBuffer>;
1097-
core::vector<SConvReqBuffer> m_bufferConversions;
1098-
struct SConvReqImage : SConversionRequestBase<asset::ICPUImage>
1088+
core::unordered_map<IGPUBuffer*,core::smart_refctd_ptr<const asset::ICPUBuffer>> m_bufferConversions;
1089+
struct SConvReqImage
10991090
{
1091+
core::smart_refctd_ptr<const asset::ICPUImage> canonical = nullptr;
11001092
uint16_t recomputeMips = 0;
11011093
};
1102-
core::vector<SConvReqImage> m_imageConversions;
1094+
core::unordered_map<IGPUImage*,SConvReqImage> m_imageConversions;
11031095
template<typename CPUAccelerationStructure>
1104-
struct SConvReqAccelerationStructure : SConversionRequestBase<CPUAccelerationStructure>
1096+
struct SConvReqAccelerationStructure
11051097
{
11061098
using build_f = typename asset_traits<CPUAccelerationStructure>::video_t::BUILD_FLAGS;
11071099
inline void setBuildFlags(const build_f _flags) {buildFlags = static_cast<uint16_t>(_flags);}
11081100
inline build_f getBuildFlags() const {return static_cast<build_f>(buildFlags);}
11091101

1102+
core::smart_refctd_ptr<const CPUAccelerationStructure> canonical = nullptr;
11101103
uint64_t scratchSize : 45;
11111104
uint64_t compact : 1;
11121105
uint64_t buildFlags : 16 = 0;
11131106
};
11141107
using SConvReqBLAS = SConvReqAccelerationStructure<asset::ICPUBottomLevelAccelerationStructure>;
1115-
core::vector<SConvReqBLAS> m_blasConversions[2];
1108+
core::unordered_map<IGPUBottomLevelAccelerationStructure*,SConvReqBLAS> m_blasConversions[2];
11161109
using SConvReqTLAS = SConvReqAccelerationStructure<asset::ICPUTopLevelAccelerationStructure>;
1117-
core::vector<SConvReqTLAS> m_tlasConversions[2];
1110+
core::unordered_map<IGPUTopLevelAccelerationStructure*,SConvReqTLAS> m_tlasConversions[2];
11181111

11191112
// array index 0 for device builds, 1 for host builds
11201113
uint64_t m_minASBuildScratchSize[2] = {0,0};
@@ -1136,25 +1129,22 @@ class CAssetConverter : public core::IReferenceCounted
11361129
{
11371130
inline bool operator==(const SDeferredTLASWrite& other) const
11381131
{
1139-
return dstSet==other.dstSet && binding==other.binding && arrayElement==other.arrayElement;
1132+
return binding==other.binding && arrayElement==other.arrayElement;
11401133
}
11411134

1142-
IGPUDescriptorSet* dstSet;
11431135
uint32_t binding;
11441136
uint32_t arrayElement;
1145-
core::smart_refctd_ptr<const IGPUTopLevelAccelerationStructure> tlas;
1137+
core::smart_refctd_ptr<IGPUTopLevelAccelerationStructure> tlas;
11461138
};
11471139
struct SDeferredTLASWriteHasher
11481140
{
11491141
inline size_t operator()(const SDeferredTLASWrite& write) const
11501142
{
1151-
size_t retval = std::bit_cast<size_t>(write.dstSet);
1152-
core::hash_combine(retval,write.binding);
1153-
core::hash_combine(retval,write.arrayElement);
1154-
return retval;
1143+
return std::hash<uint64_t>()((uint64_t(write.binding)<<32)|write.arrayElement);
11551144
}
11561145
};
1157-
core::unordered_set<SDeferredTLASWrite,SDeferredTLASWriteHasher> m_deferredTLASDescriptorWrites;
1146+
using deferred_tlas_write_set_t = core::unordered_set<SDeferredTLASWrite,SDeferredTLASWriteHasher>;
1147+
core::unordered_map<IGPUDescriptorSet*,deferred_tlas_write_set_t> m_deferredTLASDescriptorWrites;
11581148

11591149
//
11601150
core::bitflag<IQueue::FAMILY_FLAGS> m_queueFlags = IQueue::FAMILY_FLAGS::NONE;

0 commit comments

Comments
 (0)