Create d3d pixel shader/vertex shader functions

This commit is contained in:
twinaphex 2018-01-06 23:10:27 +01:00
parent d7df6b3729
commit df2a31b0e9
4 changed files with 50 additions and 16 deletions

View File

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

View File

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

View File

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

View File

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