summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkopaka1822 <felixbruell@live.de>2023-05-11 22:15:34 +0200
committerGitHub <noreply@github.com>2023-05-11 13:15:34 -0700
commitf414a14c1eac050ff2e1bdaf4f3dd2e4ec6f644e (patch)
tree1d303bbf45776074ae9851d3e8ef6dd94a6eb0dc
parent952e04466a18e9d03fcb018ce9213f34b93ca74a (diff)
fixed shader resource views for multisample textures (#2880)
-rw-r--r--tools/gfx/d3d12/d3d12-helper-functions.cpp38
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;