summaryrefslogtreecommitdiffstats
path: root/src/render/renderers/opengl/renderer/renderer.cpp
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@qt.io>2018-05-02 18:00:52 +0200
committerAntti Kokko <antti.kokko@qt.io>2018-05-04 12:00:29 +0000
commit43cebede39c9340c29bad6c6a78b76446d54c0db (patch)
treec6b9107da502d3c73d0aa1137532bd040e4bca71 /src/render/renderers/opengl/renderer/renderer.cpp
parent7f0bdc21a8f1a5fbe2afdba61f037a71f00c1d61 (diff)
Avoid locking up on Radeonv5.11.0-rc1
Could not find a decent way to do a renderer/vendor string query due to the convoluted internals so just used a define for now. Task-number: QTBUG-67937 Change-Id: I0dcfa41377a5e430d3f7973c5aaa01535100c53c Reviewed-by: Liang Qi <liang.qi@qt.io>
Diffstat (limited to 'src/render/renderers/opengl/renderer/renderer.cpp')
-rw-r--r--src/render/renderers/opengl/renderer/renderer.cpp26
1 files changed, 24 insertions, 2 deletions
diff --git a/src/render/renderers/opengl/renderer/renderer.cpp b/src/render/renderers/opengl/renderer/renderer.cpp
index a95bf230b..b889799a3 100644
--- a/src/render/renderers/opengl/renderer/renderer.cpp
+++ b/src/render/renderers/opengl/renderer/renderer.cpp
@@ -128,6 +128,9 @@
QT_BEGIN_NAMESPACE
+// Crashes on AMD Radeon drivers on Windows. Disable for now.
+//#define SHADER_LOADING_IN_COMMAND_THREAD
+
using namespace Qt3DCore;
namespace Qt3DRender {
@@ -323,11 +326,17 @@ QOpenGLContext *Renderer::shareContext() const
}
// Executed in the command thread
-void Renderer::loadShader(Shader *shader) const
+void Renderer::loadShader(Shader *shader, HShader shaderHandle)
{
+#ifdef SHADER_LOADING_IN_COMMAND_THREAD
+ Q_UNUSED(shaderHandle);
Profiling::GLTimeRecorder recorder(Profiling::ShaderUpload);
LoadShaderCommand cmd(shader);
m_commandThread->executeCommand(&cmd);
+#else
+ Q_UNUSED(shader);
+ m_dirtyShaders.push_back(shaderHandle);
+#endif
}
void Renderer::setOpenGLContext(QOpenGLContext *context)
@@ -1123,7 +1132,7 @@ void Renderer::reloadDirtyShaders()
shader->submitPendingNotifications();
// If the shader hasn't be loaded, load it
if (shader != nullptr && !shader->isLoaded())
- loadShader(shader);
+ loadShader(shader, shaderHandle);
}
}
}
@@ -1147,6 +1156,19 @@ void Renderer::updateGLResources()
}
}
+#ifndef SHADER_LOADING_IN_COMMAND_THREAD
+ {
+ Profiling::GLTimeRecorder recorder(Profiling::ShaderUpload);
+ const QVector<HShader> dirtyShaderHandles = std::move(m_dirtyShaders);
+ ShaderManager *shaderManager = m_nodesManager->shaderManager();
+ for (const HShader &handle: dirtyShaderHandles) {
+ Shader *shader = shaderManager->data(handle);
+ // Compile shader
+ m_submissionContext->loadShader(shader, shaderManager);
+ }
+ }
+#endif
+
{
Profiling::GLTimeRecorder recorder(Profiling::TextureUpload);
const QVector<HTexture> activeTextureHandles = std::move(m_dirtyTextures);