Merge branch 'Plasma/5.12' into Plasma/5.15
This commit is contained in:
commit
9560588570
1 changed files with 5 additions and 17 deletions
|
@ -115,6 +115,11 @@ GlxBackend::GlxBackend(Display *display)
|
|||
, haveSwapInterval(false)
|
||||
, m_x11Display(display)
|
||||
{
|
||||
// Ensures calls to glXSwapBuffers will always block until the next
|
||||
// retrace when using the proprietary NVIDIA driver. This must be
|
||||
// set before libGL.so is loaded.
|
||||
setenv("__GL_MaxFramesAllowed", "1", true);
|
||||
|
||||
// Force initialization of GLX integration in the Qt's xcb backend
|
||||
// to make it call XESetWireToEvent callbacks, which is required
|
||||
// by Mesa when using DRI2.
|
||||
|
@ -696,25 +701,8 @@ void GlxBackend::present()
|
|||
glXWaitGL();
|
||||
if (char result = m_swapProfiler.end()) {
|
||||
gs_tripleBufferUndetected = gs_tripleBufferNeedsDetection = false;
|
||||
if (result == 'd' && GLPlatform::instance()->driver() == Driver_NVidia) {
|
||||
// TODO this is a workaround, we should get __GL_YIELD set before libGL checks it
|
||||
if (qstrcmp(qgetenv("__GL_YIELD"), "USLEEP")) {
|
||||
options->setGlPreferBufferSwap(0);
|
||||
setSwapInterval(0);
|
||||
result = 0; // hint proper behavior
|
||||
qCWarning(KWIN_X11STANDALONE) << "\nIt seems you are using the nvidia driver without triple buffering\n"
|
||||
"You must export __GL_YIELD=\"USLEEP\" to prevent large CPU overhead on synced swaps\n"
|
||||
"Preferably, enable the TripleBuffer Option in the xorg.conf Device\n"
|
||||
"For this reason, the tearing prevention has been disabled.\n"
|
||||
"See https://bugs.kde.org/show_bug.cgi?id=322060\n";
|
||||
}
|
||||
}
|
||||
setBlocksForRetrace(result == 'd');
|
||||
}
|
||||
} else if (blocksForRetrace()) {
|
||||
// at least the nvidia blob manages to swap async, ie. return immediately on double
|
||||
// buffering - what messes our timing calculation and leads to laggy behavior #346275
|
||||
glXWaitGL();
|
||||
}
|
||||
} else {
|
||||
waitSync();
|
||||
|
|
Loading…
Reference in a new issue