Account for number of planes when calculating subresource count

This commit is contained in:
baldurk
2016-10-14 16:19:52 +02:00
parent 820b343ef3
commit 5c0746e261
3 changed files with 15 additions and 9 deletions
+10 -4
View File
@@ -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;
+1 -1
View File
@@ -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;
+4 -4
View File
@@ -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;