dxdiagn: Added properties for hardware acceleration capabilities

Markus Weiland mw at graph-ix.net
Sun Mar 23 20:24:18 CDT 2014


Is this implementation ok?


On 14-03-23 07:20 PM, Stefan Dösinger wrote:
> Am 23.03.2014 um 04:18 schrieb Markus Weiland <mw at graph-ix.net>:
>
>> This patch addresses bug http://bugs.winehq.org/show_bug.cgi?id=11114 I filed four years ago. It hardcodes the b3DAccelerationExists, b3DAccelerationEnabled, and bDDAccelerationEnabled properties to TRUE.
> IDirect3D9::GetDeviceCaps with D3DDEVTYPE_HAL should do. If the call suceeds you have hardware acceleration.
>

-------------- next part --------------
>From eff59156df03b3a67b8ad22ac63e7cd629ad3f5b Mon Sep 17 00:00:00 2001
From: Markus Weiland <markusw at graph-ix.net>
Date: Sun, 23 Mar 2014 21:18:45 -0400
Subject: dxdiagn: Added properties for hardware acceleration capabilities

---
 dlls/dxdiagn/provider.c        | 20 ++++++++++++++++++++
 dlls/dxdiagn/tests/container.c |  6 ++++++
 2 files changed, 26 insertions(+)

diff --git a/dlls/dxdiagn/provider.c b/dlls/dxdiagn/provider.c
index 76bbcf0..451270c 100644
--- a/dlls/dxdiagn/provider.c
+++ b/dlls/dxdiagn/provider.c
@@ -915,10 +915,15 @@ static HRESULT fill_display_information_d3d(IDxDiagContainerImpl_Container *node
         static const WCHAR id_fmtW[] = {'0','x','%','0','4','x',0};
         static const WCHAR subsysid_fmtW[] = {'0','x','%','0','8','x',0};
         static const WCHAR mem_fmt[] = {'%','.','1','f',' ','M','B',0};
+        static const WCHAR b3DAccelerationExists[] = {'b','3','D','A','c','c','e','l','e','r','a','t','i','o','n','E','x','i','s','t','s',0};
+        static const WCHAR b3DAccelerationEnabled[] = {'b','3','D','A','c','c','e','l','e','r','a','t','i','o','n','E','n','a','b','l','e','d',0};
+        static const WCHAR bDDAccelerationEnabled[] = {'b','D','D','A','c','c','e','l','e','r','a','t','i','o','n','E','n','a','b','l','e','d',0};
 
         D3DADAPTER_IDENTIFIER9 adapter_info;
         D3DDISPLAYMODE adapter_mode;
+        D3DCAPS9 device_caps;
         DWORD available_mem = 0;
+        BOOL hardware_accel;
 
         snprintfW(buffer, sizeof(buffer)/sizeof(WCHAR), adapterid_fmtW, index);
         display_adapter = allocate_information_node(buffer);
@@ -1043,6 +1048,21 @@ static HRESULT fill_display_information_d3d(IDxDiagContainerImpl_Container *node
         hr = add_bstr_property(display_adapter, szDisplayMemoryEnglish, buffer);
         if (FAILED(hr))
             goto cleanup;
+
+        hr = IDirect3D9_GetDeviceCaps(pDirect3D9, index, D3DDEVTYPE_HAL, &device_caps);
+        hardware_accel = SUCCEEDED(hr);
+
+        hr = add_bool_property(display_adapter, b3DAccelerationEnabled, hardware_accel);
+        if (FAILED(hr))
+            goto cleanup;
+
+        hr = add_bool_property(display_adapter, b3DAccelerationExists, hardware_accel);
+        if (FAILED(hr))
+            goto cleanup;
+
+        hr = add_bool_property(display_adapter, bDDAccelerationEnabled, hardware_accel);
+        if (FAILED(hr))
+            goto cleanup;
     }
 
     hr = S_OK;
diff --git a/dlls/dxdiagn/tests/container.c b/dlls/dxdiagn/tests/container.c
index 9959665..ce0fb77 100644
--- a/dlls/dxdiagn/tests/container.c
+++ b/dlls/dxdiagn/tests/container.c
@@ -938,6 +938,9 @@ static void test_DxDiag_DisplayDevices(void)
     static const WCHAR szRevisionId[] = {'s','z','R','e','v','i','s','i','o','n','I','d',0};
     static const WCHAR dwRefreshRate[] = {'d','w','R','e','f','r','e','s','h','R','a','t','e',0};
     static const WCHAR szManufacturer[] = {'s','z','M','a','n','u','f','a','c','t','u','r','e','r',0};
+    static const WCHAR b3DAccelerationExists[] = {'b','3','D','A','c','c','e','l','e','r','a','t','i','o','n','E','x','i','s','t','s',0};
+    static const WCHAR b3DAccelerationEnabled[] = {'b','3','D','A','c','c','e','l','e','r','a','t','i','o','n','E','n','a','b','l','e','d',0};
+    static const WCHAR bDDAccelerationEnabled[] = {'b','D','D','A','c','c','e','l','e','r','a','t','i','o','n','E','n','a','b','l','e','d',0};
 
     static const struct property_test property_tests[] =
     {
@@ -959,6 +962,9 @@ static void test_DxDiag_DisplayDevices(void)
         {szRevisionId, VT_BSTR},
         {dwRefreshRate, VT_UI4},
         {szManufacturer, VT_BSTR},
+        {b3DAccelerationExists, VT_BOOL},
+        {b3DAccelerationEnabled, VT_BOOL},
+        {bDDAccelerationEnabled, VT_BOOL},
     };
 
     IDxDiagContainer *display_cont = NULL;
-- 
1.9.1



More information about the wine-devel mailing list