From 4dbfe17747cd204a685924512b4be848710a0e55 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 18 Oct 2016 15:31:25 +0200 Subject: [PATCH] Use event usage to guess at buffer creation flags --- renderdoc/driver/d3d12/d3d12_replay.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/d3d12/d3d12_replay.cpp b/renderdoc/driver/d3d12/d3d12_replay.cpp index 51d9e5974..4782eef31 100644 --- a/renderdoc/driver/d3d12/d3d12_replay.cpp +++ b/renderdoc/driver/d3d12/d3d12_replay.cpp @@ -123,9 +123,24 @@ FetchBuffer D3D12Replay::GetBuffer(ResourceId id) ret.length = desc.Width; - D3D12NOTIMP("Buffer creation flags from implicit usage"); + ret.creationFlags = 0; + + const std::vector &usage = m_pDevice->GetQueue()->GetUsage(id); + + for(size_t i = 0; i < usage.size(); i++) + { + if(usage[i].usage == eUsage_VS_RWResource || usage[i].usage == eUsage_HS_RWResource || + usage[i].usage == eUsage_DS_RWResource || usage[i].usage == eUsage_GS_RWResource || + usage[i].usage == eUsage_PS_RWResource || usage[i].usage == eUsage_CS_RWResource) + ret.creationFlags |= eBufferCreate_UAV; + else if(usage[i].usage == eUsage_VertexBuffer) + ret.creationFlags |= eBufferCreate_VB; + else if(usage[i].usage == eUsage_IndexBuffer) + ret.creationFlags |= eBufferCreate_IB; + else if(usage[i].usage == eUsage_Indirect) + ret.creationFlags |= eBufferCreate_Indirect; + } - ret.creationFlags = eBufferCreate_VB | eBufferCreate_IB | eBufferCreate_CB | eBufferCreate_Indirect; if(desc.Flags & D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS) ret.creationFlags |= eBufferCreate_UAV;