Module: wine Branch: master Commit: ea4f402164cde73a1029eca67c83b82babf44327 URL: http://source.winehq.org/git/wine.git/?a=commit;h=ea4f402164cde73a1029eca67c...
Author: Rico Schüller kgbricola@web.de Date: Sat Aug 25 16:28:22 2012 +0200
d3dx9: Improve ID3DXConstantTable::GetConstant().
---
dlls/d3dx9_36/shader.c | 25 +++++++++++++++++++------ 1 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/dlls/d3dx9_36/shader.c b/dlls/d3dx9_36/shader.c index e6e0e26..db48dd8 100644 --- a/dlls/d3dx9_36/shader.c +++ b/dlls/d3dx9_36/shader.c @@ -970,19 +970,32 @@ static UINT WINAPI ID3DXConstantTableImpl_GetSamplerIndex(ID3DXConstantTable *if static D3DXHANDLE WINAPI ID3DXConstantTableImpl_GetConstant(ID3DXConstantTable *iface, D3DXHANDLE constant, UINT index) { struct ID3DXConstantTableImpl *This = impl_from_ID3DXConstantTable(iface); + struct ctab_constant *c;
TRACE("(%p)->(%p, %d)\n", This, constant, index);
if (constant) { - FIXME("Only top level constants supported\n"); - return NULL; + c = get_valid_constant(This, constant); + if (c && index < c->desc.StructMembers) + { + c = &c->constants[index]; + TRACE("Returning constant %p\n", c); + return handle_from_constant(c); + } + } + else + { + if (index < This->desc.Constants) + { + c = &This->constants[index]; + TRACE("Returning constant %p\n", c); + return handle_from_constant(c); + } }
- if (index >= This->desc.Constants) - return NULL; - - return handle_from_constant(&This->constants[index]); + WARN("Index out of range\n"); + return NULL; }
static D3DXHANDLE WINAPI ID3DXConstantTableImpl_GetConstantByName(ID3DXConstantTable *iface, D3DXHANDLE constant, LPCSTR name)