From: Stefan Dösinger Subject: [PATCH 4/4] ddraw: Test if P8 primaries can be converted to RGB. Message-Id: <1404662805-31158-4-git-send-email-stefan@codeweavers.com> Date: Sun, 6 Jul 2014 18:06:45 +0200 The test if a P8 primary can be converted to P8 fails because the ARB blitter cannot convert to P8. Arguably this is the wrong result, but it is also the wrong question to ask. For P8 primary support we have to be able to convert P8 to RGB. The purpose of this patch is to create P8 primaries in video memory. This way the workaround in test_palette_lost can be removed. --- dlls/ddraw/surface.c | 6 +++++- dlls/ddraw/tests/ddraw1.c | 7 +++---- dlls/ddraw/tests/ddraw2.c | 7 +++---- dlls/ddraw/tests/ddraw4.c | 7 +++---- dlls/ddraw/tests/ddraw7.c | 7 +++---- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c index 3d61e61..7367c01 100644 --- a/dlls/ddraw/surface.c +++ b/dlls/ddraw/surface.c @@ -5838,6 +5838,7 @@ HRESULT ddraw_surface_create(struct ddraw *ddraw, const DDSURFACEDESC2 *surface_ { enum wined3d_resource_type rtype; DWORD usage = 0; + enum wined3d_format_id adapter_format = mode.format_id; if (desc->ddsCaps.dwCaps2 & DDSCAPS2_CUBEMAP) rtype = WINED3D_RTYPE_CUBE_TEXTURE; @@ -5851,8 +5852,11 @@ HRESULT ddraw_surface_create(struct ddraw *ddraw, const DDSURFACEDESC2 *surface_ else if (desc->ddsCaps.dwCaps & DDSCAPS_3DDEVICE) usage = WINED3DUSAGE_RENDERTARGET; + if (desc->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE) + adapter_format = WINED3DFMT_B8G8R8X8_UNORM; + if (SUCCEEDED(hr = wined3d_check_device_format(ddraw->wined3d, WINED3DADAPTER_DEFAULT, - WINED3D_DEVICE_TYPE_HAL, mode.format_id, usage, rtype, wined3d_desc.format))) + WINED3D_DEVICE_TYPE_HAL, adapter_format, usage, rtype, wined3d_desc.format))) desc->ddsCaps.dwCaps |= DDSCAPS_VIDEOMEMORY; else desc->ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c index 1bcd31f..4e88252 100644 --- a/dlls/ddraw/tests/ddraw1.c +++ b/dlls/ddraw/tests/ddraw1.c @@ -5585,7 +5585,6 @@ static void test_palette_lost(void) HWND window; HRESULT hr; PALETTEENTRY palette_entries[256]; - DWORD needed_caps = DDSCAPS_VIDEOMEMORY | DDSCAPS_TEXTURE; DDCAPS hal_caps; window = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW, @@ -5597,9 +5596,9 @@ static void test_palette_lost(void) hal_caps.dwSize = sizeof(hal_caps); hr = IDirectDraw_GetCaps(ddraw, &hal_caps, NULL); ok(SUCCEEDED(hr), "Failed to get caps, hr %#x.\n", hr); - if ((hal_caps.ddsCaps.dwCaps & needed_caps) != needed_caps) + if (!(hal_caps.ddsCaps.dwCaps & DDSCAPS_TEXTURE)) { - skip("Video memory surfaces or textures not supported, skipping test.\n"); + skip("Textures not supported, skipping test.\n"); goto done; } @@ -5621,7 +5620,7 @@ static void test_palette_lost(void) memset(&surface_desc, 0, sizeof(surface_desc)); surface_desc.dwSize = sizeof(surface_desc); surface_desc.dwFlags = DDSD_CAPS; - surface_desc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY; + surface_desc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; hr = IDirectDraw_CreateSurface(ddraw, &surface_desc, &primary, NULL); ok(SUCCEEDED(hr), "Failed to create surface, hr %#x.\n", hr); hr = IDirectDrawSurface_SetPalette(primary, palette); diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c index cedf83e..4c9e6f1 100644 --- a/dlls/ddraw/tests/ddraw2.c +++ b/dlls/ddraw/tests/ddraw2.c @@ -6661,7 +6661,6 @@ static void test_palette_lost(void) HWND window; HRESULT hr; PALETTEENTRY palette_entries[256]; - DWORD needed_caps = DDSCAPS_VIDEOMEMORY | DDSCAPS_TEXTURE; DDCAPS hal_caps; window = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW, @@ -6673,9 +6672,9 @@ static void test_palette_lost(void) hal_caps.dwSize = sizeof(hal_caps); hr = IDirectDraw2_GetCaps(ddraw, &hal_caps, NULL); ok(SUCCEEDED(hr), "Failed to get caps, hr %#x.\n", hr); - if ((hal_caps.ddsCaps.dwCaps & needed_caps) != needed_caps) + if (!(hal_caps.ddsCaps.dwCaps & DDSCAPS_TEXTURE)) { - skip("Video memory surfaces or textures not supported, skipping test.\n"); + skip("Textures not supported, skipping test.\n"); goto done; } @@ -6697,7 +6696,7 @@ static void test_palette_lost(void) memset(&surface_desc, 0, sizeof(surface_desc)); surface_desc.dwSize = sizeof(surface_desc); surface_desc.dwFlags = DDSD_CAPS; - surface_desc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY; + surface_desc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; hr = IDirectDraw2_CreateSurface(ddraw, &surface_desc, &primary, NULL); ok(SUCCEEDED(hr), "Failed to create surface, hr %#x.\n", hr); hr = IDirectDrawSurface_SetPalette(primary, palette); diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c index 79a9a40..18f295e 100644 --- a/dlls/ddraw/tests/ddraw4.c +++ b/dlls/ddraw/tests/ddraw4.c @@ -7736,7 +7736,6 @@ static void test_palette_lost(void) HWND window; HRESULT hr; PALETTEENTRY palette_entries[256]; - DWORD needed_caps = DDSCAPS_VIDEOMEMORY | DDSCAPS_TEXTURE; DDCAPS hal_caps; window = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW, @@ -7748,9 +7747,9 @@ static void test_palette_lost(void) hal_caps.dwSize = sizeof(hal_caps); hr = IDirectDraw4_GetCaps(ddraw, &hal_caps, NULL); ok(SUCCEEDED(hr), "Failed to get caps, hr %#x.\n", hr); - if ((hal_caps.ddsCaps.dwCaps & needed_caps) != needed_caps) + if (!(hal_caps.ddsCaps.dwCaps & DDSCAPS_TEXTURE)) { - skip("Video memory surfaces or textures not supported, skipping test.\n"); + skip("Textures not supported, skipping test.\n"); goto done; } @@ -7772,7 +7771,7 @@ static void test_palette_lost(void) memset(&surface_desc, 0, sizeof(surface_desc)); surface_desc.dwSize = sizeof(surface_desc); surface_desc.dwFlags = DDSD_CAPS; - surface_desc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY; + surface_desc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; hr = IDirectDraw4_CreateSurface(ddraw, &surface_desc, &primary, NULL); ok(SUCCEEDED(hr), "Failed to create surface, hr %#x.\n", hr); hr = IDirectDrawSurface4_SetPalette(primary, palette); diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c index 23e7ced..3c9597d 100644 --- a/dlls/ddraw/tests/ddraw7.c +++ b/dlls/ddraw/tests/ddraw7.c @@ -7459,7 +7459,6 @@ static void test_palette_lost(void) HRESULT hr; PALETTEENTRY palette_entries[256]; DDSCAPS2 caps = {DDSCAPS_COMPLEX, 0, 0, 0}; - DWORD needed_caps = DDSCAPS_VIDEOMEMORY | DDSCAPS_TEXTURE; DDCAPS hal_caps; window = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW, @@ -7471,9 +7470,9 @@ static void test_palette_lost(void) hal_caps.dwSize = sizeof(hal_caps); hr = IDirectDraw7_GetCaps(ddraw, &hal_caps, NULL); ok(SUCCEEDED(hr), "Failed to get caps, hr %#x.\n", hr); - if ((hal_caps.ddsCaps.dwCaps & needed_caps) != needed_caps) + if (!(hal_caps.ddsCaps.dwCaps & DDSCAPS_TEXTURE)) { - skip("Video memory surfaces or textures not supported, skipping test.\n"); + skip("Textures not supported, skipping test.\n"); goto done; } @@ -7495,7 +7494,7 @@ static void test_palette_lost(void) memset(&surface_desc, 0, sizeof(surface_desc)); surface_desc.dwSize = sizeof(surface_desc); surface_desc.dwFlags = DDSD_CAPS; - surface_desc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY; + surface_desc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; hr = IDirectDraw7_CreateSurface(ddraw, &surface_desc, &primary, NULL); ok(SUCCEEDED(hr), "Failed to create surface, hr %#x.\n", hr); hr = IDirectDrawSurface7_SetPalette(primary, palette); -- 1.8.5.5