summaryrefslogtreecommitdiffstats
path: root/tools/gfx/renderer-shared.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/gfx/renderer-shared.cpp')
-rw-r--r--tools/gfx/renderer-shared.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/tools/gfx/renderer-shared.cpp b/tools/gfx/renderer-shared.cpp
index 5b2dc949b..c212f21eb 100644
--- a/tools/gfx/renderer-shared.cpp
+++ b/tools/gfx/renderer-shared.cpp
@@ -799,4 +799,32 @@ IDebugCallback* _getNullDebugCallback()
return &result;
}
+Result ShaderObjectBase::copyFrom(IShaderObject* object, ITransientResourceHeap* transientHeap)
+{
+ if (auto srcObj = dynamic_cast<MutableRootShaderObject*>(object))
+ {
+ setData(gfx::ShaderOffset(), srcObj->m_data.begin(), (size_t)srcObj->m_data.getCount());
+ for (auto& kv : srcObj->m_objects)
+ {
+ ComPtr<IShaderObject> subObject;
+ SLANG_RETURN_ON_FAIL(kv.Value->getCurrentVersion(transientHeap, subObject.writeRef()));
+ setObject(kv.Key, subObject);
+ }
+ for (auto& kv : srcObj->m_resources)
+ {
+ setResource(kv.Key, kv.Value.Ptr());
+ }
+ for (auto& kv : srcObj->m_samplers)
+ {
+ setSampler(kv.Key, kv.Value.Ptr());
+ }
+ for (auto& kv : srcObj->m_specializationArgs)
+ {
+ setSpecializationArgs(kv.Key, kv.Value.begin(), (uint32_t)kv.Value.getCount());
+ }
+ return SLANG_OK;
+ }
+ return SLANG_FAIL;
+}
+
} // namespace gfx