From 0c55770b3ee30be1b91b6efc211674694afcc5cd Mon Sep 17 00:00:00 2001 From: Connor Abbott Date: Thu, 17 Oct 2024 14:18:50 -0400 Subject: [PATCH] tu: Expose Vulkan 1.4 on a7xx Vulkan 1.4 can only be exposed on a7xx devices due to a number of bumps in the required limits, including bumping maxDescriptorSets to 7. a7xx bumped the number of bindless bases from 5 to 8, with one reserved for the driver. I've followed what we've already done and exposed a conformanceVersion of 1.4.0.0 for all a7xx devices, even though I've only submitted conformance for X1-85. I'm not sure if we want to change this, but at least for now a618 on Chromebooks and X1-85 on laptops are the only cases where turnip is being "shipped" to users in some official capacity, so it shouldn't be a huge deal. Part-of: --- src/freedreno/vulkan/meson.build | 4 ++-- src/freedreno/vulkan/tu_device.cc | 27 +++++++++++++++++++-------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/freedreno/vulkan/meson.build b/src/freedreno/vulkan/meson.build index 2c53a7af40d..e8c2d3cd976 100644 --- a/src/freedreno/vulkan/meson.build +++ b/src/freedreno/vulkan/meson.build @@ -208,7 +208,7 @@ freedreno_icd = custom_target( output : 'freedreno_icd.@0@.json'.format(host_machine.cpu()), command : [ prog_python, '@INPUT0@', - '--api-version', '1.1', '--xml', '@INPUT1@', + '--api-version', '1.4', '--xml', '@INPUT1@', '--lib-path', join_paths(get_option('prefix'), get_option('libdir'), 'libvulkan_freedreno.so'), '--out', '@OUTPUT@', @@ -226,7 +226,7 @@ _dev_icd = custom_target( output : _dev_icdname, command : [ prog_python, '@INPUT0@', - '--api-version', '1.1', '--xml', '@INPUT1@', + '--api-version', '1.4', '--xml', '@INPUT1@', '--lib-path', meson.current_build_dir() / 'libvulkan_freedreno.so', '--out', '@OUTPUT@', ], diff --git a/src/freedreno/vulkan/tu_device.cc b/src/freedreno/vulkan/tu_device.cc index 93031db894b..8ec04e6da0a 100644 --- a/src/freedreno/vulkan/tu_device.cc +++ b/src/freedreno/vulkan/tu_device.cc @@ -76,7 +76,7 @@ tu_device_get_cache_uuid(struct tu_physical_device *device, void *uuid) return 0; } -#define TU_API_VERSION VK_MAKE_VERSION(1, 3, VK_HEADER_VERSION) +#define TU_API_VERSION VK_MAKE_VERSION(1, 4, VK_HEADER_VERSION) VKAPI_ATTR VkResult VKAPI_CALL tu_EnumerateInstanceVersion(uint32_t *pApiVersion) @@ -770,12 +770,21 @@ tu_get_physical_device_properties_1_2(struct tu_physical_device *pdevice, memset(p->driverInfo, 0, sizeof(p->driverInfo)); snprintf(p->driverInfo, VK_MAX_DRIVER_INFO_SIZE, "Mesa " PACKAGE_VERSION MESA_GIT_SHA1); - p->conformanceVersion = (VkConformanceVersion) { - .major = 1, - .minor = 2, - .subminor = 7, - .patch = 1, - }; + if (pdevice->info->chip >= 7) { + p->conformanceVersion = (VkConformanceVersion) { + .major = 1, + .minor = 4, + .subminor = 0, + .patch = 0, + }; + } else { + p->conformanceVersion = (VkConformanceVersion) { + .major = 1, + .minor = 2, + .subminor = 7, + .patch = 1, + }; + } p->denormBehaviorIndependence = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL; @@ -1034,7 +1043,9 @@ tu_get_properties(struct tu_physical_device *pdevice, props->apiVersion = (pdevice->info->a6xx.has_hw_multiview || TU_DEBUG(NOCONFORM)) ? - TU_API_VERSION : VK_MAKE_VERSION(1, 0, VK_HEADER_VERSION); + ((pdevice->info->chip >= 7) ? TU_API_VERSION : + VK_MAKE_VERSION(1, 3, VK_HEADER_VERSION)) + : VK_MAKE_VERSION(1, 0, VK_HEADER_VERSION); props->driverVersion = vk_get_driver_version(); props->vendorID = 0x5143; props->deviceID = pdevice->dev_id.chip_id;