summaryrefslogtreecommitdiffstats
path: root/src/render/backend
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2018-02-27 11:03:51 +0100
committerPaul Lemire <paul.lemire@kdab.com>2018-02-28 12:15:37 +0000
commitbf0b3bdf5ab7c15bf72eced860053a611eccda4a (patch)
tree01983b14f779cf98748405b89f0a50425750e448 /src/render/backend
parentd3b6a6054ce0b322611c465643aa55f7c60a276e (diff)
Fix race between RenderThread and ShaderGathererJob
By setting the proper dependency which ensures we are done looking for dirtyShaders by the time updateGLResources in the RenderThread is executed. Patch provided by svenn-arne.dragly@qt.io Change-Id: I4515cbfc3a391f887a42178220e6f0814a707745 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/backend')
-rw-r--r--src/render/backend/renderer_p.h2
-rw-r--r--src/render/backend/renderviewbuilder.cpp1
2 files changed, 2 insertions, 1 deletions
diff --git a/src/render/backend/renderer_p.h b/src/render/backend/renderer_p.h
index f72794e16..00f908d28 100644
--- a/src/render/backend/renderer_p.h
+++ b/src/render/backend/renderer_p.h
@@ -209,7 +209,7 @@ public:
inline FilterCompatibleTechniqueJobPtr filterCompatibleTechniqueJob() const { return m_filterCompatibleTechniqueJob; }
inline SynchronizerJobPtr textureLoadSyncJob() const { return m_syncTextureLoadingJob; }
inline UpdateSkinningPaletteJobPtr updateSkinningPaletteJob() const { return m_updateSkinningPaletteJob; }
-
+ inline Qt3DCore::QAspectJobPtr shaderGathererJob() const { return m_shaderGathererJob; }
Qt3DCore::QAbstractFrameAdvanceService *frameAdvanceService() const override;
void registerEventFilter(Qt3DCore::QEventFilterService *service) override;
diff --git a/src/render/backend/renderviewbuilder.cpp b/src/render/backend/renderviewbuilder.cpp
index f34b76c4c..68503ba7e 100644
--- a/src/render/backend/renderviewbuilder.cpp
+++ b/src/render/backend/renderviewbuilder.cpp
@@ -556,6 +556,7 @@ QVector<Qt3DCore::QAspectJobPtr> RenderViewBuilder::buildJobHierachy() const
m_syncRenderCommandBuildingJob->addDependency(m_filterProximityJob);
m_syncRenderCommandBuildingJob->addDependency(m_lightGathererJob);
m_syncRenderCommandBuildingJob->addDependency(m_frustumCullingJob);
+ m_syncRenderCommandBuildingJob->addDependency(m_renderer->shaderGathererJob());
for (const auto &renderViewCommandBuilder : qAsConst(m_renderViewBuilderJobs)) {
renderViewCommandBuilder->addDependency(m_syncRenderCommandBuildingJob);