From 0497e2d2268c121bf9261bb7501693471173e787 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 21 May 2024 18:43:04 +0100 Subject: [PATCH] Defer creating RT internal resources until after creation * This will allow us to wrap the resources which can be useful for self- introspection --- renderdoc/driver/d3d12/d3d12_device.cpp | 2 ++ renderdoc/driver/d3d12/d3d12_manager.cpp | 12 ++++++++++-- renderdoc/driver/d3d12/d3d12_manager.h | 2 ++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/d3d12/d3d12_device.cpp b/renderdoc/driver/d3d12/d3d12_device.cpp index 4490d1057..84be831cf 100644 --- a/renderdoc/driver/d3d12/d3d12_device.cpp +++ b/renderdoc/driver/d3d12/d3d12_device.cpp @@ -4045,6 +4045,8 @@ void WrappedID3D12Device::CreateInternalResources() } } + GetResourceManager()->GetRaytracingResourceAndUtilHandler()->CreateInternalResources(); + // we don't want replay-only shaders added in WrappedID3D12Shader to pollute the list of resources WrappedID3D12Shader::InternalResources(true); diff --git a/renderdoc/driver/d3d12/d3d12_manager.cpp b/renderdoc/driver/d3d12/d3d12_manager.cpp index 264dc5c0e..c1b8d94e2 100644 --- a/renderdoc/driver/d3d12/d3d12_manager.cpp +++ b/renderdoc/driver/d3d12/d3d12_manager.cpp @@ -694,6 +694,10 @@ D3D12RaytracingResourceAndUtilHandler::D3D12RaytracingResourceAndUtilHandler(Wra m_gpuFence(NULL), m_gpuSyncHandle(NULL), m_gpuSyncCounter(0u) +{ +} + +void D3D12RaytracingResourceAndUtilHandler::CreateInternalResources() { if(m_wrappedDevice) { @@ -1238,7 +1242,7 @@ void D3D12RaytracingResourceAndUtilHandler::InitRayDispatchPatchingResources() (void **)&m_RayPatchingData.rootSig); if(!SUCCEEDED(result)) - RDCERR("Unable to create root signature for patching the BLAS"); + RDCERR("Unable to create root signature for dispatch patching"); // PipelineState ID3DBlob *shader = NULL; @@ -1259,7 +1263,11 @@ void D3D12RaytracingResourceAndUtilHandler::InitRayDispatchPatchingResources() &pipeline, __uuidof(ID3D12PipelineState), (void **)&m_RayPatchingData.pipe); if(!SUCCEEDED(result)) - RDCERR("Unable to create pipeline for patching the BLAS"); + RDCERR("Unable to create pipeline for dispatch patching"); + } + else + { + RDCERR("Failed to get shader for dispatch patching"); } SAFE_RELEASE(rootSig); diff --git a/renderdoc/driver/d3d12/d3d12_manager.h b/renderdoc/driver/d3d12/d3d12_manager.h index 90d2f1e53..2f9ca0cdd 100644 --- a/renderdoc/driver/d3d12/d3d12_manager.h +++ b/renderdoc/driver/d3d12/d3d12_manager.h @@ -1084,6 +1084,8 @@ class D3D12RaytracingResourceAndUtilHandler public: D3D12RaytracingResourceAndUtilHandler(WrappedID3D12Device *device); + void CreateInternalResources(); + ID3D12GraphicsCommandListX *GetCmd() const { return m_cmdList; } ID3D12CommandAllocator *GetCmdAlloc() const { return m_cmdAlloc; } ID3D12CommandQueue *GetCmdQueue() const { return m_cmdQueue; }