| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- // Copyright (C) 2009-2022, Panagiotis Christopoulos Charitos and contributors.
- // All rights reserved.
- // Code licensed under the BSD License.
- // http://www.anki3d.org/LICENSE
- #pragma once
- #include <AnKi/Gr/AccelerationStructure.h>
- #include <AnKi/Gr/Vulkan/VulkanObject.h>
- #include <AnKi/Gr/Vulkan/GpuMemoryManager.h>
- namespace anki {
- /// @addtogroup vulkan
- /// @{
- /// AccelerationStructure implementation.
- class AccelerationStructureImpl final :
- public AccelerationStructure,
- public VulkanObject<AccelerationStructure, AccelerationStructureImpl>
- {
- public:
- AccelerationStructureImpl(GrManager* manager, CString name)
- : AccelerationStructure(manager, name)
- {
- }
- ~AccelerationStructureImpl();
- Error init(const AccelerationStructureInitInfo& inf);
- VkAccelerationStructureKHR getHandle() const
- {
- ANKI_ASSERT(m_handle);
- return m_handle;
- }
- U32 getBuildScratchBufferSize() const
- {
- ANKI_ASSERT(m_scratchBufferSize > 0);
- return m_scratchBufferSize;
- }
- void generateBuildInfo(U64 scratchBufferAddress, VkAccelerationStructureBuildGeometryInfoKHR& buildInfo,
- VkAccelerationStructureBuildRangeInfoKHR& rangeInfo) const
- {
- buildInfo = m_buildInfo;
- buildInfo.scratchData.deviceAddress = scratchBufferAddress;
- rangeInfo = m_rangeInfo;
- }
- static void computeBarrierInfo(AccelerationStructureUsageBit before, AccelerationStructureUsageBit after,
- VkPipelineStageFlags& srcStages, VkAccessFlags& srcAccesses,
- VkPipelineStageFlags& dstStages, VkAccessFlags& dstAccesses);
- private:
- class ASBottomLevelInfo
- {
- public:
- BufferPtr m_positionsBuffer;
- BufferPtr m_indexBuffer;
- };
- class ASTopLevelInfo
- {
- public:
- BufferPtr m_instancesBuffer;
- DynamicArray<AccelerationStructurePtr> m_blas;
- };
- BufferPtr m_asBuffer;
- VkAccelerationStructureKHR m_handle = VK_NULL_HANDLE;
- VkDeviceAddress m_deviceAddress = 0;
- ASBottomLevelInfo m_bottomLevelInfo;
- ASTopLevelInfo m_topLevelInfo;
- /// @name Build-time info
- /// @{
- VkAccelerationStructureGeometryKHR m_geometry = {};
- VkAccelerationStructureBuildGeometryInfoKHR m_buildInfo = {};
- VkAccelerationStructureBuildRangeInfoKHR m_rangeInfo = {};
- U32 m_scratchBufferSize = 0;
- /// @}
- };
- /// @}
- } // end namespace anki
|