=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: d3dx9/tests: Add cube texture tests for ID3DXRenderToEnvMap.

Alexandre Julliard julliard at winehq.org
Mon Aug 13 13:21:20 CDT 2012


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

Author: Józef Kucia <joseph.kucia at gmail.com>
Date:   Tue Jul 31 15:26:41 2012 +0200

d3dx9/tests: Add cube texture tests for ID3DXRenderToEnvMap.

---

 dlls/d3dx9_36/tests/core.c |   91 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 91 insertions(+), 0 deletions(-)

diff --git a/dlls/d3dx9_36/tests/core.c b/dlls/d3dx9_36/tests/core.c
index 92c114a..ba0f065 100644
--- a/dlls/d3dx9_36/tests/core.c
+++ b/dlls/d3dx9_36/tests/core.c
@@ -1084,10 +1084,73 @@ static void test_D3DXCreateRenderToEnvMap(IDirect3DDevice9 *device)
     if (SUCCEEDED(hr)) ID3DXRenderToEnvMap_Release(render);
 }
 
+static void test_ID3DXRenderToEnvMap_cube_map(IDirect3DDevice9 *device)
+{
+    HRESULT hr;
+    IDirect3DCubeTexture9 *cube_texture = NULL;
+    ID3DXRenderToEnvMap *render = NULL;
+    struct device_state pre_state;
+    struct device_state current_state;
+
+    hr = IDirect3DDevice9_CreateCubeTexture(device, 256, 0, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT,
+        &cube_texture, NULL);
+    if (FAILED(hr))
+    {
+        skip("Failed to create cube texture\n");
+        return;
+    }
+
+    hr = retrieve_device_state(device, &pre_state);
+
+    hr = D3DXCreateRenderToEnvMap(device, 256, 0, D3DFMT_A8R8G8B8, TRUE, D3DFMT_D24X8, &render);
+    ok(hr == D3D_OK, "D3DCreateRenderToEnvMap returned %#x, expected %#x\n", hr, D3D_OK);
+    if (SUCCEEDED(hr))
+    {
+        DWORD face;
+
+        hr = ID3DXRenderToEnvMap_End(render, D3DX_FILTER_NONE);
+        ok(hr == D3DERR_INVALIDCALL, "ID3DXRenderToEnvMap::End returned %#x, expected %#x\n", hr, D3DERR_INVALIDCALL);
+
+        hr = ID3DXRenderToEnvMap_BeginCube(render, cube_texture);
+        ok(hr == D3D_OK, "ID3DXRenderToEnvMap::BeginCube returned %#x, expected %#x\n", hr, D3D_OK);
+
+        hr = retrieve_device_state(device, &current_state);
+        ok(SUCCEEDED(hr), "Failed to retrieve device state\n");
+        compare_device_state(&current_state, &pre_state, TRUE);
+        release_device_state(&current_state);
+
+        for (face = D3DCUBEMAP_FACE_POSITIVE_X; face <= D3DCUBEMAP_FACE_NEGATIVE_Z; face++)
+        {
+            hr = ID3DXRenderToEnvMap_Face(render, face, D3DX_FILTER_POINT);
+            ok(hr == D3D_OK, "ID3DXRenderToEnvMap::Face returned %#x, expected %#x\n", hr, D3D_OK);
+
+            hr = retrieve_device_state(device, &current_state);
+            ok(SUCCEEDED(hr), "Failed to retrieve device state\n");
+            compare_device_state(&current_state, &pre_state, FALSE);
+            release_device_state(&current_state);
+        }
+
+        hr = ID3DXRenderToEnvMap_End(render, D3DX_FILTER_POINT);
+        ok(hr == D3D_OK, "ID3DXRenderToEnvMap::End returned %#x, expected %#x\n", hr, D3D_OK);
+
+        hr = retrieve_device_state(device, &current_state);
+        ok(SUCCEEDED(hr), "Failed to retrieve device state\n");
+        compare_device_state(&current_state, &pre_state, TRUE);
+        release_device_state(&current_state);
+
+        check_release((IUnknown *)render, 0);
+    }
+
+    release_device_state(&pre_state);
+
+    check_release((IUnknown *)cube_texture, 0);
+}
+
 static void test_ID3DXRenderToEnvMap(IDirect3DDevice9 *device)
 {
     HRESULT hr;
     ID3DXRenderToEnvMap *render;
+    IDirect3DSurface9 *depth_stencil_surface;
 
     hr = D3DXCreateRenderToEnvMap(device, 256, 0, D3DFMT_A8R8G8B8, FALSE, D3DFMT_UNKNOWN, &render);
     if (SUCCEEDED(hr))
@@ -1124,6 +1187,34 @@ static void test_ID3DXRenderToEnvMap(IDirect3DDevice9 *device)
 
         check_release((IUnknown *)render, 0);
     } else skip("Failed to create ID3DXRenderToEnvMap\n");
+
+    /* make sure there is a depth stencil surface present */
+    hr = IDirect3DDevice9_GetDepthStencilSurface(device, &depth_stencil_surface);
+    if (SUCCEEDED(hr))
+    {
+        IDirect3DSurface9_Release(depth_stencil_surface);
+        depth_stencil_surface = NULL;
+    }
+    else if (hr == D3DERR_NOTFOUND)
+    {
+        hr = IDirect3DDevice9_CreateDepthStencilSurface(device, 256, 256, D3DFMT_D24X8,
+                D3DMULTISAMPLE_NONE, 0, TRUE, &depth_stencil_surface, NULL);
+        if (SUCCEEDED(hr)) IDirect3DDevice9_SetDepthStencilSurface(device, depth_stencil_surface);
+    }
+
+    if (FAILED(hr))
+    {
+        skip("Failed to create depth stencil surface\n");
+        return;
+    }
+
+    test_ID3DXRenderToEnvMap_cube_map(device);
+
+    if (depth_stencil_surface)
+    {
+        IDirect3DDevice9_SetDepthStencilSurface(device, NULL);
+        IDirect3DSurface9_Release(depth_stencil_surface);
+    }
 }
 
 START_TEST(core)




More information about the wine-cvs mailing list