=?UTF-8?Q?Stefan=20D=C3=B6singer=20?=: d3d8/tests: Test NPOT texture creation.
Alexandre Julliard
julliard at winehq.org
Tue Apr 16 13:37:18 CDT 2013
Module: wine
Branch: master
Commit: a18cffb4de203b035ae56d8099ca2e2ab4e5cd06
URL: http://source.winehq.org/git/wine.git/?a=commit;h=a18cffb4de203b035ae56d8099ca2e2ab4e5cd06
Author: Stefan Dösinger <stefan at codeweavers.com>
Date: Fri Apr 12 10:50:36 2013 +0200
d3d8/tests: Test NPOT texture creation.
---
dlls/d3d8/tests/device.c | 124 ++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 124 insertions(+), 0 deletions(-)
diff --git a/dlls/d3d8/tests/device.c b/dlls/d3d8/tests/device.c
index 2f281d2..28dce38 100644
--- a/dlls/d3d8/tests/device.c
+++ b/dlls/d3d8/tests/device.c
@@ -4768,6 +4768,129 @@ static void test_rtpatch(void)
DestroyWindow(window);
}
+static void test_npot_textures(void)
+{
+ IDirect3DDevice8 *device = NULL;
+ IDirect3D8 *d3d8;
+ ULONG refcount;
+ HWND window = NULL;
+ HRESULT hr;
+ D3DCAPS8 caps;
+ IDirect3DTexture8 *texture;
+ IDirect3DCubeTexture8 *cube_texture;
+ IDirect3DVolumeTexture8 *volume_texture;
+ struct
+ {
+ D3DPOOL pool;
+ const char *pool_name;
+ HRESULT hr;
+ }
+ pools[] =
+ {
+ { D3DPOOL_DEFAULT, "D3DPOOL_DEFAULT", D3DERR_INVALIDCALL },
+ { D3DPOOL_MANAGED, "D3DPOOL_MANAGED", D3DERR_INVALIDCALL },
+ { D3DPOOL_SYSTEMMEM, "D3DPOOL_SYSTEMMEM", D3DERR_INVALIDCALL },
+ { D3DPOOL_SCRATCH, "D3DPOOL_SCRATCH", D3D_OK },
+ };
+ unsigned int i, levels;
+ BOOL tex_pow2, cube_pow2, vol_pow2;
+
+ if (!(d3d8 = pDirect3DCreate8(D3D_SDK_VERSION)))
+ {
+ skip("Failed to create IDirect3D8 object, skipping tests.\n");
+ return;
+ }
+
+ window = CreateWindowA("static", "d3d8_test", WS_OVERLAPPEDWINDOW,
+ 0, 0, 640, 480, 0, 0, 0, 0);
+ if (!(device = create_device(d3d8, window, window, TRUE)))
+ {
+ skip("Failed to create a D3D device, skipping tests.\n");
+ goto done;
+ }
+
+ hr = IDirect3DDevice8_GetDeviceCaps(device, &caps);
+ ok(SUCCEEDED(hr), "Failed to get caps, hr %#x.\n", hr);
+ tex_pow2 = !!(caps.TextureCaps & D3DPTEXTURECAPS_POW2);
+ cube_pow2 = !!(caps.TextureCaps & D3DPTEXTURECAPS_CUBEMAP_POW2);
+ vol_pow2 = !!(caps.TextureCaps & D3DPTEXTURECAPS_VOLUMEMAP_POW2);
+ ok(cube_pow2 == tex_pow2, "Cube texture and 2d texture pow2 restrictions mismatch.\n");
+ ok(vol_pow2 == tex_pow2, "Volume texture and 2d texture pow2 restrictions mismatch.\n");
+
+ for (i = 0; i < sizeof(pools) / sizeof(*pools); i++)
+ {
+ for (levels = 0; levels <= 2; levels++)
+ {
+ HRESULT expected;
+
+ hr = IDirect3DDevice8_CreateTexture(device, 10, 10, levels, 0, D3DFMT_X8R8G8B8,
+ pools[i].pool, &texture);
+ if (!tex_pow2)
+ {
+ expected = D3D_OK;
+ }
+ else if (caps.TextureCaps & D3DPTEXTURECAPS_NONPOW2CONDITIONAL)
+ {
+ if (levels == 1)
+ expected = D3D_OK;
+ else
+ expected = pools[i].hr;
+ }
+ else
+ {
+ expected = pools[i].hr;
+ }
+ ok(hr == expected, "CreateTexture(w=h=10, %s, levels=%u) returned hr %#x, expected %#x.\n",
+ pools[i].pool_name, levels, hr, expected);
+
+ if (SUCCEEDED(hr))
+ IDirect3DTexture8_Release(texture);
+ }
+
+ hr = IDirect3DDevice8_CreateCubeTexture(device, 3, 1, 0, D3DFMT_X8R8G8B8,
+ pools[i].pool, &cube_texture);
+ if (tex_pow2)
+ {
+ ok(hr == pools[i].hr, "CreateCubeTexture(EdgeLength=3, %s) returned hr %#x, expected %#x.\n",
+ pools[i].pool_name, hr, pools[i].hr);
+ }
+ else
+ {
+ ok(SUCCEEDED(hr), "CreateCubeTexture(EdgeLength=3, %s) returned hr %#x, expected %#x.\n",
+ pools[i].pool_name, hr, D3D_OK);
+ }
+
+ if (SUCCEEDED(hr))
+ IDirect3DCubeTexture8_Release(cube_texture);
+
+ hr = IDirect3DDevice8_CreateVolumeTexture(device, 2, 2, 3, 1, 0, D3DFMT_X8R8G8B8,
+ pools[i].pool, &volume_texture);
+ if (tex_pow2)
+ {
+ ok(hr == pools[i].hr, "CreateVolumeTextur(Depth=3, %s) returned hr %#x, expected %#x.\n",
+ pools[i].pool_name, hr, pools[i].hr);
+ }
+ else
+ {
+ ok(SUCCEEDED(hr), "CreateVolumeTextur(Depth=3, %s) returned hr %#x, expected %#x.\n",
+ pools[i].pool_name, hr, D3D_OK);
+ }
+
+ if (SUCCEEDED(hr))
+ IDirect3DVolumeTexture8_Release(volume_texture);
+ }
+
+done:
+ if (device)
+ {
+ refcount = IDirect3DDevice8_Release(device);
+ ok(!refcount, "Device has %u references left.\n", refcount);
+ }
+ IDirect3D8_Release(d3d8);
+ DestroyWindow(window);
+
+}
+
START_TEST(device)
{
HMODULE d3d8_handle = LoadLibraryA( "d3d8.dll" );
@@ -4844,6 +4967,7 @@ START_TEST(device)
test_set_palette();
test_swvp_buffer();
test_rtpatch();
+ test_npot_textures();
}
UnregisterClassA("d3d8_test_wc", GetModuleHandleA(NULL));
}
More information about the wine-cvs
mailing list