diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2019-11-07 08:26:57 +0100 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2019-12-20 11:58:14 +0100 |
commit | b7873ef58825993f7b820ec78842d0e5bbd7a8a5 (patch) | |
tree | 4d1553961c83e2fc54d4835274dd879b44731f5e /src/render/renderers | |
parent | 390982e5d62b76528ce345dfcac7325abc839935 (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.cpp | 8 |
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(); |