summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2015-12-09 12:08:20 +0100
committerPaul Lemire <paul.lemire@kdab.com>2016-01-13 16:09:30 +0000
commitb20f3ffb11ae77751947fd0e31e24ae61e150916 (patch)
treecede2759f8c3c117a8b96fb2e0db23bfe3f91fc2
parenta6d562c546a8540617ec9107c84585f8d45733ea (diff)
RenderView: completed Compute code path
Change-Id: I7fb4569bfcb7b9a0427dbaa67edcf7e005bb5762 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
-rw-r--r--src/render/backend/renderview.cpp36
1 files changed, 26 insertions, 10 deletions
diff --git a/src/render/backend/renderview.cpp b/src/render/backend/renderview.cpp
index 280a83e29..22aa581a7 100644
--- a/src/render/backend/renderview.cpp
+++ b/src/render/backend/renderview.cpp
@@ -469,17 +469,20 @@ void RenderView::buildRenderCommands(Entity *node, const Plane *planes)
// Build renderCommand for current node
if (isEntityInLayers(node, m_data->m_layers)) {
- // 1) Look for Compute Entities if Entity -> components [ ComputeJob, Material ]
- // when the RenderView is part of a DispatchCompute branch
- buildComputeRenderCommands(node);
-
- // 2) Look for Drawable Entities if Entity -> components [ GeometryRenderer, Material ]
- // when the RenderView is not part of a DispatchCompute branch
- // Investigate if it's worth doing as separate jobs
- buildDrawRenderCommands(node, planes);
// Note: in theory going to both code paths is possible but
// would most likely be the result of the user not knowing what he's doing
+ // so we don't handle that case
+ if (m_compute) {
+ // 1) Look for Compute Entities if Entity -> components [ ComputeJob, Material ]
+ // when the RenderView is part of a DispatchCompute branch
+ buildComputeRenderCommands(node);
+ } else {
+ // 2) Look for Drawable Entities if Entity -> components [ GeometryRenderer, Material ]
+ // when the RenderView is not part of a DispatchCompute branch
+ // Investigate if it's worth doing as separate jobs
+ buildDrawRenderCommands(node, planes);
+ }
}
// Traverse children
@@ -547,13 +550,26 @@ void RenderView::buildDrawRenderCommands(Entity *node, const Plane *planes)
void RenderView::buildComputeRenderCommands(Entity *node)
{
- // TO DO: Complete
- Q_UNUSED(node)
// If the RenderView contains only a ComputeDispatch then it cares about
// A ComputeDispatch is also implicitely a NoDraw operation
// enabled flag
// layer component
// material/effect/technique/parameters/filters/
+ ComputeJob *computeJob = Q_NULLPTR;
+ if (node->componentHandle<ComputeJob, 16>() != HComputeJob()
+ && (computeJob = node->renderComponent<ComputeJob>()) != Q_NULLPTR
+ && computeJob->isEnabled()) {
+
+ ParameterInfoList parameters;
+ RenderRenderPassList passes = passesAndParameters(&parameters, node, true);
+
+ Q_FOREACH (RenderPass *pass, passes) {
+ // Add the RenderPass Parameters
+ ParameterInfoList globalParameters = parameters;
+ parametersFromParametersProvider(&globalParameters, m_manager->parameterManager(), pass);
+ // TO DO: Build appropriate Render Commands
+ }
+ }
}
const AttachmentPack &RenderView::attachmentPack() const