Stefan Dösinger : ddraw: Cube map structure test.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue May 1 07:39:24 CDT 2007
Module: wine
Branch: master
Commit: 378005442e5351a0ff82d6d6c68525f0a04afc39
URL: http://source.winehq.org/git/wine.git/?a=commit;h=378005442e5351a0ff82d6d6c68525f0a04afc39
Author: Stefan Dösinger <stefan at codeweavers.com>
Date: Tue Apr 24 10:34:26 2007 +0200
ddraw: Cube map structure test.
---
dlls/ddraw/tests/dsurface.c | 197 +++++++++++++++++++++++++++++++++++++++++++
1 files changed, 197 insertions(+), 0 deletions(-)
diff --git a/dlls/ddraw/tests/dsurface.c b/dlls/ddraw/tests/dsurface.c
index 6db2d98..fc3ee44 100644
--- a/dlls/ddraw/tests/dsurface.c
+++ b/dlls/ddraw/tests/dsurface.c
@@ -1042,6 +1042,202 @@ static void AttachmentTest(void)
IDirectDraw7_Release(dd7);
}
+struct compare
+{
+ DWORD width, height;
+ DWORD caps, caps2;
+ UINT mips;
+};
+
+HRESULT WINAPI CubeTestLvl2Enum(IDirectDrawSurface7 *surface, DDSURFACEDESC2 *desc, void *context)
+{
+ UINT *mips = context;
+
+ (*mips)++;
+ IDirectDrawSurface7_EnumAttachedSurfaces(surface,
+ context,
+ CubeTestLvl2Enum);
+
+ return DDENUMRET_OK;
+}
+
+HRESULT WINAPI CubeTestLvl1Enum(IDirectDrawSurface7 *surface, DDSURFACEDESC2 *desc, void *context)
+{
+ UINT mips = 0;
+ UINT *num = (UINT *) context;
+ static const struct compare expected[] =
+ {
+ {
+ 128, 128,
+ DDSCAPS_MIPMAP | DDSCAPS_TEXTURE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_COMPLEX,
+ DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEZ,
+ 7
+ },
+ {
+ 128, 128,
+ DDSCAPS_MIPMAP | DDSCAPS_TEXTURE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_COMPLEX,
+ DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEZ,
+ 7
+ },
+ {
+ 128, 128,
+ DDSCAPS_MIPMAP | DDSCAPS_TEXTURE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_COMPLEX,
+ DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEY,
+ 7
+ },
+ {
+ 128, 128,
+ DDSCAPS_MIPMAP | DDSCAPS_TEXTURE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_COMPLEX,
+ DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEY,
+ 7
+ },
+ {
+ 128, 128,
+ DDSCAPS_MIPMAP | DDSCAPS_TEXTURE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_COMPLEX,
+ DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEX,
+ 7
+ },
+ {
+ 64, 64, /* This is the first mipmap */
+ DDSCAPS_MIPMAP | DDSCAPS_TEXTURE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_COMPLEX,
+ DDSCAPS2_MIPMAPSUBLEVEL | DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEX,
+ 6
+ },
+ };
+
+ mips = 0;
+ IDirectDrawSurface7_EnumAttachedSurfaces(surface,
+ &mips,
+ CubeTestLvl2Enum);
+
+ ok(desc->dwWidth == expected[*num].width, "Surface width is %d expected %d\n", desc->dwWidth, expected[*num].width);
+ ok(desc->dwHeight == expected[*num].height, "Surface height is %d expected %d\n", desc->dwHeight, expected[*num].height);
+ ok(desc->ddsCaps.dwCaps == expected[*num].caps, "Surface caps are %08x expected %08x\n", desc->ddsCaps.dwCaps, expected[*num].caps);
+ ok(desc->ddsCaps.dwCaps2 == expected[*num].caps2, "Surface caps2 are %08x expected %08x\n", desc->ddsCaps.dwCaps2, expected[*num].caps2);
+ ok(mips == expected[*num].mips, "Surface has %d mipmaps, expected %d\n", mips, expected[*num].mips);
+
+ (*num)++;
+
+ IDirectDrawSurface7_Release(surface);
+
+ return DDENUMRET_OK;
+}
+
+static void CubeMapTest(void)
+{
+ IDirectDraw7 *dd7 = NULL;
+ IDirectDrawSurface7 *cubemap;
+ DDSURFACEDESC2 ddsd;
+ HRESULT hr;
+ UINT num = 0;
+ struct enumstruct ctx;
+
+ hr = IDirectDraw_QueryInterface(lpDD, &IID_IDirectDraw7, (void **) &dd7);
+ ok(hr == DD_OK, "IDirectDraw::QueryInterface returned %08x\n", hr);
+
+ memset(&ddsd, 0, sizeof(ddsd));
+ ddsd.dwSize = sizeof(ddsd);
+ ddsd.ddpfPixelFormat.dwSize = sizeof(ddsd.ddpfPixelFormat);
+ ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT | DDSD_CAPS;
+ ddsd.dwWidth = 128;
+ ddsd.dwHeight = 128;
+ ddsd.ddsCaps.dwCaps = DDSCAPS_TEXTURE | DDSCAPS_COMPLEX | DDSCAPS_MIPMAP | DDSCAPS_SYSTEMMEMORY;
+ ddsd.ddsCaps.dwCaps2 = DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_ALLFACES;
+
+ /* D3DFMT_R5G6B5 */
+ ddsd.ddpfPixelFormat.dwFlags = DDPF_RGB;
+ ddsd.ddpfPixelFormat.dwRGBBitCount = 16;
+ ddsd.ddpfPixelFormat.dwRBitMask = 0xF800;
+ ddsd.ddpfPixelFormat.dwGBitMask = 0x07E0;
+ ddsd.ddpfPixelFormat.dwBBitMask = 0x001F;
+
+ hr = IDirectDraw7_CreateSurface(dd7, &ddsd, &cubemap, NULL);
+ ok(hr == DD_OK, "IDirectDraw7::CreateSurface returned %08x\n", hr);
+
+ hr = IDirectDrawSurface7_GetSurfaceDesc(cubemap, &ddsd);
+ ok(hr == DD_OK, "IDirectDrawSurface7_GetSurfaceDesc returned %08x\n", hr);
+ ok(ddsd.ddsCaps.dwCaps == (DDSCAPS_MIPMAP | DDSCAPS_TEXTURE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_COMPLEX),
+ "Root Caps are %08x\n", ddsd.ddsCaps.dwCaps);
+ ok(ddsd.ddsCaps.dwCaps2 == (DDSCAPS2_CUBEMAP_POSITIVEX | DDSCAPS2_CUBEMAP),
+ "Root Caps2 are %08x\n", ddsd.ddsCaps.dwCaps2);
+
+ IDirectDrawSurface7_EnumAttachedSurfaces(cubemap,
+ &num,
+ CubeTestLvl1Enum);
+ trace("Enumerated %d surfaces in total\n", num);
+ ok(num == 6, "Surface has %d attachments\n", num);
+ IDirectDrawSurface7_Release(cubemap);
+
+ /* What happens if I do not specify any faces? */
+ memset(&ddsd, 0, sizeof(ddsd));
+ ddsd.dwSize = sizeof(ddsd);
+ ddsd.ddpfPixelFormat.dwSize = sizeof(ddsd.ddpfPixelFormat);
+ ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT | DDSD_CAPS;
+ ddsd.dwWidth = 128;
+ ddsd.dwHeight = 128;
+ ddsd.ddsCaps.dwCaps = DDSCAPS_TEXTURE | DDSCAPS_COMPLEX | DDSCAPS_MIPMAP | DDSCAPS_SYSTEMMEMORY;
+ ddsd.ddsCaps.dwCaps2 = DDSCAPS2_CUBEMAP;
+
+ /* D3DFMT_R5G6B5 */
+ ddsd.ddpfPixelFormat.dwFlags = DDPF_RGB;
+ ddsd.ddpfPixelFormat.dwRGBBitCount = 16;
+ ddsd.ddpfPixelFormat.dwRBitMask = 0xF800;
+ ddsd.ddpfPixelFormat.dwGBitMask = 0x07E0;
+ ddsd.ddpfPixelFormat.dwBBitMask = 0x001F;
+
+ hr = IDirectDraw7_CreateSurface(dd7, &ddsd, &cubemap, NULL);
+ ok(hr == DDERR_INVALIDPARAMS, "IDirectDraw7::CreateSurface asking for a cube map without faces returned %08x\n", hr);
+
+ /* Cube map faces without a cube map? */
+ memset(&ddsd, 0, sizeof(ddsd));
+ ddsd.dwSize = sizeof(ddsd);
+ ddsd.ddpfPixelFormat.dwSize = sizeof(ddsd.ddpfPixelFormat);
+ ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT | DDSD_CAPS;
+ ddsd.dwWidth = 128;
+ ddsd.dwHeight = 128;
+ ddsd.ddsCaps.dwCaps = DDSCAPS_TEXTURE | DDSCAPS_COMPLEX | DDSCAPS_MIPMAP | DDSCAPS_SYSTEMMEMORY;
+ ddsd.ddsCaps.dwCaps2 = DDSCAPS2_CUBEMAP_ALLFACES;
+
+ /* D3DFMT_R5G6B5 */
+ ddsd.ddpfPixelFormat.dwFlags = DDPF_RGB;
+ ddsd.ddpfPixelFormat.dwRGBBitCount = 16;
+ ddsd.ddpfPixelFormat.dwRBitMask = 0xF800;
+ ddsd.ddpfPixelFormat.dwGBitMask = 0x07E0;
+ ddsd.ddpfPixelFormat.dwBBitMask = 0x001F;
+
+ hr = IDirectDraw7_CreateSurface(dd7, &ddsd, &cubemap, NULL);
+ ok(hr == DDERR_INVALIDCAPS, "IDirectDraw7::CreateSurface returned %08x\n", hr);
+
+ memset(&ddsd, 0, sizeof(ddsd));
+ ddsd.dwSize = sizeof(ddsd);
+ ddsd.ddpfPixelFormat.dwSize = sizeof(ddsd.ddpfPixelFormat);
+ ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT | DDSD_CAPS;
+ ddsd.dwWidth = 128;
+ ddsd.dwHeight = 128;
+ ddsd.ddsCaps.dwCaps = DDSCAPS_TEXTURE | DDSCAPS_COMPLEX | DDSCAPS_MIPMAP | DDSCAPS_SYSTEMMEMORY;
+ ddsd.ddsCaps.dwCaps2 = DDSCAPS2_CUBEMAP_POSITIVEX;
+
+ /* D3DFMT_R5G6B5 */
+ ddsd.ddpfPixelFormat.dwFlags = DDPF_RGB;
+ ddsd.ddpfPixelFormat.dwRGBBitCount = 16;
+ ddsd.ddpfPixelFormat.dwRBitMask = 0xF800;
+ ddsd.ddpfPixelFormat.dwGBitMask = 0x07E0;
+ ddsd.ddpfPixelFormat.dwBBitMask = 0x001F;
+
+ hr = IDirectDraw7_CreateSurface(dd7, &ddsd, &cubemap, NULL);
+ ok(hr == DDERR_INVALIDCAPS, "IDirectDraw7::CreateSurface returned %08x\n", hr);
+
+ /* Make sure everything is cleaned up properly. Use the enumSurfaces test infrastructure */
+ memset(&ctx, 0, sizeof(ctx));
+ memset(&ddsd, 0, sizeof(ddsd));
+ ddsd.dwSize = sizeof(DDSURFACEDESC);
+ hr = IDirectDraw_EnumSurfaces(lpDD, DDENUMSURFACES_DOESEXIST | DDENUMSURFACES_ALL, (DDSURFACEDESC *) &ddsd, (void *) &ctx, enumCB);
+ ok(hr == DD_OK, "IDirectDraw_EnumSurfaces returned %08x\n", hr);
+ ok(ctx.count == 0, "%d surfaces enumerated, expected 0\n", ctx.count);
+
+ IDirectDraw7_Release(dd7);
+}
+
START_TEST(dsurface)
{
if (!CreateDirectDraw())
@@ -1055,5 +1251,6 @@ START_TEST(dsurface)
GetDDInterface_7();
EnumTest();
AttachmentTest();
+ CubeMapTest();
ReleaseDirectDraw();
}
More information about the wine-cvs
mailing list