pan/mdg: Vectorize vlut operations
total instructions in shared programs: 49462 -> 49458 (<.01%) instructions in affected programs: 348 -> 344 (-1.15%) helped: 2 HURT: 0 total bundles in shared programs: 25201 -> 25199 (<.01%) bundles in affected programs: 142 -> 140 (-1.41%) helped: 2 HURT: 0 total quadwords in shared programs: 40273 -> 40269 (<.01%) quadwords in affected programs: 244 -> 240 (-1.64%) helped: 2 HURT: 0 Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5513>
This commit is contained in:

committed by
Alyssa Rosenzweig

parent
c957249df9
commit
a6f0d7f003
@@ -1245,6 +1245,9 @@ emit_alu(compiler_context *ctx, nir_alu_instr *instr)
|
||||
unsigned swizzle_back[MIR_VEC_COMPONENTS];
|
||||
memcpy(&swizzle_back, ins.swizzle[0], sizeof(swizzle_back));
|
||||
|
||||
midgard_instruction ins_split[MIR_VEC_COMPONENTS];
|
||||
unsigned ins_count = 0;
|
||||
|
||||
for (int i = 0; i < nr_components; ++i) {
|
||||
/* Mask the associated component, dropping the
|
||||
* instruction if needed */
|
||||
@@ -1252,13 +1255,27 @@ emit_alu(compiler_context *ctx, nir_alu_instr *instr)
|
||||
ins.mask = 1 << i;
|
||||
ins.mask &= orig_mask;
|
||||
|
||||
for (unsigned j = 0; j < ins_count; ++j) {
|
||||
if (swizzle_back[i] == ins_split[j].swizzle[0][0]) {
|
||||
ins_split[j].mask |= ins.mask;
|
||||
ins.mask = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!ins.mask)
|
||||
continue;
|
||||
|
||||
for (unsigned j = 0; j < MIR_VEC_COMPONENTS; ++j)
|
||||
ins.swizzle[0][j] = swizzle_back[i]; /* Pull from the correct component */
|
||||
|
||||
emit_mir_instruction(ctx, ins);
|
||||
ins_split[ins_count] = ins;
|
||||
|
||||
++ins_count;
|
||||
}
|
||||
|
||||
for (unsigned i = 0; i < ins_count; ++i) {
|
||||
emit_mir_instruction(ctx, ins_split[i]);
|
||||
}
|
||||
} else {
|
||||
emit_mir_instruction(ctx, ins);
|
||||
|
Reference in New Issue
Block a user