summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2019-07-17 12:49:01 +0200
committerPaul Lemire <paul.lemire@kdab.com>2019-07-19 10:23:35 +0200
commita576ce8e0e4a5fb0aa2a09523f17522f0357faae (patch)
tree7c44ea3a81677cfb2ac70c3b74eac97809a26536
parenta7ca5cdec02ce67e28dacd0e6e2e5d666d872dcd (diff)
Align RenderView::buildComputeRenderCommands with buildDrawRenderCommands
State and parameter handling are the same between the two branches Change-Id: Ic8394a969184daead33253c9303c20ecf1a97484 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r--src/render/renderers/opengl/renderer/renderview.cpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/render/renderers/opengl/renderer/renderview.cpp b/src/render/renderers/opengl/renderer/renderview.cpp
index 2c96939a7..62758bb53 100644
--- a/src/render/renderers/opengl/renderer/renderview.cpp
+++ b/src/render/renderers/opengl/renderer/renderview.cpp
@@ -718,15 +718,26 @@ QVector<RenderCommand *> RenderView::buildComputeRenderCommands(const QVector<En
// 1 RenderCommand per RenderPass pass on an Entity with a Mesh
for (const RenderPassParameterData &passData : renderPassData) {
// Add the RenderPass Parameters
- ParameterInfoList globalParameters = passData.parameterInfo;
+ RenderCommand *command = new RenderCommand();
RenderPass *pass = passData.pass;
- parametersFromParametersProvider(&globalParameters, m_manager->parameterManager(), pass);
- RenderCommand *command = new RenderCommand();
+ if (pass->hasRenderStates()) {
+ command->m_stateSet = new RenderStateSet();
+ addUniqueStatesToRenderStateSet(command->m_stateSet, pass->renderStates(), m_manager->renderStateManager());
+
+ // Merge per pass stateset with global stateset
+ // so that the local stateset only overrides
+ if (m_stateSet != nullptr)
+ command->m_stateSet->merge(m_stateSet);
+ command->m_changeCost = m_renderer->defaultRenderState()->changeCost(command->m_stateSet);
+ }
+
command->m_type = RenderCommand::Compute;
command->m_workGroups[0] = std::max(m_workGroups[0], computeJob->x());
command->m_workGroups[1] = std::max(m_workGroups[1], computeJob->y());
command->m_workGroups[2] = std::max(m_workGroups[2], computeJob->z());
+
+ ParameterInfoList globalParameters = passData.parameterInfo;
setShaderAndUniforms(command,
pass,
globalParameters,