nir/opt_phi_precision: Fix missing swizzles when narrowing phi srcs.
This NIR:
vec4 32 ssa_169 = phi block_1: ssa_168, block_2: ssa_138
vec1 16 ssa_209 = f2fmp ssa_169.x
vec1 16 ssa_210 = f2fmp ssa_169.y
vec1 16 ssa_211 = f2fmp ssa_169.z
vec1 16 ssa_212 = f2fmp ssa_169.w
vec4 16 ssa_213 = vec4 ssa_209, ssa_210, ssa_211, ssa_212
intrinsic store_output (ssa_213, ssa_171) (base=0, wrmask=xyzw /*15*/, component=0, src_type=float16 /*144*/, io location=4 slots=1 mediump /*8388740*/, xfb() /*0*/, xfb2() /*0*/)
would turn into:
vec4 32 ssa_169 = phi block_1: ssa_168, block_2: ssa_138
vec4 16 ssa_216 = phi block_1: ssa_214, block_2: ssa_215
vec1 16 ssa_209 = f2fmp ssa_169.x
vec1 16 ssa_210 = f2fmp ssa_169.y
vec1 16 ssa_211 = f2fmp ssa_169.z
vec1 16 ssa_212 = f2fmp ssa_169.w
vec4 16 ssa_213 = vec4 ssa_216.x, ssa_216.x, ssa_216.x, ssa_216.x
intrinsic store_output (ssa_213, ssa_171) (base=0, wrmask=xyzw /*15*/, component=0, src_type=float16 /*144*/, io location=4 slots=1 mediump /*8388740*/, xfb() /*0*/, xfb2() /*0*/)
ignoring the swizzles from the f2fmp srcs. Fixes failures in
dEQP-GLES2.functional.shaders.random.all_features.fragment.20 on
turnip+ANGLE.
Fixes: c7b935962b
("nir: Add pass to lower phi precision")
Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19179>
This commit is contained in:
@@ -249,14 +249,12 @@ try_move_narrowing_dst(nir_builder *b, nir_phi_instr *phi)
|
||||
*/
|
||||
nir_foreach_use (use, &phi->dest.ssa) {
|
||||
/* We've previously established that all the uses were alu
|
||||
* conversion ops:
|
||||
* conversion ops. Turn them into movs instead.
|
||||
*/
|
||||
nir_alu_instr *alu = nir_instr_as_alu(use->parent_instr);
|
||||
|
||||
assert(alu->dest.dest.is_ssa);
|
||||
|
||||
nir_ssa_def_rewrite_uses(&alu->dest.dest.ssa, &new_phi->dest.ssa);
|
||||
alu->op = nir_op_mov;
|
||||
}
|
||||
nir_ssa_def_rewrite_uses(&phi->dest.ssa, &new_phi->dest.ssa);
|
||||
|
||||
/* And finally insert the new phi after all sources are in place: */
|
||||
b->cursor = nir_after_instr(&phi->instr);
|
||||
|
Reference in New Issue
Block a user