On 12 June 2016 at 22:21, Stefan Dösinger stefandoesinger@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...