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@codeweavers.com --- 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 7ce33ab4063..b6cb97c3c98 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 cde5d2b5ba5..c2a0ca7e3b9 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;