Re: [PATCH] ddraw/tests: P8 color keying does not work on WARP.
On 12 June 2016 at 22:21, Stefan Dösinger <stefandoesinger(a)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()?
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 Am 2016-06-14 um 17:06 schrieb Henri Verbeet:
Can't you just use ddraw4/7's GetDeviceIdentifier()? I thought it always returns "DirectDraw HAL", but my memory might serve me wrong. It'd probably also fix the 64 bit issue. My thinking was that on WARP we always have d3d, so if there's no D3D there's no need to enable the broken() path, but this logic doesn't work for 64 bit... -----BEGIN PGP SIGNATURE----- Version: GnuPG v2
iQIcBAEBCAAGBQJXYEbOAAoJEN0/YqbEcdMwqpYP/0+Hg2wflQChyZuoAA/LgtGw aQruUlfXG8fOQ3FgSy4vPq+5sm0RBb4CKG3MZcnHz9rqNtjbCSZmzBWNuxKzvSJB XwjbmjbenpPU7HA38vHHsOv5tTtXatzZVDpgXTSlQHAm4eEVGbdvhxTPghkZH4/L WOKfFLtFSdJZ61//amYMRQER8Nyq7WJrZeD9tRRr0Z5Ht7wNDRcnsyNwcAw142vQ 8wOT98xsBVL2T1a4D/8Z+RQgzM/nhoXTORReE1OP0M0rJRvmMPTDRi/K55Jy4U+q XDg8jmwbV5l5Ha6UO1IAEkyqc4adfQJiZqkbbsOzud4b+m4GPGJZqSViyOs2PJfh d4QGL9oV0P5gpAeFlaUBLXwOYeoJHRKV/ChAVYu8Zi7cHi9PtTk01G9WqfytwQ28 tYNHuGvsMZuCNbuys4gOzsKellx6FdahFw8M0DXMDrJm+gfZ6d/BewNepGh2zhdO 8pPezaBVk3CHeYJ6HbY+l/cYqZFuch2S1sy5GX0II6xJzQE86hY/ihcSkdS4rPoJ Qvpnzjem7CFJ2H8adxFxgAXLI2o8T063/5OBHlisIwtbWnXahkj3O8iML3KNgn9P WN6H8ZQzsycEUTSXcoLHKGNUSrF9kuYQtunO1yCFk26C3nf32yMqzTx4C7AkNrM3 LopiYfOqdC0ihEQeRAL9 =Fp2S -----END PGP SIGNATURE-----
participants (2)
-
Henri Verbeet -
Stefan Dösinger