diff --git a/dlls/d3dx9_36/shader.c b/dlls/d3dx9_36/shader.c index 766b897cef8..5745884b6fe 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 2792327501b..ad092abe9e2 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); }