zink: only do pre-sync transfer barrier after a renderpass

this is otherwise pointless and (for swapchain images) broken
(because they may never have acquired an image)

discovered by @valentine

cc: mesa-stable

(cherry picked from commit d47ba92d42)

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40092>
This commit is contained in:
Mike Blumenkrantz 2026-02-18 13:38:04 -05:00 committed by Eric Engestrom
parent 545509553a
commit 499a74569f
5 changed files with 4 additions and 68 deletions

View file

@ -2794,7 +2794,7 @@
"description": "zink: only do pre-sync transfer barrier after a renderpass",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": null,
"notes": null

View file

@ -1,6 +1,6 @@
# Please include a comment with the log message and a testcase triggering each
# VUID at the bottom of the file.
khronos_validation.message_id_filter = VUID-VkPhysicalDeviceProperties2-pNext-pNext,VUID-VkDeviceCreateInfo-pNext-pNext,VUID-RuntimeSpirv-Location-06272,VUID-vkCmdDrawMultiEXT-None-02699,VUID-RuntimeSpirv-OpEntryPoint-08743,VUID-vkCmdPipelineBarrier2-shaderTileImageColorReadAccess-08718,VUID-VkGraphicsPipelineCreateInfo-flags-06482,VUID-vkCmdPipelineBarrier2-None-08719,VUID-vkCmdDrawMultiEXT-rasterizationSamples-07474,VUID-vkDestroyDevice-device-05137,VUID-VkRectLayerKHR-offset-04864,VUID-vkAcquireNextImageKHR-semaphore-01779,VUID-vkQueueSubmit-pSignalSemaphores-00067,VUID-VkImageMemoryBarrier2-srcAccessMask-07454,UNASSIGNED-GeneralParameterError-RequiredHandle,VUID-VkImageMemoryBarrier2-image-parameter,VUID-vkCmdDrawMultiIndexedEXT-None-10909,VUID-VkDescriptorGetInfoEXT-type-12223,VUID-vkCmdDrawMultiEXT-dynamicRenderingUnusedAttachments-08911,VUID-vkCmdBlitImage-srcImageLayout-00221,VUID-VkRenderingAttachmentInfo-None-12256,VUID-vkCmdBeginRendering-pRenderingInfo-09592,VUID-vkCmdCopyImage-srcImageLayout-00128
khronos_validation.message_id_filter = VUID-VkPhysicalDeviceProperties2-pNext-pNext,VUID-VkDeviceCreateInfo-pNext-pNext,VUID-RuntimeSpirv-Location-06272,VUID-vkCmdDrawMultiEXT-None-02699,VUID-RuntimeSpirv-OpEntryPoint-08743,VUID-vkCmdPipelineBarrier2-shaderTileImageColorReadAccess-08718,VUID-VkGraphicsPipelineCreateInfo-flags-06482,VUID-vkCmdPipelineBarrier2-None-08719,VUID-vkCmdDrawMultiEXT-rasterizationSamples-07474,VUID-vkDestroyDevice-device-05137,VUID-VkRectLayerKHR-offset-04864,VUID-vkAcquireNextImageKHR-semaphore-01779,VUID-vkQueueSubmit-pSignalSemaphores-00067,VUID-VkImageMemoryBarrier2-srcAccessMask-07454,VUID-vkCmdDrawMultiIndexedEXT-None-10909,VUID-VkDescriptorGetInfoEXT-type-12223,VUID-vkCmdDrawMultiEXT-dynamicRenderingUnusedAttachments-08911,VUID-vkCmdBlitImage-srcImageLayout-00221,VUID-VkRenderingAttachmentInfo-None-12256,VUID-vkCmdBeginRendering-pRenderingInfo-09592,VUID-vkCmdCopyImage-srcImageLayout-00128
khronos_validation.report_flags = error
khronos_validation.debug_action = VK_DBG_LAYER_ACTION_LOG_MSG,VK_DBG_LAYER_ACTION_BREAK
VK_LAYER_ENABLES=VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT
@ -104,19 +104,6 @@ khronos_validation.log_filename = stdout
# Objects: 1
# [0] VkCommandBuffer 0x55da40ee59e0[zink barrier cmdbuf]
# dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds_non_robust.reset_status.reads.shader_storage_block.compute
#
# Validation Error: [ UNASSIGNED-GeneralParameterError-RequiredHandle ] | MessageID = 0x8fdcb17b
# vkCmdPipelineBarrier2(): pDependencyInfo->pImageMemoryBarriers[0].image is VK_NULL_HANDLE.
# Objects: 1
# [0] VkCommandBuffer 0x563b96845900[zink barrier cmdbuf]
# dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds.reset_status.reads.shader_storage_block.compute
#
# Validation Error: [ VUID-VkImageMemoryBarrier2-image-parameter ] | MessageID = 0xa2d5467b
# vkCmdPipelineBarrier2(): pDependencyInfo->pImageMemoryBarriers[0].image Invalid VkImage Object 0x0.
# The Vulkan spec states: image must be a valid VkImage handle (https://docs.vulkan.org/spec/latest/chapters/synchronization.html#VUID-VkImageMemoryBarrier2-image-parameter)
# dEQP-GLES31.functional.image_load_store.buffer.atomic.add_r32ui_result
#
# Validation Error: [ VUID-VkDescriptorGetInfoEXT-type-12223 ] | MessageID = 0x6c684094

View file

@ -27,43 +27,5 @@ wayland-dEQP-EGL.functional.resize.surface_size.stretch_height,Fail
wayland-dEQP-EGL.functional.resize.surface_size.stretch_width,Fail
# Turnip-specific failures
#
# Looks like zink doing things wrong, hits the following VVL errors:
# Validation Error: [ UNASSIGNED-GeneralParameterError-RequiredHandle ] | MessageID = 0x8fdcb17b
# vkCmdPipelineBarrier2(): pDependencyInfo->pImageMemoryBarriers[0].image is VK_NULL_HANDLE.
# Objects: 1
# [0] VkCommandBuffer 0x55cf2bb130[zink barrier cmdbuf]
#
# Validation Error: [ VUID-VkImageMemoryBarrier2-image-parameter ] | MessageID = 0xa2d5467b
# vkCmdPipelineBarrier2(): pDependencyInfo->pImageMemoryBarriers[0].image Invalid VkImage Object 0x0.
# The Vulkan spec states: image must be a valid VkImage handle (https://docs.vulkan.org/spec/latest/chapters/synchronization.html#VUID-VkImageMemoryBarrier2-image-parameter)
x11-dEQP-EGL.functional.fence_sync.valid.egl_fence_persistent_buffer,Crash
x11-dEQP-EGL.functional.image.modify.renderbuffer_depth16_renderbuffer_clear_depth,Fail
x11-dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds_non_robust.reset_status.reads.local_array.compute,Crash
x11-dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds_non_robust.reset_status.reads.shader_storage_block.compute,Crash
x11-dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds_non_robust.reset_status.reads.uniform_block.compute,Crash
x11-dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds_non_robust.reset_status.writes.local_array.compute,Crash
x11-dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds_non_robust.reset_status.writes.shader_storage_block.compute,Crash
x11-dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds_non_robust.reset_status.writes.uniform_block.compute,Crash
x11-dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds.reset_status.reads.local_array.compute,Crash
x11-dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds.reset_status.reads.shader_storage_block.compute,Crash
x11-dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds.reset_status.reads.uniform_block.compute,Crash
x11-dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds.reset_status.writes.local_array.compute,Crash
x11-dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds.reset_status.writes.shader_storage_block.compute,Crash
x11-dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds.reset_status.writes.uniform_block.compute,Crash
wayland-dEQP-EGL.functional.fence_sync.valid.egl_fence_persistent_buffer,Crash
wayland-dEQP-EGL.functional.image.modify.renderbuffer_depth16_renderbuffer_clear_depth,Fail
wayland-dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds_non_robust.reset_status.reads.local_array.compute,Crash
wayland-dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds_non_robust.reset_status.reads.shader_storage_block.compute,Crash
wayland-dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds_non_robust.reset_status.reads.uniform_block.compute,Crash
wayland-dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds_non_robust.reset_status.writes.local_array.compute,Crash
wayland-dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds_non_robust.reset_status.writes.shader_storage_block.compute,Crash
wayland-dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds_non_robust.reset_status.writes.uniform_block.compute,Crash
wayland-dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds.reset_status.reads.local_array.compute,Crash
wayland-dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds.reset_status.reads.shader_storage_block.compute,Crash
wayland-dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds.reset_status.reads.uniform_block.compute,Crash
wayland-dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds.reset_status.writes.local_array.compute,Crash
wayland-dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds.reset_status.writes.shader_storage_block.compute,Crash
wayland-dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds.reset_status.writes.uniform_block.compute,Crash
x11-dEQP-EGL.functional.color_clears.multi_thread.gles3.rgb888_window,Crash

View file

@ -1,6 +1,6 @@
# Please include a comment with the log message and a testcase triggering each
# VUID at the bottom of the file.
khronos_validation.message_id_filter = VUID-VkPhysicalDeviceProperties2-pNext-pNext,VUID-VkDeviceCreateInfo-pNext-pNext,VUID-vkDestroyDevice-device-05137,UNASSIGNED-Draw-primitiveTopologyPatchListRestart,VUID-vkQueueSubmit-pSignalSemaphores-00067,VUID-VkImageMemoryBarrier2-srcAccessMask-07454,UNASSIGNED-Threading-MultipleThreads-Read,VUID-vkAcquireNextImageKHR-semaphore-01779,VUID-VkSwapchainCreateInfoKHR-imageFormat-01273,VUID-VkRectLayerKHR-offset-04864,UNASSIGNED-Threading-MultipleThreads-Write,VUID-vkCmdDrawMultiIndexedEXT-None-10909,VUID-VkRenderingAttachmentInfo-None-12256,UNASSIGNED-GeneralParameterError-RequiredHandle,VUID-VkDescriptorGetInfoEXT-type-12223,VUID-VkImageMemoryBarrier2-image-parameter
khronos_validation.message_id_filter = VUID-VkPhysicalDeviceProperties2-pNext-pNext,VUID-VkDeviceCreateInfo-pNext-pNext,VUID-vkDestroyDevice-device-05137,UNASSIGNED-Draw-primitiveTopologyPatchListRestart,VUID-vkQueueSubmit-pSignalSemaphores-00067,VUID-VkImageMemoryBarrier2-srcAccessMask-07454,UNASSIGNED-Threading-MultipleThreads-Read,VUID-vkAcquireNextImageKHR-semaphore-01779,VUID-VkSwapchainCreateInfoKHR-imageFormat-01273,VUID-VkRectLayerKHR-offset-04864,UNASSIGNED-Threading-MultipleThreads-Write,VUID-vkCmdDrawMultiIndexedEXT-None-10909,VUID-VkRenderingAttachmentInfo-None-12256,VUID-VkDescriptorGetInfoEXT-type-12223
khronos_validation.report_flags = error
khronos_validation.debug_action = VK_DBG_LAYER_ACTION_LOG_MSG,VK_DBG_LAYER_ACTION_BREAK
VK_LAYER_ENABLES=VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT
@ -98,13 +98,6 @@ khronos_validation.log_filename = stdout
# Objects: 1
# [0] VkCommandBuffer 0xaaaae2a8e0d0[zink barrier cmdbuf]
# dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds_non_robust.reset_status.reads.uniform_block.compute
#
# Validation Error: [ UNASSIGNED-GeneralParameterError-RequiredHandle ] | MessageID = 0x8fdcb17b
# vkCmdPipelineBarrier2(): pDependencyInfo->pImageMemoryBarriers[0].image is VK_NULL_HANDLE.
# Objects: 1
# [0] VkCommandBuffer 0xaaaadfdbf4c0[zink barrier cmdbuf]
# dEQP-GLES3.functional.pbo.renderbuffer.rg16f_clears
#
# Validation Error: [ VUID-VkDescriptorGetInfoEXT-type-12223 ] | MessageID = 0x6c684094
@ -114,9 +107,3 @@ khronos_validation.log_filename = stdout
# The Vulkan spec states: If type is VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, pStorageTexelBuffer is not NULL and pStorageTexelBuffer->address is not zero, pStorageTexelBuffer->address must be a device address allocated to the application from a buffer created with the VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT usage flag set (https://docs.vulkan.org/spec/latest/chapters/descriptorsets.html#VUID-VkDescriptorGetInfoEXT-type-12223)
# Objects: 1
# [0] VkBuffer 0x24630000002463
# dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds_non_robust.reset_status.reads.uniform_block.compute
#
# Validation Error: [ VUID-VkImageMemoryBarrier2-image-parameter ] | MessageID = 0xa2d5467b
# vkCmdPipelineBarrier2(): pDependencyInfo->pImageMemoryBarriers[0].image Invalid VkImage Object 0x0.
# The Vulkan spec states: image must be a valid VkImage handle (https://docs.vulkan.org/spec/latest/chapters/synchronization.html#VUID-VkImageMemoryBarrier2-image-parameter)

View file

@ -3936,7 +3936,7 @@ unbind_fb_surface(struct zink_context *ctx, const struct pipe_surface *surf, uns
batch_ref_fb_surface(ctx, surf);
/* this is called just before the resource loses a reference, so a refcount==1 means the resource will be destroyed */
if (!res->fb_bind_count && res->base.b.reference.count > 1) {
if (ctx->track_renderpasses && !ctx->blitting) {
if (ctx->track_renderpasses && !ctx->blitting && res->obj->access & VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT) {
pre_sync_transfer_barrier(ctx, res, false);
}
if (!general_layout && res->sampler_bind_count[0]) {