From 24b51d5a07e0f7de009e420efb4ca0b738027bf8 Mon Sep 17 00:00:00 2001 From: winesync Date: Sat, 4 Jan 2020 01:49:33 +0100 Subject: [PATCH] [WINESYNC]d3dx9_36: Add semi-stub for D3DXOptimizeVertices. wine-staging patch by Christian Costa --- dll/directx/wine/d3dx9_24/d3dx9_24.spec | 2 +- dll/directx/wine/d3dx9_25/d3dx9_25.spec | 2 +- dll/directx/wine/d3dx9_26/d3dx9_26.spec | 2 +- dll/directx/wine/d3dx9_27/d3dx9_27.spec | 2 +- dll/directx/wine/d3dx9_28/d3dx9_28.spec | 2 +- dll/directx/wine/d3dx9_29/d3dx9_29.spec | 2 +- dll/directx/wine/d3dx9_30/d3dx9_30.spec | 2 +- dll/directx/wine/d3dx9_31/d3dx9_31.spec | 2 +- dll/directx/wine/d3dx9_32/d3dx9_32.spec | 2 +- dll/directx/wine/d3dx9_33/d3dx9_33.spec | 2 +- dll/directx/wine/d3dx9_34/d3dx9_34.spec | 2 +- dll/directx/wine/d3dx9_35/d3dx9_35.spec | 2 +- dll/directx/wine/d3dx9_36/d3dx9_36.spec | 2 +- dll/directx/wine/d3dx9_36/mesh.c | 27 ++ dll/directx/wine/d3dx9_37/d3dx9_37.spec | 2 +- dll/directx/wine/d3dx9_38/d3dx9_38.spec | 2 +- dll/directx/wine/d3dx9_39/d3dx9_39.spec | 2 +- dll/directx/wine/d3dx9_40/d3dx9_40.spec | 2 +- dll/directx/wine/d3dx9_41/d3dx9_41.spec | 2 +- dll/directx/wine/d3dx9_42/d3dx9_42.spec | 2 +- dll/directx/wine/d3dx9_43/d3dx9_43.spec | 2 +- modules/rostests/winetests/d3dx9_36/mesh.c | 22 ++ ...dd_semi-stub_for_D3DXOptimizeVertices.diff | 338 ++++++++++++++++++ 23 files changed, 407 insertions(+), 20 deletions(-) create mode 100644 sdk/tools/winesync/d3dx9_staging/0009-d3dx9_36__Add_semi-stub_for_D3DXOptimizeVertices.diff diff --git a/dll/directx/wine/d3dx9_24/d3dx9_24.spec b/dll/directx/wine/d3dx9_24/d3dx9_24.spec index d4e741884b9..b7d81740428 100644 --- a/dll/directx/wine/d3dx9_24/d3dx9_24.spec +++ b/dll/directx/wine/d3dx9_24/d3dx9_24.spec @@ -226,7 +226,7 @@ @ stdcall D3DXMatrixTranslation(ptr float float float) @ stdcall D3DXMatrixTranspose(ptr ptr) @ stdcall D3DXOptimizeFaces(ptr long long long ptr) -@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) +@ stdcall D3DXOptimizeVertices(ptr long long long ptr) @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) diff --git a/dll/directx/wine/d3dx9_25/d3dx9_25.spec b/dll/directx/wine/d3dx9_25/d3dx9_25.spec index 5375c07690a..9a86cb84754 100644 --- a/dll/directx/wine/d3dx9_25/d3dx9_25.spec +++ b/dll/directx/wine/d3dx9_25/d3dx9_25.spec @@ -226,7 +226,7 @@ @ stdcall D3DXMatrixTranslation(ptr float float float) @ stdcall D3DXMatrixTranspose(ptr ptr) @ stdcall D3DXOptimizeFaces(ptr long long long ptr) -@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) +@ stdcall D3DXOptimizeVertices(ptr long long long ptr) @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) diff --git a/dll/directx/wine/d3dx9_26/d3dx9_26.spec b/dll/directx/wine/d3dx9_26/d3dx9_26.spec index c17f97f04a9..85d2c3408b3 100644 --- a/dll/directx/wine/d3dx9_26/d3dx9_26.spec +++ b/dll/directx/wine/d3dx9_26/d3dx9_26.spec @@ -230,7 +230,7 @@ @ stdcall D3DXMatrixTranslation(ptr float float float) @ stdcall D3DXMatrixTranspose(ptr ptr) @ stdcall D3DXOptimizeFaces(ptr long long long ptr) -@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) +@ stdcall D3DXOptimizeVertices(ptr long long long ptr) @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) diff --git a/dll/directx/wine/d3dx9_27/d3dx9_27.spec b/dll/directx/wine/d3dx9_27/d3dx9_27.spec index c17f97f04a9..85d2c3408b3 100644 --- a/dll/directx/wine/d3dx9_27/d3dx9_27.spec +++ b/dll/directx/wine/d3dx9_27/d3dx9_27.spec @@ -230,7 +230,7 @@ @ stdcall D3DXMatrixTranslation(ptr float float float) @ stdcall D3DXMatrixTranspose(ptr ptr) @ stdcall D3DXOptimizeFaces(ptr long long long ptr) -@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) +@ stdcall D3DXOptimizeVertices(ptr long long long ptr) @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) diff --git a/dll/directx/wine/d3dx9_28/d3dx9_28.spec b/dll/directx/wine/d3dx9_28/d3dx9_28.spec index 5b267c14599..95b6bc510f1 100644 --- a/dll/directx/wine/d3dx9_28/d3dx9_28.spec +++ b/dll/directx/wine/d3dx9_28/d3dx9_28.spec @@ -230,7 +230,7 @@ @ stdcall D3DXMatrixTranslation(ptr float float float) @ stdcall D3DXMatrixTranspose(ptr ptr) @ stdcall D3DXOptimizeFaces(ptr long long long ptr) -@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) +@ stdcall D3DXOptimizeVertices(ptr long long long ptr) @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) diff --git a/dll/directx/wine/d3dx9_29/d3dx9_29.spec b/dll/directx/wine/d3dx9_29/d3dx9_29.spec index 5b267c14599..95b6bc510f1 100644 --- a/dll/directx/wine/d3dx9_29/d3dx9_29.spec +++ b/dll/directx/wine/d3dx9_29/d3dx9_29.spec @@ -230,7 +230,7 @@ @ stdcall D3DXMatrixTranslation(ptr float float float) @ stdcall D3DXMatrixTranspose(ptr ptr) @ stdcall D3DXOptimizeFaces(ptr long long long ptr) -@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) +@ stdcall D3DXOptimizeVertices(ptr long long long ptr) @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) diff --git a/dll/directx/wine/d3dx9_30/d3dx9_30.spec b/dll/directx/wine/d3dx9_30/d3dx9_30.spec index dc9ea939416..ed6cb55e75b 100644 --- a/dll/directx/wine/d3dx9_30/d3dx9_30.spec +++ b/dll/directx/wine/d3dx9_30/d3dx9_30.spec @@ -230,7 +230,7 @@ @ stdcall D3DXMatrixTranslation(ptr float float float) @ stdcall D3DXMatrixTranspose(ptr ptr) @ stdcall D3DXOptimizeFaces(ptr long long long ptr) -@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) +@ stdcall D3DXOptimizeVertices(ptr long long long ptr) @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) diff --git a/dll/directx/wine/d3dx9_31/d3dx9_31.spec b/dll/directx/wine/d3dx9_31/d3dx9_31.spec index 4dec8f58d0d..ecd12b659d4 100644 --- a/dll/directx/wine/d3dx9_31/d3dx9_31.spec +++ b/dll/directx/wine/d3dx9_31/d3dx9_31.spec @@ -227,7 +227,7 @@ @ stdcall D3DXMatrixTranslation(ptr float float float) @ stdcall D3DXMatrixTranspose(ptr ptr) @ stdcall D3DXOptimizeFaces(ptr long long long ptr) -@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) +@ stdcall D3DXOptimizeVertices(ptr long long long ptr) @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) diff --git a/dll/directx/wine/d3dx9_32/d3dx9_32.spec b/dll/directx/wine/d3dx9_32/d3dx9_32.spec index 7b6d62df3e7..3e5fb3f301f 100644 --- a/dll/directx/wine/d3dx9_32/d3dx9_32.spec +++ b/dll/directx/wine/d3dx9_32/d3dx9_32.spec @@ -227,7 +227,7 @@ @ stdcall D3DXMatrixTranslation(ptr float float float) @ stdcall D3DXMatrixTranspose(ptr ptr) @ stdcall D3DXOptimizeFaces(ptr long long long ptr) -@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) +@ stdcall D3DXOptimizeVertices(ptr long long long ptr) @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) diff --git a/dll/directx/wine/d3dx9_33/d3dx9_33.spec b/dll/directx/wine/d3dx9_33/d3dx9_33.spec index 7b6d62df3e7..3e5fb3f301f 100644 --- a/dll/directx/wine/d3dx9_33/d3dx9_33.spec +++ b/dll/directx/wine/d3dx9_33/d3dx9_33.spec @@ -227,7 +227,7 @@ @ stdcall D3DXMatrixTranslation(ptr float float float) @ stdcall D3DXMatrixTranspose(ptr ptr) @ stdcall D3DXOptimizeFaces(ptr long long long ptr) -@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) +@ stdcall D3DXOptimizeVertices(ptr long long long ptr) @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) diff --git a/dll/directx/wine/d3dx9_34/d3dx9_34.spec b/dll/directx/wine/d3dx9_34/d3dx9_34.spec index 7b6d62df3e7..3e5fb3f301f 100644 --- a/dll/directx/wine/d3dx9_34/d3dx9_34.spec +++ b/dll/directx/wine/d3dx9_34/d3dx9_34.spec @@ -227,7 +227,7 @@ @ stdcall D3DXMatrixTranslation(ptr float float float) @ stdcall D3DXMatrixTranspose(ptr ptr) @ stdcall D3DXOptimizeFaces(ptr long long long ptr) -@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) +@ stdcall D3DXOptimizeVertices(ptr long long long ptr) @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) diff --git a/dll/directx/wine/d3dx9_35/d3dx9_35.spec b/dll/directx/wine/d3dx9_35/d3dx9_35.spec index 7b6d62df3e7..3e5fb3f301f 100644 --- a/dll/directx/wine/d3dx9_35/d3dx9_35.spec +++ b/dll/directx/wine/d3dx9_35/d3dx9_35.spec @@ -227,7 +227,7 @@ @ stdcall D3DXMatrixTranslation(ptr float float float) @ stdcall D3DXMatrixTranspose(ptr ptr) @ stdcall D3DXOptimizeFaces(ptr long long long ptr) -@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) +@ stdcall D3DXOptimizeVertices(ptr long long long ptr) @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) diff --git a/dll/directx/wine/d3dx9_36/d3dx9_36.spec b/dll/directx/wine/d3dx9_36/d3dx9_36.spec index 692321d9065..544b744b2b8 100644 --- a/dll/directx/wine/d3dx9_36/d3dx9_36.spec +++ b/dll/directx/wine/d3dx9_36/d3dx9_36.spec @@ -229,7 +229,7 @@ @ stdcall D3DXMatrixTranslation(ptr float float float) @ stdcall D3DXMatrixTranspose(ptr ptr) @ stdcall D3DXOptimizeFaces(ptr long long long ptr) -@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) +@ stdcall D3DXOptimizeVertices(ptr long long long ptr) @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) diff --git a/dll/directx/wine/d3dx9_36/mesh.c b/dll/directx/wine/d3dx9_36/mesh.c index acbb2477670..a392a5b5c1b 100644 --- a/dll/directx/wine/d3dx9_36/mesh.c +++ b/dll/directx/wine/d3dx9_36/mesh.c @@ -7186,6 +7186,33 @@ cleanup: return hr; } + +/************************************************************************* + * D3DXOptimizeVertices (D3DX9_36.@) + */ +HRESULT WINAPI D3DXOptimizeVertices(const void *indices, UINT num_faces, + UINT num_vertices, BOOL indices_are_32bit, DWORD *vertex_remap) +{ + UINT i; + + FIXME("indices %p, num_faces %u, num_vertices %u, indices_are_32bit %#x, vertex_remap %p semi-stub.\n", + indices, num_faces, num_vertices, indices_are_32bit, vertex_remap); + + if (!vertex_remap) + { + WARN("vertex remap pointer is NULL.\n"); + return D3DERR_INVALIDCALL; + } + + for (i = 0; i < num_vertices; i++) + { + vertex_remap[i] = i; + } + + return D3D_OK; +} + + /************************************************************************* * D3DXOptimizeFaces (D3DX9_36.@) * diff --git a/dll/directx/wine/d3dx9_37/d3dx9_37.spec b/dll/directx/wine/d3dx9_37/d3dx9_37.spec index 692321d9065..544b744b2b8 100644 --- a/dll/directx/wine/d3dx9_37/d3dx9_37.spec +++ b/dll/directx/wine/d3dx9_37/d3dx9_37.spec @@ -229,7 +229,7 @@ @ stdcall D3DXMatrixTranslation(ptr float float float) @ stdcall D3DXMatrixTranspose(ptr ptr) @ stdcall D3DXOptimizeFaces(ptr long long long ptr) -@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) +@ stdcall D3DXOptimizeVertices(ptr long long long ptr) @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) diff --git a/dll/directx/wine/d3dx9_38/d3dx9_38.spec b/dll/directx/wine/d3dx9_38/d3dx9_38.spec index 692321d9065..544b744b2b8 100644 --- a/dll/directx/wine/d3dx9_38/d3dx9_38.spec +++ b/dll/directx/wine/d3dx9_38/d3dx9_38.spec @@ -229,7 +229,7 @@ @ stdcall D3DXMatrixTranslation(ptr float float float) @ stdcall D3DXMatrixTranspose(ptr ptr) @ stdcall D3DXOptimizeFaces(ptr long long long ptr) -@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) +@ stdcall D3DXOptimizeVertices(ptr long long long ptr) @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) diff --git a/dll/directx/wine/d3dx9_39/d3dx9_39.spec b/dll/directx/wine/d3dx9_39/d3dx9_39.spec index 692321d9065..544b744b2b8 100644 --- a/dll/directx/wine/d3dx9_39/d3dx9_39.spec +++ b/dll/directx/wine/d3dx9_39/d3dx9_39.spec @@ -229,7 +229,7 @@ @ stdcall D3DXMatrixTranslation(ptr float float float) @ stdcall D3DXMatrixTranspose(ptr ptr) @ stdcall D3DXOptimizeFaces(ptr long long long ptr) -@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) +@ stdcall D3DXOptimizeVertices(ptr long long long ptr) @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) diff --git a/dll/directx/wine/d3dx9_40/d3dx9_40.spec b/dll/directx/wine/d3dx9_40/d3dx9_40.spec index 692321d9065..544b744b2b8 100644 --- a/dll/directx/wine/d3dx9_40/d3dx9_40.spec +++ b/dll/directx/wine/d3dx9_40/d3dx9_40.spec @@ -229,7 +229,7 @@ @ stdcall D3DXMatrixTranslation(ptr float float float) @ stdcall D3DXMatrixTranspose(ptr ptr) @ stdcall D3DXOptimizeFaces(ptr long long long ptr) -@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) +@ stdcall D3DXOptimizeVertices(ptr long long long ptr) @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) diff --git a/dll/directx/wine/d3dx9_41/d3dx9_41.spec b/dll/directx/wine/d3dx9_41/d3dx9_41.spec index 692321d9065..544b744b2b8 100644 --- a/dll/directx/wine/d3dx9_41/d3dx9_41.spec +++ b/dll/directx/wine/d3dx9_41/d3dx9_41.spec @@ -229,7 +229,7 @@ @ stdcall D3DXMatrixTranslation(ptr float float float) @ stdcall D3DXMatrixTranspose(ptr ptr) @ stdcall D3DXOptimizeFaces(ptr long long long ptr) -@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) +@ stdcall D3DXOptimizeVertices(ptr long long long ptr) @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) diff --git a/dll/directx/wine/d3dx9_42/d3dx9_42.spec b/dll/directx/wine/d3dx9_42/d3dx9_42.spec index 936ae902dea..f4e70364e9b 100644 --- a/dll/directx/wine/d3dx9_42/d3dx9_42.spec +++ b/dll/directx/wine/d3dx9_42/d3dx9_42.spec @@ -222,7 +222,7 @@ @ stdcall D3DXMatrixTranslation(ptr float float float) @ stdcall D3DXMatrixTranspose(ptr ptr) @ stdcall D3DXOptimizeFaces(ptr long long long ptr) -@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) +@ stdcall D3DXOptimizeVertices(ptr long long long ptr) @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) diff --git a/dll/directx/wine/d3dx9_43/d3dx9_43.spec b/dll/directx/wine/d3dx9_43/d3dx9_43.spec index 936ae902dea..f4e70364e9b 100644 --- a/dll/directx/wine/d3dx9_43/d3dx9_43.spec +++ b/dll/directx/wine/d3dx9_43/d3dx9_43.spec @@ -222,7 +222,7 @@ @ stdcall D3DXMatrixTranslation(ptr float float float) @ stdcall D3DXMatrixTranspose(ptr ptr) @ stdcall D3DXOptimizeFaces(ptr long long long ptr) -@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) +@ stdcall D3DXOptimizeVertices(ptr long long long ptr) @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) diff --git a/modules/rostests/winetests/d3dx9_36/mesh.c b/modules/rostests/winetests/d3dx9_36/mesh.c index 19e8b8e334e..176f06c56cd 100644 --- a/modules/rostests/winetests/d3dx9_36/mesh.c +++ b/modules/rostests/winetests/d3dx9_36/mesh.c @@ -10362,6 +10362,27 @@ cleanup: free_test_context(test_context); } +static void test_optimize_vertices(void) +{ + HRESULT hr; + DWORD vertex_remap[3]; + const DWORD indices[] = {0, 1, 2}; + const UINT num_faces = 1; + const UINT num_vertices = 3; + + hr = D3DXOptimizeVertices(indices, num_faces, + num_vertices, FALSE, + vertex_remap); + ok(hr == D3D_OK, "D3DXOptimizeVertices failed. Got %x, expected D3D_OK.\n", hr); + + /* vertex_remap must not be NULL */ + hr = D3DXOptimizeVertices(indices, num_faces, + num_vertices, FALSE, + NULL); + ok(hr == D3DERR_INVALIDCALL, "D3DXOptimizeVertices passed NULL vertex_remap " + "pointer. Got %x, expected D3DERR_INVALIDCALL.\n", hr); +} + static void test_optimize_faces(void) { HRESULT hr; @@ -11250,6 +11271,7 @@ START_TEST(mesh) test_weld_vertices(); test_clone_mesh(); test_valid_mesh(); + test_optimize_vertices(); test_optimize_faces(); test_compute_normals(); test_D3DXFrameFind(); diff --git a/sdk/tools/winesync/d3dx9_staging/0009-d3dx9_36__Add_semi-stub_for_D3DXOptimizeVertices.diff b/sdk/tools/winesync/d3dx9_staging/0009-d3dx9_36__Add_semi-stub_for_D3DXOptimizeVertices.diff new file mode 100644 index 00000000000..28ad91ab339 --- /dev/null +++ b/sdk/tools/winesync/d3dx9_staging/0009-d3dx9_36__Add_semi-stub_for_D3DXOptimizeVertices.diff @@ -0,0 +1,338 @@ +diff --git a/dll/directx/wine/d3dx9_24/d3dx9_24.spec b/dll/directx/wine/d3dx9_24/d3dx9_24.spec +index d4e74188..b7d81740 100644 +--- a/dll/directx/wine/d3dx9_24/d3dx9_24.spec ++++ b/dll/directx/wine/d3dx9_24/d3dx9_24.spec +@@ -226,7 +226,7 @@ + @ stdcall D3DXMatrixTranslation(ptr float float float) + @ stdcall D3DXMatrixTranspose(ptr ptr) + @ stdcall D3DXOptimizeFaces(ptr long long long ptr) +-@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) ++@ stdcall D3DXOptimizeVertices(ptr long long long ptr) + @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) + @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) + @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) +diff --git a/dll/directx/wine/d3dx9_25/d3dx9_25.spec b/dll/directx/wine/d3dx9_25/d3dx9_25.spec +index 5375c076..9a86cb84 100644 +--- a/dll/directx/wine/d3dx9_25/d3dx9_25.spec ++++ b/dll/directx/wine/d3dx9_25/d3dx9_25.spec +@@ -226,7 +226,7 @@ + @ stdcall D3DXMatrixTranslation(ptr float float float) + @ stdcall D3DXMatrixTranspose(ptr ptr) + @ stdcall D3DXOptimizeFaces(ptr long long long ptr) +-@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) ++@ stdcall D3DXOptimizeVertices(ptr long long long ptr) + @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) + @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) + @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) +diff --git a/dll/directx/wine/d3dx9_26/d3dx9_26.spec b/dll/directx/wine/d3dx9_26/d3dx9_26.spec +index c17f97f0..85d2c340 100644 +--- a/dll/directx/wine/d3dx9_26/d3dx9_26.spec ++++ b/dll/directx/wine/d3dx9_26/d3dx9_26.spec +@@ -230,7 +230,7 @@ + @ stdcall D3DXMatrixTranslation(ptr float float float) + @ stdcall D3DXMatrixTranspose(ptr ptr) + @ stdcall D3DXOptimizeFaces(ptr long long long ptr) +-@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) ++@ stdcall D3DXOptimizeVertices(ptr long long long ptr) + @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) + @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) + @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) +diff --git a/dll/directx/wine/d3dx9_27/d3dx9_27.spec b/dll/directx/wine/d3dx9_27/d3dx9_27.spec +index c17f97f0..85d2c340 100644 +--- a/dll/directx/wine/d3dx9_27/d3dx9_27.spec ++++ b/dll/directx/wine/d3dx9_27/d3dx9_27.spec +@@ -230,7 +230,7 @@ + @ stdcall D3DXMatrixTranslation(ptr float float float) + @ stdcall D3DXMatrixTranspose(ptr ptr) + @ stdcall D3DXOptimizeFaces(ptr long long long ptr) +-@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) ++@ stdcall D3DXOptimizeVertices(ptr long long long ptr) + @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) + @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) + @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) +diff --git a/dll/directx/wine/d3dx9_28/d3dx9_28.spec b/dll/directx/wine/d3dx9_28/d3dx9_28.spec +index 5b267c14..95b6bc51 100644 +--- a/dll/directx/wine/d3dx9_28/d3dx9_28.spec ++++ b/dll/directx/wine/d3dx9_28/d3dx9_28.spec +@@ -230,7 +230,7 @@ + @ stdcall D3DXMatrixTranslation(ptr float float float) + @ stdcall D3DXMatrixTranspose(ptr ptr) + @ stdcall D3DXOptimizeFaces(ptr long long long ptr) +-@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) ++@ stdcall D3DXOptimizeVertices(ptr long long long ptr) + @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) + @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) + @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) +diff --git a/dll/directx/wine/d3dx9_29/d3dx9_29.spec b/dll/directx/wine/d3dx9_29/d3dx9_29.spec +index 5b267c14..95b6bc51 100644 +--- a/dll/directx/wine/d3dx9_29/d3dx9_29.spec ++++ b/dll/directx/wine/d3dx9_29/d3dx9_29.spec +@@ -230,7 +230,7 @@ + @ stdcall D3DXMatrixTranslation(ptr float float float) + @ stdcall D3DXMatrixTranspose(ptr ptr) + @ stdcall D3DXOptimizeFaces(ptr long long long ptr) +-@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) ++@ stdcall D3DXOptimizeVertices(ptr long long long ptr) + @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) + @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) + @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) +diff --git a/dll/directx/wine/d3dx9_30/d3dx9_30.spec b/dll/directx/wine/d3dx9_30/d3dx9_30.spec +index dc9ea939..ed6cb55e 100644 +--- a/dll/directx/wine/d3dx9_30/d3dx9_30.spec ++++ b/dll/directx/wine/d3dx9_30/d3dx9_30.spec +@@ -230,7 +230,7 @@ + @ stdcall D3DXMatrixTranslation(ptr float float float) + @ stdcall D3DXMatrixTranspose(ptr ptr) + @ stdcall D3DXOptimizeFaces(ptr long long long ptr) +-@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) ++@ stdcall D3DXOptimizeVertices(ptr long long long ptr) + @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) + @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) + @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) +diff --git a/dll/directx/wine/d3dx9_31/d3dx9_31.spec b/dll/directx/wine/d3dx9_31/d3dx9_31.spec +index 4dec8f58..ecd12b65 100644 +--- a/dll/directx/wine/d3dx9_31/d3dx9_31.spec ++++ b/dll/directx/wine/d3dx9_31/d3dx9_31.spec +@@ -227,7 +227,7 @@ + @ stdcall D3DXMatrixTranslation(ptr float float float) + @ stdcall D3DXMatrixTranspose(ptr ptr) + @ stdcall D3DXOptimizeFaces(ptr long long long ptr) +-@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) ++@ stdcall D3DXOptimizeVertices(ptr long long long ptr) + @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) + @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) + @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) +diff --git a/dll/directx/wine/d3dx9_32/d3dx9_32.spec b/dll/directx/wine/d3dx9_32/d3dx9_32.spec +index 7b6d62df..3e5fb3f3 100644 +--- a/dll/directx/wine/d3dx9_32/d3dx9_32.spec ++++ b/dll/directx/wine/d3dx9_32/d3dx9_32.spec +@@ -227,7 +227,7 @@ + @ stdcall D3DXMatrixTranslation(ptr float float float) + @ stdcall D3DXMatrixTranspose(ptr ptr) + @ stdcall D3DXOptimizeFaces(ptr long long long ptr) +-@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) ++@ stdcall D3DXOptimizeVertices(ptr long long long ptr) + @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) + @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) + @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) +diff --git a/dll/directx/wine/d3dx9_33/d3dx9_33.spec b/dll/directx/wine/d3dx9_33/d3dx9_33.spec +index 7b6d62df..3e5fb3f3 100644 +--- a/dll/directx/wine/d3dx9_33/d3dx9_33.spec ++++ b/dll/directx/wine/d3dx9_33/d3dx9_33.spec +@@ -227,7 +227,7 @@ + @ stdcall D3DXMatrixTranslation(ptr float float float) + @ stdcall D3DXMatrixTranspose(ptr ptr) + @ stdcall D3DXOptimizeFaces(ptr long long long ptr) +-@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) ++@ stdcall D3DXOptimizeVertices(ptr long long long ptr) + @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) + @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) + @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) +diff --git a/dll/directx/wine/d3dx9_34/d3dx9_34.spec b/dll/directx/wine/d3dx9_34/d3dx9_34.spec +index 7b6d62df..3e5fb3f3 100644 +--- a/dll/directx/wine/d3dx9_34/d3dx9_34.spec ++++ b/dll/directx/wine/d3dx9_34/d3dx9_34.spec +@@ -227,7 +227,7 @@ + @ stdcall D3DXMatrixTranslation(ptr float float float) + @ stdcall D3DXMatrixTranspose(ptr ptr) + @ stdcall D3DXOptimizeFaces(ptr long long long ptr) +-@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) ++@ stdcall D3DXOptimizeVertices(ptr long long long ptr) + @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) + @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) + @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) +diff --git a/dll/directx/wine/d3dx9_35/d3dx9_35.spec b/dll/directx/wine/d3dx9_35/d3dx9_35.spec +index 7b6d62df..3e5fb3f3 100644 +--- a/dll/directx/wine/d3dx9_35/d3dx9_35.spec ++++ b/dll/directx/wine/d3dx9_35/d3dx9_35.spec +@@ -227,7 +227,7 @@ + @ stdcall D3DXMatrixTranslation(ptr float float float) + @ stdcall D3DXMatrixTranspose(ptr ptr) + @ stdcall D3DXOptimizeFaces(ptr long long long ptr) +-@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) ++@ stdcall D3DXOptimizeVertices(ptr long long long ptr) + @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) + @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) + @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) +diff --git a/dll/directx/wine/d3dx9_36/d3dx9_36.spec b/dll/directx/wine/d3dx9_36/d3dx9_36.spec +index 692321d9..544b744b 100644 +--- a/dll/directx/wine/d3dx9_36/d3dx9_36.spec ++++ b/dll/directx/wine/d3dx9_36/d3dx9_36.spec +@@ -229,7 +229,7 @@ + @ stdcall D3DXMatrixTranslation(ptr float float float) + @ stdcall D3DXMatrixTranspose(ptr ptr) + @ stdcall D3DXOptimizeFaces(ptr long long long ptr) +-@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) ++@ stdcall D3DXOptimizeVertices(ptr long long long ptr) + @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) + @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) + @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) +diff --git a/dll/directx/wine/d3dx9_36/mesh.c b/dll/directx/wine/d3dx9_36/mesh.c +index acbb2477..a392a5b5 100644 +--- a/dll/directx/wine/d3dx9_36/mesh.c ++++ b/dll/directx/wine/d3dx9_36/mesh.c +@@ -7186,6 +7186,33 @@ cleanup: + return hr; + } + ++ ++/************************************************************************* ++ * D3DXOptimizeVertices (D3DX9_36.@) ++ */ ++HRESULT WINAPI D3DXOptimizeVertices(const void *indices, UINT num_faces, ++ UINT num_vertices, BOOL indices_are_32bit, DWORD *vertex_remap) ++{ ++ UINT i; ++ ++ FIXME("indices %p, num_faces %u, num_vertices %u, indices_are_32bit %#x, vertex_remap %p semi-stub.\n", ++ indices, num_faces, num_vertices, indices_are_32bit, vertex_remap); ++ ++ if (!vertex_remap) ++ { ++ WARN("vertex remap pointer is NULL.\n"); ++ return D3DERR_INVALIDCALL; ++ } ++ ++ for (i = 0; i < num_vertices; i++) ++ { ++ vertex_remap[i] = i; ++ } ++ ++ return D3D_OK; ++} ++ ++ + /************************************************************************* + * D3DXOptimizeFaces (D3DX9_36.@) + * +diff --git a/dll/directx/wine/d3dx9_37/d3dx9_37.spec b/dll/directx/wine/d3dx9_37/d3dx9_37.spec +index 692321d9..544b744b 100644 +--- a/dll/directx/wine/d3dx9_37/d3dx9_37.spec ++++ b/dll/directx/wine/d3dx9_37/d3dx9_37.spec +@@ -229,7 +229,7 @@ + @ stdcall D3DXMatrixTranslation(ptr float float float) + @ stdcall D3DXMatrixTranspose(ptr ptr) + @ stdcall D3DXOptimizeFaces(ptr long long long ptr) +-@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) ++@ stdcall D3DXOptimizeVertices(ptr long long long ptr) + @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) + @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) + @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) +diff --git a/dll/directx/wine/d3dx9_38/d3dx9_38.spec b/dll/directx/wine/d3dx9_38/d3dx9_38.spec +index 692321d9..544b744b 100644 +--- a/dll/directx/wine/d3dx9_38/d3dx9_38.spec ++++ b/dll/directx/wine/d3dx9_38/d3dx9_38.spec +@@ -229,7 +229,7 @@ + @ stdcall D3DXMatrixTranslation(ptr float float float) + @ stdcall D3DXMatrixTranspose(ptr ptr) + @ stdcall D3DXOptimizeFaces(ptr long long long ptr) +-@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) ++@ stdcall D3DXOptimizeVertices(ptr long long long ptr) + @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) + @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) + @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) +diff --git a/dll/directx/wine/d3dx9_39/d3dx9_39.spec b/dll/directx/wine/d3dx9_39/d3dx9_39.spec +index 692321d9..544b744b 100644 +--- a/dll/directx/wine/d3dx9_39/d3dx9_39.spec ++++ b/dll/directx/wine/d3dx9_39/d3dx9_39.spec +@@ -229,7 +229,7 @@ + @ stdcall D3DXMatrixTranslation(ptr float float float) + @ stdcall D3DXMatrixTranspose(ptr ptr) + @ stdcall D3DXOptimizeFaces(ptr long long long ptr) +-@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) ++@ stdcall D3DXOptimizeVertices(ptr long long long ptr) + @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) + @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) + @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) +diff --git a/dll/directx/wine/d3dx9_40/d3dx9_40.spec b/dll/directx/wine/d3dx9_40/d3dx9_40.spec +index 692321d9..544b744b 100644 +--- a/dll/directx/wine/d3dx9_40/d3dx9_40.spec ++++ b/dll/directx/wine/d3dx9_40/d3dx9_40.spec +@@ -229,7 +229,7 @@ + @ stdcall D3DXMatrixTranslation(ptr float float float) + @ stdcall D3DXMatrixTranspose(ptr ptr) + @ stdcall D3DXOptimizeFaces(ptr long long long ptr) +-@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) ++@ stdcall D3DXOptimizeVertices(ptr long long long ptr) + @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) + @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) + @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) +diff --git a/dll/directx/wine/d3dx9_41/d3dx9_41.spec b/dll/directx/wine/d3dx9_41/d3dx9_41.spec +index 692321d9..544b744b 100644 +--- a/dll/directx/wine/d3dx9_41/d3dx9_41.spec ++++ b/dll/directx/wine/d3dx9_41/d3dx9_41.spec +@@ -229,7 +229,7 @@ + @ stdcall D3DXMatrixTranslation(ptr float float float) + @ stdcall D3DXMatrixTranspose(ptr ptr) + @ stdcall D3DXOptimizeFaces(ptr long long long ptr) +-@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) ++@ stdcall D3DXOptimizeVertices(ptr long long long ptr) + @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) + @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) + @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) +diff --git a/dll/directx/wine/d3dx9_42/d3dx9_42.spec b/dll/directx/wine/d3dx9_42/d3dx9_42.spec +index 936ae902..f4e70364 100644 +--- a/dll/directx/wine/d3dx9_42/d3dx9_42.spec ++++ b/dll/directx/wine/d3dx9_42/d3dx9_42.spec +@@ -222,7 +222,7 @@ + @ stdcall D3DXMatrixTranslation(ptr float float float) + @ stdcall D3DXMatrixTranspose(ptr ptr) + @ stdcall D3DXOptimizeFaces(ptr long long long ptr) +-@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) ++@ stdcall D3DXOptimizeVertices(ptr long long long ptr) + @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) + @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) + @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) +diff --git a/dll/directx/wine/d3dx9_43/d3dx9_43.spec b/dll/directx/wine/d3dx9_43/d3dx9_43.spec +index 936ae902..f4e70364 100644 +--- a/dll/directx/wine/d3dx9_43/d3dx9_43.spec ++++ b/dll/directx/wine/d3dx9_43/d3dx9_43.spec +@@ -222,7 +222,7 @@ + @ stdcall D3DXMatrixTranslation(ptr float float float) + @ stdcall D3DXMatrixTranspose(ptr ptr) + @ stdcall D3DXOptimizeFaces(ptr long long long ptr) +-@ stdcall -stub D3DXOptimizeVertices(ptr long long long ptr) ++@ stdcall D3DXOptimizeVertices(ptr long long long ptr) + @ stdcall D3DXPlaneFromPointNormal(ptr ptr ptr) + @ stdcall D3DXPlaneFromPoints(ptr ptr ptr ptr) + @ stdcall D3DXPlaneIntersectLine(ptr ptr ptr ptr) +diff --git a/modules/rostests/winetests/d3dx9_36/mesh.c b/modules/rostests/winetests/d3dx9_36/mesh.c +index 5cb000a5..904a4524 100644 +--- a/modules/rostests/winetests/d3dx9_36/mesh.c ++++ b/modules/rostests/winetests/d3dx9_36/mesh.c +@@ -10331,6 +10331,27 @@ cleanup: + free_test_context(test_context); + } + ++static void test_optimize_vertices(void) ++{ ++ HRESULT hr; ++ DWORD vertex_remap[3]; ++ const DWORD indices[] = {0, 1, 2}; ++ const UINT num_faces = 1; ++ const UINT num_vertices = 3; ++ ++ hr = D3DXOptimizeVertices(indices, num_faces, ++ num_vertices, FALSE, ++ vertex_remap); ++ ok(hr == D3D_OK, "D3DXOptimizeVertices failed. Got %x, expected D3D_OK.\n", hr); ++ ++ /* vertex_remap must not be NULL */ ++ hr = D3DXOptimizeVertices(indices, num_faces, ++ num_vertices, FALSE, ++ NULL); ++ ok(hr == D3DERR_INVALIDCALL, "D3DXOptimizeVertices passed NULL vertex_remap " ++ "pointer. Got %x, expected D3DERR_INVALIDCALL.\n", hr); ++} ++ + static void test_optimize_faces(void) + { + HRESULT hr; +@@ -11219,6 +11240,7 @@ START_TEST(mesh) + test_weld_vertices(); + test_clone_mesh(); + test_valid_mesh(); ++ test_optimize_vertices(); + test_optimize_faces(); + test_compute_normals(); + test_D3DXFrameFind();