From 744a961e1502a22486bb90276aa251c478cfa09a Mon Sep 17 00:00:00 2001 From: spencer-lunarg Date: Sun, 9 Nov 2025 13:40:59 -0500 Subject: [PATCH] lavapipe: Add VK_KHR_copy_memory_indirect formats Add VK_FORMAT_FEATURE_2_COPY_IMAGE_INDIRECT_DST_BIT_KHR tested with dEQP-VK.api.copy_and_blit.copy_memory_indirect* dEQP-VK.api.copy_and_blit.core.memory_to_depthstencil_indirect* dEQP-VK.api.copy_and_blit.core.memory_to_image_indirect* dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer.2d_images.mip*indirect Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/13989 Signed-off-by: spencer-lunarg Reviewed-by: Konstantin Seurer Part-of: --- src/gallium/frontends/lavapipe/lvp_formats.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/gallium/frontends/lavapipe/lvp_formats.c b/src/gallium/frontends/lavapipe/lvp_formats.c index a305d5f5a1b..822bbcffab3 100644 --- a/src/gallium/frontends/lavapipe/lvp_formats.c +++ b/src/gallium/frontends/lavapipe/lvp_formats.c @@ -87,7 +87,8 @@ lvp_physical_device_get_format_properties(struct lvp_physical_device *physical_d VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT | VK_FORMAT_FEATURE_2_BLIT_SRC_BIT | VK_FORMAT_FEATURE_2_BLIT_DST_BIT | VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT | - VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT); + VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT | + VK_FORMAT_FEATURE_2_COPY_IMAGE_INDIRECT_DST_BIT_KHR); if (lvp_is_filter_minmax_format_supported(format)) out_properties->optimalTilingFeatures |= @@ -104,7 +105,8 @@ lvp_physical_device_get_format_properties(struct lvp_physical_device *physical_d VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT | VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT | - VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT_EXT); + VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT_EXT | + VK_FORMAT_FEATURE_2_COPY_IMAGE_INDIRECT_DST_BIT_KHR); } out_properties->linearTilingFeatures = features; out_properties->optimalTilingFeatures = features; @@ -189,7 +191,8 @@ lvp_physical_device_get_format_properties(struct lvp_physical_device *physical_d if (features && buffer_features != VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT) { features |= (VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT | - VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT); + VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT | + VK_FORMAT_FEATURE_2_COPY_IMAGE_INDIRECT_DST_BIT_KHR); } if (pformat == PIPE_FORMAT_B5G6R5_UNORM) { features |= (VK_FORMAT_FEATURE_2_BLIT_SRC_BIT |