=?UTF-8?Q?Rico=20Sch=C3=BCller=20?=: d3dx9: Improve ID3DXConstantTable:: GetConstant().

Alexandre Julliard julliard at winehq.org
Mon Aug 27 14:35:02 CDT 2012


Module: wine
Branch: master
Commit: ea4f402164cde73a1029eca67c83b82babf44327
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ea4f402164cde73a1029eca67c83b82babf44327

Author: Rico Schüller <kgbricola at 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)




More information about the wine-cvs mailing list