Matteo Bruni : d3dx9: Implement D3DXCheckCubeTextureRequirements.
Alexandre Julliard
julliard at winehq.org
Thu Nov 4 12:52:52 CDT 2010
Module: wine
Branch: master
Commit: 6933766531137e2bf1a78af876e1c2969e0317fc
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6933766531137e2bf1a78af876e1c2969e0317fc
Author: Matteo Bruni <mbruni at codeweavers.com>
Date: Mon Oct 18 17:05:29 2010 +0200
d3dx9: Implement D3DXCheckCubeTextureRequirements.
---
dlls/d3dx9_36/d3dx9_36.spec | 2 +-
dlls/d3dx9_36/tests/texture.c | 87 ++++++++++++++++++++++++++++++++++++++--
dlls/d3dx9_36/texture.c | 40 +++++++++++++++++++
3 files changed, 123 insertions(+), 6 deletions(-)
diff --git a/dlls/d3dx9_36/d3dx9_36.spec b/dlls/d3dx9_36/d3dx9_36.spec
index 7f974d1..8a54382 100644
--- a/dlls/d3dx9_36/d3dx9_36.spec
+++ b/dlls/d3dx9_36/d3dx9_36.spec
@@ -4,7 +4,7 @@
@ stdcall D3DXAssembleShaderFromResourceA(long str ptr ptr long ptr ptr)
@ stdcall D3DXAssembleShaderFromResourceW(long wstr ptr ptr long ptr ptr)
@ stdcall D3DXBoxBoundProbe(ptr ptr ptr ptr)
-@ stub D3DXCheckCubeTextureRequirements
+@ stdcall D3DXCheckCubeTextureRequirements(ptr ptr ptr long ptr ptr)
@ stdcall D3DXCheckTextureRequirements(ptr ptr ptr ptr long ptr ptr)
@ stdcall D3DXCheckVersion(long long)
@ stub D3DXCheckVolumeTextureRequirements
diff --git a/dlls/d3dx9_36/tests/texture.c b/dlls/d3dx9_36/tests/texture.c
index 9856800..2d020fd 100644
--- a/dlls/d3dx9_36/tests/texture.c
+++ b/dlls/d3dx9_36/tests/texture.c
@@ -92,11 +92,6 @@ static void test_D3DXCheckTextureRequirements(IDirect3DDevice9 *device)
ok(hr == D3D_OK, "D3DXCheckTextureRequirements returned %#x, expected %#x\n", hr, D3D_OK);
ok(width == 1, "Returned width %d, expected %d\n", width, 1);
- width = D3DX_DEFAULT;
- hr = D3DXCheckTextureRequirements(device, &width, NULL, NULL, 0, NULL, D3DPOOL_DEFAULT);
- ok(hr == D3D_OK, "D3DXCheckTextureRequirements returned %#x, expected %#x\n", hr, D3D_OK);
- ok(width == 256, "Returned width %d, expected %d\n", width, 256);
-
width = 0xFFFFFFFE;
hr = D3DXCheckTextureRequirements(device, &width, NULL, NULL, 0, NULL, D3DPOOL_DEFAULT);
ok(hr == D3D_OK, "D3DXCheckTextureRequirements returned %#x, expected %#x\n", hr, D3D_OK);
@@ -196,6 +191,87 @@ static void test_D3DXCheckTextureRequirements(IDirect3DDevice9 *device)
IDirect3D9_Release(d3d);
}
+static void test_D3DXCheckCubeTextureRequirements(IDirect3DDevice9 *device)
+{
+ UINT size, mipmaps;
+ D3DFORMAT format;
+ D3DCAPS9 caps;
+ HRESULT hr;
+
+ IDirect3DDevice9_GetDeviceCaps(device, &caps);
+
+ /* general tests */
+ hr = D3DXCheckCubeTextureRequirements(device, NULL, NULL, 0, NULL, D3DPOOL_DEFAULT);
+ ok(hr == D3D_OK, "D3DXCheckCubeTextureRequirements returned %#x, expected %#x\n", hr, D3D_OK);
+
+ hr = D3DXCheckCubeTextureRequirements(device, NULL, NULL, D3DX_DEFAULT, NULL, D3DPOOL_DEFAULT);
+ ok(hr == D3D_OK, "D3DXCheckCubeTextureRequirements returned %#x, expected %#x\n", hr, D3D_OK);
+
+ hr = D3DXCheckCubeTextureRequirements(NULL, NULL, NULL, D3DX_DEFAULT, NULL, D3DPOOL_DEFAULT);
+ ok(hr == D3DERR_INVALIDCALL, "D3DXCheckCubeTextureRequirements returned %#x, expected %#x\n", hr, D3DERR_INVALIDCALL);
+
+ /* size */
+ size = D3DX_DEFAULT;
+ hr = D3DXCheckCubeTextureRequirements(device, &size, NULL, 0, NULL, D3DPOOL_DEFAULT);
+ ok(hr == D3D_OK, "D3DXCheckCubeTextureRequirements returned %#x, expected %#x\n", hr, D3D_OK);
+ ok(size == 256, "Returned size %d, expected %d\n", size, 256);
+
+ /* mipmaps */
+ size = 64;
+ mipmaps = 9;
+ hr = D3DXCheckCubeTextureRequirements(device, &size, &mipmaps, 0, NULL, D3DPOOL_DEFAULT);
+ ok(hr == D3D_OK, "D3DXCheckCubeTextureRequirements returned %#x, expected %#x\n", hr, D3D_OK);
+ ok(mipmaps == 7, "Returned mipmaps %d, expected %d\n", mipmaps, 7);
+
+ size = 284;
+ mipmaps = 20;
+ hr = D3DXCheckCubeTextureRequirements(device, &size, &mipmaps, 0, NULL, D3DPOOL_DEFAULT);
+ ok(hr == D3D_OK, "D3DXCheckCubeTextureRequirements returned %#x, expected %#x\n", hr, D3D_OK);
+ ok(mipmaps == 10, "Returned mipmaps %d, expected %d\n", mipmaps, 10);
+
+ size = 63;
+ mipmaps = 9;
+ hr = D3DXCheckCubeTextureRequirements(device, &size, &mipmaps, 0, NULL, D3DPOOL_DEFAULT);
+ ok(hr == D3D_OK, "D3DXCheckCubeTextureRequirements returned %#x, expected %#x\n", hr, D3D_OK);
+ ok(mipmaps == 7, "Returned mipmaps %d, expected %d\n", mipmaps, 7);
+
+ mipmaps = 0;
+ hr = D3DXCheckCubeTextureRequirements(device, NULL, &mipmaps, 0, NULL, D3DPOOL_DEFAULT);
+ ok(hr == D3D_OK, "D3DXCheckCubeTextureRequirements returned %#x, expected %#x\n", hr, D3D_OK);
+ ok(mipmaps == 9, "Returned mipmaps %d, expected %d\n", mipmaps, 9);
+
+ /* usage */
+ hr = D3DXCheckCubeTextureRequirements(device, NULL, NULL, D3DUSAGE_WRITEONLY, NULL, D3DPOOL_DEFAULT);
+ ok(hr == D3DERR_INVALIDCALL, "D3DXCheckCubeTextureRequirements succeeded, but should've failed.\n");
+ hr = D3DXCheckCubeTextureRequirements(device, NULL, NULL, D3DUSAGE_DONOTCLIP, NULL, D3DPOOL_DEFAULT);
+ ok(hr == D3DERR_INVALIDCALL, "D3DXCheckCubeTextureRequirements succeeded, but should've failed.\n");
+ hr = D3DXCheckCubeTextureRequirements(device, NULL, NULL, D3DUSAGE_POINTS, NULL, D3DPOOL_DEFAULT);
+ ok(hr == D3DERR_INVALIDCALL, "D3DXCheckCubeTextureRequirements succeeded, but should've failed.\n");
+ hr = D3DXCheckCubeTextureRequirements(device, NULL, NULL, D3DUSAGE_RTPATCHES, NULL, D3DPOOL_DEFAULT);
+ ok(hr == D3DERR_INVALIDCALL, "D3DXCheckCubeTextureRequirements succeeded, but should've failed.\n");
+ hr = D3DXCheckCubeTextureRequirements(device, NULL, NULL, D3DUSAGE_NPATCHES, NULL, D3DPOOL_DEFAULT);
+ ok(hr == D3DERR_INVALIDCALL, "D3DXCheckCubeTextureRequirements succeeded, but should've failed.\n");
+
+ /* format */
+ hr = D3DXCheckCubeTextureRequirements(device, NULL, NULL, 0, NULL, D3DPOOL_DEFAULT);
+ ok(hr == D3D_OK, "D3DXCheckCubeTextureRequirements returned %#x, expected %#x\n", hr, D3D_OK);
+
+ format = D3DFMT_UNKNOWN;
+ hr = D3DXCheckCubeTextureRequirements(device, NULL, NULL, 0, &format, D3DPOOL_DEFAULT);
+ ok(hr == D3D_OK, "D3DXCheckCubeTextureRequirements returned %#x, expected %#x\n", hr, D3D_OK);
+ ok(format == D3DFMT_A8R8G8B8, "Returned format %u, expected %u\n", format, D3DFMT_A8R8G8B8);
+
+ format = D3DX_DEFAULT;
+ hr = D3DXCheckCubeTextureRequirements(device, NULL, NULL, 0, &format, D3DPOOL_DEFAULT);
+ ok(hr == D3D_OK, "D3DXCheckCubeTextureRequirements returned %#x, expected %#x\n", hr, D3D_OK);
+ ok(format == D3DFMT_A8R8G8B8, "Returned format %u, expected %u\n", format, D3DFMT_A8R8G8B8);
+
+ format = D3DFMT_R8G8B8;
+ hr = D3DXCheckCubeTextureRequirements(device, NULL, NULL, 0, &format, D3DPOOL_DEFAULT);
+ ok(hr == D3D_OK, "D3DXCheckCubeTextureRequirements returned %#x, expected %#x\n", hr, D3D_OK);
+ ok(format == D3DFMT_X8R8G8B8, "Returned format %u, expected %u\n", format, D3DFMT_X8R8G8B8);
+}
+
static void test_D3DXCreateTexture(IDirect3DDevice9 *device)
{
IDirect3DTexture9 *texture;
@@ -498,6 +574,7 @@ START_TEST(texture)
}
test_D3DXCheckTextureRequirements(device);
+ test_D3DXCheckCubeTextureRequirements(device);
test_D3DXCreateTexture(device);
test_D3DXFilterTexture(device);
diff --git a/dlls/d3dx9_36/texture.c b/dlls/d3dx9_36/texture.c
index 5afceb4..10af0b3 100644
--- a/dlls/d3dx9_36/texture.c
+++ b/dlls/d3dx9_36/texture.c
@@ -343,6 +343,46 @@ cleanup:
return D3D_OK;
}
+HRESULT WINAPI D3DXCheckCubeTextureRequirements(LPDIRECT3DDEVICE9 device,
+ UINT *size,
+ UINT *miplevels,
+ DWORD usage,
+ D3DFORMAT *format,
+ D3DPOOL pool)
+{
+ D3DCAPS9 caps;
+ UINT s = (size && *size) ? *size : 256;
+ HRESULT hr;
+
+ TRACE("(%p, %p, %p, %u, %p, %u)\n", device, size, miplevels, usage, format, pool);
+
+ if (s == D3DX_DEFAULT)
+ s = 256;
+
+ if (!device || FAILED(IDirect3DDevice9_GetDeviceCaps(device, &caps)))
+ return D3DERR_INVALIDCALL;
+
+ if (!(caps.TextureCaps & D3DPTEXTURECAPS_CUBEMAP))
+ return D3DERR_NOTAVAILABLE;
+
+ /* ensure width/height is power of 2 */
+ if ((caps.TextureCaps & D3DPTEXTURECAPS_CUBEMAP_POW2) && (!is_pow2(s)))
+ s = make_pow2(s);
+
+ hr = D3DXCheckTextureRequirements(device, &s, &s, miplevels, usage, format, pool);
+
+ if (!(caps.TextureCaps & D3DPTEXTURECAPS_MIPCUBEMAP))
+ {
+ if(miplevels)
+ *miplevels = 1;
+ }
+
+ if (size)
+ *size = s;
+
+ return hr;
+}
+
HRESULT WINAPI D3DXCreateTexture(LPDIRECT3DDEVICE9 pDevice,
UINT width,
UINT height,
More information about the wine-cvs
mailing list