panfrost: Fix attribute buffer underallocation
[mesa.git] / src / gallium / drivers / panfrost / pan_compute.c
index 09ab09fb63ee74bc0ebdc8cf141d5d215e53dc9b..64d868448448d41461881361dbb850413956ad90 100644 (file)
@@ -102,7 +102,7 @@ panfrost_launch_grid(struct pipe_context *pipe,
         ctx->compute_grid = info;
 
         /* TODO: Stub */
-        struct midgard_payload_vertex_tiler *payload = &ctx->payloads[PIPE_SHADER_COMPUTE];
+        struct midgard_payload_vertex_tiler payload;
 
         /* We implement OpenCL inputs as uniforms (or a UBO -- same thing), so
          * reuse the graphics path for this by lowering to Gallium */
@@ -117,20 +117,25 @@ panfrost_launch_grid(struct pipe_context *pipe,
         if (info->input)
                 pipe->set_constant_buffer(pipe, PIPE_SHADER_COMPUTE, 0, &ubuf);
 
-        panfrost_vt_init(ctx, PIPE_SHADER_COMPUTE, payload);
+        panfrost_vt_init(ctx, PIPE_SHADER_COMPUTE, &payload.prefix, &payload.postfix);
 
-        panfrost_emit_shader_meta(batch, PIPE_SHADER_COMPUTE, payload);
-        panfrost_emit_const_buf(batch, PIPE_SHADER_COMPUTE, payload);
-        panfrost_emit_shared_memory(batch, info, payload);
+        panfrost_emit_shader_meta(batch, PIPE_SHADER_COMPUTE, &payload.postfix);
+        panfrost_emit_const_buf(batch, PIPE_SHADER_COMPUTE, &payload.postfix);
+        panfrost_emit_shared_memory(batch, info, &payload);
 
         /* Invoke according to the grid info */
 
-        panfrost_pack_work_groups_compute(&payload->prefix,
-                        info->grid[0], info->grid[1], info->grid[2],
-                        info->block[0], info->block[1], info->block[2], false);
-
-        panfrost_new_job(batch, JOB_TYPE_COMPUTE, true, 0, payload, sizeof(*payload), false);
-        panfrost_flush_all_batches(ctx, true);
+        panfrost_pack_work_groups_compute(&payload.prefix,
+                                          info->grid[0], info->grid[1],
+                                          info->grid[2],
+                                          info->block[0], info->block[1],
+                                          info->block[2],
+                                          false);
+
+        panfrost_new_job(&batch->pool, &batch->scoreboard,
+                        MALI_JOB_TYPE_COMPUTE, true, 0, &payload,
+                         sizeof(payload), false);
+        panfrost_flush_all_batches(ctx, 0);
 }
 
 static void