Tobias Jakobi : d3d8: Add testcase for IDirect3DDevice8::CreateImageSurface .

Alexandre Julliard julliard at winehq.org
Tue Jul 8 14:35:16 CDT 2008


Module: wine
Branch: master
Commit: 413ce31eff419dba00a1b03cf73ba7fe92f351e9
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=413ce31eff419dba00a1b03cf73ba7fe92f351e9

Author: Tobias Jakobi <liquid.acid at gmx.net>
Date:   Tue Jul  8 12:50:09 2008 +0200

d3d8: Add testcase for IDirect3DDevice8::CreateImageSurface.

---

 dlls/d3d8/tests/surface.c |   37 +++++++++++++++++++++++++++++++++++++
 1 files changed, 37 insertions(+), 0 deletions(-)

diff --git a/dlls/d3d8/tests/surface.c b/dlls/d3d8/tests/surface.c
index 6e0d48c..3580e59 100644
--- a/dlls/d3d8/tests/surface.c
+++ b/dlls/d3d8/tests/surface.c
@@ -66,6 +66,42 @@ static IDirect3DDevice8 *init_d3d8(HMODULE d3d8_handle)
     return device_ptr;
 }
 
+/* Test the behaviour of the IDirect3DDevice8::CreateImageSurface method.
+
+Expected behaviour (and also documented in the original DX8 docs) is that the
+call returns a surface with the SYSTEMMEM pool type. Games like Max Payne 1
+and 2 which use Direct3D8 calls depend on this behaviour.
+
+A short remark in the DX9 docs however states that the pool of the
+returned surface object is of type SCRATCH. This is misinformation and results
+in screenshots not appearing in the savegame loading menu of both games
+mentioned above (engine tries to display a texture from the scratch pool).
+
+This test verifies that the behaviour described in the original D3D8 docs is
+the correct one. For more information about this issue, see the MSDN:
+
+D3D9 docs: "Converting to Direct3D 9"
+D3D9 reference: "IDirect3DDevice9::CreateOffscreenPlainSurface"
+D3D8 reference: "IDirect3DDevice8::CreateImageSurface"
+*/
+
+static void test_image_surface_pool(IDirect3DDevice8 *device) {
+    IDirect3DSurface8 *surface = 0;
+    D3DSURFACE_DESC surf_desc;
+    HRESULT hr;
+
+    hr = IDirect3DDevice8_CreateImageSurface(device, 128, 128, D3DFMT_A8R8G8B8, &surface);
+    ok(SUCCEEDED(hr), "CreateImageSurface failed (0x%08x)\n", hr);
+
+    hr = IDirect3DSurface8_GetDesc(surface, &surf_desc);
+    ok(SUCCEEDED(hr), "GetDesc failed (0x%08x)\n", hr);
+
+    todo_wine ok((surf_desc.Pool == D3DPOOL_SYSTEMMEM),
+        "CreateImageSurface returns surface with unexpected pool type %u (should be SYSTEMMEM = 2)\n", surf_desc.Pool);
+
+    IDirect3DSurface8_Release(surface);
+}
+
 static void test_surface_get_container(IDirect3DDevice8 *device_ptr)
 {
     IDirect3DTexture8 *texture_ptr = 0;
@@ -296,6 +332,7 @@ START_TEST(surface)
     device_ptr = init_d3d8(d3d8_handle);
     if (!device_ptr) return;
 
+    test_image_surface_pool(device_ptr);
     test_surface_get_container(device_ptr);
     test_lockrect_invalid(device_ptr);
     test_private_data(device_ptr);




More information about the wine-cvs mailing list