diff --git a/src/mesa/drivers/dri/i965/brw_compute.c b/src/mesa/drivers/dri/i965/brw_compute.c index d9f181a..e0d9186 100644 --- a/src/mesa/drivers/dri/i965/brw_compute.c +++ b/src/mesa/drivers/dri/i965/brw_compute.c @@ -73,7 +73,23 @@ brw_emit_gpgpu_walker(struct brw_context *brw) right_mask >>= (simd_size - right_non_aligned); uint32_t dwords = brw->gen < 8 ? 11 : 15; + if (brw->compute.num_work_groups_bo) + dwords += 3 * 3; BEGIN_BATCH(dwords); + if (brw->compute.num_work_groups_bo) { + OUT_BATCH((0x36 << 23) | (1 << 21) | (3 - 2)); + OUT_BATCH(0); + OUT_RELOC(brw->compute.num_work_groups_bo, I915_GEM_DOMAIN_VERTEX, 0, + brw->compute.num_work_groups_offset+ 0); + OUT_BATCH((0x36 << 23) | (1 << 21) | (3 - 2)); + OUT_BATCH(0); + OUT_RELOC(brw->compute.num_work_groups_bo, I915_GEM_DOMAIN_VERTEX, 0, + brw->compute.num_work_groups_offset+ 4); + OUT_BATCH((0x36 << 23) | (1 << 21) | (3 - 2)); + OUT_BATCH(0); + OUT_RELOC(brw->compute.num_work_groups_bo, I915_GEM_DOMAIN_VERTEX, 0, + brw->compute.num_work_groups_offset+ 8); + } OUT_BATCH(GPGPU_WALKER << 16 | (dwords - 2) | indirect_flag); OUT_BATCH(0); if (brw->gen >= 8) {