[PATCH 6/6] d3d11: Implement CheckFeatureSupport() for D3D11_FEATURE_DOUBLES.

Józef Kucia jkucia at codeweavers.com
Mon Feb 20 06:12:15 CST 2017


Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
 dlls/d3d11/device.c | 27 +++++++++++++++++++++++++++
 include/d3d11.idl   |  5 +++++
 2 files changed, 32 insertions(+)

diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c
index 731a0e1..95b11e6 100644
--- a/dlls/d3d11/device.c
+++ b/dlls/d3d11/device.c
@@ -2864,6 +2864,10 @@ static HRESULT STDMETHODCALLTYPE d3d11_device_CheckCounter(ID3D11Device *iface,
 static HRESULT STDMETHODCALLTYPE d3d11_device_CheckFeatureSupport(ID3D11Device *iface, D3D11_FEATURE feature,
         void *feature_support_data, UINT feature_support_data_size)
 {
+    struct d3d_device *device = impl_from_ID3D11Device(iface);
+    WINED3DCAPS wined3d_caps;
+    HRESULT hr;
+
     TRACE("iface %p, feature %u, feature_support_data %p, feature_support_data_size %u.\n",
             iface, feature, feature_support_data, feature_support_data_size);
 
@@ -2885,6 +2889,29 @@ static HRESULT STDMETHODCALLTYPE d3d11_device_CheckFeatureSupport(ID3D11Device *
             threading_data->DriverCommandLists = TRUE;
             return S_OK;
         }
+
+        case D3D11_FEATURE_DOUBLES:
+        {
+            D3D11_FEATURE_DATA_DOUBLES *doubles_data = feature_support_data;
+            if (feature_support_data_size != sizeof(*doubles_data))
+            {
+                WARN("Invalid data size.\n");
+                return E_INVALIDARG;
+            }
+
+            wined3d_mutex_lock();
+            hr = wined3d_device_get_device_caps(device->wined3d_device, &wined3d_caps);
+            wined3d_mutex_unlock();
+            if (FAILED(hr))
+            {
+                WARN("Failed to get device caps, hr %#x.\n", hr);
+                return hr;
+            }
+
+            doubles_data->DoublePrecisionFloatShaderOps = wined3d_caps.shader_double_precision;
+            return S_OK;
+        }
+
         case D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS:
         {
             D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS *options = feature_support_data;
diff --git a/include/d3d11.idl b/include/d3d11.idl
index ad676c7..371ff2f 100644
--- a/include/d3d11.idl
+++ b/include/d3d11.idl
@@ -497,6 +497,11 @@ typedef struct D3D11_FEATURE_DATA_THREADING
     BOOL DriverCommandLists;
 } D3D11_FEATURE_DATA_THREADING;
 
+typedef struct D3D11_FEATURE_DATA_DOUBLES
+{
+    BOOL DoublePrecisionFloatShaderOps;
+} D3D11_FEATURE_DATA_DOUBLES;
+
 typedef struct D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS
 {
     BOOL ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x;
-- 
2.10.2




More information about the wine-patches mailing list