diff options
Diffstat (limited to 'tools/gfx/immediate-renderer-base.cpp')
| -rw-r--r-- | tools/gfx/immediate-renderer-base.cpp | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/tools/gfx/immediate-renderer-base.cpp b/tools/gfx/immediate-renderer-base.cpp index c5e5032e5..e18727bdf 100644 --- a/tools/gfx/immediate-renderer-base.cpp +++ b/tools/gfx/immediate-renderer-base.cpp @@ -38,10 +38,12 @@ public: bool m_hasWriteTimestamps = false; RefPtr<ImmediateRendererBase> m_renderer; RefPtr<ShaderObjectBase> m_rootShaderObject; + TransientResourceHeapBase* m_transientHeap; - void init(ImmediateRendererBase* renderer) + void init(ImmediateRendererBase* renderer, TransientResourceHeapBase* transientHeap) { m_renderer = renderer; + m_transientHeap = transientHeap; } void reset() @@ -289,6 +291,17 @@ public: return SLANG_OK; } + virtual SLANG_NO_THROW Result SLANG_MCALL + bindPipelineWithRootObject(IPipelineState* state, IShaderObject* rootObject) override + { + m_writer->setPipelineState(state); + auto stateImpl = static_cast<PipelineStateBase*>(state); + SLANG_RETURN_ON_FAIL(m_commandBuffer->m_renderer->createRootShaderObject( + stateImpl->m_program, m_commandBuffer->m_rootShaderObject.writeRef())); + m_commandBuffer->m_rootShaderObject->copyFrom(rootObject, m_commandBuffer->m_transientHeap); + return SLANG_OK; + } + virtual SLANG_NO_THROW void SLANG_MCALL setViewports(uint32_t count, const Viewport* viewports) override { @@ -435,6 +448,18 @@ public: return SLANG_OK; } + virtual SLANG_NO_THROW Result SLANG_MCALL + bindPipelineWithRootObject(IPipelineState* state, IShaderObject* rootObject) override + { + m_writer->setPipelineState(state); + auto stateImpl = static_cast<PipelineStateBase*>(state); + SLANG_RETURN_ON_FAIL(m_commandBuffer->m_renderer->createRootShaderObject( + stateImpl->m_program, m_commandBuffer->m_rootShaderObject.writeRef())); + m_commandBuffer->m_rootShaderObject->copyFrom( + rootObject, m_commandBuffer->m_transientHeap); + return SLANG_OK; + } + virtual SLANG_NO_THROW void SLANG_MCALL dispatchCompute(int x, int y, int z) override { m_writer->bindRootShaderObject(m_commandBuffer->m_rootShaderObject); |
