diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2018-02-27 11:03:51 +0100 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2018-02-28 12:15:37 +0000 |
commit | bf0b3bdf5ab7c15bf72eced860053a611eccda4a (patch) | |
tree | 01983b14f779cf98748405b89f0a50425750e448 /src/render/backend | |
parent | d3b6a6054ce0b322611c465643aa55f7c60a276e (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.h | 2 | ||||
-rw-r--r-- | src/render/backend/renderviewbuilder.cpp | 1 |
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); |