Signed-off-by: Jactry Zeng jzeng@codeweavers.com --- dlls/ddraw/tests/ddraw4.c | 44 +++++++++++++++++++++++++++++++++++++++ dlls/ddraw/tests/ddraw7.c | 44 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+)
diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c index cb7582c1d4..db70fa2423 100644 --- a/dlls/ddraw/tests/ddraw4.c +++ b/dlls/ddraw/tests/ddraw4.c @@ -16002,6 +16002,49 @@ static void test_clipper_refcount(void) DestroyWindow(window); }
+static HRESULT CALLBACK enum_available_fmt(DDPIXELFORMAT *format, void *ctx) +{ + DDPIXELFORMAT *z_fmt = ctx; + + if (U1(*format).dwZBufferBitDepth > U1(*z_fmt).dwZBufferBitDepth) + *z_fmt = *format; + + ok(U3(*format).dwZBitMask != 0xffffffff, "Got unexpected depth format: %#x.\n", U3(*format).dwZBitMask); + + return DDENUMRET_OK; +} + +static void test_available_fmt(void) +{ + DDPIXELFORMAT z_fmt; + IDirectDraw4 *ddraw; + IDirect3D3 *d3d3; + HWND window; + HRESULT hr; + + ddraw = create_ddraw(); + ok(!!ddraw, "Failed to create a ddraw object.\n"); + + window = create_window(); + hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL); + ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr); + + hr = IDirectDraw4_QueryInterface(ddraw, &IID_IDirect3D3, (void **)&d3d3); + IDirectDraw4_Release(ddraw); + if (FAILED(hr)) + { + skip("D3D interface is not available, skipping test.\n"); + return; + } + + memset(&z_fmt, 0, sizeof(z_fmt)); + hr = IDirect3D3_EnumZBufferFormats(d3d3, &IID_IDirect3DHALDevice, enum_available_fmt, &z_fmt); + if (FAILED(hr) || !z_fmt.dwSize) + skip("No depth buffer formats available, skipping test.\n"); + + IDirect3D3_Release(d3d3); +} + START_TEST(ddraw4) { DDDEVICEIDENTIFIER identifier; @@ -16134,4 +16177,5 @@ START_TEST(ddraw4) test_gdi_surface(); test_alphatest(); test_clipper_refcount(); + test_available_fmt(); } diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c index 5f066a6257..83c6671c54 100644 --- a/dlls/ddraw/tests/ddraw7.c +++ b/dlls/ddraw/tests/ddraw7.c @@ -15893,6 +15893,49 @@ static void test_begin_end_state_block(void) DestroyWindow(window); }
+static HRESULT CALLBACK enum_available_fmt(DDPIXELFORMAT *format, void *ctx) +{ + DDPIXELFORMAT *z_fmt = ctx; + + if (U1(*format).dwZBufferBitDepth > U1(*z_fmt).dwZBufferBitDepth) + *z_fmt = *format; + + ok(U3(*format).dwZBitMask != 0xffffffff, "Got unexpected depth format: %#x.\n", U3(*format).dwZBitMask); + + return DDENUMRET_OK; +} + +static void test_available_fmt(void) +{ + DDPIXELFORMAT z_fmt; + IDirectDraw7 *ddraw; + IDirect3D7 *d3d7; + HWND window; + HRESULT hr; + + ddraw = create_ddraw(); + ok(!!ddraw, "Failed to create a ddraw object.\n"); + + window = create_window(); + hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL); + ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr); + + hr = IDirectDraw7_QueryInterface(ddraw, &IID_IDirect3D7, (void **)&d3d7); + IDirectDraw7_Release(ddraw); + if (FAILED(hr)) + { + skip("D3D interface is not available, skipping test.\n"); + return; + } + + memset(&z_fmt, 0, sizeof(z_fmt)); + hr = IDirect3D7_EnumZBufferFormats(d3d7, &IID_IDirect3DHALDevice, enum_available_fmt, &z_fmt); + if (FAILED(hr) || !z_fmt.dwSize) + skip("No depth buffer formats available, skipping test.\n"); + + IDirect3D7_Release(d3d7); +} + START_TEST(ddraw7) { DDDEVICEIDENTIFIER2 identifier; @@ -16038,4 +16081,5 @@ START_TEST(ddraw7) test_alphatest(); test_clipper_refcount(); test_begin_end_state_block(); + test_available_fmt(); }
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=52673
Your paranoid android.
=== w1064v1809 (32 bit report) ===
ddraw: 1a40:ddraw7: unhandled exception c0000005 at 733C40F8
On Wed, 22 May 2019 at 12:27, Jactry Zeng jzeng@codeweavers.com wrote:
Signed-off-by: Jactry Zeng jzeng@codeweavers.com
dlls/ddraw/tests/ddraw4.c | 44 +++++++++++++++++++++++++++++++++++++++ dlls/ddraw/tests/ddraw7.c | 44 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+)
What about ddraw2 and ddraw1? (EnumDevices() isn't very reliable for determining the available depth formats, but you can still simply try creating a surface with the relevant format. See also create_device().)
Aside from what Henri already mentioned:
On Wed, May 22, 2019 at 9:57 AM Jactry Zeng jzeng@codeweavers.com wrote:
Signed-off-by: Jactry Zeng jzeng@codeweavers.com
dlls/ddraw/tests/ddraw4.c | 44 +++++++++++++++++++++++++++++++++++++++ dlls/ddraw/tests/ddraw7.c | 44 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+)
diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c index cb7582c1d4..db70fa2423 100644 --- a/dlls/ddraw/tests/ddraw4.c +++ b/dlls/ddraw/tests/ddraw4.c @@ -16002,6 +16002,49 @@ static void test_clipper_refcount(void) DestroyWindow(window); }
+static HRESULT CALLBACK enum_available_fmt(DDPIXELFORMAT *format, void *ctx) +{
- DDPIXELFORMAT *z_fmt = ctx;
- if (U1(*format).dwZBufferBitDepth > U1(*z_fmt).dwZBufferBitDepth)
*z_fmt = *format;
You don't need this part, you're not going to use it.
- ok(U3(*format).dwZBitMask != 0xffffffff, "Got unexpected depth format: %#x.\n", U3(*format).dwZBitMask);
- return DDENUMRET_OK;
+}
+static void test_available_fmt(void)
Minor nitpick, but I'd spell out "formats" here and in the name of the callback function above.
+{
- DDPIXELFORMAT z_fmt;
- IDirectDraw4 *ddraw;
- IDirect3D3 *d3d3;
- HWND window;
- HRESULT hr;
- ddraw = create_ddraw();
- ok(!!ddraw, "Failed to create a ddraw object.\n");
- window = create_window();
- hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
- ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr);
I'm not 100% sure but it should be possible to avoid creating a window and calling SetCooperativeLevel().
- hr = IDirectDraw4_QueryInterface(ddraw, &IID_IDirect3D3, (void **)&d3d3);
- IDirectDraw4_Release(ddraw);
- if (FAILED(hr))
- {
skip("D3D interface is not available, skipping test.\n");
return;
- }
- memset(&z_fmt, 0, sizeof(z_fmt));
- hr = IDirect3D3_EnumZBufferFormats(d3d3, &IID_IDirect3DHALDevice, enum_available_fmt, &z_fmt);
- if (FAILED(hr) || !z_fmt.dwSize)
skip("No depth buffer formats available, skipping test.\n");
Related to the comment for the callback, here you don't need to pass and then check z_fmt.
Same comments for the ddraw7 test.
Thanks Matteo and Henri!
I sent another try just now.
On 2019/6/13 下午4:56, Matteo Bruni wrote:
Aside from what Henri already mentioned:
On Wed, May 22, 2019 at 9:57 AM Jactry Zeng jzeng@codeweavers.com wrote:
Signed-off-by: Jactry Zeng jzeng@codeweavers.com
dlls/ddraw/tests/ddraw4.c | 44 +++++++++++++++++++++++++++++++++++++++ dlls/ddraw/tests/ddraw7.c | 44 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+)
diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c index cb7582c1d4..db70fa2423 100644 --- a/dlls/ddraw/tests/ddraw4.c +++ b/dlls/ddraw/tests/ddraw4.c @@ -16002,6 +16002,49 @@ static void test_clipper_refcount(void) DestroyWindow(window); }
+static HRESULT CALLBACK enum_available_fmt(DDPIXELFORMAT *format, void *ctx) +{
- DDPIXELFORMAT *z_fmt = ctx;
- if (U1(*format).dwZBufferBitDepth > U1(*z_fmt).dwZBufferBitDepth)
*z_fmt = *format;
You don't need this part, you're not going to use it.
- ok(U3(*format).dwZBitMask != 0xffffffff, "Got unexpected depth format: %#x.\n", U3(*format).dwZBitMask);
- return DDENUMRET_OK;
+}
+static void test_available_fmt(void)
Minor nitpick, but I'd spell out "formats" here and in the name of the callback function above.
+{
- DDPIXELFORMAT z_fmt;
- IDirectDraw4 *ddraw;
- IDirect3D3 *d3d3;
- HWND window;
- HRESULT hr;
- ddraw = create_ddraw();
- ok(!!ddraw, "Failed to create a ddraw object.\n");
- window = create_window();
- hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
- ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr);
I'm not 100% sure but it should be possible to avoid creating a window and calling SetCooperativeLevel().
- hr = IDirectDraw4_QueryInterface(ddraw, &IID_IDirect3D3, (void **)&d3d3);
- IDirectDraw4_Release(ddraw);
- if (FAILED(hr))
- {
skip("D3D interface is not available, skipping test.\n");
return;
- }
- memset(&z_fmt, 0, sizeof(z_fmt));
- hr = IDirect3D3_EnumZBufferFormats(d3d3, &IID_IDirect3DHALDevice, enum_available_fmt, &z_fmt);
- if (FAILED(hr) || !z_fmt.dwSize)
skip("No depth buffer formats available, skipping test.\n");
Related to the comment for the callback, here you don't need to pass and then check z_fmt.
Same comments for the ddraw7 test.