aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/scenegraph/qsgcontext.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/quick/scenegraph/qsgcontext.cpp')
-rw-r--r--src/quick/scenegraph/qsgcontext.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/quick/scenegraph/qsgcontext.cpp b/src/quick/scenegraph/qsgcontext.cpp
index fa095b8165..afde7939f2 100644
--- a/src/quick/scenegraph/qsgcontext.cpp
+++ b/src/quick/scenegraph/qsgcontext.cpp
@@ -340,6 +340,7 @@ QSGRenderContext::QSGRenderContext(QSGContext *context)
, m_depthStencilManager(0)
, m_distanceFieldCacheManager(0)
, m_brokenIBOs(false)
+ , m_serializedRender(false)
{
}
@@ -348,8 +349,13 @@ QSGRenderContext::~QSGRenderContext()
invalidate();
}
+static QBasicMutex qsg_framerender_mutex;
+
void QSGRenderContext::renderNextFrame(QSGRenderer *renderer, GLuint fboId)
{
+ if (m_serializedRender)
+ qsg_framerender_mutex.lock();
+
if (fboId) {
QSGBindableFboId bindable(fboId);
renderer->renderScene(bindable);
@@ -357,6 +363,9 @@ void QSGRenderContext::renderNextFrame(QSGRenderer *renderer, GLuint fboId)
renderer->renderScene();
}
+ if (m_serializedRender)
+ qsg_framerender_mutex.unlock();
+
}
/*!
@@ -442,6 +451,9 @@ void QSGRenderContext::initialize(QOpenGLContext *context)
const char *vendor = (const char *) glGetString(GL_VENDOR);
if (strstr(vendor, "nouveau"))
m_brokenIBOs = true;
+ const char *renderer = (const char *) glGetString(GL_RENDERER);
+ if (strstr(renderer, "llvmpipe"))
+ m_serializedRender = true;
#endif
emit initialized();