diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2020-02-14 10:17:14 +0100 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2020-02-14 11:30:48 +0100 |
commit | d967a6369c967d9a1c7f740cfc5c962b8664c9eb (patch) | |
tree | 5f1e45503a852efa42f796a3b41fff2bfd7f406d | |
parent | 92ac289664d50d2905be528c98fc82ecf6e2fcd1 (diff) |
Skip RenderView which don't need to be submitted
This is when a particular set of filters/layers ... result
in a renderview that has no render commands to submit.
Trying to submit such renderview is just a waste of time.
RenderViews that have no commands but do buffer download,
back buffer clearing, setting fences .... are still submitted
even if there are no commands to render.
Change-Id: I4f66334b9b2170249c7c7aae1024ebccc8427750
Reviewed-by: Mike Krus <mike.krus@kdab.com>
-rw-r--r-- | src/plugins/renderers/opengl/renderer/renderer.cpp | 3 | ||||
-rw-r--r-- | src/plugins/renderers/opengl/renderer/renderview.cpp | 23 | ||||
-rw-r--r-- | src/plugins/renderers/opengl/renderer/renderview_p.h | 2 |
3 files changed, 28 insertions, 0 deletions
diff --git a/src/plugins/renderers/opengl/renderer/renderer.cpp b/src/plugins/renderers/opengl/renderer/renderer.cpp index 79eca16fa..e385a264e 100644 --- a/src/plugins/renderers/opengl/renderer/renderer.cpp +++ b/src/plugins/renderers/opengl/renderer/renderer.cpp @@ -1579,6 +1579,9 @@ Renderer::ViewSubmissionResultData Renderer::submitRenderViews(const QVector<Ren // If the RenderView has a RenderStateSet defined const RenderView *renderView = renderViews.at(i); + if (renderView->shouldSkipSubmission()) + continue; + // Check if using the same surface as the previous RenderView. // If not, we have to free up the context from the previous surface // and make the context current on the new surface diff --git a/src/plugins/renderers/opengl/renderer/renderview.cpp b/src/plugins/renderers/opengl/renderer/renderview.cpp index f18f1a06a..47f4beffd 100644 --- a/src/plugins/renderers/opengl/renderer/renderview.cpp +++ b/src/plugins/renderers/opengl/renderer/renderview.cpp @@ -1213,6 +1213,29 @@ void RenderView::setHasBlitFramebufferInfo(bool hasBlitFramebufferInfo) m_hasBlitFramebufferInfo = hasBlitFramebufferInfo; } +bool RenderView::shouldSkipSubmission() const +{ + if (!m_commands.empty()) + return false; + + if (m_hasBlitFramebufferInfo) + return false; + + if (m_isDownloadBuffersEnable) + return false; + + if (m_showDebugOverlay) + return false; + + if (!m_waitFences.empty() || !m_insertFenceIds.empty()) + return false; + + if (m_clearBuffer != QClearBuffers::None) + return false; + + return true; +} + BlitFramebufferInfo RenderView::blitFrameBufferInfo() const { return m_blitFrameBufferInfo; diff --git a/src/plugins/renderers/opengl/renderer/renderview_p.h b/src/plugins/renderers/opengl/renderer/renderview_p.h index a835c17f0..c9e69d507 100644 --- a/src/plugins/renderers/opengl/renderer/renderview_p.h +++ b/src/plugins/renderers/opengl/renderer/renderview_p.h @@ -290,6 +290,8 @@ public: bool hasBlitFramebufferInfo() const; void setHasBlitFramebufferInfo(bool hasBlitFramebufferInfo); + bool shouldSkipSubmission() const; + private: void setShaderAndUniforms(RenderCommand *command, ParameterInfoList ¶meters, |