From a03d21a5f54cba913c3f52e2822a433de8f39fdd Mon Sep 17 00:00:00 2001 From: Yong He Date: Wed, 30 Jun 2021 14:59:18 -0700 Subject: [gfx] Add inline ray tracing support. (#1899) --- tools/gfx/debug-layer.h | 95 ++++++++++++++++++++++++++++++++++++------------- 1 file changed, 71 insertions(+), 24 deletions(-) (limited to 'tools/gfx/debug-layer.h') diff --git a/tools/gfx/debug-layer.h b/tools/gfx/debug-layer.h index 6225260dd..8ab1146d0 100644 --- a/tools/gfx/debug-layer.h +++ b/tools/gfx/debug-layer.h @@ -23,6 +23,15 @@ public: Slang::ComPtr baseObject; }; +template +class UnownedDebugObject + : public TInterface + , public DebugObjectBase +{ +public: + TInterface* baseObject = nullptr; +}; + class DebugDevice : public DebugObject { public: @@ -57,6 +66,12 @@ public: IBufferResource* buffer, IResourceView::Desc const& desc, IResourceView** outView) override; + virtual SLANG_NO_THROW Result SLANG_MCALL getAccelerationStructurePrebuildInfo( + const IAccelerationStructure::BuildInputs& buildInputs, + IAccelerationStructure::PrebuildInfo* outPrebuildInfo) override; + virtual SLANG_NO_THROW Result SLANG_MCALL createAccelerationStructure( + const IAccelerationStructure::CreateDesc& desc, + IAccelerationStructure** outView) override; virtual SLANG_NO_THROW Result SLANG_MCALL createFramebufferLayout( IFramebufferLayout::Desc const& desc, IFramebufferLayout** outFrameBuffer) override; @@ -147,6 +162,16 @@ public: IResourceView* getInterface(const Slang::Guid& guid); }; +class DebugAccelerationStructure : public DebugObject +{ +public: + SLANG_COM_OBJECT_IUNKNOWN_ALL; + +public: + IAccelerationStructure* getInterface(const Slang::Guid& guid); + virtual SLANG_NO_THROW DeviceAddress SLANG_MCALL getDeviceAddress() override; +}; + class DebugSamplerState : public DebugObject { public: @@ -228,16 +253,9 @@ public: class DebugCommandBuffer; -class DebugComputeCommandEncoder : public DebugObject +class DebugComputeCommandEncoder : public UnownedDebugObject { public: - SLANG_COM_OBJECT_IUNKNOWN_QUERY_INTERFACE; - -public: - IComputeCommandEncoder* getInterface(const Slang::Guid& guid); - virtual SLANG_NO_THROW uint32_t SLANG_MCALL addRef() override { return 1; } - virtual SLANG_NO_THROW uint32_t SLANG_MCALL release() override { return 1; } - virtual SLANG_NO_THROW void SLANG_MCALL endEncoding() override; virtual SLANG_NO_THROW Result SLANG_MCALL bindPipeline(IPipelineState* state, IShaderObject** outRootShaderObject) override; @@ -249,16 +267,9 @@ public: bool isOpen = false; }; -class DebugRenderCommandEncoder : public DebugObject +class DebugRenderCommandEncoder : public UnownedDebugObject { public: - SLANG_COM_OBJECT_IUNKNOWN_QUERY_INTERFACE; - -public: - IRenderCommandEncoder* getInterface(const Slang::Guid& guid); - virtual SLANG_NO_THROW uint32_t SLANG_MCALL addRef() override { return 1; } - virtual SLANG_NO_THROW uint32_t SLANG_MCALL release() override { return 1; } - virtual SLANG_NO_THROW void SLANG_MCALL endEncoding() override; virtual SLANG_NO_THROW Result SLANG_MCALL bindPipeline(IPipelineState* state, IShaderObject** outRootShaderObject) override; @@ -287,16 +298,9 @@ public: bool isOpen = false; }; -class DebugResourceCommandEncoder : public DebugObject +class DebugResourceCommandEncoder : public UnownedDebugObject { public: - SLANG_COM_OBJECT_IUNKNOWN_QUERY_INTERFACE; - -public: - IResourceCommandEncoder* getInterface(const Slang::Guid& guid); - virtual SLANG_NO_THROW uint32_t SLANG_MCALL addRef() override { return 1; } - virtual SLANG_NO_THROW uint32_t SLANG_MCALL release() override { return 1; } - virtual SLANG_NO_THROW void SLANG_MCALL endEncoding() override; virtual SLANG_NO_THROW void SLANG_MCALL copyBuffer( IBufferResource* dst, @@ -313,15 +317,56 @@ public: bool isOpen = false; }; +class DebugRayTracingCommandEncoder : public UnownedDebugObject +{ +public: + virtual SLANG_NO_THROW void SLANG_MCALL endEncoding() override; + virtual SLANG_NO_THROW void SLANG_MCALL + writeTimestamp(IQueryPool* pool, SlangInt index) override; + virtual SLANG_NO_THROW void SLANG_MCALL buildAccelerationStructure( + const IAccelerationStructure::BuildDesc& desc, + int propertyQueryCount, + AccelerationStructureQueryDesc* queryDescs) override; + virtual SLANG_NO_THROW void SLANG_MCALL copyAccelerationStructure( + IAccelerationStructure* dest, + IAccelerationStructure* src, + AccelerationStructureCopyMode mode) override; + virtual SLANG_NO_THROW void SLANG_MCALL queryAccelerationStructureProperties( + int accelerationStructureCount, + IAccelerationStructure* const* accelerationStructures, + int queryCount, + AccelerationStructureQueryDesc* queryDescs) override; + virtual SLANG_NO_THROW void SLANG_MCALL + serializeAccelerationStructure(DeviceAddress dest, IAccelerationStructure* source) override; + virtual SLANG_NO_THROW void SLANG_MCALL deserializeAccelerationStructure( + IAccelerationStructure* dest, + DeviceAddress source) override; + virtual SLANG_NO_THROW void memoryBarrier( + int count, + IAccelerationStructure* const* structures, + AccessFlag::Enum sourceAccess, + AccessFlag::Enum destAccess) override; + +public: + DebugCommandBuffer* commandBuffer; + bool isOpen = false; +}; + +class DebugTransientResourceHeap; + class DebugCommandBuffer : public DebugObject { public: SLANG_COM_OBJECT_IUNKNOWN_ALL; +public: + DebugTransientResourceHeap* m_transientHeap; + private: DebugRenderCommandEncoder m_renderCommandEncoder; DebugComputeCommandEncoder m_computeCommandEncoder; DebugResourceCommandEncoder m_resourceCommandEncoder; + DebugRayTracingCommandEncoder m_rayTracingCommandEncoder; public: DebugCommandBuffer(); @@ -334,6 +379,8 @@ public: encodeComputeCommands(IComputeCommandEncoder** outEncoder) override; virtual SLANG_NO_THROW void SLANG_MCALL encodeResourceCommands(IResourceCommandEncoder** outEncoder) override; + virtual SLANG_NO_THROW void SLANG_MCALL + encodeRayTracingCommands(IRayTracingCommandEncoder** outEncoder) override; virtual SLANG_NO_THROW void SLANG_MCALL close() override; private: -- cgit v1.2.3