summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2020-02-14 10:17:14 +0100
committerPaul Lemire <paul.lemire@kdab.com>2020-02-14 11:30:48 +0100
commitd967a6369c967d9a1c7f740cfc5c962b8664c9eb (patch)
tree5f1e45503a852efa42f796a3b41fff2bfd7f406d
parent92ac289664d50d2905be528c98fc82ecf6e2fcd1 (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.cpp3
-rw-r--r--src/plugins/renderers/opengl/renderer/renderview.cpp23
-rw-r--r--src/plugins/renderers/opengl/renderer/renderview_p.h2
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 &parameters,