https://git.reactos.org/?p=reactos.git;a=commitdiff;h=54e07d18d588a96bfcfdd1481f7039b468550b3d

commit 54e07d18d588a96bfcfdd1481f7039b468550b3d
Author:     winesync <[email protected]>
AuthorDate: Sat Feb 1 18:02:30 2020 +0100
Commit:     Jérôme Gardou <[email protected]>
CommitDate: Wed Feb 26 18:19:18 2020 +0100

    [WINESYNC] d3dx9_36: Add semi-stub for D3DXOptimizeVertices.
    
    wine-staging patch by Christian Costa <[email protected]>
---
 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 ++
 ...36__Add_semi-stub_for_D3DXOptimizeVertices.diff | 338 +++++++++++++++++++++
 23 files changed, 407 insertions(+), 20 deletions(-)

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();

Reply via email to