diff --git a/src/nouveau/compiler/nak_from_nir.rs b/src/nouveau/compiler/nak_from_nir.rs index 4ae7f28940c..98adffea9eb 100644 --- a/src/nouveau/compiler/nak_from_nir.rs +++ b/src/nouveau/compiler/nak_from_nir.rs @@ -1728,10 +1728,12 @@ impl<'a> ShaderFromNir<'a> { */ let data = *self.get_src(&srcs[0]).as_ssa().unwrap(); assert!(offset_as_u32 == Some(0)); - let base: usize = intrin.base().try_into().unwrap(); + let base: u8 = intrin.base().try_into().unwrap(); + let comp: u8 = intrin.component().try_into().unwrap(); assert!(base % 4 == 0); + let out_idx = usize::from((base / 4) + comp); for c in 0..usize::from(comps) { - self.fs_out_regs[(base / 4) + c] = data[c]; + self.fs_out_regs[out_idx + c] = data[c]; } } ShaderIoInfo::Vtg(io) => { diff --git a/src/nouveau/compiler/nak_nir.c b/src/nouveau/compiler/nak_nir.c index d5715494bac..e11400929ff 100644 --- a/src/nouveau/compiler/nak_nir.c +++ b/src/nouveau/compiler/nak_nir.c @@ -519,8 +519,7 @@ nak_nir_lower_fs_outputs(nir_shader *nir) break; case FRAG_RESULT_COLOR: assert(var->data.index == 0); - var->data.driver_location = - NAK_FS_OUT_COLOR0 + var->data.location_frac * 4; + var->data.driver_location = NAK_FS_OUT_COLOR0; break; case FRAG_RESULT_SAMPLE_MASK: assert(var->data.index == 0); @@ -532,8 +531,7 @@ nak_nir_lower_fs_outputs(nir_shader *nir) assert(var->data.index < 2); const unsigned out = (var->data.location - FRAG_RESULT_DATA0) + var->data.index; - var->data.driver_location = - NAK_FS_OUT_COLOR(out) + var->data.location_frac * 4; + var->data.driver_location = NAK_FS_OUT_COLOR(out); break; } }