diff options
Diffstat (limited to 'tools/gfx/renderer-shared.cpp')
| -rw-r--r-- | tools/gfx/renderer-shared.cpp | 28 |
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 |
