[PATCH 4/4] ddraw: Accept the d3d1 and d3d2 versions of D3DFINDDEVICERESULT in ddraw_find_device().
Henri Verbeet
hverbeet at codeweavers.com
Tue Sep 11 09:09:28 CDT 2018
From: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Based off a patch by Michael Müller.
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
dlls/ddraw/ddraw.c | 69 ++++++++++++++++++++++++++++++++++++++++-------
dlls/ddraw/tests/ddraw1.c | 57 ++++++++++++++++++++++++++++++++++++++-
dlls/ddraw/tests/ddraw2.c | 57 ++++++++++++++++++++++++++++++++++++++-
dlls/ddraw/tests/ddraw4.c | 57 ++++++++++++++++++++++++++++++++++++++-
include/d3dhal.h | 69 +++++++++++++++++++++++++++++++++++++++++++++++
5 files changed, 297 insertions(+), 12 deletions(-)
diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index 170a5492784..c83d0ca1568 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -25,6 +25,8 @@
#include "wine/port.h"
#include "ddraw_private.h"
+#include "ddrawi.h"
+#include "d3dhal.h"
#include "wine/exception.h"
@@ -4019,20 +4021,44 @@ static HRESULT WINAPI d3d1_CreateViewport(IDirect3D *iface, IDirect3DViewport **
}
static HRESULT ddraw_find_device(struct ddraw *ddraw, const D3DFINDDEVICESEARCH *fds, D3DFINDDEVICERESULT *fdr,
- unsigned int guid_count, const GUID * const *guids)
-{
+ unsigned int guid_count, const GUID * const *guids, DWORD device_desc_size)
+{
+ struct ddraw_find_device_result_v1
+ {
+ DWORD size;
+ GUID guid;
+ D3DDEVICEDESC_V1 hw_desc;
+ D3DDEVICEDESC_V1 sw_desc;
+ } *fdr1;
+ struct ddraw_find_device_result_v2
+ {
+ DWORD size;
+ GUID guid;
+ D3DDEVICEDESC_V2 hw_desc;
+ D3DDEVICEDESC_V2 sw_desc;
+ } *fdr2;
D3DDEVICEDESC7 desc7;
D3DDEVICEDESC desc1;
unsigned int i;
HRESULT hr;
- TRACE("ddraw %p, fds %p, fdr %p, guid_count %u, guids %p.\n", ddraw, fds, fdr, guid_count, guids);
+ TRACE("ddraw %p, fds %p, fdr %p, guid_count %u, guids %p, device_desc_size %u.\n",
+ ddraw, fds, fdr, guid_count, guids, device_desc_size);
if (!fds || !fdr)
return DDERR_INVALIDPARAMS;
- if (fds->dwSize != sizeof(*fds) || fdr->dwSize != sizeof(*fdr))
+ if (fds->dwSize != sizeof(*fds))
+ {
+ WARN("Got invalid search structure size %u.\n", fds->dwSize);
+ return DDERR_INVALIDPARAMS;
+ }
+
+ if (fdr->dwSize != sizeof(*fdr) && fdr->dwSize != sizeof(*fdr2) && fdr->dwSize != sizeof(*fdr1))
+ {
+ WARN("Got invalid result structure size %u.\n", fdr->dwSize);
return DDERR_INVALIDPARAMS;
+ }
if (fds->dwFlags & D3DFDS_COLORMODEL)
WARN("Ignoring colour model %#x.\n", fds->dcmColorModel);
@@ -4066,8 +4092,33 @@ static HRESULT ddraw_find_device(struct ddraw *ddraw, const D3DFINDDEVICESEARCH
/* Now return our own GUID */
ddraw_d3dcaps1_from_7(&desc1, &desc7);
fdr->guid = IID_D3DDEVICE_WineD3D;
- fdr->ddHwDesc = desc1;
- fdr->ddSwDesc = desc1;
+
+ /* Note that "device_desc_size" doesn't necessarily have any relation to
+ * the actual structure size. However, this matches the behaviour of
+ * Windows since at least Windows 2000. */
+ if (fdr->dwSize == sizeof(*fdr1))
+ {
+ fdr1 = (struct ddraw_find_device_result_v1 *)fdr;
+ memcpy(&fdr1->hw_desc, &desc1, sizeof(fdr1->hw_desc));
+ fdr1->hw_desc.dwSize = device_desc_size;
+ memcpy(&fdr1->sw_desc, &desc1, sizeof(fdr1->sw_desc));
+ fdr1->sw_desc.dwSize = device_desc_size;
+ }
+ else if (fdr->dwSize == sizeof(*fdr2))
+ {
+ fdr2 = (struct ddraw_find_device_result_v2 *)fdr;
+ memcpy(&fdr2->hw_desc, &desc1, sizeof(fdr2->hw_desc));
+ fdr2->hw_desc.dwSize = device_desc_size;
+ memcpy(&fdr2->sw_desc, &desc1, sizeof(fdr2->sw_desc));
+ fdr2->sw_desc.dwSize = device_desc_size;
+ }
+ else
+ {
+ fdr->ddHwDesc = desc1;
+ fdr->ddHwDesc.dwSize = device_desc_size;
+ fdr->ddSwDesc = desc1;
+ fdr->ddSwDesc.dwSize = device_desc_size;
+ }
TRACE("Returning Wine's wined3d device with (undumped) capabilities.\n");
@@ -4086,7 +4137,7 @@ static HRESULT WINAPI d3d3_FindDevice(IDirect3D3 *iface, D3DFINDDEVICESEARCH *fd
TRACE("iface %p, fds %p, fdr %p.\n", iface, fds, fdr);
- return ddraw_find_device(ddraw, fds, fdr, ARRAY_SIZE(guids), guids);
+ return ddraw_find_device(ddraw, fds, fdr, ARRAY_SIZE(guids), guids, sizeof(D3DDEVICEDESC_V3));
}
static HRESULT WINAPI d3d2_FindDevice(IDirect3D2 *iface, D3DFINDDEVICESEARCH *fds, D3DFINDDEVICERESULT *fdr)
@@ -4103,7 +4154,7 @@ static HRESULT WINAPI d3d2_FindDevice(IDirect3D2 *iface, D3DFINDDEVICESEARCH *fd
TRACE("iface %p, fds %p, fdr %p.\n", iface, fds, fdr);
- return ddraw_find_device(ddraw, fds, fdr, ARRAY_SIZE(guids), guids);
+ return ddraw_find_device(ddraw, fds, fdr, ARRAY_SIZE(guids), guids, sizeof(D3DDEVICEDESC_V2));
}
static HRESULT WINAPI d3d1_FindDevice(IDirect3D *iface, D3DFINDDEVICESEARCH *fds, D3DFINDDEVICERESULT *fdr)
@@ -4119,7 +4170,7 @@ static HRESULT WINAPI d3d1_FindDevice(IDirect3D *iface, D3DFINDDEVICESEARCH *fds
TRACE("iface %p, fds %p, fdr %p.\n", iface, fds, fdr);
- return ddraw_find_device(ddraw, fds, fdr, ARRAY_SIZE(guids), guids);
+ return ddraw_find_device(ddraw, fds, fdr, ARRAY_SIZE(guids), guids, sizeof(D3DDEVICEDESC_V1));
}
/*****************************************************************************
diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c
index ba9f128dad7..ee4fa5bfaab 100644
--- a/dlls/ddraw/tests/ddraw1.c
+++ b/dlls/ddraw/tests/ddraw1.c
@@ -22,7 +22,8 @@
#include "wine/test.h"
#include <limits.h>
#include <math.h>
-#include "d3d.h"
+#include "ddrawi.h"
+#include "d3dhal.h"
static BOOL is_ddraw64 = sizeof(DWORD) != sizeof(DWORD *);
static DEVMODEW registry_mode;
@@ -11724,6 +11725,22 @@ static void test_find_device(void)
HWND window;
HRESULT hr;
+ struct
+ {
+ DWORD size;
+ GUID guid;
+ D3DDEVICEDESC_V1 hw_desc;
+ D3DDEVICEDESC_V1 sw_desc;
+ } result_v1;
+
+ struct
+ {
+ DWORD size;
+ GUID guid;
+ D3DDEVICEDESC_V2 hw_desc;
+ D3DDEVICEDESC_V2 sw_desc;
+ } result_v2;
+
static const struct
{
const GUID *guid;
@@ -11761,6 +11778,10 @@ static void test_find_device(void)
hr = IDirect3D_FindDevice(d3d, &search, &result);
ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
ok(result.dwSize == sizeof(result), "Got unexpected result size %u.\n", result.dwSize);
+ ok(result.ddHwDesc.dwSize == sizeof(result_v1.hw_desc),
+ "Got unexpected HW desc size %u.\n", result.ddHwDesc.dwSize);
+ ok(result.ddSwDesc.dwSize == sizeof(result_v1.sw_desc),
+ "Got unexpected SW desc size %u.\n", result.ddSwDesc.dwSize);
memset(&search, 0, sizeof(search));
memset(&result, 0, sizeof(result));
@@ -11772,6 +11793,26 @@ static void test_find_device(void)
hr = IDirect3D_FindDevice(d3d, &search, &result);
ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr);
+ search.dwSize = sizeof(search);
+
+ memset(&result_v1, 0, sizeof(result_v1));
+ result_v1.size = sizeof(result_v1);
+ hr = IDirect3D_FindDevice(d3d, &search, (D3DFINDDEVICERESULT *)&result_v1);
+ ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+ ok(result_v1.hw_desc.dwSize == sizeof(result_v1.hw_desc),
+ "Got unexpected HW desc size %u.\n", result_v1.hw_desc.dwSize);
+ ok(result_v1.sw_desc.dwSize == sizeof(result_v1.sw_desc),
+ "Got unexpected SW desc size %u.\n", result_v1.sw_desc.dwSize);
+
+ memset(&result_v2, 0, sizeof(result_v2));
+ result_v2.size = sizeof(result_v2);
+ hr = IDirect3D_FindDevice(d3d, &search, (D3DFINDDEVICERESULT *)&result_v2);
+ ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+ ok(result_v2.hw_desc.dwSize == sizeof(result_v1.hw_desc),
+ "Got unexpected HW desc size %u.\n", result_v2.hw_desc.dwSize);
+ ok(result_v2.sw_desc.dwSize == sizeof(result_v1.sw_desc),
+ "Got unexpected SW desc size %u.\n", result_v2.sw_desc.dwSize);
+
for (i = 0; i < ARRAY_SIZE(tests); ++i)
{
memset(&search, 0, sizeof(search));
@@ -11785,6 +11826,20 @@ static void test_find_device(void)
hr = IDirect3D_FindDevice(d3d, &search, &result);
ok(hr == tests[i].hr, "Test %u: Got unexpected hr %#x.\n", i, hr);
ok(result.dwSize == sizeof(result), "Test %u: Got unexpected result size %u.\n", i, result.dwSize);
+ if (SUCCEEDED(hr))
+ {
+ ok(result.ddHwDesc.dwSize == sizeof(result_v1.hw_desc),
+ "Test %u: Got unexpected HW desc size %u.\n", i, result.ddHwDesc.dwSize);
+ ok(result.ddSwDesc.dwSize == sizeof(result_v1.sw_desc),
+ "Test %u: Got unexpected SW desc size %u.\n", i, result.ddSwDesc.dwSize);
+ }
+ else
+ {
+ ok(!result.ddHwDesc.dwSize,
+ "Test %u: Got unexpected HW desc size %u.\n", i, result.ddHwDesc.dwSize);
+ ok(!result.ddSwDesc.dwSize,
+ "Test %u: Got unexpected SW desc size %u.\n", i, result.ddSwDesc.dwSize);
+ }
}
/* The HAL device can only be enumerated if hardware acceleration is present. */
diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c
index b5739c3ab4d..9394705330a 100644
--- a/dlls/ddraw/tests/ddraw2.c
+++ b/dlls/ddraw/tests/ddraw2.c
@@ -24,7 +24,8 @@
#include "wine/test.h"
#include <limits.h>
#include <math.h>
-#include "d3d.h"
+#include "ddrawi.h"
+#include "d3dhal.h"
static BOOL is_ddraw64 = sizeof(DWORD) != sizeof(DWORD *);
static DEVMODEW registry_mode;
@@ -13006,6 +13007,22 @@ static void test_find_device(void)
HWND window;
HRESULT hr;
+ struct
+ {
+ DWORD size;
+ GUID guid;
+ D3DDEVICEDESC_V1 hw_desc;
+ D3DDEVICEDESC_V1 sw_desc;
+ } result_v1;
+
+ struct
+ {
+ DWORD size;
+ GUID guid;
+ D3DDEVICEDESC_V2 hw_desc;
+ D3DDEVICEDESC_V2 sw_desc;
+ } result_v2;
+
static const struct
{
const GUID *guid;
@@ -13043,6 +13060,10 @@ static void test_find_device(void)
hr = IDirect3D2_FindDevice(d3d, &search, &result);
ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
ok(result.dwSize == sizeof(result), "Got unexpected result size %u.\n", result.dwSize);
+ ok(result.ddHwDesc.dwSize == sizeof(result_v2.hw_desc),
+ "Got unexpected HW desc size %u.\n", result.ddHwDesc.dwSize);
+ ok(result.ddSwDesc.dwSize == sizeof(result_v2.sw_desc),
+ "Got unexpected SW desc size %u.\n", result.ddSwDesc.dwSize);
memset(&search, 0, sizeof(search));
memset(&result, 0, sizeof(result));
@@ -13054,6 +13075,26 @@ static void test_find_device(void)
hr = IDirect3D2_FindDevice(d3d, &search, &result);
ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr);
+ search.dwSize = sizeof(search);
+
+ memset(&result_v1, 0, sizeof(result_v1));
+ result_v1.size = sizeof(result_v1);
+ hr = IDirect3D2_FindDevice(d3d, &search, (D3DFINDDEVICERESULT *)&result_v1);
+ ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+ ok(result_v1.hw_desc.dwSize == sizeof(result_v2.hw_desc),
+ "Got unexpected HW desc size %u.\n", result_v1.hw_desc.dwSize);
+ ok(result_v1.sw_desc.dwSize == sizeof(result_v2.sw_desc),
+ "Got unexpected SW desc size %u.\n", result_v1.sw_desc.dwSize);
+
+ memset(&result_v2, 0, sizeof(result_v2));
+ result_v2.size = sizeof(result_v2);
+ hr = IDirect3D2_FindDevice(d3d, &search, (D3DFINDDEVICERESULT *)&result_v2);
+ ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+ ok(result_v2.hw_desc.dwSize == sizeof(result_v2.hw_desc),
+ "Got unexpected HW desc size %u.\n", result_v2.hw_desc.dwSize);
+ ok(result_v2.sw_desc.dwSize == sizeof(result_v2.sw_desc),
+ "Got unexpected SW desc size %u.\n", result_v2.sw_desc.dwSize);
+
for (i = 0; i < ARRAY_SIZE(tests); ++i)
{
memset(&search, 0, sizeof(search));
@@ -13067,6 +13108,20 @@ static void test_find_device(void)
hr = IDirect3D2_FindDevice(d3d, &search, &result);
ok(hr == tests[i].hr, "Test %u: Got unexpected hr %#x.\n", i, hr);
ok(result.dwSize == sizeof(result), "Test %u: Got unexpected result size %u.\n", i, result.dwSize);
+ if (SUCCEEDED(hr))
+ {
+ ok(result.ddHwDesc.dwSize == sizeof(result_v2.hw_desc),
+ "Test %u: Got unexpected HW desc size %u.\n", i, result.ddHwDesc.dwSize);
+ ok(result.ddSwDesc.dwSize == sizeof(result_v2.sw_desc),
+ "Test %u: Got unexpected SW desc size %u.\n", i, result.ddSwDesc.dwSize);
+ }
+ else
+ {
+ ok(!result.ddHwDesc.dwSize,
+ "Test %u: Got unexpected HW desc size %u.\n", i, result.ddHwDesc.dwSize);
+ ok(!result.ddSwDesc.dwSize,
+ "Test %u: Got unexpected SW desc size %u.\n", i, result.ddSwDesc.dwSize);
+ }
}
/* The HAL device can only be enumerated if hardware acceleration is present. */
diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c
index 337ccb06e42..6a3630a2c0e 100644
--- a/dlls/ddraw/tests/ddraw4.c
+++ b/dlls/ddraw/tests/ddraw4.c
@@ -22,7 +22,8 @@
#include "wine/test.h"
#include <limits.h>
#include <math.h>
-#include "d3d.h"
+#include "ddrawi.h"
+#include "d3dhal.h"
HRESULT WINAPI GetSurfaceFromDC(HDC dc, struct IDirectDrawSurface **surface, HDC *device_dc);
@@ -15100,6 +15101,22 @@ static void test_find_device(void)
HWND window;
HRESULT hr;
+ struct
+ {
+ DWORD size;
+ GUID guid;
+ D3DDEVICEDESC_V1 hw_desc;
+ D3DDEVICEDESC_V1 sw_desc;
+ } result_v1;
+
+ struct
+ {
+ DWORD size;
+ GUID guid;
+ D3DDEVICEDESC_V2 hw_desc;
+ D3DDEVICEDESC_V2 sw_desc;
+ } result_v2;
+
static const struct
{
const GUID *guid;
@@ -15137,6 +15154,10 @@ static void test_find_device(void)
hr = IDirect3D3_FindDevice(d3d, &search, &result);
ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
ok(result.dwSize == sizeof(result), "Got unexpected result size %u.\n", result.dwSize);
+ ok(result.ddHwDesc.dwSize == sizeof(result.ddHwDesc),
+ "Got unexpected HW desc size %u.\n", result.ddHwDesc.dwSize);
+ ok(result.ddSwDesc.dwSize == sizeof(result.ddSwDesc),
+ "Got unexpected SW desc size %u.\n", result.ddSwDesc.dwSize);
memset(&search, 0, sizeof(search));
memset(&result, 0, sizeof(result));
@@ -15148,6 +15169,26 @@ static void test_find_device(void)
hr = IDirect3D3_FindDevice(d3d, &search, &result);
ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr);
+ search.dwSize = sizeof(search);
+
+ memset(&result_v1, 0, sizeof(result_v1));
+ result_v1.size = sizeof(result_v1);
+ hr = IDirect3D3_FindDevice(d3d, &search, (D3DFINDDEVICERESULT *)&result_v1);
+ ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+ ok(result_v1.hw_desc.dwSize == sizeof(result.ddHwDesc),
+ "Got unexpected HW desc size %u.\n", result_v1.hw_desc.dwSize);
+ ok(result_v1.sw_desc.dwSize == sizeof(result.ddSwDesc),
+ "Got unexpected SW desc size %u.\n", result_v1.sw_desc.dwSize);
+
+ memset(&result_v2, 0, sizeof(result_v2));
+ result_v2.size = sizeof(result_v2);
+ hr = IDirect3D3_FindDevice(d3d, &search, (D3DFINDDEVICERESULT *)&result_v2);
+ ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+ ok(result_v2.hw_desc.dwSize == sizeof(result.ddHwDesc),
+ "Got unexpected HW desc size %u.\n", result_v2.hw_desc.dwSize);
+ ok(result_v2.sw_desc.dwSize == sizeof(result.ddSwDesc),
+ "Got unexpected SW desc size %u.\n", result_v2.sw_desc.dwSize);
+
for (i = 0; i < ARRAY_SIZE(tests); ++i)
{
memset(&search, 0, sizeof(search));
@@ -15161,6 +15202,20 @@ static void test_find_device(void)
hr = IDirect3D3_FindDevice(d3d, &search, &result);
ok(hr == tests[i].hr, "Test %u: Got unexpected hr %#x.\n", i, hr);
ok(result.dwSize == sizeof(result), "Test %u: Got unexpected result size %u.\n", i, result.dwSize);
+ if (SUCCEEDED(hr))
+ {
+ ok(result.ddHwDesc.dwSize == sizeof(result.ddHwDesc),
+ "Test %u: Got unexpected HW desc size %u.\n", i, result.ddHwDesc.dwSize);
+ ok(result.ddSwDesc.dwSize == sizeof(result.ddSwDesc),
+ "Test %u: Got unexpected SW desc size %u.\n", i, result.ddSwDesc.dwSize);
+ }
+ else
+ {
+ ok(!result.ddHwDesc.dwSize,
+ "Test %u: Got unexpected HW desc size %u.\n", i, result.ddHwDesc.dwSize);
+ ok(!result.ddSwDesc.dwSize,
+ "Test %u: Got unexpected SW desc size %u.\n", i, result.ddSwDesc.dwSize);
+ }
}
/* The HAL device can only be enumerated if hardware acceleration is present. */
diff --git a/include/d3dhal.h b/include/d3dhal.h
index 9d43313a00b..409cbfdf83b 100644
--- a/include/d3dhal.h
+++ b/include/d3dhal.h
@@ -47,6 +47,75 @@ typedef struct _D3DDeviceDesc_V1 {
DWORD dwMaxVertexCount;
} D3DDEVICEDESC_V1,*LPD3DDEVICEDESC_V1;
+typedef struct _D3DDeviceDesc_V2
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ D3DCOLORMODEL dcmColorModel;
+ DWORD dwDevCaps;
+ D3DTRANSFORMCAPS dtcTransformCaps;
+ BOOL bClipping;
+ D3DLIGHTINGCAPS dlcLightingCaps;
+ D3DPRIMCAPS dpcLineCaps;
+ D3DPRIMCAPS dpcTriCaps;
+ DWORD dwDeviceRenderBitDepth;
+ DWORD dwDeviceZBufferBitDepth;
+ DWORD dwMaxBufferSize;
+ DWORD dwMaxVertexCount;
+
+ /* DirectX 5 */
+ DWORD dwMinTextureWidth;
+ DWORD dwMinTextureHeight;
+ DWORD dwMaxTextureWidth;
+ DWORD dwMaxTextureHeight;
+ DWORD dwMinStippleWidth;
+ DWORD dwMaxStippleWidth;
+ DWORD dwMinStippleHeight;
+ DWORD dwMaxStippleHeight;
+} D3DDEVICEDESC_V2, *LPD3DDEVICEDESC_V2;
+
+typedef struct _D3DDeviceDesc_V3
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ D3DCOLORMODEL dcmColorModel;
+ DWORD dwDevCaps;
+ D3DTRANSFORMCAPS dtcTransformCaps;
+ BOOL bClipping;
+ D3DLIGHTINGCAPS dlcLightingCaps;
+ D3DPRIMCAPS dpcLineCaps;
+ D3DPRIMCAPS dpcTriCaps;
+ DWORD dwDeviceRenderBitDepth;
+ DWORD dwDeviceZBufferBitDepth;
+ DWORD dwMaxBufferSize;
+ DWORD dwMaxVertexCount;
+
+ /* DirectX 5 */
+ DWORD dwMinTextureWidth;
+ DWORD dwMinTextureHeight;
+ DWORD dwMaxTextureWidth;
+ DWORD dwMaxTextureHeight;
+ DWORD dwMinStippleWidth;
+ DWORD dwMaxStippleWidth;
+ DWORD dwMinStippleHeight;
+ DWORD dwMaxStippleHeight;
+
+ /* DirectX 6 */
+ DWORD dwMaxTextureRepeat;
+ DWORD dwMaxTextureAspectRatio;
+ DWORD dwMaxAnisotropy;
+ D3DVALUE dvGuardBandLeft;
+ D3DVALUE dvGuardBandTop;
+ D3DVALUE dvGuardBandRight;
+ D3DVALUE dvGuardBandBottom;
+ D3DVALUE dvExtentsAdjust;
+ DWORD dwStencilCaps;
+ DWORD dwFVFCaps;
+ DWORD dwTextureOpCaps;
+ WORD wMaxTextureBlendStages;
+ WORD wMaxSimultaneousTextures;
+} D3DDEVICEDESC_V3, *LPD3DDEVICEDESC_V3;
+
typedef struct _D3DHAL_GLOBALDRIVERDATA {
DWORD dwSize;
D3DDEVICEDESC_V1 hwCaps;
--
2.11.0
More information about the wine-devel
mailing list