[prev in list] [next in list] [prev in thread] [next in thread] 

List:       wine-cvs
Subject:    =?UTF-8?Q?Zebediah_Figura_=3A_d3d11=3A_Implement_D3D11=5FFEATURE=5FFORMAT?= =?UTF-8?Q?=5FSUPPORT=2E?
From:       Alexandre Julliard <julliard () winehq ! org>
Date:       2022-08-16 20:56:38
Message-ID: E1oO3gK-0000zI-5q () winehq ! org
[Download RAW message or body]

Module: wine
Branch: master
Commit: b34b5da644d2dc039c3956a073131bf56713f459
URL:    https://gitlab.winehq.org/wine/wine/-/commit/b34b5da644d2dc039c3956a073131bf56713f459


Author: Zebediah Figura <zfigura@codeweavers.com>
Date:   Wed Aug 10 12:18:22 2022 -0500

d3d11: Implement D3D11_FEATURE_FORMAT_SUPPORT.

This allows Guild Wars 2 to start.

---

 dlls/d3d11/device.c      | 12 ++++++++++++
 dlls/d3d11/tests/d3d11.c | 30 ++++++++++++++++++++++++++++++
 2 files changed, 42 insertions(+)

diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c
index 79b972df671..65706a414d8 100644
--- a/dlls/d3d11/device.c
+++ b/dlls/d3d11/device.c
@@ -4198,6 +4198,18 @@ static HRESULT STDMETHODCALLTYPE \
d3d11_device_CheckFeatureSupport(ID3D11Device2  return S_OK;
         }
 
+        case D3D11_FEATURE_FORMAT_SUPPORT:
+        {
+            D3D11_FEATURE_DATA_FORMAT_SUPPORT *data = feature_support_data;
+            if (feature_support_data_size != sizeof(*data))
+            {
+                WARN("Invalid size %u for D3D11_FEATURE_FORMAT_SUPPORT.\n", \
feature_support_data_size); +                return E_INVALIDARG;
+            }
+
+            return d3d11_device_CheckFormatSupport(iface, data->InFormat, \
&data->OutFormatSupport); +        }
+
         default:
             FIXME("Unhandled feature %#x.\n", feature);
             return E_NOTIMPL;
diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c
index 034b5e4320f..5e00bc7a336 100644
--- a/dlls/d3d11/tests/d3d11.c
+++ b/dlls/d3d11/tests/d3d11.c
@@ -20993,6 +20993,7 @@ static void check_format_support(ID3D11Device *device, const \
unsigned int *forma  static void test_format_support(const D3D_FEATURE_LEVEL \
feature_level)  {
     unsigned int format_support[DXGI_FORMAT_B4G4R4A4_UNORM + 1];
+    D3D11_FEATURE_DATA_FORMAT_SUPPORT feature_data;
     struct device_desc device_desc;
     ID3D11Device *device;
     DXGI_FORMAT format;
@@ -21054,11 +21055,32 @@ static void test_format_support(const D3D_FEATURE_LEVEL \
feature_level)  return;
     }
 
+    feature_data.InFormat = DXGI_FORMAT_R8G8B8A8_UNORM;
+
+    hr = ID3D11Device_CheckFeatureSupport(device, D3D11_FEATURE_FORMAT_SUPPORT, \
NULL, 0); +    ok(hr == E_INVALIDARG, "Got unexpected hr %#lx.\n", hr);
+    hr = ID3D11Device_CheckFeatureSupport(device, D3D11_FEATURE_FORMAT_SUPPORT, \
&feature_data, 0); +    ok(hr == E_INVALIDARG, "Got unexpected hr %#lx.\n", hr);
+    hr = ID3D11Device_CheckFeatureSupport(device, D3D11_FEATURE_FORMAT_SUPPORT, \
&feature_data, sizeof(feature_data) - 1); +    ok(hr == E_INVALIDARG, "Got unexpected \
hr %#lx.\n", hr); +    hr = ID3D11Device_CheckFeatureSupport(device, \
D3D11_FEATURE_FORMAT_SUPPORT, &feature_data, sizeof(feature_data) / 2); +    ok(hr == \
E_INVALIDARG, "Got unexpected hr %#lx.\n", hr); +    hr = \
ID3D11Device_CheckFeatureSupport(device, D3D11_FEATURE_FORMAT_SUPPORT, &feature_data, \
sizeof(feature_data) + 1); +    ok(hr == E_INVALIDARG, "Got unexpected hr %#lx.\n", \
hr); +    hr = ID3D11Device_CheckFeatureSupport(device, D3D11_FEATURE_FORMAT_SUPPORT, \
&feature_data, sizeof(feature_data) * 2); +    ok(hr == E_INVALIDARG, "Got unexpected \
hr %#lx.\n", hr); +
     support = 0xdeadbeef;
     hr = ID3D11Device_CheckFormatSupport(device, ~0u, &support);
     ok(hr == E_FAIL, "Got unexpected hr %#lx.\n", hr);
     ok(!support, "Got unexpected format support %#x.\n", support);
 
+    feature_data.InFormat = ~0u;
+    feature_data.OutFormatSupport = 0xdeadbeef;
+    hr = ID3D11Device_CheckFeatureSupport(device, D3D11_FEATURE_FORMAT_SUPPORT, \
&feature_data, sizeof(feature_data)); +    ok(hr == E_FAIL, "Got unexpected hr \
%#lx.\n", hr); +    ok(!feature_data.OutFormatSupport, "Got unexpected format support \
%#x.\n", feature_data.OutFormatSupport); +
     memset(format_support, 0, sizeof(format_support));
     for (format = DXGI_FORMAT_UNKNOWN; format <= DXGI_FORMAT_B4G4R4A4_UNORM; \
++format)  {
@@ -21073,6 +21095,14 @@ static void test_format_support(const D3D_FEATURE_LEVEL \
feature_level)  "Got unexpected format support %#x", format);
         }
 
+        feature_data.InFormat = format;
+        hr = ID3D11Device_CheckFeatureSupport(device, D3D11_FEATURE_FORMAT_SUPPORT,
+                &feature_data, sizeof(feature_data));
+        ok((hr == S_OK && feature_data.OutFormatSupport) || (hr == E_FAIL && \
!feature_data.OutFormatSupport), +                "Got unexpected hr %#lx, \
format_support %#x.\n", hr, feature_data.OutFormatSupport); +        \
ok(feature_data.OutFormatSupport == format_support[format], "Expected format support \
%#x, got %#x.\n", +                format_support[format], \
feature_data.OutFormatSupport); +
         winetest_pop_context();
     }
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic