=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: vkd3d: Fix feature queries for depth/ stencil formats.

Alexandre Julliard julliard at winehq.org
Mon Mar 11 16:22:52 CDT 2019


Module: vkd3d
Branch: master
Commit: b0c8561cffe6bd8cb6bf1913235da4a05a1d3678
URL:    https://source.winehq.org/git/vkd3d.git/?a=commit;h=b0c8561cffe6bd8cb6bf1913235da4a05a1d3678

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Mon Mar 11 12:19:19 2019 +0100

vkd3d: Fix feature queries for depth/stencil formats.

Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 libs/vkd3d/device.c |  4 ++++
 tests/d3d12.c       | 36 ++++++++++++++++++++++++++++++++++++
 2 files changed, 40 insertions(+)

diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c
index 3d9d90c..204489c 100644
--- a/libs/vkd3d/device.c
+++ b/libs/vkd3d/device.c
@@ -1801,6 +1801,8 @@ static HRESULT d3d12_device_check_multisample_quality_levels(struct d3d12_device
         goto done;
 
     if (!(format = vkd3d_get_format(data->Format, false)))
+        format = vkd3d_get_format(data->Format, true);
+    if (!format)
     {
         FIXME("Unhandled format %#x.\n", data->Format);
         return E_INVALIDARG;
@@ -1934,6 +1936,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_device_CheckFeatureSupport(ID3D12Device *
             data->Support1 = D3D12_FORMAT_SUPPORT1_NONE;
             data->Support2 = D3D12_FORMAT_SUPPORT2_NONE;
             if (!(format = vkd3d_get_format(data->Format, false)))
+                format = vkd3d_get_format(data->Format, true);
+            if (!format)
             {
                 FIXME("Unhandled format %#x.\n", data->Format);
                 return E_INVALIDARG;
diff --git a/tests/d3d12.c b/tests/d3d12.c
index 173c576..e044a53 100644
--- a/tests/d3d12.c
+++ b/tests/d3d12.c
@@ -343,6 +343,22 @@ static unsigned int format_block_height(DXGI_FORMAT format)
     }
 }
 
+static const DXGI_FORMAT depth_stencil_formats[] =
+{
+    DXGI_FORMAT_R32G8X24_TYPELESS,
+    DXGI_FORMAT_D32_FLOAT_S8X24_UINT,
+    DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS,
+    DXGI_FORMAT_X32_TYPELESS_G8X24_UINT,
+    DXGI_FORMAT_R32_TYPELESS,
+    DXGI_FORMAT_D32_FLOAT,
+    DXGI_FORMAT_R24G8_TYPELESS,
+    DXGI_FORMAT_D24_UNORM_S8_UINT,
+    DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
+    DXGI_FORMAT_X24_TYPELESS_G8_UINT,
+    DXGI_FORMAT_R16_TYPELESS,
+    DXGI_FORMAT_D16_UNORM,
+};
+
 static void get_buffer_readback_with_command_list(ID3D12Resource *buffer, DXGI_FORMAT format,
         struct resource_readback *rb, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list)
 {
@@ -1172,6 +1188,15 @@ static void test_format_support(void)
                 format_support.Support2 & unsupported_format_features[i].f.Support2);
     }
 
+    for (i = 0; i < ARRAY_SIZE(depth_stencil_formats); ++i)
+    {
+        memset(&format_support, 0, sizeof(format_support));
+        format_support.Format = depth_stencil_formats[i];
+        hr = ID3D12Device_CheckFeatureSupport(device, D3D12_FEATURE_FORMAT_SUPPORT,
+                &format_support, sizeof(format_support));
+        ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+    }
+
     refcount = ID3D12Device_Release(device);
     ok(!refcount, "ID3D12Device has %u references left.\n", (unsigned int)refcount);
 }
@@ -1292,6 +1317,17 @@ static void test_multisample_quality_levels(void)
     ok(!format_support.Flags, "Got unexpected flags %#x.\n", format_support.Flags);
     ok(format_support.NumQualityLevels >= 1, "Got unexpected quality levels %u.\n", format_support.NumQualityLevels);
 
+    for (i = 0; i < ARRAY_SIZE(depth_stencil_formats); ++i)
+    {
+        memset(&format_support, 0, sizeof(format_support));
+        format_support.Format = depth_stencil_formats[i];
+        format_support.SampleCount = 4;
+        format_support.NumQualityLevels = 0xdeadbeef;
+        hr = ID3D12Device_CheckFeatureSupport(device, D3D12_FEATURE_MULTISAMPLE_QUALITY_LEVELS,
+                &format_support, sizeof(format_support));
+        ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+    }
+
     refcount = ID3D12Device_Release(device);
     ok(!refcount, "ID3D12Device has %u references left.\n", (unsigned int)refcount);
 }




More information about the wine-cvs mailing list