From 43d3451fdb9419d7eab5c2fff9e58d314521e62a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Tue, 24 Dec 2024 09:04:01 -0500 Subject: [PATCH] mesa: switch fixed-func vertex program to IO intrinsics Reviewed-by: Alyssa Rosenzweig Acked-by: Iago Toral Quiroga Part-of: --- src/broadcom/ci/traces-broadcom.yml | 4 +-- src/mesa/main/ffvertex_prog.c | 45 +++++++++++++---------------- 2 files changed, 22 insertions(+), 27 deletions(-) diff --git a/src/broadcom/ci/traces-broadcom.yml b/src/broadcom/ci/traces-broadcom.yml index c1470ad2d7f..e522ab84fde 100644 --- a/src/broadcom/ci/traces-broadcom.yml +++ b/src/broadcom/ci/traces-broadcom.yml @@ -198,9 +198,9 @@ traces: neverball/neverball-v2.trace: broadcom-rpi4: - checksum: c8e8ee352bdb303e4ed144b69272575e + checksum: 4f4b4b6f37c124fdda6a9efcad577257 broadcom-rpi5: - checksum: 56a0adb0efdf799f269da2d734a6817c + checksum: 174394638c6f774948e7aac91c12f84d nheko/nheko-colors.trace: broadcom-rpi4: diff --git a/src/mesa/main/ffvertex_prog.c b/src/mesa/main/ffvertex_prog.c index bcd3fb8dc30..2bb0543b119 100644 --- a/src/mesa/main/ffvertex_prog.c +++ b/src/mesa/main/ffvertex_prog.c @@ -348,22 +348,21 @@ load_state_mat4(struct tnl_program *p, nir_def *out[4], } static nir_def * -load_input(struct tnl_program *p, gl_vert_attrib attr, - const struct glsl_type *type) +load_input(struct tnl_program *p, gl_vert_attrib attr, unsigned num_components) { if (p->state->varying_vp_inputs & VERT_BIT(attr)) { - nir_variable *var = nir_get_variable_with_location(p->b->shader, nir_var_shader_in, - attr, type); - p->b->shader->info.inputs_read |= (uint64_t)VERT_BIT(attr); - return nir_load_var(p->b, var); - } else - return load_state_var(p, STATE_CURRENT_ATTRIB, attr, 0, 0, type); + return nir_load_input(p->b, num_components, 32, nir_imm_int(p->b, 0), + .io_semantics.location = attr); + } else { + return load_state_var(p, STATE_CURRENT_ATTRIB, attr, 0, 0, + glsl_vector_type(GLSL_TYPE_FLOAT, num_components)); + } } static nir_def * load_input_vec4(struct tnl_program *p, gl_vert_attrib attr) { - return load_input(p, attr, glsl_vec4_type()); + return load_input(p, attr, 4); } static nir_variable * @@ -377,12 +376,13 @@ register_output(struct tnl_program *p, gl_varying_slot slot, } static void -store_output_vec4_masked(struct tnl_program *p, gl_varying_slot slot, - nir_def *value, unsigned mask) +store_output_vec4_masked(struct tnl_program *p, gl_varying_slot slot, nir_def *value, + unsigned writemask) { - assert(mask <= 0xf); - nir_variable *var = register_output(p, slot, glsl_vec4_type()); - nir_store_var(p->b, var, value, mask); + assert(writemask <= 0xf); + nir_store_output(p->b, value, nir_imm_int(p->b, 0), + .write_mask = writemask, + .io_semantics.location = slot); } static void @@ -396,8 +396,7 @@ static void store_output_float(struct tnl_program *p, gl_varying_slot slot, nir_def *value) { - nir_variable *var = register_output(p, slot, glsl_float_type()); - nir_store_var(p->b, var, value, 0x1); + store_output_vec4_masked(p, slot, value, 0x1); } @@ -499,13 +498,9 @@ get_transformed_normal(struct tnl_program *p) !p->state->need_eye_coords && !p->state->normalize && !(p->state->need_eye_coords == p->state->rescale_normals)) { - p->transformed_normal = - load_input(p, VERT_ATTRIB_NORMAL, - glsl_vector_type(GLSL_TYPE_FLOAT, 3)); + p->transformed_normal = load_input(p, VERT_ATTRIB_NORMAL, 3); } else if (!p->transformed_normal) { - nir_def *normal = - load_input(p, VERT_ATTRIB_NORMAL, - glsl_vector_type(GLSL_TYPE_FLOAT, 3)); + nir_def *normal = load_input(p, VERT_ATTRIB_NORMAL, 3); if (p->state->need_eye_coords) { nir_def *mvinv[4]; @@ -1062,7 +1057,7 @@ static void build_fog( struct tnl_program *p ) fog = nir_fabs(p->b, get_eye_position_z(p)); break; case FDM_FROM_ARRAY: - fog = load_input(p, VERT_ATTRIB_FOG, glsl_float_type()); + fog = load_input(p, VERT_ATTRIB_FOG, 1); break; default: unreachable("Bad fog mode in build_fog()"); @@ -1271,8 +1266,7 @@ static void build_atten_pointsize( struct tnl_program *p ) */ static void build_array_pointsize( struct tnl_program *p ) { - nir_def *val = load_input(p, VERT_ATTRIB_POINT_SIZE, - glsl_float_type()); + nir_def *val = load_input(p, VERT_ATTRIB_POINT_SIZE, 1); store_output_float(p, VARYING_SLOT_PSIZ, val); } @@ -1335,6 +1329,7 @@ create_new_program( const struct state_key *key, nir_shader *s = b.shader; s->info.separate_shader = true; + s->info.io_lowered = true; p.b = &b;