From 17493e915852d3dda1ecd6fb5dc75c39e0cf22c8 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 18 Oct 2016 15:30:03 +0200 Subject: [PATCH] Track resources created with a cubemap SRV, to mark them as cubemaps --- renderdoc/driver/d3d12/d3d12_device.h | 3 +++ renderdoc/driver/d3d12/d3d12_device_wrap.cpp | 8 ++++++++ renderdoc/driver/d3d12/d3d12_replay.cpp | 3 +-- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/d3d12/d3d12_device.h b/renderdoc/driver/d3d12/d3d12_device.h index cbc6cbf02..2912e54d2 100644 --- a/renderdoc/driver/d3d12/d3d12_device.h +++ b/renderdoc/driver/d3d12/d3d12_device.h @@ -299,6 +299,8 @@ private: map m_ResourceStates; Threading::CriticalSection m_ResourceStatesLock; + set m_Cubemaps; + map m_ResourceNames; struct SwapPresentInfo @@ -362,6 +364,7 @@ public: ID3D12CommandAllocator *GetAlloc() { return m_Alloc; } void ApplyBarriers(vector &barriers); + bool IsCubemap(ResourceId id) { return m_Cubemaps.find(id) != m_Cubemaps.end(); } // returns thread-local temporary memory byte *GetTempMemory(size_t s); template diff --git a/renderdoc/driver/d3d12/d3d12_device_wrap.cpp b/renderdoc/driver/d3d12/d3d12_device_wrap.cpp index 0455feaab..49bd8c5f8 100644 --- a/renderdoc/driver/d3d12/d3d12_device_wrap.cpp +++ b/renderdoc/driver/d3d12/d3d12_device_wrap.cpp @@ -674,6 +674,14 @@ void WrappedID3D12Device::CreateShaderResourceView(ID3D12Resource *pResource, { GetWrapped(DestDescriptor)->Init(pResource, pDesc); } + + if(m_State < WRITING && pDesc) + { + if(pDesc->ViewDimension == D3D12_SRV_DIMENSION_TEXTURECUBE || + pDesc->ViewDimension == D3D12_SRV_DIMENSION_TEXTURECUBEARRAY) + m_Cubemaps.insert(GetResID(pResource)); + } + return m_pDevice->CreateShaderResourceView(Unwrap(pResource), pDesc, Unwrap(DestDescriptor)); } diff --git a/renderdoc/driver/d3d12/d3d12_replay.cpp b/renderdoc/driver/d3d12/d3d12_replay.cpp index 291ce65e1..51d9e5974 100644 --- a/renderdoc/driver/d3d12/d3d12_replay.cpp +++ b/renderdoc/driver/d3d12/d3d12_replay.cpp @@ -170,8 +170,7 @@ FetchTexture D3D12Replay::GetTexture(ResourceId id) case 3: ret.resType = eResType_Texture3D; break; } - D3D12NOTIMP("Texture cubemap-ness from implicit usage"); - ret.cubemap = false; // eResType_TextureCube, eResType_TextureCubeArray + ret.cubemap = m_pDevice->IsCubemap(id); ret.creationFlags = eTextureCreate_SRV;