Commit e67920f1 authored by Józef Kucia's avatar Józef Kucia Committed by Alexandre Julliard

d3dx9: Introduce a helper function for setting float shader constants.

parent c9f90256
......@@ -672,6 +672,15 @@ static inline D3DXHANDLE handle_from_constant_index(UINT index)
return (D3DXHANDLE)(DWORD_PTR)(index + 1);
}
static inline void set_float_shader_constant(struct ID3DXConstantTableImpl *table, IDirect3DDevice9 *device,
UINT register_index, const FLOAT *data, UINT count)
{
if (is_vertex_shader(table->desc.Version))
IDirect3DDevice9_SetVertexShaderConstantF(device, register_index, data, count);
else
IDirect3DDevice9_SetPixelShaderConstantF(device, register_index, data, count);
}
/*** IUnknown methods ***/
static HRESULT WINAPI ID3DXConstantTableImpl_QueryInterface(ID3DXConstantTable *iface, REFIID riid, void **out)
{
......@@ -882,10 +891,7 @@ static HRESULT set_float_array(ID3DXConstantTable *iface, LPDIRECT3DDEVICE9 devi
FIXME("Unhandled type passed to set_float_array\n");
return D3DERR_INVALIDCALL;
}
if (is_vertex_shader(This->desc.Version))
IDirect3DDevice9_SetVertexShaderConstantF(device, desc.RegisterIndex + i, row, 1);
else
IDirect3DDevice9_SetPixelShaderConstantF(device, desc.RegisterIndex + i, row, 1);
set_float_shader_constant(This, device, desc.RegisterIndex + i, row, 1);
}
break;
default:
......@@ -1004,12 +1010,8 @@ static HRESULT WINAPI ID3DXConstantTableImpl_SetVectorArray(ID3DXConstantTable *
switch (desc.RegisterSet)
{
case D3DXRS_FLOAT4:
if (is_vertex_shader(This->desc.Version))
IDirect3DDevice9_SetVertexShaderConstantF(device, desc.RegisterIndex, (float *)vector,
min(desc.RegisterCount, count));
else
IDirect3DDevice9_SetPixelShaderConstantF(device, desc.RegisterIndex, (float *)vector,
min(desc.RegisterCount, count));
set_float_shader_constant(This, device, desc.RegisterIndex, (float *)vector,
min(desc.RegisterCount, count));
break;
default:
FIXME("Handle other register sets\n");
......@@ -1060,10 +1062,7 @@ static HRESULT WINAPI ID3DXConstantTableImpl_SetMatrixArray(ID3DXConstantTable *
else
D3DXMatrixTranspose(&temp, &matrix[i]);
if (is_vertex_shader(This->desc.Version))
IDirect3DDevice9_SetVertexShaderConstantF(device, desc.RegisterIndex + i * 4, &temp.u.s._11, 4);
else
IDirect3DDevice9_SetPixelShaderConstantF(device, desc.RegisterIndex + i * 4, &temp.u.s._11, 4);
set_float_shader_constant(This, device, desc.RegisterIndex + i * 4, &temp.u.s._11, 4);
}
break;
default:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment