From d17af98abc786d2b56a65c19a870fbca0390c788 Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Tue, 2 May 2023 20:44:16 +0300 Subject: [PATCH] anv: add support for VK_EXT_dynamic_rendering_unused_attachments MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: José Roberto de Souza Part-of: --- src/intel/vulkan/anv_device.c | 4 ++++ src/intel/vulkan/anv_pipeline.c | 12 ++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c index da9e05b9ced..b78db00a4fd 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -308,6 +308,7 @@ get_device_extensions(const struct anv_physical_device *device, #ifdef VK_USE_PLATFORM_DISPLAY_KHR .EXT_display_control = true, #endif + .EXT_dynamic_rendering_unused_attachments = true, .EXT_extended_dynamic_state = true, .EXT_extended_dynamic_state2 = true, .EXT_extended_dynamic_state3 = true, @@ -810,6 +811,9 @@ get_features(const struct anv_physical_device *pdevice, /* VK_KHR_ray_tracing_position_fetch */ .rayTracingPositionFetch = rt_enabled, + + /* VK_EXT_dynamic_rendering_unused_attachments */ + .dynamicRenderingUnusedAttachments = true, }; /* The new DOOM and Wolfenstein games require depthBounds without diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c index 986cca78770..0c9337b52e3 100644 --- a/src/intel/vulkan/anv_pipeline.c +++ b/src/intel/vulkan/anv_pipeline.c @@ -525,8 +525,16 @@ populate_mesh_prog_key(const struct anv_device *device, static uint32_t rp_color_mask(const struct vk_render_pass_state *rp) { - return (rp != NULL && rp->attachment_aspects != VK_IMAGE_ASPECT_METADATA_BIT) ? - ((1u << rp->color_attachment_count) - 1) : ((1u << MAX_RTS) - 1); + if (rp == NULL || rp->attachment_aspects == VK_IMAGE_ASPECT_METADATA_BIT) + return ((1u << MAX_RTS) - 1); + + uint32_t color_mask = 0; + for (uint32_t i = 0; i < rp->color_attachment_count; i++) { + if (rp->color_attachment_formats[i] != VK_FORMAT_UNDEFINED) + color_mask |= BITFIELD_BIT(i); + } + + return color_mask; } static void