[PATCH 2/2] d3dx9_36: Fix several issues in save_dds_surface_to_memory.

Alistair Leslie-Hughes leslie_alistair at hotmail.com
Thu Dec 3 00:55:33 CST 2015


From: Christian Costa <titan.costa at gmail.com>

The different fixes are:
- Fix header size of the DDS file
- Remove DDS_MIPMAPCOUNT as mipmap levels are not supported yet
- Do not set depth and miplevels fields as their flags are not set (to match native)

Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
---
 dlls/d3dx9_36/surface.c       | 7 +++----
 dlls/d3dx9_36/tests/surface.c | 8 ++++----
 2 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/dlls/d3dx9_36/surface.c b/dlls/d3dx9_36/surface.c
index b14f5e7..6857c56 100644
--- a/dlls/d3dx9_36/surface.c
+++ b/dlls/d3dx9_36/surface.c
@@ -487,13 +487,12 @@ static HRESULT save_dds_surface_to_memory(ID3DXBuffer **dst_buffer, IDirect3DSur
 
     memset(header, 0, sizeof(*header));
     header->signature = MAKEFOURCC('D','D','S',' ');
-    header->size = sizeof(*header);
-    header->flags = DDS_CAPS | DDS_HEIGHT | DDS_WIDTH | DDS_PITCH | DDS_PIXELFORMAT | DDS_MIPMAPCOUNT;
+    /* The signature is not really part of the DDS header */
+    header->size = sizeof(*header) - sizeof(header->signature);
+    header->flags = DDS_CAPS | DDS_HEIGHT | DDS_WIDTH | DDS_PIXELFORMAT;
     header->height = src_desc.Height;
     header->width = src_desc.Width;
     header->pitch_or_linear_size = dst_pitch;
-    header->depth = 1;
-    header->miplevels = 1;
     header->caps = DDS_CAPS_TEXTURE;
     hr = d3dformat_to_dds_pixel_format(&header->pixel_format, src_desc.Format);
     if (FAILED(hr))
diff --git a/dlls/d3dx9_36/tests/surface.c b/dlls/d3dx9_36/tests/surface.c
index 1c85ca3..b735af0 100644
--- a/dlls/d3dx9_36/tests/surface.c
+++ b/dlls/d3dx9_36/tests/surface.c
@@ -1274,12 +1274,12 @@ static void test_D3DXSaveSurfaceToFileInMemory(IDirect3DDevice9 *device)
         header = ID3DXBuffer_GetBufferPointer(buffer);
 
         ok(header->magic == MAKEFOURCC('D','D','S',' '), "Invalid DDS signature\n");
-        todo_wine ok(header->size == 124, "Invalid DDS size %d\n", header->size);
+        ok(header->size == 124, "Invalid DDS size %d\n", header->size);
         ok(header->height == 4, "Wrong height %d\n", header->height);
         ok(header->width == 4, "Wrong width %d\n", header->width);
-        todo_wine ok(header->depth == 0, "Wrong depth %d\n", header->depth);
-        todo_wine ok(header->miplevels == 0, "Wrong miplevels %d\n", header->miplevels);
-        todo_wine ok(header->flags == (DDS_CAPS | DDS_HEIGHT | DDS_WIDTH | DDS_PIXELFORMAT),
+        ok(header->depth == 0, "Wrong depth %d\n", header->depth);
+        ok(header->miplevels == 0, "Wrong miplevels %d\n", header->miplevels);
+        ok(header->flags == (DDS_CAPS | DDS_HEIGHT | DDS_WIDTH | DDS_PIXELFORMAT),
                      "Wrong flags %x\n", header->flags);
         ID3DXBuffer_Release(buffer);
     }
-- 
1.9.1




More information about the wine-patches mailing list