diff options
Diffstat (limited to 'tools/gfx/immediate-renderer-base.cpp')
| -rw-r--r-- | tools/gfx/immediate-renderer-base.cpp | 392 |
1 files changed, 193 insertions, 199 deletions
diff --git a/tools/gfx/immediate-renderer-base.cpp b/tools/gfx/immediate-renderer-base.cpp index c41debd1e..c5e5032e5 100644 --- a/tools/gfx/immediate-renderer-base.cpp +++ b/tools/gfx/immediate-renderer-base.cpp @@ -4,6 +4,7 @@ #include "command-writer.h" #include "core/slang-basic.h" #include "core/slang-blob.h" +#include "command-encoder-com-forward.h" namespace gfx { @@ -48,18 +49,203 @@ public: m_writer.clear(); } - class RenderCommandEncoderImpl - : public IRenderCommandEncoder + class ResourceCommandEncoderImpl : public IResourceCommandEncoder { public: CommandWriter* m_writer; CommandBufferImpl* m_commandBuffer; + void init(CommandBufferImpl* cmdBuffer) + { + m_writer = &cmdBuffer->m_writer; + m_commandBuffer = cmdBuffer; + } + + 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 + { + m_writer->copyBuffer(dst, dstOffset, src, srcOffset, size); + } + + virtual SLANG_NO_THROW void SLANG_MCALL + uploadBufferData(IBufferResource* dst, size_t offset, size_t size, void* data) override + { + m_writer->uploadBufferData(dst, offset, size, data); + } + + virtual SLANG_NO_THROW void SLANG_MCALL + writeTimestamp(IQueryPool* pool, SlangInt index) override + { + m_writer->writeTimestamp(pool, index); + } + + 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 + { + SLANG_UNUSED(dst); + SLANG_UNUSED(dstState); + SLANG_UNUSED(dstSubresource); + SLANG_UNUSED(dstOffset); + SLANG_UNUSED(src); + SLANG_UNUSED(srcState); + SLANG_UNUSED(srcSubresource); + SLANG_UNUSED(srcOffset); + SLANG_UNUSED(extent); + SLANG_UNIMPLEMENTED_X("copyTexture"); + } + + virtual SLANG_NO_THROW void SLANG_MCALL uploadTextureData( + ITextureResource* dst, + SubresourceRange subResourceRange, + ITextureResource::Offset3D offset, + ITextureResource::Size extend, + ITextureResource::SubresourceData* subResourceData, + size_t subResourceDataCount) override + { + SLANG_UNUSED(dst); + SLANG_UNUSED(subResourceRange); + SLANG_UNUSED(offset); + SLANG_UNUSED(extend); + SLANG_UNUSED(subResourceData); + SLANG_UNUSED(subResourceDataCount); + SLANG_UNIMPLEMENTED_X("uploadTextureData"); + } + + virtual SLANG_NO_THROW void SLANG_MCALL clearResourceView( + IResourceView* view, + ClearValue* clearValue, + ClearResourceViewFlags::Enum flags) override + { + SLANG_UNUSED(view); + SLANG_UNUSED(clearValue); + SLANG_UNUSED(flags); + SLANG_UNIMPLEMENTED_X("clearResourceView"); + } + + virtual SLANG_NO_THROW void SLANG_MCALL resolveResource( + ITextureResource* source, + ResourceState sourceState, + SubresourceRange sourceRange, + ITextureResource* dest, + ResourceState destState, + SubresourceRange destRange) override + { + SLANG_UNUSED(source); + SLANG_UNUSED(sourceState); + SLANG_UNUSED(sourceRange); + SLANG_UNUSED(dest); + SLANG_UNUSED(destState); + SLANG_UNUSED(destRange); + SLANG_UNIMPLEMENTED_X("resolveResource"); + } + + virtual SLANG_NO_THROW void SLANG_MCALL resolveQuery( + IQueryPool* queryPool, + uint32_t index, + uint32_t count, + IBufferResource* buffer, + uint64_t offset) override + { + SLANG_UNUSED(queryPool); + SLANG_UNUSED(index); + SLANG_UNUSED(count); + SLANG_UNUSED(buffer); + SLANG_UNUSED(offset); + SLANG_UNIMPLEMENTED_X("resolveQuery"); + } + + 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 + { + SLANG_UNUSED(dst); + SLANG_UNUSED(dstOffset); + SLANG_UNUSED(dstSize); + SLANG_UNUSED(src); + SLANG_UNUSED(srcState); + SLANG_UNUSED(srcSubresource); + SLANG_UNUSED(srcOffset); + SLANG_UNUSED(extent); + SLANG_UNIMPLEMENTED_X("copyTextureToBuffer"); + } + + virtual SLANG_NO_THROW void SLANG_MCALL textureSubresourceBarrier( + ITextureResource* texture, + SubresourceRange subresourceRange, + ResourceState src, + ResourceState dst) override + { + SLANG_UNUSED(texture); + SLANG_UNUSED(subresourceRange); + SLANG_UNUSED(src); + SLANG_UNUSED(dst); + SLANG_UNIMPLEMENTED_X("textureSubresourceBarrier"); + } + + virtual SLANG_NO_THROW void SLANG_MCALL + beginDebugEvent(const char* name, float rgbColor[3]) override + { + SLANG_UNUSED(name); + SLANG_UNUSED(rgbColor); + } + virtual SLANG_NO_THROW void SLANG_MCALL endDebugEvent() override + { + } + }; + + ResourceCommandEncoderImpl m_resourceCommandEncoder; + + virtual SLANG_NO_THROW void SLANG_MCALL + encodeResourceCommands(IResourceCommandEncoder** outEncoder) override + { + m_resourceCommandEncoder.init(this); + *outEncoder = &m_resourceCommandEncoder; + } + + class RenderCommandEncoderImpl + : public IRenderCommandEncoder + , public ResourceCommandEncoderImpl + { + public: + SLANG_GFX_FORWARD_RESOURCE_COMMAND_ENCODER_IMPL(ResourceCommandEncoderImpl) + public: virtual SLANG_NO_THROW void SLANG_MCALL endEncoding() override {} void init(CommandBufferImpl* cmdBuffer, SimpleRenderPassLayout* renderPass, IFramebuffer* framebuffer) { - m_writer = &cmdBuffer->m_writer; - m_commandBuffer = cmdBuffer; + ResourceCommandEncoderImpl::init(cmdBuffer); // Encode clear commands. m_writer->setFramebuffer(framebuffer); @@ -151,11 +337,6 @@ public: m_writer->setStencilReference(referenceValue); } - virtual SLANG_NO_THROW void SLANG_MCALL writeTimestamp(IQueryPool* pool, SlangInt index) override - { - m_writer->writeTimestamp(pool, index); - } - virtual SLANG_NO_THROW void SLANG_MCALL drawIndirect( uint32_t maxDrawCount, IBufferResource* argBuffer, @@ -234,21 +415,15 @@ public: class ComputeCommandEncoderImpl : public IComputeCommandEncoder + , public ResourceCommandEncoderImpl { public: - CommandWriter* m_writer; - CommandBufferImpl* m_commandBuffer; - + SLANG_GFX_FORWARD_RESOURCE_COMMAND_ENCODER_IMPL(ResourceCommandEncoderImpl) + public: virtual SLANG_NO_THROW void SLANG_MCALL endEncoding() override { } - void init(CommandBufferImpl* cmdBuffer) - { - m_writer = &cmdBuffer->m_writer; - m_commandBuffer = cmdBuffer; - } - virtual SLANG_NO_THROW Result SLANG_MCALL bindPipeline(IPipelineState* state, IShaderObject** outRootObject) override { @@ -270,11 +445,6 @@ public: { SLANG_UNIMPLEMENTED_X("ImmediateRenderBase::dispatchComputeIndirect"); } - - virtual SLANG_NO_THROW void SLANG_MCALL writeTimestamp(IQueryPool* pool, SlangInt index) override - { - m_writer->writeTimestamp(pool, index); - } }; ComputeCommandEncoderImpl m_computeCommandEncoder; @@ -285,182 +455,6 @@ public: *outEncoder = &m_computeCommandEncoder; } - class ResourceCommandEncoderImpl - : public IResourceCommandEncoder - { - public: - CommandWriter* m_writer; - - void init(CommandBufferImpl* cmdBuffer) - { - m_writer = &cmdBuffer->m_writer; - } - - 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 - { - m_writer->copyBuffer(dst, dstOffset, src, srcOffset, size); - } - - virtual SLANG_NO_THROW void SLANG_MCALL - uploadBufferData(IBufferResource* dst, size_t offset, size_t size, void* data) override - { - m_writer->uploadBufferData(dst, offset, size, data); - } - - virtual SLANG_NO_THROW void SLANG_MCALL writeTimestamp(IQueryPool* pool, SlangInt index) override - { - m_writer->writeTimestamp(pool, index); - } - - 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 - { - SLANG_UNUSED(dst); - SLANG_UNUSED(dstState); - SLANG_UNUSED(dstSubresource); - SLANG_UNUSED(dstOffset); - SLANG_UNUSED(src); - SLANG_UNUSED(srcState); - SLANG_UNUSED(srcSubresource); - SLANG_UNUSED(srcOffset); - SLANG_UNUSED(extent); - SLANG_UNIMPLEMENTED_X("copyTexture"); - } - - virtual SLANG_NO_THROW void SLANG_MCALL uploadTextureData( - ITextureResource* dst, - SubresourceRange subResourceRange, - ITextureResource::Offset3D offset, - ITextureResource::Size extend, - ITextureResource::SubresourceData* subResourceData, - size_t subResourceDataCount) override - { - SLANG_UNUSED(dst); - SLANG_UNUSED(subResourceRange); - SLANG_UNUSED(offset); - SLANG_UNUSED(extend); - SLANG_UNUSED(subResourceData); - SLANG_UNUSED(subResourceDataCount); - SLANG_UNIMPLEMENTED_X("uploadTextureData"); - } - - virtual SLANG_NO_THROW void SLANG_MCALL clearResourceView( - IResourceView* view, - ClearValue* clearValue, - ClearResourceViewFlags::Enum flags) override - { - SLANG_UNUSED(view); - SLANG_UNUSED(clearValue); - SLANG_UNUSED(flags); - SLANG_UNIMPLEMENTED_X("clearResourceView"); - } - - virtual SLANG_NO_THROW void SLANG_MCALL resolveResource( - ITextureResource* source, - ResourceState sourceState, - SubresourceRange sourceRange, - ITextureResource* dest, - ResourceState destState, - SubresourceRange destRange) override - { - SLANG_UNUSED(source); - SLANG_UNUSED(sourceState); - SLANG_UNUSED(sourceRange); - SLANG_UNUSED(dest); - SLANG_UNUSED(destState); - SLANG_UNUSED(destRange); - SLANG_UNIMPLEMENTED_X("resolveResource"); - } - - virtual SLANG_NO_THROW void SLANG_MCALL resolveQuery( - IQueryPool* queryPool, - uint32_t index, - uint32_t count, - IBufferResource* buffer, - uint64_t offset) override - { - SLANG_UNUSED(queryPool); - SLANG_UNUSED(index); - SLANG_UNUSED(count); - SLANG_UNUSED(buffer); - SLANG_UNUSED(offset); - SLANG_UNIMPLEMENTED_X("resolveQuery"); - } - - 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 - { - SLANG_UNUSED(dst); - SLANG_UNUSED(dstOffset); - SLANG_UNUSED(dstSize); - SLANG_UNUSED(src); - SLANG_UNUSED(srcState); - SLANG_UNUSED(srcSubresource); - SLANG_UNUSED(srcOffset); - SLANG_UNUSED(extent); - SLANG_UNIMPLEMENTED_X("copyTextureToBuffer"); - } - - virtual SLANG_NO_THROW void SLANG_MCALL textureSubresourceBarrier( - ITextureResource* texture, - SubresourceRange subresourceRange, - ResourceState src, - ResourceState dst) override - { - SLANG_UNUSED(texture); - SLANG_UNUSED(subresourceRange); - SLANG_UNUSED(src); - SLANG_UNUSED(dst); - SLANG_UNIMPLEMENTED_X("textureSubresourceBarrier"); - } - }; - - ResourceCommandEncoderImpl m_resourceCommandEncoder; - - virtual SLANG_NO_THROW void SLANG_MCALL - encodeResourceCommands(IResourceCommandEncoder** outEncoder) override - { - m_resourceCommandEncoder.init(this); - *outEncoder = &m_resourceCommandEncoder; - } - virtual SLANG_NO_THROW void SLANG_MCALL encodeRayTracingCommands(IRayTracingCommandEncoder** outEncoder) override { |
