=?UTF-8?Q?Rico=20Sch=C3=BCller=20?=: d3dx9: Fix ID3DXConstantTable:: GetConstantElement() for structs.

Alexandre Julliard julliard at winehq.org
Tue Sep 4 12:38:36 CDT 2012


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

Author: Rico Schüller <kgbricola at web.de>
Date:   Tue Sep  4 09:44:28 2012 +0200

d3dx9: Fix ID3DXConstantTable::GetConstantElement() for structs.

---

 dlls/d3dx9_36/shader.c       |    2 +-
 dlls/d3dx9_36/tests/shader.c |    6 ++++++
 2 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/dlls/d3dx9_36/shader.c b/dlls/d3dx9_36/shader.c
index 766b897..5745884 100644
--- a/dlls/d3dx9_36/shader.c
+++ b/dlls/d3dx9_36/shader.c
@@ -1009,7 +1009,7 @@ static D3DXHANDLE WINAPI ID3DXConstantTableImpl_GetConstantElement(ID3DXConstant
 
     if (c && index < c->desc.Elements)
     {
-        if (c->constants) c = &c->constants[index];
+        if (c->desc.Elements > 1) c = &c->constants[index];
         TRACE("Returning constant %p\n", c);
         return handle_from_constant(c);
     }
diff --git a/dlls/d3dx9_36/tests/shader.c b/dlls/d3dx9_36/tests/shader.c
index 2792327..ad092ab 100644
--- a/dlls/d3dx9_36/tests/shader.c
+++ b/dlls/d3dx9_36/tests/shader.c
@@ -1848,6 +1848,12 @@ static void test_get_shader_constant_variables(void)
     element = ID3DXConstantTable_GetConstantByName(ctable, "s_2[0]", "invalid");
     ok(element == NULL, "GetConstantByName failed\n");
 
+    constant = ID3DXConstantTable_GetConstantByName(ctable, NULL, "s_2[0]");
+    ok(constant != NULL, "GetConstantByName failed\n");
+
+    element = ID3DXConstantTable_GetConstantElement(ctable, "s_2[0]", 0);
+    ok(constant == element, "GetConstantByName failed, got %p, expected %p\n", element, constant);
+
     count = ID3DXConstantTable_Release(ctable);
     ok(count == 0, "Release failed, got %u, expected %u\n", count, 0);
 }




More information about the wine-cvs mailing list