[PATCH 04/11] winevulkan: Simplify vkEnumerateDeviceExtensionProperties().

Józef Kucia jkucia at codeweavers.com
Thu Mar 29 07:53:51 CDT 2018


Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
 dlls/winevulkan/vulkan.c         | 41 ++++++++++------------------------------
 dlls/winevulkan/vulkan_private.h |  4 ++--
 2 files changed, 12 insertions(+), 33 deletions(-)

diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c
index 72943830e3ea..8e04e8869f69 100644
--- a/dlls/winevulkan/vulkan.c
+++ b/dlls/winevulkan/vulkan.c
@@ -54,7 +54,7 @@ static void wine_vk_physical_device_free(struct VkPhysicalDevice_T *phys_dev)
     if (!phys_dev)
         return;
 
-    heap_free(phys_dev->properties);
+    heap_free(phys_dev->extensions);
     heap_free(phys_dev);
 }
 
@@ -115,10 +115,9 @@ static struct VkPhysicalDevice_T *wine_vk_physical_device_alloc(struct VkInstanc
 
     TRACE("Host supported extensions %u, Wine supported extensions %u\n", num_host_properties, num_properties);
 
-    object->properties = heap_calloc(num_properties, sizeof(*object->properties));
-    if (!object->properties)
+    if (!(object->extensions = heap_calloc(num_properties, sizeof(*object->extensions))))
     {
-        ERR("Failed to allocate memory for device properties!\n");
+        ERR("Failed to allocate memory for device extensions!\n");
         goto err;
     }
 
@@ -126,11 +125,11 @@ static struct VkPhysicalDevice_T *wine_vk_physical_device_alloc(struct VkInstanc
     {
         if (wine_vk_device_extension_supported(host_properties[i].extensionName))
         {
-            memcpy(&object->properties[j], &host_properties[i], sizeof(*object->properties));
+            object->extensions[j] = host_properties[i];
             j++;
         }
     }
-    object->num_properties = num_properties;
+    object->extension_count = num_properties;
 
     heap_free(host_properties);
     return object;
@@ -672,9 +671,6 @@ void WINAPI wine_vkDestroyInstance(VkInstance instance, const VkAllocationCallba
 VkResult WINAPI wine_vkEnumerateDeviceExtensionProperties(VkPhysicalDevice phys_dev,
         const char *layer_name, uint32_t *count, VkExtensionProperties *properties)
 {
-    VkResult res;
-    unsigned int i, num_copies;
-
     TRACE("%p, %p, %p, %p\n", phys_dev, layer_name, count, properties);
 
     /* This shouldn't get called with layer_name set, the ICD loader prevents it. */
@@ -686,32 +682,15 @@ VkResult WINAPI wine_vkEnumerateDeviceExtensionProperties(VkPhysicalDevice phys_
 
     if (!properties)
     {
-        *count = phys_dev->num_properties;
+        *count = phys_dev->extension_count;
         return VK_SUCCESS;
     }
 
-    if (*count < phys_dev->num_properties)
-    {
-        /* Incomplete is a type of success used to signal the application
-         * that not all devices got copied.
-         */
-        num_copies = *count;
-        res = VK_INCOMPLETE;
-    }
-    else
-    {
-        num_copies = phys_dev->num_properties;
-        res = VK_SUCCESS;
-    }
-
-    for (i = 0; i < num_copies; i++)
-    {
-        memcpy(&properties[i], &phys_dev->properties[i], sizeof(phys_dev->properties[i]));
-    }
-    *count = num_copies;
+    *count = min(*count, phys_dev->extension_count);
+    memcpy(properties, phys_dev->extensions, *count * sizeof(*properties));
 
-    TRACE("Result %d, extensions copied %u\n", res, num_copies);
-    return res;
+    TRACE("Returning %u extensions.\n", *count);
+    return *count < phys_dev->extension_count ? VK_INCOMPLETE : VK_SUCCESS;
 }
 
 VkResult WINAPI wine_vkEnumerateInstanceExtensionProperties(const char *layer_name,
diff --git a/dlls/winevulkan/vulkan_private.h b/dlls/winevulkan/vulkan_private.h
index 419e6ac4857a..7f2f242b95d9 100644
--- a/dlls/winevulkan/vulkan_private.h
+++ b/dlls/winevulkan/vulkan_private.h
@@ -86,8 +86,8 @@ struct VkPhysicalDevice_T
     struct wine_vk_base base;
     struct VkInstance_T *instance; /* parent */
 
-    uint32_t num_properties;
-    VkExtensionProperties *properties;
+    uint32_t extension_count;
+    VkExtensionProperties *extensions;
 
     VkPhysicalDevice phys_dev; /* native physical device */
 };
-- 
2.16.1




More information about the wine-devel mailing list