job->bo_count++;
}
+static void
+subpass_start(struct v3dv_cmd_buffer *cmd_buffer);
+
VkResult
v3dv_CreateCommandPool(VkDevice _device,
const VkCommandPoolCreateInfo *pCreateInfo,
/* Setup for first subpass */
state->subpass_idx = 0;
+
+ subpass_start(cmd_buffer);
}
static void
cmd_buffer->state.dynamic.viewport.count == 0) {
emit_clip_window(job, &state->render_area);
}
+
+ /* FIXME: is here the best moment to do that? or when drawing? */
+ if (cmd_buffer->state.pipeline) {
+ struct v3dv_pipeline *pipeline = cmd_buffer->state.pipeline;
+
+ if (pipeline->vs->assembly_bo)
+ v3dv_job_add_bo(cmd_buffer->state.job, pipeline->vs->assembly_bo);
+ if (pipeline->vs_bin->assembly_bo)
+ v3dv_job_add_bo(cmd_buffer->state.job, pipeline->vs_bin->assembly_bo);
+ if (pipeline->fs->assembly_bo)
+ v3dv_job_add_bo(cmd_buffer->state.job, pipeline->fs->assembly_bo);
+ }
+
}
static void
struct v3dv_job *job = cmd_buffer->state.job;
assert(job);
+ emit_rcl(cmd_buffer);
+
/* This finishes the a binning job.
*
* FIXME: if the next subpass draws to the same RTs, we could skip this
v3dv_cmd_buffer_finish_job(cmd_buffer);
}
-static void
-execute_subpass(struct v3dv_cmd_buffer *cmd_buffer)
-{
- subpass_start(cmd_buffer);
- emit_rcl(cmd_buffer);
- subpass_finish(cmd_buffer);
-}
-
void
v3dv_CmdEndRenderPass(VkCommandBuffer commandBuffer)
{
/* Emit last subpass */
struct v3dv_cmd_buffer_state *state = &cmd_buffer->state;
assert(state->subpass_idx == state->pass->subpass_count - 1);
- execute_subpass(cmd_buffer);
+ subpass_finish(cmd_buffer);
/* We are no longer inside a render pass */
state->pass = NULL;
cmd_buffer->state.pipeline = pipeline;
bind_dynamic_state(cmd_buffer, &pipeline->dynamic_state);
- /* FIXME: is here the best moment to do that? or when drawing? */
- if (pipeline->vs->assembly_bo)
- v3dv_job_add_bo(cmd_buffer->state.job, pipeline->vs->assembly_bo);
- if (pipeline->vs_bin->assembly_bo)
- v3dv_job_add_bo(cmd_buffer->state.job, pipeline->vs_bin->assembly_bo);
- if (pipeline->fs->assembly_bo)
- v3dv_job_add_bo(cmd_buffer->state.job, pipeline->fs->assembly_bo);
-
cmd_buffer->state.dirty |= V3DV_CMD_DIRTY_PIPELINE;
break;