=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: winevulkan: Convert VkPhysicalDeviceFeatures2 in VkDeviceCreateInfo chain.

Alexandre Julliard julliard at winehq.org
Wed Mar 20 17:09:12 CDT 2019


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

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Wed Mar 20 13:11:39 2019 +0100

winevulkan: Convert VkPhysicalDeviceFeatures2 in VkDeviceCreateInfo chain.

We should teach make_vulkan to handle pNext chains...

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

---

 dlls/winevulkan/vulkan.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c
index 635c6a9..f86064c 100644
--- a/dlls/winevulkan/vulkan.c
+++ b/dlls/winevulkan/vulkan.c
@@ -207,6 +207,20 @@ static struct VkQueue_T *wine_vk_device_alloc_queues(struct VkDevice_T *device,
     return queues;
 }
 
+static void *convert_VkPhysicalDeviceFeatures2(const void *src)
+{
+    const VkPhysicalDeviceFeatures2 *in = src;
+    VkPhysicalDeviceFeatures2 *out;
+
+    if (!(out = heap_alloc(sizeof(*out))))
+        return NULL;
+
+    *out = *in;
+    out->pNext = NULL;
+
+    return out;
+}
+
 static void *convert_VkDeviceGroupDeviceCreateInfo(const void *src)
 {
     const VkDeviceGroupDeviceCreateInfo *in = src;
@@ -248,12 +262,15 @@ static void *convert_VkPhysicalDeviceHostQueryResetFeaturesEXT(const void *src)
 static void wine_vk_device_free_create_info(VkDeviceCreateInfo *create_info)
 {
     VkPhysicalDeviceHostQueryResetFeaturesEXT *host_query_reset_features;
+    VkPhysicalDeviceFeatures2 *device_features;
     VkDeviceGroupDeviceCreateInfo *group_info;
 
+    device_features = wine_vk_find_struct(create_info, PHYSICAL_DEVICE_FEATURES_2);
     group_info = wine_vk_find_struct(create_info, DEVICE_GROUP_DEVICE_CREATE_INFO);
     host_query_reset_features = wine_vk_find_struct(create_info, PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT);
     create_info->pNext = NULL;
 
+    heap_free(device_features);
     if (group_info)
     {
         heap_free((void *)group_info->pPhysicalDevices);
@@ -296,6 +313,12 @@ static VkResult wine_vk_device_convert_create_info(const VkDeviceCreateInfo *src
                     dst_header = dst_header->pNext;
                     break;
 
+                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2:
+                    if (!(dst_header->pNext = convert_VkPhysicalDeviceFeatures2(header)))
+                        goto err;
+                    dst_header = dst_header->pNext;
+                    break;
+
                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT:
                     if (!(dst_header->pNext = convert_VkPhysicalDeviceHostQueryResetFeaturesEXT(header)))
                         goto err;




More information about the wine-cvs mailing list