From d7df6b37299e4c5c5d305b21576b8399e9ef4a5e Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 6 Jan 2018 22:57:44 +0100 Subject: [PATCH] Create d3d_free_vertex_shader/d3d_free_pixel_shader --- gfx/common/d3d_common.c | 28 ++++++++++++++++++++++++++++ gfx/common/d3d_common.h | 4 ++++ gfx/drivers_font/xdk360_fonts.cpp | 7 ++++--- gfx/drivers_shader/shader_hlsl.c | 16 ++++------------ 4 files changed, 40 insertions(+), 15 deletions(-) diff --git a/gfx/common/d3d_common.c b/gfx/common/d3d_common.c index 949ac3fda6..4a7ae18939 100644 --- a/gfx/common/d3d_common.c +++ b/gfx/common/d3d_common.c @@ -1023,6 +1023,34 @@ void d3d_set_texture(LPDIRECT3DDEVICE dev, unsigned sampler, #endif } +void d3d_free_vertex_shader(LPDIRECT3DDEVICE dev, void *data) +{ +#ifdef HAVE_D3D9 + IDirect3DVertexShader9 *vs = (IDirect3DVertexShader9*)data; + if (!dev || !vs) + return; +#ifdef __cplusplus + vs->Release(); +#else + IDirect3DVertexShader9_Release(vs); +#endif +#endif +} + +void d3d_free_pixel_shader(LPDIRECT3DDEVICE dev, void *data) +{ +#ifdef HAVE_D3D9 + IDirect3DPixelShader9 *ps = (IDirect3DPixelShader9*)data; + if (!dev || !ps) + return; +#ifdef __cplusplus + ps->Release(); +#else + IDirect3DPixelShader9_Release(ps); +#endif +#endif +} + bool d3d_set_pixel_shader(LPDIRECT3DDEVICE dev, void *data) { #ifdef HAVE_D3D9 diff --git a/gfx/common/d3d_common.h b/gfx/common/d3d_common.h index 95581721b7..32434e5043 100644 --- a/gfx/common/d3d_common.h +++ b/gfx/common/d3d_common.h @@ -93,6 +93,10 @@ void d3d_unlock_rectangle(LPDIRECT3DTEXTURE tex); void d3d_set_texture(LPDIRECT3DDEVICE dev, unsigned sampler, void *tex_data); +void d3d_free_pixel_shader(LPDIRECT3DDEVICE dev, void *data); + +void d3d_free_vertex_shader(LPDIRECT3DDEVICE dev, void *data); + bool d3d_set_pixel_shader(LPDIRECT3DDEVICE dev, void *data); bool d3d_set_vertex_shader(LPDIRECT3DDEVICE dev, unsigned index, diff --git a/gfx/drivers_font/xdk360_fonts.cpp b/gfx/drivers_font/xdk360_fonts.cpp index 65cdc484ad..dff3b32a1d 100644 --- a/gfx/drivers_font/xdk360_fonts.cpp +++ b/gfx/drivers_font/xdk360_fonts.cpp @@ -505,7 +505,8 @@ static HRESULT xdk360_video_font_create_shaders(xdk360_video_font_t * font) break; } } - font->s_FontLocals.m_pFontVertexShader->Release(); + + d3d_free_vertex_shader(font->s_FontLocals.m_pFontVertexShader); } font->s_FontLocals.m_pFontVertexShader = NULL; @@ -608,9 +609,9 @@ static void xdk360_free_font(void *data, bool is_threaded) font->m_TranslatorTable = NULL; if (font->s_FontLocals.m_pFontPixelShader) - font->s_FontLocals.m_pFontPixelShader->Release(); + d3d_free_pixel_shader(font->s_FontLocals.m_pFontPixelShader); if (font->s_FontLocals.m_pFontVertexShader) - font->s_FontLocals.m_pFontVertexShader->Release(); + d3d_free_vertex_shader(font->s_FontLocals.m_pFontVertexShader); if (font->s_FontLocals.m_pFontVertexDecl) d3d_vertex_declaration_free(font->s_FontLocals.m_pFontVertexDecl); diff --git a/gfx/drivers_shader/shader_hlsl.c b/gfx/drivers_shader/shader_hlsl.c index 156e6fa715..a1c2e2fd72 100644 --- a/gfx/drivers_shader/shader_hlsl.c +++ b/gfx/drivers_shader/shader_hlsl.c @@ -89,14 +89,6 @@ typedef struct hlsl_shader_data hlsl_shader_data_t; #define IDirect3DDevice9_CreateVertexShader(p, a, b) ((p)->CreateVertexShader(a, b)) #endif -#ifndef IDirect3DPixelShader9_Release -#define IDirect3DPixelShader9_Release(p) ((p)->Release()) -#endif - -#ifndef IDirect3DVertexShader9_Release -#define IDirect3DVertexShader9_Release(p) ((p)->Release()) -#endif - #ifndef ID3DXConstantTable_SetMatrix #define ID3DXConstantTable_SetMatrix(p,a,b,c) ((p)->SetMatrix(a,b,c)) #endif @@ -405,18 +397,18 @@ static void hlsl_deinit_progs(hlsl_shader_data_t *hlsl) for (i = 1; i < RARCH_HLSL_MAX_SHADERS; i++) { if (hlsl->prg[i].fprg && hlsl->prg[i].fprg != hlsl->prg[0].fprg) - IDirect3DPixelShader9_Release(hlsl->prg[i].fprg); + d3d_free_pixel_shader(hlsl->prg[i].fprg); if (hlsl->prg[i].vprg && hlsl->prg[i].vprg != hlsl->prg[0].vprg) - IDirect3DVertexShader9_Release(hlsl->prg[i].vprg); + d3d_free_vertex_shader(hlsl->prg[i].vprg); hlsl->prg[i].fprg = NULL; hlsl->prg[i].vprg = NULL; } if (hlsl->prg[0].fprg) - IDirect3DPixelShader9_Release(hlsl->prg[0].fprg); + d3d_free_pixel_shader(hlsl->prg[0].fprg); if (hlsl->prg[0].vprg) - IDirect3DVertexShader9_Release(hlsl->prg[0].vprg); + d3d_free_vertex_shader(hlsl->prg[0].vprg); hlsl->prg[0].fprg = NULL; hlsl->prg[0].vprg = NULL;