[PATCH 4/5] d3d9/tests: Use a separate device for stream_test().
Henri Verbeet
hverbeet at codeweavers.com
Mon Mar 24 05:31:36 CDT 2014
---
dlls/d3d9/tests/visual.c | 144 ++++++++++++++++++++++++++--------------------
1 file changed, 82 insertions(+), 62 deletions(-)
diff --git a/dlls/d3d9/tests/visual.c b/dlls/d3d9/tests/visual.c
index 29649d8..27f4fd6 100644
--- a/dlls/d3d9/tests/visual.c
+++ b/dlls/d3d9/tests/visual.c
@@ -10215,61 +10215,64 @@ static void tssargtemp_test(IDirect3DDevice9 *device)
ok(hr == D3D_OK, "SetTextureStageState failed, hr = %08x\n", hr);
}
-struct testdata
-{
- DWORD idxVertex; /* number of instances in the first stream */
- DWORD idxColor; /* number of instances in the second stream */
- DWORD idxInstance; /* should be 1 ?? */
- DWORD color1; /* color 1 instance */
- DWORD color2; /* color 2 instance */
- DWORD color3; /* color 3 instance */
- DWORD color4; /* color 4 instance */
- WORD strVertex; /* specify which stream to use 0-2*/
- WORD strColor;
- WORD strInstance;
-};
-
-static const struct testdata testcases[]=
-{
- {4, 4, 1, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0, 1, 2}, /* 0 */
- {3, 4, 1, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ffffff, 0, 1, 2}, /* 1 */
- {2, 4, 1, 0x00ff0000, 0x00ff0000, 0x00ffffff, 0x00ffffff, 0, 1, 2}, /* 2 */
- {1, 4, 1, 0x00ff0000, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0, 1, 2}, /* 3 */
- {4, 3, 1, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0, 1, 2}, /* 4 */
- {4, 2, 1, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0, 1, 2}, /* 5 */
- {4, 1, 1, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0, 1, 2}, /* 6 */
- {4, 0, 1, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0, 1, 2}, /* 7 */
- {3, 3, 1, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ffffff, 0, 1, 2}, /* 8 */
- {4, 4, 1, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 1, 0, 2}, /* 9 */
- {4, 4, 1, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0, 2, 1}, /* 10 */
- {4, 4, 1, 0x00ff0000, 0x00ffffff, 0x00ffffff, 0x00ffffff, 2, 3, 1}, /* 11 */
- {4, 4, 1, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 2, 0, 1}, /* 12 */
- {4, 4, 1, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 1, 2, 3}, /* 13 */
-/*
- This draws one instance on some machines, no instance on others
- {0, 4, 1, 0x00ff0000, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0, 1, 2},
-*/
-/*
- This case is handled in a stand alone test, SetStreamSourceFreq(0,(D3DSTREAMSOURCE_INSTANCEDATA | 1)) has to return D3DERR_INVALIDCALL!
- {4, 4, 1, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 2, 1, 0, D3DERR_INVALIDCALL},
-*/
-};
-
/* Drawing Indexed Geometry with instances*/
-static void stream_test(IDirect3DDevice9 *device)
+static void stream_test(void)
{
- IDirect3DVertexBuffer9 *vb = NULL;
- IDirect3DVertexBuffer9 *vb2 = NULL;
- IDirect3DVertexBuffer9 *vb3 = NULL;
- IDirect3DIndexBuffer9 *ib = NULL;
IDirect3DVertexDeclaration9 *pDecl = NULL;
IDirect3DVertexShader9 *shader = NULL;
+ IDirect3DVertexBuffer9 *vb3 = NULL;
+ IDirect3DVertexBuffer9 *vb2 = NULL;
+ IDirect3DVertexBuffer9 *vb = NULL;
+ IDirect3DIndexBuffer9 *ib = NULL;
+ IDirect3DDevice9 *device;
+ IDirect3D9 *d3d;
+ ULONG refcount;
+ D3DCAPS9 caps;
+ DWORD color;
+ HWND window;
+ unsigned i;
HRESULT hr;
BYTE *data;
- DWORD color;
DWORD ind;
- unsigned i;
+ static const struct testdata
+ {
+ DWORD idxVertex; /* number of instances in the first stream */
+ DWORD idxColor; /* number of instances in the second stream */
+ DWORD idxInstance; /* should be 1 ?? */
+ DWORD color1; /* color 1 instance */
+ DWORD color2; /* color 2 instance */
+ DWORD color3; /* color 3 instance */
+ DWORD color4; /* color 4 instance */
+ WORD strVertex; /* specify which stream to use 0-2*/
+ WORD strColor;
+ WORD strInstance;
+ }
+ testcases[]=
+ {
+ {4, 4, 1, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0, 1, 2}, /* 0 */
+ {3, 4, 1, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ffffff, 0, 1, 2}, /* 1 */
+ {2, 4, 1, 0x00ff0000, 0x00ff0000, 0x00ffffff, 0x00ffffff, 0, 1, 2}, /* 2 */
+ {1, 4, 1, 0x00ff0000, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0, 1, 2}, /* 3 */
+ {4, 3, 1, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0, 1, 2}, /* 4 */
+ {4, 2, 1, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0, 1, 2}, /* 5 */
+ {4, 1, 1, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0, 1, 2}, /* 6 */
+ {4, 0, 1, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0, 1, 2}, /* 7 */
+ {3, 3, 1, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ffffff, 0, 1, 2}, /* 8 */
+ {4, 4, 1, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 1, 0, 2}, /* 9 */
+ {4, 4, 1, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0, 2, 1}, /* 10 */
+ {4, 4, 1, 0x00ff0000, 0x00ffffff, 0x00ffffff, 0x00ffffff, 2, 3, 1}, /* 11 */
+ {4, 4, 1, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 2, 0, 1}, /* 12 */
+ {4, 4, 1, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 1, 2, 3}, /* 13 */
+#if 0
+ /* This draws one instance on some machines, no instance on others. */
+ {0, 4, 1, 0x00ff0000, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0, 1, 2}, /* 14 */
+ /* This case is handled in a stand alone test,
+ * SetStreamSourceFreq(0, (D3DSTREAMSOURCE_INSTANCEDATA | 1)) has to
+ * return D3DERR_INVALIDCALL. */
+ {4, 4, 1, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 2, 1, 0}, /* 15 */
+#endif
+ };
static const DWORD shader_code[] =
{
0xfffe0101, /* vs_1_1 */
@@ -10281,34 +10284,29 @@ static void stream_test(IDirect3DDevice9 *device)
0x00000001, 0xd00f0000, 0x90e40001, /* mov oD0, v1 */
0x0000ffff
};
-
- const float quad[][3] =
+ static const float quad[][3] =
{
{-0.5f, -0.5f, 1.1f}, /*0 */
{-0.5f, 0.5f, 1.1f}, /*1 */
{ 0.5f, -0.5f, 1.1f}, /*2 */
{ 0.5f, 0.5f, 1.1f}, /*3 */
};
-
- const float vertcolor[][4] =
+ static const float vertcolor[][4] =
{
{1.0f, 0.0f, 0.0f, 1.0f}, /*0 */
{1.0f, 0.0f, 0.0f, 1.0f}, /*1 */
{1.0f, 0.0f, 0.0f, 1.0f}, /*2 */
{1.0f, 0.0f, 0.0f, 1.0f}, /*3 */
};
-
/* 4 position for 4 instances */
- const float instancepos[][3] =
+ static const float instancepos[][3] =
{
{-0.6f,-0.6f, 0.0f},
{ 0.6f,-0.6f, 0.0f},
{ 0.6f, 0.6f, 0.0f},
{-0.6f, 0.6f, 0.0f},
};
-
- short indices[] = {0, 1, 2, 1, 2, 3};
-
+ static const short indices[] = {0, 1, 2, 2, 1, 3};
D3DVERTEXELEMENT9 decl[] =
{
{0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0},
@@ -10317,6 +10315,25 @@ static void stream_test(IDirect3DDevice9 *device)
D3DDECL_END()
};
+ window = CreateWindowA("static", "d3d9_test", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
+ 0, 0, 640, 480, NULL, NULL, NULL, NULL);
+ d3d = Direct3DCreate9(D3D_SDK_VERSION);
+ ok(!!d3d, "Failed to create a D3D object.\n");
+ if (!(device = create_device(d3d, window, window, TRUE)))
+ {
+ skip("Failed to create a D3D device, skipping tests.\n");
+ goto done;
+ }
+
+ hr = IDirect3DDevice9_GetDeviceCaps(device, &caps);
+ ok(SUCCEEDED(hr), "Failed to get device caps, hr %#x.\n", hr);
+ if (caps.VertexShaderVersion < D3DVS_VERSION(3, 0))
+ {
+ skip("No vs_3_0 support, skipping tests.\n");
+ IDirect3DDevice9_Release(device);
+ goto done;
+ }
+
/* set the default value because it isn't done in wine? */
hr = IDirect3DDevice9_SetStreamSourceFreq(device, 1, 1);
ok(hr == D3D_OK, "IDirect3DDevice9_SetStreamSourceFreq failed with %08x\n", hr);
@@ -10356,7 +10373,8 @@ static void stream_test(IDirect3DDevice9 *device)
ok(hr == D3D_OK, "CreateVertexBuffer failed with %08x\n", hr);
if(!vb) {
skip("Failed to create a vertex buffer\n");
- return;
+ IDirect3DDevice9_Release(device);
+ goto done;
}
hr = IDirect3DDevice9_CreateVertexBuffer(device, sizeof(vertcolor), 0, 0, D3DPOOL_MANAGED, &vb2, NULL);
ok(hr == D3D_OK, "CreateVertexBuffer failed with %08x\n", hr);
@@ -10426,7 +10444,7 @@ static void stream_test(IDirect3DDevice9 *device)
hr = IDirect3DDevice9_CreateVertexDeclaration(device, decl, &pDecl);
ok(SUCCEEDED(hr), "IDirect3DDevice9_CreateVertexDeclaration failed hr=%08x (case %i)\n", hr, i);
- hr = IDirect3DDevice9_Clear(device, 0, NULL, D3DCLEAR_TARGET, 0xffffffff, 0.0, 0);
+ hr = IDirect3DDevice9_Clear(device, 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0xffffffff, 1.0f, 0);
ok(hr == D3D_OK, "IDirect3DDevice9_Clear failed with %08x (case %i)\n", hr, i);
hr = IDirect3DDevice9_BeginScene(device);
@@ -10487,15 +10505,17 @@ static void stream_test(IDirect3DDevice9 *device)
ok(hr == D3D_OK, "IDirect3DDevice9_Present failed with %08x (case %i)\n", hr, i);
}
- hr = IDirect3DDevice9_SetIndices(device, NULL);
- ok(hr == D3D_OK, "IDirect3DDevice9_SetIndices failed with %08x\n", hr);
-
out:
if(vb) IDirect3DVertexBuffer9_Release(vb);
if(vb2)IDirect3DVertexBuffer9_Release(vb2);
if(vb3)IDirect3DVertexBuffer9_Release(vb3);
if(ib)IDirect3DIndexBuffer9_Release(ib);
if(shader)IDirect3DVertexShader9_Release(shader);
+ refcount = IDirect3DDevice9_Release(device);
+ ok(!refcount, "Device has %u references left.\n", refcount);
+done:
+ IDirect3D9_Release(d3d);
+ DestroyWindow(window);
}
static void np2_stretch_rect_test(IDirect3DDevice9 *device) {
@@ -16106,7 +16126,6 @@ START_TEST(visual)
if (caps.VertexShaderVersion >= D3DVS_VERSION(3, 0)) {
test_vshader_input(device_ptr);
test_vshader_float16(device_ptr);
- stream_test(device_ptr);
} else {
skip("No vs_3_0 support\n");
}
@@ -16116,6 +16135,7 @@ START_TEST(visual)
cleanup_device(device_ptr);
device_ptr = NULL;
+ stream_test();
fog_with_shader_test();
texbem_test();
texdepth_test();
--
1.7.10.4
More information about the wine-patches
mailing list