From 38d3e3c10e2bd4985d15d6a7dc29e0953560417d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tapani=20P=C3=A4lli?= Date: Thu, 28 Sep 2017 11:33:41 +0300 Subject: [PATCH] i965: HACK pick the format depending on some things MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Before commit b3a44ae7a4168677ae855563d80723895e87966b format was always taken from renderbuffer but now it uses it from __DRIimage. Patch adds format parameter to intel_miptree_create_for_dri_image to override format of __DRIimage. This fixes fdo bug 102999. Signed-off-by: Tapani Pälli --- src/mesa/drivers/dri/i965/brw_context.c | 15 ++++++++++++++- src/mesa/drivers/dri/i965/intel_fbo.c | 3 ++- src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 4 ++-- src/mesa/drivers/dri/i965/intel_mipmap_tree.h | 1 + src/mesa/drivers/dri/i965/intel_tex_image.c | 2 +- 5 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c index ee1badd94b..c791d9ceb3 100644 --- a/src/mesa/drivers/dri/i965/brw_context.c +++ b/src/mesa/drivers/dri/i965/brw_context.c @@ -1607,8 +1607,21 @@ intel_update_image_buffer(struct brw_context *intel, unreachable("Invalid color encoding"); } + /* HACK - let's check where we should pick format from. */ + mesa_format fmt = intel_rb_format(rb); + if (fmt != buffer->format) { + /* mismatch alpha channel? this is ok. */ + if (_mesa_format_has_color_component(buffer->format, 3) != + _mesa_format_has_color_component(intel_rb_format(rb),3)) { + fmt = buffer->format; + } else { + /* renderbuffer has the correct format we want to use. */ + fmt = intel_rb_format(rb); + } + } + struct intel_mipmap_tree *mt = - intel_miptree_create_for_dri_image(intel, buffer, GL_TEXTURE_2D, + intel_miptree_create_for_dri_image(intel, buffer, fmt, GL_TEXTURE_2D, colorspace, 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 46f140c028..d88ad9c303 100644 --- a/src/mesa/drivers/dri/i965/intel_fbo.c +++ b/src/mesa/drivers/dri/i965/intel_fbo.c @@ -363,7 +363,8 @@ intel_image_target_renderbuffer_storage(struct gl_context *ctx, * buffer's content to the main buffer nor for invalidating the aux buffer's * content. */ - irb->mt = intel_miptree_create_for_dri_image(brw, image, GL_TEXTURE_2D, + irb->mt = intel_miptree_create_for_dri_image(brw, image, image->format, + GL_TEXTURE_2D, ISL_COLORSPACE_NONE, 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 5b7cde82f6..cb7b34f657 100644 --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c @@ -958,7 +958,8 @@ 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, + __DRIimage *image, mesa_format format, + GLenum target, enum isl_colorspace colorspace, bool is_winsys_image) { @@ -971,7 +972,6 @@ intel_miptree_create_for_dri_image(struct brw_context *brw, 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 */ diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.h b/src/mesa/drivers/dri/i965/intel_mipmap_tree.h index 2fce28c524..f98094f090 100644 --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.h +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.h @@ -406,6 +406,7 @@ intel_miptree_create_for_bo(struct brw_context *brw, struct intel_mipmap_tree * intel_miptree_create_for_dri_image(struct brw_context *brw, __DRIimage *image, + mesa_format format, GLenum target, enum isl_colorspace colorspace, bool is_winsys_image); diff --git a/src/mesa/drivers/dri/i965/intel_tex_image.c b/src/mesa/drivers/dri/i965/intel_tex_image.c index 7712f7085f..0997ecdcc5 100644 --- a/src/mesa/drivers/dri/i965/intel_tex_image.c +++ b/src/mesa/drivers/dri/i965/intel_tex_image.c @@ -524,7 +524,7 @@ intel_image_target_texture_2d(struct gl_context *ctx, GLenum target, return; } - mt = intel_miptree_create_for_dri_image(brw, image, target, + mt = intel_miptree_create_for_dri_image(brw, image, image->format, target, ISL_COLORSPACE_NONE, false); if (mt == NULL) return; -- 2.13.5