From 245404190312d2e8aae7258bf7ad181837fbe015 Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Wed, 27 Feb 2019 20:24:37 +0000 Subject: [PATCH] [d3d10] nullptr checks for resource creation --- src/d3d10/d3d10_device.cpp | 46 ++++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/src/d3d10/d3d10_device.cpp b/src/d3d10/d3d10_device.cpp index 25e7375c1..ee3d64820 100644 --- a/src/d3d10/d3d10_device.cpp +++ b/src/d3d10/d3d10_device.cpp @@ -94,6 +94,9 @@ namespace dxvk { ID3D10Buffer** ppBuffer) { InitReturnPtr(ppBuffer); + if (pDesc == nullptr) + return E_INVALIDARG; + D3D11_BUFFER_DESC d3d11Desc; d3d11Desc.ByteWidth = pDesc->ByteWidth; d3d11Desc.Usage = D3D11_USAGE(pDesc->Usage); @@ -123,6 +126,9 @@ namespace dxvk { ID3D10Texture1D** ppTexture1D) { InitReturnPtr(ppTexture1D); + if (pDesc == nullptr) + return E_INVALIDARG; + D3D11_TEXTURE1D_DESC d3d11Desc; d3d11Desc.Width = pDesc->Width; d3d11Desc.MipLevels = pDesc->MipLevels; @@ -154,6 +160,9 @@ namespace dxvk { ID3D10Texture2D** ppTexture2D) { InitReturnPtr(ppTexture2D); + if (pDesc == nullptr) + return E_INVALIDARG; + D3D11_TEXTURE2D_DESC d3d11Desc; d3d11Desc.Width = pDesc->Width; d3d11Desc.Height = pDesc->Height; @@ -187,6 +196,9 @@ namespace dxvk { ID3D10Texture3D** ppTexture3D) { InitReturnPtr(ppTexture3D); + if (pDesc == nullptr) + return E_INVALIDARG; + D3D11_TEXTURE3D_DESC d3d11Desc; d3d11Desc.Width = pDesc->Width; d3d11Desc.Height = pDesc->Height; @@ -217,6 +229,11 @@ namespace dxvk { ID3D10Resource* pResource, const D3D10_SHADER_RESOURCE_VIEW_DESC* pDesc, ID3D10ShaderResourceView** ppSRView) { + InitReturnPtr(ppSRView); + + if (pResource == nullptr) + return E_INVALIDARG; + Com d3d11Resource; GetD3D11Resource(pResource, &d3d11Resource); @@ -239,6 +256,11 @@ namespace dxvk { ID3D10Resource* pResource, const D3D10_SHADER_RESOURCE_VIEW_DESC1* pDesc, ID3D10ShaderResourceView1** ppSRView) { + InitReturnPtr(ppSRView); + + if (pResource == nullptr) + return E_INVALIDARG; + Com d3d11Resource; GetD3D11Resource(pResource, &d3d11Resource); @@ -261,6 +283,11 @@ namespace dxvk { ID3D10Resource* pResource, const D3D10_RENDER_TARGET_VIEW_DESC* pDesc, ID3D10RenderTargetView** ppRTView) { + InitReturnPtr(ppRTView); + + if (pResource == nullptr) + return E_INVALIDARG; + Com d3d11Resource; GetD3D11Resource(pResource, &d3d11Resource); @@ -283,6 +310,11 @@ namespace dxvk { ID3D10Resource* pResource, const D3D10_DEPTH_STENCIL_VIEW_DESC* pDesc, ID3D10DepthStencilView** ppDepthStencilView) { + InitReturnPtr(ppDepthStencilView); + + if (pResource == nullptr) + return E_INVALIDARG; + Com d3d11Resource; GetD3D11Resource(pResource, &d3d11Resource); @@ -361,13 +393,13 @@ namespace dxvk { NumElements, pShaderBytecodeWithInputSignature, BytecodeLength, ppInputLayout ? &d3d11InputLayout : nullptr); - if (FAILED(hr)) + if (FAILED(hr) || hr == S_FALSE) return hr; - if (ppInputLayout) { + if (ppInputLayout) *ppInputLayout = static_cast(d3d11InputLayout)->GetD3D10Iface(); - return S_OK; - } return S_FALSE; + + return hr; } @@ -576,6 +608,9 @@ namespace dxvk { ID3D10SamplerState** ppSamplerState) { InitReturnPtr(ppSamplerState); + if (pSamplerDesc == nullptr) + return E_INVALIDARG; + D3D11_SAMPLER_DESC d3d11Desc; d3d11Desc.Filter = D3D11_FILTER(pSamplerDesc->Filter); d3d11Desc.AddressU = D3D11_TEXTURE_ADDRESS_MODE(pSamplerDesc->AddressU); @@ -609,6 +644,9 @@ namespace dxvk { ID3D10Query** ppQuery) { InitReturnPtr(ppQuery); + if (pQueryDesc == nullptr) + return E_INVALIDARG; + D3D11_QUERY_DESC d3d11Desc; d3d11Desc.Query = D3D11_QUERY(pQueryDesc->Query); d3d11Desc.MiscFlags = pQueryDesc->MiscFlags;