summaryrefslogtreecommitdiff
path: root/tools/gfx
diff options
context:
space:
mode:
Diffstat (limited to 'tools/gfx')
-rw-r--r--tools/gfx/debug-layer.cpp20
-rw-r--r--tools/gfx/debug-layer.h13
2 files changed, 30 insertions, 3 deletions
diff --git a/tools/gfx/debug-layer.cpp b/tools/gfx/debug-layer.cpp
index 97504017e..80c04bd1f 100644
--- a/tools/gfx/debug-layer.cpp
+++ b/tools/gfx/debug-layer.cpp
@@ -652,17 +652,26 @@ Result DebugDevice::createMutableShaderObject(
}
Result DebugDevice::createMutableRootShaderObject(
- IShaderProgram* program, IShaderObject** outObject)
+ IShaderProgram* program, IShaderObject** outRootObject)
{
SLANG_GFX_API_FUNC;
- return baseObject->createMutableRootShaderObject(program, outObject);
+ RefPtr<DebugShaderObject> outObject = new DebugShaderObject();
+ auto result = baseObject->createMutableRootShaderObject(
+ getInnerObj(program), outObject->baseObject.writeRef());
+ if (SLANG_FAILED(result))
+ return result;
+ outObject->m_device = this;
+ outObject->m_slangType = nullptr;
+ outObject->m_rootComponentType = getDebugObj(program)->m_slangProgram;
+ returnComPtr(outRootObject, outObject);
+ return result;
}
Result DebugDevice::createProgram(const IShaderProgram::Desc& desc, IShaderProgram** outProgram)
{
SLANG_GFX_API_FUNC;
- RefPtr<DebugShaderProgram> outObject = new DebugShaderProgram();
+ RefPtr<DebugShaderProgram> outObject = new DebugShaderProgram(desc);
auto result = baseObject->createProgram(desc, outObject->baseObject.writeRef());
if (SLANG_FAILED(result))
return result;
@@ -1836,4 +1845,9 @@ Result DebugFence::setCurrentValue(uint64_t value)
return baseObject->setCurrentValue(value);
}
+DebugShaderProgram::DebugShaderProgram(const IShaderProgram::Desc& desc)
+{
+ m_slangProgram = desc.slangProgram;
+}
+
} // namespace gfx
diff --git a/tools/gfx/debug-layer.h b/tools/gfx/debug-layer.h
index 35410530e..c5482da87 100644
--- a/tools/gfx/debug-layer.h
+++ b/tools/gfx/debug-layer.h
@@ -293,9 +293,18 @@ public:
setConstantBufferOverride(IBufferResource* constantBuffer) override;
public:
+ // Type name of an ordinary shader object.
Slang::String m_typeName;
+
+ // The slang Type of an ordinary shader object. This is null for root objects.
slang::TypeReflection* m_slangType = nullptr;
+
+ // The slang program from which a root shader object is created, this is null for ordinary
+ // objects.
+ Slang::ComPtr<slang::IComponentType> m_rootComponentType;
+
DebugDevice* m_device;
+
Slang::List<Slang::RefPtr<DebugShaderObject>> m_entryPoints;
Slang::Dictionary<ShaderOffsetKey, Slang::RefPtr<DebugShaderObject>> m_objects;
Slang::Dictionary<ShaderOffsetKey, Slang::RefPtr<DebugResourceView>> m_resources;
@@ -626,6 +635,10 @@ public:
public:
IShaderProgram* getInterface(const Slang::Guid& guid);
+ DebugShaderProgram(const IShaderProgram::Desc& desc);
+
+public:
+ Slang::ComPtr<slang::IComponentType> m_slangProgram;
};
class DebugTransientResourceHeap : public DebugObject<ITransientResourceHeap>