VkAccelerationStructure.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. // Copyright (C) 2009-present, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #pragma once
  6. #include <AnKi/Gr/AccelerationStructure.h>
  7. #include <AnKi/Gr/Vulkan/VkCommon.h>
  8. namespace anki {
  9. /// @addtogroup vulkan
  10. /// @{
  11. /// AccelerationStructure implementation.
  12. class AccelerationStructureImpl final : public AccelerationStructure
  13. {
  14. friend class AccelerationStructure;
  15. public:
  16. AccelerationStructureImpl(CString name)
  17. : AccelerationStructure(name)
  18. {
  19. }
  20. ~AccelerationStructureImpl();
  21. Error init(const AccelerationStructureInitInfo& inf);
  22. const VkAccelerationStructureKHR& getHandle() const
  23. {
  24. ANKI_ASSERT(m_handle);
  25. return m_handle;
  26. }
  27. void generateBuildInfo(U64 scratchBufferAddress, VkAccelerationStructureBuildGeometryInfoKHR& buildInfo,
  28. VkAccelerationStructureBuildRangeInfoKHR& rangeInfo) const;
  29. static VkMemoryBarrier computeBarrierInfo(AccelerationStructureUsageBit before, AccelerationStructureUsageBit after,
  30. VkPipelineStageFlags& srcStages, VkPipelineStageFlags& dstStages);
  31. static void getMemoryRequirement(const AccelerationStructureInitInfo& init, PtrSize& asBufferSize, PtrSize& buildScratchBufferSize);
  32. private:
  33. class ASBottomLevelInfo
  34. {
  35. public:
  36. BufferInternalPtr m_positionsBuffer;
  37. BufferInternalPtr m_indexBuffer;
  38. };
  39. class ASTopLevelInfo
  40. {
  41. public:
  42. BufferInternalPtr m_instancesBuffer;
  43. };
  44. BufferInternalPtr m_asBuffer;
  45. PtrSize m_asBufferOffset = kMaxPtrSize;
  46. VkAccelerationStructureKHR m_handle = VK_NULL_HANDLE;
  47. VkDeviceAddress m_deviceAddress = 0;
  48. ASBottomLevelInfo m_blas;
  49. ASTopLevelInfo m_tlas;
  50. /// @name Build-time info
  51. /// @{
  52. VkAccelerationStructureGeometryKHR m_geometry = {};
  53. VkAccelerationStructureBuildGeometryInfoKHR m_buildInfo = {};
  54. VkAccelerationStructureBuildRangeInfoKHR m_rangeInfo = {};
  55. /// @}
  56. };
  57. /// @}
  58. } // end namespace anki