diff options
| author | Yong He <yonghe@outlook.com> | 2021-06-30 14:59:18 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-06-30 14:59:18 -0700 |
| commit | a03d21a5f54cba913c3f52e2822a433de8f39fdd (patch) | |
| tree | 84d24d4355cc4b3e941da9eab57147cd9d297ee4 /tools/gfx/debug-layer.h | |
| parent | 5395ef82535c283109b1ea6b89b737c5a39bf147 (diff) | |
[gfx] Add inline ray tracing support. (#1899)
Diffstat (limited to 'tools/gfx/debug-layer.h')
| -rw-r--r-- | tools/gfx/debug-layer.h | 95 |
1 files changed, 71 insertions, 24 deletions
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<TInterface> baseObject; }; +template <typename TInterface> +class UnownedDebugObject + : public TInterface + , public DebugObjectBase +{ +public: + TInterface* baseObject = nullptr; +}; + class DebugDevice : public DebugObject<IDevice> { 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<IAccelerationStructure> +{ +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<ISamplerState> { public: @@ -228,16 +253,9 @@ public: class DebugCommandBuffer; -class DebugComputeCommandEncoder : public DebugObject<IComputeCommandEncoder> +class DebugComputeCommandEncoder : public UnownedDebugObject<IComputeCommandEncoder> { 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<IRenderCommandEncoder> +class DebugRenderCommandEncoder : public UnownedDebugObject<IRenderCommandEncoder> { 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<IResourceCommandEncoder> +class DebugResourceCommandEncoder : public UnownedDebugObject<IResourceCommandEncoder> { 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<IRayTracingCommandEncoder> +{ +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<ICommandBuffer> { 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: |
