summaryrefslogtreecommitdiffstats
path: root/src/render/renderers
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2019-11-07 08:26:57 +0100
committerPaul Lemire <paul.lemire@kdab.com>2019-12-20 11:58:14 +0100
commitb7873ef58825993f7b820ec78842d0e5bbd7a8a5 (patch)
tree4d1553961c83e2fc54d4835274dd879b44731f5e /src/render/renderers
parent390982e5d62b76528ce345dfcac7325abc839935 (diff)
QSortPolicy: add Uniform sorting mode
We used to perform uniform minization between adjacent render commands all the time. Since this can yield to a higher CPU usages (but more efficient rendering submission), we now make this step optional. [ChangeLog] QSortPolicy add Uniform mode (to control whether uniform minization should be performed) Change-Id: I5c0e0dba22400a9884ee1d75426fd76b073fdcb5 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/renderers')
-rw-r--r--src/render/renderers/opengl/renderer/renderview.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/render/renderers/opengl/renderer/renderview.cpp b/src/render/renderers/opengl/renderer/renderview.cpp
index c00a92629..60ebc2193 100644
--- a/src/render/renderers/opengl/renderer/renderview.cpp
+++ b/src/render/renderers/opengl/renderer/renderview.cpp
@@ -467,6 +467,8 @@ int findSubRange(const QVector<RenderCommand> &commands,
return advanceUntilNonAdjacent(commands, begin, end, AdjacentSubRangeFinder<QSortPolicy::FrontToBack>::adjacentSubRange);
case QSortPolicy::Texture:
return advanceUntilNonAdjacent(commands, begin, end, AdjacentSubRangeFinder<QSortPolicy::Texture>::adjacentSubRange);
+ case QSortPolicy::Uniform:
+ return end;
default:
Q_UNREACHABLE();
return end;
@@ -513,6 +515,8 @@ void sortCommandRange(QVector<RenderCommand> &commands, int begin, const int end
case QSortPolicy::Texture:
SubRangeSorter<QSortPolicy::Texture>::sortSubRange(commands.begin() + begin, commands.begin() + end);
break;
+ case QSortPolicy::Uniform:
+ break;
default:
Q_UNREACHABLE();
}
@@ -536,6 +540,10 @@ void RenderView::sort()
// For RenderCommand with the same shader
// We compute the adjacent change cost
+ // Only perform uniform minimization if we explicitly asked for it
+ if (!m_data.m_sortingTypes.contains(QSortPolicy::Uniform))
+ return;
+
// Minimize uniform changes
int i = 0;
const int commandSize = m_commands.size();