i965/i915: Add UYVY as the supported format
Trigger the correct sampler options for it. Similar with YUYV Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
This commit is contained in:

committed by
Lionel Landwerlin

parent
8ff4be44b7
commit
165e704719
@@ -168,6 +168,7 @@ struct brw_sampler_prog_key_data {
|
|||||||
uint32_t y_u_v_image_mask;
|
uint32_t y_u_v_image_mask;
|
||||||
uint32_t y_uv_image_mask;
|
uint32_t y_uv_image_mask;
|
||||||
uint32_t yx_xuxv_image_mask;
|
uint32_t yx_xuxv_image_mask;
|
||||||
|
uint32_t xy_uxvx_image_mask;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -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_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_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_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, &tex_options)) {
|
if (nir_lower_tex(nir, &tex_options)) {
|
||||||
nir_validate_shader(nir);
|
nir_validate_shader(nir);
|
||||||
|
@@ -227,17 +227,20 @@ static struct intel_image_format intel_image_formats[] = {
|
|||||||
{ { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 },
|
{ { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 },
|
||||||
{ 1, 1, 0, __DRI_IMAGE_FORMAT_GR88, 2 } } },
|
{ 1, 1, 0, __DRI_IMAGE_FORMAT_GR88, 2 } } },
|
||||||
|
|
||||||
/* For YUYV buffers, we set up two overlapping DRI images and treat
|
/* For YUYV and UYVY buffers, we set up two overlapping DRI images
|
||||||
* them as planar buffers in the compositors. Plane 0 is GR88 and
|
* and treat them as planar buffers in the compositors.
|
||||||
* samples YU or YV pairs and places Y into the R component, while
|
* Plane 0 is GR88 and samples YU or YV pairs and places Y into
|
||||||
* plane 1 is ARGB and samples YUYV clusters and places pairs and
|
* the R component, while plane 1 is ARGB/ABGR and samples YUYV/UYVY
|
||||||
* places U into the G component and V into A. This lets the
|
* clusters and places pairs and places U into the G component and
|
||||||
* texture sampler interpolate the Y components correctly when
|
* V into A. This lets the texture sampler interpolate the Y
|
||||||
* sampling from plane 0, and interpolate U and V correctly when
|
* components correctly when sampling from plane 0, and interpolate
|
||||||
* sampling from plane 1. */
|
* U and V correctly when sampling from plane 1. */
|
||||||
{ __DRI_IMAGE_FOURCC_YUYV, __DRI_IMAGE_COMPONENTS_Y_XUXV, 2,
|
{ __DRI_IMAGE_FOURCC_YUYV, __DRI_IMAGE_COMPONENTS_Y_XUXV, 2,
|
||||||
{ { 0, 0, 0, __DRI_IMAGE_FORMAT_GR88, 2 },
|
{ { 0, 0, 0, __DRI_IMAGE_FORMAT_GR88, 2 },
|
||||||
{ 0, 1, 0, __DRI_IMAGE_FORMAT_ARGB8888, 4 } } }
|
{ 0, 1, 0, __DRI_IMAGE_FORMAT_ARGB8888, 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_ABGR8888, 4 } } }
|
||||||
};
|
};
|
||||||
|
|
||||||
static __DRIimage *
|
static __DRIimage *
|
||||||
|
@@ -270,6 +270,10 @@ brw_debug_recompile_sampler_key(struct brw_context *brw,
|
|||||||
found |= key_debug(brw, "yx_xuxv image bound",
|
found |= key_debug(brw, "yx_xuxv image bound",
|
||||||
old_key->yx_xuxv_image_mask,
|
old_key->yx_xuxv_image_mask,
|
||||||
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++) {
|
for (unsigned int i = 0; i < MAX_SAMPLERS; i++) {
|
||||||
found |= key_debug(brw, "textureGather workarounds",
|
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:
|
case __DRI_IMAGE_COMPONENTS_Y_XUXV:
|
||||||
key->yx_xuxv_image_mask |= 1 << s;
|
key->yx_xuxv_image_mask |= 1 << s;
|
||||||
break;
|
break;
|
||||||
|
case __DRI_IMAGE_COMPONENTS_Y_UXVX:
|
||||||
|
key->xy_uxvx_image_mask |= 1 << s;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -278,17 +278,20 @@ static struct intel_image_format intel_image_formats[] = {
|
|||||||
{ { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 },
|
{ { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 },
|
||||||
{ 1, 1, 0, __DRI_IMAGE_FORMAT_GR88, 2 } } },
|
{ 1, 1, 0, __DRI_IMAGE_FORMAT_GR88, 2 } } },
|
||||||
|
|
||||||
/* For YUYV buffers, we set up two overlapping DRI images and treat
|
/* For YUYV and UYVY buffers, we set up two overlapping DRI images
|
||||||
* them as planar buffers in the compositors. Plane 0 is GR88 and
|
* and treat them as planar buffers in the compositors.
|
||||||
* samples YU or YV pairs and places Y into the R component, while
|
* Plane 0 is GR88 and samples YU or YV pairs and places Y into
|
||||||
* plane 1 is ARGB and samples YUYV clusters and places pairs and
|
* the R component, while plane 1 is ARGB/ABGR and samples YUYV/UYVY
|
||||||
* places U into the G component and V into A. This lets the
|
* clusters and places pairs and places U into the G component and
|
||||||
* texture sampler interpolate the Y components correctly when
|
* V into A. This lets the texture sampler interpolate the Y
|
||||||
* sampling from plane 0, and interpolate U and V correctly when
|
* components correctly when sampling from plane 0, and interpolate
|
||||||
* sampling from plane 1. */
|
* U and V correctly when sampling from plane 1. */
|
||||||
{ __DRI_IMAGE_FOURCC_YUYV, __DRI_IMAGE_COMPONENTS_Y_XUXV, 2,
|
{ __DRI_IMAGE_FOURCC_YUYV, __DRI_IMAGE_COMPONENTS_Y_XUXV, 2,
|
||||||
{ { 0, 0, 0, __DRI_IMAGE_FORMAT_GR88, 2 },
|
{ { 0, 0, 0, __DRI_IMAGE_FORMAT_GR88, 2 },
|
||||||
{ 0, 1, 0, __DRI_IMAGE_FORMAT_ARGB8888, 4 } } }
|
{ 0, 1, 0, __DRI_IMAGE_FORMAT_ARGB8888, 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_ABGR8888, 4 } } }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct {
|
static const struct {
|
||||||
|
Reference in New Issue
Block a user