summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorg Lehmann <dadschoorse@gmail.com>2021-03-08 17:39:09 +0100
committerDylan Baker <dylan.c.baker@intel.com>2021-03-11 14:12:24 -0800
commit5db0651bfe01a68ed0861622e1dd4a25cc03dee9 (patch)
tree1b400b60dacf41935bc4f047bcdd149465f7d391
parent433bf80df791705894ff04fba9d81eea9203630b (diff)
vulkan/device_select: Only call vkGetPhysicalDeviceProperties2 if the device supports it.
vkGetPhysicalDeviceProperties2 is not allowed to be used with a 1.0 device because it's a vulkan 1.1 function. Closes: #4396 Fixes: 38ce8d4d ("vulkan/device_select: Stop using device properties 2.") Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9462> (cherry picked from commit fb1100d718fbee07dc294e1ede20a084cda423b9)
-rw-r--r--.pick_status.json2
-rw-r--r--src/vulkan/device-select-layer/device_select_layer.c17
2 files changed, 10 insertions, 9 deletions
diff --git a/.pick_status.json b/.pick_status.json
index e2fdf1318c3..064ff336d76 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -571,7 +571,7 @@
"description": "vulkan/device_select: Only call vkGetPhysicalDeviceProperties2 if the device supports it.",
"nominated": true,
"nomination_type": 1,
- "resolution": 0,
+ "resolution": 1,
"master_sha": null,
"because_sha": "38ce8d4d00c2b0e567b6dd36876cf171acb1dbc7"
},
diff --git a/src/vulkan/device-select-layer/device_select_layer.c b/src/vulkan/device-select-layer/device_select_layer.c
index 134a3bd22dd..2485d66ac94 100644
--- a/src/vulkan/device-select-layer/device_select_layer.c
+++ b/src/vulkan/device-select-layer/device_select_layer.c
@@ -193,6 +193,13 @@ static void device_select_DestroyInstance(VkInstance instance, const VkAllocatio
free(info);
}
+static void get_device_properties(const struct instance_info *info, VkPhysicalDevice device, VkPhysicalDeviceProperties2 *properties)
+{
+ info->GetPhysicalDeviceProperties(device, &properties->properties);
+
+ if (info->GetPhysicalDeviceProperties2 && properties->properties.apiVersion >= VK_API_VERSION_1_1)
+ info->GetPhysicalDeviceProperties2(device, properties);
+}
static void print_gpu(const struct instance_info *info, unsigned index, VkPhysicalDevice device)
{
@@ -205,10 +212,7 @@ static void print_gpu(const struct instance_info *info, unsigned index, VkPhysic
};
if (info->has_vulkan11 && info->has_pci_bus)
properties.pNext = &ext_pci_properties;
- if (info->GetPhysicalDeviceProperties2)
- info->GetPhysicalDeviceProperties2(device, &properties);
- else
- info->GetPhysicalDeviceProperties(device, &properties.properties);
+ get_device_properties(info, device, &properties);
switch(properties.properties.deviceType) {
case VK_PHYSICAL_DEVICE_TYPE_OTHER:
@@ -251,10 +255,7 @@ static bool fill_drm_device_info(const struct instance_info *info,
if (info->has_vulkan11 && info->has_pci_bus)
properties.pNext = &ext_pci_properties;
- if (info->GetPhysicalDeviceProperties2)
- info->GetPhysicalDeviceProperties2(device, &properties);
- else
- info->GetPhysicalDeviceProperties(device, &properties.properties);
+ get_device_properties(info, device, &properties);
drm_device->cpu_device = properties.properties.deviceType == VK_PHYSICAL_DEVICE_TYPE_CPU;
drm_device->dev_info.vendor_id = properties.properties.vendorID;