[Mesa-dev] [PATCH v1 2/3] nir: Add a lowering pass for UYVY textures Similar with support for YUYV but with byte order difference in sampler

Kristian H. Kristensen krh at bitplanet.net
Fri Jun 16 17:57:47 UTC 2017


Johnson Lin <johnson.lin at intel.com> writes:

> ---
>  src/compiler/nir/nir.h           |  1 +
>  src/compiler/nir/nir_lower_tex.c | 16 ++++++++++++++++
>  2 files changed, 17 insertions(+)
>
> diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h
> index ab7ba14303b7..1b4e47058d4d 100644
> --- a/src/compiler/nir/nir.h
> +++ b/src/compiler/nir/nir.h
> @@ -2449,6 +2449,7 @@ typedef struct nir_lower_tex_options {
>     unsigned lower_y_uv_external;
>     unsigned lower_y_u_v_external;
>     unsigned lower_yx_xuxv_external;
> +   unsigned lower_xy_uxvx_external;
>  
>     /**
>      * To emulate certain texture wrap modes, this can be used
> diff --git a/src/compiler/nir/nir_lower_tex.c b/src/compiler/nir/nir_lower_tex.c
> index 4ef81955513e..5593f9890b28 100644
> --- a/src/compiler/nir/nir_lower_tex.c
> +++ b/src/compiler/nir/nir_lower_tex.c
> @@ -301,6 +301,18 @@ lower_yx_xuxv_external(nir_builder *b, nir_tex_instr *tex)
>                        nir_channel(b, xuxv, 3));
>  }
>  
> +static void lower_xy_uxvx_external(nir_builder *b, nir_tex_instr *tex) {
> +  b->cursor = nir_after_instr(&tex->instr);
> +
> +  nir_ssa_def *y = sample_plane(b, tex, 0);
> +  nir_ssa_def *uxvx = sample_plane(b, tex, 1);
> +
> +  convert_yuv_to_rgb(b, tex,
> +                     nir_channel(b, y, 1),
> +                     nir_channel(b, uxvx, 2),
> +                     nir_channel(b, uxvx, 0));

This looks like it's swapping U and V channels.

> +}
> +
>  /*
>   * Emits a textureLod operation used to replace an existing
>   * textureGrad instruction.
> @@ -760,6 +772,10 @@ nir_lower_tex_block(nir_block *block, nir_builder *b,
>           progress = true;
>        }
>  
> +      if ((1 << tex->texture_index) & options->lower_xy_uxvx_external) {
> +         lower_xy_uxvx_external(b, tex);
> +         progress = true;
> +      }
>  
>        if (sat_mask) {
>           saturate_src(b, tex, sat_mask);
> -- 
> 1.9.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list