radv: be smarter with pipelines when emitting secondary buffers

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
Samuel Pitoiset
2017-10-11 15:54:40 +02:00
parent 67dd52e7e8
commit 4e65b4ea4b

View File

@@ -2650,8 +2650,23 @@ void radv_CmdExecuteCommands(
}
primary->device->ws->cs_execute_secondary(primary->cs, secondary->cs);
primary->state.emitted_pipeline = secondary->state.emitted_pipeline;
primary->state.emitted_compute_pipeline = secondary->state.emitted_compute_pipeline;
/* When the secondary command buffer is compute only we don't
* need to re-emit the current graphics pipeline.
*/
if (secondary->state.emitted_pipeline) {
primary->state.emitted_pipeline =
secondary->state.emitted_pipeline;
}
/* When the secondary command buffer is graphics only we don't
* need to re-emit the current compute pipeline.
*/
if (secondary->state.emitted_compute_pipeline) {
primary->state.emitted_compute_pipeline =
secondary->state.emitted_compute_pipeline;
}
primary->state.last_primitive_reset_en = secondary->state.last_primitive_reset_en;
primary->state.last_primitive_reset_index = secondary->state.last_primitive_reset_index;
}