Stefan Dösinger : ddraw/tests: Dx9 and earlier cards have problems with HW blits to R5G5B5A1.

Alexandre Julliard julliard at winehq.org
Tue Jan 28 15:35:24 CST 2020


Module: wine
Branch: master
Commit: 0a8d7b533c7cc7b479aae0cd363b8f3c49fb12ca
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=0a8d7b533c7cc7b479aae0cd363b8f3c49fb12ca

Author: Stefan Dösinger <stefan at codeweavers.com>
Date:   Mon Jan 27 22:45:24 2020 +0100

ddraw/tests: Dx9 and earlier cards have problems with HW blits to R5G5B5A1.

My Geforce 7 sends R5G6B5 data to the R5G5B5A1 surface without any
conversion. r200 and r500 set the alpha bit on the destination. This
applies to sysmem->vidmem and vidmem->vidmem blits.

Signed-off-by: Stefan Dösinger <stefan at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ddraw/tests/ddraw4.c | 7 +++++--
 dlls/ddraw/tests/ddraw7.c | 7 +++++--
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c
index 7ce33ab406..b6cb97c3c9 100644
--- a/dlls/ddraw/tests/ddraw4.c
+++ b/dlls/ddraw/tests/ddraw4.c
@@ -16719,7 +16719,7 @@ static void test_surface_format_conversion_alpha(void)
         const char *name;
         unsigned int block_size, x_blocks, y_blocks;
         DWORD support_flag;
-        BOOL broken_software_blit;
+        BOOL broken_software_blit, broken_hardware_blit;
     }
     formats[] =
     {
@@ -16759,7 +16759,7 @@ static void test_surface_format_conversion_alpha(void)
                 sizeof(DDPIXELFORMAT), DDPF_RGB | DDPF_ALPHAPIXELS, 0,
                 {16}, {0x00007c00}, {0x000003e0}, {0x0000001f}, {0x00008000}
             },
-            "R5G5B5A1", 2, 4, 4,
+            "R5G5B5A1", 2, 4, 4, 0, FALSE, TRUE,
         },
         {
             {
@@ -16888,6 +16888,9 @@ static void test_surface_format_conversion_alpha(void)
             if (!is_wine && ((test_caps[j].src_caps | test_caps[j].dst_caps) & DDSCAPS_SYSTEMMEMORY)
                     && (src_format->broken_software_blit || dst_format->broken_software_blit))
                 continue;
+            if (!is_wine && (test_caps[j].dst_caps & DDSCAPS_VIDEOMEMORY)
+                    && dst_format->broken_hardware_blit)
+                continue;
 
             U4(surface_desc).ddpfPixelFormat = src_format->fmt;
             surface_desc.ddsCaps.dwCaps = test_caps[j].src_caps;
diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c
index cde5d2b5ba..c2a0ca7e3b 100644
--- a/dlls/ddraw/tests/ddraw7.c
+++ b/dlls/ddraw/tests/ddraw7.c
@@ -16695,7 +16695,7 @@ static void test_surface_format_conversion_alpha(void)
         const char *name;
         unsigned int block_size, x_blocks, y_blocks;
         DWORD support_flag;
-        BOOL broken_software_blit;
+        BOOL broken_software_blit, broken_hardware_blit;
     }
     formats[] =
     {
@@ -16735,7 +16735,7 @@ static void test_surface_format_conversion_alpha(void)
                 sizeof(DDPIXELFORMAT), DDPF_RGB | DDPF_ALPHAPIXELS, 0,
                 {16}, {0x00007c00}, {0x000003e0}, {0x0000001f}, {0x00008000}
             },
-            "R5G5B5A1", 2, 4, 4,
+            "R5G5B5A1", 2, 4, 4, 0, FALSE, TRUE,
         },
         {
             {
@@ -16864,6 +16864,9 @@ static void test_surface_format_conversion_alpha(void)
             if (!is_wine && ((test_caps[j].src_caps | test_caps[j].dst_caps) & DDSCAPS_SYSTEMMEMORY)
                     && (src_format->broken_software_blit || dst_format->broken_software_blit))
                 continue;
+            if (!is_wine && (test_caps[j].dst_caps & DDSCAPS_VIDEOMEMORY)
+                    && dst_format->broken_hardware_blit)
+                continue;
 
             U4(surface_desc).ddpfPixelFormat = src_format->fmt;
             surface_desc.ddsCaps.dwCaps = test_caps[j].src_caps;




More information about the wine-cvs mailing list