turnip: Fix reservation for indirect compute's IR3_DP_SUBGROUP_ID_SHIFT.
authorEmma Anholt <emma@anholt.net>
Wed, 21 Sep 2022 19:49:07 +0000 (12:49 -0700)
committerMarge Bot <emma+marge@anholt.net>
Thu, 27 Oct 2022 20:31:34 +0000 (20:31 +0000)
Fixes an assert in GravityMark.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19203>

src/freedreno/vulkan/tu_cmd_buffer.c

index f7c89a2..db18d28 100644 (file)
@@ -5165,7 +5165,8 @@ tu_emit_compute_driver_params(struct tu_cmd_buffer *cmd,
     * indirect dispatch.
     */
    if (info->indirect && num_consts > IR3_DP_BASE_GROUP_X) {
-      tu_cs_emit_pkt7(cs, tu6_stage2opcode(type), 7);
+      bool emit_local = num_consts > IR3_DP_LOCAL_GROUP_SIZE_X;
+      tu_cs_emit_pkt7(cs, tu6_stage2opcode(type), 7 + (emit_local ? 4 : 0));
       tu_cs_emit(cs, CP_LOAD_STATE6_0_DST_OFF(offset + (IR3_DP_BASE_GROUP_X / 4)) |
                  CP_LOAD_STATE6_0_STATE_TYPE(ST6_CONSTANTS) |
                  CP_LOAD_STATE6_0_STATE_SRC(SS6_DIRECT) |
@@ -5176,7 +5177,7 @@ tu_emit_compute_driver_params(struct tu_cmd_buffer *cmd,
       tu_cs_emit(cs, 0); /* BASE_GROUP_Y */
       tu_cs_emit(cs, 0); /* BASE_GROUP_Z */
       tu_cs_emit(cs, subgroup_size);
-      if (num_consts > IR3_DP_LOCAL_GROUP_SIZE_X) {
+      if (emit_local) {
          assert(num_consts == align(IR3_DP_SUBGROUP_ID_SHIFT, 4));
          tu_cs_emit(cs, 0); /* LOCAL_GROUP_SIZE_X */
          tu_cs_emit(cs, 0); /* LOCAL_GROUP_SIZE_Y */