[Mesa-dev] [PATCH 3/3] nir: Add interp_var_at_offset flipping.

Kenneth Graunke kenneth at whitecape.org
Wed May 18 08:07:10 UTC 2016


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);
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part.
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160518/a3578a38/attachment.sig>


More information about the mesa-dev mailing list