summaryrefslogtreecommitdiffstats
path: root/tools/gfx/debug-layer
diff options
context:
space:
mode:
authorAlexisPollonni <43394202+AlexisPollonni@users.noreply.github.com>2025-04-23 08:48:44 +0200
committerGitHub <noreply@github.com>2025-04-23 06:48:44 +0000
commit785669c8771c01d57914ec0075315e8ae61b6a31 (patch)
tree9b940b454729144e06ee7254770b390a0ce5156e /tools/gfx/debug-layer
parent1cf3f18a9ca1905a5bc51790ca723815dd5b1400 (diff)
Fixed various queryInterface implementations (#6863)
* Fix: Improper implementation in RendererBase::queryInterface In the case an arbitrary uuid was passed to RendererBase::QueryInterface it would return SLANG_OK while the outObject is null. This is improper and unexpected from an IUnkown implementation. Additionally, the function did not call addRef() when concerning an IDevice interface. * Fix: DebugTransientResourceHeap::queryInterface returns wrong interface When trying to query for the transient heap if the debug layer is enabled, queryInterface would set the outObject to the inner api specific heap (ex: vk::TransientResourceImpl) and NOT the debug heap. This causes a side effect when creating a command buffer that debug wrappers would not be used. The debug version will not be returned, and this snowballs causing an access violation when trying to bind a compute pipeline state. After this fix, debug wrappers for transient heaps, command buffers, encoders, etc... wil be used correctly. * fix weird whitespace change
Diffstat (limited to 'tools/gfx/debug-layer')
-rw-r--r--tools/gfx/debug-layer/debug-transient-heap.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/tools/gfx/debug-layer/debug-transient-heap.cpp b/tools/gfx/debug-layer/debug-transient-heap.cpp
index 424a8feb1..5b0219fb7 100644
--- a/tools/gfx/debug-layer/debug-transient-heap.cpp
+++ b/tools/gfx/debug-layer/debug-transient-heap.cpp
@@ -14,7 +14,11 @@ namespace debug
SlangResult DebugTransientResourceHeap::queryInterface(SlangUUID const& uuid, void** outObject)
{
if (uuid == GfxGUID::IID_ISlangUnknown || uuid == GfxGUID::IID_ITransientResourceHeap)
+ {
*outObject = static_cast<ITransientResourceHeap*>(this);
+ addRef();
+ return SLANG_OK;
+ }
if (uuid == GfxGUID::IID_ITransientResourceHeapD3D12)
{
RefPtr<DebugTransientResourceHeapD3D12> result = new DebugTransientResourceHeapD3D12();
@@ -22,10 +26,8 @@ SlangResult DebugTransientResourceHeap::queryInterface(SlangUUID const& uuid, vo
returnComPtr((ITransientResourceHeapD3D12**)outObject, result);
return SLANG_OK;
}
- else
- {
- return baseObject->queryInterface(uuid, outObject);
- }
+
+ return baseObject->queryInterface(uuid, outObject);
}
Result DebugTransientResourceHeap::synchronizeAndReset()