i965: pass wanted format to intel_miptree_create_for_dri_image

Change b3a44ae7a4 caused regressions on Android where DRI and renderbuffer
can disagree on the format being used. This patch removes the colorspace
parameter and instead we pass renderbuffer format. For non-winsys images we
still do srgb/linear modification in same manner as change b3a44ae7a4 wanted
but take format from renderbuffer instead of DRI image.

This patch fixes regressions seen with following test sets:

   dEQP-EGL.functional.color_clears*
   dEQP-EGL.functional.render*

Signed-off-by: Tapani Pälli <tapani.palli@intel.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=102999
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
Tapani Pälli 2017-10-04 16:32:05 +03:00
parent c4d1a199f8
commit 0351638284
5 changed files with 7 additions and 40 deletions

View file

@ -1596,21 +1596,9 @@ intel_update_image_buffer(struct brw_context *intel,
if (last_mt && last_mt->bo == buffer->bo)
return;
enum isl_colorspace colorspace;
switch (_mesa_get_format_color_encoding(intel_rb_format(rb))) {
case GL_SRGB:
colorspace = ISL_COLORSPACE_SRGB;
break;
case GL_LINEAR:
colorspace = ISL_COLORSPACE_LINEAR;
break;
default:
unreachable("Invalid color encoding");
}
struct intel_mipmap_tree *mt =
intel_miptree_create_for_dri_image(intel, buffer, GL_TEXTURE_2D,
colorspace, true);
intel_rb_format(rb), true);
if (!mt)
return;

View file

@ -364,7 +364,7 @@ intel_image_target_renderbuffer_storage(struct gl_context *ctx,
* content.
*/
irb->mt = intel_miptree_create_for_dri_image(brw, image, GL_TEXTURE_2D,
ISL_COLORSPACE_NONE, false);
image->format, false);
if (!irb->mt)
return;

View file

@ -959,36 +959,15 @@ create_ccs_buf_for_image(struct brw_context *brw,
struct intel_mipmap_tree *
intel_miptree_create_for_dri_image(struct brw_context *brw,
__DRIimage *image, GLenum target,
enum isl_colorspace colorspace,
mesa_format format,
bool is_winsys_image)
{
if (image->planar_format && image->planar_format->nplanes > 1) {
assert(colorspace == ISL_COLORSPACE_NONE ||
colorspace == ISL_COLORSPACE_YUV);
if (image->planar_format && image->planar_format->nplanes > 1)
return miptree_create_for_planar_image(brw, image, target);
}
if (image->planar_format)
assert(image->planar_format->planes[0].dri_format == image->dri_format);
mesa_format format = image->format;
switch (colorspace) {
case ISL_COLORSPACE_NONE:
/* Keep the image format unmodified */
break;
case ISL_COLORSPACE_LINEAR:
format =_mesa_get_srgb_format_linear(format);
break;
case ISL_COLORSPACE_SRGB:
format =_mesa_get_linear_format_srgb(format);
break;
default:
unreachable("Inalid colorspace for non-planar image");
}
if (!brw->ctx.TextureFormatSupported[format]) {
/* The texture storage paths in core Mesa detect if the driver does not
* support the user-requested format, and then searches for a

View file

@ -407,7 +407,7 @@ struct intel_mipmap_tree *
intel_miptree_create_for_dri_image(struct brw_context *brw,
__DRIimage *image,
GLenum target,
enum isl_colorspace colorspace,
mesa_format format,
bool is_winsys_image);
bool

View file

@ -524,8 +524,8 @@ intel_image_target_texture_2d(struct gl_context *ctx, GLenum target,
return;
}
mt = intel_miptree_create_for_dri_image(brw, image, target,
ISL_COLORSPACE_NONE, false);
mt = intel_miptree_create_for_dri_image(brw, image, target, image->format,
false);
if (mt == NULL)
return;