@@ -1085,36 +1085,29 @@ class CAssetConverter : public core::IReferenceCounted
1085
1085
core::tuple_transform_t <staging_cache_t ,supported_asset_types> m_stagingCaches;
1086
1086
1087
1087
// 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
1099
1090
{
1091
+ core::smart_refctd_ptr<const asset::ICPUImage> canonical = nullptr ;
1100
1092
uint16_t recomputeMips = 0 ;
1101
1093
};
1102
- core::vector< SConvReqImage> m_imageConversions;
1094
+ core::unordered_map<IGPUImage*, SConvReqImage> m_imageConversions;
1103
1095
template <typename CPUAccelerationStructure>
1104
- struct SConvReqAccelerationStructure : SConversionRequestBase<CPUAccelerationStructure>
1096
+ struct SConvReqAccelerationStructure
1105
1097
{
1106
1098
using build_f = typename asset_traits<CPUAccelerationStructure>::video_t ::BUILD_FLAGS;
1107
1099
inline void setBuildFlags (const build_f _flags) {buildFlags = static_cast <uint16_t >(_flags);}
1108
1100
inline build_f getBuildFlags () const {return static_cast <build_f>(buildFlags);}
1109
1101
1102
+ core::smart_refctd_ptr<const CPUAccelerationStructure> canonical = nullptr ;
1110
1103
uint64_t scratchSize : 45 ;
1111
1104
uint64_t compact : 1 ;
1112
1105
uint64_t buildFlags : 16 = 0 ;
1113
1106
};
1114
1107
using SConvReqBLAS = SConvReqAccelerationStructure<asset::ICPUBottomLevelAccelerationStructure>;
1115
- core::vector< SConvReqBLAS> m_blasConversions[2 ];
1108
+ core::unordered_map<IGPUBottomLevelAccelerationStructure*, SConvReqBLAS> m_blasConversions[2 ];
1116
1109
using SConvReqTLAS = SConvReqAccelerationStructure<asset::ICPUTopLevelAccelerationStructure>;
1117
- core::vector< SConvReqTLAS> m_tlasConversions[2 ];
1110
+ core::unordered_map<IGPUTopLevelAccelerationStructure*, SConvReqTLAS> m_tlasConversions[2 ];
1118
1111
1119
1112
// array index 0 for device builds, 1 for host builds
1120
1113
uint64_t m_minASBuildScratchSize[2 ] = {0 ,0 };
@@ -1136,25 +1129,22 @@ class CAssetConverter : public core::IReferenceCounted
1136
1129
{
1137
1130
inline bool operator ==(const SDeferredTLASWrite& other) const
1138
1131
{
1139
- return dstSet==other. dstSet && binding==other.binding && arrayElement==other.arrayElement ;
1132
+ return binding==other.binding && arrayElement==other.arrayElement ;
1140
1133
}
1141
1134
1142
- IGPUDescriptorSet* dstSet;
1143
1135
uint32_t binding;
1144
1136
uint32_t arrayElement;
1145
- core::smart_refctd_ptr<const IGPUTopLevelAccelerationStructure> tlas;
1137
+ core::smart_refctd_ptr<IGPUTopLevelAccelerationStructure> tlas;
1146
1138
};
1147
1139
struct SDeferredTLASWriteHasher
1148
1140
{
1149
1141
inline size_t operator ()(const SDeferredTLASWrite& write) const
1150
1142
{
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 );
1155
1144
}
1156
1145
};
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;
1158
1148
1159
1149
//
1160
1150
core::bitflag<IQueue::FAMILY_FLAGS> m_queueFlags = IQueue::FAMILY_FLAGS::NONE;
0 commit comments