mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 09:18:04 +02:00
nir: mark progress when removing trailing unused load_const channels
When the unused channels were at the end and so no reswizzling was needed, we wouldn't correctly mark the progress. Fixes:3305c960Signed-off-by: Pavel Ondračka <pavel.ondracka@gmail.com> Reviewed-by: Timur Kristóf <timur.kristof@gmail.com> Reviewed-by: Emma Anholt <emma@anholt.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21014> (cherry picked from commit7e6acfd587)
This commit is contained in:
parent
23336938ca
commit
8bb100fc02
3 changed files with 43 additions and 5 deletions
|
|
@ -4,7 +4,7 @@
|
|||
"description": "nir: mark progress when removing trailing unused load_const channels",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": "3305c9602df65d08f586ee520de9d8f0c46b14f5"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -330,13 +330,16 @@ opt_shrink_vectors_load_const(nir_load_const_instr *instr)
|
|||
}
|
||||
}
|
||||
|
||||
unsigned rounded = round_up_components(num_components);
|
||||
assert(rounded <= def->num_components);
|
||||
|
||||
def->num_components = rounded;
|
||||
if (progress)
|
||||
reswizzle_alu_uses(def, reswizzle);
|
||||
|
||||
unsigned rounded = round_up_components(num_components);
|
||||
assert(rounded <= def->num_components);
|
||||
if (rounded < def->num_components)
|
||||
progress = true;
|
||||
|
||||
def->num_components = rounded;
|
||||
|
||||
return progress;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -84,6 +84,41 @@ static void check_swizzle(nir_alu_src * src, const char * swizzle)
|
|||
}
|
||||
}
|
||||
|
||||
TEST_F(nir_opt_shrink_vectors_test, opt_shrink_vectors_load_const_trailing_component_only)
|
||||
{
|
||||
/* Test that opt_shrink_vectors correctly removes unused trailing channels
|
||||
* of load_const.
|
||||
*
|
||||
* vec4 32 ssa_1 = load_const (1.0, 2.0, 3.0, 4.0)
|
||||
* vec1 32 ssa_2 = fmov ssa_1.x
|
||||
*
|
||||
* to
|
||||
*
|
||||
* vec1 32 ssa_1 = load_const (1.0)
|
||||
* vec1 32 ssa_2 = fmov ssa_1.x
|
||||
*/
|
||||
|
||||
nir_ssa_def *imm_vec = nir_imm_vec4(&bld, 1.0, 2.0, 3.0, 4.0);
|
||||
|
||||
nir_ssa_def *alu_result = nir_build_alu1(&bld, nir_op_mov, imm_vec);
|
||||
nir_alu_instr *alu_instr = nir_instr_as_alu(alu_result->parent_instr);
|
||||
set_swizzle(&alu_instr->src[0], "x");
|
||||
alu_result->num_components = 1;
|
||||
alu_instr->dest.write_mask = BITFIELD_MASK(1);
|
||||
|
||||
nir_store_var(&bld, out_var, alu_result, 1);
|
||||
|
||||
ASSERT_TRUE(nir_opt_shrink_vectors(bld.shader));
|
||||
|
||||
nir_validate_shader(bld.shader, NULL);
|
||||
|
||||
ASSERT_TRUE(imm_vec->num_components == 1);
|
||||
nir_load_const_instr * imm_vec_instr = nir_instr_as_load_const(imm_vec->parent_instr);
|
||||
ASSERT_TRUE(nir_const_value_as_float(imm_vec_instr->value[0], 32) == 1.0);
|
||||
|
||||
ASSERT_FALSE(nir_opt_shrink_vectors(bld.shader));
|
||||
}
|
||||
|
||||
TEST_F(nir_opt_shrink_vectors_test, opt_shrink_vectors_alu_trailing_component_only)
|
||||
{
|
||||
/* Test that opt_shrink_vectors correctly removes unused trailing channels
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue