From 44dd78c7b00de37334a9a9819ecf037575b44b09037110ad499df67241464059 Mon Sep 17 00:00:00 2001 From: Stefan Dirsch Date: Sat, 16 Mar 2024 18:45:26 +0000 Subject: [PATCH 1/6] - get rid of u_zink-dont-print-error-messages-when-failing-an-implicit.patch completely OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/Mesa?expand=0&rev=1270 --- Mesa.changes | 6 + Mesa.spec | 2 - ...or-messages-when-failing-an-implicit.patch | 330 ------------------ 3 files changed, 6 insertions(+), 332 deletions(-) delete mode 100644 u_zink-dont-print-error-messages-when-failing-an-implicit.patch diff --git a/Mesa.changes b/Mesa.changes index e68cd22..d00cb88 100644 --- a/Mesa.changes +++ b/Mesa.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Sat Mar 16 18:44:50 UTC 2024 - Stefan Dirsch + +- get rid of u_zink-dont-print-error-messages-when-failing-an-implicit.patch + completely + ------------------------------------------------------------------- Thu Mar 14 04:48:32 UTC 2024 - Stefan Dirsch diff --git a/Mesa.spec b/Mesa.spec index 7399d2a..18eb3d9 100644 --- a/Mesa.spec +++ b/Mesa.spec @@ -149,7 +149,6 @@ Patch58: u_dep_xcb.patch Patch100: U_fix-mpeg1_2-decode-mesa-20.2.patch Patch200: u_fix-build-on-ppc64le.patch Patch400: n_stop-iris-flicker.patch -Patch500: u_zink-dont-print-error-messages-when-failing-an-implicit.patch %ifarch %{ix86} x86_64 BuildRequires: DirectX-Headers %endif @@ -773,7 +772,6 @@ rm -rf docs/README.{VMS,WIN32,OS2} %patch -P 100 -p1 #%patch -P 200 -p1 %patch -P 400 -p1 -#%patch -P 500 -p1 # Remove requires to vulkan libs from baselibs.conf on platforms # where vulkan build is disabled; ugly ... diff --git a/u_zink-dont-print-error-messages-when-failing-an-implicit.patch b/u_zink-dont-print-error-messages-when-failing-an-implicit.patch deleted file mode 100644 index cf26623..0000000 --- a/u_zink-dont-print-error-messages-when-failing-an-implicit.patch +++ /dev/null @@ -1,330 +0,0 @@ -From 481a319ad2df61fed7e2728d70eb9b945894303e Mon Sep 17 00:00:00 2001 -From: Mike Blumenkrantz -Date: Tue, 12 Mar 2024 10:22:24 -0400 -Subject: [PATCH 9/9] zink: don't print error messages when failing an implicit - driver load - ---- - src/gallium/drivers/zink/zink_device_info.py | 6 +- - src/gallium/drivers/zink/zink_instance.py | 15 ++-- - src/gallium/drivers/zink/zink_screen.c | 76 +++++++++++++------- - src/gallium/drivers/zink/zink_types.h | 1 + - 4 files changed, 66 insertions(+), 32 deletions(-) - -diff --git a/src/gallium/drivers/zink/zink_device_info.py b/src/gallium/drivers/zink/zink_device_info.py -index 17222001180d5..b0bc38218922c 100644 ---- a/src/gallium/drivers/zink/zink_device_info.py -+++ b/src/gallium/drivers/zink/zink_device_info.py -@@ -470,14 +470,16 @@ zink_get_physical_device_info(struct zink_screen *screen) - // enumerate device supported extensions - VkResult result = screen->vk.EnumerateDeviceExtensionProperties(screen->pdev, NULL, &num_extensions, NULL); - if (result != VK_SUCCESS) { -- mesa_loge("ZINK: vkEnumerateDeviceExtensionProperties failed (%s)", vk_Result_to_str(result)); -+ if (!screen->implicitly_loaded) -+ mesa_loge("ZINK: vkEnumerateDeviceExtensionProperties failed (%s)", vk_Result_to_str(result)); - } else { - if (num_extensions > 0) { - VkExtensionProperties *extensions = MALLOC(sizeof(VkExtensionProperties) * num_extensions); - if (!extensions) goto fail; - result = screen->vk.EnumerateDeviceExtensionProperties(screen->pdev, NULL, &num_extensions, extensions); - if (result != VK_SUCCESS) { -- mesa_loge("ZINK: vkEnumerateDeviceExtensionProperties failed (%s)", vk_Result_to_str(result)); -+ if (!screen->implicitly_loaded) -+ mesa_loge("ZINK: vkEnumerateDeviceExtensionProperties failed (%s)", vk_Result_to_str(result)); - } - - for (uint32_t i = 0; i < num_extensions; ++i) { -diff --git a/src/gallium/drivers/zink/zink_instance.py b/src/gallium/drivers/zink/zink_instance.py -index 0fbd14e5a5826..fec0844593b78 100644 ---- a/src/gallium/drivers/zink/zink_instance.py -+++ b/src/gallium/drivers/zink/zink_instance.py -@@ -156,12 +156,14 @@ zink_create_instance(struct zink_screen *screen, bool display_dev) - // Build up the extensions from the reported ones but only for the unnamed layer - uint32_t extension_count = 0; - if (vk_EnumerateInstanceExtensionProperties(NULL, &extension_count, NULL) != VK_SUCCESS) { -- mesa_loge("ZINK: vkEnumerateInstanceExtensionProperties failed"); -+ if (!screen->implicitly_loaded) -+ mesa_loge("ZINK: vkEnumerateInstanceExtensionProperties failed"); - } else { - VkExtensionProperties *extension_props = malloc(extension_count * sizeof(VkExtensionProperties)); - if (extension_props) { - if (vk_EnumerateInstanceExtensionProperties(NULL, &extension_count, extension_props) != VK_SUCCESS) { -- mesa_loge("ZINK: vkEnumerateInstanceExtensionProperties failed"); -+ if (!screen->implicitly_loaded) -+ mesa_loge("ZINK: vkEnumerateInstanceExtensionProperties failed"); - } else { - for (uint32_t i = 0; i < extension_count; i++) { - %for ext in extensions: -@@ -179,12 +181,14 @@ zink_create_instance(struct zink_screen *screen, bool display_dev) - uint32_t layer_count = 0; - - if (vk_EnumerateInstanceLayerProperties(&layer_count, NULL) != VK_SUCCESS) { -- mesa_loge("ZINK: vkEnumerateInstanceLayerProperties failed"); -+ if (!screen->implicitly_loaded) -+ mesa_loge("ZINK: vkEnumerateInstanceLayerProperties failed"); - } else { - VkLayerProperties *layer_props = malloc(layer_count * sizeof(VkLayerProperties)); - if (layer_props) { - if (vk_EnumerateInstanceLayerProperties(&layer_count, layer_props) != VK_SUCCESS) { -- mesa_loge("ZINK: vkEnumerateInstanceLayerProperties failed"); -+ if (!screen->implicitly_loaded) -+ mesa_loge("ZINK: vkEnumerateInstanceLayerProperties failed"); - } else { - for (uint32_t i = 0; i < layer_count; i++) { - %for layer in layers: -@@ -256,7 +260,8 @@ zink_create_instance(struct zink_screen *screen, bool display_dev) - - VkResult err = vk_CreateInstance(&ici, NULL, &screen->instance); - if (err != VK_SUCCESS) { -- mesa_loge("ZINK: vkCreateInstance failed (%s)", vk_Result_to_str(err)); -+ if (!screen->implicitly_loaded) -+ mesa_loge("ZINK: vkCreateInstance failed (%s)", vk_Result_to_str(err)); - return false; - } - -diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c -index 9d4952eb4ef1b..39194c7a89bf2 100644 ---- a/src/gallium/drivers/zink/zink_screen.c -+++ b/src/gallium/drivers/zink/zink_screen.c -@@ -1695,7 +1695,8 @@ choose_pdev(struct zink_screen *screen, int64_t dev_major, int64_t dev_minor) - VkPhysicalDevice *pdevs; - VkResult result = VKSCR(EnumeratePhysicalDevices)(screen->instance, &pdev_count, NULL); - if (result != VK_SUCCESS) { -- mesa_loge("ZINK: vkEnumeratePhysicalDevices failed (%s)", vk_Result_to_str(result)); -+ if (!screen->implicitly_loaded) -+ mesa_loge("ZINK: vkEnumeratePhysicalDevices failed (%s)", vk_Result_to_str(result)); - return; - } - -@@ -1703,7 +1704,8 @@ choose_pdev(struct zink_screen *screen, int64_t dev_major, int64_t dev_minor) - - pdevs = malloc(sizeof(*pdevs) * pdev_count); - if (!pdevs) { -- mesa_loge("ZINK: failed to allocate pdevs!"); -+ if (!screen->implicitly_loaded) -+ mesa_loge("ZINK: failed to allocate pdevs!"); - return; - } - result = VKSCR(EnumeratePhysicalDevices)(screen->instance, &pdev_count, pdevs); -@@ -1730,7 +1732,8 @@ choose_pdev(struct zink_screen *screen, int64_t dev_major, int64_t dev_minor) - unsigned pdev_count = 1; - VkResult result = VKSCR(EnumeratePhysicalDevices)(screen->instance, &pdev_count, &pdev); - if (result != VK_SUCCESS && result != VK_INCOMPLETE) { -- mesa_loge("ZINK: vkEnumeratePhysicalDevices failed (%s)", vk_Result_to_str(result)); -+ if (!screen->implicitly_loaded) -+ mesa_loge("ZINK: vkEnumeratePhysicalDevices failed (%s)", vk_Result_to_str(result)); - return; - } - screen->pdev = pdev; -@@ -3238,10 +3241,12 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev - - struct zink_screen *screen = rzalloc(NULL, struct zink_screen); - if (!screen) { -- mesa_loge("ZINK: failed to allocate screen"); -+ if (!config->implicit_driver_load) -+ mesa_loge("ZINK: failed to allocate screen"); - return NULL; - } - -+ screen->implicitly_loaded = config->implicit_driver_load; - screen->drm_fd = -1; - - glsl_type_singleton_init_or_ref(); -@@ -3261,7 +3266,8 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev - - screen->loader_lib = util_dl_open(VK_LIBNAME); - if (!screen->loader_lib) { -- mesa_loge("ZINK: failed to load "VK_LIBNAME); -+ if (!screen->implicitly_loaded) -+ mesa_loge("ZINK: failed to load "VK_LIBNAME); - goto fail; - } - -@@ -3269,7 +3275,8 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev - screen->vk_GetDeviceProcAddr = (PFN_vkGetDeviceProcAddr)util_dl_get_proc_address(screen->loader_lib, "vkGetDeviceProcAddr"); - if (!screen->vk_GetInstanceProcAddr || - !screen->vk_GetDeviceProcAddr) { -- mesa_loge("ZINK: failed to get proc address"); -+ if (!screen->implicitly_loaded) -+ mesa_loge("ZINK: failed to get proc address"); - goto fail; - } - -@@ -3289,7 +3296,8 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev - if (zink_debug & ZINK_DEBUG_VALIDATION) { - if (!screen->instance_info.have_layer_KHRONOS_validation && - !screen->instance_info.have_layer_LUNARG_standard_validation) { -- mesa_loge("Failed to load validation layer"); -+ if (!screen->implicitly_loaded) -+ mesa_loge("Failed to load validation layer"); - goto fail; - } - } -@@ -3304,12 +3312,15 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev - zink_verify_instance_extensions(screen); - - if (screen->instance_info.have_EXT_debug_utils && -- (zink_debug & ZINK_DEBUG_VALIDATION) && !create_debug(screen)) -- debug_printf("ZINK: failed to setup debug utils\n"); -+ (zink_debug & ZINK_DEBUG_VALIDATION) && !create_debug(screen)) { -+ if (!screen->implicitly_loaded) -+ debug_printf("ZINK: failed to setup debug utils\n"); -+ } - - choose_pdev(screen, dev_major, dev_minor); - if (screen->pdev == VK_NULL_HANDLE) { -- mesa_loge("ZINK: failed to choose pdev"); -+ if (!screen->implicitly_loaded) -+ mesa_loge("ZINK: failed to choose pdev"); - goto fail; - } - screen->is_cpu = screen->info.props.deviceType == VK_PHYSICAL_DEVICE_TYPE_CPU; -@@ -3324,7 +3335,8 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev - VK_FORMAT_D32_SFLOAT_S8_UINT); - - if (!zink_get_physical_device_info(screen)) { -- debug_printf("ZINK: failed to detect features\n"); -+ if (!screen->implicitly_loaded) -+ debug_printf("ZINK: failed to detect features\n"); - goto fail; - } - -@@ -3367,18 +3379,21 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev - - setup_renderdoc(screen); - if (screen->threaded_submit && !util_queue_init(&screen->flush_queue, "zfq", 8, 1, UTIL_QUEUE_INIT_RESIZE_IF_FULL, screen)) { -- mesa_loge("zink: Failed to create flush queue.\n"); -+ if (!screen->implicitly_loaded) -+ mesa_loge("zink: Failed to create flush queue.\n"); - goto fail; - } - - zink_internal_setup_moltenvk(screen); - if (!screen->info.have_KHR_timeline_semaphore && !screen->info.feats12.timelineSemaphore) { -- mesa_loge("zink: KHR_timeline_semaphore is required"); -+ if (!screen->implicitly_loaded) -+ mesa_loge("zink: KHR_timeline_semaphore is required"); - goto fail; - } - if (zink_debug & ZINK_DEBUG_DGC) { - if (!screen->info.have_NV_device_generated_commands) { -- mesa_loge("zink: can't use DGC without NV_device_generated_commands"); -+ if (!screen->implicitly_loaded) -+ mesa_loge("zink: can't use DGC without NV_device_generated_commands"); - goto fail; - } - } -@@ -3497,14 +3512,16 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev - if (!zink_screen_resource_init(&screen->base)) - goto fail; - if (!zink_bo_init(screen)) { -- mesa_loge("ZINK: failed to initialize suballocator"); -+ if (!screen->implicitly_loaded) -+ mesa_loge("ZINK: failed to initialize suballocator"); - goto fail; - } - zink_screen_fence_init(&screen->base); - - zink_screen_init_compiler(screen); - if (!disk_cache_init(screen)) { -- mesa_loge("ZINK: failed to initialize disk cache"); -+ if (!screen->implicitly_loaded) -+ mesa_loge("ZINK: failed to initialize disk cache"); - goto fail; - } - if (!util_queue_init(&screen->cache_get_thread, "zcfq", 8, 4, -@@ -3520,12 +3537,14 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev - screen->total_video_mem = get_video_mem(screen); - screen->clamp_video_mem = screen->total_video_mem * 0.8; - if (!os_get_total_physical_memory(&screen->total_mem)) { -- mesa_loge("ZINK: failed to get total physical memory"); -+ if (!screen->implicitly_loaded) -+ mesa_loge("ZINK: failed to get total physical memory"); - goto fail; - } - - if (!zink_screen_init_semaphore(screen)) { -- mesa_loge("zink: failed to create timeline semaphore"); -+ if (!screen->implicitly_loaded) -+ mesa_loge("zink: failed to create timeline semaphore"); - goto fail; - } - -@@ -3533,35 +3552,40 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev - { - if (!screen->info.have_EXT_descriptor_buffer) { - if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_DB) { -- mesa_loge("Cannot use db descriptor mode without EXT_descriptor_buffer"); -+ if (!screen->implicitly_loaded) -+ mesa_loge("Cannot use db descriptor mode without EXT_descriptor_buffer"); - goto fail; - } - can_db = false; - } - if (!screen->resizable_bar) { - if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_DB) { -- mesa_loge("Cannot use db descriptor mode without resizable bar"); -+ if (!screen->implicitly_loaded) -+ mesa_loge("Cannot use db descriptor mode without resizable bar"); - goto fail; - } - can_db = false; - } - if (!screen->info.have_EXT_non_seamless_cube_map) { - if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_DB) { -- mesa_loge("Cannot use db descriptor mode without EXT_non_seamless_cube_map"); -+ if (!screen->implicitly_loaded) -+ mesa_loge("Cannot use db descriptor mode without EXT_non_seamless_cube_map"); - goto fail; - } - can_db = false; - } - if (!screen->info.rb2_feats.nullDescriptor) { - if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_DB) { -- mesa_loge("Cannot use db descriptor mode without robustness2.nullDescriptor"); -+ if (!screen->implicitly_loaded) -+ mesa_loge("Cannot use db descriptor mode without robustness2.nullDescriptor"); - goto fail; - } - can_db = false; - } - if (ZINK_FBFETCH_DESCRIPTOR_SIZE < screen->info.db_props.inputAttachmentDescriptorSize) { - if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_DB) { -- mesa_loge("Cannot use db descriptor mode with inputAttachmentDescriptorSize(%u) > %u", (unsigned)screen->info.db_props.inputAttachmentDescriptorSize, ZINK_FBFETCH_DESCRIPTOR_SIZE); -+ if (!screen->implicitly_loaded) -+ mesa_loge("Cannot use db descriptor mode with inputAttachmentDescriptorSize(%u) > %u", (unsigned)screen->info.db_props.inputAttachmentDescriptorSize, ZINK_FBFETCH_DESCRIPTOR_SIZE); - goto fail; - } - mesa_logw("zink: bug detected: inputAttachmentDescriptorSize(%u) > %u", (unsigned)screen->info.db_props.inputAttachmentDescriptorSize, ZINK_FBFETCH_DESCRIPTOR_SIZE); -@@ -3620,12 +3644,14 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev - zink_init_screen_pipeline_libs(screen); - - if (!init_layouts(screen)) { -- mesa_loge("ZINK: failed to initialize layouts"); -+ if (!screen->implicitly_loaded) -+ mesa_loge("ZINK: failed to initialize layouts"); - goto fail; - } - - if (!zink_descriptor_layouts_init(screen)) { -- mesa_loge("ZINK: failed to initialize descriptor layouts"); -+ if (!screen->implicitly_loaded) -+ mesa_loge("ZINK: failed to initialize descriptor layouts"); - goto fail; - } - -diff --git a/src/gallium/drivers/zink/zink_types.h b/src/gallium/drivers/zink/zink_types.h -index 739838d0dce14..512c5c571ba84 100644 ---- a/src/gallium/drivers/zink/zink_types.h -+++ b/src/gallium/drivers/zink/zink_types.h -@@ -1413,6 +1413,7 @@ struct zink_screen { - bool is_cpu; - bool abort_on_hang; - bool frame_marker_emitted; -+ bool implicitly_loaded; - uint64_t curr_batch; //the current batch id - uint32_t last_finished; - VkSemaphore sem; --- -GitLab - From 328105545c31b54b218ab6b418c1cac1b7c3f6abfed05ca6a9fce81c37448b9a Mon Sep 17 00:00:00 2001 From: Stefan Dirsch Date: Tue, 19 Mar 2024 01:27:41 +0000 Subject: [PATCH 2/6] - Update to new feature release 24.0.3 * Some interesting highlights include: + New PowerVR Vulkan driver for Imagination's GPU + NVIDIA Vulkan driver NVK has seen many improvements + AMD Vulkan driver RADV ray-tracing performance improvements + Microsoft OpenGL driver D3D12 has reached OpenGL 4.6 support * New extensions & features (in no particular order): + VK_EXT_image_compression_control on RADV + VK_EXT_device_fault on RADV + OpenGL 3.3 on Asahi + Geometry shaders on Asahi + GL_ARB_texture_cube_map_array on Asahi + GL_ARB_clip_control on Asahi + GL_ARB_timer_query on Asahi + GL_EXT_disjoint_timer_query on Asahi + GL_ARB_base_instance on Asahi + OpenGL 4.6 (up from 4.2) on d3d12 + VK_EXT_depth_clamp_zero_one on RADV + GL_ARB_shader_texture_image_samples on Asahi + GL_ARB_indirect_parameters on Asahi + GL_ARB_viewport_array on Asahi + GL_ARB_fragment_layer_viewport on Asahi + GL_ARB_cull_distance on Asahi + GL_ARB_transform_feedback_overflow_query on Asahi + VK_KHR_calibrated_timestamps on RADV + VK_KHR_vertex_attribute_divisor on RADV + VK_KHR_maintenance6 on RADV + VK_KHR_ray_tracing_position_fetch on RADV + EGL_EXT_query_reset_notification_strategy - supersedes U_fix-ac-llvm-LLVM-18-remove-useless-passes.patch - adjusted n_add-Mesa-headers-again.patch, u_dep_xcb.patch - disabled python36-buildfix1.patch - removed disabled patch u_fix-build-on-ppc64le.patch OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/Mesa?expand=0&rev=1271 --- Mesa.changes | 37 +++++++++++ Mesa.spec | 10 +-- ...c-llvm-LLVM-18-remove-useless-passes.patch | 58 ------------------ mesa-23.3.6.tar.xz | 3 - mesa-23.3.6.tar.xz.sig | Bin 310 -> 0 bytes mesa-24.0.3.tar.xz | 3 + mesa-24.0.3.tar.xz.sig | Bin 0 -> 310 bytes n_add-Mesa-headers-again.patch | 21 ++++--- u_dep_xcb.patch | 20 ++---- u_fix-build-on-ppc64le.patch | 42 ------------- 10 files changed, 60 insertions(+), 134 deletions(-) delete mode 100644 U_fix-ac-llvm-LLVM-18-remove-useless-passes.patch delete mode 100644 mesa-23.3.6.tar.xz delete mode 100644 mesa-23.3.6.tar.xz.sig create mode 100644 mesa-24.0.3.tar.xz create mode 100644 mesa-24.0.3.tar.xz.sig delete mode 100644 u_fix-build-on-ppc64le.patch diff --git a/Mesa.changes b/Mesa.changes index d00cb88..a90fe2d 100644 --- a/Mesa.changes +++ b/Mesa.changes @@ -1,3 +1,40 @@ +------------------------------------------------------------------- +Mon Mar 18 23:55:51 UTC 2024 - Stefan Dirsch + +- Update to new feature release 24.0.3 + * Some interesting highlights include: + + New PowerVR Vulkan driver for Imagination's GPU + + NVIDIA Vulkan driver NVK has seen many improvements + + AMD Vulkan driver RADV ray-tracing performance improvements + + Microsoft OpenGL driver D3D12 has reached OpenGL 4.6 support + * New extensions & features (in no particular order): + + VK_EXT_image_compression_control on RADV + + VK_EXT_device_fault on RADV + + OpenGL 3.3 on Asahi + + Geometry shaders on Asahi + + GL_ARB_texture_cube_map_array on Asahi + + GL_ARB_clip_control on Asahi + + GL_ARB_timer_query on Asahi + + GL_EXT_disjoint_timer_query on Asahi + + GL_ARB_base_instance on Asahi + + OpenGL 4.6 (up from 4.2) on d3d12 + + VK_EXT_depth_clamp_zero_one on RADV + + GL_ARB_shader_texture_image_samples on Asahi + + GL_ARB_indirect_parameters on Asahi + + GL_ARB_viewport_array on Asahi + + GL_ARB_fragment_layer_viewport on Asahi + + GL_ARB_cull_distance on Asahi + + GL_ARB_transform_feedback_overflow_query on Asahi + + VK_KHR_calibrated_timestamps on RADV + + VK_KHR_vertex_attribute_divisor on RADV + + VK_KHR_maintenance6 on RADV + + VK_KHR_ray_tracing_position_fetch on RADV + + EGL_EXT_query_reset_notification_strategy +- supersedes U_fix-ac-llvm-LLVM-18-remove-useless-passes.patch +- adjusted n_add-Mesa-headers-again.patch, u_dep_xcb.patch +- disabled python36-buildfix1.patch +- removed disabled patch u_fix-build-on-ppc64le.patch + ------------------------------------------------------------------- Sat Mar 16 18:44:50 UTC 2024 - Stefan Dirsch diff --git a/Mesa.spec b/Mesa.spec index 18eb3d9..a838553 100644 --- a/Mesa.spec +++ b/Mesa.spec @@ -42,7 +42,7 @@ %define glamor 1 %define _name_archive mesa -%define _version 23.3.6 +%define _version 24.0.3 %define with_opencl 0 %define with_rusticl 0 %define with_vulkan 0 @@ -123,7 +123,7 @@ %endif Name: Mesa%{psuffix} -Version: 23.3.6 +Version: 24.0.3 Release: 0 Summary: System for rendering 3-D graphics License: MIT @@ -142,12 +142,10 @@ Patch11: u_0001-intel-genxml-Drop-from-__future__-import-annotations.patc Patch12: u_0002-intel-genxml-Add-a-untyped-OrderedDict-fallback-for-.patch Patch13: python36-buildfix1.patch Patch14: python36-buildfix2.patch -Patch15: U_fix-ac-llvm-LLVM-18-remove-useless-passes.patch # never to be upstreamed Patch54: n_drirc-disable-rgb10-for-chromium-on-amd.patch Patch58: u_dep_xcb.patch Patch100: U_fix-mpeg1_2-decode-mesa-20.2.patch -Patch200: u_fix-build-on-ppc64le.patch Patch400: n_stop-iris-flicker.patch %ifarch %{ix86} x86_64 BuildRequires: DirectX-Headers @@ -759,18 +757,16 @@ rm -rf docs/README.{VMS,WIN32,OS2} # fixes build against python 3.6 %patch -P 11 -p1 %patch -P 12 -p1 -%patch -P 13 -p1 +#%patch -P 13 -p1 %if 0%{?suse_version} < 1550 %patch -P 14 -p1 %endif -%patch -P 15 -p1 # no longer needed since gstreamer-plugins-vaapi 1.18.4 %if 0%{?suse_version} < 1550 %patch -P 54 -p1 %endif %patch -P 58 -p1 %patch -P 100 -p1 -#%patch -P 200 -p1 %patch -P 400 -p1 # Remove requires to vulkan libs from baselibs.conf on platforms diff --git a/U_fix-ac-llvm-LLVM-18-remove-useless-passes.patch b/U_fix-ac-llvm-LLVM-18-remove-useless-passes.patch deleted file mode 100644 index d098739..0000000 --- a/U_fix-ac-llvm-LLVM-18-remove-useless-passes.patch +++ /dev/null @@ -1,58 +0,0 @@ -From bc7e363f8e1a26342e6fd7241c1f0ebb722338d6 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Kai=20Wasserb=C3=A4ch?= -Date: Wed, 22 Nov 2023 20:21:11 +0100 -Subject: [PATCH] fix: ac/llvm: LLVM 18: remove useless passes, partially - removed upstream -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Upstream removed llvm::createLoopSinkPass() in commit - -and there is no useful alternative except moving to the new pass -manager. - -On top of that, the usage of this optimisation pass and -PromoteMemoryToRegisterPass were just useless, according to the -upstream developer of the commit named above. Therefore the easiest -solution is, as him, Marek and Dave suggested, to just remove these two -passes from the pipeline for now. - -Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/10192 -Reference: https://github.com/llvm/llvm-project/pull/72811 -Reference: https://github.com/llvm/llvm-project/commit/b9975cec0ea0a2f10d65b7bd1197d9e1706cbd3d -Suggested-by: Dave Airlie -Suggested-by: Aiden Grossman -Suggested-by: Marek Olšák -Signed-off-by: Kai Wasserbäch -Reviewed-by: Marek Olšák -Part-of: ---- - src/amd/llvm/ac_llvm_helper.cpp | 5 ----- - 1 file changed, 5 deletions(-) - -diff --git a/src/amd/llvm/ac_llvm_helper.cpp b/src/amd/llvm/ac_llvm_helper.cpp -index 40a4399e705..5d065279ad1 100644 ---- a/src/amd/llvm/ac_llvm_helper.cpp -+++ b/src/amd/llvm/ac_llvm_helper.cpp -@@ -299,17 +299,12 @@ LLVMPassManagerRef ac_create_passmgr(LLVMTargetLibraryInfoRef target_library_inf - */ - unwrap(passmgr)->add(createBarrierNoopPass()); - -- /* This pass eliminates all loads and stores on alloca'd pointers. */ -- unwrap(passmgr)->add(createPromoteMemoryToRegisterPass()); - #if LLVM_VERSION_MAJOR >= 16 - unwrap(passmgr)->add(createSROAPass(true)); - #else - unwrap(passmgr)->add(createSROAPass()); - #endif - /* TODO: restore IPSCCP */ -- if (LLVM_VERSION_MAJOR >= 16) -- unwrap(passmgr)->add(createLoopSinkPass()); -- /* TODO: restore IPSCCP */ - unwrap(passmgr)->add(createLICMPass()); - unwrap(passmgr)->add(createCFGSimplificationPass()); - /* This is recommended by the instruction combining pass. */ --- -2.44.0 - diff --git a/mesa-23.3.6.tar.xz b/mesa-23.3.6.tar.xz deleted file mode 100644 index f01e742..0000000 --- a/mesa-23.3.6.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cd3d6c60121dea73abbae99d399dc2facaecde1a8c6bd647e6d85410ff4b577b -size 19455492 diff --git a/mesa-23.3.6.tar.xz.sig b/mesa-23.3.6.tar.xz.sig deleted file mode 100644 index 72a8375886a67833f4d441794823fb3c5926f75ad064f5bc75f0e7c287e033fd..0000000000000000000000000000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 310 zcmV-60m=S}0W$;u0SEvc79j*zRUP45mXBjW!btXwjxn#pBq*i@0%guub^r37}?T;l{lgr4( z4ee|=5<8+r(b1CyvC2MTMg{#jwAjI#G68|4EX@-t)@W5*ZipnkPu0mJ+q-eA%H%ag zcfQ5!qB3Y~26GVBK?CXWp$?a7d!D3*gls8~cTT|};i7sibQTtcC-ELH^KZT0)Va$) z038b*)GC@Ua=&Ikt5a~#2nbtM`|-42Cr9k#kJ%06bN8{D2vqBeeaK%HrTqs$TopaQ I4vm*jCNwUNi~s-t diff --git a/mesa-24.0.3.tar.xz b/mesa-24.0.3.tar.xz new file mode 100644 index 0000000..fe7ec73 --- /dev/null +++ b/mesa-24.0.3.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77aec9a2a37b7d3596ea1640b3cc53d0b5d9b3b52abed89de07e3717e91bfdbe +size 20021264 diff --git a/mesa-24.0.3.tar.xz.sig b/mesa-24.0.3.tar.xz.sig new file mode 100644 index 0000000000000000000000000000000000000000000000000000000000000000..f1192e5ef18eb14deae5705f1e4937c8f373e27403db9503837330d4b5fcb0c5 GIT binary patch literal 310 zcmV-60m=S}0W$;u0SEvc79j*zRUP45mXBjW!btXwjxn#pBq*i@0%h_*X8;Nb5RHy8 zufrrLrslH<0E+W>JbQzhelR9=LH;Q(OE5&K?mvnpo78Cp7NmH)9W3zGyWHt+daKBm zJ&A|Cd$nw>T{Eb0rpkV3w!S(uLP+9?90U)ntUbXxZkurf1FZLH#IegLAF54#kZgt8 zsUwCTyg;FOkCP8JIVWn%dsMS{+AC6H@&OUZ1G{3$;Bp^m@}DRyv$szZBW_|t1^K; zO7jPG`ICJ6%8R$|_}rF IC>Wo;qD5?yng9R* literal 0 HcmV?d00001 diff --git a/n_add-Mesa-headers-again.patch b/n_add-Mesa-headers-again.patch index 00b3c53..bde0bbb 100644 --- a/n_add-Mesa-headers-again.patch +++ b/n_add-Mesa-headers-again.patch @@ -1,15 +1,20 @@ -Index: mesa-23.3.0/include/meson.build +Index: mesa-24.0.3/include/meson.build =================================================================== ---- mesa-23.3.0.orig/include/meson.build -+++ mesa-23.3.0/include/meson.build -@@ -28,10 +28,8 @@ if with_android_stub +--- mesa-24.0.3.orig/include/meson.build ++++ mesa-24.0.3/include/meson.build +@@ -28,7 +28,6 @@ if with_android_stub inc_include += [include_directories('android_stub')] endif --if not with_glvnd +-if not with_glvnd and host_machine.system() != 'windows' if with_gles1 or with_gles2 or with_opengl or with_egl install_headers('KHR/khrplatform.h', subdir : 'KHR') -- endif + endif +@@ -84,7 +83,6 @@ if not with_glvnd and host_machine.syste + subdir : 'EGL', + ) + endif +-endif - if with_gles1 - install_headers( + # Non-upstream headers + if with_egl diff --git a/u_dep_xcb.patch b/u_dep_xcb.patch index 759527d..5eee22e 100644 --- a/u_dep_xcb.patch +++ b/u_dep_xcb.patch @@ -1,8 +1,8 @@ -Index: mesa-23.3.0/meson.build +Index: mesa-24.0.3/meson.build =================================================================== ---- mesa-23.3.0.orig/meson.build -+++ mesa-23.3.0/meson.build -@@ -2022,9 +2022,11 @@ if with_platform_x11 +--- mesa-24.0.3.orig/meson.build ++++ mesa-24.0.3/meson.build +@@ -2069,9 +2069,11 @@ if with_platform_x11 endif endif if with_any_vk or with_egl or (with_glx == 'dri' and with_dri_platform == 'drm') @@ -14,15 +14,3 @@ Index: mesa-23.3.0/meson.build dep_xcb_dri3 = dependency('xcb-dri3') dep_xcb_present = dependency('xcb-present') # until xcb-dri3 has been around long enough to make a hard-dependency: -Index: mesa-23.3.0/src/loader/meson.build -=================================================================== ---- mesa-23.3.0.orig/src/loader/meson.build -+++ mesa-23.3.0/src/loader/meson.build -@@ -47,6 +47,6 @@ libloader = static_library( - c_args : loader_c_args, - gnu_symbol_visibility : 'hidden', - include_directories : [inc_include, inc_src, inc_util], -- dependencies : [dep_libdrm, dep_thread, dep_xcb_xrandr], -+ dependencies : [dep_libdrm, dep_thread, dep_xcb_xrandr, dep_xcb], - build_by_default : false, - ) diff --git a/u_fix-build-on-ppc64le.patch b/u_fix-build-on-ppc64le.patch deleted file mode 100644 index fce71c8..0000000 --- a/u_fix-build-on-ppc64le.patch +++ /dev/null @@ -1,42 +0,0 @@ -Index: mesa-23.0.0/include/CL/cl_platform.h -=================================================================== ---- mesa-23.0.0.orig/include/CL/cl_platform.h -+++ mesa-23.0.0/include/CL/cl_platform.h -@@ -385,7 +385,9 @@ typedef unsigned int cl_GLenum; - /* Define basic vector types */ - #if defined( __VEC__ ) - #if !defined(__clang__) -+ #ifndef __cplusplus - #include /* may be omitted depending on compiler. AltiVec spec provides no way to detect whether the header is required. */ -+ #endif - #endif - typedef __vector unsigned char __cl_uchar16; - typedef __vector signed char __cl_char16; -Index: mesa-23.0.0/src/gallium/drivers/llvmpipe/lp_rast_tri.c -=================================================================== ---- mesa-23.0.0.orig/src/gallium/drivers/llvmpipe/lp_rast_tri.c -+++ mesa-23.0.0/src/gallium/drivers/llvmpipe/lp_rast_tri.c -@@ -488,7 +488,9 @@ lp_rast_triangle_32_3_4(struct lp_raster - - #if defined(_ARCH_PWR8) && UTIL_ARCH_LITTLE_ENDIAN - -+#ifndef __cplusplus - #include -+#endif - #include "util/u_pwr8.h" - - static inline void -Index: mesa-23.0.0/src/gallium/drivers/llvmpipe/lp_setup_tri.c -=================================================================== ---- mesa-23.0.0.orig/src/gallium/drivers/llvmpipe/lp_setup_tri.c -+++ mesa-23.0.0/src/gallium/drivers/llvmpipe/lp_setup_tri.c -@@ -46,7 +46,9 @@ - #if DETECT_ARCH_SSE - #include - #elif defined(_ARCH_PWR8) && UTIL_ARCH_LITTLE_ENDIAN -+#ifndef __cplusplus - #include -+#endif - #include "util/u_pwr8.h" - #endif - From e7bb9aff2b5ec64f95d33d34463ef72713bc956afd2ba3613d2a241a9927a486 Mon Sep 17 00:00:00 2001 From: Stefan Dirsch Date: Tue, 19 Mar 2024 02:11:18 +0000 Subject: [PATCH 3/6] - adjusted and re-enabled python36-buildfix1.patch OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/Mesa?expand=0&rev=1272 --- Mesa.changes | 5 +++++ Mesa.spec | 2 +- python36-buildfix1.patch | 4 ++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Mesa.changes b/Mesa.changes index a90fe2d..809c2c6 100644 --- a/Mesa.changes +++ b/Mesa.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Tue Mar 19 02:10:26 UTC 2024 - Stefan Dirsch + +- adjusted and re-enabled python36-buildfix1.patch + ------------------------------------------------------------------- Mon Mar 18 23:55:51 UTC 2024 - Stefan Dirsch diff --git a/Mesa.spec b/Mesa.spec index a838553..b8d98d6 100644 --- a/Mesa.spec +++ b/Mesa.spec @@ -757,7 +757,7 @@ rm -rf docs/README.{VMS,WIN32,OS2} # fixes build against python 3.6 %patch -P 11 -p1 %patch -P 12 -p1 -#%patch -P 13 -p1 +%patch -P 13 -p1 %if 0%{?suse_version} < 1550 %patch -P 14 -p1 %endif diff --git a/python36-buildfix1.patch b/python36-buildfix1.patch index 557711a..782d9b4 100644 --- a/python36-buildfix1.patch +++ b/python36-buildfix1.patch @@ -1,5 +1,5 @@ ---- mesa-23.3.3/src/nouveau/nvidia-headers/class_parser.py.orig 2024-01-20 12:47:36.464476669 +0100 -+++ mesa-23.3.3/src/nouveau/nvidia-headers/class_parser.py 2024-01-20 13:04:30.212851443 +0100 +--- mesa-23.3.3/src/nouveau/headers/class_parser.py.orig 2024-01-20 12:47:36.464476669 +0100 ++++ mesa-23.3.3/src/nouveau/headers/class_parser.py 2024-01-20 13:04:30.212851443 +0100 @@ -9,6 +9,16 @@ from mako.template import Template From f72bdc5d3ec2e01bc285d91b3227635989f5ed96c650e39377ab848ff2559422 Mon Sep 17 00:00:00 2001 From: Stefan Dirsch Date: Tue, 19 Mar 2024 08:04:25 +0000 Subject: [PATCH 4/6] - 0001-loader-delete-unused-param-from-pipe_loader_sw_probe.patch, 0002-glx-fix-some-indentation.patch, 0003-glx-add-an-implicit-param-to-createScreen.patch, 0004-glx-pass-implicit-load-param-through-allocation.patch, 0005-dri-plumb-a-implicit-param-through-createNewScreen-i.patch, 0006-gbm-plumb-an-implicit-param-through-device-creation.patch, 0007-frontends-dri-plumb-an-implicit-param-through-screen.patch, 0008-pipe-loader-plumb-a-flag-for-implicit-driver-load-th.patch, 0009-zink-don-t-print-error-messages-when-failing-an-impl.patch * get rid of error message: 'MESA: error: ZINK: vkEnumeratePhysicalDevices failed (VK_ERROR_INITIALIZATION_FAILED)' [gitlab mesa issue #10802] OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/Mesa?expand=0&rev=1273 --- ...used-param-from-pipe_loader_sw_probe.patch | 61 ++ 0002-glx-fix-some-indentation.patch | 34 ++ ...dd-an-implicit-param-to-createScreen.patch | 107 ++++ ...plicit-load-param-through-allocation.patch | 76 +++ ...icit-param-through-createNewScreen-i.patch | 575 ++++++++++++++++++ ...plicit-param-through-device-creation.patch | 82 +++ ...umb-an-implicit-param-through-screen.patch | 88 +++ ...b-a-flag-for-implicit-driver-load-th.patch | 281 +++++++++ ...-error-messages-when-failing-an-impl.patch | 327 ++++++++++ Mesa.changes | 17 + Mesa.spec | 18 + 11 files changed, 1666 insertions(+) create mode 100644 0001-loader-delete-unused-param-from-pipe_loader_sw_probe.patch create mode 100644 0002-glx-fix-some-indentation.patch create mode 100644 0003-glx-add-an-implicit-param-to-createScreen.patch create mode 100644 0004-glx-pass-implicit-load-param-through-allocation.patch create mode 100644 0005-dri-plumb-a-implicit-param-through-createNewScreen-i.patch create mode 100644 0006-gbm-plumb-an-implicit-param-through-device-creation.patch create mode 100644 0007-frontends-dri-plumb-an-implicit-param-through-screen.patch create mode 100644 0008-pipe-loader-plumb-a-flag-for-implicit-driver-load-th.patch create mode 100644 0009-zink-don-t-print-error-messages-when-failing-an-impl.patch diff --git a/0001-loader-delete-unused-param-from-pipe_loader_sw_probe.patch b/0001-loader-delete-unused-param-from-pipe_loader_sw_probe.patch new file mode 100644 index 0000000..337d204 --- /dev/null +++ b/0001-loader-delete-unused-param-from-pipe_loader_sw_probe.patch @@ -0,0 +1,61 @@ +From 1b1ebd90a5b0edd70e2c548b64aeded9cac3e570 Mon Sep 17 00:00:00 2001 +From: Mike Blumenkrantz +Date: Tue, 12 Mar 2024 09:15:11 -0400 +Subject: [PATCH 1/9] loader: delete unused param from + pipe_loader_sw_probe_dri() + +--- + src/gallium/auxiliary/pipe-loader/pipe_loader.h | 3 +-- + src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c | 4 ++-- + src/gallium/frontends/dri/kopper.c | 2 +- + 3 files changed, 4 insertions(+), 5 deletions(-) + +Index: mesa-24.0.3/src/gallium/auxiliary/pipe-loader/pipe_loader.h +=================================================================== +--- mesa-24.0.3.orig/src/gallium/auxiliary/pipe-loader/pipe_loader.h ++++ mesa-24.0.3/src/gallium/auxiliary/pipe-loader/pipe_loader.h +@@ -155,8 +155,7 @@ pipe_loader_sw_probe_dri(struct pipe_loa + * \sa pipe_loader_probe + */ + bool +-pipe_loader_vk_probe_dri(struct pipe_loader_device **devs, +- const struct drisw_loader_funcs *drisw_lf); ++pipe_loader_vk_probe_dri(struct pipe_loader_device **devs); + + #ifdef HAVE_DRISW_KMS + /** +Index: mesa-24.0.3/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c +=================================================================== +--- mesa-24.0.3.orig/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c ++++ mesa-24.0.3/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c +@@ -233,7 +233,7 @@ fail: + } + #ifdef HAVE_ZINK + bool +-pipe_loader_vk_probe_dri(struct pipe_loader_device **devs, const struct drisw_loader_funcs *drisw_lf) ++pipe_loader_vk_probe_dri(struct pipe_loader_device **devs) + { + struct pipe_loader_sw_device *sdev = CALLOC_STRUCT(pipe_loader_sw_device); + int i; +@@ -246,7 +246,7 @@ pipe_loader_vk_probe_dri(struct pipe_loa + + for (i = 0; sdev->dd->winsys[i].name; i++) { + if (strcmp(sdev->dd->winsys[i].name, "dri") == 0) { +- sdev->ws = sdev->dd->winsys[i].create_winsys_dri(drisw_lf); ++ sdev->ws = sdev->dd->winsys[i].create_winsys_dri(NULL); + break; + } + } +Index: mesa-24.0.3/src/gallium/frontends/dri/kopper.c +=================================================================== +--- mesa-24.0.3.orig/src/gallium/frontends/dri/kopper.c ++++ mesa-24.0.3/src/gallium/frontends/dri/kopper.c +@@ -128,7 +128,7 @@ kopper_init_screen(struct dri_screen *sc + if (screen->fd != -1) + success = pipe_loader_drm_probe_fd(&screen->dev, screen->fd, false); + else +- success = pipe_loader_vk_probe_dri(&screen->dev, NULL); ++ success = pipe_loader_vk_probe_dri(&screen->dev); + + if (success) + pscreen = pipe_loader_create_screen(screen->dev); diff --git a/0002-glx-fix-some-indentation.patch b/0002-glx-fix-some-indentation.patch new file mode 100644 index 0000000..cace36e --- /dev/null +++ b/0002-glx-fix-some-indentation.patch @@ -0,0 +1,34 @@ +From 647f6a7e123726d306440d54a22880e67ab31aa8 Mon Sep 17 00:00:00 2001 +From: Mike Blumenkrantz +Date: Tue, 12 Mar 2024 09:20:25 -0400 +Subject: [PATCH 2/9] glx: fix some indentation + +ifdefs are hard +--- + src/glx/glxext.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +Index: mesa-24.0.3/src/glx/glxext.c +=================================================================== +--- mesa-24.0.3.orig/src/glx/glxext.c ++++ mesa-24.0.3/src/glx/glxext.c +@@ -786,16 +786,16 @@ AllocAndFetchScreenConfigs(Display * dpy + psc = priv->dri3Display->createScreen(i, priv); + #endif /* HAVE_DRI3 */ + if (psc == NULL && priv->dri2Display) +- psc = priv->dri2Display->createScreen(i, priv); ++ psc = priv->dri2Display->createScreen(i, priv); + #endif /* GLX_USE_DRM */ + + #ifdef GLX_USE_WINDOWSGL + if (psc == NULL && priv->windowsdriDisplay) +- psc = priv->windowsdriDisplay->createScreen(i, priv); ++ psc = priv->windowsdriDisplay->createScreen(i, priv); + #endif + + if (psc == NULL && priv->driswDisplay) +- psc = priv->driswDisplay->createScreen(i, priv); ++ psc = priv->driswDisplay->createScreen(i, priv); + #endif /* GLX_DIRECT_RENDERING && !GLX_USE_APPLEGL */ + + bool indirect = false; diff --git a/0003-glx-add-an-implicit-param-to-createScreen.patch b/0003-glx-add-an-implicit-param-to-createScreen.patch new file mode 100644 index 0000000..9a14ba3 --- /dev/null +++ b/0003-glx-add-an-implicit-param-to-createScreen.patch @@ -0,0 +1,107 @@ +From 2dedd2e26dce587e1efe8250f8f2da60db906071 Mon Sep 17 00:00:00 2001 +From: Mike Blumenkrantz +Date: Tue, 12 Mar 2024 09:36:57 -0400 +Subject: [PATCH 3/9] glx: add an 'implicit' param to createScreen + +--- + src/glx/dri2_glx.c | 2 +- + src/glx/dri3_glx.c | 2 +- + src/glx/drisw_glx.c | 2 +- + src/glx/driwindows_glx.c | 2 +- + src/glx/glxclient.h | 2 +- + src/glx/glxext.c | 8 ++++---- + 6 files changed, 9 insertions(+), 9 deletions(-) + +Index: mesa-24.0.3/src/glx/dri2_glx.c +=================================================================== +--- mesa-24.0.3.orig/src/glx/dri2_glx.c ++++ mesa-24.0.3/src/glx/dri2_glx.c +@@ -1001,7 +1001,7 @@ static const struct glx_screen_vtable dr + }; + + static struct glx_screen * +-dri2CreateScreen(int screen, struct glx_display * priv) ++dri2CreateScreen(int screen, struct glx_display * priv, bool implicit) + { + const __DRIconfig **driver_configs; + const __DRIextension **extensions; +Index: mesa-24.0.3/src/glx/dri3_glx.c +=================================================================== +--- mesa-24.0.3.orig/src/glx/dri3_glx.c ++++ mesa-24.0.3/src/glx/dri3_glx.c +@@ -789,7 +789,7 @@ static const struct glx_screen_vtable dr + */ + + static struct glx_screen * +-dri3_create_screen(int screen, struct glx_display * priv) ++dri3_create_screen(int screen, struct glx_display * priv, bool implicit) + { + xcb_connection_t *c = XGetXCBConnection(priv->dpy); + const __DRIconfig **driver_configs; +Index: mesa-24.0.3/src/glx/drisw_glx.c +=================================================================== +--- mesa-24.0.3.orig/src/glx/drisw_glx.c ++++ mesa-24.0.3/src/glx/drisw_glx.c +@@ -1055,7 +1055,7 @@ driswCreateScreenDriver(int screen, stru + } + + static struct glx_screen * +-driswCreateScreen(int screen, struct glx_display *priv) ++driswCreateScreen(int screen, struct glx_display *priv, bool implicit) + { + const struct drisw_display *pdpyp = (struct drisw_display *)priv->driswDisplay; + if (pdpyp->zink && !debug_get_bool_option("LIBGL_KOPPER_DISABLE", false)) { +Index: mesa-24.0.3/src/glx/driwindows_glx.c +=================================================================== +--- mesa-24.0.3.orig/src/glx/driwindows_glx.c ++++ mesa-24.0.3/src/glx/driwindows_glx.c +@@ -461,7 +461,7 @@ driwindowsMapConfigs(struct glx_display + } + + static struct glx_screen * +-driwindowsCreateScreen(int screen, struct glx_display *priv) ++driwindowsCreateScreen(int screen, struct glx_display *priv, bool implicit) + { + __GLXDRIscreen *psp; + struct driwindows_screen *psc; +Index: mesa-24.0.3/src/glx/glxclient.h +=================================================================== +--- mesa-24.0.3.orig/src/glx/glxclient.h ++++ mesa-24.0.3/src/glx/glxclient.h +@@ -85,7 +85,7 @@ struct __GLXDRIdisplayRec + */ + void (*destroyDisplay) (__GLXDRIdisplay * display); + +- struct glx_screen *(*createScreen)(int screen, struct glx_display * priv); ++ struct glx_screen *(*createScreen)(int screen, struct glx_display * priv, bool implicit); + }; + + struct __GLXDRIscreenRec { +Index: mesa-24.0.3/src/glx/glxext.c +=================================================================== +--- mesa-24.0.3.orig/src/glx/glxext.c ++++ mesa-24.0.3/src/glx/glxext.c +@@ -783,19 +783,19 @@ AllocAndFetchScreenConfigs(Display * dpy + #if defined(GLX_USE_DRM) + #if defined(HAVE_DRI3) + if (priv->dri3Display) +- psc = priv->dri3Display->createScreen(i, priv); ++ psc = priv->dri3Display->createScreen(i, priv, false); + #endif /* HAVE_DRI3 */ + if (psc == NULL && priv->dri2Display) +- psc = priv->dri2Display->createScreen(i, priv); ++ psc = priv->dri2Display->createScreen(i, priv, false); + #endif /* GLX_USE_DRM */ + + #ifdef GLX_USE_WINDOWSGL + if (psc == NULL && priv->windowsdriDisplay) +- psc = priv->windowsdriDisplay->createScreen(i, priv); ++ psc = priv->windowsdriDisplay->createScreen(i, priv, false); + #endif + + if (psc == NULL && priv->driswDisplay) +- psc = priv->driswDisplay->createScreen(i, priv); ++ psc = priv->driswDisplay->createScreen(i, priv, false); + #endif /* GLX_DIRECT_RENDERING && !GLX_USE_APPLEGL */ + + bool indirect = false; diff --git a/0004-glx-pass-implicit-load-param-through-allocation.patch b/0004-glx-pass-implicit-load-param-through-allocation.patch new file mode 100644 index 0000000..9b52a93 --- /dev/null +++ b/0004-glx-pass-implicit-load-param-through-allocation.patch @@ -0,0 +1,76 @@ +From e7c5f94a79ff0e545dfdc95703a541a0d43d739f Mon Sep 17 00:00:00 2001 +From: Mike Blumenkrantz +Date: Tue, 12 Mar 2024 09:42:06 -0400 +Subject: [PATCH 4/9] glx: pass implicit load param through allocation + +--- + src/glx/glxext.c | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +Index: mesa-24.0.3/src/glx/glxext.c +=================================================================== +--- mesa-24.0.3.orig/src/glx/glxext.c ++++ mesa-24.0.3/src/glx/glxext.c +@@ -763,7 +763,7 @@ glx_screen_cleanup(struct glx_screen *ps + ** If that works then fetch the per screen configs data. + */ + static Bool +-AllocAndFetchScreenConfigs(Display * dpy, struct glx_display * priv, Bool zink) ++AllocAndFetchScreenConfigs(Display * dpy, struct glx_display * priv, Bool zink, Bool implicit) + { + struct glx_screen *psc; + GLint i, screens; +@@ -783,19 +783,19 @@ AllocAndFetchScreenConfigs(Display * dpy + #if defined(GLX_USE_DRM) + #if defined(HAVE_DRI3) + if (priv->dri3Display) +- psc = priv->dri3Display->createScreen(i, priv, false); ++ psc = priv->dri3Display->createScreen(i, priv, implicit); + #endif /* HAVE_DRI3 */ + if (psc == NULL && priv->dri2Display) +- psc = priv->dri2Display->createScreen(i, priv, false); ++ psc = priv->dri2Display->createScreen(i, priv, implicit); + #endif /* GLX_USE_DRM */ + + #ifdef GLX_USE_WINDOWSGL + if (psc == NULL && priv->windowsdriDisplay) +- psc = priv->windowsdriDisplay->createScreen(i, priv, false); ++ psc = priv->windowsdriDisplay->createScreen(i, priv, implicit); + #endif + + if (psc == NULL && priv->driswDisplay) +- psc = priv->driswDisplay->createScreen(i, priv, false); ++ psc = priv->driswDisplay->createScreen(i, priv, psc == GLX_LOADER_USE_ZINK ? false : implicit); + #endif /* GLX_DIRECT_RENDERING && !GLX_USE_APPLEGL */ + + bool indirect = false; +@@ -929,14 +929,14 @@ __glXInitialize(Display * dpy) + } + #endif + +- if (!AllocAndFetchScreenConfigs(dpy, dpyPriv, zink | try_zink)) { ++ if (!AllocAndFetchScreenConfigs(dpy, dpyPriv, zink | try_zink, zink || try_zink ? try_zink : !env)) { + Bool fail = True; + #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL) + if (try_zink) { + free(dpyPriv->screens); + dpyPriv->driswDisplay->destroyDisplay(dpyPriv->driswDisplay); + dpyPriv->driswDisplay = driswCreateDisplay(dpy, false); +- fail = !AllocAndFetchScreenConfigs(dpy, dpyPriv, False); ++ fail = !AllocAndFetchScreenConfigs(dpy, dpyPriv, False, true); + } + #endif + if (fail) { +Index: mesa-24.0.3/src/glx/glxclient.h +=================================================================== +--- mesa-24.0.3.orig/src/glx/glxclient.h ++++ mesa-24.0.3/src/glx/glxclient.h +@@ -78,6 +78,8 @@ typedef struct __GLXDRIdisplayRec __GLXD + typedef struct __GLXDRIscreenRec __GLXDRIscreen; + typedef struct __GLXDRIdrawableRec __GLXDRIdrawable; + ++#define GLX_LOADER_USE_ZINK ((struct glx_screen *)(uintptr_t)-1) ++ + struct __GLXDRIdisplayRec + { + /** diff --git a/0005-dri-plumb-a-implicit-param-through-createNewScreen-i.patch b/0005-dri-plumb-a-implicit-param-through-createNewScreen-i.patch new file mode 100644 index 0000000..f84652a --- /dev/null +++ b/0005-dri-plumb-a-implicit-param-through-createNewScreen-i.patch @@ -0,0 +1,575 @@ +From 6b3f6a6e0b1e2cba749f8c38b087a59eee3f4efa Mon Sep 17 00:00:00 2001 +From: Mike Blumenkrantz +Date: Tue, 12 Mar 2024 10:00:54 -0400 +Subject: [PATCH 5/9] dri: plumb a 'implicit' param through createNewScreen + interfaces + +--- + include/GL/internal/dri_interface.h | 33 ++++++++++++++++-- + include/GL/internal/mesa_interface.h | 5 ++- + src/egl/drivers/dri2/egl_dri2.c | 20 +++++------ + src/gallium/frontends/dri/dri2.c | 6 ++-- + src/gallium/frontends/dri/dri_util.c | 52 ++++++++++++++++++++-------- + src/gallium/frontends/dri/dri_util.h | 5 +++ + src/gallium/frontends/dri/drisw.c | 3 +- + src/gallium/frontends/dri/kopper.c | 3 +- + src/gbm/backends/dri/gbm_dri.c | 16 ++++----- + src/glx/dri2_glx.c | 8 ++--- + src/glx/dri3_glx.c | 12 +++---- + src/glx/drisw_glx.c | 14 ++++---- + 12 files changed, 120 insertions(+), 57 deletions(-) + +Index: mesa-24.0.3/include/GL/internal/dri_interface.h +=================================================================== +--- mesa-24.0.3.orig/include/GL/internal/dri_interface.h ++++ mesa-24.0.3/include/GL/internal/dri_interface.h +@@ -913,7 +913,7 @@ struct __DRIframebufferRec { + * extension. Version 1 is required by the X server, and version 3 is used. + */ + #define __DRI_SWRAST "DRI_SWRast" +-#define __DRI_SWRAST_VERSION 4 ++#define __DRI_SWRAST_VERSION 5 + + struct __DRIswrastExtensionRec { + __DRIextension base; +@@ -961,6 +961,18 @@ struct __DRIswrastExtensionRec { + const __DRIconfig ***driver_configs, + void *loaderPrivate); + ++ /** ++ * createNewScreen() with the driver extensions passed in and implicit load flag. ++ * ++ * \since version 6 ++ */ ++ __DRIscreen *(*createNewScreen3)(int screen, ++ const __DRIextension **loader_extensions, ++ const __DRIextension **driver_extensions, ++ const __DRIconfig ***driver_configs, ++ bool implicit, ++ void *loaderPrivate); ++ + }; + + /** Common DRI function definitions, shared among DRI2 and Image extensions +@@ -972,6 +984,13 @@ typedef __DRIscreen * + const __DRIextension **driver_extensions, + const __DRIconfig ***driver_configs, + void *loaderPrivate); ++typedef __DRIscreen * ++(*__DRIcreateNewScreen3Func)(int screen, int fd, ++ const __DRIextension **extensions, ++ const __DRIextension **driver_extensions, ++ const __DRIconfig ***driver_configs, ++ bool implicit, ++ void *loaderPrivate); + + typedef __DRIdrawable * + (*__DRIcreateNewDrawableFunc)(__DRIscreen *screen, +@@ -1107,7 +1126,7 @@ struct __DRIdri2LoaderExtensionRec { + * constructors for DRI2. The X server uses up to version 4. + */ + #define __DRI_DRI2 "DRI_DRI2" +-#define __DRI_DRI2_VERSION 4 ++#define __DRI_DRI2_VERSION 5 + + #define __DRI_API_OPENGL 0 /**< OpenGL compatibility profile */ + #define __DRI_API_GLES 1 /**< OpenGL ES 1.x */ +@@ -1226,6 +1245,13 @@ struct __DRIdri2ExtensionRec { + * \since version 4 + */ + __DRIcreateNewScreen2Func createNewScreen2; ++ ++ /** ++ * createNewScreen with the driver's extension list passed in and implicit load flag. ++ * ++ * \since version 5 ++ */ ++ __DRIcreateNewScreen3Func createNewScreen3; + }; + + +@@ -2083,7 +2109,7 @@ struct __DRIimageLoaderExtensionRec { + */ + + #define __DRI_IMAGE_DRIVER "DRI_IMAGE_DRIVER" +-#define __DRI_IMAGE_DRIVER_VERSION 1 ++#define __DRI_IMAGE_DRIVER_VERSION 2 + + struct __DRIimageDriverExtensionRec { + __DRIextension base; +@@ -2093,6 +2119,7 @@ struct __DRIimageDriverExtensionRec { + __DRIcreateNewDrawableFunc createNewDrawable; + __DRIcreateContextAttribsFunc createContextAttribs; + __DRIgetAPIMaskFunc getAPIMask; ++ __DRIcreateNewScreen3Func createNewScreen3; + }; + + /** +Index: mesa-24.0.3/include/GL/internal/mesa_interface.h +=================================================================== +--- mesa-24.0.3.orig/include/GL/internal/mesa_interface.h ++++ mesa-24.0.3/include/GL/internal/mesa_interface.h +@@ -33,7 +33,7 @@ + typedef struct __DRImesaCoreExtensionRec __DRImesaCoreExtension; + + #define __DRI_MESA "DRI_Mesa" +-#define __DRI_MESA_VERSION 1 ++#define __DRI_MESA_VERSION 2 + + struct dri_screen; + +@@ -63,6 +63,9 @@ struct __DRImesaCoreExtensionRec { + const __DRIconfig **(*initScreen)(struct dri_screen *screen); + + int (*queryCompatibleRenderOnlyDeviceFd)(int kms_only_fd); ++ ++ /* version 2 */ ++ __DRIcreateNewScreen3Func createNewScreen3; + }; + + #endif /* MESA_INTERFACE_H */ +Index: mesa-24.0.3/src/egl/drivers/dri2/egl_dri2.c +=================================================================== +--- mesa-24.0.3.orig/src/egl/drivers/dri2/egl_dri2.c ++++ mesa-24.0.3/src/egl/drivers/dri2/egl_dri2.c +@@ -701,8 +701,8 @@ const __DRIimageLookupExtension image_lo + + static const struct dri_extension_match dri3_driver_extensions[] = { + {__DRI_CORE, 1, offsetof(struct dri2_egl_display, core), false}, +- {__DRI_MESA, 1, offsetof(struct dri2_egl_display, mesa), false}, +- {__DRI_IMAGE_DRIVER, 1, offsetof(struct dri2_egl_display, image_driver), ++ {__DRI_MESA, 2, offsetof(struct dri2_egl_display, mesa), false}, ++ {__DRI_IMAGE_DRIVER, 2, offsetof(struct dri2_egl_display, image_driver), + false}, + {__DRI_CONFIG_OPTIONS, 2, offsetof(struct dri2_egl_display, configOptions), + true}, +@@ -710,8 +710,8 @@ static const struct dri_extension_match + + static const struct dri_extension_match dri2_driver_extensions[] = { + {__DRI_CORE, 1, offsetof(struct dri2_egl_display, core), false}, +- {__DRI_MESA, 1, offsetof(struct dri2_egl_display, mesa), false}, +- {__DRI_DRI2, 4, offsetof(struct dri2_egl_display, dri2), false}, ++ {__DRI_MESA, 2, offsetof(struct dri2_egl_display, mesa), false}, ++ {__DRI_DRI2, 5, offsetof(struct dri2_egl_display, dri2), false}, + {__DRI_CONFIG_OPTIONS, 2, offsetof(struct dri2_egl_display, configOptions), + true}, + }; +@@ -724,8 +724,8 @@ static const struct dri_extension_match + + static const struct dri_extension_match swrast_driver_extensions[] = { + {__DRI_CORE, 1, offsetof(struct dri2_egl_display, core), false}, +- {__DRI_MESA, 1, offsetof(struct dri2_egl_display, mesa), false}, +- {__DRI_SWRAST, 4, offsetof(struct dri2_egl_display, swrast), false}, ++ {__DRI_MESA, 2, offsetof(struct dri2_egl_display, mesa), false}, ++ {__DRI_SWRAST, 5, offsetof(struct dri2_egl_display, swrast), false}, + {__DRI_CONFIG_OPTIONS, 2, offsetof(struct dri2_egl_display, configOptions), + true}, + }; +@@ -1013,18 +1013,18 @@ dri2_create_screen(_EGLDisplay *disp) + * will not crash. + */ + if (strcmp(dri2_dpy->driver_name, driver_name_display_gpu) == 0) { +- dri2_dpy->dri_screen_display_gpu = dri2_dpy->mesa->createNewScreen( ++ dri2_dpy->dri_screen_display_gpu = dri2_dpy->mesa->createNewScreen3( + 0, dri2_dpy->fd_display_gpu, dri2_dpy->loader_extensions, +- dri2_dpy->driver_extensions, &dri2_dpy->driver_configs, disp); ++ dri2_dpy->driver_extensions, &dri2_dpy->driver_configs, false, disp); + } + free(driver_name_display_gpu); + } + } + + int screen_fd = dri2_dpy->swrast ? -1 : dri2_dpy->fd_render_gpu; +- dri2_dpy->dri_screen_render_gpu = dri2_dpy->mesa->createNewScreen( ++ dri2_dpy->dri_screen_render_gpu = dri2_dpy->mesa->createNewScreen3( + 0, screen_fd, dri2_dpy->loader_extensions, dri2_dpy->driver_extensions, +- &dri2_dpy->driver_configs, disp); ++ &dri2_dpy->driver_configs, false, disp); + + if (dri2_dpy->dri_screen_render_gpu == NULL) { + _eglLog(_EGL_WARNING, "egl: failed to create dri2 screen"); +Index: mesa-24.0.3/src/gallium/frontends/dri/dri2.c +=================================================================== +--- mesa-24.0.3.orig/src/gallium/frontends/dri/dri2.c ++++ mesa-24.0.3/src/gallium/frontends/dri/dri2.c +@@ -2484,12 +2484,13 @@ dri_query_compatible_render_only_device_ + } + + static const struct __DRImesaCoreExtensionRec mesaCoreExtension = { +- .base = { __DRI_MESA, 1 }, ++ .base = { __DRI_MESA, 2 }, + .version_string = MESA_INTERFACE_VERSION_STRING, + .createNewScreen = driCreateNewScreen2, + .createContext = driCreateContextAttribs, + .initScreen = dri2_init_screen, + .queryCompatibleRenderOnlyDeviceFd = dri_query_compatible_render_only_device_fd, ++ .createNewScreen3 = driCreateNewScreen3, + }; + + /* This is the table of extensions that the loader will dlsym() for. */ +@@ -2503,11 +2504,12 @@ const __DRIextension *galliumdrm_driver_ + }; + + static const struct __DRImesaCoreExtensionRec swkmsMesaCoreExtension = { +- .base = { __DRI_MESA, 1 }, ++ .base = { __DRI_MESA, 2 }, + .version_string = MESA_INTERFACE_VERSION_STRING, + .createNewScreen = driCreateNewScreen2, + .createContext = driCreateContextAttribs, + .initScreen = dri_swrast_kms_init_screen, ++ .createNewScreen3 = driCreateNewScreen3, + }; + + const __DRIextension *dri_swrast_kms_driver_extensions[] = { +Index: mesa-24.0.3/src/gallium/frontends/dri/dri_util.c +=================================================================== +--- mesa-24.0.3.orig/src/gallium/frontends/dri/dri_util.c ++++ mesa-24.0.3/src/gallium/frontends/dri/dri_util.c +@@ -96,10 +96,10 @@ setupLoaderExtensions(struct dri_screen + * Display. + */ + __DRIscreen * +-driCreateNewScreen2(int scrn, int fd, ++driCreateNewScreen3(int scrn, int fd, + const __DRIextension **loader_extensions, + const __DRIextension **driver_extensions, +- const __DRIconfig ***driver_configs, void *data) ++ const __DRIconfig ***driver_configs, bool implicit, void *data) + { + static const __DRIextension *emptyExtensionList[] = { NULL }; + struct dri_screen *screen; +@@ -172,14 +172,25 @@ driCreateNewScreen2(int scrn, int fd, + return opaque_dri_screen(screen); + } + ++__DRIscreen * ++driCreateNewScreen2(int scrn, int fd, ++ const __DRIextension **loader_extensions, ++ const __DRIextension **driver_extensions, ++ const __DRIconfig ***driver_configs, void *data) ++{ ++ return driCreateNewScreen3(scrn, fd, loader_extensions, ++ driver_extensions, ++ driver_configs, false, data); ++} ++ + static __DRIscreen * + dri2CreateNewScreen(int scrn, int fd, + const __DRIextension **extensions, + const __DRIconfig ***driver_configs, void *data) + { +- return driCreateNewScreen2(scrn, fd, extensions, ++ return driCreateNewScreen3(scrn, fd, extensions, + galliumdrm_driver_extensions, +- driver_configs, data); ++ driver_configs, false, data); + } + + static __DRIscreen * +@@ -187,9 +198,9 @@ swkmsCreateNewScreen(int scrn, int fd, + const __DRIextension **extensions, + const __DRIconfig ***driver_configs, void *data) + { +- return driCreateNewScreen2(scrn, fd, extensions, ++ return driCreateNewScreen3(scrn, fd, extensions, + dri_swrast_kms_driver_extensions, +- driver_configs, data); ++ driver_configs, false, data); + } + + /** swrast driver createNewScreen entrypoint. */ +@@ -197,9 +208,9 @@ static __DRIscreen * + driSWRastCreateNewScreen(int scrn, const __DRIextension **extensions, + const __DRIconfig ***driver_configs, void *data) + { +- return driCreateNewScreen2(scrn, -1, extensions, ++ return driCreateNewScreen3(scrn, -1, extensions, + galliumsw_driver_extensions, +- driver_configs, data); ++ driver_configs, false, data); + } + + static __DRIscreen * +@@ -207,8 +218,17 @@ driSWRastCreateNewScreen2(int scrn, cons + const __DRIextension **driver_extensions, + const __DRIconfig ***driver_configs, void *data) + { +- return driCreateNewScreen2(scrn, -1, extensions, driver_extensions, +- driver_configs, data); ++ return driCreateNewScreen3(scrn, -1, extensions, driver_extensions, ++ driver_configs, false, data); ++} ++ ++static __DRIscreen * ++driSWRastCreateNewScreen3(int scrn, const __DRIextension **extensions, ++ const __DRIextension **driver_extensions, ++ const __DRIconfig ***driver_configs, bool implicit, void *data) ++{ ++ return driCreateNewScreen3(scrn, -1, extensions, driver_extensions, ++ driver_configs, implicit, data); + } + + /** +@@ -878,7 +898,7 @@ const __DRIcoreExtension driCoreExtensio + + /** DRI2 interface */ + const __DRIdri2Extension driDRI2Extension = { +- .base = { __DRI_DRI2, 4 }, ++ .base = { __DRI_DRI2, 5 }, + + .createNewScreen = dri2CreateNewScreen, + .createNewDrawable = driCreateNewDrawable, +@@ -889,10 +909,11 @@ const __DRIdri2Extension driDRI2Extensio + .releaseBuffer = dri2ReleaseBuffer, + .createContextAttribs = driCreateContextAttribs, + .createNewScreen2 = driCreateNewScreen2, ++ .createNewScreen3 = driCreateNewScreen3, + }; + + const __DRIdri2Extension swkmsDRI2Extension = { +- .base = { __DRI_DRI2, 4 }, ++ .base = { __DRI_DRI2, 5 }, + + .createNewScreen = swkmsCreateNewScreen, + .createNewDrawable = driCreateNewDrawable, +@@ -903,18 +924,20 @@ const __DRIdri2Extension swkmsDRI2Extens + .releaseBuffer = dri2ReleaseBuffer, + .createContextAttribs = driCreateContextAttribs, + .createNewScreen2 = driCreateNewScreen2, ++ .createNewScreen3 = driCreateNewScreen3, + }; + + #endif + + const __DRIswrastExtension driSWRastExtension = { +- .base = { __DRI_SWRAST, 4 }, ++ .base = { __DRI_SWRAST, 5 }, + + .createNewScreen = driSWRastCreateNewScreen, + .createNewDrawable = driCreateNewDrawable, + .createNewContextForAPI = driCreateNewContextForAPI, + .createContextAttribs = driCreateContextAttribs, + .createNewScreen2 = driSWRastCreateNewScreen2, ++ .createNewScreen3 = driSWRastCreateNewScreen3, + }; + + const __DRI2configQueryExtension dri2ConfigQueryExtension = { +@@ -1117,10 +1140,11 @@ driImageFormatToGLFormat(uint32_t image_ + + /** Image driver interface */ + const __DRIimageDriverExtension driImageDriverExtension = { +- .base = { __DRI_IMAGE_DRIVER, 1 }, ++ .base = { __DRI_IMAGE_DRIVER, 2 }, + + .createNewScreen2 = driCreateNewScreen2, + .createNewDrawable = driCreateNewDrawable, + .getAPIMask = driGetAPIMask, + .createContextAttribs = driCreateContextAttribs, ++ .createNewScreen3 = driCreateNewScreen3, + }; +Index: mesa-24.0.3/src/gallium/frontends/dri/dri_util.h +=================================================================== +--- mesa-24.0.3.orig/src/gallium/frontends/dri/dri_util.h ++++ mesa-24.0.3/src/gallium/frontends/dri/dri_util.h +@@ -104,6 +104,11 @@ struct __DriverContextConfig { + #define __DRIVER_CONTEXT_ATTRIB_PROTECTED (1 << 4) + + __DRIscreen * ++driCreateNewScreen3(int scrn, int fd, ++ const __DRIextension **loader_extensions, ++ const __DRIextension **driver_extensions, ++ const __DRIconfig ***driver_configs, bool implicit, void *data); ++__DRIscreen * + driCreateNewScreen2(int scrn, int fd, + const __DRIextension **loader_extensions, + const __DRIextension **driver_extensions, +Index: mesa-24.0.3/src/gallium/frontends/dri/drisw.c +=================================================================== +--- mesa-24.0.3.orig/src/gallium/frontends/dri/drisw.c ++++ mesa-24.0.3/src/gallium/frontends/dri/drisw.c +@@ -616,11 +616,12 @@ const __DRIcopySubBufferExtension driSWC + }; + + static const struct __DRImesaCoreExtensionRec mesaCoreExtension = { +- .base = { __DRI_MESA, 1 }, ++ .base = { __DRI_MESA, 2 }, + .version_string = MESA_INTERFACE_VERSION_STRING, + .createNewScreen = driCreateNewScreen2, + .createContext = driCreateContextAttribs, + .initScreen = drisw_init_screen, ++ .createNewScreen3 = driCreateNewScreen3, + }; + + /* This is the table of extensions that the loader will dlsym() for. */ +Index: mesa-24.0.3/src/gallium/frontends/dri/kopper.c +=================================================================== +--- mesa-24.0.3.orig/src/gallium/frontends/dri/kopper.c ++++ mesa-24.0.3/src/gallium/frontends/dri/kopper.c +@@ -963,11 +963,12 @@ const __DRIkopperExtension driKopperExte + }; + + static const struct __DRImesaCoreExtensionRec mesaCoreExtension = { +- .base = { __DRI_MESA, 1 }, ++ .base = { __DRI_MESA, 2 }, + .version_string = MESA_INTERFACE_VERSION_STRING, + .createNewScreen = driCreateNewScreen2, + .createContext = driCreateContextAttribs, + .initScreen = kopper_init_screen, ++ .createNewScreen3 = driCreateNewScreen3, + }; + + const __DRIextension *galliumvk_driver_extensions[] = { +Index: mesa-24.0.3/src/gbm/backends/dri/gbm_dri.c +=================================================================== +--- mesa-24.0.3.orig/src/gbm/backends/dri/gbm_dri.c ++++ mesa-24.0.3/src/gbm/backends/dri/gbm_dri.c +@@ -250,14 +250,14 @@ static struct dri_extension_match dri_co + + static struct dri_extension_match gbm_dri_device_extensions[] = { + { __DRI_CORE, 1, offsetof(struct gbm_dri_device, core), false }, +- { __DRI_MESA, 1, offsetof(struct gbm_dri_device, mesa), false }, +- { __DRI_IMAGE_DRIVER, 1, offsetof(struct gbm_dri_device, image_driver), false }, ++ { __DRI_MESA, 2, offsetof(struct gbm_dri_device, mesa), false }, ++ { __DRI_IMAGE_DRIVER, 2, offsetof(struct gbm_dri_device, image_driver), false }, + }; + + static struct dri_extension_match gbm_swrast_device_extensions[] = { + { __DRI_CORE, 1, offsetof(struct gbm_dri_device, core), false }, +- { __DRI_MESA, 1, offsetof(struct gbm_dri_device, mesa), false }, +- { __DRI_SWRAST, 4, offsetof(struct gbm_dri_device, swrast), false }, ++ { __DRI_MESA, 2, offsetof(struct gbm_dri_device, mesa), false }, ++ { __DRI_SWRAST, 5, offsetof(struct gbm_dri_device, swrast), false }, + { __DRI_KOPPER, 1, offsetof(struct gbm_dri_device, kopper), true }, + }; + +@@ -315,10 +315,10 @@ dri_screen_create_for_driver(struct gbm_ + + dri->driver_extensions = extensions; + dri->loader_extensions = gbm_dri_screen_extensions; +- dri->screen = dri->mesa->createNewScreen(0, swrast ? -1 : dri->base.v0.fd, +- dri->loader_extensions, +- dri->driver_extensions, +- &dri->driver_configs, dri); ++ dri->screen = dri->mesa->createNewScreen3(0, swrast ? -1 : dri->base.v0.fd, ++ dri->loader_extensions, ++ dri->driver_extensions, ++ &dri->driver_configs, false, dri); + if (dri->screen == NULL) + goto close_driver; + +Index: mesa-24.0.3/src/glx/dri2_glx.c +=================================================================== +--- mesa-24.0.3.orig/src/glx/dri2_glx.c ++++ mesa-24.0.3/src/glx/dri2_glx.c +@@ -1064,17 +1064,17 @@ dri2CreateScreen(int screen, struct glx_ + + static const struct dri_extension_match exts[] = { + { __DRI_CORE, 1, offsetof(struct dri2_screen, core), false }, +- { __DRI_DRI2, 4, offsetof(struct dri2_screen, dri2), false }, +- { __DRI_MESA, 1, offsetof(struct dri2_screen, mesa), false }, ++ { __DRI_DRI2, 5, offsetof(struct dri2_screen, dri2), false }, ++ { __DRI_MESA, 2, offsetof(struct dri2_screen, mesa), false }, + }; + if (!loader_bind_extensions(psc, exts, ARRAY_SIZE(exts), extensions)) + goto handle_error; + + psc->driScreen = +- psc->dri2->createNewScreen2(screen, psc->fd, ++ psc->dri2->createNewScreen3(screen, psc->fd, + (const __DRIextension **)&pdp->loader_extensions[0], + extensions, +- &driver_configs, psc); ++ &driver_configs, implicit, psc); + + if (psc->driScreen == NULL) { + ErrorMessageF("glx: failed to create dri2 screen\n"); +Index: mesa-24.0.3/src/glx/dri3_glx.c +=================================================================== +--- mesa-24.0.3.orig/src/glx/dri3_glx.c ++++ mesa-24.0.3/src/glx/dri3_glx.c +@@ -841,8 +841,8 @@ dri3_create_screen(int screen, struct gl + + static const struct dri_extension_match exts[] = { + { __DRI_CORE, 1, offsetof(struct dri3_screen, core), false }, +- { __DRI_IMAGE_DRIVER, 1, offsetof(struct dri3_screen, image_driver), false }, +- { __DRI_MESA, 1, offsetof(struct dri3_screen, mesa), false }, ++ { __DRI_IMAGE_DRIVER, 2, offsetof(struct dri3_screen, image_driver), false }, ++ { __DRI_MESA, 2, offsetof(struct dri3_screen, mesa), false }, + }; + if (!loader_bind_extensions(psc, exts, ARRAY_SIZE(exts), extensions)) + goto handle_error; +@@ -858,10 +858,10 @@ dri3_create_screen(int screen, struct gl + */ + if (strcmp(driverName, driverNameDisplayGPU) == 0) { + psc->driScreenDisplayGPU = +- psc->image_driver->createNewScreen2(screen, psc->fd_display_gpu, ++ psc->image_driver->createNewScreen3(screen, psc->fd_display_gpu, + pdp->loader_extensions, + extensions, +- &driver_configs, psc); ++ &driver_configs, implicit, psc); + } + + free(driverNameDisplayGPU); +@@ -869,10 +869,10 @@ dri3_create_screen(int screen, struct gl + } + + psc->driScreenRenderGPU = +- psc->image_driver->createNewScreen2(screen, psc->fd_render_gpu, ++ psc->image_driver->createNewScreen3(screen, psc->fd_render_gpu, + pdp->loader_extensions, + extensions, +- &driver_configs, psc); ++ &driver_configs, implicit, psc); + + if (psc->driScreenRenderGPU == NULL) { + ErrorMessageF("glx: failed to create dri3 screen\n"); +Index: mesa-24.0.3/src/glx/drisw_glx.c +=================================================================== +--- mesa-24.0.3.orig/src/glx/drisw_glx.c ++++ mesa-24.0.3/src/glx/drisw_glx.c +@@ -934,7 +934,7 @@ kopperGetSwapInterval(__GLXDRIdrawable * + + static struct glx_screen * + driswCreateScreenDriver(int screen, struct glx_display *priv, +- const char *driver) ++ const char *driver, bool implicit) + { + __GLXDRIscreen *psp; + const __DRIconfig **driver_configs; +@@ -967,18 +967,18 @@ driswCreateScreenDriver(int screen, stru + + static const struct dri_extension_match exts[] = { + { __DRI_CORE, 1, offsetof(struct drisw_screen, core), false }, +- { __DRI_SWRAST, 4, offsetof(struct drisw_screen, swrast), false }, ++ { __DRI_SWRAST, 5, offsetof(struct drisw_screen, swrast), false }, + { __DRI_KOPPER, 1, offsetof(struct drisw_screen, kopper), true }, + { __DRI_COPY_SUB_BUFFER, 1, offsetof(struct drisw_screen, copySubBuffer), true }, +- { __DRI_MESA, 1, offsetof(struct drisw_screen, mesa), false }, ++ { __DRI_MESA, 2, offsetof(struct drisw_screen, mesa), false }, + }; + if (!loader_bind_extensions(psc, exts, ARRAY_SIZE(exts), extensions)) + goto handle_error; + + psc->driScreen = +- psc->swrast->createNewScreen2(screen, loader_extensions_local, ++ psc->swrast->createNewScreen3(screen, loader_extensions_local, + extensions, +- &driver_configs, psc); ++ &driver_configs, implicit, psc); + if (psc->driScreen == NULL) { + ErrorMessageF("glx: failed to create drisw screen\n"); + goto handle_error; +@@ -1059,10 +1059,10 @@ driswCreateScreen(int screen, struct glx + { + const struct drisw_display *pdpyp = (struct drisw_display *)priv->driswDisplay; + if (pdpyp->zink && !debug_get_bool_option("LIBGL_KOPPER_DISABLE", false)) { +- return driswCreateScreenDriver(screen, priv, "zink"); ++ return driswCreateScreenDriver(screen, priv, "zink", implicit); + } + +- return driswCreateScreenDriver(screen, priv, "swrast"); ++ return driswCreateScreenDriver(screen, priv, "swrast", implicit); + } + + /* Called from __glXFreeDisplayPrivate. diff --git a/0006-gbm-plumb-an-implicit-param-through-device-creation.patch b/0006-gbm-plumb-an-implicit-param-through-device-creation.patch new file mode 100644 index 0000000..79a1c84 --- /dev/null +++ b/0006-gbm-plumb-an-implicit-param-through-device-creation.patch @@ -0,0 +1,82 @@ +From 664e73e7120fbf5ad62da643a7e4aff525d38d94 Mon Sep 17 00:00:00 2001 +From: Mike Blumenkrantz +Date: Tue, 12 Mar 2024 10:01:29 -0400 +Subject: [PATCH 6/9] gbm: plumb an 'implicit' param through device creation + +this is always true except in the software fallback +--- + src/gbm/backends/dri/gbm_dri.c | 20 ++++++++++---------- + 1 file changed, 10 insertions(+), 10 deletions(-) + +Index: mesa-24.0.3/src/gbm/backends/dri/gbm_dri.c +=================================================================== +--- mesa-24.0.3.orig/src/gbm/backends/dri/gbm_dri.c ++++ mesa-24.0.3/src/gbm/backends/dri/gbm_dri.c +@@ -287,7 +287,7 @@ dri_open_driver(struct gbm_dri_device *d + } + + static int +-dri_screen_create_for_driver(struct gbm_dri_device *dri, char *driver_name) ++dri_screen_create_for_driver(struct gbm_dri_device *dri, char *driver_name, bool implicit) + { + bool swrast = driver_name == NULL; /* If it's pure swrast, not just swkms. */ + +@@ -318,7 +318,7 @@ dri_screen_create_for_driver(struct gbm_ + dri->screen = dri->mesa->createNewScreen3(0, swrast ? -1 : dri->base.v0.fd, + dri->loader_extensions, + dri->driver_extensions, +- &dri->driver_configs, false, dri); ++ &dri->driver_configs, implicit, dri); + if (dri->screen == NULL) + goto close_driver; + +@@ -348,7 +348,7 @@ fail: + } + + static int +-dri_screen_create(struct gbm_dri_device *dri) ++dri_screen_create(struct gbm_dri_device *dri, bool implicit) + { + char *driver_name; + +@@ -356,11 +356,11 @@ dri_screen_create(struct gbm_dri_device + if (!driver_name) + return -1; + +- return dri_screen_create_for_driver(dri, driver_name); ++ return dri_screen_create_for_driver(dri, driver_name, implicit); + } + + static int +-dri_screen_create_sw(struct gbm_dri_device *dri) ++dri_screen_create_sw(struct gbm_dri_device *dri, bool implicit) + { + char *driver_name; + int ret; +@@ -369,9 +369,9 @@ dri_screen_create_sw(struct gbm_dri_devi + if (!driver_name) + return -errno; + +- ret = dri_screen_create_for_driver(dri, driver_name); ++ ret = dri_screen_create_for_driver(dri, driver_name, implicit); + if (ret != 0) +- ret = dri_screen_create_for_driver(dri, NULL); ++ ret = dri_screen_create_for_driver(dri, NULL, implicit); + if (ret != 0) + return ret; + +@@ -1289,11 +1289,11 @@ dri_device_create(int fd, uint32_t gbm_b + + force_sw = debug_get_bool_option("GBM_ALWAYS_SOFTWARE", false); + if (!force_sw) { +- ret = dri_screen_create(dri); ++ ret = dri_screen_create(dri, false); + if (ret) +- ret = dri_screen_create_sw(dri); ++ ret = dri_screen_create_sw(dri, true); + } else { +- ret = dri_screen_create_sw(dri); ++ ret = dri_screen_create_sw(dri, false); + } + + if (ret) diff --git a/0007-frontends-dri-plumb-an-implicit-param-through-screen.patch b/0007-frontends-dri-plumb-an-implicit-param-through-screen.patch new file mode 100644 index 0000000..263e9fb --- /dev/null +++ b/0007-frontends-dri-plumb-an-implicit-param-through-screen.patch @@ -0,0 +1,88 @@ +From 55236ac5349f1208356e713336276c052384e444 Mon Sep 17 00:00:00 2001 +From: Mike Blumenkrantz +Date: Tue, 12 Mar 2024 10:05:49 -0400 +Subject: [PATCH 7/9] frontends/dri: plumb an 'implicit' param through screen + init + +--- + include/GL/internal/mesa_interface.h | 2 +- + src/gallium/frontends/dri/dri2.c | 4 ++-- + src/gallium/frontends/dri/dri_util.c | 2 +- + src/gallium/frontends/dri/drisw.c | 2 +- + src/gallium/frontends/dri/kopper.c | 2 +- + 5 files changed, 6 insertions(+), 6 deletions(-) + +Index: mesa-24.0.3/include/GL/internal/mesa_interface.h +=================================================================== +--- mesa-24.0.3.orig/include/GL/internal/mesa_interface.h ++++ mesa-24.0.3/include/GL/internal/mesa_interface.h +@@ -60,7 +60,7 @@ struct __DRImesaCoreExtensionRec { + __DRIcreateContextAttribsFunc createContext; + + /* driver function for finishing initialization inside createNewScreen(). */ +- const __DRIconfig **(*initScreen)(struct dri_screen *screen); ++ const __DRIconfig **(*initScreen)(struct dri_screen *screen, bool implicit); + + int (*queryCompatibleRenderOnlyDeviceFd)(int kms_only_fd); + +Index: mesa-24.0.3/src/gallium/frontends/dri/dri2.c +=================================================================== +--- mesa-24.0.3.orig/src/gallium/frontends/dri/dri2.c ++++ mesa-24.0.3/src/gallium/frontends/dri/dri2.c +@@ -2374,7 +2374,7 @@ dri2_create_drawable(struct dri_screen * + * Returns the struct gl_config supported by this driver. + */ + static const __DRIconfig ** +-dri2_init_screen(struct dri_screen *screen) ++dri2_init_screen(struct dri_screen *screen, bool implicit) + { + const __DRIconfig **configs; + struct pipe_screen *pscreen = NULL; +@@ -2430,7 +2430,7 @@ fail: + * Returns the struct gl_config supported by this driver. + */ + static const __DRIconfig ** +-dri_swrast_kms_init_screen(struct dri_screen *screen) ++dri_swrast_kms_init_screen(struct dri_screen *screen, bool implicit) + { + #if defined(GALLIUM_SOFTPIPE) + const __DRIconfig **configs; +Index: mesa-24.0.3/src/gallium/frontends/dri/dri_util.c +=================================================================== +--- mesa-24.0.3.orig/src/gallium/frontends/dri/dri_util.c ++++ mesa-24.0.3/src/gallium/frontends/dri/dri_util.c +@@ -136,7 +136,7 @@ driCreateNewScreen3(int scrn, int fd, + driParseConfigFiles(&screen->optionCache, &screen->optionInfo, screen->myNum, + "dri2", NULL, NULL, NULL, 0, NULL, 0); + +- *driver_configs = mesa->initScreen(screen); ++ *driver_configs = mesa->initScreen(screen, implicit); + if (*driver_configs == NULL) { + dri_destroy_screen(screen); + return NULL; +Index: mesa-24.0.3/src/gallium/frontends/dri/drisw.c +=================================================================== +--- mesa-24.0.3.orig/src/gallium/frontends/dri/drisw.c ++++ mesa-24.0.3/src/gallium/frontends/dri/drisw.c +@@ -539,7 +539,7 @@ drisw_create_drawable(struct dri_screen + } + + static const __DRIconfig ** +-drisw_init_screen(struct dri_screen *screen) ++drisw_init_screen(struct dri_screen *screen, bool implicit) + { + const __DRIswrastLoaderExtension *loader = screen->swrast_loader; + const __DRIconfig **configs; +Index: mesa-24.0.3/src/gallium/frontends/dri/kopper.c +=================================================================== +--- mesa-24.0.3.orig/src/gallium/frontends/dri/kopper.c ++++ mesa-24.0.3/src/gallium/frontends/dri/kopper.c +@@ -110,7 +110,7 @@ static const __DRIextension *drivk_sw_sc + }; + + static const __DRIconfig ** +-kopper_init_screen(struct dri_screen *screen) ++kopper_init_screen(struct dri_screen *screen, bool implicit) + { + const __DRIconfig **configs; + struct pipe_screen *pscreen = NULL; diff --git a/0008-pipe-loader-plumb-a-flag-for-implicit-driver-load-th.patch b/0008-pipe-loader-plumb-a-flag-for-implicit-driver-load-th.patch new file mode 100644 index 0000000..4b663fd --- /dev/null +++ b/0008-pipe-loader-plumb-a-flag-for-implicit-driver-load-th.patch @@ -0,0 +1,281 @@ +From 4df36439ecff5a2b65e93ab36d1ebea780269b63 Mon Sep 17 00:00:00 2001 +From: Mike Blumenkrantz +Date: Tue, 12 Mar 2024 10:13:40 -0400 +Subject: [PATCH 8/9] pipe-loader: plumb a flag for implicit driver load + through screen creation + +--- + src/gallium/auxiliary/pipe-loader/pipe_loader.c | 7 ++++--- + src/gallium/auxiliary/pipe-loader/pipe_loader.h | 6 ++++-- + src/gallium/auxiliary/vl/vl_winsys_dri.c | 2 +- + src/gallium/auxiliary/vl/vl_winsys_dri3.c | 2 +- + src/gallium/auxiliary/vl/vl_winsys_drm.c | 2 +- + src/gallium/frontends/clover/core/device.cpp | 2 +- + src/gallium/frontends/dri/dri2.c | 4 ++-- + src/gallium/frontends/dri/drisw.c | 2 +- + src/gallium/frontends/dri/kopper.c | 2 +- + src/gallium/frontends/lavapipe/lvp_device.c | 2 +- + src/gallium/frontends/rusticl/mesa/pipe/device.rs | 2 +- + src/gallium/frontends/teflon/tfl_device.c | 2 +- + src/gallium/frontends/xa/xa_tracker.c | 2 +- + src/gallium/include/pipe/p_screen.h | 1 + + src/gallium/targets/d3dadapter9/drm.c | 4 ++-- + src/gallium/tests/trivial/quad-tex.c | 2 +- + src/gallium/tests/trivial/tri.c | 2 +- + 17 files changed, 25 insertions(+), 21 deletions(-) + +Index: mesa-24.0.3/src/gallium/auxiliary/pipe-loader/pipe_loader.c +=================================================================== +--- mesa-24.0.3.orig/src/gallium/auxiliary/pipe-loader/pipe_loader.c ++++ mesa-24.0.3/src/gallium/auxiliary/pipe-loader/pipe_loader.c +@@ -169,11 +169,12 @@ pipe_loader_get_driinfo_xml(const char * + } + + struct pipe_screen * +-pipe_loader_create_screen_vk(struct pipe_loader_device *dev, bool sw_vk) ++pipe_loader_create_screen_vk(struct pipe_loader_device *dev, bool sw_vk, bool implicit) + { + struct pipe_screen_config config; + + pipe_loader_load_options(dev); ++ config.implicit_driver_load = implicit; + config.options_info = &dev->option_info; + config.options = &dev->option_cache; + +@@ -181,9 +182,9 @@ pipe_loader_create_screen_vk(struct pipe + } + + struct pipe_screen * +-pipe_loader_create_screen(struct pipe_loader_device *dev) ++pipe_loader_create_screen(struct pipe_loader_device *dev, bool implicit) + { +- return pipe_loader_create_screen_vk(dev, false); ++ return pipe_loader_create_screen_vk(dev, false, implicit); + } + + struct util_dl_library * +Index: mesa-24.0.3/src/gallium/auxiliary/pipe-loader/pipe_loader.h +=================================================================== +--- mesa-24.0.3.orig/src/gallium/auxiliary/pipe-loader/pipe_loader.h ++++ mesa-24.0.3/src/gallium/auxiliary/pipe-loader/pipe_loader.h +@@ -88,17 +88,19 @@ pipe_loader_probe(struct pipe_loader_dev + * + * \param dev Device the screen will be created for. + * \param sw_vk Device is for software vulkan ++ * \param implicit Whether the driver is being loaded implicitly. + */ + struct pipe_screen * +-pipe_loader_create_screen_vk(struct pipe_loader_device *dev, bool sw_vk); ++pipe_loader_create_screen_vk(struct pipe_loader_device *dev, bool sw_vk, bool implicit); + + /** + * Create a pipe_screen for the specified device. + * + * \param dev Device the screen will be created for. ++ * \param implicit Whether the driver is being loaded implicitly. + */ + struct pipe_screen * +-pipe_loader_create_screen(struct pipe_loader_device *dev); ++pipe_loader_create_screen(struct pipe_loader_device *dev, bool implicit); + + /** + * Ensures that the driconf option cache has been parsed for the driver. +Index: mesa-24.0.3/src/gallium/auxiliary/vl/vl_winsys_dri.c +=================================================================== +--- mesa-24.0.3.orig/src/gallium/auxiliary/vl/vl_winsys_dri.c ++++ mesa-24.0.3/src/gallium/auxiliary/vl/vl_winsys_dri.c +@@ -459,7 +459,7 @@ vl_dri2_screen_create(Display *display, + goto free_authenticate; + + if (pipe_loader_drm_probe_fd(&scrn->base.dev, fd, false)) +- scrn->base.pscreen = pipe_loader_create_screen(scrn->base.dev); ++ scrn->base.pscreen = pipe_loader_create_screen(scrn->base.dev, false); + + if (!scrn->base.pscreen) + goto release_pipe; +Index: mesa-24.0.3/src/gallium/auxiliary/vl/vl_winsys_dri3.c +=================================================================== +--- mesa-24.0.3.orig/src/gallium/auxiliary/vl/vl_winsys_dri3.c ++++ mesa-24.0.3/src/gallium/auxiliary/vl/vl_winsys_dri3.c +@@ -843,7 +843,7 @@ vl_dri3_screen_create(Display *display, + free(geom_reply); + + if (pipe_loader_drm_probe_fd(&scrn->base.dev, fd, false)) +- scrn->base.pscreen = pipe_loader_create_screen(scrn->base.dev); ++ scrn->base.pscreen = pipe_loader_create_screen(scrn->base.dev, false); + + if (!scrn->base.pscreen) + goto release_pipe; +Index: mesa-24.0.3/src/gallium/auxiliary/vl/vl_winsys_drm.c +=================================================================== +--- mesa-24.0.3.orig/src/gallium/auxiliary/vl/vl_winsys_drm.c ++++ mesa-24.0.3/src/gallium/auxiliary/vl/vl_winsys_drm.c +@@ -47,7 +47,7 @@ vl_drm_screen_create(int fd) + return NULL; + + if (pipe_loader_drm_probe_fd(&vscreen->dev, fd, false)) +- vscreen->pscreen = pipe_loader_create_screen(vscreen->dev); ++ vscreen->pscreen = pipe_loader_create_screen(vscreen->dev, false); + + if (!vscreen->pscreen) + goto release_pipe; +Index: mesa-24.0.3/src/gallium/frontends/clover/core/device.cpp +=================================================================== +--- mesa-24.0.3.orig/src/gallium/frontends/clover/core/device.cpp ++++ mesa-24.0.3/src/gallium/frontends/clover/core/device.cpp +@@ -163,7 +163,7 @@ namespace { + + device::device(clover::platform &platform, pipe_loader_device *ldev) : + platform(platform), clc_cache(NULL), ldev(ldev) { +- pipe = pipe_loader_create_screen(ldev); ++ pipe = pipe_loader_create_screen(ldev, false); + if (pipe && pipe->get_param(pipe, PIPE_CAP_COMPUTE)) { + const bool has_supported_ir = supports_ir(PIPE_SHADER_IR_NATIVE) || + supports_ir(PIPE_SHADER_IR_NIR_SERIALIZED); +Index: mesa-24.0.3/src/gallium/frontends/dri/dri2.c +=================================================================== +--- mesa-24.0.3.orig/src/gallium/frontends/dri/dri2.c ++++ mesa-24.0.3/src/gallium/frontends/dri/dri2.c +@@ -2382,7 +2382,7 @@ dri2_init_screen(struct dri_screen *scre + (void) mtx_init(&screen->opencl_func_mutex, mtx_plain); + + if (pipe_loader_drm_probe_fd(&screen->dev, screen->fd, false)) +- pscreen = pipe_loader_create_screen(screen->dev); ++ pscreen = pipe_loader_create_screen(screen->dev, implicit); + + if (!pscreen) + goto fail; +@@ -2438,7 +2438,7 @@ dri_swrast_kms_init_screen(struct dri_sc + + #ifdef HAVE_DRISW_KMS + if (pipe_loader_sw_probe_kms(&screen->dev, screen->fd)) +- pscreen = pipe_loader_create_screen(screen->dev); ++ pscreen = pipe_loader_create_screen(screen->dev, implicit); + #endif + + if (!pscreen) +Index: mesa-24.0.3/src/gallium/frontends/dri/drisw.c +=================================================================== +--- mesa-24.0.3.orig/src/gallium/frontends/dri/drisw.c ++++ mesa-24.0.3/src/gallium/frontends/dri/drisw.c +@@ -562,7 +562,7 @@ drisw_init_screen(struct dri_screen *scr + success = pipe_loader_sw_probe_dri(&screen->dev, lf); + + if (success) +- pscreen = pipe_loader_create_screen(screen->dev); ++ pscreen = pipe_loader_create_screen(screen->dev, implicit); + + if (!pscreen) + goto fail; +Index: mesa-24.0.3/src/gallium/frontends/dri/kopper.c +=================================================================== +--- mesa-24.0.3.orig/src/gallium/frontends/dri/kopper.c ++++ mesa-24.0.3/src/gallium/frontends/dri/kopper.c +@@ -131,7 +131,7 @@ kopper_init_screen(struct dri_screen *sc + success = pipe_loader_vk_probe_dri(&screen->dev); + + if (success) +- pscreen = pipe_loader_create_screen(screen->dev); ++ pscreen = pipe_loader_create_screen(screen->dev, implicit); + + if (!pscreen) + goto fail; +Index: mesa-24.0.3/src/gallium/frontends/lavapipe/lvp_device.c +=================================================================== +--- mesa-24.0.3.orig/src/gallium/frontends/lavapipe/lvp_device.c ++++ mesa-24.0.3/src/gallium/frontends/lavapipe/lvp_device.c +@@ -1101,7 +1101,7 @@ lvp_physical_device_init(struct lvp_phys + } + device->pld = pld; + +- device->pscreen = pipe_loader_create_screen_vk(device->pld, true); ++ device->pscreen = pipe_loader_create_screen_vk(device->pld, true, false); + if (!device->pscreen) + return vk_error(instance, VK_ERROR_OUT_OF_HOST_MEMORY); + for (unsigned i = 0; i < ARRAY_SIZE(device->drv_options); i++) +Index: mesa-24.0.3/src/gallium/frontends/xa/xa_tracker.c +=================================================================== +--- mesa-24.0.3.orig/src/gallium/frontends/xa/xa_tracker.c ++++ mesa-24.0.3/src/gallium/frontends/xa/xa_tracker.c +@@ -172,7 +172,7 @@ xa_tracker_create(int drm_fd) + return NULL; + + if (pipe_loader_drm_probe_fd(&xa->dev, drm_fd, false)) +- xa->screen = pipe_loader_create_screen(xa->dev); ++ xa->screen = pipe_loader_create_screen(xa->dev, false); + + if (!xa->screen) + goto out_no_screen; +Index: mesa-24.0.3/src/gallium/include/pipe/p_screen.h +=================================================================== +--- mesa-24.0.3.orig/src/gallium/include/pipe/p_screen.h ++++ mesa-24.0.3/src/gallium/include/pipe/p_screen.h +@@ -806,6 +806,7 @@ struct pipe_screen { + * Global configuration options for screen creation. + */ + struct pipe_screen_config { ++ bool implicit_driver_load; + struct driOptionCache *options; + const struct driOptionCache *options_info; + }; +Index: mesa-24.0.3/src/gallium/targets/d3dadapter9/drm.c +=================================================================== +--- mesa-24.0.3.orig/src/gallium/targets/d3dadapter9/drm.c ++++ mesa-24.0.3/src/gallium/targets/d3dadapter9/drm.c +@@ -242,7 +242,7 @@ drm_create_adapter( int fd, + return D3DERR_DRIVERINTERNALERROR; + } + +- ctx->base.hal = pipe_loader_create_screen(ctx->dev); ++ ctx->base.hal = pipe_loader_create_screen(ctx->dev, false); + if (!ctx->base.hal) { + ERR("Unable to load requested driver.\n"); + drm_destroy(&ctx->base); +@@ -302,7 +302,7 @@ drm_create_adapter( int fd, + sw_rendering |= debug_get_bool_option("D3D_ALWAYS_SOFTWARE", false); + /* wrap it to create a software screen that can share resources */ + if (sw_rendering && pipe_loader_sw_probe_wrapped(&ctx->swdev, ctx->base.hal)) +- ctx->base.ref = pipe_loader_create_screen(ctx->swdev); ++ ctx->base.ref = pipe_loader_create_screen(ctx->swdev, false); + else { + /* Use the hardware for sw rendering */ + ctx->swdev = ctx->dev; +Index: mesa-24.0.3/src/gallium/tests/trivial/quad-tex.c +=================================================================== +--- mesa-24.0.3.orig/src/gallium/tests/trivial/quad-tex.c ++++ mesa-24.0.3/src/gallium/tests/trivial/quad-tex.c +@@ -97,7 +97,7 @@ static void init_prog(struct program *p) + assert(ret); + + /* init a pipe screen */ +- p->screen = pipe_loader_create_screen(p->dev); ++ p->screen = pipe_loader_create_screen(p->dev, false); + assert(p->screen); + + /* create the pipe driver context and cso context */ +Index: mesa-24.0.3/src/gallium/tests/trivial/tri.c +=================================================================== +--- mesa-24.0.3.orig/src/gallium/tests/trivial/tri.c ++++ mesa-24.0.3/src/gallium/tests/trivial/tri.c +@@ -91,7 +91,7 @@ static void init_prog(struct program *p) + assert(ret); + + /* init a pipe screen */ +- p->screen = pipe_loader_create_screen(p->dev); ++ p->screen = pipe_loader_create_screen(p->dev, false); + assert(p->screen); + + /* create the pipe driver context and cso context */ +Index: mesa-24.0.3/src/gallium/frontends/rusticl/mesa/pipe/device.rs +=================================================================== +--- mesa-24.0.3.orig/src/gallium/frontends/rusticl/mesa/pipe/device.rs ++++ mesa-24.0.3/src/gallium/frontends/rusticl/mesa/pipe/device.rs +@@ -20,7 +20,7 @@ impl PipeLoaderDevice { + } + + fn load_screen(self) -> Option { +- let s = unsafe { pipe_loader_create_screen(self.ldev) }; ++ let s = unsafe { pipe_loader_create_screen(self.ldev, false) }; + PipeScreen::new(self, s) + } + diff --git a/0009-zink-don-t-print-error-messages-when-failing-an-impl.patch b/0009-zink-don-t-print-error-messages-when-failing-an-impl.patch new file mode 100644 index 0000000..c70757b --- /dev/null +++ b/0009-zink-don-t-print-error-messages-when-failing-an-impl.patch @@ -0,0 +1,327 @@ +From 940d9bce8ec9a1acc5065bce9d3e4c369546319b Mon Sep 17 00:00:00 2001 +From: Mike Blumenkrantz +Date: Tue, 12 Mar 2024 10:22:24 -0400 +Subject: [PATCH 9/9] zink: don't print error messages when failing an implicit + driver load + +--- + src/gallium/drivers/zink/zink_device_info.py | 6 +- + src/gallium/drivers/zink/zink_instance.py | 15 ++-- + src/gallium/drivers/zink/zink_screen.c | 76 +++++++++++++------- + src/gallium/drivers/zink/zink_types.h | 1 + + 4 files changed, 66 insertions(+), 32 deletions(-) + +Index: mesa-24.0.3/src/gallium/drivers/zink/zink_device_info.py +=================================================================== +--- mesa-24.0.3.orig/src/gallium/drivers/zink/zink_device_info.py ++++ mesa-24.0.3/src/gallium/drivers/zink/zink_device_info.py +@@ -463,14 +463,16 @@ zink_get_physical_device_info(struct zin + // enumerate device supported extensions + VkResult result = screen->vk.EnumerateDeviceExtensionProperties(screen->pdev, NULL, &num_extensions, NULL); + if (result != VK_SUCCESS) { +- mesa_loge("ZINK: vkEnumerateDeviceExtensionProperties failed (%s)", vk_Result_to_str(result)); ++ if (!screen->implicitly_loaded) ++ mesa_loge("ZINK: vkEnumerateDeviceExtensionProperties failed (%s)", vk_Result_to_str(result)); + } else { + if (num_extensions > 0) { + VkExtensionProperties *extensions = MALLOC(sizeof(VkExtensionProperties) * num_extensions); + if (!extensions) goto fail; + result = screen->vk.EnumerateDeviceExtensionProperties(screen->pdev, NULL, &num_extensions, extensions); + if (result != VK_SUCCESS) { +- mesa_loge("ZINK: vkEnumerateDeviceExtensionProperties failed (%s)", vk_Result_to_str(result)); ++ if (!screen->implicitly_loaded) ++ mesa_loge("ZINK: vkEnumerateDeviceExtensionProperties failed (%s)", vk_Result_to_str(result)); + } + + for (uint32_t i = 0; i < num_extensions; ++i) { +Index: mesa-24.0.3/src/gallium/drivers/zink/zink_instance.py +=================================================================== +--- mesa-24.0.3.orig/src/gallium/drivers/zink/zink_instance.py ++++ mesa-24.0.3/src/gallium/drivers/zink/zink_instance.py +@@ -156,12 +156,14 @@ zink_create_instance(struct zink_screen + // Build up the extensions from the reported ones but only for the unnamed layer + uint32_t extension_count = 0; + if (vk_EnumerateInstanceExtensionProperties(NULL, &extension_count, NULL) != VK_SUCCESS) { +- mesa_loge("ZINK: vkEnumerateInstanceExtensionProperties failed"); ++ if (!screen->implicitly_loaded) ++ mesa_loge("ZINK: vkEnumerateInstanceExtensionProperties failed"); + } else { + VkExtensionProperties *extension_props = malloc(extension_count * sizeof(VkExtensionProperties)); + if (extension_props) { + if (vk_EnumerateInstanceExtensionProperties(NULL, &extension_count, extension_props) != VK_SUCCESS) { +- mesa_loge("ZINK: vkEnumerateInstanceExtensionProperties failed"); ++ if (!screen->implicitly_loaded) ++ mesa_loge("ZINK: vkEnumerateInstanceExtensionProperties failed"); + } else { + for (uint32_t i = 0; i < extension_count; i++) { + %for ext in extensions: +@@ -179,12 +181,14 @@ zink_create_instance(struct zink_screen + uint32_t layer_count = 0; + + if (vk_EnumerateInstanceLayerProperties(&layer_count, NULL) != VK_SUCCESS) { +- mesa_loge("ZINK: vkEnumerateInstanceLayerProperties failed"); ++ if (!screen->implicitly_loaded) ++ mesa_loge("ZINK: vkEnumerateInstanceLayerProperties failed"); + } else { + VkLayerProperties *layer_props = malloc(layer_count * sizeof(VkLayerProperties)); + if (layer_props) { + if (vk_EnumerateInstanceLayerProperties(&layer_count, layer_props) != VK_SUCCESS) { +- mesa_loge("ZINK: vkEnumerateInstanceLayerProperties failed"); ++ if (!screen->implicitly_loaded) ++ mesa_loge("ZINK: vkEnumerateInstanceLayerProperties failed"); + } else { + for (uint32_t i = 0; i < layer_count; i++) { + %for layer in layers: +@@ -256,7 +260,8 @@ zink_create_instance(struct zink_screen + + VkResult err = vk_CreateInstance(&ici, NULL, &screen->instance); + if (err != VK_SUCCESS) { +- mesa_loge("ZINK: vkCreateInstance failed (%s)", vk_Result_to_str(err)); ++ if (!screen->implicitly_loaded) ++ mesa_loge("ZINK: vkCreateInstance failed (%s)", vk_Result_to_str(err)); + return false; + } + +Index: mesa-24.0.3/src/gallium/drivers/zink/zink_screen.c +=================================================================== +--- mesa-24.0.3.orig/src/gallium/drivers/zink/zink_screen.c ++++ mesa-24.0.3/src/gallium/drivers/zink/zink_screen.c +@@ -1606,7 +1606,8 @@ choose_pdev(struct zink_screen *screen, + VkPhysicalDevice *pdevs; + VkResult result = VKSCR(EnumeratePhysicalDevices)(screen->instance, &pdev_count, NULL); + if (result != VK_SUCCESS) { +- mesa_loge("ZINK: vkEnumeratePhysicalDevices failed (%s)", vk_Result_to_str(result)); ++ if (!screen->implicitly_loaded) ++ mesa_loge("ZINK: vkEnumeratePhysicalDevices failed (%s)", vk_Result_to_str(result)); + return; + } + +@@ -1614,7 +1615,8 @@ choose_pdev(struct zink_screen *screen, + + pdevs = malloc(sizeof(*pdevs) * pdev_count); + if (!pdevs) { +- mesa_loge("ZINK: failed to allocate pdevs!"); ++ if (!screen->implicitly_loaded) ++ mesa_loge("ZINK: failed to allocate pdevs!"); + return; + } + result = VKSCR(EnumeratePhysicalDevices)(screen->instance, &pdev_count, pdevs); +@@ -1641,7 +1643,8 @@ choose_pdev(struct zink_screen *screen, + unsigned pdev_count = 1; + VkResult result = VKSCR(EnumeratePhysicalDevices)(screen->instance, &pdev_count, &pdev); + if (result != VK_SUCCESS && result != VK_INCOMPLETE) { +- mesa_loge("ZINK: vkEnumeratePhysicalDevices failed (%s)", vk_Result_to_str(result)); ++ if (!screen->implicitly_loaded) ++ mesa_loge("ZINK: vkEnumeratePhysicalDevices failed (%s)", vk_Result_to_str(result)); + return; + } + screen->pdev = pdev; +@@ -3147,10 +3150,12 @@ zink_internal_create_screen(const struct + + struct zink_screen *screen = rzalloc(NULL, struct zink_screen); + if (!screen) { +- mesa_loge("ZINK: failed to allocate screen"); ++ if (!config->implicit_driver_load) ++ mesa_loge("ZINK: failed to allocate screen"); + return NULL; + } + ++ screen->implicitly_loaded = config->implicit_driver_load; + screen->drm_fd = -1; + + glsl_type_singleton_init_or_ref(); +@@ -3170,7 +3175,8 @@ zink_internal_create_screen(const struct + + screen->loader_lib = util_dl_open(VK_LIBNAME); + if (!screen->loader_lib) { +- mesa_loge("ZINK: failed to load "VK_LIBNAME); ++ if (!screen->implicitly_loaded) ++ mesa_loge("ZINK: failed to load "VK_LIBNAME); + goto fail; + } + +@@ -3178,7 +3184,8 @@ zink_internal_create_screen(const struct + screen->vk_GetDeviceProcAddr = (PFN_vkGetDeviceProcAddr)util_dl_get_proc_address(screen->loader_lib, "vkGetDeviceProcAddr"); + if (!screen->vk_GetInstanceProcAddr || + !screen->vk_GetDeviceProcAddr) { +- mesa_loge("ZINK: failed to get proc address"); ++ if (!screen->implicitly_loaded) ++ mesa_loge("ZINK: failed to get proc address"); + goto fail; + } + +@@ -3199,7 +3206,8 @@ zink_internal_create_screen(const struct + if (zink_debug & ZINK_DEBUG_VALIDATION) { + if (!screen->instance_info.have_layer_KHRONOS_validation && + !screen->instance_info.have_layer_LUNARG_standard_validation) { +- mesa_loge("Failed to load validation layer"); ++ if (!screen->implicitly_loaded) ++ mesa_loge("Failed to load validation layer"); + goto fail; + } + } +@@ -3214,12 +3222,15 @@ zink_internal_create_screen(const struct + zink_verify_instance_extensions(screen); + + if (screen->instance_info.have_EXT_debug_utils && +- (zink_debug & ZINK_DEBUG_VALIDATION) && !create_debug(screen)) +- debug_printf("ZINK: failed to setup debug utils\n"); ++ (zink_debug & ZINK_DEBUG_VALIDATION) && !create_debug(screen)) { ++ if (!screen->implicitly_loaded) ++ debug_printf("ZINK: failed to setup debug utils\n"); ++ } + + choose_pdev(screen, dev_major, dev_minor); + if (screen->pdev == VK_NULL_HANDLE) { +- mesa_loge("ZINK: failed to choose pdev"); ++ if (!screen->implicitly_loaded) ++ mesa_loge("ZINK: failed to choose pdev"); + goto fail; + } + screen->is_cpu = screen->info.props.deviceType == VK_PHYSICAL_DEVICE_TYPE_CPU; +@@ -3234,7 +3245,8 @@ zink_internal_create_screen(const struct + VK_FORMAT_D32_SFLOAT_S8_UINT); + + if (!zink_get_physical_device_info(screen)) { +- debug_printf("ZINK: failed to detect features\n"); ++ if (!screen->implicitly_loaded) ++ debug_printf("ZINK: failed to detect features\n"); + goto fail; + } + +@@ -3277,18 +3289,21 @@ zink_internal_create_screen(const struct + + setup_renderdoc(screen); + if (screen->threaded_submit && !util_queue_init(&screen->flush_queue, "zfq", 8, 1, UTIL_QUEUE_INIT_RESIZE_IF_FULL, screen)) { +- mesa_loge("zink: Failed to create flush queue.\n"); ++ if (!screen->implicitly_loaded) ++ mesa_loge("zink: Failed to create flush queue.\n"); + goto fail; + } + + zink_internal_setup_moltenvk(screen); + if (!screen->info.have_KHR_timeline_semaphore && !screen->info.feats12.timelineSemaphore) { +- mesa_loge("zink: KHR_timeline_semaphore is required"); ++ if (!screen->implicitly_loaded) ++ mesa_loge("zink: KHR_timeline_semaphore is required"); + goto fail; + } + if (zink_debug & ZINK_DEBUG_DGC) { + if (!screen->info.have_NV_device_generated_commands) { +- mesa_loge("zink: can't use DGC without NV_device_generated_commands"); ++ if (!screen->implicitly_loaded) ++ mesa_loge("zink: can't use DGC without NV_device_generated_commands"); + goto fail; + } + } +@@ -3404,14 +3419,16 @@ zink_internal_create_screen(const struct + if (!zink_screen_resource_init(&screen->base)) + goto fail; + if (!zink_bo_init(screen)) { +- mesa_loge("ZINK: failed to initialize suballocator"); ++ if (!screen->implicitly_loaded) ++ mesa_loge("ZINK: failed to initialize suballocator"); + goto fail; + } + zink_screen_fence_init(&screen->base); + + zink_screen_init_compiler(screen); + if (!disk_cache_init(screen)) { +- mesa_loge("ZINK: failed to initialize disk cache"); ++ if (!screen->implicitly_loaded) ++ mesa_loge("ZINK: failed to initialize disk cache"); + goto fail; + } + if (!util_queue_init(&screen->cache_get_thread, "zcfq", 8, 4, +@@ -3426,12 +3443,14 @@ zink_internal_create_screen(const struct + screen->total_video_mem = get_video_mem(screen); + screen->clamp_video_mem = screen->total_video_mem * 0.8; + if (!os_get_total_physical_memory(&screen->total_mem)) { +- mesa_loge("ZINK: failed to get total physical memory"); ++ if (!screen->implicitly_loaded) ++ mesa_loge("ZINK: failed to get total physical memory"); + goto fail; + } + + if (!zink_screen_init_semaphore(screen)) { +- mesa_loge("zink: failed to create timeline semaphore"); ++ if (!screen->implicitly_loaded) ++ mesa_loge("zink: failed to create timeline semaphore"); + goto fail; + } + +@@ -3439,35 +3458,40 @@ zink_internal_create_screen(const struct + { + if (!screen->info.have_EXT_descriptor_buffer) { + if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_DB) { +- mesa_loge("Cannot use db descriptor mode without EXT_descriptor_buffer"); ++ if (!screen->implicitly_loaded) ++ mesa_loge("Cannot use db descriptor mode without EXT_descriptor_buffer"); + goto fail; + } + can_db = false; + } + if (!screen->resizable_bar) { + if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_DB) { +- mesa_loge("Cannot use db descriptor mode without resizable bar"); ++ if (!screen->implicitly_loaded) ++ mesa_loge("Cannot use db descriptor mode without resizable bar"); + goto fail; + } + can_db = false; + } + if (!screen->info.have_EXT_non_seamless_cube_map) { + if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_DB) { +- mesa_loge("Cannot use db descriptor mode without EXT_non_seamless_cube_map"); ++ if (!screen->implicitly_loaded) ++ mesa_loge("Cannot use db descriptor mode without EXT_non_seamless_cube_map"); + goto fail; + } + can_db = false; + } + if (!screen->info.rb2_feats.nullDescriptor) { + if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_DB) { +- mesa_loge("Cannot use db descriptor mode without robustness2.nullDescriptor"); ++ if (!screen->implicitly_loaded) ++ mesa_loge("Cannot use db descriptor mode without robustness2.nullDescriptor"); + goto fail; + } + can_db = false; + } + if (ZINK_FBFETCH_DESCRIPTOR_SIZE < screen->info.db_props.inputAttachmentDescriptorSize) { + if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_DB) { +- mesa_loge("Cannot use db descriptor mode with inputAttachmentDescriptorSize(%u) > %u", (unsigned)screen->info.db_props.inputAttachmentDescriptorSize, ZINK_FBFETCH_DESCRIPTOR_SIZE); ++ if (!screen->implicitly_loaded) ++ mesa_loge("Cannot use db descriptor mode with inputAttachmentDescriptorSize(%u) > %u", (unsigned)screen->info.db_props.inputAttachmentDescriptorSize, ZINK_FBFETCH_DESCRIPTOR_SIZE); + goto fail; + } + mesa_logw("zink: bug detected: inputAttachmentDescriptorSize(%u) > %u", (unsigned)screen->info.db_props.inputAttachmentDescriptorSize, ZINK_FBFETCH_DESCRIPTOR_SIZE); +@@ -3526,12 +3550,14 @@ zink_internal_create_screen(const struct + zink_init_screen_pipeline_libs(screen); + + if (!init_layouts(screen)) { +- mesa_loge("ZINK: failed to initialize layouts"); ++ if (!screen->implicitly_loaded) ++ mesa_loge("ZINK: failed to initialize layouts"); + goto fail; + } + + if (!zink_descriptor_layouts_init(screen)) { +- mesa_loge("ZINK: failed to initialize descriptor layouts"); ++ if (!screen->implicitly_loaded) ++ mesa_loge("ZINK: failed to initialize descriptor layouts"); + goto fail; + } + +Index: mesa-24.0.3/src/gallium/drivers/zink/zink_types.h +=================================================================== +--- mesa-24.0.3.orig/src/gallium/drivers/zink/zink_types.h ++++ mesa-24.0.3/src/gallium/drivers/zink/zink_types.h +@@ -1408,6 +1408,7 @@ struct zink_screen { + bool is_cpu; + bool abort_on_hang; + bool frame_marker_emitted; ++ bool implicitly_loaded; + uint64_t curr_batch; //the current batch id + uint32_t last_finished; + VkSemaphore sem; diff --git a/Mesa.changes b/Mesa.changes index 809c2c6..3a18c89 100644 --- a/Mesa.changes +++ b/Mesa.changes @@ -1,3 +1,20 @@ +------------------------------------------------------------------- +Tue Mar 19 02:20:03 UTC 2024 - Stefan Dirsch + +- 0001-loader-delete-unused-param-from-pipe_loader_sw_probe.patch, + 0002-glx-fix-some-indentation.patch, + 0003-glx-add-an-implicit-param-to-createScreen.patch, + 0004-glx-pass-implicit-load-param-through-allocation.patch, + 0005-dri-plumb-a-implicit-param-through-createNewScreen-i.patch, + 0006-gbm-plumb-an-implicit-param-through-device-creation.patch, + 0007-frontends-dri-plumb-an-implicit-param-through-screen.patch, + 0008-pipe-loader-plumb-a-flag-for-implicit-driver-load-th.patch, + 0009-zink-don-t-print-error-messages-when-failing-an-impl.patch + * get rid of error message: + 'MESA: error: ZINK: vkEnumeratePhysicalDevices failed + (VK_ERROR_INITIALIZATION_FAILED)' + [gitlab mesa issue #10802] + ------------------------------------------------------------------- Tue Mar 19 02:10:26 UTC 2024 - Stefan Dirsch diff --git a/Mesa.spec b/Mesa.spec index b8d98d6..4b6c07f 100644 --- a/Mesa.spec +++ b/Mesa.spec @@ -147,6 +147,15 @@ Patch54: n_drirc-disable-rgb10-for-chromium-on-amd.patch Patch58: u_dep_xcb.patch Patch100: U_fix-mpeg1_2-decode-mesa-20.2.patch Patch400: n_stop-iris-flicker.patch +Patch501: 0001-loader-delete-unused-param-from-pipe_loader_sw_probe.patch +Patch502: 0002-glx-fix-some-indentation.patch +Patch503: 0003-glx-add-an-implicit-param-to-createScreen.patch +Patch504: 0004-glx-pass-implicit-load-param-through-allocation.patch +Patch505: 0005-dri-plumb-a-implicit-param-through-createNewScreen-i.patch +Patch506: 0006-gbm-plumb-an-implicit-param-through-device-creation.patch +Patch507: 0007-frontends-dri-plumb-an-implicit-param-through-screen.patch +Patch508: 0008-pipe-loader-plumb-a-flag-for-implicit-driver-load-th.patch +Patch509: 0009-zink-don-t-print-error-messages-when-failing-an-impl.patch %ifarch %{ix86} x86_64 BuildRequires: DirectX-Headers %endif @@ -768,6 +777,15 @@ rm -rf docs/README.{VMS,WIN32,OS2} %patch -P 58 -p1 %patch -P 100 -p1 %patch -P 400 -p1 +%patch -P 501 -p1 +%patch -P 502 -p1 +%patch -P 503 -p1 +%patch -P 504 -p1 +%patch -P 505 -p1 +%patch -P 506 -p1 +%patch -P 507 -p1 +%patch -P 508 -p1 +%patch -P 509 -p1 # Remove requires to vulkan libs from baselibs.conf on platforms # where vulkan build is disabled; ugly ... From 7f181a2b4d8a81292b7571fb73b2d494c5c6dc62d8eb2105d7c93858a9c6baa5 Mon Sep 17 00:00:00 2001 From: Stefan Dirsch Date: Tue, 19 Mar 2024 14:16:46 +0000 Subject: [PATCH 5/6] - 0010-glx-silence-more-implicit-load-zink-errors.patch * glx: silence more implicit-load zink errors [gitlab mesa issue #10802] OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/Mesa?expand=0&rev=1274 --- ...lence-more-implicit-load-zink-errors.patch | 50 +++++++++++++++++++ Mesa.changes | 6 +++ Mesa.spec | 2 + 3 files changed, 58 insertions(+) create mode 100644 0010-glx-silence-more-implicit-load-zink-errors.patch diff --git a/0010-glx-silence-more-implicit-load-zink-errors.patch b/0010-glx-silence-more-implicit-load-zink-errors.patch new file mode 100644 index 0000000..82e2a44 --- /dev/null +++ b/0010-glx-silence-more-implicit-load-zink-errors.patch @@ -0,0 +1,50 @@ +From 5e99f24ee7d4aa9ff5178f63a79a8a313c32e44d Mon Sep 17 00:00:00 2001 +From: Mike Blumenkrantz +Date: Tue, 19 Mar 2024 08:37:47 -0400 +Subject: [PATCH] glx: silence more implicit-load zink errors + +--- + src/glx/drisw_glx.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +Index: mesa-24.0.3/src/glx/drisw_glx.c +=================================================================== +--- mesa-24.0.3.orig/src/glx/drisw_glx.c ++++ mesa-24.0.3/src/glx/drisw_glx.c +@@ -980,7 +980,8 @@ driswCreateScreenDriver(int screen, stru + extensions, + &driver_configs, implicit, psc); + if (psc->driScreen == NULL) { +- ErrorMessageF("glx: failed to create drisw screen\n"); ++ if (!pdpyp->zink || !implicit) ++ ErrorMessageF("glx: failed to create drisw screen\n"); + goto handle_error; + } + +@@ -1049,7 +1050,8 @@ driswCreateScreenDriver(int screen, stru + glx_screen_cleanup(&psc->base); + free(psc); + +- CriticalErrorMessageF("failed to load driver: %s\n", driver); ++ if (pdpyp->zink == TRY_ZINK_YES && !implicit) ++ CriticalErrorMessageF("failed to load driver: %s\n", driver); + + return NULL; + } +Index: mesa-24.0.3/src/glx/glxclient.h +=================================================================== +--- mesa-24.0.3.orig/src/glx/glxclient.h ++++ mesa-24.0.3/src/glx/glxclient.h +@@ -133,6 +133,12 @@ struct __GLXDRIdrawableRec + int refcount; + }; + ++enum try_zink { ++ TRY_ZINK_NO, ++ TRY_ZINK_INFER, ++ TRY_ZINK_YES, ++}; ++ + /* + ** Function to create and DRI display data and initialize the display + ** dependent methods. diff --git a/Mesa.changes b/Mesa.changes index 3a18c89..cb5edb2 100644 --- a/Mesa.changes +++ b/Mesa.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Tue Mar 19 12:59:16 UTC 2024 - Stefan Dirsch + +- 0010-glx-silence-more-implicit-load-zink-errors.patch + * glx: silence more implicit-load zink errors [gitlab mesa issue #10802] + ------------------------------------------------------------------- Tue Mar 19 02:20:03 UTC 2024 - Stefan Dirsch diff --git a/Mesa.spec b/Mesa.spec index 4b6c07f..5a32bc5 100644 --- a/Mesa.spec +++ b/Mesa.spec @@ -156,6 +156,7 @@ Patch506: 0006-gbm-plumb-an-implicit-param-through-device-creation.patch Patch507: 0007-frontends-dri-plumb-an-implicit-param-through-screen.patch Patch508: 0008-pipe-loader-plumb-a-flag-for-implicit-driver-load-th.patch Patch509: 0009-zink-don-t-print-error-messages-when-failing-an-impl.patch +Patch510: 0010-glx-silence-more-implicit-load-zink-errors.patch %ifarch %{ix86} x86_64 BuildRequires: DirectX-Headers %endif @@ -786,6 +787,7 @@ rm -rf docs/README.{VMS,WIN32,OS2} %patch -P 507 -p1 %patch -P 508 -p1 %patch -P 509 -p1 +%patch -P 510 -p1 # Remove requires to vulkan libs from baselibs.conf on platforms # where vulkan build is disabled; ugly ... From 7babb9da1c90d630ede0a6b7f602bd65e6d63d0c80a1d0db387417e12faefd4d Mon Sep 17 00:00:00 2001 From: Stefan Dirsch Date: Wed, 20 Mar 2024 13:15:31 +0000 Subject: [PATCH 6/6] Accepting request 1159766 from home:Guillaume_G:branches:X11:XOrg - Add patch to fix boo#1221664: * mesa-fix-llvm18.patch OBS-URL: https://build.opensuse.org/request/show/1159766 OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/Mesa?expand=0&rev=1275 --- Mesa.changes | 6 ++++++ Mesa.spec | 5 ++++- mesa-fix-llvm18.patch | 47 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 mesa-fix-llvm18.patch diff --git a/Mesa.changes b/Mesa.changes index cb5edb2..aaf9714 100644 --- a/Mesa.changes +++ b/Mesa.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Wed Mar 20 07:18:13 UTC 2024 - Guillaume GARDET + +- Add patch to fix boo#1221664: + * mesa-fix-llvm18.patch + ------------------------------------------------------------------- Tue Mar 19 12:59:16 UTC 2024 - Stefan Dirsch diff --git a/Mesa.spec b/Mesa.spec index 5a32bc5..5277250 100644 --- a/Mesa.spec +++ b/Mesa.spec @@ -1,5 +1,5 @@ # -# spec file +# spec file for package Mesa # # Copyright (c) 2024 SUSE LLC # @@ -142,6 +142,8 @@ Patch11: u_0001-intel-genxml-Drop-from-__future__-import-annotations.patc Patch12: u_0002-intel-genxml-Add-a-untyped-OrderedDict-fallback-for-.patch Patch13: python36-buildfix1.patch Patch14: python36-buildfix2.patch +# PATCH-FIX-UPSTREAM - boo#1221664 +Patch15: mesa-fix-llvm18.patch # never to be upstreamed Patch54: n_drirc-disable-rgb10-for-chromium-on-amd.patch Patch58: u_dep_xcb.patch @@ -771,6 +773,7 @@ rm -rf docs/README.{VMS,WIN32,OS2} %if 0%{?suse_version} < 1550 %patch -P 14 -p1 %endif +%patch -P 15 -p1 # no longer needed since gstreamer-plugins-vaapi 1.18.4 %if 0%{?suse_version} < 1550 %patch -P 54 -p1 diff --git a/mesa-fix-llvm18.patch b/mesa-fix-llvm18.patch new file mode 100644 index 0000000..839f2f0 --- /dev/null +++ b/mesa-fix-llvm18.patch @@ -0,0 +1,47 @@ +From 99f0449987bec1f82cd42a06f40bb4a863a37792 Mon Sep 17 00:00:00 2001 +From: Nikita Popov +Date: Mon, 11 Mar 2024 14:45:41 +0100 +Subject: [PATCH] Pass no-verify-fixpoint option to instcombine in LLVM 18 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +When LLVM 18 is used, pass the no-verify-fixpoint option when +running the instcombine pass. Otherwise LLVM may abort with an +error. + +The background here is that this option is enabled by default for +testing purposes, because instcombine is normally only explicitly +invoked like this inside tests. If it is used in an actual +production pipeline, the no-verify-fixpoint option needs to be +enabled. + +This should fix the issue reported at +https://bugzilla.redhat.com/show_bug.cgi?id=2268800. + +Reviewed-by: Konstantin Seurer +Reviewed-by: Marek Olšák +Part-of: +--- + src/gallium/auxiliary/gallivm/lp_bld_init.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/gallium/auxiliary/gallivm/lp_bld_init.c b/src/gallium/auxiliary/gallivm/lp_bld_init.c +index cd2108f3a088d..1345d85b22439 100644 +--- a/src/gallium/auxiliary/gallivm/lp_bld_init.c ++++ b/src/gallium/auxiliary/gallivm/lp_bld_init.c +@@ -609,7 +609,11 @@ gallivm_compile_module(struct gallivm_state *gallivm) + LLVMRunPasses(gallivm->module, passes, LLVMGetExecutionEngineTargetMachine(gallivm->engine), opts); + + if (!(gallivm_perf & GALLIVM_PERF_NO_OPT)) ++#if LLVM_VERSION_MAJOR >= 18 ++ strcpy(passes, "sroa,early-cse,simplifycfg,reassociate,mem2reg,instsimplify,instcombine"); ++#else + strcpy(passes, "sroa,early-cse,simplifycfg,reassociate,mem2reg,instsimplify,instcombine"); ++#endif + else + strcpy(passes, "mem2reg"); + +-- +GitLab +