From 055aec542efaa9a3a86dfb4fa4f1c0360176ca5a Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 6 Feb 2026 11:12:45 -0500 Subject: [PATCH] zink: use maintenance10 info for DRLR optimization idk where the original version of this went? Part-of: --- src/gallium/drivers/zink/VP_ZINK_requirements.json | 4 ++++ src/gallium/drivers/zink/ci/traces-zink.yml | 2 +- src/gallium/drivers/zink/zink_context.c | 14 ++++++++++++++ src/gallium/drivers/zink/zink_device_info.py | 3 +++ src/gallium/drivers/zink/zink_types.h | 1 + 5 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/zink/VP_ZINK_requirements.json b/src/gallium/drivers/zink/VP_ZINK_requirements.json index d8871b8e698..a3f1c0b7768 100644 --- a/src/gallium/drivers/zink/VP_ZINK_requirements.json +++ b/src/gallium/drivers/zink/VP_ZINK_requirements.json @@ -408,6 +408,7 @@ "VK_KHR_maintenance6": 1, "VK_KHR_maintenance7": 1, "VK_KHR_maintenance8": 1, + "VK_KHR_maintenance10": 1, "VK_KHR_shader_float_controls2": 1 }, "features": { @@ -459,6 +460,9 @@ }, "VkPhysicalDeviceMaintenance8FeaturesKHR": { "maintenance8": true + }, + "VkPhysicalDeviceMaintenance10FeaturesKHR": { + "maintenance10": true } }, "properties": { diff --git a/src/gallium/drivers/zink/ci/traces-zink.yml b/src/gallium/drivers/zink/ci/traces-zink.yml index 3f1d00aa94d..5581a578590 100644 --- a/src/gallium/drivers/zink/ci/traces-zink.yml +++ b/src/gallium/drivers/zink/ci/traces-zink.yml @@ -181,7 +181,7 @@ traces: gl-zink-anv-tgl: checksum: 68f20f660b9d812083066342398fe1b0 zink-radv-vangogh: - checksum: 0ac0c9af59e9f269bdef3af1f903d49c + checksum: 12a801d2fb5458c76101af537f98dadb zink-radv-gfx1201: checksum: 0ac0c9af59e9f269bdef3af1f903d49c diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index a1b0880d55d..cea4a9fbeb4 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -2862,6 +2862,7 @@ zink_update_fbfetch(struct zink_context *ctx) ctx->di.fbfetch.imageLayout = VK_IMAGE_LAYOUT_UNDEFINED; ctx->di.fbfetch.imageView = VK_NULL_HANDLE; ctx->invalidate_descriptor_state(ctx, MESA_SHADER_FRAGMENT, ZINK_DESCRIPTOR_TYPE_UBO, 0, 1); + ctx->dynamic_fb.flags[0].flags &= ~VK_RENDERING_ATTACHMENT_INPUT_ATTACHMENT_FEEDBACK_BIT_KHR; return true; } @@ -2878,8 +2879,10 @@ zink_update_fbfetch(struct zink_context *ctx) bool fbfetch_ms = ctx->fb_state.cbufs[0].texture->nr_samples > 1; if (zink_get_fs_base_key(ctx)->fbfetch_ms != fbfetch_ms) zink_set_fs_base_key(ctx)->fbfetch_ms = fbfetch_ms; + ctx->dynamic_fb.flags[0].flags |= VK_RENDERING_ATTACHMENT_INPUT_ATTACHMENT_FEEDBACK_BIT_KHR; } else { ctx->di.fbfetch.imageView = VK_NULL_HANDLE; + ctx->dynamic_fb.flags[0].flags &= ~VK_RENDERING_ATTACHMENT_INPUT_ATTACHMENT_FEEDBACK_BIT_KHR; } bool ret = false; ctx->di.fbfetch.imageLayout = VK_IMAGE_LAYOUT_GENERAL; @@ -5799,6 +5802,17 @@ zink_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags) VK_FALSE }; } + if (screen->info.have_KHR_maintenance10) { + ctx->dynamic_fb.info.flags = VK_RENDERING_LOCAL_READ_CONCURRENT_ACCESS_CONTROL_BIT_KHR; + for (unsigned i = 0; i < ARRAY_SIZE(ctx->dynamic_fb.flags); i++) { + ctx->dynamic_fb.flags[i] = (VkRenderingAttachmentFlagsInfoKHR){ + VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_FLAGS_INFO_KHR, + ctx->dynamic_fb.attachments[i].pNext, + 0 + }; + ctx->dynamic_fb.attachments[i].pNext = &ctx->dynamic_fb.flags[i]; + } + } ctx->gfx_pipeline_state.rendering_info.sType = VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO; ctx->gfx_pipeline_state.rendering_info.pColorAttachmentFormats = ctx->gfx_pipeline_state.rendering_formats; diff --git a/src/gallium/drivers/zink/zink_device_info.py b/src/gallium/drivers/zink/zink_device_info.py index 9b5b6f5e2fa..01446686fa6 100644 --- a/src/gallium/drivers/zink/zink_device_info.py +++ b/src/gallium/drivers/zink/zink_device_info.py @@ -81,6 +81,9 @@ EXTENSIONS = [ Extension("VK_KHR_maintenance9", alias="maint9", features=True, properties=True), + Extension("VK_KHR_maintenance10", + alias="maint10", + features=True, properties=True), Extension("VK_KHR_unified_image_layouts", alias="unified_layouts", features=True), Extension("VK_KHR_external_memory"), Extension("VK_KHR_external_memory_fd"), diff --git a/src/gallium/drivers/zink/zink_types.h b/src/gallium/drivers/zink/zink_types.h index cf39e440eae..76857db2bbf 100644 --- a/src/gallium/drivers/zink/zink_types.h +++ b/src/gallium/drivers/zink/zink_types.h @@ -1806,6 +1806,7 @@ struct zink_context { VkRenderingInfo info; struct tc_renderpass_info tc_info; VkAttachmentFeedbackLoopInfoEXT fbfetch_att[PIPE_MAX_COLOR_BUFS + 2]; //+depth, +stencil + VkRenderingAttachmentFlagsInfoKHR flags[PIPE_MAX_COLOR_BUFS + 2]; //+depth, +stencil } dynamic_fb; uint32_t fb_layer_mismatch; //bitmask struct set rendering_state_cache[6]; //[util_logbase2_ceil(msrtss samplecount)]