diff options
| author | kopaka1822 <felixbruell@live.de> | 2023-05-11 22:15:34 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-05-11 13:15:34 -0700 |
| commit | f414a14c1eac050ff2e1bdaf4f3dd2e4ec6f644e (patch) | |
| tree | 1d303bbf45776074ae9851d3e8ef6dd94a6eb0dc | |
| parent | 952e04466a18e9d03fcb018ce9213f34b93ca74a (diff) | |
fixed shader resource views for multisample textures (#2880)
| -rw-r--r-- | tools/gfx/d3d12/d3d12-helper-functions.cpp | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/tools/gfx/d3d12/d3d12-helper-functions.cpp b/tools/gfx/d3d12/d3d12-helper-functions.cpp index efa379786..9e5201ea5 100644 --- a/tools/gfx/d3d12/d3d12-helper-functions.cpp +++ b/tools/gfx/d3d12/d3d12-helper-functions.cpp @@ -233,7 +233,7 @@ void initSrvDesc( descOut.Texture1D.MostDetailedMip = subresourceRange.mipLevel; break; case D3D12_RESOURCE_DIMENSION_TEXTURE2D: - descOut.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + descOut.ViewDimension = textureDesc.sampleDesc.numSamples > 1 ? D3D12_SRV_DIMENSION_TEXTURE2DMS : D3D12_SRV_DIMENSION_TEXTURE2D; descOut.Texture2D.PlaneSlice = D3DUtil::getPlaneSlice(descOut.Format, subresourceRange.aspectMask); descOut.Texture2D.ResourceMinLODClamp = 0.0f; @@ -303,18 +303,30 @@ void initSrvDesc( : subresourceRange.mipLevelCount; break; case D3D12_RESOURCE_DIMENSION_TEXTURE2D: - descOut.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DARRAY; - descOut.Texture2DArray.ArraySize = subresourceRange.layerCount == 0 - ? desc.DepthOrArraySize - : subresourceRange.layerCount; - descOut.Texture2DArray.FirstArraySlice = subresourceRange.baseArrayLayer; - descOut.Texture2DArray.PlaneSlice = - D3DUtil::getPlaneSlice(descOut.Format, subresourceRange.aspectMask); - descOut.Texture2DArray.ResourceMinLODClamp = 0; - descOut.Texture2DArray.MostDetailedMip = subresourceRange.mipLevel; - descOut.Texture2DArray.MipLevels = subresourceRange.mipLevelCount == 0 - ? desc.MipLevels - subresourceRange.mipLevel - : subresourceRange.mipLevelCount; + descOut.ViewDimension = textureDesc.sampleDesc.numSamples > 1 ? D3D12_SRV_DIMENSION_TEXTURE2DMSARRAY : D3D12_SRV_DIMENSION_TEXTURE2DARRAY; + if(descOut.ViewDimension == D3D12_SRV_DIMENSION_TEXTURE2DARRAY) + { + descOut.Texture2DArray.ArraySize = subresourceRange.layerCount == 0 + ? desc.DepthOrArraySize + : subresourceRange.layerCount; + descOut.Texture2DArray.FirstArraySlice = subresourceRange.baseArrayLayer; + descOut.Texture2DArray.PlaneSlice = + D3DUtil::getPlaneSlice(descOut.Format, subresourceRange.aspectMask); + descOut.Texture2DArray.ResourceMinLODClamp = 0; + descOut.Texture2DArray.MostDetailedMip = subresourceRange.mipLevel; + descOut.Texture2DArray.MipLevels = subresourceRange.mipLevelCount == 0 + ? desc.MipLevels - subresourceRange.mipLevel + : subresourceRange.mipLevelCount; + } + else + { + assert(descOut.ViewDimension == D3D12_SRV_DIMENSION_TEXTURE2DMSARRAY); + descOut.Texture2DMSArray.FirstArraySlice = subresourceRange.baseArrayLayer; + descOut.Texture2DMSArray.ArraySize = subresourceRange.layerCount == 0 + ? desc.DepthOrArraySize + : subresourceRange.layerCount; + } + break; case D3D12_RESOURCE_DIMENSION_TEXTURE3D: descOut.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE3D; |
