Mesa (master): intel: Enable blit glCopyTexSubImage/ glBlitFramebuffer with sRGB.

Eric Anholt anholt at kemper.freedesktop.org
Wed May 29 01:09:35 UTC 2013


Module: Mesa
Branch: master
Commit: 4dea6cf21557bcd3bbab3402e19e19f665d7e177
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=4dea6cf21557bcd3bbab3402e19e19f665d7e177

Author: Eric Anholt <eric at anholt.net>
Date:   Tue May 28 10:59:53 2013 -0700

intel: Enable blit glCopyTexSubImage/glBlitFramebuffer with sRGB.

Since the introduction of default-to-SARGB8 window system framebuffers,
non-blorp hardware lost blit acceleration for these two paths between the
window system and ARGB8888 textures.  Since we shouldn't be doing any
conversion anyway, just compatibility-check the linear variants of the
formats.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=61954
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
Tested-by: Tobias Jakobi <tjakobi at math.uni-bielefeld.de>

---

 src/mesa/drivers/dri/intel/intel_tex_copy.c |   16 +++++++++++-----
 1 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/mesa/drivers/dri/intel/intel_tex_copy.c b/src/mesa/drivers/dri/intel/intel_tex_copy.c
index 4a13b9a..6fb4e38 100644
--- a/src/mesa/drivers/dri/intel/intel_tex_copy.c
+++ b/src/mesa/drivers/dri/intel/intel_tex_copy.c
@@ -80,17 +80,23 @@ intel_copy_texsubimage(struct intel_context *intel,
       perf_debug("no support for array textures\n");
    }
 
-   copy_supported = intelImage->base.Base.TexFormat == intel_rb_format(irb);
+   /* glCopyTexImage (and the glBlitFramebuffer() path that reuses this)
+    * doesn't do any sRGB conversions.
+    */
+   gl_format src_format = _mesa_get_srgb_format_linear(intel_rb_format(irb));
+   gl_format dst_format = _mesa_get_srgb_format_linear(intelImage->base.Base.TexFormat);
+
+   copy_supported = src_format == dst_format;
 
    /* Converting ARGB8888 to XRGB8888 is trivial: ignore the alpha bits */
-   if (intel_rb_format(irb) == MESA_FORMAT_ARGB8888 &&
-       intelImage->base.Base.TexFormat == MESA_FORMAT_XRGB8888) {
+   if (src_format == MESA_FORMAT_ARGB8888 &&
+       dst_format == MESA_FORMAT_XRGB8888) {
       copy_supported = true;
    }
 
    /* Converting XRGB8888 to ARGB8888 requires setting the alpha bits to 1.0 */
-   if (intel_rb_format(irb) == MESA_FORMAT_XRGB8888 &&
-       intelImage->base.Base.TexFormat == MESA_FORMAT_ARGB8888) {
+   if (src_format == MESA_FORMAT_XRGB8888 &&
+       dst_format == MESA_FORMAT_ARGB8888) {
       copy_supported_with_alpha_override = true;
    }
 




More information about the mesa-commit mailing list