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