summaryrefslogtreecommitdiffstats
path: root/tools/gfx/immediate-renderer-base.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/gfx/immediate-renderer-base.cpp')
-rw-r--r--tools/gfx/immediate-renderer-base.cpp27
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);