freedreno/a6xx: Skip IBO state when unused
authorRob Clark <robdclark@chromium.org>
Sun, 18 Sep 2022 17:07:34 +0000 (10:07 -0700)
committerMarge Bot <emma+marge@anholt.net>
Tue, 20 Sep 2022 02:22:19 +0000 (02:22 +0000)
Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18646>

src/gallium/drivers/freedreno/a6xx/fd6_emit.c

index 348bb8e..d29db74 100644 (file)
@@ -839,6 +839,11 @@ build_ibo(struct fd6_emit *emit) assert_dt
       assert(ir3_shader_nibo(emit->gs) == 0);
    }
 
+   unsigned nibo = ir3_shader_nibo(emit->fs);
+
+   if (nibo == 0)
+      return NULL;
+
    struct fd_ringbuffer *ibo_state =
       fd6_build_ibo_state(ctx, emit->fs, PIPE_SHADER_FRAGMENT);
    struct fd_ringbuffer *ring = fd_submit_new_ringbuffer(
@@ -849,7 +854,7 @@ build_ibo(struct fd6_emit *emit) assert_dt
                      CP_LOAD_STATE6_0_STATE_TYPE(ST6_SHADER) |
                      CP_LOAD_STATE6_0_STATE_SRC(SS6_INDIRECT) |
                      CP_LOAD_STATE6_0_STATE_BLOCK(SB6_IBO) |
-                     CP_LOAD_STATE6_0_NUM_UNIT(ir3_shader_nibo(emit->fs)));
+                     CP_LOAD_STATE6_0_NUM_UNIT(nibo));
    OUT_RB(ring, ibo_state);
 
    OUT_PKT4(ring, REG_A6XX_SP_IBO, 2);
@@ -859,7 +864,7 @@ build_ibo(struct fd6_emit *emit) assert_dt
     * de-duplicate this from program->config_stateobj
     */
    OUT_PKT4(ring, REG_A6XX_SP_IBO_COUNT, 1);
-   OUT_RING(ring, ir3_shader_nibo(emit->fs));
+   OUT_RING(ring, nibo);
 
    fd_ringbuffer_del(ibo_state);