On Tuesday, May 17, 2016 11:34:00 PM PDT Kenneth Graunke wrote: > --- > src/compiler/nir/nir_lower_wpos_ytransform.c | 21 +++++++++++++++++++++ > 1 file changed, 21 insertions(+) > > diff --git a/src/compiler/nir/nir_lower_wpos_ytransform.c b/src/compiler/ nir/nir_lower_wpos_ytransform.c > index 41f8554..6536498 100644 > --- a/src/compiler/nir/nir_lower_wpos_ytransform.c > +++ b/src/compiler/nir/nir_lower_wpos_ytransform.c > @@ -257,6 +257,25 @@ lower_fddy(lower_wpos_ytransform_state *state, nir_alu_instr *fddy) > fddy->src[0].swizzle[i] = MIN2(i, pt->num_components - 1); > } > > +/* Multiply interp_var_at_offset's offset by transform.x to flip it. */ > +static void > +lower_interp_var_at_offset(lower_wpos_ytransform_state *state, > + nir_intrinsic_instr *interp) > +{ > + nir_builder *b = &state->b; > + nir_ssa_def *offset; > + nir_ssa_def *flip_y; > + > + b->cursor = nir_before_instr(&interp->instr); > + > + offset = nir_ssa_for_src(b, interp->src[0], 2); > + flip_y = nir_fmul(b, nir_channel(b, offset, 1), > + nir_channel(b, get_transform(state), 0)); > + nir_instr_rewrite_src(&interp->instr, &interp->src[0], > + nir_src_for_ssa(nir_vec2(b, nir_channel(b, offset, 1),
This should be channel 0, of course: nir_src_for_ssa(nir_vec2(b, nir_channel(b, offset, 0), > + flip_y))); > +} > + > static bool > lower_wpos_ytransform_block(lower_wpos_ytransform_state *state, nir_block *block) > { > @@ -272,6 +291,8 @@ lower_wpos_ytransform_block(lower_wpos_ytransform_state *state, nir_block *block > assert(dvar->deref.child == NULL); > lower_fragcoord(state, intr); > } > + } else if (intr->intrinsic == nir_intrinsic_interp_var_at_offset) { > + lower_interp_var_at_offset(state, intr); > } > } else if (instr->type == nir_instr_type_alu) { > nir_alu_instr *alu = nir_instr_as_alu(instr); >
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev