From 447ac6d6c6436a653a34cdbfe88b4da06b2151f7 Mon Sep 17 00:00:00 2001 From: Lucas Stach Date: Sat, 10 Aug 2024 00:27:42 +0200 Subject: [PATCH] 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 Reviewed-by: Christian Gmeiner Part-of: --- src/gallium/drivers/etnaviv/etnaviv_compiler.c | 1 - src/gallium/drivers/etnaviv/etnaviv_compiler_nir.c | 2 ++ src/gallium/drivers/etnaviv/etnaviv_compiler_nir.h | 1 + src/gallium/drivers/etnaviv/etnaviv_compiler_nir_liveness.c | 3 ++- src/gallium/drivers/etnaviv/etnaviv_compiler_nir_ra.c | 3 +++ 5 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/etnaviv/etnaviv_compiler.c b/src/gallium/drivers/etnaviv/etnaviv_compiler.c index 88ccb3b243c..18337823d30 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_compiler.c +++ b/src/gallium/drivers/etnaviv/etnaviv_compiler.c @@ -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, diff --git a/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.c b/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.c index 6245d79827c..16284ae0362 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.c +++ b/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.c @@ -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: diff --git a/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.h b/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.h index 273243c2304..37785922082 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.h +++ b/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.h @@ -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; diff --git a/src/gallium/drivers/etnaviv/etnaviv_compiler_nir_liveness.c b/src/gallium/drivers/etnaviv/etnaviv_compiler_nir_liveness.c index 38bbde43dd3..80dc35081f4 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_compiler_nir_liveness.c +++ b/src/gallium/drivers/etnaviv/etnaviv_compiler_nir_liveness.c @@ -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; } diff --git a/src/gallium/drivers/etnaviv/etnaviv_compiler_nir_ra.c b/src/gallium/drivers/etnaviv/etnaviv_compiler_nir_ra.c index bf044733e17..52e08179414 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_compiler_nir_ra.c +++ b/src/gallium/drivers/etnaviv/etnaviv_compiler_nir_ra.c @@ -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; }