lavapipe: VK_EXT_primitive_restart_index

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40783>
This commit is contained in:
Mike Blumenkrantz 2026-03-10 22:25:22 -04:00
parent 88fd02daae
commit ab6cdd64c1
3 changed files with 16 additions and 1 deletions

View file

@ -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)

View file

@ -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,

View file

@ -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");