summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Krus <mike.krus@kdab.com>2019-12-07 20:37:43 +0000
committerMike Krus <mike.krus@kdab.com>2019-12-16 09:37:14 +0000
commit94e79666cc987fcc928d43f7f82b8c7b9d4c4acc (patch)
tree16b0e307b5fe73720e65ec177d01ebb4be1ad6ab
parente77c85a20080e183e8ed9efd0080aee8f03a75d4 (diff)
Update textures and disables in postJobs
Work was done in postFrame() in main thread anyway, so reduce amount of jobs slightly Change-Id: I8bbb3efcaf9246eb8df1033bde133bc16233f889 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
-rw-r--r--src/render/renderers/opengl/renderer/renderer.cpp32
-rw-r--r--src/render/renderers/opengl/renderer/renderer_p.h3
-rw-r--r--tests/auto/render/computecommand/tst_computecommand.cpp8
-rw-r--r--tests/auto/render/renderer/tst_renderer.cpp23
4 files changed, 14 insertions, 52 deletions
diff --git a/src/render/renderers/opengl/renderer/renderer.cpp b/src/render/renderers/opengl/renderer/renderer.cpp
index 1e0f6ba96..84624c02f 100644
--- a/src/render/renderers/opengl/renderer/renderer.cpp
+++ b/src/render/renderers/opengl/renderer/renderer.cpp
@@ -277,13 +277,7 @@ Renderer::Renderer(QRenderAspect::RenderType type)
, m_bufferGathererJob(SynchronizerJobPtr::create([this] { lookForDirtyBuffers(); }, JobTypes::DirtyBufferGathering))
, m_vaoGathererJob(SynchronizerJobPtr::create([this] { lookForAbandonedVaos(); }, JobTypes::DirtyVaoGathering))
, m_textureGathererJob(SynchronizerJobPtr::create([this] { lookForDirtyTextures(); }, JobTypes::DirtyTextureGathering))
- , m_sendTextureChangesToFrontendJob(SynchronizerPostFramePtr::create([] {},
- [this] (Qt3DCore::QAspectManager *m) { sendTextureChangesToFrontend(m); },
- JobTypes::SendTextureChangesToFrontend))
, m_sendSetFenceHandlesToFrontendJob(SynchronizerJobPtr::create([this] { sendSetFenceHandlesToFrontend(); }, JobTypes::SendSetFenceHandlesToFrontend))
- , m_sendDisablesToFrontendJob(SynchronizerPostFramePtr::create([] {},
- [this] (Qt3DCore::QAspectManager *m) { sendDisablesToFrontend(m); },
- JobTypes::SendDisablesToFrontend))
, m_introspectShaderJob(SynchronizerPostFramePtr::create([this] { reloadDirtyShaders(); },
[this] (Qt3DCore::QAspectManager *m) { sendShaderChangesToFrontend(m); },
JobTypes::DirtyShaderGathering))
@@ -434,7 +428,7 @@ QOpenGLContext *Renderer::shareContext() const
// Executed in the reloadDirtyShader job
void Renderer::loadShader(Shader *shader, HShader shaderHandle)
{
- Q_UNUSED(shader);
+ Q_UNUSED(shader)
m_dirtyShaders.push_back(shaderHandle);
}
@@ -1114,7 +1108,7 @@ void Renderer::reloadDirtyShaders()
// If api of the renderer matches the one from the technique
if (technique->isCompatibleWithRenderer()) {
const auto passIds = technique->renderPasses();
- for (const QNodeId passId : passIds) {
+ for (const QNodeId &passId : passIds) {
RenderPass *renderPass = m_nodesManager->renderPassManager()->lookupResource(passId);
HShader shaderHandle = m_nodesManager->shaderManager()->lookupHandle(renderPass->shaderProgram());
Shader *shader = m_nodesManager->shaderManager()->data(shaderHandle);
@@ -1154,7 +1148,7 @@ void Renderer::reloadDirtyShaders()
}
}
-// Executed in job postFrame
+// Executed in job (in main thread when jobs are done)
void Renderer::sendShaderChangesToFrontend(Qt3DCore::QAspectManager *manager)
{
Q_ASSERT(isRunning());
@@ -1181,14 +1175,13 @@ void Renderer::sendShaderChangesToFrontend(Qt3DCore::QAspectManager *manager)
}
}
-// Executed in a job (as postFrame)
+// Executed in a job (in main thread when jobs are done)
void Renderer::sendTextureChangesToFrontend(Qt3DCore::QAspectManager *manager)
{
const QVector<QPair<Texture::TextureUpdateInfo, Qt3DCore::QNodeIdVector>> updateTextureProperties = std::move(m_updatedTextureProperties);
for (const auto &pair : updateTextureProperties) {
const Qt3DCore::QNodeIdVector targetIds = pair.second;
- for (const Qt3DCore::QNodeId targetId: targetIds) {
-
+ for (const Qt3DCore::QNodeId &targetId: targetIds) {
// Lookup texture
Texture *t = m_nodesManager->textureManager()->lookupResource(targetId);
// If backend texture is Dirty, some property has changed and the properties we are
@@ -1234,7 +1227,7 @@ void Renderer::sendSetFenceHandlesToFrontend()
}
}
-// Executed in a job postFrame
+// Executed in a job (in main thread when jobs done)
void Renderer::sendDisablesToFrontend(Qt3DCore::QAspectManager *manager)
{
// SubtreeEnabled
@@ -1713,7 +1706,7 @@ Renderer::ViewSubmissionResultData Renderer::submitRenderViews(const QVector<Ren
void Renderer::markDirty(BackendNodeDirtySet changes, BackendNode *node)
{
- Q_UNUSED(node);
+ Q_UNUSED(node)
m_dirtyBits.marked |= changes;
}
@@ -1760,6 +1753,12 @@ void Renderer::jobsDone(Qt3DCore::QAspectManager *manager)
(m_nodesManager->frameGraphManager()->lookupNode(id));
backend->syncRenderCapturesToFrontend(manager);
}
+
+ // Do we need to notify any texture about property changes?
+ if (m_updatedTextureProperties.size() > 0)
+ sendTextureChangesToFrontend(manager);
+
+ sendDisablesToFrontend(manager);
}
// Jobs we may have to run even if no rendering will happen
@@ -1767,10 +1766,6 @@ QVector<QAspectJobPtr> Renderer::preRenderingJobs()
{
QVector<QAspectJobPtr> jobs;
- // Do we need to notify any texture about property changes?
- if (m_updatedTextureProperties.size() > 0)
- jobs.push_back(m_sendTextureChangesToFrontendJob);
-
// Do we need to notify frontend about fence change?
if (m_updatedSetFences.size() > 0)
jobs.push_back(m_sendSetFenceHandlesToFrontendJob);
@@ -1841,7 +1836,6 @@ QVector<Qt3DCore::QAspectJobPtr> Renderer::renderBinJobs()
renderBinJobs.push_back(m_updateSkinningPaletteJob);
renderBinJobs.push_back(m_updateLevelOfDetailJob);
renderBinJobs.push_back(m_cleanupJob);
- renderBinJobs.push_back(m_sendDisablesToFrontendJob);
renderBinJobs.append(bufferJobs);
// Jobs to prepare GL Resource upload
diff --git a/src/render/renderers/opengl/renderer/renderer_p.h b/src/render/renderers/opengl/renderer/renderer_p.h
index d5d2deb31..aad6f425e 100644
--- a/src/render/renderers/opengl/renderer/renderer_p.h
+++ b/src/render/renderers/opengl/renderer/renderer_p.h
@@ -233,7 +233,6 @@ public:
inline SynchronizerPostFramePtr introspectShadersJob() const { return m_introspectShaderJob; }
inline Qt3DCore::QAspectJobPtr bufferGathererJob() const { return m_bufferGathererJob; }
inline Qt3DCore::QAspectJobPtr textureGathererJob() const { return m_textureGathererJob; }
- inline Qt3DCore::QAspectJobPtr sendTextureChangesToFrontendJob() const { return m_sendTextureChangesToFrontendJob; }
inline UpdateEntityLayersJobPtr updateEntityLayersJob() const { return m_updateEntityLayersJob; }
inline LightGathererPtr lightGathererJob() const { return m_lightGathererJob; }
inline RenderableEntityFilterPtr renderableEntityFilterJob() const { return m_renderableEntityFilterJob; }
@@ -394,9 +393,7 @@ private:
SynchronizerJobPtr m_bufferGathererJob;
SynchronizerJobPtr m_vaoGathererJob;
SynchronizerJobPtr m_textureGathererJob;
- SynchronizerPostFramePtr m_sendTextureChangesToFrontendJob;
SynchronizerJobPtr m_sendSetFenceHandlesToFrontendJob;
- SynchronizerPostFramePtr m_sendDisablesToFrontendJob;
SynchronizerPostFramePtr m_introspectShaderJob;
SynchronizerJobPtr m_syncLoadingJobs;
SynchronizerJobPtr m_cacheRenderableEntitiesJob;
diff --git a/tests/auto/render/computecommand/tst_computecommand.cpp b/tests/auto/render/computecommand/tst_computecommand.cpp
index 2046ecc76..4dc6b4436 100644
--- a/tests/auto/render/computecommand/tst_computecommand.cpp
+++ b/tests/auto/render/computecommand/tst_computecommand.cpp
@@ -54,11 +54,6 @@ public:
~tst_Renderer() {
shutdown();
}
-
- Qt3DRender::Render::SynchronizerPostFramePtr sendDisablesToFrontendJob() const
- {
- return m_sendDisablesToFrontendJob;
- }
};
@@ -337,8 +332,7 @@ private Q_SLOTS:
QCOMPARE(computeCommand.isEnabled(), true);
// WHEN
- auto sendDisablesJob = renderer.sendDisablesToFrontendJob();
- Qt3DCore::QAspectJobPrivate::get(sendDisablesJob.data())->postFrame(&manager);
+ renderer.jobsDone(&manager); // so Renderer::sendDisablesToFrontend gets called
// THEN
QCOMPARE(computeCommand.isEnabled(), false);
diff --git a/tests/auto/render/renderer/tst_renderer.cpp b/tests/auto/render/renderer/tst_renderer.cpp
index ede95fe14..0cbc1aefc 100644
--- a/tests/auto/render/renderer/tst_renderer.cpp
+++ b/tests/auto/render/renderer/tst_renderer.cpp
@@ -100,20 +100,6 @@ private Q_SLOTS:
1); // SendSetFenceHandlesJob
// Note: pending set fence handles are only cleared when the job is run
- // WHEN
- renderer.m_updatedTextureProperties.push_back({{}, {}});
- jobs = renderer.preRenderingJobs();
-
- // THEN
- QCOMPARE(jobs.size(),
- 1 + // PickBoundingVolumeJob
- 1 + // RayCastingJob
- 1 + // SendBufferCaptureJob
- 1 + // SendSetFenceHandlesJob
- 1); // SendTextureChangesToFrontend
-
- // Note: pending texture changes are only cleared when the job is run
-
// Properly shutdown command thread
renderer.shutdown();
}
@@ -182,7 +168,6 @@ private Q_SLOTS:
1 + // SyncLoadingJobs
1 + // updateLevelOfDetailJob
1 + // cleanupJob
- 1 + // sendDisablesToFrontend
1 + // VAOGatherer
1 + // BufferGathererJob
1 + // TexturesGathererJob
@@ -212,7 +197,6 @@ private Q_SLOTS:
1 + // VAOGatherer
1 + // updateSkinningPaletteJob
1 + // SyncLoadingJobs
- 1 + // sendDisablesToFrontend
singleRenderViewJobCount +
singleRenderViewCommandRebuildJobCount +
renderViewBuilderMaterialCacheJobCount +
@@ -233,7 +217,6 @@ private Q_SLOTS:
1 + // VAOGatherer
1 + // updateSkinningPaletteJob
1 + // SyncLoadingJobs
- 1 + // sendDisablesToFrontend
singleRenderViewJobCount +
singleRenderViewCommandRebuildJobCount +
renderViewBuilderMaterialCacheJobCount +
@@ -253,7 +236,6 @@ private Q_SLOTS:
1 + // VAOGatherer
1 + // updateSkinningPaletteJob
1 + // SyncLoadingJobs
- 1 + // sendDisablesToFrontend
1 + // EntityEnabledDirty
singleRenderViewJobCount +
layerCacheJobCount);
@@ -275,7 +257,6 @@ private Q_SLOTS:
1 + // UpdateShaderDataTransform
1 + // updateSkinningPaletteJob
1 + // SyncLoadingJobs
- 1 + // sendDisablesToFrontend
1 + // ExpandBoundingVolumeJob
singleRenderViewJobCount);
@@ -293,7 +274,6 @@ private Q_SLOTS:
1 + // VAOGatherer
1 + // updateSkinningPaletteJob
1 + // SyncLoadingJobs
- 1 + // sendDisablesToFrontend
singleRenderViewJobCount +
singleRenderViewCommandRebuildJobCount +
renderViewBuilderMaterialCacheJobCount);
@@ -317,7 +297,6 @@ private Q_SLOTS:
1 + // ExpandBoundingVolumeJob
1 + // RenderableEntityFilterPtr
1 + // SyncRenderableEntities
- 1 + // sendDisablesToFrontend
singleRenderViewCommandRebuildJobCount +
singleRenderViewJobCount);
@@ -338,7 +317,6 @@ private Q_SLOTS:
1 + // CalculateBoundingVolumeJob
1 + // UpdateMeshTriangleListJob
1 + // BufferGathererJob
- 1 + // sendDisablesToFrontend
singleRenderViewJobCount);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
@@ -356,7 +334,6 @@ private Q_SLOTS:
1 + // TexturesGathererJob
1 + // updateSkinningPaletteJob
1 + // SyncTexturesGathererJob
- 1 + // sendDisablesToFrontend
singleRenderViewJobCount);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);