=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: vkd3d: Export vkd3d_get_dxgi_format() function.

Alexandre Julliard julliard at winehq.org
Wed Aug 29 15:37:40 CDT 2018


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

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Tue Aug 28 12:19:55 2018 +0200

vkd3d: Export vkd3d_get_dxgi_format() function.

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>

---

 include/vkd3d.h      |  1 +
 libs/vkd3d/utils.c   | 18 +++++++++++++++
 libs/vkd3d/vkd3d.map |  1 +
 tests/vkd3d_api.c    | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 84 insertions(+)

diff --git a/include/vkd3d.h b/include/vkd3d.h
index fcff166..de80542 100644
--- a/include/vkd3d.h
+++ b/include/vkd3d.h
@@ -144,6 +144,7 @@ HRESULT vkd3d_serialize_root_signature(const D3D12_ROOT_SIGNATURE_DESC *desc,
 HRESULT vkd3d_create_root_signature_deserializer(const void *data, SIZE_T data_size,
         REFIID iid, void **deserializer);
 
+DXGI_FORMAT vkd3d_get_dxgi_format(VkFormat format);
 VkFormat vkd3d_get_vk_format(DXGI_FORMAT format);
 
 #endif  /* VKD3D_NO_PROTOTYPES */
diff --git a/libs/vkd3d/utils.c b/libs/vkd3d/utils.c
index 11c46dd..682822e 100644
--- a/libs/vkd3d/utils.c
+++ b/libs/vkd3d/utils.c
@@ -200,6 +200,24 @@ bool dxgi_format_is_typeless(DXGI_FORMAT dxgi_format)
     }
 }
 
+DXGI_FORMAT vkd3d_get_dxgi_format(VkFormat format)
+{
+    DXGI_FORMAT dxgi_format;
+    VkFormat vk_format;
+    unsigned int i;
+
+    for (i = 0; i < ARRAY_SIZE(vkd3d_formats); ++i)
+    {
+        vk_format = vkd3d_formats[i].vk_format;
+        dxgi_format = vkd3d_formats[i].dxgi_format;
+        if (vk_format == format && !dxgi_format_is_typeless(dxgi_format))
+            return dxgi_format;
+    }
+
+    FIXME("Unhandled Vulkan format %#x.\n", format);
+    return DXGI_FORMAT_UNKNOWN;
+}
+
 bool is_valid_feature_level(D3D_FEATURE_LEVEL feature_level)
 {
     static const D3D_FEATURE_LEVEL valid_feature_levels[] =
diff --git a/libs/vkd3d/vkd3d.map b/libs/vkd3d/vkd3d.map
index 7d0f838..f43c85c 100644
--- a/libs/vkd3d/vkd3d.map
+++ b/libs/vkd3d/vkd3d.map
@@ -7,6 +7,7 @@ global:
     vkd3d_create_instance;
     vkd3d_create_root_signature_deserializer;
     vkd3d_get_device_parent;
+    vkd3d_get_dxgi_format;
     vkd3d_get_vk_device;
     vkd3d_get_vk_format;
     vkd3d_get_vk_physical_device;
diff --git a/tests/vkd3d_api.c b/tests/vkd3d_api.c
index 2c022ba..e0912c5 100644
--- a/tests/vkd3d_api.c
+++ b/tests/vkd3d_api.c
@@ -899,6 +899,69 @@ static void test_vulkan_resource_present_state(void)
     destroy_test_context(&context);
 }
 
+static void test_formats(void)
+{
+    DXGI_FORMAT dxgi_format, format;
+    VkFormat vk_format;
+    unsigned int i;
+
+    static const DXGI_FORMAT formats[] =
+    {
+        DXGI_FORMAT_R32G32B32A32_FLOAT,
+        DXGI_FORMAT_R32G32B32A32_UINT,
+        DXGI_FORMAT_R32G32B32A32_SINT,
+        DXGI_FORMAT_R32G32B32_FLOAT,
+        DXGI_FORMAT_R32G32B32_UINT,
+        DXGI_FORMAT_R32G32B32_SINT,
+        DXGI_FORMAT_R16G16B16A16_FLOAT,
+        DXGI_FORMAT_R16G16B16A16_UNORM,
+        DXGI_FORMAT_R16G16B16A16_UINT,
+        DXGI_FORMAT_R16G16B16A16_SNORM,
+        DXGI_FORMAT_R16G16B16A16_SINT,
+        DXGI_FORMAT_R32G32_FLOAT,
+        DXGI_FORMAT_R32G32_UINT,
+        DXGI_FORMAT_R32G32_SINT,
+        DXGI_FORMAT_R10G10B10A2_UNORM,
+        DXGI_FORMAT_R11G11B10_FLOAT,
+        DXGI_FORMAT_R8G8B8A8_UNORM,
+        DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
+        DXGI_FORMAT_R8G8B8A8_UINT,
+        DXGI_FORMAT_R8G8B8A8_SNORM,
+        DXGI_FORMAT_R8G8B8A8_SINT,
+        DXGI_FORMAT_R16G16_FLOAT,
+        DXGI_FORMAT_R16G16_UNORM,
+        DXGI_FORMAT_R16G16_UINT,
+        DXGI_FORMAT_R16G16_SNORM,
+        DXGI_FORMAT_R16G16_SINT,
+        DXGI_FORMAT_D32_FLOAT,
+        DXGI_FORMAT_R32_FLOAT,
+        DXGI_FORMAT_R32_UINT,
+        DXGI_FORMAT_R32_SINT,
+        DXGI_FORMAT_R8G8_UNORM,
+        DXGI_FORMAT_R8G8_UINT,
+        DXGI_FORMAT_R8G8_SNORM,
+        DXGI_FORMAT_R8G8_SINT,
+        DXGI_FORMAT_R16_FLOAT,
+        DXGI_FORMAT_D16_UNORM,
+        DXGI_FORMAT_R16_UNORM,
+        DXGI_FORMAT_R16_UINT,
+        DXGI_FORMAT_R16_SNORM,
+        DXGI_FORMAT_R16_SINT,
+        DXGI_FORMAT_R8_UNORM,
+        DXGI_FORMAT_R8_UINT,
+        DXGI_FORMAT_R8_SNORM,
+        DXGI_FORMAT_R8_SINT,
+    };
+
+    for (i = 0; i < ARRAY_SIZE(formats); ++i)
+    {
+        format = formats[i];
+        vk_format = vkd3d_get_vk_format(format);
+        dxgi_format = vkd3d_get_dxgi_format(vk_format);
+        ok(dxgi_format == format, "Got format %#x, expected %#x.\n", dxgi_format, format);
+    }
+}
+
 static bool have_d3d12_device(void)
 {
     ID3D12Device *device;
@@ -927,4 +990,5 @@ START_TEST(vkd3d_api)
     run_test(test_vkd3d_queue);
     run_test(test_resource_internal_refcount);
     run_test(test_vulkan_resource_present_state);
+    run_test(test_formats);
 }




More information about the wine-cvs mailing list