diff --git a/renderdoc/driver/d3d12/d3d12_replay.cpp b/renderdoc/driver/d3d12/d3d12_replay.cpp index b99990ebf..78a7cc0bc 100644 --- a/renderdoc/driver/d3d12/d3d12_replay.cpp +++ b/renderdoc/driver/d3d12/d3d12_replay.cpp @@ -2698,12 +2698,20 @@ void D3D12Replay::GetBufferData(ResourceId buff, uint64_t offset, uint64_t lengt if(it == m_pDevice->GetResourceList().end()) { - RDCERR("Getting buffer data for unknown buffer %s!", ToStr(buff).c_str()); + RDCERR("Getting buffer data for unknown buffer %s!", + ToStr(m_pDevice->GetResourceManager()->GetLiveID(buff)).c_str()); return; } WrappedID3D12Resource1 *buffer = it->second; + if(buffer->GetDesc().Dimension != D3D12_RESOURCE_DIMENSION_BUFFER) + { + RDCERR("Getting buffer data for non-buffer %s!", + ToStr(m_pDevice->GetResourceManager()->GetLiveID(buff)).c_str()); + return; + } + RDCASSERT(buffer); GetDebugManager()->GetBufferData(buffer, offset, length, retData); @@ -3012,7 +3020,15 @@ void D3D12Replay::GetTextureData(ResourceId tex, const Subresource &sub, if(resource == NULL) { - RDCERR("Trying to get texture data for unknown ID %s!", ToStr(tex).c_str()); + RDCERR("Trying to get texture data for unknown ID %s!", + ToStr(m_pDevice->GetResourceManager()->GetLiveID(tex)).c_str()); + return; + } + + if(resource->GetDesc().Dimension == D3D12_RESOURCE_DIMENSION_BUFFER) + { + RDCERR("Getting texture data for buffer %s!", + ToStr(m_pDevice->GetResourceManager()->GetLiveID(tex)).c_str()); return; } diff --git a/util/test/tests/D3D11/D3D11_Simple_Triangle.py b/util/test/tests/D3D11/D3D11_Simple_Triangle.py index 5a9cb7b11..d5f8e8d5c 100644 --- a/util/test/tests/D3D11/D3D11_Simple_Triangle.py +++ b/util/test/tests/D3D11/D3D11_Simple_Triangle.py @@ -45,3 +45,12 @@ class D3D11_Simple_Triangle(rdtest.TestCase): } self.check_mesh_data(postvs_ref, postvs_data) + + # Check that nothing breaks if we call typical enumeration functions on resources + for res in self.controller.GetResources(): + res: rd.ResourceDescription + + self.controller.GetShaderEntryPoints(res.resourceId) + self.controller.GetUsage(res.resourceId) + self.controller.GetBufferData(res.resourceId, 0, 0) + self.controller.GetTextureData(res.resourceId, rd.Subresource()) diff --git a/util/test/tests/D3D12/D3D12_Simple_Triangle.py b/util/test/tests/D3D12/D3D12_Simple_Triangle.py index bae84e977..f38dd650b 100644 --- a/util/test/tests/D3D12/D3D12_Simple_Triangle.py +++ b/util/test/tests/D3D12/D3D12_Simple_Triangle.py @@ -46,3 +46,12 @@ class D3D12_Simple_Triangle(rdtest.TestCase): self.check_mesh_data(postvs_ref, postvs_data) + # Check that nothing breaks if we call typical enumeration functions on resources + for res in self.controller.GetResources(): + res: rd.ResourceDescription + + self.controller.GetShaderEntryPoints(res.resourceId) + self.controller.GetUsage(res.resourceId) + self.controller.GetBufferData(res.resourceId, 0, 0) + self.controller.GetTextureData(res.resourceId, rd.Subresource()) + diff --git a/util/test/tests/GL/GL_Simple_Triangle.py b/util/test/tests/GL/GL_Simple_Triangle.py index 338f97d57..d7ac3f72c 100644 --- a/util/test/tests/GL/GL_Simple_Triangle.py +++ b/util/test/tests/GL/GL_Simple_Triangle.py @@ -48,3 +48,12 @@ class GL_Simple_Triangle(rdtest.TestCase): } self.check_mesh_data(postvs_ref, postvs_data) + + # Check that nothing breaks if we call typical enumeration functions on resources + for res in self.controller.GetResources(): + res: rd.ResourceDescription + + self.controller.GetShaderEntryPoints(res.resourceId) + self.controller.GetUsage(res.resourceId) + self.controller.GetBufferData(res.resourceId, 0, 0) + self.controller.GetTextureData(res.resourceId, rd.Subresource()) diff --git a/util/test/tests/Vulkan/VK_Simple_Triangle.py b/util/test/tests/Vulkan/VK_Simple_Triangle.py index 2152fcf52..645552c96 100644 --- a/util/test/tests/Vulkan/VK_Simple_Triangle.py +++ b/util/test/tests/Vulkan/VK_Simple_Triangle.py @@ -48,3 +48,12 @@ class VK_Simple_Triangle(rdtest.TestCase): } self.check_mesh_data(postvs_ref, postvs_data) + + # Check that nothing breaks if we call typical enumeration functions on resources + for res in self.controller.GetResources(): + res: rd.ResourceDescription + + self.controller.GetShaderEntryPoints(res.resourceId) + self.controller.GetUsage(res.resourceId) + self.controller.GetBufferData(res.resourceId, 0, 0) + self.controller.GetTextureData(res.resourceId, rd.Subresource())