diff options
Diffstat (limited to 'src/panfrost/encoder/pan_invocation.c')
-rw-r--r-- | src/panfrost/encoder/pan_invocation.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/panfrost/encoder/pan_invocation.c b/src/panfrost/encoder/pan_invocation.c index 810fed3a969..96efd190d82 100644 --- a/src/panfrost/encoder/pan_invocation.c +++ b/src/panfrost/encoder/pan_invocation.c @@ -47,7 +47,8 @@ panfrost_pack_work_groups_compute( unsigned num_z, unsigned size_x, unsigned size_y, - unsigned size_z) + unsigned size_z, + bool quirk_graphics) { /* First of all, all 6 values are off-by-one (strictly positive). * Account for that, first by ensuring all values are strictly positive @@ -98,6 +99,13 @@ panfrost_pack_work_groups_compute( out->workgroups_y_shift = shifts[4]; out->workgroups_z_shift = shifts[5]; + /* Quirk: for non-instanced graphics, the blob sets workgroups_z_shift + * = 32. This doesn't appear to matter to the hardware, but it's good + * to be bit-identical. */ + + if (quirk_graphics && (num_z <= 1)) + out->workgroups_z_shift = 32; + /* Special fields */ out->workgroups_x_shift_2 = MAX2(out->workgroups_x_shift, 2); out->workgroups_x_shift_3 = out->workgroups_x_shift_2; @@ -115,7 +123,7 @@ panfrost_pack_work_groups_fused( unsigned size_y, unsigned size_z) { - panfrost_pack_work_groups_compute(vertex, num_x, num_y, num_z, size_x, size_y, size_z); + panfrost_pack_work_groups_compute(vertex, num_x, num_y, num_z, size_x, size_y, size_z, true); /* Copy results over */ tiler->invocation_count = vertex->invocation_count; |