Module: wine Branch: master Commit: 0fdb1aaff6acb55c6500852dd30d0749e4bfdd40 URL: http://source.winehq.org/git/wine.git/?a=commit;h=0fdb1aaff6acb55c6500852dd3...
Author: Stefan Dösinger stefan@codeweavers.com Date: Wed Dec 11 22:30:44 2013 +0100
ddraw: SetSurfaceDesc does not work on primaries.
---
dlls/ddraw/surface.c | 5 +++-- dlls/ddraw/tests/ddraw2.c | 23 ++++++++++++++--------- dlls/ddraw/tests/ddraw4.c | 23 ++++++++++++++--------- dlls/ddraw/tests/ddraw7.c | 23 ++++++++++++++--------- 4 files changed, 45 insertions(+), 29 deletions(-)
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c index 09dbb9c..e6ae93f 100644 --- a/dlls/ddraw/surface.c +++ b/dlls/ddraw/surface.c @@ -4293,8 +4293,9 @@ static HRESULT WINAPI ddraw_surface7_SetSurfaceDesc(IDirectDrawSurface7 *iface, WARN("Flags is %x, returning DDERR_INVALIDPARAMS\n", Flags); return DDERR_INVALIDPARAMS; } - if (!(This->surface_desc.ddsCaps.dwCaps & DDSCAPS_SYSTEMMEMORY) || - This->surface_desc.ddsCaps.dwCaps2 & (DDSCAPS2_TEXTUREMANAGE | DDSCAPS2_D3DTEXTUREMANAGE)) + if (!(This->surface_desc.ddsCaps.dwCaps & DDSCAPS_SYSTEMMEMORY) + || This->surface_desc.ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE + || This->surface_desc.ddsCaps.dwCaps2 & (DDSCAPS2_TEXTUREMANAGE | DDSCAPS2_D3DTEXTUREMANAGE)) { WARN("Surface is not in system memory, returning DDERR_INVALIDSURFACETYPE.\n"); return DDERR_INVALIDSURFACETYPE; diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c index ccf228e..b6b50c1 100644 --- a/dlls/ddraw/tests/ddraw2.c +++ b/dlls/ddraw/tests/ddraw2.c @@ -4580,6 +4580,7 @@ static void test_set_surface_desc(void) { {DDSCAPS_VIDEOMEMORY, FALSE, "videomemory plain"}, {DDSCAPS_TEXTURE | DDSCAPS_SYSTEMMEMORY, TRUE, "systemmemory texture"}, + {DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY, FALSE, "systemmemory primary"}, };
if (!(ddraw = create_ddraw())) @@ -4810,16 +4811,20 @@ static void test_set_surface_desc(void) for (i = 0; i < sizeof(invalid_caps_tests) / sizeof(*invalid_caps_tests); i++) { reset_ddsd(&ddsd); - ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS | DDSD_PIXELFORMAT; - ddsd.dwWidth = 8; - ddsd.dwHeight = 8; - ddsd.ddpfPixelFormat.dwSize = sizeof(ddsd.ddpfPixelFormat); - ddsd.ddpfPixelFormat.dwFlags = DDPF_RGB; - U1(ddsd.ddpfPixelFormat).dwRGBBitCount = 32; - U2(ddsd.ddpfPixelFormat).dwRBitMask = 0x00ff0000; - U3(ddsd.ddpfPixelFormat).dwGBitMask = 0x0000ff00; - U4(ddsd.ddpfPixelFormat).dwBBitMask = 0x000000ff; + ddsd.dwFlags = DDSD_CAPS; ddsd.ddsCaps.dwCaps = invalid_caps_tests[i].caps; + if (!(invalid_caps_tests[i].caps & DDSCAPS_PRIMARYSURFACE)) + { + ddsd.dwFlags |= DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT; + ddsd.dwWidth = 8; + ddsd.dwHeight = 8; + ddsd.ddpfPixelFormat.dwSize = sizeof(ddsd.ddpfPixelFormat); + ddsd.ddpfPixelFormat.dwFlags = DDPF_RGB; + U1(ddsd.ddpfPixelFormat).dwRGBBitCount = 32; + U2(ddsd.ddpfPixelFormat).dwRBitMask = 0x00ff0000; + U3(ddsd.ddpfPixelFormat).dwGBitMask = 0x0000ff00; + U4(ddsd.ddpfPixelFormat).dwBBitMask = 0x000000ff; + }
hr = IDirectDraw_CreateSurface(ddraw, &ddsd, &surface, NULL); ok(SUCCEEDED(hr) || hr == DDERR_NODIRECTDRAWHW, "Failed to create surface, hr %#x.\n", hr); diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c index 1689562..fb9f8fe 100644 --- a/dlls/ddraw/tests/ddraw4.c +++ b/dlls/ddraw/tests/ddraw4.c @@ -5185,6 +5185,7 @@ static void test_set_surface_desc(void) {DDSCAPS_TEXTURE | DDSCAPS_SYSTEMMEMORY, 0, TRUE, "systemmemory texture"}, {DDSCAPS_TEXTURE, DDSCAPS2_D3DTEXTUREMANAGE, FALSE, "managed texture"}, {DDSCAPS_TEXTURE, DDSCAPS2_TEXTUREMANAGE, FALSE, "managed texture"}, + {DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY, 0, FALSE, "systemmemory primary"}, };
if (!(ddraw = create_ddraw())) @@ -5414,17 +5415,21 @@ static void test_set_surface_desc(void) for (i = 0; i < sizeof(invalid_caps_tests) / sizeof(*invalid_caps_tests); i++) { reset_ddsd(&ddsd); - ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS | DDSD_PIXELFORMAT; - ddsd.dwWidth = 8; - ddsd.dwHeight = 8; - U4(ddsd).ddpfPixelFormat.dwSize = sizeof(U4(ddsd).ddpfPixelFormat); - U4(ddsd).ddpfPixelFormat.dwFlags = DDPF_RGB; - U1(U4(ddsd).ddpfPixelFormat).dwRGBBitCount = 32; - U2(U4(ddsd).ddpfPixelFormat).dwRBitMask = 0x00ff0000; - U3(U4(ddsd).ddpfPixelFormat).dwGBitMask = 0x0000ff00; - U4(U4(ddsd).ddpfPixelFormat).dwBBitMask = 0x000000ff; + ddsd.dwFlags = DDSD_CAPS; ddsd.ddsCaps.dwCaps = invalid_caps_tests[i].caps; ddsd.ddsCaps.dwCaps2 = invalid_caps_tests[i].caps2; + if (!(invalid_caps_tests[i].caps & DDSCAPS_PRIMARYSURFACE)) + { + ddsd.dwFlags |= DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT; + ddsd.dwWidth = 8; + ddsd.dwHeight = 8; + U4(ddsd).ddpfPixelFormat.dwSize = sizeof(U4(ddsd).ddpfPixelFormat); + U4(ddsd).ddpfPixelFormat.dwFlags = DDPF_RGB; + U1(U4(ddsd).ddpfPixelFormat).dwRGBBitCount = 32; + U2(U4(ddsd).ddpfPixelFormat).dwRBitMask = 0x00ff0000; + U3(U4(ddsd).ddpfPixelFormat).dwGBitMask = 0x0000ff00; + U4(U4(ddsd).ddpfPixelFormat).dwBBitMask = 0x000000ff; + }
hr = IDirectDraw4_CreateSurface(ddraw, &ddsd, &surface, NULL); ok(SUCCEEDED(hr) || hr == DDERR_NODIRECTDRAWHW, "Failed to create surface, hr %#x.\n", hr); diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c index 41f1b9b..4f0d9af 100644 --- a/dlls/ddraw/tests/ddraw7.c +++ b/dlls/ddraw/tests/ddraw7.c @@ -5072,6 +5072,7 @@ static void test_set_surface_desc(void) {DDSCAPS_TEXTURE | DDSCAPS_SYSTEMMEMORY, 0, TRUE, "systemmemory texture"}, {DDSCAPS_TEXTURE, DDSCAPS2_D3DTEXTUREMANAGE, FALSE, "managed texture"}, {DDSCAPS_TEXTURE, DDSCAPS2_TEXTUREMANAGE, FALSE, "managed texture"}, + {DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY, 0, FALSE, "systemmemory primary"}, };
if (!(ddraw = create_ddraw())) @@ -5302,17 +5303,21 @@ static void test_set_surface_desc(void) for (i = 0; i < sizeof(invalid_caps_tests) / sizeof(*invalid_caps_tests); i++) { reset_ddsd(&ddsd); - ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS | DDSD_PIXELFORMAT; - ddsd.dwWidth = 8; - ddsd.dwHeight = 8; - U4(ddsd).ddpfPixelFormat.dwSize = sizeof(U4(ddsd).ddpfPixelFormat); - U4(ddsd).ddpfPixelFormat.dwFlags = DDPF_RGB; - U1(U4(ddsd).ddpfPixelFormat).dwRGBBitCount = 32; - U2(U4(ddsd).ddpfPixelFormat).dwRBitMask = 0x00ff0000; - U3(U4(ddsd).ddpfPixelFormat).dwGBitMask = 0x0000ff00; - U4(U4(ddsd).ddpfPixelFormat).dwBBitMask = 0x000000ff; + ddsd.dwFlags = DDSD_CAPS; ddsd.ddsCaps.dwCaps = invalid_caps_tests[i].caps; ddsd.ddsCaps.dwCaps2 = invalid_caps_tests[i].caps2; + if (!(invalid_caps_tests[i].caps & DDSCAPS_PRIMARYSURFACE)) + { + ddsd.dwFlags |= DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT; + ddsd.dwWidth = 8; + ddsd.dwHeight = 8; + U4(ddsd).ddpfPixelFormat.dwSize = sizeof(U4(ddsd).ddpfPixelFormat); + U4(ddsd).ddpfPixelFormat.dwFlags = DDPF_RGB; + U1(U4(ddsd).ddpfPixelFormat).dwRGBBitCount = 32; + U2(U4(ddsd).ddpfPixelFormat).dwRBitMask = 0x00ff0000; + U3(U4(ddsd).ddpfPixelFormat).dwGBitMask = 0x0000ff00; + U4(U4(ddsd).ddpfPixelFormat).dwBBitMask = 0x000000ff; + }
hr = IDirectDraw7_CreateSurface(ddraw, &ddsd, &surface, NULL); ok(SUCCEEDED(hr) || hr == DDERR_NODIRECTDRAWHW, "Failed to create surface, hr %#x.\n", hr);