freedreno/a6xx: Set bin size per bin

It is not saved/restored by level 1 preemption with skipsaverestore=1,
so we need to set it for each bin.

Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30544>
This commit is contained in:
Rob Clark 2024-09-24 13:43:06 -07:00 committed by Marge Bot
parent be6342633c
commit f3cc9335e6

View file

@ -1220,30 +1220,24 @@ fd6_emit_tile_prep(struct fd_batch *batch, const struct fd_tile *tile)
OUT_PKT7(ring, CP_SET_VISIBILITY_OVERRIDE, 1);
OUT_RING(ring, 0x0);
set_window_offset<CHIP>(ring, x1, y1);
const struct fd_gmem_stateobj *gmem = batch->gmem_state;
set_bin_size<CHIP>(ring, gmem, {
.render_mode = RENDERING_PASS,
.force_lrz_write_dis = !ctx->screen->info->a6xx.has_lrz_feedback,
.buffers_location = BUFFERS_IN_GMEM,
.lrz_feedback_zmode_mask = ctx->screen->info->a6xx.has_lrz_feedback
? LRZ_FEEDBACK_EARLY_LRZ_LATE_Z
: LRZ_FEEDBACK_NONE,
});
OUT_PKT7(ring, CP_SET_MODE, 1);
OUT_RING(ring, 0x0);
} else {
set_window_offset<CHIP>(ring, x1, y1);
OUT_PKT7(ring, CP_SET_VISIBILITY_OVERRIDE, 1);
OUT_RING(ring, 0x1);
OUT_PKT7(ring, CP_SET_MODE, 1);
OUT_RING(ring, 0x0);
}
set_window_offset<CHIP>(ring, x1, y1);
set_bin_size<CHIP>(ring, gmem, {
.render_mode = RENDERING_PASS,
.force_lrz_write_dis = !ctx->screen->info->a6xx.has_lrz_feedback,
.buffers_location = BUFFERS_IN_GMEM,
.lrz_feedback_zmode_mask = ctx->screen->info->a6xx.has_lrz_feedback
? LRZ_FEEDBACK_EARLY_LRZ_LATE_Z
: LRZ_FEEDBACK_NONE,
});
OUT_PKT7(ring, CP_SET_MODE, 1);
OUT_RING(ring, 0x0);
}
static void