Rico Schüller : d3dcompiler: Implement ID3D11ShaderReflectionType::IsEqual().
Alexandre Julliard
julliard at winehq.org
Wed Mar 2 12:23:47 CST 2011
Module: wine
Branch: master
Commit: 4080242d7f1d5316a2c998f6e7edf609bc12666c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=4080242d7f1d5316a2c998f6e7edf609bc12666c
Author: Rico Schüller <kgbricola at web.de>
Date: Tue Mar 1 22:36:19 2011 +0100
d3dcompiler: Implement ID3D11ShaderReflectionType::IsEqual().
---
dlls/d3dcompiler_43/reflection.c | 15 +++++++++++++--
dlls/d3dcompiler_43/tests/reflection.c | 29 +++++++++++++++++++++++++++++
2 files changed, 42 insertions(+), 2 deletions(-)
diff --git a/dlls/d3dcompiler_43/reflection.c b/dlls/d3dcompiler_43/reflection.c
index e97512f..96c2920 100644
--- a/dlls/d3dcompiler_43/reflection.c
+++ b/dlls/d3dcompiler_43/reflection.c
@@ -872,9 +872,20 @@ static LPCSTR STDMETHODCALLTYPE d3dcompiler_shader_reflection_type_GetMemberType
static HRESULT STDMETHODCALLTYPE d3dcompiler_shader_reflection_type_IsEqual(
ID3D11ShaderReflectionType *iface, ID3D11ShaderReflectionType *type)
{
- FIXME("iface %p, type %p stub!\n", iface, type);
+ struct d3dcompiler_shader_reflection_type *This = impl_from_ID3D11ShaderReflectionType(iface);
- return E_NOTIMPL;
+ TRACE("iface %p, type %p\n", iface, type);
+
+ if (This == &null_type)
+ {
+ WARN("Null type specified\n");
+ return E_FAIL;
+ }
+
+ if (iface == type)
+ return S_OK;
+
+ return S_FALSE;
}
static ID3D11ShaderReflectionType * STDMETHODCALLTYPE d3dcompiler_shader_reflection_type_GetSubType(
diff --git a/dlls/d3dcompiler_43/tests/reflection.c b/dlls/d3dcompiler_43/tests/reflection.c
index fb27e0d..70c062e 100644
--- a/dlls/d3dcompiler_43/tests/reflection.c
+++ b/dlls/d3dcompiler_43/tests/reflection.c
@@ -1380,6 +1380,18 @@ static void test_reflection_constant_buffer(void)
t11 = t11_valid->lpVtbl->GetMemberTypeByName(t11_valid, "invalid");
ok(t11_dummy == t11, "GetMemberTypeByName failed, got %p, expected %p\n", t11, t11_dummy);
+ hr = t11_dummy->lpVtbl->IsEqual(t11_dummy, t11_dummy);
+ ok(hr == E_FAIL, "IsEqual failed, got %x, expected %x\n", hr, E_FAIL);
+
+ hr = t11_valid->lpVtbl->IsEqual(t11_valid, t11_dummy);
+ ok(hr == S_FALSE, "IsEqual failed, got %x, expected %x\n", hr, S_FALSE);
+
+ hr = t11_dummy->lpVtbl->IsEqual(t11_dummy, t11_valid);
+ ok(hr == E_FAIL, "IsEqual failed, got %x, expected %x\n", hr, E_FAIL);
+
+ hr = t11_valid->lpVtbl->IsEqual(t11_valid, t11_valid);
+ ok(hr == S_OK, "IsEqual failed, got %x, expected %x\n", hr, S_OK);
+
/* constant buffers */
for (i = 0; i < sizeof(test_reflection_constant_buffer_cb_result)/sizeof(*test_reflection_constant_buffer_cb_result); ++i)
{
@@ -1472,6 +1484,23 @@ static void test_reflection_constant_buffer(void)
string = t11->lpVtbl->GetMemberTypeName(t11, 1);
ok(!strcmp(string, "b"), "GetMemberTypeName failed, got \"%s\", expected \"%s\"\n", string, "b");
+ /* float vs float (in struct) */
+ hr = t11->lpVtbl->IsEqual(t11, t11_valid);
+ ok(hr == S_FALSE, "IsEqual failed, got %x, expected %x\n", hr, S_FALSE);
+
+ hr = t11_valid->lpVtbl->IsEqual(t11_valid, t11);
+ ok(hr == S_FALSE, "IsEqual failed, got %x, expected %x\n", hr, S_FALSE);
+
+ /* float vs float */
+ t = t11->lpVtbl->GetMemberTypeByIndex(t11, 0);
+ ok(t != t11_dummy, "GetMemberTypeByIndex failed\n");
+
+ t2 = t11->lpVtbl->GetMemberTypeByIndex(t11, 1);
+ ok(t2 != t11_dummy, "GetMemberTypeByIndex failed\n");
+
+ hr = t->lpVtbl->IsEqual(t, t2);
+ ok(hr == S_OK, "IsEqual failed, got %x, expected %x\n", hr, S_OK);
+
count = ref11->lpVtbl->Release(ref11);
ok(count == 0, "Release failed %u\n", count);
}
More information about the wine-cvs
mailing list