diff --git a/gfx/common/d3d_common.c b/gfx/common/d3d_common.c index 4a7ae18939..47b2279af2 100644 --- a/gfx/common/d3d_common.c +++ b/gfx/common/d3d_common.c @@ -1051,6 +1051,44 @@ void d3d_free_pixel_shader(LPDIRECT3DDEVICE dev, void *data) #endif } +bool d3d_create_vertex_shader(LPDIRECT3DDEVICE dev, const DWORD *a, void **b) +{ +#ifdef HAVE_D3D9 + if (!dev) + return false; +#if defined(__cplusplus) + if (dev->CreateVertexShader(a, b) != D3D_OK) + return false; +#else + if (IDirect3DDevice9_CreateVertexShader(dev, a, + (LPDIRECT3DVERTEXSHADER*)b) != D3D_OK) + return false; +#endif + return true; +#else + return false; +#endif +} + +bool d3d_create_pixel_shader(LPDIRECT3DDEVICE dev, const DWORD *a, void **b) +{ +#ifdef HAVE_D3D9 + if (!dev) + return false; +#if defined(__cplusplus) + if (dev->CreatePixelShader(a, b) != D3D_OK) + return false; +#else + if (IDirect3DDevice9_CreatePixelShader(dev, a, + (LPDIRECT3DPIXELSHADER*)b) != D3D_OK) + return false; +#endif + return true; +#else + return false; +#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 32434e5043..73709999b3 100644 --- a/gfx/common/d3d_common.h +++ b/gfx/common/d3d_common.h @@ -93,6 +93,12 @@ void d3d_unlock_rectangle(LPDIRECT3DTEXTURE tex); void d3d_set_texture(LPDIRECT3DDEVICE dev, unsigned sampler, void *tex_data); +bool d3d_create_vertex_shader(LPDIRECT3DDEVICE dev, + const DWORD *a, void **b); + +bool d3d_create_pixel_shader(LPDIRECT3DDEVICE dev, + const DWORD *a, void **b); + void d3d_free_pixel_shader(LPDIRECT3DDEVICE dev, void *data); void d3d_free_vertex_shader(LPDIRECT3DDEVICE dev, void *data); diff --git a/gfx/drivers_font/xdk360_fonts.cpp b/gfx/drivers_font/xdk360_fonts.cpp index dff3b32a1d..3ca6d8d988 100644 --- a/gfx/drivers_font/xdk360_fonts.cpp +++ b/gfx/drivers_font/xdk360_fonts.cpp @@ -484,22 +484,20 @@ static HRESULT xdk360_video_font_create_shaders(xdk360_video_font_t * font) if (hr >= 0) { - hr = d3dr->CreateVertexShader((const DWORD*)pShaderCode->GetBufferPointer(), - &font->s_FontLocals.m_pFontVertexShader ); + bool ret = d3d_create_vertex_shader(d3dr, (const DWORD*)pShaderCode->GetBufferPointer(), &font->s_FontLocals.m_pFontVertexShader ); d3dxbuffer_release(pShaderCode); - if (hr >= 0) + if (!ret) { hr = D3DXCompileShader(font_hlsl_d3d9_program, sizeof(font_hlsl_d3d9_program)-1 , NULL, NULL, "main_fragment", "ps.2.0", 0,&pShaderCode, NULL, NULL ); if (hr >= 0) { - hr = d3dr->CreatePixelShader((DWORD*)pShaderCode->GetBufferPointer(), - &font->s_FontLocals.m_pFontPixelShader ); + ret = d3d_create_pixel_shader(d3dr, (DWORD*)pShaderCode->GetBufferPointer(), &font->s_FontLocals.m_pFontPixelShader); d3dxbuffer_release(pShaderCode); - if (hr >= 0) + if (!ret) { hr = 0; break; diff --git a/gfx/drivers_shader/shader_hlsl.c b/gfx/drivers_shader/shader_hlsl.c index a1c2e2fd72..b8bb429d38 100644 --- a/gfx/drivers_shader/shader_hlsl.c +++ b/gfx/drivers_shader/shader_hlsl.c @@ -81,14 +81,6 @@ typedef struct hlsl_shader_data hlsl_shader_data_t; #define ID3DXConstantTable_GetConstantByName(p,a,b) ((p)->GetConstantByName(a, b)) #endif -#ifndef IDirect3DDevice9_CreatePixelShader -#define IDirect3DDevice9_CreatePixelShader(p, a, b) ((p)->CreatePixelShader(a, b)) -#endif - -#ifndef IDirect3DDevice9_CreateVertexShader -#define IDirect3DDevice9_CreateVertexShader(p, a, b) ((p)->CreateVertexShader(a, b)) -#endif - #ifndef ID3DXConstantTable_SetMatrix #define ID3DXConstantTable_SetMatrix(p,a,b,c) ((p)->SetMatrix(a,b,c)) #endif @@ -281,8 +273,8 @@ static bool hlsl_compile_program( goto end; } - IDirect3DDevice9_CreatePixelShader(d3dr, (const DWORD*)ID3DXConstantTable_GetBufferPointer(code_f), &program->fprg); - IDirect3DDevice9_CreateVertexShader(d3dr, (const DWORD*)ID3DXConstantTable_GetBufferPointer(code_v), &program->vprg); + d3d_create_pixel_shader(d3dr, (const DWORD*)ID3DXConstantTable_GetBufferPointer(code_f), &program->fprg); + d3d_create_vertex_shader(d3dr, (const DWORD*)ID3DXConstantTable_GetBufferPointer(code_v), &program->vprg); d3dxbuffer_release((void*)code_f); d3dxbuffer_release((void*)code_v);