From 03516382844c4513a68b8e0b6ef4a0040385906a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tapani=20P=C3=A4lli?= Date: Wed, 4 Oct 2017 16:32:05 +0300 Subject: [PATCH] i965: pass wanted format to intel_miptree_create_for_dri_image MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=102999 Reviewed-by: Jason Ekstrand --- src/mesa/drivers/dri/i965/brw_context.c | 14 +------------- src/mesa/drivers/dri/i965/intel_fbo.c | 2 +- src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 25 ++----------------------- src/mesa/drivers/dri/i965/intel_mipmap_tree.h | 2 +- src/mesa/drivers/dri/i965/intel_tex_image.c | 4 ++-- 5 files changed, 7 insertions(+), 40 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c index 1fd967e..751b026 100644 --- a/src/mesa/drivers/dri/i965/brw_context.c +++ b/src/mesa/drivers/dri/i965/brw_context.c @@ -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; diff --git a/src/mesa/drivers/dri/i965/intel_fbo.c b/src/mesa/drivers/dri/i965/intel_fbo.c index 46f140c..4a592f3 100644 --- a/src/mesa/drivers/dri/i965/intel_fbo.c +++ b/src/mesa/drivers/dri/i965/intel_fbo.c @@ -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; diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c index 5b7cde8..670a92c 100644 --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c @@ -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 diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.h b/src/mesa/drivers/dri/i965/intel_mipmap_tree.h index 2fce28c..439b0f6 100644 --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.h +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.h @@ -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 diff --git a/src/mesa/drivers/dri/i965/intel_tex_image.c b/src/mesa/drivers/dri/i965/intel_tex_image.c index 7712f70..7396597 100644 --- a/src/mesa/drivers/dri/i965/intel_tex_image.c +++ b/src/mesa/drivers/dri/i965/intel_tex_image.c @@ -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; -- 2.7.4