Michael Mc Donnell : d3dx9/tests: Add a D3DXValidMesh test.
Alexandre Julliard
julliard at winehq.org
Mon Dec 19 13:39:24 CST 2011
Module: wine
Branch: master
Commit: 50f785ef11f59ea9dd709a2cd64a6c7372ec3cc0
URL: http://source.winehq.org/git/wine.git/?a=commit;h=50f785ef11f59ea9dd709a2cd64a6c7372ec3cc0
Author: Michael Mc Donnell <michael at mcdonnell.dk>
Date: Sun Dec 11 17:38:20 2011 +0100
d3dx9/tests: Add a D3DXValidMesh test.
---
dlls/d3dx9_36/d3dx9_36.spec | 2 +-
dlls/d3dx9_36/mesh.c | 7 +++
dlls/d3dx9_36/tests/mesh.c | 125 +++++++++++++++++++++++++++++++++++++++++++
3 files changed, 133 insertions(+), 1 deletions(-)
diff --git a/dlls/d3dx9_36/d3dx9_36.spec b/dlls/d3dx9_36/d3dx9_36.spec
index 6cbc1a2..70ff3d9 100644
--- a/dlls/d3dx9_36/d3dx9_36.spec
+++ b/dlls/d3dx9_36/d3dx9_36.spec
@@ -300,7 +300,7 @@
@ stub D3DXUVAtlasCreate(ptr long long long long long long ptr ptr ptr ptr long ptr long ptr ptr ptr ptr ptr)
@ stub D3DXUVAtlasPack(ptr long long long long ptr ptr long ptr long ptr)
@ stub D3DXUVAtlasPartition(ptr long long long ptr ptr ptr ptr long ptr long ptr ptr ptr ptr ptr ptr)
-@ stub D3DXValidMesh(ptr ptr ptr)
+@ stdcall D3DXValidMesh(ptr ptr ptr)
@ stub D3DXValidPatchMesh(ptr ptr ptr ptr)
@ stdcall D3DXVec2BaryCentric(ptr ptr ptr ptr float float)
@ stdcall D3DXVec2CatmullRom(ptr ptr ptr ptr ptr float)
diff --git a/dlls/d3dx9_36/mesh.c b/dlls/d3dx9_36/mesh.c
index ec77a37..022e66d 100644
--- a/dlls/d3dx9_36/mesh.c
+++ b/dlls/d3dx9_36/mesh.c
@@ -5939,6 +5939,13 @@ error:
return hr;
}
+HRESULT WINAPI D3DXValidMesh(LPD3DXMESH mesh, CONST DWORD *adjacency, LPD3DXBUFFER *errors_and_warnings)
+{
+ FIXME("(%p, %p, %p): stub\n", mesh, adjacency, *errors_and_warnings);
+
+ return E_NOTIMPL;
+}
+
static BOOL weld_float1(void *to, void *from, FLOAT epsilon)
{
FLOAT *v1 = to;
diff --git a/dlls/d3dx9_36/tests/mesh.c b/dlls/d3dx9_36/tests/mesh.c
index 50e0e6b..af0a9e8 100644
--- a/dlls/d3dx9_36/tests/mesh.c
+++ b/dlls/d3dx9_36/tests/mesh.c
@@ -9930,6 +9930,130 @@ cleanup:
free_test_context(test_context);
}
+static void test_valid_mesh(void)
+{
+ HRESULT hr;
+ struct test_context *test_context = NULL;
+ UINT i;
+ const DWORD options = D3DXMESH_32BIT | D3DXMESH_SYSTEMMEM;
+ const D3DVERTEXELEMENT9 declaration[] =
+ {
+ {0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0},
+ D3DDECL_END()
+ };
+ const unsigned int VERTS_PER_FACE = 3;
+ /* mesh0 (one face)
+ *
+ * 0--1
+ * | /
+ * |/
+ * 2
+ */
+ const D3DXVECTOR3 vertices0[] =
+ {
+ { 0.0f, 3.0f, 0.f},
+ { 2.0f, 3.0f, 0.f},
+ { 0.0f, 0.0f, 0.f},
+ };
+ const DWORD indices0[] = {0, 1, 2};
+ const unsigned int num_vertices0 = ARRAY_SIZE(vertices0);
+ const unsigned int num_faces0 = ARRAY_SIZE(indices0) / VERTS_PER_FACE;
+ const DWORD adjacency0[] = {-1, -1, -1};
+ const HRESULT exp_hr0 = D3D_OK;
+ /* mesh1 (Simple bow-tie)
+ *
+ * 0--1 1--3
+ * | / \ |
+ * |/ \|
+ * 2 4
+ */
+ const D3DXVECTOR3 vertices1[] =
+ {
+ { 0.0f, 3.0f, 0.f},
+ { 2.0f, 3.0f, 0.f},
+ { 0.0f, 0.0f, 0.f},
+
+ { 4.0f, 3.0f, 0.f},
+ { 4.0f, 0.0f, 0.f},
+ };
+ const DWORD indices1[] = {0, 1, 2, 1, 3, 4};
+ const unsigned int num_vertices1 = ARRAY_SIZE(vertices1);
+ const unsigned int num_faces1 = ARRAY_SIZE(indices1) / VERTS_PER_FACE;
+ const DWORD adjacency1[] = {-1, -1, -1, -1, -1, -1};
+ const HRESULT exp_hr1 = D3DXERR_INVALIDMESH;
+ /* Common mesh data */
+ ID3DXMesh *mesh = NULL;
+ UINT vertex_size = sizeof(D3DXVECTOR3);
+ ID3DXBuffer *errors_and_warnings = NULL;
+ struct
+ {
+ const D3DXVECTOR3 *vertices;
+ const DWORD *indices;
+ const UINT num_vertices;
+ const UINT num_faces;
+ const DWORD *adjacency;
+ const HRESULT exp_hr;
+ }
+ tc[] =
+ {
+ {
+ vertices0,
+ indices0,
+ num_vertices0,
+ num_faces0,
+ adjacency0,
+ exp_hr0,
+ },
+ {
+ vertices1,
+ indices1,
+ num_vertices1,
+ num_faces1,
+ adjacency1,
+ exp_hr1,
+ },
+ };
+
+ test_context = new_test_context();
+ if (!test_context)
+ {
+ skip("Couldn't create test context\n");
+ goto cleanup;
+ }
+
+ for (i = 0; i < ARRAY_SIZE(tc); i++)
+ {
+ hr = init_test_mesh(tc[i].num_faces, tc[i].num_vertices,
+ options, declaration,
+ test_context->device, &mesh,
+ tc[i].vertices, vertex_size,
+ tc[i].indices, NULL);
+ if (FAILED(hr))
+ {
+ skip("Couldn't initialize test mesh %d. Got %x expected D3D_OK\n", i, hr);
+ goto cleanup;
+ }
+
+ hr = D3DXValidMesh(mesh, tc[i].adjacency, &errors_and_warnings);
+ todo_wine ok(hr == tc[i].exp_hr, "D3DXValidMesh test case %d failed. "
+ "Got %x\n, expected %x\n", i, hr, tc[i].exp_hr);
+
+ /* Note errors_and_warnings is deliberately not checked because that
+ * would require copying wast amounts of the text output. */
+ if (errors_and_warnings)
+ {
+ ID3DXBuffer_Release(errors_and_warnings);
+ errors_and_warnings = NULL;
+ }
+ mesh->lpVtbl->Release(mesh);
+ mesh = NULL;
+ }
+
+cleanup:
+ if (mesh) mesh->lpVtbl->Release(mesh);
+ free_test_context(test_context);
+}
+
START_TEST(mesh)
{
D3DXBoundProbeTest();
@@ -9954,4 +10078,5 @@ START_TEST(mesh)
test_convert_point_reps_to_adjacency();
test_weld_vertices();
test_clone_mesh();
+ test_valid_mesh();
}
More information about the wine-cvs
mailing list