From f02a5a7453b9dcb289d480da99ea716b2ff50d3a Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Thu, 13 Jun 2019 03:47:10 +0200 Subject: [PATCH] [d3d11] Don't create SRVs and UAVs with a size of 0 This is illegal and triggers invalid Vulkan usage. --- src/d3d11/d3d11_view_srv.cpp | 10 ++++++++++ src/d3d11/d3d11_view_uav.cpp | 5 +++++ 2 files changed, 15 insertions(+) diff --git a/src/d3d11/d3d11_view_srv.cpp b/src/d3d11/d3d11_view_srv.cpp index 0c9b7959..dd673bd3 100644 --- a/src/d3d11/d3d11_view_srv.cpp +++ b/src/d3d11/d3d11_view_srv.cpp @@ -371,6 +371,16 @@ namespace dxvk { pDesc->Format = format; switch (pDesc->ViewDimension) { + case D3D11_SRV_DIMENSION_BUFFER: + if (pDesc->Buffer.NumElements == 0) + return E_INVALIDARG; + break; + + case D3D11_SRV_DIMENSION_BUFFEREX: + if (pDesc->BufferEx.NumElements == 0) + return E_INVALIDARG; + break; + case D3D11_SRV_DIMENSION_TEXTURE1D: if (pDesc->Texture1D.MipLevels > mipLevels - pDesc->Texture1D.MostDetailedMip) pDesc->Texture1D.MipLevels = mipLevels - pDesc->Texture1D.MostDetailedMip; diff --git a/src/d3d11/d3d11_view_uav.cpp b/src/d3d11/d3d11_view_uav.cpp index 097337bd..8c560751 100644 --- a/src/d3d11/d3d11_view_uav.cpp +++ b/src/d3d11/d3d11_view_uav.cpp @@ -286,6 +286,11 @@ namespace dxvk { pDesc->Format = format; switch (pDesc->ViewDimension) { + case D3D11_UAV_DIMENSION_BUFFER: + if (pDesc->Buffer.NumElements == 0) + return E_INVALIDARG; + break; + case D3D11_UAV_DIMENSION_TEXTURE1DARRAY: if (pDesc->Texture1DArray.ArraySize > numLayers - pDesc->Texture1DArray.FirstArraySlice) pDesc->Texture1DArray.ArraySize = numLayers - pDesc->Texture1DArray.FirstArraySlice;