[5/5] d3dx9/tests: Add tests for D3DXSaveTextureToFileInMemory. (resend)

Józef Kucia joseph.kucia at gmail.com
Tue May 29 04:29:25 CDT 2012


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

diff --git a/dlls/d3dx9_36/tests/texture.c b/dlls/d3dx9_36/tests/texture.c
index cade445..6cee065 100644
--- a/dlls/d3dx9_36/tests/texture.c
+++ b/dlls/d3dx9_36/tests/texture.c
@@ -1396,6 +1396,196 @@ static void test_D3DXCreateVolumeTextureFromFileInMemory(IDirect3DDevice9 *devic
     }
 }
 
+/* fills positive x face with red color */
+static void WINAPI fill_cube_positive_x(D3DXVECTOR4 *out, const D3DXVECTOR3 *tex_coord, const D3DXVECTOR3 *texel_size, void *data)
+{
+    memset(out, 0, sizeof(*out));
+    if (tex_coord->x > 0 && fabs(tex_coord->x) > fabs(tex_coord->y) && fabs(tex_coord->x) > fabs(tex_coord->z))
+        out->x = 1;
+}
+
+static void test_D3DXSaveTextureToFileInMemory(IDirect3DDevice9 *device)
+{
+    HRESULT hr;
+    IDirect3DTexture9 *texture;
+    IDirect3DCubeTexture9 *cube_texture;
+    IDirect3DVolumeTexture9 *volume_texture;
+    ID3DXBuffer *buffer;
+    void *buffer_pointer;
+    DWORD buffer_size;
+    D3DXIMAGE_INFO info;
+    D3DXIMAGE_FILEFORMAT file_format;
+
+    /* textures */
+    hr = IDirect3DDevice9_CreateTexture(device, 256, 256, 0, 0, D3DFMT_X8R8G8B8, D3DPOOL_MANAGED, &texture, NULL);
+    if (FAILED(hr))
+    {
+        skip("Failed to create texture\n");
+        return;
+    }
+
+    for (file_format = D3DXIFF_BMP; file_format <= D3DXIFF_JPG; file_format++)
+    {
+        hr = D3DXSaveTextureToFileInMemory(&buffer, file_format, (IDirect3DBaseTexture9 *)texture, NULL);
+        ok(hr == D3D_OK, "D3DXSaveTextureToFileInMemory returned %#x, expected %#x\n", hr, D3D_OK);
+        if (SUCCEEDED(hr))
+        {
+            buffer_pointer = ID3DXBuffer_GetBufferPointer(buffer);
+            buffer_size = ID3DXBuffer_GetBufferSize(buffer);
+            hr = D3DXGetImageInfoFromFileInMemory(buffer_pointer, buffer_size, &info);
+            ok(hr == D3D_OK, "D3DXGetImageInfoFromFileInMemory returned %#x, expected %#x\n", hr, D3D_OK);
+
+            ok(info.Width == 256, "Got width %u, expected %u\n", info.Width, 256);
+            ok(info.Height == 256, "Got height %u, expected %u\n", info.Height, 256);
+            ok(info.MipLevels == 1, "Got miplevels %u, expected %u\n", info.MipLevels, 1);
+            ok(info.ResourceType == D3DRTYPE_TEXTURE, "Got resource type %#x, expected %#x\n", info.ResourceType, D3DRTYPE_TEXTURE);
+            ok(info.ImageFileFormat == file_format, "Got file format %#x, expected %#x\n", info.ImageFileFormat, file_format);
+            ID3DXBuffer_Release(buffer);
+        }
+    }
+
+    todo_wine {
+    hr = D3DXSaveTextureToFileInMemory(&buffer, D3DXIFF_DDS, (IDirect3DBaseTexture9 *)texture, NULL);
+    ok(hr == D3D_OK, "D3DXSaveTextureToFileInMemory returned %#x, expected %#x\n", hr, D3D_OK);
+    if (SUCCEEDED(hr))
+    {
+        buffer_pointer = ID3DXBuffer_GetBufferPointer(buffer);
+        buffer_size = ID3DXBuffer_GetBufferSize(buffer);
+        hr = D3DXGetImageInfoFromFileInMemory(buffer_pointer, buffer_size, &info);
+        ok(hr == D3D_OK, "D3DXGetImageInfoFromFileInMemory returned %#x, expected %#x\n", hr, D3D_OK);
+
+        ok(info.Width == 256, "Got width %u, expected %u\n", info.Width, 256);
+        ok(info.Height == 256, "Got height %u, expected %u\n", info.Height, 256);
+        ok(info.MipLevels == 9, "Got miplevels %u, expected %u\n", info.MipLevels, 9);
+        ok(info.ResourceType == D3DRTYPE_TEXTURE, "Got resource type %#x, expected %#x\n", info.ResourceType, D3DRTYPE_TEXTURE);
+        ok(info.ImageFileFormat == D3DXIFF_DDS, "Got file format %#x, expected %#x\n", info.ImageFileFormat, D3DXIFF_DDS);
+        ID3DXBuffer_Release(buffer);
+    }
+    }
+
+    IDirect3DTexture9_Release(texture);
+
+    /* cube textures */
+    hr = IDirect3DDevice9_CreateCubeTexture(device, 256, 0, 0, D3DFMT_X8R8G8B8, D3DPOOL_MANAGED, &cube_texture, NULL);
+    if (FAILED(hr))
+    {
+        skip("Failed to create cube texture\n");
+        return;
+    }
+
+    hr = D3DXFillCubeTexture(cube_texture, fill_cube_positive_x, NULL);
+    ok(hr == D3D_OK, "D3DXFillCubeTexture returned %#x, expected %#x\n", hr, D3D_OK);
+
+    hr = D3DXSaveTextureToFileInMemory(&buffer, D3DXIFF_BMP, (IDirect3DBaseTexture9 *)cube_texture, NULL);
+    ok(hr == D3D_OK, "D3DXSaveTextureToFileInMemory returned %#x, expected %#x\n", hr, D3D_OK);
+    if (SUCCEEDED(hr))
+    {
+        IDirect3DSurface9 *surface;
+
+        buffer_pointer = ID3DXBuffer_GetBufferPointer(buffer);
+        buffer_size = ID3DXBuffer_GetBufferSize(buffer);
+        hr = D3DXGetImageInfoFromFileInMemory(buffer_pointer, buffer_size, &info);
+        ok(hr == D3D_OK, "D3DXGetImageInfoFromFileInMemory returned %#x, expected %#x\n", hr, D3D_OK);
+
+        ok(info.Width == 256, "Got width %u, expected %u\n", info.Width, 256);
+        ok(info.Height == 256, "Got height %u, expected %u\n", info.Height, 256);
+        ok(info.MipLevels == 1, "Got miplevels %u, expected %u\n", info.MipLevels, 1);
+        ok(info.ResourceType == D3DRTYPE_TEXTURE, "Got resource type %#x, expected %#x\n", info.ResourceType, D3DRTYPE_TEXTURE);
+        ok(info.ImageFileFormat == D3DXIFF_BMP, "Got file format %#x, expected %#x\n", info.ImageFileFormat, D3DXIFF_BMP);
+
+        /* positive x face is saved */
+        hr = IDirect3DDevice9_CreateOffscreenPlainSurface(device, 256, 256, D3DFMT_X8R8G8B8, D3DPOOL_SYSTEMMEM, &surface, NULL);
+        if (SUCCEEDED(hr))
+        {
+            D3DLOCKED_RECT locked_rect;
+
+            hr = D3DXLoadSurfaceFromFileInMemory(surface, NULL, NULL, buffer_pointer, buffer_size, NULL, D3DX_FILTER_NONE, 0, NULL);
+            ok(hr == D3D_OK, "D3DXLoadSurfaceFromFileInMemory returned %#x, expected %#x\n", hr, D3D_OK);
+
+            hr = IDirect3DSurface9_LockRect(surface, &locked_rect, NULL, D3DLOCK_READONLY);
+            if (SUCCEEDED(hr))
+            {
+                DWORD *color = locked_rect.pBits;
+                ok(*color == 0x00ff0000, "Got color %#x, expected %#x\n", *color, 0x00ff0000);
+                IDirect3DSurface9_UnlockRect(surface);
+            }
+
+            IDirect3DSurface9_Release(surface);
+        } else skip("Failed to create surface\n");
+
+        ID3DXBuffer_Release(buffer);
+    }
+
+    todo_wine {
+    hr = D3DXSaveTextureToFileInMemory(&buffer, D3DXIFF_DDS, (IDirect3DBaseTexture9 *)cube_texture, NULL);
+    ok(hr == D3D_OK, "D3DXSaveTextureToFileInMemory returned %#x, expected %#x\n", hr, D3D_OK);
+    if (SUCCEEDED(hr))
+    {
+        buffer_pointer = ID3DXBuffer_GetBufferPointer(buffer);
+        buffer_size = ID3DXBuffer_GetBufferSize(buffer);
+        hr = D3DXGetImageInfoFromFileInMemory(buffer_pointer, buffer_size, &info);
+        ok(hr == D3D_OK, "D3DXGetImageInfoFromFileInMemory returned %#x, expected %#x\n", hr, D3D_OK);
+
+        ok(info.Width == 256, "Got width %u, expected %u\n", info.Width, 256);
+        ok(info.Height == 256, "Got height %u, expected %u\n", info.Height, 256);
+        ok(info.MipLevels == 9, "Got miplevels %u, expected %u\n", info.MipLevels, 9);
+        ok(info.ResourceType == D3DRTYPE_CUBETEXTURE, "Got resource type %#x, expected %#x\n", info.ResourceType, D3DRTYPE_CUBETEXTURE);
+        ok(info.ImageFileFormat == D3DXIFF_DDS, "Got file format %#x, expected %#x\n", info.ImageFileFormat, D3DXIFF_DDS);
+        ID3DXBuffer_Release(buffer);
+    }
+    }
+
+    IDirect3DCubeTexture9_Release(cube_texture);
+
+    /* volume textures */
+    hr = IDirect3DDevice9_CreateVolumeTexture(device, 256, 256, 256, 0, 0, D3DFMT_X8R8G8B8, D3DPOOL_MANAGED, &volume_texture, NULL);
+    if (FAILED(hr))
+    {
+        skip("Failed to create volume texture\n");
+        return;
+    }
+
+    todo_wine {
+    hr = D3DXSaveTextureToFileInMemory(&buffer, D3DXIFF_BMP, (IDirect3DBaseTexture9 *)volume_texture, NULL);
+    ok(hr == D3D_OK, "D3DXSaveTextureToFileInMemory returned %#x, expected %#x\n", hr, D3D_OK);
+    if (SUCCEEDED(hr))
+    {
+        buffer_pointer = ID3DXBuffer_GetBufferPointer(buffer);
+        buffer_size = ID3DXBuffer_GetBufferSize(buffer);
+        hr = D3DXGetImageInfoFromFileInMemory(buffer_pointer, buffer_size, &info);
+        ok(hr == D3D_OK, "D3DXGetImageInfoFromFileInMemory returned %#x, expected %#x\n", hr, D3D_OK);
+
+        ok(info.Width == 256, "Got width %u, expected %u\n", info.Width, 256);
+        ok(info.Height == 256, "Got height %u, expected %u\n", info.Height, 256);
+        ok(info.Depth == 1, "Got depth %u, expected %u\n", info.Depth, 1);
+        ok(info.MipLevels == 1, "Got miplevels %u, expected %u\n", info.MipLevels, 1);
+        ok(info.ResourceType == D3DRTYPE_TEXTURE, "Got resource type %#x, expected %#x\n", info.ResourceType, D3DRTYPE_TEXTURE);
+        ok(info.ImageFileFormat == D3DXIFF_BMP, "Got file format %#x, expected %#x\n", info.ImageFileFormat, D3DXIFF_BMP);
+        ID3DXBuffer_Release(buffer);
+    }
+
+    hr = D3DXSaveTextureToFileInMemory(&buffer, D3DXIFF_DDS, (IDirect3DBaseTexture9 *)volume_texture, NULL);
+    ok(hr == D3D_OK, "D3DXSaveTextureToFileInMemory returned %#x, expected %#x\n", hr, D3D_OK);
+    if (SUCCEEDED(hr))
+    {
+        buffer_pointer = ID3DXBuffer_GetBufferPointer(buffer);
+        buffer_size = ID3DXBuffer_GetBufferSize(buffer);
+        hr = D3DXGetImageInfoFromFileInMemory(buffer_pointer, buffer_size, &info);
+        ok(hr == D3D_OK, "D3DXGetImageInfoFromFileInMemory returned %#x, expected %#x\n", hr, D3D_OK);
+
+        ok(info.Width == 256, "Got width %u, expected %u\n", info.Width, 256);
+        ok(info.Height == 256, "Got height %u, expected %u\n", info.Height, 256);
+        ok(info.Depth == 256, "Got depth %u, expected %u\n", info.Depth, 256);
+        ok(info.MipLevels == 9, "Got miplevels %u, expected %u\n", info.MipLevels, 9);
+        ok(info.ResourceType == D3DRTYPE_VOLUMETEXTURE, "Got resource type %#x, expected %#x\n", info.ResourceType, D3DRTYPE_VOLUMETEXTURE);
+        ok(info.ImageFileFormat == D3DXIFF_DDS, "Got file format %#x, expected %#x\n", info.ImageFileFormat, D3DXIFF_DDS);
+        ID3DXBuffer_Release(buffer);
+    }
+    }
+
+    IDirect3DVolumeTexture9_Release(volume_texture);
+}
+
 START_TEST(texture)
 {
     HWND wnd;
@@ -1440,6 +1630,7 @@ START_TEST(texture)
     test_D3DXCreateCubeTextureFromFileInMemory(device);
     test_D3DXCreateCubeTextureFromFileInMemoryEx(device);
     test_D3DXCreateVolumeTextureFromFileInMemory(device);
+    test_D3DXSaveTextureToFileInMemory(device);
 
     IDirect3DDevice9_Release(device);
     IDirect3D9_Release(d3d);
-- 
1.7.8.6




More information about the wine-patches mailing list