From efe1926cf0aa00b8268ac305f2ff62f8fc8fa996 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 7 Oct 2025 11:47:08 -0400 Subject: [PATCH] zink: stop using vk lazy allocations / transient attachments this doesn't actually work since it uses multiple renderpasses to do the replicate operation cc: mesa-stable Part-of: --- src/gallium/drivers/zink/zink_resource.c | 32 +++++++++++------------- 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c index ae76e572ebd..7371c72e1b5 100644 --- a/src/gallium/drivers/zink/zink_resource.c +++ b/src/gallium/drivers/zink/zink_resource.c @@ -414,28 +414,27 @@ get_image_usage_for_feats(struct zink_screen *screen, VkFormatFeatureFlags2 feat *need_extended = false; if (bind & ZINK_BIND_TRANSIENT) - usage |= VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT; - else { - /* sadly, gallium doesn't let us know if it'll ever need this, so we have to assume */ - if (is_planar || (feats & VK_FORMAT_FEATURE_TRANSFER_SRC_BIT)) - usage |= VK_IMAGE_USAGE_TRANSFER_SRC_BIT; - if (is_planar || (feats & VK_FORMAT_FEATURE_TRANSFER_DST_BIT)) - usage |= VK_IMAGE_USAGE_TRANSFER_DST_BIT; - if (feats & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT) - usage |= VK_IMAGE_USAGE_SAMPLED_BIT; + return util_format_is_depth_or_stencil(templ->format) ? VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT : VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; - if ((is_planar || (feats & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)) && (bind & PIPE_BIND_SHADER_IMAGE)) { - assert(templ->nr_samples <= 1 || screen->info.feats.features.shaderStorageImageMultisample); - usage |= VK_IMAGE_USAGE_STORAGE_BIT; - } + /* sadly, gallium doesn't let us know if it'll ever need this, so we have to assume */ + if (is_planar || (feats & VK_FORMAT_FEATURE_TRANSFER_SRC_BIT)) + usage |= VK_IMAGE_USAGE_TRANSFER_SRC_BIT; + if (is_planar || (feats & VK_FORMAT_FEATURE_TRANSFER_DST_BIT)) + usage |= VK_IMAGE_USAGE_TRANSFER_DST_BIT; + if (feats & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT) + usage |= VK_IMAGE_USAGE_SAMPLED_BIT; + + if ((is_planar || (feats & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)) && (bind & PIPE_BIND_SHADER_IMAGE)) { + assert(templ->nr_samples <= 1 || screen->info.feats.features.shaderStorageImageMultisample); + usage |= VK_IMAGE_USAGE_STORAGE_BIT; } if (bind & PIPE_BIND_RENDER_TARGET) { if (feats & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT) { usage |= VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; - if (!(bind & ZINK_BIND_TRANSIENT) && (bind & (PIPE_BIND_LINEAR | PIPE_BIND_SHARED)) != (PIPE_BIND_LINEAR | PIPE_BIND_SHARED)) + if ((bind & (PIPE_BIND_LINEAR | PIPE_BIND_SHARED)) != (PIPE_BIND_LINEAR | PIPE_BIND_SHARED)) usage |= VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT; - if (!(bind & ZINK_BIND_TRANSIENT) && screen->info.have_EXT_attachment_feedback_loop_layout) + if (screen->info.have_EXT_attachment_feedback_loop_layout) usage |= VK_IMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT; } else { /* trust that gallium isn't going to give us anything wild */ @@ -1096,9 +1095,6 @@ update_alloc_info_flags(struct zink_screen *screen, const struct pipe_resource * templ->usage == PIPE_USAGE_STAGING) alloc_info->flags |= VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT; - if (templ->bind & ZINK_BIND_TRANSIENT) - alloc_info->flags |= VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT; - if (alloc_info->user_mem) { VkExternalMemoryHandleTypeFlagBits handle_type = VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT; VkMemoryHostPointerPropertiesEXT memory_host_pointer_properties = {0};