Thanks to Rémi Bernon for mentioning in !5814 the new test failure, which spurred the the first patch of this MR. Then one thing led to another and somehow the whole MR happened...
From: Matteo Bruni mbruni@codeweavers.com
Fixes: fe4e5225e45fd8bbdf262b3efe375dd1da178a25 --- dlls/d3dx9_36/shader.c | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/dlls/d3dx9_36/shader.c b/dlls/d3dx9_36/shader.c index f15356ecf53..c82478ad0c9 100644 --- a/dlls/d3dx9_36/shader.c +++ b/dlls/d3dx9_36/shader.c @@ -194,7 +194,13 @@ static BOOL WINAPI load_d3dassemble_once(INIT_ONCE *once, void *param, void **co * in sync regarding which library creates the unnumbered d3dcompiler.lib implib. * GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, D3DCompile) would * be nice, but "D3DCompile" will point to the IAT stub, not d3dcompiler_xy.dll */ +#if D3DX_SDK_VERSION == 42 + HMODULE mod = GetModuleHandleW(L"d3dcompiler_42"); +#elif D3DX_SDK_VERSION == 43 + HMODULE mod = GetModuleHandleW(L"d3dcompiler_43"); +#else HMODULE mod = GetModuleHandleW(D3DCOMPILER_DLL_W); +#endif void **assemble = param;
if (!mod)
From: Matteo Bruni mbruni@codeweavers.com
Fixes: 258056664af17da036510a310c7c50a1c3b0a8b9 --- dlls/d3dx9_36/tests/asm.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/dlls/d3dx9_36/tests/asm.c b/dlls/d3dx9_36/tests/asm.c index 6bcde249c76..a52f0667013 100644 --- a/dlls/d3dx9_36/tests/asm.c +++ b/dlls/d3dx9_36/tests/asm.c @@ -348,13 +348,18 @@ static void assembleshader_test(void) hr = D3DXAssembleShaderFromFileA(shader3_vsh_path, NULL, NULL, D3DXSHADER_SKIPVALIDATION, &shader, &messages); - ok(hr == D3D_OK, "Unexpected hr %#lx.\n", hr); + if (D3DX_SDK_VERSION < 42) + ok(hr == D3D_OK, "Unexpected hr %#lx.\n", hr); + else + todo_wine ok(hr == D3DXERR_INVALIDDATA, "Unexpected hr %#lx.\n", hr); if(messages) { trace("D3DXAssembleShaderFromFile path search messages:\n%s", (char *)ID3DXBuffer_GetBufferPointer(messages)); ID3DXBuffer_Release(messages); } if(shader) ID3DXBuffer_Release(shader); - } else skip("Couldn't create "include" directory\n"); + } + else + skip("Couldn't create "include" directory, error %#lx\n", GetLastError());
delete_file("shader.vsh"); delete_file("incl.vsh"); @@ -483,13 +488,18 @@ static void d3dxpreprocess_test(void) messages = NULL; hr = D3DXPreprocessShaderFromFileA(shader3_vsh_path, NULL, NULL, &shader, &messages); - ok(hr == D3D_OK, "Unexpected hr %#lx.\n", hr); + if (D3DX_SDK_VERSION < 42) + ok(hr == D3D_OK, "Unexpected hr %#lx.\n", hr); + else + todo_wine ok(hr == E_FAIL, "Unexpected hr %#lx.\n", hr); if(messages) { trace("D3DXPreprocessShaderFromFile path search messages:\n%s", (char *)ID3DXBuffer_GetBufferPointer(messages)); ID3DXBuffer_Release(messages); } if(shader) ID3DXBuffer_Release(shader); - } else skip("Couldn't create "include" directory\n"); + } + else + skip("Couldn't create "include" directory, error %#lx\n", GetLastError());
/* D3DXPreprocessShaderFromFile + #include test */ shader = NULL;
From: Matteo Bruni mbruni@codeweavers.com
Fixes: 0ef10854c8a243896cf1c1ee6008c15161081c3b --- dlls/d3dcompiler_43/tests/hlsl_d3d9.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/dlls/d3dcompiler_43/tests/hlsl_d3d9.c b/dlls/d3dcompiler_43/tests/hlsl_d3d9.c index 3f930e53758..2ba4b50c924 100644 --- a/dlls/d3dcompiler_43/tests/hlsl_d3d9.c +++ b/dlls/d3dcompiler_43/tests/hlsl_d3d9.c @@ -1789,6 +1789,7 @@ static void test_include(void) delete_file(L"include\include1.h"); delete_file(L"include1.h"); delete_file(L"include\include2.h"); + delete_file(L"include\include3.h"); delete_directory(L"include"); }
From: Matteo Bruni mbruni@codeweavers.com
Share the code with the existing d3dx9_36 tests. --- configure | 1 + configure.ac | 1 + dlls/d3dx9_42/tests/Makefile.in | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+) create mode 100644 dlls/d3dx9_42/tests/Makefile.in
diff --git a/configure b/configure index eddfea0379f..90b41de54be 100755 --- a/configure +++ b/configure @@ -22276,6 +22276,7 @@ wine_fn_config_makefile dlls/d3dx9_39 enable_d3dx9_39 wine_fn_config_makefile dlls/d3dx9_40 enable_d3dx9_40 wine_fn_config_makefile dlls/d3dx9_41 enable_d3dx9_41 wine_fn_config_makefile dlls/d3dx9_42 enable_d3dx9_42 +wine_fn_config_makefile dlls/d3dx9_42/tests enable_tests wine_fn_config_makefile dlls/d3dx9_43 enable_d3dx9_43 wine_fn_config_makefile dlls/d3dx9_43/tests enable_tests wine_fn_config_makefile dlls/d3dxof enable_d3dxof diff --git a/configure.ac b/configure.ac index cf698988a7b..3012a4d7b5b 100644 --- a/configure.ac +++ b/configure.ac @@ -2570,6 +2570,7 @@ WINE_CONFIG_MAKEFILE(dlls/d3dx9_39) WINE_CONFIG_MAKEFILE(dlls/d3dx9_40) WINE_CONFIG_MAKEFILE(dlls/d3dx9_41) WINE_CONFIG_MAKEFILE(dlls/d3dx9_42) +WINE_CONFIG_MAKEFILE(dlls/d3dx9_42/tests) WINE_CONFIG_MAKEFILE(dlls/d3dx9_43) WINE_CONFIG_MAKEFILE(dlls/d3dx9_43/tests) WINE_CONFIG_MAKEFILE(dlls/d3dxof) diff --git a/dlls/d3dx9_42/tests/Makefile.in b/dlls/d3dx9_42/tests/Makefile.in new file mode 100644 index 00000000000..050c4a28cf9 --- /dev/null +++ b/dlls/d3dx9_42/tests/Makefile.in @@ -0,0 +1,18 @@ +TESTDLL = d3dx9_42.dll +IMPORTS = d3dx9_42 d3d9 user32 gdi32 +EXTRADEFS = -DD3DX_SDK_VERSION=42 +PARENTSRC = ../../d3dx9_36/tests + +SOURCES = \ + asm.c \ + core.c \ + effect.c \ + line.c \ + math.c \ + mesh.c \ + rsrc.rc \ + shader.c \ + surface.c \ + texture.c \ + volume.c \ + xfile.c
From: Matteo Bruni mbruni@codeweavers.com
--- dlls/d3dcompiler_43/reflection.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/dlls/d3dcompiler_43/reflection.c b/dlls/d3dcompiler_43/reflection.c index e714aa05dd6..21b367f5002 100644 --- a/dlls/d3dcompiler_43/reflection.c +++ b/dlls/d3dcompiler_43/reflection.c @@ -2009,17 +2009,21 @@ HRESULT WINAPI D3DReflect(const void *data, SIZE_T data_size, REFIID riid, void if (!data || data_size < 32) { WARN("Invalid argument supplied.\n"); - return D3DERR_INVALIDCALL; + if (D3D_COMPILER_VERSION >= 43) + return D3DERR_INVALIDCALL; + if (D3D_COMPILER_VERSION) + return E_INVALIDARG; + return E_FAIL; }
if (temp[6] != data_size) { WARN("Wrong size supplied.\n"); -#if D3D_COMPILER_VERSION >= 46 - return D3DERR_INVALIDCALL; -#else + if (D3D_COMPILER_VERSION >= 46) + return D3DERR_INVALIDCALL; + if (D3D_COMPILER_VERSION == 42) + return E_INVALIDARG; return E_FAIL; -#endif }
if (!IsEqualGUID(riid, &IID_ID3D11ShaderReflection)
From: Matteo Bruni mbruni@codeweavers.com
Share the code with the existing d3dcompiler_47 tests. --- configure | 1 + configure.ac | 1 + dlls/d3dcompiler_42/tests/Makefile.in | 11 +++++ dlls/d3dcompiler_43/tests/hlsl_d3d11.c | 24 +++++++---- dlls/d3dcompiler_43/tests/reflection.c | 59 ++++++++++++++++---------- 5 files changed, 66 insertions(+), 30 deletions(-) create mode 100644 dlls/d3dcompiler_42/tests/Makefile.in
diff --git a/configure b/configure index 90b41de54be..08e7a3f7077 100755 --- a/configure +++ b/configure @@ -22221,6 +22221,7 @@ wine_fn_config_makefile dlls/d3dcompiler_39 enable_d3dcompiler_39 wine_fn_config_makefile dlls/d3dcompiler_40 enable_d3dcompiler_40 wine_fn_config_makefile dlls/d3dcompiler_41 enable_d3dcompiler_41 wine_fn_config_makefile dlls/d3dcompiler_42 enable_d3dcompiler_42 +wine_fn_config_makefile dlls/d3dcompiler_42/tests enable_tests wine_fn_config_makefile dlls/d3dcompiler_43 enable_d3dcompiler_43 wine_fn_config_makefile dlls/d3dcompiler_43/tests enable_tests wine_fn_config_makefile dlls/d3dcompiler_46 enable_d3dcompiler_46 diff --git a/configure.ac b/configure.ac index 3012a4d7b5b..306cbe03146 100644 --- a/configure.ac +++ b/configure.ac @@ -2515,6 +2515,7 @@ WINE_CONFIG_MAKEFILE(dlls/d3dcompiler_39) WINE_CONFIG_MAKEFILE(dlls/d3dcompiler_40) WINE_CONFIG_MAKEFILE(dlls/d3dcompiler_41) WINE_CONFIG_MAKEFILE(dlls/d3dcompiler_42) +WINE_CONFIG_MAKEFILE(dlls/d3dcompiler_42/tests) WINE_CONFIG_MAKEFILE(dlls/d3dcompiler_43) WINE_CONFIG_MAKEFILE(dlls/d3dcompiler_43/tests) WINE_CONFIG_MAKEFILE(dlls/d3dcompiler_46) diff --git a/dlls/d3dcompiler_42/tests/Makefile.in b/dlls/d3dcompiler_42/tests/Makefile.in new file mode 100644 index 00000000000..78dd100dc40 --- /dev/null +++ b/dlls/d3dcompiler_42/tests/Makefile.in @@ -0,0 +1,11 @@ +TESTDLL = d3dcompiler_42.dll +IMPORTS = d3d9 user32 d3dcompiler_42 +EXTRADEFS = -DD3D_COMPILER_VERSION=42 +PARENTSRC = ../../d3dcompiler_43/tests + +SOURCES = \ + asm.c \ + blob.c \ + hlsl_d3d11.c \ + hlsl_d3d9.c \ + reflection.c diff --git a/dlls/d3dcompiler_43/tests/hlsl_d3d11.c b/dlls/d3dcompiler_43/tests/hlsl_d3d11.c index 309ba6b2663..67f61c30a44 100644 --- a/dlls/d3dcompiler_43/tests/hlsl_d3d11.c +++ b/dlls/d3dcompiler_43/tests/hlsl_d3d11.c @@ -924,16 +924,24 @@ static void check_parameter_desc(const D3D11_SIGNATURE_PARAMETER_DESC *desc, const D3D11_SIGNATURE_PARAMETER_DESC *expect) { todo_wine_if(strcmp(desc->SemanticName, expect->SemanticName)) - ok(!strcmp(desc->SemanticName, expect->SemanticName), "Got name %s.\n", debugstr_a(desc->SemanticName)); - ok(desc->SemanticIndex == expect->SemanticIndex, "Got index %u.\n", desc->SemanticIndex); - ok(desc->Register == expect->Register, "Got register %u.\n", desc->Register); + ok(!strcmp(desc->SemanticName, expect->SemanticName), "Got name %s, expected %s.\n", + debugstr_a(desc->SemanticName), debugstr_a(expect->SemanticName)); + ok(desc->SemanticIndex == expect->SemanticIndex, "Got index %u, expected %u.\n", + desc->SemanticIndex, expect->SemanticIndex); + ok(desc->Register == expect->Register, "Got register %u, expected %u.\n", + desc->Register, expect->Register); todo_wine_if(desc->SystemValueType != expect->SystemValueType) - ok(desc->SystemValueType == expect->SystemValueType, "Got sysval %u.\n", desc->SystemValueType); - ok(desc->ComponentType == expect->ComponentType, "Got data type %u.\n", desc->ComponentType); - ok(desc->Mask == expect->Mask, "Got mask %#x.\n", desc->Mask); + ok(desc->SystemValueType == expect->SystemValueType, "Got sysval %u, expected %u.\n", + desc->SystemValueType, expect->SystemValueType); + ok(desc->ComponentType == expect->ComponentType, "Got data type %u, expected %u.\n", + desc->ComponentType, expect->ComponentType); + ok(desc->Mask == expect->Mask, "Got mask %#x, expected %#x.\n", desc->Mask, expect->Mask); todo_wine_if(desc->ReadWriteMask != expect->ReadWriteMask) - ok(desc->ReadWriteMask == expect->ReadWriteMask, "Got used mask %#x.\n", desc->ReadWriteMask); - ok(desc->Stream == expect->Stream, "Got stream %u.\n", desc->Stream); + ok(desc->ReadWriteMask == expect->ReadWriteMask + || broken(expect->ReadWriteMask == 0x5 && (desc->ReadWriteMask == 0 || desc->ReadWriteMask == 0x7)), + "Got used mask %#x, expected %#x.\n", + desc->ReadWriteMask, expect->ReadWriteMask); + ok(desc->Stream == expect->Stream, "Got stream %u, expected %u.\n", desc->Stream, expect->Stream); }
static void test_semantic_reflection(void) diff --git a/dlls/d3dcompiler_43/tests/reflection.c b/dlls/d3dcompiler_43/tests/reflection.c index ff6a5f8925b..85fea589c27 100644 --- a/dlls/d3dcompiler_43/tests/reflection.c +++ b/dlls/d3dcompiler_43/tests/reflection.c @@ -107,11 +107,10 @@ static void test_reflection_references(void) ok(!count, "Got unexpected count %lu.\n", count);
/* check invalid cases */ -#if D3D_COMPILER_VERSION >= 46 - expected = E_INVALIDARG; -#else - expected = E_NOINTERFACE; -#endif + if (D3D_COMPILER_VERSION >= 46) + expected = E_INVALIDARG; + else + expected = E_NOINTERFACE; hr = D3DReflect(test_reflection_blob, test_reflection_blob[6], &IID_ID3D10ShaderReflection, (void **)&ref10); ok(hr == expected || broken(hr == E_NOINTERFACE) /* Windows 8 */, "Got unexpected hr %#lx, expected %#lx.\n", hr, expected); @@ -120,35 +119,48 @@ static void test_reflection_references(void) ok(hr == expected || broken(hr == E_NOINTERFACE) /* Windows 8 */, "Got unexpected hr %#lx, expected %#lx.\n", hr, expected);
+ if (D3D_COMPILER_VERSION >= 43) + expected = D3DERR_INVALIDCALL; + else if (D3D_COMPILER_VERSION) + expected = E_INVALIDARG; + else + expected = E_FAIL; hr = D3DReflect(NULL, test_reflection_blob[6], &IID_ID3D10ShaderReflection1, (void **)&ref10_1); - ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr %#lx.\n", hr); + ok(hr == expected, "Got unexpected hr %#lx, expected %#lx.\n", hr, expected);
hr = D3DReflect(NULL, test_reflection_blob[6], &IID_ID3D11ShaderReflection, (void **)&ref11); - ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr %#lx.\n", hr); + ok(hr == expected, "Got unexpected hr %#lx, expected %#lx.\n", hr, expected);
/* returns different errors with different sizes */ hr = D3DReflect(test_reflection_blob, 31, &IID_ID3D10ShaderReflection1, (void **)&ref10_1); - ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr %#lx.\n", hr); + ok(hr == expected, "Got unexpected hr %#lx, expected %#lx.\n", hr, expected);
-#if D3D_COMPILER_VERSION >= 46 - expected = D3DERR_INVALIDCALL; -#else - expected = E_FAIL; -#endif + if (D3D_COMPILER_VERSION >= 46) + expected = D3DERR_INVALIDCALL; + else if (D3D_COMPILER_VERSION == 42) + expected = E_INVALIDARG; + else + expected = E_FAIL; hr = D3DReflect(test_reflection_blob, 32, &IID_ID3D10ShaderReflection1, (void **)&ref10_1); ok(hr == expected, "Got unexpected hr %#lx, expected %#lx.\n", hr, expected);
hr = D3DReflect(test_reflection_blob, test_reflection_blob[6]-1, &IID_ID3D10ShaderReflection1, (void **)&ref10_1); ok(hr == expected, "Got unexpected hr %#lx, expected %#lx.\n", hr, expected);
- hr = D3DReflect(test_reflection_blob, 31, &IID_ID3D11ShaderReflection, (void **)&ref11); - ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr %#lx.\n", hr); - hr = D3DReflect(test_reflection_blob, 32, &IID_ID3D11ShaderReflection, (void **)&ref11); ok(hr == expected, "Got unexpected hr %#lx, expected %#lx.\n", hr, expected);
hr = D3DReflect(test_reflection_blob, test_reflection_blob[6]-1, &IID_ID3D11ShaderReflection, (void **)&ref11); ok(hr == expected, "Got unexpected hr %#lx, expected %#lx.\n", hr, expected); + + if (D3D_COMPILER_VERSION >= 43) + expected = D3DERR_INVALIDCALL; + else if (D3D_COMPILER_VERSION) + expected = E_INVALIDARG; + else + expected = D3DERR_INVALIDCALL; + hr = D3DReflect(test_reflection_blob, 31, &IID_ID3D11ShaderReflection, (void **)&ref11); + ok(hr == expected, "Got unexpected hr %#lx, expected %#lx.\n", hr, expected); } #endif
@@ -920,7 +932,7 @@ static void test_reflection_desc_ps(void) ok(!desc.Stream, "(%u): got unexpected Stream %u.\n", i, desc.Stream); }
-#if D3D_COMPILER_VERSION +#if D3D_COMPILER_VERSION >= 43 size_x = 0xdeadbeef; size_y = 0xdeadbeef; size_z = 0xdeadbeef; @@ -1070,7 +1082,7 @@ static void test_reflection_desc_ps_output(void) for (i = 0; i < ARRAY_SIZE(tests); ++i) { hr = call_reflect(tests[i].blob, tests[i].blob[6], &IID_ID3D11ShaderReflection, (void **)&ref11); - if (!D3D_COMPILER_VERSION) + if (D3D_COMPILER_VERSION < 43) { todo_wine ok(hr == E_INVALIDARG, "%u: Got unexpected hr %#lx.\n", i, hr); if (SUCCEEDED(hr)) @@ -1264,10 +1276,13 @@ static void test_reflection_cs(void) if (FAILED(hr)) return; size_total = ref11->lpVtbl->GetThreadGroupSize(ref11, &size_x, &size_y, &size_z); - ok(size_x == 16, "Unexpected size %u.\n", size_x); - ok(size_y == 8, "Unexpected size %u.\n", size_y); - ok(size_z == 4, "Unexpected size %u.\n", size_z); - ok(size_total == size_x * size_y * size_z, "Unexpected size %u.\n", size_total); + if (D3D_COMPILER_VERSION >= 43) + { + ok(size_x == 16, "Unexpected size %u.\n", size_x); + ok(size_y == 8, "Unexpected size %u.\n", size_y); + ok(size_z == 4, "Unexpected size %u.\n", size_z); + ok(size_total == size_x * size_y * size_z, "Unexpected size %u.\n", size_total); + }
ref11->lpVtbl->Release(ref11); }