From 44bf7cf539949a6f26862201729fce5000b493f0 Mon Sep 17 00:00:00 2001 From: assiduous Date: Fri, 6 Nov 2020 20:25:14 -0800 Subject: Few minor updates to TLAS and BLAS implementations --- .../GraphicsEngine/include/BottomLevelASBase.hpp | 8 ++++++++ Graphics/GraphicsEngine/include/TopLevelASBase.hpp | 8 ++++++++ .../include/BottomLevelASD3D12Impl.hpp | 8 +------- .../include/TopLevelASD3D12Impl.hpp | 7 +------ .../src/BottomLevelASD3D12Impl.cpp | 20 ++++++++------------ .../GraphicsEngineD3D12/src/TopLevelASD3D12Impl.cpp | 4 ---- .../include/BottomLevelASVkImpl.hpp | 4 ---- .../include/TopLevelASVkImpl.hpp | 6 +----- .../GraphicsEngineVulkan/src/BottomLevelASVkImpl.cpp | 10 +++++----- 9 files changed, 32 insertions(+), 43 deletions(-) (limited to 'Graphics') diff --git a/Graphics/GraphicsEngine/include/BottomLevelASBase.hpp b/Graphics/GraphicsEngine/include/BottomLevelASBase.hpp index 3ec0efd2..caee8620 100644 --- a/Graphics/GraphicsEngine/include/BottomLevelASBase.hpp +++ b/Graphics/GraphicsEngine/include/BottomLevelASBase.hpp @@ -117,6 +117,12 @@ public: return this->m_State; } + /// Implementation of IBottomLevelAS::GetScratchBufferSizes() + virtual ScratchBufferSizes DILIGENT_CALL_TYPE GetScratchBufferSizes() const override + { + return this->m_ScratchSize; + } + bool IsInKnownState() const { return this->m_State != RESOURCE_STATE_UNKNOWN; @@ -192,6 +198,8 @@ protected: void* m_pRawPtr = nullptr; + ScratchBufferSizes m_ScratchSize; + #ifdef DILIGENT_DEVELOPMENT std::atomic m_Version{0}; #endif diff --git a/Graphics/GraphicsEngine/include/TopLevelASBase.hpp b/Graphics/GraphicsEngine/include/TopLevelASBase.hpp index 83205cd2..efba30c7 100644 --- a/Graphics/GraphicsEngine/include/TopLevelASBase.hpp +++ b/Graphics/GraphicsEngine/include/TopLevelASBase.hpp @@ -185,6 +185,12 @@ public: return this->m_State; } + /// Implementation of ITopLevelAS::GetScratchBufferSizes(). + virtual ScratchBufferSizes DILIGENT_CALL_TYPE GetScratchBufferSizes() const override + { + return m_ScratchSize; + } + bool IsInKnownState() const { return this->m_State != RESOURCE_STATE_UNKNOWN; @@ -248,6 +254,8 @@ protected: RESOURCE_STATE m_State = RESOURCE_STATE_UNKNOWN; Uint32 m_HitShadersPerInstance = 0; + ScratchBufferSizes m_ScratchSize; + StringPool m_StringPool; struct InstanceDesc diff --git a/Graphics/GraphicsEngineD3D12/include/BottomLevelASD3D12Impl.hpp b/Graphics/GraphicsEngineD3D12/include/BottomLevelASD3D12Impl.hpp index b631bdcc..c16d8473 100644 --- a/Graphics/GraphicsEngineD3D12/include/BottomLevelASD3D12Impl.hpp +++ b/Graphics/GraphicsEngineD3D12/include/BottomLevelASD3D12Impl.hpp @@ -51,10 +51,7 @@ public: bool bIsDeviceInternal = false); ~BottomLevelASD3D12Impl(); - virtual void DILIGENT_CALL_TYPE QueryInterface(const INTERFACE_ID& IID, IObject** ppInterface) override final; - - /// Implementation of IBottomLevelAS::GetScratchBufferSizes() in DirectX 12 backend. - virtual ScratchBufferSizes DILIGENT_CALL_TYPE GetScratchBufferSizes() const override { return m_ScratchSize; } + IMPLEMENT_QUERY_INTERFACE_IN_PLACE(IID_BottomLevelASD3D12, TBottomLevelASBase); /// Implementation of IBottomLevelASD3D12::GetD3D12BLAS(). virtual ID3D12Resource* DILIGENT_CALL_TYPE GetD3D12BLAS() override final { return GetD3D12Resource(); } @@ -66,9 +63,6 @@ public: { return GetD3D12Resource()->GetGPUVirtualAddress(); } - -private: - ScratchBufferSizes m_ScratchSize; }; } // namespace Diligent diff --git a/Graphics/GraphicsEngineD3D12/include/TopLevelASD3D12Impl.hpp b/Graphics/GraphicsEngineD3D12/include/TopLevelASD3D12Impl.hpp index c61ab368..3fa15e5e 100644 --- a/Graphics/GraphicsEngineD3D12/include/TopLevelASD3D12Impl.hpp +++ b/Graphics/GraphicsEngineD3D12/include/TopLevelASD3D12Impl.hpp @@ -52,10 +52,7 @@ public: bool bIsDeviceInternal = false); ~TopLevelASD3D12Impl(); - virtual void DILIGENT_CALL_TYPE QueryInterface(const INTERFACE_ID& IID, IObject** ppInterface) override final; - - /// Implementation of ITopLevelASD3D12::GetScratchBufferSizes() in DirectX 12 backend. - virtual ScratchBufferSizes DILIGENT_CALL_TYPE GetScratchBufferSizes() const override { return m_ScratchSize; } + IMPLEMENT_QUERY_INTERFACE_IN_PLACE(IID_TopLevelASD3D12, TTopLevelASBase); /// Implementation of ITopLevelASD3D12D3D12::GetD3D12TLAS(). virtual ID3D12Resource* DILIGENT_CALL_TYPE GetD3D12TLAS() override final { return GetD3D12Resource(); } @@ -75,8 +72,6 @@ public: } private: - ScratchBufferSizes m_ScratchSize; - // Allocation in a CPU-only descriptor heap DescriptorHeapAllocation m_DescriptorHandle; }; diff --git a/Graphics/GraphicsEngineD3D12/src/BottomLevelASD3D12Impl.cpp b/Graphics/GraphicsEngineD3D12/src/BottomLevelASD3D12Impl.cpp index 1fc9f876..02e45b0e 100644 --- a/Graphics/GraphicsEngineD3D12/src/BottomLevelASD3D12Impl.cpp +++ b/Graphics/GraphicsEngineD3D12/src/BottomLevelASD3D12Impl.cpp @@ -28,11 +28,9 @@ #include "pch.h" #include "BottomLevelASD3D12Impl.hpp" #include "RenderDeviceD3D12Impl.hpp" -#include "DeviceContextD3D12Impl.hpp" #include "D3D12TypeConversions.hpp" #include "GraphicsAccessories.hpp" #include "DXGITypeConversions.hpp" -#include "EngineMemory.h" #include "StringTools.hpp" namespace Diligent @@ -55,16 +53,16 @@ BottomLevelASD3D12Impl::BottomLevelASD3D12Impl(IReferenceCounters* pRef { D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO d3d12BottomLevelPrebuildInfo = {}; D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS d3d12BottomLevelInputs = {}; - std::vector Geometries; + std::vector d3d12Geometries; if (m_Desc.pTriangles != nullptr) { - Geometries.resize(m_Desc.TriangleCount); + d3d12Geometries.resize(m_Desc.TriangleCount); Uint32 MaxPrimitiveCount = 0; for (uint32_t i = 0; i < m_Desc.TriangleCount; ++i) { auto& src = m_Desc.pTriangles[i]; - auto& dst = Geometries[i]; + auto& dst = d3d12Geometries[i]; dst.Type = D3D12_RAYTRACING_GEOMETRY_TYPE_TRIANGLES; dst.Flags = D3D12_RAYTRACING_GEOMETRY_FLAG_NONE; @@ -83,12 +81,12 @@ BottomLevelASD3D12Impl::BottomLevelASD3D12Impl(IReferenceCounters* pRef } else if (m_Desc.pBoxes != nullptr) { - Geometries.resize(m_Desc.BoxCount); + d3d12Geometries.resize(m_Desc.BoxCount); Uint32 MaxBoxCount = 0; for (uint32_t i = 0; i < m_Desc.BoxCount; ++i) { auto& src = m_Desc.pBoxes[i]; - auto& dst = Geometries[i]; + auto& dst = d3d12Geometries[i]; dst.Type = D3D12_RAYTRACING_GEOMETRY_TYPE_PROCEDURAL_PRIMITIVE_AABBS; dst.Flags = D3D12_RAYTRACING_GEOMETRY_FLAG_NONE; @@ -105,13 +103,13 @@ BottomLevelASD3D12Impl::BottomLevelASD3D12Impl(IReferenceCounters* pRef UNEXPECTED("Either pTriangles or pBoxes must not be null"); } - VERIFY_EXPR(Geometries.size() <= D3D12_RAYTRACING_MAX_GEOMETRIES_PER_BOTTOM_LEVEL_ACCELERATION_STRUCTURE); + VERIFY_EXPR(d3d12Geometries.size() <= D3D12_RAYTRACING_MAX_GEOMETRIES_PER_BOTTOM_LEVEL_ACCELERATION_STRUCTURE); d3d12BottomLevelInputs.Type = D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL; d3d12BottomLevelInputs.Flags = BuildASFlagsToD3D12ASBuildFlags(m_Desc.Flags); d3d12BottomLevelInputs.DescsLayout = D3D12_ELEMENTS_LAYOUT_ARRAY; - d3d12BottomLevelInputs.pGeometryDescs = Geometries.data(); - d3d12BottomLevelInputs.NumDescs = static_cast(Geometries.size()); + d3d12BottomLevelInputs.pGeometryDescs = d3d12Geometries.data(); + d3d12BottomLevelInputs.NumDescs = static_cast(d3d12Geometries.size()); pd3d12Device->GetRaytracingAccelerationStructurePrebuildInfo(&d3d12BottomLevelInputs, &d3d12BottomLevelPrebuildInfo); if (d3d12BottomLevelPrebuildInfo.ResultDataMaxSizeInBytes == 0) @@ -165,6 +163,4 @@ BottomLevelASD3D12Impl::~BottomLevelASD3D12Impl() pDeviceD3D12Impl->SafeReleaseDeviceObject(std::move(m_pd3d12Resource), m_Desc.CommandQueueMask); } -IMPLEMENT_QUERY_INTERFACE(BottomLevelASD3D12Impl, IID_BottomLevelASD3D12, TBottomLevelASBase) - } // namespace Diligent diff --git a/Graphics/GraphicsEngineD3D12/src/TopLevelASD3D12Impl.cpp b/Graphics/GraphicsEngineD3D12/src/TopLevelASD3D12Impl.cpp index ad26155a..51dadde1 100644 --- a/Graphics/GraphicsEngineD3D12/src/TopLevelASD3D12Impl.cpp +++ b/Graphics/GraphicsEngineD3D12/src/TopLevelASD3D12Impl.cpp @@ -28,11 +28,9 @@ #include "pch.h" #include "TopLevelASD3D12Impl.hpp" #include "RenderDeviceD3D12Impl.hpp" -#include "DeviceContextD3D12Impl.hpp" #include "D3D12TypeConversions.hpp" #include "GraphicsAccessories.hpp" #include "DXGITypeConversions.hpp" -#include "EngineMemory.h" #include "StringTools.hpp" namespace Diligent @@ -124,6 +122,4 @@ TopLevelASD3D12Impl::~TopLevelASD3D12Impl() pDeviceD3D12Impl->SafeReleaseDeviceObject(std::move(m_pd3d12Resource), m_Desc.CommandQueueMask); } -IMPLEMENT_QUERY_INTERFACE(TopLevelASD3D12Impl, IID_TopLevelASD3D12, TTopLevelASBase) - } // namespace Diligent diff --git a/Graphics/GraphicsEngineVulkan/include/BottomLevelASVkImpl.hpp b/Graphics/GraphicsEngineVulkan/include/BottomLevelASVkImpl.hpp index e907337d..1a4eb2c1 100644 --- a/Graphics/GraphicsEngineVulkan/include/BottomLevelASVkImpl.hpp +++ b/Graphics/GraphicsEngineVulkan/include/BottomLevelASVkImpl.hpp @@ -50,9 +50,6 @@ public: bool bIsDeviceInternal = false); ~BottomLevelASVkImpl(); - /// Implementation of IBottomLevelAS::GetScratchBufferSizes() in Vulkan backend. - virtual ScratchBufferSizes DILIGENT_CALL_TYPE GetScratchBufferSizes() const override { return m_ScratchSize; } - /// Implementation of IBottomLevelAS::GetNativeHandle() in Vulkan backend. virtual void* DILIGENT_CALL_TYPE GetNativeHandle() override final { @@ -73,7 +70,6 @@ private: VulkanUtilities::AccelStructWrapper m_VulkanBLAS; VulkanUtilities::VulkanMemoryAllocation m_MemoryAllocation; VkDeviceSize m_MemoryAlignedOffset = 0; - ScratchBufferSizes m_ScratchSize; }; } // namespace Diligent diff --git a/Graphics/GraphicsEngineVulkan/include/TopLevelASVkImpl.hpp b/Graphics/GraphicsEngineVulkan/include/TopLevelASVkImpl.hpp index 8f2b42ab..b55223df 100644 --- a/Graphics/GraphicsEngineVulkan/include/TopLevelASVkImpl.hpp +++ b/Graphics/GraphicsEngineVulkan/include/TopLevelASVkImpl.hpp @@ -51,8 +51,7 @@ public: bool bIsDeviceInternal = false); ~TopLevelASVkImpl(); - /// Implementation of ITopLevelAS::GetScratchBufferSizes() in Vulkan backend. - virtual ScratchBufferSizes DILIGENT_CALL_TYPE GetScratchBufferSizes() const override { return m_ScratchSize; } + IMPLEMENT_QUERY_INTERFACE_IN_PLACE(IID_TopLevelASVk, TTopLevelASBase); /// Implementation of ITopLevelAS::GetNativeHandle() in Vulkan backend. virtual void* DILIGENT_CALL_TYPE GetNativeHandle() override final @@ -64,15 +63,12 @@ public: /// Implementation of ITopLevelASVk::GetVkTLAS(). virtual VkAccelerationStructureKHR DILIGENT_CALL_TYPE GetVkTLAS() const override { return m_VulkanTLAS; } - IMPLEMENT_QUERY_INTERFACE_IN_PLACE(IID_TopLevelASVk, TTopLevelASBase); - const VkAccelerationStructureKHR* GetVkTLASPtr() const { return &m_VulkanTLAS; } private: VulkanUtilities::AccelStructWrapper m_VulkanTLAS; VulkanUtilities::VulkanMemoryAllocation m_MemoryAllocation; VkDeviceSize m_MemoryAlignedOffset = 0; - ScratchBufferSizes m_ScratchSize; }; } // namespace Diligent diff --git a/Graphics/GraphicsEngineVulkan/src/BottomLevelASVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/BottomLevelASVkImpl.cpp index cc16c9e4..092da523 100644 --- a/Graphics/GraphicsEngineVulkan/src/BottomLevelASVkImpl.cpp +++ b/Graphics/GraphicsEngineVulkan/src/BottomLevelASVkImpl.cpp @@ -43,7 +43,7 @@ BottomLevelASVkImpl::BottomLevelASVkImpl(IReferenceCounters* pRefCounters, const auto& Limits = PhysicalDevice.GetExtProperties().RayTracing; VkAccelerationStructureCreateInfoKHR CreateInfo = {}; - std::vector Geometries; + std::vector vkGeometries; CreateInfo.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR; CreateInfo.type = VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR; @@ -56,8 +56,8 @@ BottomLevelASVkImpl::BottomLevelASVkImpl(IReferenceCounters* pRefCounters, else { CreateInfo.maxGeometryCount = m_Desc.TriangleCount + m_Desc.BoxCount; - Geometries.resize(CreateInfo.maxGeometryCount); - CreateInfo.pGeometryInfos = Geometries.data(); + vkGeometries.resize(CreateInfo.maxGeometryCount); + CreateInfo.pGeometryInfos = vkGeometries.data(); VERIFY_EXPR(CreateInfo.maxGeometryCount <= Limits.maxGeometryCount); @@ -68,7 +68,7 @@ BottomLevelASVkImpl::BottomLevelASVkImpl(IReferenceCounters* pRefCounters, for (uint32_t i = 0; i < m_Desc.TriangleCount; ++i) { auto& src = m_Desc.pTriangles[i]; - auto& dst = Geometries[i]; + auto& dst = vkGeometries[i]; dst.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR; dst.pNext = nullptr; @@ -89,7 +89,7 @@ BottomLevelASVkImpl::BottomLevelASVkImpl(IReferenceCounters* pRefCounters, for (uint32_t i = 0; i < m_Desc.BoxCount; ++i) { auto& src = m_Desc.pBoxes[i]; - auto& dst = Geometries[i]; + auto& dst = vkGeometries[i]; dst.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR; dst.pNext = nullptr; -- cgit v1.2.3