[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