* index out of our vertex id here.
* for ARB_shader_draw_parameters, base_vertex should be 0 for non-indexed draws.
*/
- LLVMValueRef base_vertex = lp_build_select(&bld, have_elts, vertex_id_offset, lp_build_const_int32(gallivm, 0));;
+ LLVMValueRef base_vertex = lp_build_select(&bld, have_elts, vertex_id_offset, lp_build_const_int32(gallivm, 0));
system_values.basevertex = lp_build_broadcast_scalar(&blduivec, base_vertex);
+ /* first vertex is for Vulkan base vertex support */
+ LLVMValueRef first_vertex = lp_build_select(&bld, have_elts, vertex_id_offset, start_or_maxelt);
+ system_values.firstvertex = lp_build_broadcast_scalar(&blduivec, first_vertex);
system_values.vertex_id = true_index_array;
system_values.vertex_id_nobase = LLVMBuildSub(builder, true_index_array,
lp_build_broadcast_scalar(&blduivec, vertex_id_offset), "");
case nir_intrinsic_load_instance_id:
case nir_intrinsic_load_base_instance:
case nir_intrinsic_load_base_vertex:
+ case nir_intrinsic_load_first_vertex:
case nir_intrinsic_load_work_group_id:
case nir_intrinsic_load_local_invocation_id:
case nir_intrinsic_load_num_work_groups:
case nir_intrinsic_load_base_vertex:
result[0] = bld->system_values.basevertex;
break;
+ case nir_intrinsic_load_first_vertex:
+ result[0] = bld->system_values.firstvertex;
+ break;
case nir_intrinsic_load_vertex_id:
result[0] = bld->system_values.vertex_id;
break;