Re: [Mesa-dev] [PATCH v1 3/3] i965/i915: Add UYVY as the supported format Trigger the correct sampler options for it. Similar with YUYV

2017-06-16 Thread Kristian H. Kristensen
Johnson Lin  writes:

Commit subject is too long. Make it a brief summary under 72 characters
wide. Explain further, if necessary in commit body.

See https://chris.beams.io/posts/git-commit/ for a good guide and
rationale.

> ---
>  src/intel/compiler/brw_compiler.h| 1 +
>  src/intel/compiler/brw_nir.c | 1 +
>  src/mesa/drivers/dri/i915/intel_screen.c | 7 +--
>  src/mesa/drivers/dri/i965/brw_wm.c   | 7 +++
>  src/mesa/drivers/dri/i965/intel_screen.c | 7 +--
>  5 files changed, 19 insertions(+), 4 deletions(-)
>
> diff --git a/src/intel/compiler/brw_compiler.h 
> b/src/intel/compiler/brw_compiler.h
> index 78873744ce5f..3f383403883c 100644
> --- a/src/intel/compiler/brw_compiler.h
> +++ b/src/intel/compiler/brw_compiler.h
> @@ -168,6 +168,7 @@ struct brw_sampler_prog_key_data {
> uint32_t y_u_v_image_mask;
> uint32_t y_uv_image_mask;
> uint32_t yx_xuxv_image_mask;
> +   uint32_t xy_uxvx_image_mask;
>  };
>  
>  /**
> diff --git a/src/intel/compiler/brw_nir.c b/src/intel/compiler/brw_nir.c
> index de8f519b4e10..49d3cf365647 100644
> --- a/src/intel/compiler/brw_nir.c
> +++ b/src/intel/compiler/brw_nir.c
> @@ -770,6 +770,7 @@ brw_nir_apply_sampler_key(nir_shader *nir,
> tex_options.lower_y_uv_external = key_tex->y_uv_image_mask;
> tex_options.lower_y_u_v_external = key_tex->y_u_v_image_mask;
> tex_options.lower_yx_xuxv_external = key_tex->yx_xuxv_image_mask;
> +   tex_options.lower_xy_uxvx_external = key_tex->xy_uxvx_image_mask;
>  
> if (nir_lower_tex(nir, _options)) {
>nir_validate_shader(nir);
> diff --git a/src/mesa/drivers/dri/i915/intel_screen.c 
> b/src/mesa/drivers/dri/i915/intel_screen.c
> index cba5434b5e1b..03f79e242c67 100644
> --- a/src/mesa/drivers/dri/i915/intel_screen.c
> +++ b/src/mesa/drivers/dri/i915/intel_screen.c
> @@ -227,16 +227,19 @@ static struct intel_image_format intel_image_formats[] 
> = {
>   { { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 },
> { 1, 1, 0, __DRI_IMAGE_FORMAT_GR88, 2 } } },
>  
> -   /* For YUYV buffers, we set up two overlapping DRI images and treat
> +   /* For YUYV buffers, we set up two overlapping DRI images and treat

I would just say "For YUYV-style buffers...", implying the various
swizzled versions.

>  * them as planar buffers in the compositors.  Plane 0 is GR88 and
>  * samples YU or YV pairs and places Y into the R component, while
> -* plane 1 is ARGB and samples YUYV clusters and places pairs and
> +* plane 1 is ARGB and samples YUYV/UYVY clusters and places pairs and
>  * places U into the G component and V into A.  This lets the
>  * texture sampler interpolate the Y components correctly when
>  * sampling from plane 0, and interpolate U and V correctly when
>  * sampling from plane 1. */
> { __DRI_IMAGE_FOURCC_YUYV, __DRI_IMAGE_COMPONENTS_Y_XUXV, 2,
>   { { 0, 0, 0, __DRI_IMAGE_FORMAT_GR88, 2 },
> +   { 0, 1, 0, __DRI_IMAGE_FORMAT_ARGB, 4 } } },
> +   { __DRI_IMAGE_FOURCC_UYVY, __DRI_IMAGE_COMPONENTS_Y_UXVX, 2,
> + { { 0, 0, 0, __DRI_IMAGE_FORMAT_GR88, 2 },
> { 0, 1, 0, __DRI_IMAGE_FORMAT_ARGB, 4 } } }
>  };
>  
> diff --git a/src/mesa/drivers/dri/i965/brw_wm.c 
> b/src/mesa/drivers/dri/i965/brw_wm.c
> index 0f075a11f756..a8ec1f5c2368 100644
> --- a/src/mesa/drivers/dri/i965/brw_wm.c
> +++ b/src/mesa/drivers/dri/i965/brw_wm.c
> @@ -270,6 +270,10 @@ brw_debug_recompile_sampler_key(struct brw_context *brw,
> found |= key_debug(brw, "yx_xuxv image bound",
>old_key->yx_xuxv_image_mask,
>key->yx_xuxv_image_mask);
> +   found |= key_debug(brw, "xy_uxvx image bound",
> +  old_key->xy_uxvx_image_mask,
> +  key->xy_uxvx_image_mask);
> +
>  
> for (unsigned int i = 0; i < MAX_SAMPLERS; i++) {
>found |= key_debug(brw, "textureGather workarounds",
> @@ -412,6 +416,9 @@ brw_populate_sampler_prog_key_data(struct gl_context *ctx,
>  case __DRI_IMAGE_COMPONENTS_Y_XUXV:
> key->yx_xuxv_image_mask |= 1 << s;
> break;
> +case __DRI_IMAGE_COMPONENTS_Y_UXVX:
> +   key->xy_uxvx_image_mask |= 1 << s;
> +   break;
>  default:
> break;
>  }
> diff --git a/src/mesa/drivers/dri/i965/intel_screen.c 
> b/src/mesa/drivers/dri/i965/intel_screen.c
> index 83b8a24509a4..4258e54e78ca 100644
> --- a/src/mesa/drivers/dri/i965/intel_screen.c
> +++ b/src/mesa/drivers/dri/i965/intel_screen.c
> @@ -278,16 +278,19 @@ static struct intel_image_format intel_image_formats[] 
> = {
>   { { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 },
> { 1, 1, 0, __DRI_IMAGE_FORMAT_GR88, 2 } } },
>  
> -   /* For YUYV buffers, we set up two overlapping DRI images and treat
> +   /* For YUYV buffers, we set up two overlapping DRI images and treat
>  * them as planar buffers in the compositors.  Plane 0 is GR88 and
>  * 

[Mesa-dev] [PATCH v1 3/3] i965/i915: Add UYVY as the supported format Trigger the correct sampler options for it. Similar with YUYV

2017-06-16 Thread Johnson Lin
---
 src/intel/compiler/brw_compiler.h| 1 +
 src/intel/compiler/brw_nir.c | 1 +
 src/mesa/drivers/dri/i915/intel_screen.c | 7 +--
 src/mesa/drivers/dri/i965/brw_wm.c   | 7 +++
 src/mesa/drivers/dri/i965/intel_screen.c | 7 +--
 5 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/src/intel/compiler/brw_compiler.h 
b/src/intel/compiler/brw_compiler.h
index 78873744ce5f..3f383403883c 100644
--- a/src/intel/compiler/brw_compiler.h
+++ b/src/intel/compiler/brw_compiler.h
@@ -168,6 +168,7 @@ struct brw_sampler_prog_key_data {
uint32_t y_u_v_image_mask;
uint32_t y_uv_image_mask;
uint32_t yx_xuxv_image_mask;
+   uint32_t xy_uxvx_image_mask;
 };
 
 /**
diff --git a/src/intel/compiler/brw_nir.c b/src/intel/compiler/brw_nir.c
index de8f519b4e10..49d3cf365647 100644
--- a/src/intel/compiler/brw_nir.c
+++ b/src/intel/compiler/brw_nir.c
@@ -770,6 +770,7 @@ brw_nir_apply_sampler_key(nir_shader *nir,
tex_options.lower_y_uv_external = key_tex->y_uv_image_mask;
tex_options.lower_y_u_v_external = key_tex->y_u_v_image_mask;
tex_options.lower_yx_xuxv_external = key_tex->yx_xuxv_image_mask;
+   tex_options.lower_xy_uxvx_external = key_tex->xy_uxvx_image_mask;
 
if (nir_lower_tex(nir, _options)) {
   nir_validate_shader(nir);
diff --git a/src/mesa/drivers/dri/i915/intel_screen.c 
b/src/mesa/drivers/dri/i915/intel_screen.c
index cba5434b5e1b..03f79e242c67 100644
--- a/src/mesa/drivers/dri/i915/intel_screen.c
+++ b/src/mesa/drivers/dri/i915/intel_screen.c
@@ -227,16 +227,19 @@ static struct intel_image_format intel_image_formats[] = {
  { { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 },
{ 1, 1, 0, __DRI_IMAGE_FORMAT_GR88, 2 } } },
 
-   /* For YUYV buffers, we set up two overlapping DRI images and treat
+   /* For YUYV buffers, we set up two overlapping DRI images and treat
 * them as planar buffers in the compositors.  Plane 0 is GR88 and
 * samples YU or YV pairs and places Y into the R component, while
-* plane 1 is ARGB and samples YUYV clusters and places pairs and
+* plane 1 is ARGB and samples YUYV/UYVY clusters and places pairs and
 * places U into the G component and V into A.  This lets the
 * texture sampler interpolate the Y components correctly when
 * sampling from plane 0, and interpolate U and V correctly when
 * sampling from plane 1. */
{ __DRI_IMAGE_FOURCC_YUYV, __DRI_IMAGE_COMPONENTS_Y_XUXV, 2,
  { { 0, 0, 0, __DRI_IMAGE_FORMAT_GR88, 2 },
+   { 0, 1, 0, __DRI_IMAGE_FORMAT_ARGB, 4 } } },
+   { __DRI_IMAGE_FOURCC_UYVY, __DRI_IMAGE_COMPONENTS_Y_UXVX, 2,
+ { { 0, 0, 0, __DRI_IMAGE_FORMAT_GR88, 2 },
{ 0, 1, 0, __DRI_IMAGE_FORMAT_ARGB, 4 } } }
 };
 
diff --git a/src/mesa/drivers/dri/i965/brw_wm.c 
b/src/mesa/drivers/dri/i965/brw_wm.c
index 0f075a11f756..a8ec1f5c2368 100644
--- a/src/mesa/drivers/dri/i965/brw_wm.c
+++ b/src/mesa/drivers/dri/i965/brw_wm.c
@@ -270,6 +270,10 @@ brw_debug_recompile_sampler_key(struct brw_context *brw,
found |= key_debug(brw, "yx_xuxv image bound",
   old_key->yx_xuxv_image_mask,
   key->yx_xuxv_image_mask);
+   found |= key_debug(brw, "xy_uxvx image bound",
+  old_key->xy_uxvx_image_mask,
+  key->xy_uxvx_image_mask);
+
 
for (unsigned int i = 0; i < MAX_SAMPLERS; i++) {
   found |= key_debug(brw, "textureGather workarounds",
@@ -412,6 +416,9 @@ brw_populate_sampler_prog_key_data(struct gl_context *ctx,
 case __DRI_IMAGE_COMPONENTS_Y_XUXV:
key->yx_xuxv_image_mask |= 1 << s;
break;
+case __DRI_IMAGE_COMPONENTS_Y_UXVX:
+   key->xy_uxvx_image_mask |= 1 << s;
+   break;
 default:
break;
 }
diff --git a/src/mesa/drivers/dri/i965/intel_screen.c 
b/src/mesa/drivers/dri/i965/intel_screen.c
index 83b8a24509a4..4258e54e78ca 100644
--- a/src/mesa/drivers/dri/i965/intel_screen.c
+++ b/src/mesa/drivers/dri/i965/intel_screen.c
@@ -278,16 +278,19 @@ static struct intel_image_format intel_image_formats[] = {
  { { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 },
{ 1, 1, 0, __DRI_IMAGE_FORMAT_GR88, 2 } } },
 
-   /* For YUYV buffers, we set up two overlapping DRI images and treat
+   /* For YUYV buffers, we set up two overlapping DRI images and treat
 * them as planar buffers in the compositors.  Plane 0 is GR88 and
 * samples YU or YV pairs and places Y into the R component, while
-* plane 1 is ARGB and samples YUYV clusters and places pairs and
+* plane 1 is ARGB and samples YUYV/UYVY clusters and places pairs and
 * places U into the G component and V into A.  This lets the
 * texture sampler interpolate the Y components correctly when
 * sampling from plane 0, and interpolate U and V correctly when
 * sampling from plane 1. */
{ __DRI_IMAGE_FOURCC_YUYV, __DRI_IMAGE_COMPONENTS_Y_XUXV, 2,
  { { 0, 0, 0,