From d4145519dd86f6d18b07393d989141bda4d4ceb3 Mon Sep 17 00:00:00 2001 From: Yong He Date: Wed, 16 Feb 2022 22:34:20 -0800 Subject: Various gfx fixes. (#2132) * Various gfx fixes. * Fix test case. * Fix crash. * Trigger build * Trigger build 2 * Fix vulkan unit tests. Co-authored-by: Yong He --- tools/gfx/debug-layer.h | 219 ++++++++++++++++++++++++++++-------------------- 1 file changed, 126 insertions(+), 93 deletions(-) (limited to 'tools/gfx/debug-layer.h') diff --git a/tools/gfx/debug-layer.h b/tools/gfx/debug-layer.h index 567a399fe..e0f994a36 100644 --- a/tools/gfx/debug-layer.h +++ b/tools/gfx/debug-layer.h @@ -3,6 +3,7 @@ #include "slang-gfx.h" #include "slang-com-ptr.h" #include "core/slang-com-object.h" +#include "command-encoder-com-forward.h" namespace gfx { @@ -344,8 +345,94 @@ public: class DebugCommandBuffer; -class DebugComputeCommandEncoder : public UnownedDebugObject +class DebugResourceCommandEncoderImpl { +public: + virtual DebugCommandBuffer* getCommandBuffer() = 0; + virtual bool getIsOpen() = 0; + virtual IResourceCommandEncoder* getBaseResourceEncoder() = 0; + +public: + virtual SLANG_NO_THROW void SLANG_MCALL copyBuffer( + IBufferResource* dst, + size_t dstOffset, + IBufferResource* src, + size_t srcOffset, + size_t size); + virtual SLANG_NO_THROW void SLANG_MCALL + uploadBufferData(IBufferResource* dst, size_t offset, size_t size, void* data); + virtual SLANG_NO_THROW void SLANG_MCALL + writeTimestamp(IQueryPool* pool, SlangInt index); + virtual SLANG_NO_THROW void SLANG_MCALL textureBarrier( + size_t count, + ITextureResource* const* textures, + ResourceState src, + ResourceState dst); + virtual SLANG_NO_THROW void SLANG_MCALL bufferBarrier( + size_t count, + IBufferResource* const* buffers, + ResourceState src, + ResourceState dst); + virtual SLANG_NO_THROW void SLANG_MCALL copyTexture( + ITextureResource* dst, + ResourceState dstState, + SubresourceRange dstSubresource, + ITextureResource::Offset3D dstOffset, + ITextureResource* src, + ResourceState srcState, + SubresourceRange srcSubresource, + ITextureResource::Offset3D srcOffset, + ITextureResource::Size extent); + virtual SLANG_NO_THROW void SLANG_MCALL uploadTextureData( + ITextureResource* dst, + SubresourceRange subResourceRange, + ITextureResource::Offset3D offset, + ITextureResource::Size extent, + ITextureResource::SubresourceData* subResourceData, + size_t subResourceDataCount); + virtual SLANG_NO_THROW void SLANG_MCALL clearResourceView( + IResourceView* view, ClearValue* clearValue, ClearResourceViewFlags::Enum flags); + virtual SLANG_NO_THROW void SLANG_MCALL resolveResource( + ITextureResource* source, + ResourceState sourceState, + SubresourceRange sourceRange, + ITextureResource* dest, + ResourceState destState, + SubresourceRange destRange); + virtual SLANG_NO_THROW void SLANG_MCALL copyTextureToBuffer( + IBufferResource* dst, + size_t dstOffset, + size_t dstSize, + ITextureResource* src, + ResourceState srcState, + SubresourceRange srcSubresource, + ITextureResource::Offset3D srcOffset, + ITextureResource::Size extent); + virtual SLANG_NO_THROW void SLANG_MCALL textureSubresourceBarrier( + ITextureResource* texture, + SubresourceRange subresourceRange, + ResourceState src, + ResourceState dst); + virtual SLANG_NO_THROW void SLANG_MCALL resolveQuery( + IQueryPool* queryPool, + uint32_t index, + uint32_t count, + IBufferResource* buffer, + uint64_t offset); + virtual SLANG_NO_THROW void SLANG_MCALL beginDebugEvent(const char* name, float rgbColor[3]); + virtual SLANG_NO_THROW void SLANG_MCALL endDebugEvent(); +}; + +class DebugComputeCommandEncoder + : public UnownedDebugObject + , public DebugResourceCommandEncoderImpl +{ +public: + SLANG_GFX_FORWARD_RESOURCE_COMMAND_ENCODER_IMPL(DebugResourceCommandEncoderImpl) + virtual DebugCommandBuffer* getCommandBuffer() override { return commandBuffer; } + virtual bool getIsOpen() override { return isOpen; } + virtual IResourceCommandEncoder* getBaseResourceEncoder() override { return baseObject; } + public: virtual SLANG_NO_THROW void SLANG_MCALL endEncoding() override; virtual SLANG_NO_THROW Result SLANG_MCALL @@ -353,15 +440,44 @@ public: virtual SLANG_NO_THROW void SLANG_MCALL dispatchCompute(int x, int y, int z) override; virtual SLANG_NO_THROW void SLANG_MCALL dispatchComputeIndirect(IBufferResource* cmdBuffer, uint64_t offset) override; - virtual SLANG_NO_THROW void SLANG_MCALL writeTimestamp(IQueryPool* pool, SlangInt index) override; public: DebugCommandBuffer* commandBuffer; bool isOpen = false; }; -class DebugRenderCommandEncoder : public UnownedDebugObject +class DebugResourceCommandEncoder + : public UnownedDebugObject + , public DebugResourceCommandEncoderImpl { +public: + SLANG_GFX_FORWARD_RESOURCE_COMMAND_ENCODER_IMPL(DebugResourceCommandEncoderImpl) + virtual DebugCommandBuffer* getCommandBuffer() override { return commandBuffer; } + virtual bool getIsOpen() override { return isOpen; } + virtual IResourceCommandEncoder* getBaseResourceEncoder() override { return baseObject; } + + +public: + virtual SLANG_NO_THROW void SLANG_MCALL endEncoding() override; + +public: + DebugCommandBuffer* commandBuffer; + bool isOpen = false; +}; + +class DebugRenderCommandEncoder + : public UnownedDebugObject + , public DebugResourceCommandEncoderImpl +{ +public: + SLANG_GFX_FORWARD_RESOURCE_COMMAND_ENCODER_IMPL(DebugResourceCommandEncoderImpl) + virtual DebugCommandBuffer* getCommandBuffer() override + { + return commandBuffer; + } + virtual bool getIsOpen() override { return isOpen; } + virtual IResourceCommandEncoder* getBaseResourceEncoder() override { return baseObject; } + public: virtual SLANG_NO_THROW void SLANG_MCALL endEncoding() override; virtual SLANG_NO_THROW Result SLANG_MCALL @@ -396,7 +512,6 @@ public: IBufferResource* countBuffer, uint64_t countOffset) override; virtual SLANG_NO_THROW void SLANG_MCALL setStencilReference(uint32_t referenceValue) override; - virtual SLANG_NO_THROW void SLANG_MCALL writeTimestamp(IQueryPool* pool, SlangInt index) override; virtual SLANG_NO_THROW Result SLANG_MCALL setSamplePositions( uint32_t samplesPerPixel, uint32_t pixelCount, @@ -419,95 +534,18 @@ public: bool isOpen = false; }; -class DebugResourceCommandEncoder : public UnownedDebugObject +class DebugRayTracingCommandEncoder + : public UnownedDebugObject + , public DebugResourceCommandEncoderImpl { public: - virtual SLANG_NO_THROW void SLANG_MCALL endEncoding() override; - virtual SLANG_NO_THROW void SLANG_MCALL copyBuffer( - IBufferResource* dst, - size_t dstOffset, - IBufferResource* src, - size_t srcOffset, - size_t size) override; - virtual SLANG_NO_THROW void SLANG_MCALL - uploadBufferData(IBufferResource* dst, size_t offset, size_t size, void* data) override; - virtual SLANG_NO_THROW void SLANG_MCALL writeTimestamp(IQueryPool* pool, SlangInt index) override; - virtual SLANG_NO_THROW void SLANG_MCALL textureBarrier( - size_t count, - ITextureResource* const* textures, - ResourceState src, - ResourceState dst) override; - virtual SLANG_NO_THROW void SLANG_MCALL bufferBarrier( - size_t count, - IBufferResource* const* buffers, - ResourceState src, - ResourceState dst) override; - virtual SLANG_NO_THROW void SLANG_MCALL copyTexture( - ITextureResource* dst, - ResourceState dstState, - SubresourceRange dstSubresource, - ITextureResource::Offset3D dstOffset, - ITextureResource* src, - ResourceState srcState, - SubresourceRange srcSubresource, - ITextureResource::Offset3D srcOffset, - ITextureResource::Size extent) override; - - virtual SLANG_NO_THROW void SLANG_MCALL uploadTextureData( - ITextureResource* dst, - SubresourceRange subResourceRange, - ITextureResource::Offset3D offset, - ITextureResource::Size extent, - ITextureResource::SubresourceData* subResourceData, - size_t subResourceDataCount) override; - - virtual SLANG_NO_THROW void SLANG_MCALL clearResourceView( - IResourceView* view, - ClearValue* clearValue, - ClearResourceViewFlags::Enum flags) override; - - virtual SLANG_NO_THROW void SLANG_MCALL resolveResource( - ITextureResource* source, - ResourceState sourceState, - SubresourceRange sourceRange, - ITextureResource* dest, - ResourceState destState, - SubresourceRange destRange) override; - - virtual SLANG_NO_THROW void SLANG_MCALL copyTextureToBuffer( - IBufferResource* dst, - size_t dstOffset, - size_t dstSize, - ITextureResource* src, - ResourceState srcState, - SubresourceRange srcSubresource, - ITextureResource::Offset3D srcOffset, - ITextureResource::Size extent) override; - - virtual SLANG_NO_THROW void SLANG_MCALL textureSubresourceBarrier( - ITextureResource* texture, - SubresourceRange subresourceRange, - ResourceState src, - ResourceState dst) override; - - virtual SLANG_NO_THROW void SLANG_MCALL resolveQuery( - IQueryPool* queryPool, - uint32_t index, - uint32_t count, - IBufferResource* buffer, - uint64_t offset) override; - -public: - DebugCommandBuffer* commandBuffer; - bool isOpen = false; -}; + SLANG_GFX_FORWARD_RESOURCE_COMMAND_ENCODER_IMPL(DebugResourceCommandEncoderImpl) + virtual DebugCommandBuffer* getCommandBuffer() override { return commandBuffer; } + virtual bool getIsOpen() override { return isOpen; } + virtual IResourceCommandEncoder* getBaseResourceEncoder() override { return baseObject; } -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, @@ -526,11 +564,6 @@ public: virtual SLANG_NO_THROW void SLANG_MCALL deserializeAccelerationStructure( IAccelerationStructure* dest, DeviceAddress source) override; - virtual SLANG_NO_THROW void SLANG_MCALL memoryBarrier( - int count, - IAccelerationStructure* const* structures, - AccessFlag sourceAccess, - AccessFlag destAccess) override; virtual SLANG_NO_THROW void SLANG_MCALL bindPipeline(IPipelineState* state, IShaderObject** outRootObject) override; virtual SLANG_NO_THROW void SLANG_MCALL dispatchRays( -- cgit v1.2.3