mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-03 02:50:16 +01:00
nir: introduce instance_index system value
The semantics of this newly introduced system value match Vulkan's InstanceIndex exactly, and are equivalent to instance_id + base_instance. Some hardware, such as Mali Valhall or later, only provides instance id offset by base_instance. Introducing a new system value to represent this, rather than handling the mismatch when lowering to BIR lets us use NIR to eliminate redundant arithmetic that would follow from mismatched semantics, e.g. instance_id could be lowered to instance_index - base_instance, so expressions such as instance_id + base_instance would be optimized to a simple instance_index. Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32158>
This commit is contained in:
parent
2f13723c0a
commit
b9be1f1f20
4 changed files with 4 additions and 0 deletions
|
|
@ -452,6 +452,7 @@ visit_intrinsic(nir_intrinsic_instr *instr, struct divergence_state *state)
|
|||
is_divergent |= !(options & nir_divergence_single_prim_per_subgroup);
|
||||
break;
|
||||
case nir_intrinsic_load_instance_id:
|
||||
case nir_intrinsic_load_instance_index:
|
||||
is_divergent = !state->vertex_divergence;
|
||||
break;
|
||||
case nir_intrinsic_load_primitive_id:
|
||||
|
|
|
|||
|
|
@ -658,6 +658,7 @@ gather_intrinsic_info(nir_intrinsic_instr *instr, nir_shader *shader,
|
|||
case nir_intrinsic_load_subgroup_id:
|
||||
case nir_intrinsic_load_vertex_id:
|
||||
case nir_intrinsic_load_instance_id:
|
||||
case nir_intrinsic_load_instance_index:
|
||||
case nir_intrinsic_load_vertex_id_zero_base:
|
||||
case nir_intrinsic_load_base_vertex:
|
||||
case nir_intrinsic_load_first_vertex:
|
||||
|
|
|
|||
|
|
@ -891,6 +891,7 @@ system_value("first_vertex", 1)
|
|||
system_value("is_indexed_draw", 1)
|
||||
system_value("base_vertex", 1)
|
||||
system_value("instance_id", 1)
|
||||
system_value("instance_index", 1)
|
||||
system_value("base_instance", 1)
|
||||
system_value("draw_id", 1)
|
||||
system_value("sample_id", 1)
|
||||
|
|
|
|||
|
|
@ -166,6 +166,7 @@ block_check_for_allowed_instrs(nir_block *block, unsigned *count,
|
|||
case nir_intrinsic_load_first_vertex:
|
||||
case nir_intrinsic_load_base_instance:
|
||||
case nir_intrinsic_load_instance_id:
|
||||
case nir_intrinsic_load_instance_index:
|
||||
case nir_intrinsic_load_draw_id:
|
||||
case nir_intrinsic_load_num_workgroups:
|
||||
case nir_intrinsic_load_workgroup_id:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue