winsys/amdgpu: correctly pad noop IBs for RADEON_NOOP=1
authorMarek Olšák <marek.olsak@amd.com>
Thu, 5 Oct 2023 12:46:56 +0000 (08:46 -0400)
committerMarge Bot <emma+marge@anholt.net>
Mon, 16 Oct 2023 16:16:34 +0000 (16:16 +0000)
We need to use ib_pad_dw_mask, not ib_alignment.

Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25578>

src/gallium/winsys/amdgpu/drm/amdgpu_cs.c

index ef63f04..b963a56 100644 (file)
@@ -1708,10 +1708,11 @@ static void amdgpu_cs_submit_ib(void *job, void *gdata, int thread_index)
 
    if (noop && acs->ip_type == AMD_IP_GFX) {
       /* Reduce the IB size and fill it with NOP to make it like an empty IB. */
-      unsigned noop_size = MIN2(cs->ib[IB_MAIN].ib_bytes, ws->info.ip[AMD_IP_GFX].ib_alignment);
+      unsigned noop_dw_size = ws->info.ip[AMD_IP_GFX].ib_pad_dw_mask + 1;
+      assert(cs->ib[IB_MAIN].ib_bytes / 4 >= noop_dw_size);
 
-      cs->ib_main_addr[0] = PKT3(PKT3_NOP, noop_size / 4 - 2, 0);
-      cs->ib[IB_MAIN].ib_bytes = noop_size;
+      cs->ib_main_addr[0] = PKT3(PKT3_NOP, noop_dw_size - 2, 0);
+      cs->ib[IB_MAIN].ib_bytes = noop_dw_size * 4;
       noop = false;
    }