[PATCH 04/10] ddraw/tests: New visual back buffer flipping tests. (try 3)
Oldřich Jedlička
oldium.pro at seznam.cz
Tue Aug 3 14:26:17 CDT 2010
---
dlls/ddraw/tests/visual.c | 126 +++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 126 insertions(+), 0 deletions(-)
diff --git a/dlls/ddraw/tests/visual.c b/dlls/ddraw/tests/visual.c
index 290cb76..d103d9e 100644
--- a/dlls/ddraw/tests/visual.c
+++ b/dlls/ddraw/tests/visual.c
@@ -2920,6 +2920,131 @@ static void depth_clamp_test(IDirect3DDevice7 *device)
ok(SUCCEEDED(hr), "SetViewport failed, hr %#x.\n", hr);
}
+static void DX1_BackBufferFlipTest(void)
+{
+ HRESULT hr;
+ int ret;
+ IDirectDraw *DirectDraw1 = NULL;
+ IDirectDrawSurface *Primary = NULL;
+ IDirectDrawSurface *Backbuffer = NULL;
+ HBRUSH whiteBrush = NULL;
+ HBRUSH redBrush = NULL;
+ HDC dc;
+ WNDCLASS wc = {0};
+ DDSURFACEDESC ddsd;
+ COLORREF color;
+ const COLORREF white = RGB(255, 255, 255);
+ const COLORREF red = RGB(255, 0, 0);
+ const RECT rect = { 0, 0, 640, 480 };
+ BOOL attached = FALSE;
+
+ wc.lpfnWndProc = DefWindowProc;
+ wc.lpszClassName = "DX1_BackBufferFlipTest_wc";
+ RegisterClass(&wc);
+ window = CreateWindow("DX1_BackBufferFlipTest_wc", "DX1_BackBufferFlipTest",
+ WS_MAXIMIZE | WS_VISIBLE | WS_CAPTION , 0, 0, 640, 480, 0, 0, 0, 0);
+
+ hr = DirectDrawCreate( NULL, &DirectDraw1, NULL );
+ ok(hr==DD_OK || hr==DDERR_NODIRECTDRAWSUPPORT, "DirectDrawCreate returned: %x\n", hr);
+ if(FAILED(hr)) goto out;
+
+ hr = IDirectDraw_SetCooperativeLevel(DirectDraw1, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
+ ok(hr==DD_OK, "SetCooperativeLevel returned: %x\n", hr);
+ if(FAILED(hr)) goto out;
+
+ hr = IDirectDraw_SetDisplayMode(DirectDraw1, 640, 480, 8);
+ ok(hr==DD_OK || hr == DDERR_UNSUPPORTED, "SetDisplayMode returned: %x\n", hr);
+ if (FAILED(hr)) {
+ goto out;
+ }
+
+ memset(&ddsd, 0, sizeof(DDSURFACEDESC));
+ ddsd.dwSize = sizeof(DDSURFACEDESC);
+ ddsd.dwFlags = DDSD_CAPS;
+ ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
+
+ hr = IDirectDraw_CreateSurface(DirectDraw1, &ddsd, &Primary, NULL);
+ ok(hr==DD_OK, "IDirectDraw_CreateSurface returned: %08x\n", hr);
+
+ memset(&ddsd, 0, sizeof(DDSURFACEDESC));
+ ddsd.dwSize = sizeof(DDSURFACEDESC);
+ ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
+ ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER;
+ ddsd.dwWidth = 640;
+ ddsd.dwHeight = 480;
+ hr = IDirectDraw_CreateSurface(DirectDraw1, &ddsd, &Backbuffer, NULL);
+ todo_wine ok(hr==DD_OK, "IDirectDraw_CreateSurface returned: %08x\n", hr);
+ if(FAILED(hr)) goto out;
+
+ hr = IDirectDrawSurface_AddAttachedSurface(Primary, Backbuffer);
+ todo_wine ok(hr == DD_OK || broken(hr == DDERR_CANNOTATTACHSURFACE),
+ "Attaching a back buffer to a front buffer returned %08x\n", hr);
+ if (FAILED(hr)) goto out;
+
+ attached = TRUE;
+
+ whiteBrush = CreateSolidBrush(white);
+ ok(whiteBrush != NULL, "CreateBrush returned: %p\n", whiteBrush);
+ redBrush = CreateSolidBrush(red);
+ ok(redBrush != NULL, "CreateBrush returned: %p\n", redBrush);
+
+ hr = IDirectDrawSurface_GetDC(Backbuffer, &dc);
+ ok(hr == DD_OK, "IDirectDrawSurface_GetDC returned: %x\n", hr);
+ ret = FillRect(dc, &rect, redBrush);
+ ok(ret != 0, "FillRect failed\n");
+ hr = IDirectDrawSurface_ReleaseDC(Backbuffer, dc);
+ ok(hr == DD_OK, "IDirectDrawSurface_ReleaseDC returned: %x\n", hr);
+
+ hr = IDirectDrawSurface_GetDC(Primary, &dc);
+ ok(hr == DD_OK, "IDirectDrawSurface_GetDC returned: %x\n", hr);
+ ret = FillRect(dc, &rect, whiteBrush);
+ ok(ret != 0, "FillRect failed\n");
+ hr = IDirectDrawSurface_ReleaseDC(Primary, dc);
+ ok(hr == DD_OK, "IDirectDrawSurface_ReleaseDC returned: %x\n", hr);
+
+ // Check it out
+ color = getPixelColor_GDI(Primary, 5, 5);
+ ok(GetRValue(color) == 0xFF && GetGValue(color) == 0xFF && GetBValue(color) == 0xFF,
+ "got R %02X G %02X B %02X, expected R FF G FF B FF\n",
+ GetRValue(color), GetGValue(color), GetBValue(color));
+
+ color = getPixelColor_GDI(Backbuffer, 5, 5);
+ ok(GetRValue(color) == 0xFF && GetGValue(color) == 0 && GetBValue(color) == 0,
+ "got R %02X G %02X B %02X, expected R FF G 00 B 00\n",
+ GetRValue(color), GetGValue(color), GetBValue(color));
+
+ hr = IDirectDrawSurface_Flip(Primary, NULL, DDFLIP_WAIT);
+ todo_wine ok(hr == DD_OK, "IDirectDrawSurface_Flip returned 0x%08x\n", hr);
+
+ if (hr == DD_OK)
+ {
+ color = getPixelColor_GDI(Primary, 5, 5);
+ ok(GetRValue(color) == 0xFF && GetGValue(color) == 0 && GetBValue(color) == 0,
+ "got R %02X G %02X B %02X, expected R FF G 00 B 00\n",
+ GetRValue(color), GetGValue(color), GetBValue(color));
+
+ color = getPixelColor_GDI(Backbuffer, 5, 5);
+ ok((GetRValue(color) == 0xFF && GetGValue(color) == 0xFF && GetBValue(color) == 0xFF) ||
+ broken(GetRValue(color) == 0xFF && GetGValue(color) == 0 && GetBValue(color) == 0), // broken driver
+ "got R %02X G %02X B %02X, expected R FF G FF B FF\n",
+ GetRValue(color), GetGValue(color), GetBValue(color));
+ }
+
+ out:
+
+ if (whiteBrush) DeleteObject(whiteBrush);
+ if (redBrush) DeleteObject(redBrush);
+ if (Backbuffer)
+ {
+ if (attached)
+ IDirectDrawSurface_DeleteAttachedSurface(Primary, 0, Backbuffer);
+ IDirectDrawSurface_Release(Backbuffer);
+ }
+ if (Primary) IDirectDrawSurface_Release(Primary);
+ if (DirectDraw1) IDirectDraw_Release(DirectDraw1);
+ if (window) DestroyWindow(window);
+}
+
START_TEST(visual)
{
HRESULT hr;
@@ -2983,6 +3108,7 @@ START_TEST(visual)
D3D3_ViewportClearTest();
p8_primary_test();
+ DX1_BackBufferFlipTest();
return ;
--
1.7.2
More information about the wine-patches
mailing list