From dc67cf730ed5714d33b211cb229349a985ad1eaf Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Tue, 27 Feb 2018 08:54:24 +0100 Subject: [PATCH] [d3d11] Add exception handling to CreateTexture* methods --- src/d3d11/d3d11_device.cpp | 44 +++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/src/d3d11/d3d11_device.cpp b/src/d3d11/d3d11_device.cpp index 20b9ea5bb..a8ddab96e 100644 --- a/src/d3d11/d3d11_device.cpp +++ b/src/d3d11/d3d11_device.cpp @@ -75,15 +75,20 @@ namespace dxvk { const D3D11_BUFFER_DESC* pDesc, const D3D11_SUBRESOURCE_DATA* pInitialData, ID3D11Buffer** ppBuffer) { - if (ppBuffer != nullptr) { + if (ppBuffer == nullptr) + return S_FALSE; + + try { const Com buffer = new D3D11Buffer(this, pDesc); this->InitBuffer(buffer.ptr(), pInitialData); *ppBuffer = buffer.ref(); + return S_OK; + } catch (const DxvkError& e) { + Logger::err(e.message()); + return E_FAIL; } - - return S_OK; } @@ -91,15 +96,20 @@ namespace dxvk { const D3D11_TEXTURE1D_DESC* pDesc, const D3D11_SUBRESOURCE_DATA* pInitialData, ID3D11Texture1D** ppTexture1D) { - if (ppTexture1D != nullptr) { + if (ppTexture1D == nullptr) + return S_FALSE; + + try { const Com texture = new D3D11Texture1D(this, pDesc); this->InitTexture(texture->GetTextureInfo()->image, pInitialData); *ppTexture1D = texture.ref(); + return S_OK; + } catch (const DxvkError& e) { + Logger::err(e.message()); + return E_FAIL; } - - return S_OK; } @@ -107,15 +117,20 @@ namespace dxvk { const D3D11_TEXTURE2D_DESC* pDesc, const D3D11_SUBRESOURCE_DATA* pInitialData, ID3D11Texture2D** ppTexture2D) { - if (ppTexture2D != nullptr) { + if (ppTexture2D == nullptr) + return S_FALSE; + + try { const Com texture = new D3D11Texture2D(this, pDesc); this->InitTexture(texture->GetTextureInfo()->image, pInitialData); *ppTexture2D = texture.ref(); + return S_OK; + } catch (const DxvkError& e) { + Logger::err(e.message()); + return E_FAIL; } - - return S_OK; } @@ -123,15 +138,20 @@ namespace dxvk { const D3D11_TEXTURE3D_DESC* pDesc, const D3D11_SUBRESOURCE_DATA* pInitialData, ID3D11Texture3D** ppTexture3D) { - if (ppTexture3D != nullptr) { + if (ppTexture3D == nullptr) + return S_FALSE; + + try { const Com texture = new D3D11Texture3D(this, pDesc); this->InitTexture(texture->GetTextureInfo()->image, pInitialData); *ppTexture3D = texture.ref(); + return S_OK; + } catch (const DxvkError& e) { + Logger::err(e.message()); + return E_FAIL; } - - return S_OK; }