[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