etnaviv: wire up missing gl_VertexID bits

While some bits for gl_VertexID were already present in the
compiler, it was still missing in lots of cases. Wire those
up to make gl_VertexID usable.

Fixes piglit spec@!opengl es 3.0@gl_vertexid.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Reviewed-by: Christian Gmeiner <cgmeiner@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30604>
This commit is contained in:
Lucas Stach
2024-08-10 00:27:42 +02:00
committed by Marge Bot
parent 63112e79ac
commit 447ac6d6c6
5 changed files with 8 additions and 2 deletions

View File

@@ -51,7 +51,6 @@ etna_compiler_create(const char *renderer, const struct etna_core_info *info)
.lower_mul_high = true,
.lower_bitops = true,
.lower_all_io_to_temps = true,
.vertex_id_zero_based = true,
.lower_flrp32 = true,
.lower_fmod = true,
.lower_vector_cmp = true,

View File

@@ -365,6 +365,7 @@ get_src(struct etna_compile *c, nir_src *src)
switch (intr->intrinsic) {
case nir_intrinsic_load_input:
case nir_intrinsic_load_instance_id:
case nir_intrinsic_load_vertex_id:
case nir_intrinsic_load_uniform:
case nir_intrinsic_load_ubo:
case nir_intrinsic_load_reg:
@@ -608,6 +609,7 @@ emit_intrinsic(struct etna_compile *c, nir_intrinsic_instr * intr)
break;
case nir_intrinsic_load_input:
case nir_intrinsic_load_instance_id:
case nir_intrinsic_load_vertex_id:
case nir_intrinsic_load_texture_scale:
case nir_intrinsic_load_texture_size_etna:
case nir_intrinsic_decl_reg:

View File

@@ -294,6 +294,7 @@ def_for_instr(nir_instr *instr)
intr->intrinsic == nir_intrinsic_load_ubo ||
intr->intrinsic == nir_intrinsic_load_input ||
intr->intrinsic == nir_intrinsic_load_instance_id ||
intr->intrinsic == nir_intrinsic_load_vertex_id ||
intr->intrinsic == nir_intrinsic_load_texture_scale ||
intr->intrinsic == nir_intrinsic_load_texture_size_etna)
def = &intr->def;

View File

@@ -145,7 +145,8 @@ etna_live_defs(nir_function_impl *impl, struct live_def *defs, unsigned *live_ma
if (instr->type == nir_instr_type_intrinsic) {
nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr);
if (intr->intrinsic == nir_intrinsic_load_input ||
intr->intrinsic == nir_intrinsic_load_instance_id)
intr->intrinsic == nir_intrinsic_load_instance_id ||
intr->intrinsic == nir_intrinsic_load_vertex_id)
defs[state.num_defs].live_start = 0;
}

View File

@@ -215,6 +215,9 @@ etna_ra_assign(struct etna_compile *c, nir_shader *shader)
case nir_intrinsic_load_instance_id:
reg = c->variant->infile.num_reg * NUM_REG_TYPES + REG_TYPE_VIRT_SCALAR_Y;
break;
case nir_intrinsic_load_vertex_id:
reg = c->variant->infile.num_reg * NUM_REG_TYPES + REG_TYPE_VIRT_SCALAR_X;
break;
default:
continue;
}