From 3a285bbd2f2632c4a5bfd4c9558dd7b34108e2d0 Mon Sep 17 00:00:00 2001 From: oltolm Date: Sun, 13 Oct 2024 20:56:15 +0200 Subject: [PATCH] d3d9: refactor CompileShaderToByteCodeD3D9 --- Common/GPU/D3D9/D3D9ShaderCompiler.cpp | 17 +++++++++-------- Common/GPU/D3D9/D3D9ShaderCompiler.h | 2 +- unittest/TestShaderGenerators.cpp | 11 ++++------- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/Common/GPU/D3D9/D3D9ShaderCompiler.cpp b/Common/GPU/D3D9/D3D9ShaderCompiler.cpp index 88e93e8816..14d2ff46b7 100644 --- a/Common/GPU/D3D9/D3D9ShaderCompiler.cpp +++ b/Common/GPU/D3D9/D3D9ShaderCompiler.cpp @@ -15,8 +15,7 @@ using namespace Microsoft::WRL; struct ID3DXConstantTable; -LPD3DBLOB CompileShaderToByteCodeD3D9(const char *code, const char *target, std::string *errorMessage) { - ComPtr pShaderCode; +HRESULT CompileShaderToByteCodeD3D9(const char *code, const char *target, std::string *errorMessage, ID3DBlob **ppShaderCode) { ComPtr pErrorMsg; // Compile pixel shader. @@ -29,7 +28,7 @@ LPD3DBLOB CompileShaderToByteCodeD3D9(const char *code, const char *target, std: target, 0, 0, - &pShaderCode, + ppShaderCode, &pErrorMsg); if (pErrorMsg) { @@ -43,12 +42,13 @@ LPD3DBLOB CompileShaderToByteCodeD3D9(const char *code, const char *target, std: errorMessage->clear(); } - return pShaderCode.Detach(); + return hr; } bool CompilePixelShaderD3D9(LPDIRECT3DDEVICE9 device, const char *code, LPDIRECT3DPIXELSHADER9 *pShader, std::string *errorMessage) { - ComPtr pShaderCode = CompileShaderToByteCodeD3D9(code, "ps_3_0", errorMessage); - if (pShaderCode) { + ComPtr pShaderCode; + HRESULT hr = CompileShaderToByteCodeD3D9(code, "ps_3_0", errorMessage, &pShaderCode); + if (SUCCEEDED(hr)) { // Create pixel shader. device->CreatePixelShader((DWORD*)pShaderCode->GetBufferPointer(), pShader); return true; @@ -58,8 +58,9 @@ bool CompilePixelShaderD3D9(LPDIRECT3DDEVICE9 device, const char *code, LPDIRECT } bool CompileVertexShaderD3D9(LPDIRECT3DDEVICE9 device, const char *code, LPDIRECT3DVERTEXSHADER9 *pShader, std::string *errorMessage) { - ComPtr pShaderCode = CompileShaderToByteCodeD3D9(code, "vs_3_0", errorMessage); - if (pShaderCode) { + ComPtr pShaderCode; + HRESULT hr = CompileShaderToByteCodeD3D9(code, "vs_3_0", errorMessage, &pShaderCode); + if (SUCCEEDED(hr)) { // Create vertex shader. device->CreateVertexShader((DWORD*)pShaderCode->GetBufferPointer(), pShader); return true; diff --git a/Common/GPU/D3D9/D3D9ShaderCompiler.h b/Common/GPU/D3D9/D3D9ShaderCompiler.h index 1de2a158d0..6c4ad1a9be 100644 --- a/Common/GPU/D3D9/D3D9ShaderCompiler.h +++ b/Common/GPU/D3D9/D3D9ShaderCompiler.h @@ -9,7 +9,7 @@ struct ID3DXConstantTable; -LPD3DBLOB CompileShaderToByteCodeD3D9(const char *code, const char *target, std::string *errorMessage); +HRESULT CompileShaderToByteCodeD3D9(const char *code, const char *target, std::string *errorMessage, LPD3DBLOB *pShaderCode); bool CompilePixelShaderD3D9(LPDIRECT3DDEVICE9 device, const char *code, LPDIRECT3DPIXELSHADER9 *pShader, std::string *errorMessage); bool CompileVertexShaderD3D9(LPDIRECT3DDEVICE9 device, const char *code, LPDIRECT3DVERTEXSHADER9 *pShader, std::string *errorMessage); diff --git a/unittest/TestShaderGenerators.cpp b/unittest/TestShaderGenerators.cpp index 89e0eaafec..a53862a990 100644 --- a/unittest/TestShaderGenerators.cpp +++ b/unittest/TestShaderGenerators.cpp @@ -18,6 +18,7 @@ #include "GPU/Common/DepalettizeShaderCommon.h" #if PPSSPP_PLATFORM(WINDOWS) +#include #include "GPU/D3D11/D3D11Util.h" #include "GPU/D3D11/D3D11Loader.h" @@ -164,13 +165,9 @@ bool TestCompileShader(const char *buffer, ShaderLanguage lang, ShaderStage stag case ShaderStage::Fragment: programType = "ps_3_0"; break; default: return false; } - LPD3DBLOB blob = CompileShaderToByteCodeD3D9(buffer, programType, errorMessage); - if (blob) { - blob->Release(); - return true; - } else { - return false; - } + Microsoft::WRL::ComPtr blob; + HRESULT hr = CompileShaderToByteCodeD3D9(buffer, programType, errorMessage, &blob); + return SUCCEEDED(hr); } #endif