Module: wine Branch: master Commit: a76ac0a894f2d046ba7f69795fc421a8ec061e65 URL: http://source.winehq.org/git/wine.git/?a=commit;h=a76ac0a894f2d046ba7f69795f... Author: Travis Athougies <iammisc(a)gmail.com> Date: Wed Jun 22 13:10:51 2011 -0700 d3dx9_36: Implemented support for samplers in ID3DXConstantTable. --- dlls/d3dx9_36/shader.c | 27 +++++++++++++++++++++------ 1 files changed, 21 insertions(+), 6 deletions(-) diff --git a/dlls/d3dx9_36/shader.c b/dlls/d3dx9_36/shader.c index 0e0709d..bddef33 100644 --- a/dlls/d3dx9_36/shader.c +++ b/dlls/d3dx9_36/shader.c @@ -748,13 +748,23 @@ static HRESULT WINAPI ID3DXConstantTableImpl_GetConstantDesc(ID3DXConstantTable* return D3D_OK; } -static UINT WINAPI ID3DXConstantTableImpl_GetSamplerIndex(LPD3DXCONSTANTTABLE iface, D3DXHANDLE constant) +static UINT WINAPI ID3DXConstantTableImpl_GetSamplerIndex(ID3DXConstantTable *iface, D3DXHANDLE constant) { ID3DXConstantTableImpl *This = impl_from_ID3DXConstantTable(iface); + D3DXCONSTANT_DESC desc; + UINT count = 1; + HRESULT res; + + TRACE("(%p)->(%p)\n", This, constant); + + res = ID3DXConstantTable_GetConstantDesc(iface, constant, &desc, &count); + if (FAILED(res)) + return (UINT)-1; - FIXME("(%p)->(%p): stub\n", This, constant); + if (desc.RegisterSet != D3DXRS_SAMPLER) + return (UINT)-1; - return (UINT)-1; + return desc.RegisterIndex; } static D3DXHANDLE WINAPI ID3DXConstantTableImpl_GetConstant(ID3DXConstantTable* iface, D3DXHANDLE constant, UINT index) @@ -1225,10 +1235,15 @@ HRESULT WINAPI D3DXGetShaderConstantTableEx(CONST DWORD* byte_code, if (hr != D3D_OK) goto error; - if (constant_info[i].RegisterSet != D3DXRS_FLOAT4) - FIXME("Don't know how to calculate Bytes for non D3DXRS_FLOAT4 constants\n"); + if (constant_info[i].RegisterSet != D3DXRS_FLOAT4 && + constant_info[i].RegisterSet != D3DXRS_SAMPLER) + FIXME("Don't know how to calculate Bytes for constants of type %d\n", + constant_info[i].RegisterSet); - /* D3DXRS_FLOAT4 has a base size of 4 (not taking into account dimensions and element count) */ + /* + * D3DXRS_FLOAT4 and D3DXRS_SAMPLER have a base size of 4 + * (not taking into account dimensions and element count) + */ object->constants[i].desc.Bytes = 4; /* Take into account dimensions and elements */