xserver-multidpi/glamor
Keith Packard 181a4bd0cc glamor: Preserve GL_RED bits in R channel when destination is GL_RED [v2]
A1 and A8 pixmaps are usually stored in the Red channel to conform
with more recent GL versions. When using these pixmaps as mask values,
that works great. When using these pixmaps as source values, then the
value we want depends on what the destination looks like.

For RGBA or RGB destinations, then we want to use the Red channel
for A values and leave RGB all set to zero.

For A destinations, then we want to leave the R values in the Red
channel so that they end up in the Red channel of the output.

This patch adds a helper function, glamor_bind_texture, which performs
the glBindTexture call along with setting the swizzle parameter
correctly for the Red channel. The swizzle parameter for the Alpha
channel doesn't depend on the destination as it's safe to leave it
always swizzled from the Red channel.

This fixes incorrect rendering in firefox for this page:

	https://gfycat.com/HoarseCheapAmericankestrel

while not breaking rendering for this page:

	https://feedly.com

v2: Add change accidentally left in patch for missing
    glDisable(GL_COLOR_LOGIC_OP).
    Found by Emil Velikov <emil.l.velikov@gmail.com>

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=63397
Signed-off-by: Keith Packard <keithp@keithp.com>
Tested-by: Michel Dänzer <michel.daenzer@amd.com>
2016-05-26 09:17:59 -07:00
..
glamor_addtraps.c glamor: Remove _nf rendering functions 2015-03-24 12:01:39 -07:00
glamor_composite_glyphs.c glamor: Preserve GL_RED bits in R channel when destination is GL_RED [v2] 2016-05-26 09:17:59 -07:00
glamor_compositerects.c glamor: fix wrong offset on composite rectangles 2016-04-15 16:31:36 -04:00
glamor_context.h glamor: Replace glamor_get/put_context() with just glamor_make_current(). 2014-04-23 10:32:23 -07:00
glamor_copy.c glamor: Preserve GL_RED bits in R channel when destination is GL_RED [v2] 2016-05-26 09:17:59 -07:00
glamor_core.c glamor: Replace "finish access" shader with texture swizzling. 2016-03-10 11:12:43 -05:00
glamor_dash.c glamor: Preserve GL_RED bits in R channel when destination is GL_RED [v2] 2016-05-26 09:17:59 -07:00
glamor_debug.h glamor: Apply x-indent.sh. 2014-01-27 09:30:47 -08:00
glamor_egl_stubs.c glamor: Delay making pixmaps shareable until we need to. 2015-11-18 10:04:44 -08:00
glamor_egl.c glamor: add core profile support to EGL glamor. (v2) 2016-01-26 12:04:19 -08:00
glamor_eglmodule.c Fix files including xorg-server.h by mistake 2014-07-30 12:17:27 -07:00
glamor_fbo.c glamor: Preserve GL_RED bits in R channel when destination is GL_RED [v2] 2016-05-26 09:17:59 -07:00
glamor_font.c glamor: store old fonts in double width textures. 2016-01-13 11:21:02 +10:00
glamor_font.h glamor: store old fonts in double width textures. 2016-01-13 11:21:02 +10:00
glamor_glx.c glamor: Do the same MakeCurrent(None) for GLX as we do for EGL. 2014-04-23 10:32:32 -07:00
glamor_glyphblt.c glamor: Simplify the pixmap box looping. 2016-01-29 18:13:09 -08:00
glamor_gradient.c glamor: use vbos in gradient/picture code. 2016-01-21 06:47:35 +10:00
glamor_image.c glamor: Use glamor_prepare_access_box() for PutImage/GetImage fallback 2015-07-16 10:43:54 -07:00
glamor_largepixmap.c glamor: Make a bunch of single-file glamor functions static. 2015-07-02 10:05:59 -07:00
glamor_lines.c glamor: Simplify the pixmap box looping. 2016-01-29 18:13:09 -08:00
glamor_picture.c glamor: Replace "finish access" shader with texture swizzling. 2016-03-10 11:12:43 -05:00
glamor_pixmap.c glamor: Move glamor_render.c pict handling to glamor_picture.c 2015-07-10 09:42:58 -07:00
glamor_points.c glamor: Simplify the pixmap box looping. 2016-01-29 18:13:09 -08:00
glamor_prepare.c glamor: make current in prepare paths 2015-07-16 10:57:00 -07:00
glamor_prepare.h glamor: Replace fallback preparation code 2014-06-15 22:02:40 +01:00
glamor_priv.h glamor: Preserve GL_RED bits in R channel when destination is GL_RED [v2] 2016-05-26 09:17:59 -07:00
glamor_program.c glamor: Preserve GL_RED bits in R channel when destination is GL_RED [v2] 2016-05-26 09:17:59 -07:00
glamor_program.h glamor: Add support for CA rendering in a single pass. 2016-01-26 12:02:42 -08:00
glamor_rects.c glamor: Simplify the pixmap box looping. 2016-01-29 18:13:09 -08:00
glamor_render.c glamor: Preserve GL_RED bits in R channel when destination is GL_RED [v2] 2016-05-26 09:17:59 -07:00
glamor_segs.c glamor: Simplify the pixmap box looping. 2016-01-29 18:13:09 -08:00
glamor_spans.c glamor: Preserve GL_RED bits in R channel when destination is GL_RED [v2] 2016-05-26 09:17:59 -07:00
glamor_sync.c glamor: Fix build when configured --enable-glamor --disable-xshmfence 2015-03-24 12:43:34 -07:00
glamor_text.c glamor: Simplify the pixmap box looping. 2016-01-29 18:13:09 -08:00
glamor_transfer.c glamor: Preserve GL_RED bits in R channel when destination is GL_RED [v2] 2016-05-26 09:17:59 -07:00
glamor_transfer.h glamor: Add simple upload/download functions in glamor_transfer 2014-04-03 13:07:51 -07:00
glamor_transform.c glamor: Preserve GL_RED bits in R channel when destination is GL_RED [v2] 2016-05-26 09:17:59 -07:00
glamor_transform.h glamor: Preserve GL_RED bits in R channel when destination is GL_RED [v2] 2016-05-26 09:17:59 -07:00
glamor_trapezoid.c glamor: Remove _nf rendering functions 2015-03-24 12:01:39 -07:00
glamor_triangles.c glamor: Remove _nf rendering functions 2015-03-24 12:01:39 -07:00
glamor_utils.c Convert glamor & glx to new *allocarray functions 2015-04-21 16:58:08 -07:00
glamor_utils.h glamor: Drop the REVERT_UPLOADING_1_5_5_5 path. 2016-03-10 11:12:43 -05:00
glamor_vbo.c glamor: Use vertex array objects 2016-01-21 06:49:40 +10:00
glamor_window.c glamor: Drop tracking of the last picture attached to pixmaps. 2015-07-10 09:42:58 -07:00
glamor_xv.c glamor: Fix XvPutImage when src_y != 0 2016-03-08 13:05:38 -05:00
glamor.c glamor: Preserve GL_RED bits in R channel when destination is GL_RED [v2] 2016-05-26 09:17:59 -07:00
glamor.h glamor: add glamor_finish API 2016-04-29 10:19:17 -04:00
Makefile.am glamor: do not build Xv support when --disable-xv 2016-03-09 14:03:06 -05:00