12 #ifndef RV_VKAccelerationStructure_h
13 #define RV_VKAccelerationStructure_h
45 { myIsOpaque = opaque; }
47 {
return myIsOpaque; }
49 { myIsSingleHit = singleHit; }
51 {
return myIsSingleHit; }
57 uint32_t num_vertices,
59 uint32_t num_indices);
68 uint32_t num_instances);
70 void fillGeometryInfo();
85 bool myIsOpaque =
true;
86 bool myIsSingleHit =
false;
99 { myIsUpdate = update; }
101 {
return myIsUpdate; }
103 { myIsTopLevel = top_level; }
105 {
return myIsTopLevel; }
107 { myPreference = preference; }
109 {
return myPreference; }
112 {
return myBuildSizeInfo.accelerationStructureSize; }
114 {
return !myIsUpdate ? myBuildSizeInfo.buildScratchSize :
115 myBuildSizeInfo.updateScratchSize; }
117 {
return myBuildRangeInfos.data(); }
169 VkAccelerationStructureKHR accel_struct);
177 bool myIsUpdate =
false;
178 bool myIsTopLevel =
false;
188 { myVkAccelStructInst.instanceCustomIndex =
index; }
190 { myVkAccelStructInst.mask =
mask; }
192 { myVkAccelStructInst.instanceShaderBindingTableRecordOffset =
offset; }
194 { myFaceCullingEnabled = enable; }
196 void fillInstanceInfo();
202 { myVkAccelStructInst.accelerationStructureReference =
ref; }
208 bool myFaceCullingEnabled =
true;
221 static constexpr
float theCompactSizeThreshold = 0.9f;
231 VkAccelerationStructureKHR vk_as,
237 { myShaderInfoIndex =
index; }
239 {
return myShaderInfoIndex; }
241 { myShaderInfo.tag = tag; }
243 { myShaderInfo.lightId = light_id; }
245 {
return myShaderInfo; }
247 {
return myVkAccelStruct; }
249 {
return myInfo->getScratchSize(); }
251 {
return myIsBuilt; }
256 exint getSize()
const;
260 void clearInstances();
266 { myIsInstDirty =
false; }
268 {
return myIsInstDirty; }
274 VkAccelerationStructureKHR& compact_vk_as,
278 VkAccelerationStructureKHR compact_vk_as,
282 exint gpuMemoryUsage()
const;
292 VkAccelerationStructureKHR myVkAccelStruct;
296 bool myIsBuilt =
false;
297 bool myIsInstDirty =
true;
298 uint32_t myShaderInfoIndex = 0;
302 exint getVisibilityMask()
const;
319 void updateCompact();
322 {
return myIsBuilt; }
324 {
return myIsBuiltCompact; }
327 {
return myTotalAccelStructSize; }
329 {
return myTotalScratchSize; }
330 exint getTotalCompactSize();
341 bool myIsBuilt =
false;
342 bool myIsBuiltCompact =
false;
344 exint myTotalAccelStructSize = 0;
345 exint myTotalScratchSize = 0;
346 exint myTotalCompactSize = 0;
void setSingleHit(bool singleHit)
exint getScratchSize() const
void setInstCustomIndex(exint index)
void setVisibilityMask(exint mask)
UT_UniquePtr< RV_VKBuffer > RV_VKBufferPtr
bool isBuiltCompact() const
VkAccelerationStructureKHR getVkAccelStruct()
void clearInstDirtyFlag()
RV_VKAccelerationStructure * myAccelStruct
uint32_t getShaderInfoIndex() const
std::unique_ptr< T, Deleter > UT_UniquePtr
A smart pointer for unique ownership of dynamically allocated objects.
UT_UniquePtr< RV_VKAccelerationStructureBuildInfo > clone() const
exint getTotalAccelStructSize() const
void setShaderInfoIndex(uint32_t index)
UT_UniquePtr< RV_VKAccelerationStructure > RV_VKAccelerationStructurePtr
void setAccelStructReference(VkDeviceAddress ref)
static const UT_Matrix4T< fpreal32 > & getIdentityMatrix()
void setLightId(int light_id)
void setOpaque(bool opaque)
const VkAccelerationStructureBuildRangeInfoKHR * getBuildRangeInfos()
RV_ResetAccelStructTask(RV_VKAccelerationStructure *accel_struct)
GLuint const GLchar * name
void setFaceCullingEnabled(bool enable)
exint getScratchSize() const
GA_API const UT_StringHolder transform
void setUpdate(bool update)
Handle to the main interface of Vulkan.
RV_AccelStructBuildPref getPreference() const
exint getTotalScratchSize() const
RV_AccelStructShaderInfo getShaderInfo() const
RV_VKCommandBuffer::Callback RVmakeResetAccelStructTask(RV_VKAccelerationStructure *accel_struct)
LeafData & operator=(const LeafData &)=delete
void setTransform(UT_Matrix4F transform)
void setPreference(RV_AccelStructBuildPref preference)
const UT_StringHolder & getName() const
void operator()(RV_Instance *)
void setSBTOffset(exint offset)
void setTopLevel(bool top_level)
FMT_INLINE void print(format_string< T...> fmt, T &&...args)
UT_Function< void(RV_Instance *)> Callback
const RV_ResourceID & getID() const