[PATCH] ddraw/tests: P8 color keying does not work on WARP.

Henri Verbeet hverbeet at gmail.com
Tue Jun 14 11:06:28 CDT 2016


On 12 June 2016 at 22:21, Stefan Dösinger <stefandoesinger at gmx.at> wrote:
> +static HRESULT WINAPI is_warp_cb(GUID *guid, char *description, char *name,
> +        D3DDEVICEDESC *hal_desc, D3DDEVICEDESC *hel_desc, void *ctx)
> +{
> +    BOOL *is_warp = ctx;
> +    if (IsEqualGUID(guid, &IID_IDirect3DHALDevice))
> +    {
> +        *is_warp = !!(hal_desc->dwDevCaps & D3DDEVCAPS_TEXTURESYSTEMMEMORY);
> +        return DDENUMRET_CANCEL;
> +    }
> +    return DDENUMRET_OK;
> +}
> +
>  static void test_p8_blit(void)
>  {
>      IDirectDrawSurface *src, *dst, *dst_p8;
>      DDSURFACEDESC surface_desc;
>      IDirectDraw *ddraw;
> +    IDirect3D *d3d;
>      IDirectDrawPalette *palette, *palette2;
>      ULONG refcount;
>      HWND window;
> @@ -5305,6 +5318,7 @@ static void test_p8_blit(void)
>      PALETTEENTRY palette_entries[256];
>      unsigned int x;
>      DDBLTFX fx;
> +    BOOL is_warp = FALSE;
>      static const BYTE src_data[] = {0x10, 0x1, 0x2, 0x3, 0x4, 0x5, 0xff, 0x80};
>      static const BYTE src_data2[] = {0x10, 0x5, 0x4, 0x3, 0x2, 0x1, 0xff, 0x80};
>      static const BYTE expected_p8[] = {0x10, 0x1, 0x4, 0x3, 0x4, 0x5, 0xff, 0x80};
> @@ -5322,6 +5336,16 @@ static void test_p8_blit(void)
>      hr = IDirectDraw_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
>      ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr);
>
> +    /* Locking a P8 surface crashes on WARP if a d3d device has been created. So we
> +     * need to find the caps via enumeration. */
> +    hr = IDirectDraw_QueryInterface(ddraw, &IID_IDirect3D, (void **)&d3d);
> +    if (SUCCEEDED(hr))
> +    {
> +        hr = IDirect3D_EnumDevices(d3d, is_warp_cb, &is_warp);
> +        ok(SUCCEEDED(hr), "Failed to enumerate devices, hr %#x.\n", hr);
> +        IDirect3D_Release(d3d);
> +    }
Can't you just use ddraw4/7's GetDeviceIdentifier()?



More information about the wine-devel mailing list