num_wg[0], num_wg[1], num_wg[2],
info->block[0], info->block[1],
info->block[2],
- false);
+ false, info->indirect != NULL);
pan_section_pack(t.cpu, COMPUTE_JOB, PARAMETERS, cfg) {
cfg.job_task_split =
if (info->instance_count > 1) {
panfrost_pack_work_groups_compute(&invocation,
1, vertex_count, info->instance_count,
- 1, 1, 1, true);
+ 1, 1, 1, true, false);
} else {
pan_pack(&invocation, INVOCATION, cfg) {
cfg.invocations = MALI_POSITIVE(vertex_count);
MIDGARD_TILER_JOB,
INVOCATION);
panfrost_pack_work_groups_compute(invoc, 1, 4,
- 1, 1, 1, 1, true);
+ 1, 1, 1, 1, true, false);
panfrost_add_job(desc_pool, scoreboard, MALI_JOB_TYPE_TILER,
false, false, 0, 0, &job, true);
MIDGARD_TILER_JOB,
INVOCATION);
panfrost_pack_work_groups_compute(invoc, 1, 4,
- 1, 1, 1, 1, true);
+ 1, 1, 1, 1, true, false);
panfrost_add_job(desc_pool, scoreboard, MALI_JOB_TYPE_TILER,
false, false, 0, 0, &job, false);
BIFROST_TILER_JOB,
INVOCATION);
panfrost_pack_work_groups_compute(invoc, 1, 4,
- 1, 1, 1, 1, true);
+ 1, 1, 1, 1, true, false);
pan_section_pack(job.cpu, BIFROST_TILER_JOB, PADDING, cfg);
pan_section_pack(job.cpu, BIFROST_TILER_JOB, TILER, cfg) {
unsigned size_x,
unsigned size_y,
unsigned size_z,
- bool quirk_graphics);
+ bool quirk_graphics,
+ bool indirect_dispatch);
/* Tiler structure size computation */
panfrost_pack_work_groups_compute(invocation,
1, 1, 1, 1, 1, 1,
- false);
+ false, false);
pan_section_pack(job.cpu, COMPUTE_JOB, PARAMETERS, cfg) {
cfg.job_task_split = 2;
pan_section_ptr(job.cpu, COMPUTE_JOB, INVOCATION);
panfrost_pack_work_groups_compute(invocation,
1, 1, 1, MIN_MAX_JOBS, 1, 1,
- false);
+ false, false);
pan_section_pack(job.cpu, COMPUTE_JOB, PARAMETERS, cfg) {
cfg.job_task_split = 7;
pan_section_ptr(job.cpu, COMPUTE_JOB, INVOCATION);
panfrost_pack_work_groups_compute(invocation,
1, 1, 1, 1, 1, 1,
- false);
+ false, false);
pan_section_pack(job.cpu, COMPUTE_JOB, PARAMETERS, cfg) {
cfg.job_task_split = 2;
unsigned size_x,
unsigned size_y,
unsigned size_z,
- bool quirk_graphics)
+ bool quirk_graphics,
+ bool indirect_dispatch)
{
uint32_t packed = 0;
cfg.size_y_shift = shifts[1];
cfg.size_z_shift = shifts[2];
cfg.workgroups_x_shift = shifts[3];
- cfg.workgroups_y_shift = shifts[4];
- cfg.workgroups_z_shift = shifts[5];
+
+ if (!indirect_dispatch) {
+ /* Leave zero for the dispatch shader */
+ cfg.workgroups_y_shift = shifts[4];
+ cfg.workgroups_z_shift = shifts[5];
+ }
/* Quirk: for non-instanced graphics, the blob sets
* workgroups_z_shift = 32. This doesn't appear to matter to