[PATCH 0/1] MR6190: d3dx9/tests: Add some tests for D3DXEFFECT_DESC fields.
From: Nikolay Sivov <nsivov(a)codeweavers.com> --- dlls/d3dx9_36/tests/effect.c | 135 ++++++++++++++++++++++++++++++++++- 1 file changed, 134 insertions(+), 1 deletion(-) diff --git a/dlls/d3dx9_36/tests/effect.c b/dlls/d3dx9_36/tests/effect.c index 0e7028f38b6..c884ee50548 100644 --- a/dlls/d3dx9_36/tests/effect.c +++ b/dlls/d3dx9_36/tests/effect.c @@ -236,6 +236,7 @@ static const char effect_desc[] = static void test_create_effect_and_pool(IDirect3DDevice9 *device) { + D3DXEFFECT_DESC desc; HRESULT hr; ID3DXEffect *effect; ID3DXBaseEffect *base; @@ -259,6 +260,16 @@ static void test_create_effect_and_pool(IDirect3DDevice9 *device) hr = D3DXCreateEffect(device, effect_desc, sizeof(effect_desc), NULL, NULL, 0, NULL, &effect, NULL); ok(hr == D3D_OK, "Got result %lx, expected 0 (D3D_OK)\n", hr); + hr = effect->lpVtbl->GetDesc(effect, &desc); + ok(hr == D3D_OK, "Unexpected hr %#lx.\n", hr); + todo_wine + ok(!!desc.Creator, "Unexpected pointer.\n"); + if (desc.Creator) + ok(!strcmp(desc.Creator, "D3DX Effect Compiler"), "Unexpected creator %s.\n", desc.Creator); + ok(!desc.Functions, "Unexpected value %u.\n", desc.Functions); + ok(desc.Techniques == 1, "Unexpected value %u.\n", desc.Techniques); + ok(!desc.Parameters, "Unexpected value %u.\n", desc.Parameters); + hr = effect->lpVtbl->QueryInterface(effect, &IID_ID3DXBaseEffect, (void **)&base); ok(hr == E_NOINTERFACE, "QueryInterface failed, got %lx, expected %lx (E_NOINTERFACE)\n", hr, E_NOINTERFACE); @@ -2472,6 +2483,7 @@ static void test_effect_setvalue_object(IDirect3DDevice9 *device) IDirect3DTexture9 *texture_set; IDirect3DTexture9 *texture; D3DXHANDLE parameter; + D3DXEFFECT_DESC desc; ID3DXEffect *effect; unsigned int i; ULONG count; @@ -2481,6 +2493,16 @@ static void test_effect_setvalue_object(IDirect3DDevice9 *device) sizeof(test_effect_parameter_value_blob_object), NULL, NULL, 0, NULL, &effect, NULL); ok(hr == D3D_OK, "Got result %#lx, expected 0 (D3D_OK).\n", hr); + hr = effect->lpVtbl->GetDesc(effect, &desc); + ok(hr == D3D_OK, "Unexpected hr %#lx.\n", hr); + todo_wine + ok(!!desc.Creator, "Unexpected pointer.\n"); + if (desc.Creator) + ok(!strcmp(desc.Creator, "D3DX Effect Compiler"), "Unexpected creator %s.\n", desc.Creator); + ok(!desc.Functions, "Unexpected value %u.\n", desc.Functions); + ok(desc.Techniques == 1, "Unexpected value %u.\n", desc.Techniques); + ok(desc.Parameters == 7, "Unexpected value %u.\n", desc.Parameters); + parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "tex"); ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter); @@ -2586,6 +2608,7 @@ static const DWORD test_effect_variable_names_blob[] = static void test_effect_variable_names(IDirect3DDevice9 *device) { + D3DXEFFECT_DESC desc; ID3DXEffect *effect; ULONG count; HRESULT hr; @@ -2595,6 +2618,16 @@ static void test_effect_variable_names(IDirect3DDevice9 *device) sizeof(test_effect_variable_names_blob), NULL, NULL, 0, NULL, &effect, NULL); ok(hr == D3D_OK, "D3DXCreateEffect failed, got %#lx, expected %#lx\n", hr, D3D_OK); + hr = effect->lpVtbl->GetDesc(effect, &desc); + ok(hr == D3D_OK, "Unexpected hr %#lx.\n", hr); + todo_wine + ok(!!desc.Creator, "Unexpected pointer.\n"); + if (desc.Creator) + ok(!strcmp(desc.Creator, "D3DX Effect Compiler"), "Unexpected creator %s.\n", desc.Creator); + ok(!desc.Functions, "Unexpected value %u.\n", desc.Functions); + ok(desc.Techniques == 1, "Unexpected value %u.\n", desc.Techniques); + ok(desc.Parameters == 6, "Unexpected value %u.\n", desc.Parameters); + /* * check invalid calls * This will crash: @@ -2993,6 +3026,7 @@ static void test_effect_states(IDirect3DDevice9 *device) }}}; IDirect3DVertexShader9 *vshader; + D3DXEFFECT_DESC desc; ID3DXEffect *effect; UINT byte_code_size; D3DXVECTOR4 fvect; @@ -3008,6 +3042,16 @@ static void test_effect_states(IDirect3DDevice9 *device) NULL, NULL, 0, NULL, &effect, NULL); ok(hr == D3D_OK, "Unexpected hr %#lx.\n", hr); + hr = effect->lpVtbl->GetDesc(effect, &desc); + ok(hr == D3D_OK, "Unexpected hr %#lx.\n", hr); + todo_wine + ok(!!desc.Creator, "Unexpected pointer.\n"); + if (desc.Creator) + ok(!strcmp(desc.Creator, "D3DX Effect Compiler"), "Unexpected creator %s.\n", desc.Creator); + ok(!desc.Functions, "Unexpected value %u.\n", desc.Functions); + ok(desc.Techniques == 1, "Unexpected value %u.\n", desc.Techniques); + ok(desc.Parameters == 3, "Unexpected value %u.\n", desc.Parameters); + hr = effect->lpVtbl->End(effect); ok(hr == D3D_OK, "Unexpected hr %#lx.\n", hr); @@ -4561,6 +4605,7 @@ static void test_effect_preshader(IDirect3DDevice9 *device) D3DXVECTOR4 fdata[ARRAY_SIZE(test_effect_preshader_fvect_p)]; int idata[ARRAY_SIZE(test_effect_preshader_iconsts)][4]; IDirect3DVertexShader9 *vshader; + D3DXEFFECT_DESC desc; unsigned int i; D3DCAPS9 caps; @@ -4577,6 +4622,16 @@ static void test_effect_preshader(IDirect3DDevice9 *device) NULL, NULL, 0, NULL, &effect, NULL); ok(hr == D3D_OK, "Got result %#lx.\n", hr); + hr = effect->lpVtbl->GetDesc(effect, &desc); + ok(hr == D3D_OK, "Unexpected hr %#lx.\n", hr); + todo_wine + ok(!!desc.Creator, "Unexpected pointer.\n"); + if (desc.Creator) + ok(!strcmp(desc.Creator, "D3DX Effect Compiler"), "Unexpected creator %s.\n", desc.Creator); + ok(!desc.Functions, "Unexpected value %u.\n", desc.Functions); + ok(desc.Techniques == 1, "Unexpected value %u.\n", desc.Techniques); + ok(desc.Parameters == 34, "Unexpected value %u.\n", desc.Parameters); + test_effect_clear_vconsts(device); for (i = 0; i < 224; ++i) @@ -5024,12 +5079,24 @@ static void test_effect_preshader_ops(IDirect3DDevice9 *device) {0.0f, -0.0f, -2.2f, 3.402823466e+38f}, {INFINITY, INFINITY, 3.0f, 4.0f}}, }; unsigned int i, j, passes_count; + D3DXEFFECT_DESC desc; ID3DXEffect *effect; HRESULT hr; hr = D3DXCreateEffect(device, test_effect_preshader_ops_blob, sizeof(test_effect_preshader_ops_blob), NULL, NULL, 0, NULL, &effect, NULL); ok(hr == D3D_OK, "Unexpected hr %#lx.\n", hr); + + hr = effect->lpVtbl->GetDesc(effect, &desc); + ok(hr == D3D_OK, "Unexpected hr %#lx.\n", hr); + todo_wine + ok(!!desc.Creator, "Unexpected pointer.\n"); + if (desc.Creator) + ok(!strcmp(desc.Creator, "D3DX Effect Compiler"), "Unexpected creator %s.\n", desc.Creator); + ok(!desc.Functions, "Unexpected value %u.\n", desc.Functions); + ok(desc.Techniques == 1, "Unexpected value %u.\n", desc.Techniques); + ok(desc.Parameters == 3, "Unexpected value %u.\n", desc.Parameters); + hr = effect->lpVtbl->Begin(effect, &passes_count, 0); ok(hr == D3D_OK, "Unexpected hr %#lx.\n", hr); hr = effect->lpVtbl->BeginPass(effect, 0); @@ -5141,6 +5208,7 @@ static void test_effect_isparameterused(IDirect3DDevice9 *device) {"ts3", TRUE}, }; ID3DXEffect *effect, *effect2; + D3DXEFFECT_DESC desc; HRESULT hr; D3DXHANDLE tech; unsigned int i; @@ -5149,6 +5217,16 @@ static void test_effect_isparameterused(IDirect3DDevice9 *device) NULL, NULL, 0, NULL, &effect, NULL); ok(hr == D3D_OK, "Got result %#lx.\n", hr); + hr = effect->lpVtbl->GetDesc(effect, &desc); + ok(hr == D3D_OK, "Unexpected hr %#lx.\n", hr); + todo_wine + ok(!!desc.Creator, "Unexpected pointer.\n"); + if (desc.Creator) + ok(!strcmp(desc.Creator, "D3DX Effect Compiler"), "Unexpected creator %s.\n", desc.Creator); + ok(!desc.Functions, "Unexpected value %u.\n", desc.Functions); + ok(desc.Techniques == 1, "Unexpected value %u.\n", desc.Techniques); + ok(desc.Parameters == 34, "Unexpected value %u.\n", desc.Parameters); + tech = effect->lpVtbl->GetTechniqueByName(effect, "tech0"); ok(!!tech, "GetTechniqueByName failed.\n"); @@ -5178,6 +5256,7 @@ static void test_effect_isparameterused(IDirect3DDevice9 *device) static void test_effect_out_of_bounds_selector(IDirect3DDevice9 *device) { + D3DXEFFECT_DESC desc; ID3DXEffect *effect; HRESULT hr; D3DXHANDLE param; @@ -5188,6 +5267,16 @@ static void test_effect_out_of_bounds_selector(IDirect3DDevice9 *device) hr = D3DXCreateEffect(device, test_effect_preshader_effect_blob, sizeof(test_effect_preshader_effect_blob), NULL, NULL, 0, NULL, &effect, NULL); + hr = effect->lpVtbl->GetDesc(effect, &desc); + ok(hr == D3D_OK, "Unexpected hr %#lx.\n", hr); + todo_wine + ok(!!desc.Creator, "Unexpected pointer.\n"); + if (desc.Creator) + ok(!strcmp(desc.Creator, "D3DX Effect Compiler"), "Unexpected creator %s.\n", desc.Creator); + ok(!desc.Functions, "Unexpected value %u.\n", desc.Functions); + ok(desc.Techniques == 1, "Unexpected value %u.\n", desc.Techniques); + ok(desc.Parameters == 34, "Unexpected value %u.\n", desc.Parameters); + hr = effect->lpVtbl->Begin(effect, &passes_count, 0); ok(hr == D3D_OK, "Got result %#lx.\n", hr); @@ -5386,6 +5475,7 @@ static void test_effect_commitchanges(IDirect3DDevice9 *device) + TEST_EFFECT_BITMASK_BLOCK_SIZE - 1) / TEST_EFFECT_BITMASK_BLOCK_SIZE]; static const D3DLIGHT9 light_filler = {D3DLIGHT_POINT}; + D3DXEFFECT_DESC desc; ID3DXEffect *effect; HRESULT hr; D3DXHANDLE param; @@ -5401,11 +5491,20 @@ static void test_effect_commitchanges(IDirect3DDevice9 *device) IDirect3DVertexShader9 *vshader; unsigned char buffer[256]; - hr = D3DXCreateEffect(device, test_effect_preshader_effect_blob, sizeof(test_effect_preshader_effect_blob), NULL, NULL, 0, NULL, &effect, NULL); ok(hr == D3D_OK, "Unexpected hr %#lx.\n", hr); + hr = effect->lpVtbl->GetDesc(effect, &desc); + ok(hr == D3D_OK, "Unexpected hr %#lx.\n", hr); + todo_wine + ok(!!desc.Creator, "Unexpected pointer.\n"); + if (desc.Creator) + ok(!strcmp(desc.Creator, "D3DX Effect Compiler"), "Unexpected creator %s.\n", desc.Creator); + ok(!desc.Functions, "Unexpected value %u.\n", desc.Functions); + ok(desc.Techniques == 1, "Unexpected value %u.\n", desc.Techniques); + ok(desc.Parameters == 34, "Unexpected value %u.\n", desc.Parameters); + param = effect->lpVtbl->GetParameterByName(effect, NULL, "g_iVect"); ok(!!param, "GetParameterByName failed.\n"); @@ -6562,6 +6661,7 @@ static void test_effect_shared_parameters(IDirect3DDevice9 *device) { ID3DXEffect *effect1, *effect2, *effect3, *effect4; ID3DXEffectPool *pool; + D3DXEFFECT_DESC desc; HRESULT hr; D3DXHANDLE param, param_child, param2, param_child2; unsigned int i, passes_count; @@ -6575,6 +6675,17 @@ static void test_effect_shared_parameters(IDirect3DDevice9 *device) hr = D3DXCreateEffect(device, test_effect_preshader_effect_blob, sizeof(test_effect_preshader_effect_blob), NULL, NULL, 0, pool, &effect2, NULL); ok(hr == D3D_OK, "Got result %#lx.\n", hr); + + hr = effect2->lpVtbl->GetDesc(effect2, &desc); + ok(hr == D3D_OK, "Unexpected hr %#lx.\n", hr); + todo_wine + ok(!!desc.Creator, "Unexpected pointer.\n"); + if (desc.Creator) + ok(!strcmp(desc.Creator, "D3DX Effect Compiler"), "Unexpected creator %s.\n", desc.Creator); + ok(!desc.Functions, "Unexpected value %u.\n", desc.Functions); + ok(desc.Techniques == 1, "Unexpected value %u.\n", desc.Techniques); + ok(desc.Parameters == 34, "Unexpected value %u.\n", desc.Parameters); + effect2->lpVtbl->SetFloat(effect2, "arr2[0]", 28.0f); effect2->lpVtbl->Release(effect2); @@ -7019,6 +7130,7 @@ static const DWORD test_effect_skip_constants_blob[] = static void test_effect_skip_constants(IDirect3DDevice9 *device) { + D3DXEFFECT_DESC desc; HRESULT hr; ID3DXEffect *effect; unsigned int passes_count; @@ -7039,6 +7151,16 @@ static void test_effect_skip_constants(IDirect3DDevice9 *device) NULL, NULL, " v1#,.+-= &\t\nv2*/!\"'v5 v6[1]", 0, NULL, &effect, NULL); ok(hr == D3D_OK, "Got result %#lx.\n", hr); + hr = effect->lpVtbl->GetDesc(effect, &desc); + ok(hr == D3D_OK, "Unexpected hr %#lx.\n", hr); + todo_wine + ok(!!desc.Creator, "Unexpected pointer.\n"); + if (desc.Creator) + ok(!strcmp(desc.Creator, "D3DX Effect Compiler"), "Unexpected creator %s.\n", desc.Creator); + ok(!desc.Functions, "Unexpected value %u.\n", desc.Functions); + ok(desc.Techniques == 1, "Unexpected value %u.\n", desc.Techniques); + ok(desc.Parameters == 6, "Unexpected value %u.\n", desc.Parameters); + ok(!effect->lpVtbl->IsParameterUsed(effect, "v1", "tech0"), "Unexpected IsParameterUsed result.\n"); ok(!effect->lpVtbl->IsParameterUsed(effect, "v2", "tech0"), @@ -8107,6 +8229,7 @@ static const DWORD test_two_techniques_blob[] = static void test_effect_find_next_valid_technique(void) { D3DPRESENT_PARAMETERS present_parameters = {0}; + D3DXEFFECT_DESC effect_desc; IDirect3DDevice9 *device; D3DXTECHNIQUE_DESC desc; D3DXHANDLE tech, tech2; @@ -8144,6 +8267,16 @@ static void test_effect_find_next_valid_technique(void) NULL, NULL, NULL, 0, NULL, &effect, NULL); ok(hr == D3D_OK, "Got result %#lx.\n", hr); + hr = effect->lpVtbl->GetDesc(effect, &effect_desc); + ok(hr == D3D_OK, "Unexpected hr %#lx.\n", hr); + todo_wine + ok(!!effect_desc.Creator, "Unexpected pointer.\n"); + if (effect_desc.Creator) + ok(!strcmp(effect_desc.Creator, "D3DX Effect Compiler"), "Unexpected creator %s.\n", effect_desc.Creator); + ok(!effect_desc.Functions, "Unexpected value %u.\n", effect_desc.Functions); + ok(effect_desc.Techniques == 2, "Unexpected value %u.\n", effect_desc.Techniques); + ok(!effect_desc.Parameters, "Unexpected value %u.\n", effect_desc.Parameters); + hr = effect->lpVtbl->FindNextValidTechnique(effect, NULL, &tech); ok(hr == D3D_OK, "Got result %#lx.\n", hr); hr = effect->lpVtbl->GetTechniqueDesc(effect, tech, &desc); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/6190
Hi, It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated. The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=147479 Your paranoid android. === debian11 (build log) === error: patch failed: dlls/d3dx9_36/tests/effect.c:236 Task: Patch failed to apply
This merge request was approved by Matteo Bruni. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/6190
Does this mean that the `Functions` field is always 0? -- https://gitlab.winehq.org/wine/wine/-/merge_requests/6190#note_77545
On Thu Aug 1 14:26:09 2024 +0000, Matteo Bruni wrote:
Does this mean that the `Functions` field is always 0? For compiled effects, sure, same as GetFunction() that's not going to work for compiled effects. I suspect it's meaningful only for ID3DXEffectCompiler to access function handles for example, that you can specify as an entry point. That's why this needs some vkd3d-shader support beyond D3DCompile(). The most productive way might be to implement ID3DXEffectCompiler entirely in vkd3d.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/6190#note_77546
participants (4)
-
Marvin -
Matteo Bruni (@Mystral) -
Nikolay Sivov -
Nikolay Sivov (@nsivov)