Module: Mesa Branch: master Commit: 41d45eb21e50349a89c25a56056dc0e4f5642967 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=41d45eb21e50349a89c25a56056dc0e4f5642967
Author: Jason Ekstrand <jason.ekstr...@intel.com> Date: Tue Nov 28 11:26:55 2017 -0800 i965/tex_image: Pull the tex format from the renderbuffer in intelSetTexBuffer2 Reviewed-by: Kenneth Graunke <kenn...@whitecape.org> Reviewed-by: Chad Versace <chadvers...@chromium.org> --- src/mesa/drivers/dri/i965/intel_tex_image.c | 34 ++++++++++++++++------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/src/mesa/drivers/dri/i965/intel_tex_image.c b/src/mesa/drivers/dri/i965/intel_tex_image.c index b53cdeefc3..44bc146ee4 100644 --- a/src/mesa/drivers/dri/i965/intel_tex_image.c +++ b/src/mesa/drivers/dri/i965/intel_tex_image.c @@ -461,26 +461,30 @@ intelSetTexBuffer2(__DRIcontext *pDRICtx, GLint target, if (!rb || !rb->mt) return; + /* Neither the EGL and GLX texture_from_pixmap specs say anything about + * sRGB. They are both from a time where sRGB was considered an extra + * encoding step you did as part of rendering/blending and not a format. + * Even though we have concept of sRGB visuals, X has classically assumed + * that your data is just bits and sRGB rendering is entirely a client-side + * rendering construct. The assumption is that the result of BindTexImage + * is a texture with a linear format even if it was rendered with sRGB + * encoding enabled. + */ + texFormat = _mesa_get_srgb_format_linear(intel_rb_format(rb)); + if (rb->mt->cpp == 4) { - if (texture_format == __DRI_TEXTURE_FORMAT_RGB) { + /* The extra texture_format parameter indicates whether the alpha + * channel should be respected or ignored. If we set internal_format to + * GL_RGB, the texture handling code is smart enough to swap the format + * or apply a swizzle if the underlying format is RGBA so we don't need + * to stomp it to RGBX or anything like that. + */ + if (texture_format == __DRI_TEXTURE_FORMAT_RGB) internal_format = GL_RGB; - if (rb->mt->format == MESA_FORMAT_B10G10R10X2_UNORM || - rb->mt->format == MESA_FORMAT_B10G10R10A2_UNORM) - texFormat = MESA_FORMAT_B10G10R10X2_UNORM; - else - texFormat = MESA_FORMAT_B8G8R8X8_UNORM; - } - else { + else internal_format = GL_RGBA; - if (rb->mt->format == MESA_FORMAT_B10G10R10X2_UNORM || - rb->mt->format == MESA_FORMAT_B10G10R10A2_UNORM) - texFormat = MESA_FORMAT_B10G10R10A2_UNORM; - else - texFormat = MESA_FORMAT_B8G8R8A8_UNORM; - } } else if (rb->mt->cpp == 2) { internal_format = GL_RGB; - texFormat = MESA_FORMAT_B5G6R5_UNORM; } intel_miptree_make_shareable(brw, rb->mt); _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit