From ab6cdd64c1dfa0f0888fa1434d3d0b70f24411dc Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 10 Mar 2026 22:25:22 -0400 Subject: [PATCH] lavapipe: VK_EXT_primitive_restart_index Part-of: --- docs/features.txt | 2 +- src/gallium/frontends/lavapipe/lvp_device.c | 4 ++++ src/gallium/frontends/lavapipe/lvp_execute.c | 11 +++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/docs/features.txt b/docs/features.txt index 6d0f5607f33..e5dc00ee8b5 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -666,7 +666,7 @@ Khronos extensions that are not part of any Vulkan version: VK_EXT_pipeline_library_group_handles DONE (anv, lvp, radv, vn) VK_EXT_post_depth_coverage DONE (anv/gfx11+, lvp, nvk, radv/gfx10+, tu, vn) VK_EXT_present_timing DONE (anv, hk, nvk, radv, tu, panvk) - VK_EXT_primitive_restart_index DONE (radv) + VK_EXT_primitive_restart_index DONE (lvp, radv) VK_EXT_primitive_topology_list_restart DONE (anv, hasvk, lvp, nvk, panvk, radv, tu, v3dv, vn, nvk) VK_EXT_primitives_generated_query DONE (anv, hasvk, lvp, nvk, radv, tu, vn) VK_EXT_provoking_vertex DONE (anv, hasvk, hk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn) diff --git a/src/gallium/frontends/lavapipe/lvp_device.c b/src/gallium/frontends/lavapipe/lvp_device.c index 9bf728072f1..4ce8fd7d9ec 100644 --- a/src/gallium/frontends/lavapipe/lvp_device.c +++ b/src/gallium/frontends/lavapipe/lvp_device.c @@ -274,6 +274,7 @@ static const struct vk_device_extension_table lvp_device_extensions_supported = .EXT_post_depth_coverage = true, .EXT_private_data = true, .EXT_primitives_generated_query = true, + .EXT_primitive_restart_index = true, .EXT_primitive_topology_list_restart = true, .EXT_rasterization_order_attachment_access = true, .EXT_queue_family_foreign = true, @@ -691,6 +692,9 @@ lvp_get_features(const struct lvp_physical_device *pdevice, .customBorderColors = true, .customBorderColorWithoutFormat = true, + /* VK_EXT_primitive_restart_index */ + .primitiveRestartIndex = true, + /* VK_EXT_color_write_enable */ .colorWriteEnable = true, diff --git a/src/gallium/frontends/lavapipe/lvp_execute.c b/src/gallium/frontends/lavapipe/lvp_execute.c index 779d83317f0..c231157e2d6 100644 --- a/src/gallium/frontends/lavapipe/lvp_execute.c +++ b/src/gallium/frontends/lavapipe/lvp_execute.c @@ -3705,6 +3705,12 @@ static void handle_set_primitive_restart_enable(struct vk_cmd_queue_entry *cmd, state->info.primitive_restart = cmd->u.set_primitive_restart_enable.primitive_restart_enable; } +static void handle_set_primitive_restart_index(struct vk_cmd_queue_entry *cmd, + struct rendering_state *state) +{ + state->info.restart_index = cmd->u.set_primitive_restart_index_ext.primitive_restart_index; +} + static void handle_set_rasterizer_discard_enable(struct vk_cmd_queue_entry *cmd, struct rendering_state *state) { @@ -5054,11 +5060,13 @@ void lvp_add_enqueue_cmd_entrypoints(struct vk_device_dispatch_table *disp) ENQUEUE_CMD(CmdTraceRaysKHR) ENQUEUE_CMD(CmdSetDepthBias2EXT) + ENQUEUE_CMD(CmdSetPrimitiveRestartIndexEXT) ENQUEUE_CMD(CmdSetSampleLocationsEnableEXT) ENQUEUE_CMD(CmdSetSampleLocationsEXT) ENQUEUE_CMD(CmdSetColorBlendAdvancedEXT) + #undef ENQUEUE_CMD } @@ -5484,6 +5492,9 @@ static void lvp_execute_cmd_buffer(struct list_head *cmds, case VK_CMD_SET_COLOR_BLEND_ADVANCED_EXT: handle_set_color_blend_advanced(cmd, state); break; + case VK_CMD_SET_PRIMITIVE_RESTART_INDEX_EXT: + handle_set_primitive_restart_index(cmd, state); + break; default: fprintf(stderr, "Unsupported command %s\n", vk_cmd_queue_type_names[cmd->type]); UNREACHABLE("Unsupported command");