From 7cab8d3661f243c47874fa7e6ad30af7bd4a53d8 Mon Sep 17 00:00:00 2001 From: "Kasireddy, Vivek" Date: Tue, 12 Feb 2019 17:03:52 -0800 Subject: [PATCH] i965: Add support for sampling from XYUV images MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add support to the i965 DRI driver to sample from XYUV8888 buffers. Signed-off-by: Vivek Kasireddy Reviewed-by: Lionel Landwerlin Reviewed-by: Tapani Pälli Reviewed-by: Eric Engestrom --- src/intel/compiler/brw_compiler.h | 1 + src/intel/compiler/brw_nir.c | 1 + src/mesa/drivers/dri/i965/brw_wm.c | 6 ++++++ src/mesa/drivers/dri/i965/intel_screen.c | 3 +++ 4 files changed, 11 insertions(+) diff --git a/src/intel/compiler/brw_compiler.h b/src/intel/compiler/brw_compiler.h index b894c47ed6b..7ae38e103c6 100644 --- a/src/intel/compiler/brw_compiler.h +++ b/src/intel/compiler/brw_compiler.h @@ -196,6 +196,7 @@ struct brw_sampler_prog_key_data { uint32_t yx_xuxv_image_mask; uint32_t xy_uxvx_image_mask; uint32_t ayuv_image_mask; + uint32_t xyuv_image_mask; /* Scale factor for each texture. */ float scale_factors[32]; diff --git a/src/intel/compiler/brw_nir.c b/src/intel/compiler/brw_nir.c index d0b1ba6e3d2..00e3879b4dc 100644 --- a/src/intel/compiler/brw_nir.c +++ b/src/intel/compiler/brw_nir.c @@ -963,6 +963,7 @@ brw_nir_apply_sampler_key(nir_shader *nir, tex_options.lower_yx_xuxv_external = key_tex->yx_xuxv_image_mask; tex_options.lower_xy_uxvx_external = key_tex->xy_uxvx_image_mask; tex_options.lower_ayuv_external = key_tex->ayuv_image_mask; + tex_options.lower_xyuv_external = key_tex->xyuv_image_mask; /* Setup array of scaling factors for each texture. */ memcpy(&tex_options.scale_factors, &key_tex->scale_factors, diff --git a/src/mesa/drivers/dri/i965/brw_wm.c b/src/mesa/drivers/dri/i965/brw_wm.c index 3cd8f18e794..47905ca5549 100644 --- a/src/mesa/drivers/dri/i965/brw_wm.c +++ b/src/mesa/drivers/dri/i965/brw_wm.c @@ -270,6 +270,9 @@ brw_debug_recompile_sampler_key(struct brw_context *brw, found |= key_debug(brw, "ayuv image bound", old_key->ayuv_image_mask, key->ayuv_image_mask); + found |= key_debug(brw, "xyuv image bound", + old_key->xyuv_image_mask, + key->xyuv_image_mask); for (unsigned int i = 0; i < MAX_SAMPLERS; i++) { found |= key_debug(brw, "textureGather workarounds", @@ -432,6 +435,9 @@ brw_populate_sampler_prog_key_data(struct gl_context *ctx, case __DRI_IMAGE_COMPONENTS_AYUV: key->ayuv_image_mask |= 1 << s; break; + case __DRI_IMAGE_COMPONENTS_XYUV: + key->xyuv_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 5041acd9a71..d34b161f41e 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.c +++ b/src/mesa/drivers/dri/i965/intel_screen.c @@ -302,6 +302,9 @@ static const struct intel_image_format intel_image_formats[] = { { __DRI_IMAGE_FOURCC_AYUV, __DRI_IMAGE_COMPONENTS_AYUV, 1, { { 0, 0, 0, __DRI_IMAGE_FORMAT_ABGR8888, 4 } } }, + { __DRI_IMAGE_FOURCC_XYUV8888, __DRI_IMAGE_COMPONENTS_XYUV, 1, + { { 0, 0, 0, __DRI_IMAGE_FORMAT_XBGR8888, 4 } } }, + /* For YUYV and UYVY 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