Create d3d_free_vertex_shader/d3d_free_pixel_shader

This commit is contained in:
twinaphex 2018-01-06 22:57:44 +01:00
parent e03e578212
commit d7df6b3729
4 changed files with 40 additions and 15 deletions

View File

@ -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

View File

@ -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,

View File

@ -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);

View File

@ -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;