summaryrefslogtreecommitdiff
path: root/gfx
diff options
context:
space:
mode:
authorMihai Moldovan <ionic@ionic.de>2019-05-22 21:10:26 +0200
committerMihai Moldovan <ionic@ionic.de>2019-05-22 21:18:15 +0200
commit2fd3007864d0c37b5bcc5ea9ca85d53d96fd83c5 (patch)
tree086723e76ceea23f60bd85d0cd1578eebfdf48df /gfx
parentbe8d03cf14455a80342582e8578fdbee590f350a (diff)
downloaduxp-2fd3007864d0c37b5bcc5ea9ca85d53d96fd83c5.tar.gz
Enable double buffering when using XRENDER.
This fixes flickering/bars/stripes showing up during quickly-updating operations on Intel hardware when using XRENDER. For more information, refer to the code comment. See #1061
Diffstat (limited to 'gfx')
-rw-r--r--gfx/layers/client/ContentClient.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/gfx/layers/client/ContentClient.cpp b/gfx/layers/client/ContentClient.cpp
index 3373230a99..50e159a236 100644
--- a/gfx/layers/client/ContentClient.cpp
+++ b/gfx/layers/client/ContentClient.cpp
@@ -78,8 +78,21 @@ ContentClient::CreateContentClient(CompositableForwarder* aForwarder)
// We can't use double buffering when using image content with
// Xrender support on Linux, as ContentHostDoubleBuffered is not
// suited for direct uploads to the server.
+ // FIXME: Even though the comment above suggests that double buffering
+ // is supposed to be disabled when Xrender support is being enabled
+ // (and used), it really wasn't. Historically,
+ // UseImageOffscreenSurfaces() was always false in GTK2 builds, thus
+ // triggering the check, regardless of UseXRender().
+ // Some time later, offscreen surfaces were always enabled, but the
+ // Xrender functionality broke due to not using Xlib-based surfaces.
+ // Using Xlib-based surfaces compatible with Xrender operations seems
+ // to lead to weird graphical artifacts (bars and stripes) on some
+ // hardware (Intel-based?) when displaying quickly-changing content,
+ // so contrary to the statement above we'd better enable double
+ // buffering - which also seems to not have any negative performance
+ // impact.
if (!gfxPlatformGtk::GetPlatform()->UseImageOffscreenSurfaces() ||
- !gfxVars::UseXRender())
+ gfxVars::UseXRender())
#endif
{
useDoubleBuffering = (LayerManagerComposite::SupportsDirectTexturing() &&