mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-08-18 12:36:53 +00:00
Account for number of planes when calculating subresource count
This commit is contained in:
@@ -408,19 +408,25 @@ UINT GetResourceNumMipLevels(const D3D12_RESOURCE_DESC *desc)
|
||||
return 1;
|
||||
}
|
||||
|
||||
UINT GetNumSubresources(const D3D12_RESOURCE_DESC *desc)
|
||||
UINT GetNumSubresources(ID3D12Device *dev, const D3D12_RESOURCE_DESC *desc)
|
||||
{
|
||||
D3D12_FEATURE_DATA_FORMAT_INFO formatInfo = {};
|
||||
formatInfo.Format = desc->Format;
|
||||
dev->CheckFeatureSupport(D3D12_FEATURE_FORMAT_INFO, &formatInfo, sizeof(formatInfo));
|
||||
|
||||
UINT planes = RDCMAX((UINT8)1, formatInfo.PlaneCount);
|
||||
|
||||
switch(desc->Dimension)
|
||||
{
|
||||
default:
|
||||
case D3D12_RESOURCE_DIMENSION_UNKNOWN:
|
||||
RDCERR("Unexpected resource dimension! %d", desc->Dimension);
|
||||
break;
|
||||
case D3D12_RESOURCE_DIMENSION_BUFFER: return 1;
|
||||
case D3D12_RESOURCE_DIMENSION_BUFFER: return planes;
|
||||
case D3D12_RESOURCE_DIMENSION_TEXTURE1D:
|
||||
case D3D12_RESOURCE_DIMENSION_TEXTURE2D:
|
||||
return RDCMAX((UINT16)1, desc->DepthOrArraySize) * GetResourceNumMipLevels(desc);
|
||||
case D3D12_RESOURCE_DIMENSION_TEXTURE3D: return GetResourceNumMipLevels(desc);
|
||||
return RDCMAX((UINT16)1, desc->DepthOrArraySize) * GetResourceNumMipLevels(desc) * planes;
|
||||
case D3D12_RESOURCE_DIMENSION_TEXTURE3D: return GetResourceNumMipLevels(desc) * planes;
|
||||
}
|
||||
|
||||
return 1;
|
||||
|
||||
@@ -58,7 +58,7 @@ void MakeShaderReflection(DXBC::DXBCFile *dxbc, ShaderReflection *refl,
|
||||
#define VERBOSE_PARTIAL_REPLAY
|
||||
|
||||
ShaderStageBits ConvertVisibility(D3D12_SHADER_VISIBILITY ShaderVisibility);
|
||||
UINT GetNumSubresources(const D3D12_RESOURCE_DESC *desc);
|
||||
UINT GetNumSubresources(ID3D12Device *dev, const D3D12_RESOURCE_DESC *desc);
|
||||
|
||||
class WrappedID3D12Device;
|
||||
|
||||
|
||||
@@ -845,7 +845,7 @@ bool WrappedID3D12Device::Serialise_CreateCommittedResource(
|
||||
GetResourceManager()->AddLiveResource(Res, ret);
|
||||
|
||||
SubresourceStateVector &states = m_ResourceStates[GetResID(ret)];
|
||||
states.resize(GetNumSubresources(&desc), state);
|
||||
states.resize(GetNumSubresources(m_pDevice, &desc), state);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -908,7 +908,7 @@ HRESULT WrappedID3D12Device::CreateCommittedResource(const D3D12_HEAP_PROPERTIES
|
||||
SCOPED_LOCK(m_ResourceStatesLock);
|
||||
SubresourceStateVector &states = m_ResourceStates[wrapped->GetResourceID()];
|
||||
|
||||
states.resize(GetNumSubresources(pDesc), InitialResourceState);
|
||||
states.resize(GetNumSubresources(m_pDevice, pDesc), InitialResourceState);
|
||||
}
|
||||
|
||||
*ppvResource = (ID3D12Resource *)wrapped;
|
||||
@@ -1021,7 +1021,7 @@ bool WrappedID3D12Device::Serialise_CreatePlacedResource(
|
||||
GetResourceManager()->AddLiveResource(Res, ret);
|
||||
|
||||
SubresourceStateVector &states = m_ResourceStates[GetResID(ret)];
|
||||
states.resize(GetNumSubresources(&desc), state);
|
||||
states.resize(GetNumSubresources(m_pDevice, &desc), state);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1084,7 +1084,7 @@ HRESULT WrappedID3D12Device::CreatePlacedResource(ID3D12Heap *pHeap, UINT64 Heap
|
||||
SCOPED_LOCK(m_ResourceStatesLock);
|
||||
SubresourceStateVector &states = m_ResourceStates[wrapped->GetResourceID()];
|
||||
|
||||
states.resize(GetNumSubresources(pDesc), InitialState);
|
||||
states.resize(GetNumSubresources(m_pDevice, pDesc), InitialState);
|
||||
}
|
||||
|
||||
*ppvResource = (ID3D12Resource *)wrapped;
|
||||
|
||||
Reference in New Issue
Block a user