From: Matteo Bruni Subject: [PATCH 1/5] d3d11: Disallow 0-sized buffer shader resource views. Message-Id: <20171124223001.15539-1-mbruni@codeweavers.com> Date: Fri, 24 Nov 2017 23:29:57 +0100 Signed-off-by: Matteo Bruni --- While writing more tests for the mipmap generation stuff I stumbled upon a couple of missing checks in our implementation. I decided to add those checks rather than changing the tests... dlls/d3d11/tests/d3d11.c | 15 +++++++++++++++ dlls/d3d11/view.c | 5 +++++ 2 files changed, 20 insertions(+) diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c index 2447cd771c..f636a85db2 100644 --- a/dlls/d3d11/tests/d3d11.c +++ b/dlls/d3d11/tests/d3d11.c @@ -18433,6 +18433,21 @@ static void test_buffer_srv(void) cb = create_buffer(device, D3D11_BIND_CONSTANT_BUFFER, sizeof(cb_size), NULL); ID3D11DeviceContext_PSSetConstantBuffers(context, 0, 1, &cb); + buffer_desc.ByteWidth = 256; + buffer_desc.Usage = D3D11_USAGE_DEFAULT; + buffer_desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; + buffer_desc.CPUAccessFlags = 0; + buffer_desc.MiscFlags = 0; + hr = ID3D11Device_CreateBuffer(device, &buffer_desc, NULL, &buffer); + ok(SUCCEEDED(hr), "Failed to create buffer, hr %#x.\n", hr); + srv_desc.Format = DXGI_FORMAT_R8_UNORM; + srv_desc.ViewDimension = D3D11_SRV_DIMENSION_BUFFER; + U(srv_desc).Buffer.FirstElement = 0; + U(srv_desc).Buffer.NumElements = 0; + hr = ID3D11Device_CreateShaderResourceView(device, (ID3D11Resource *)buffer, &srv_desc, &srv); + ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr); + ID3D11Buffer_Release(buffer); + ps = NULL; srv = NULL; buffer = NULL; diff --git a/dlls/d3d11/view.c b/dlls/d3d11/view.c index f747c4bfde..034a4940b0 100644 --- a/dlls/d3d11/view.c +++ b/dlls/d3d11/view.c @@ -616,6 +616,11 @@ static HRESULT normalize_srv_desc(D3D11_SHADER_RESOURCE_VIEW_DESC *desc, ID3D11R WARN("Incompatible dimensions %#x, %#x.\n", dimension, desc->ViewDimension); return E_INVALIDARG; } + if (!desc->u.Buffer.u2.NumElements) + { + WARN("Zero sized buffer view.\n"); + return E_INVALIDARG; + } return S_OK; } -- 2.13.6