From 4d0445d914ae604cad7dcbffcc0634b88a6e8536 Mon Sep 17 00:00:00 2001 From: Job Noorman Date: Thu, 29 Feb 2024 11:24:00 +0100 Subject: [PATCH] ir3: fix alignment of spill slots Alignment was set in units of half registers instead of bytes causing spill slots to sometimes be under-aligned. Fixes: 613eaac ("ir3: Initial support for spilling non-shared registers") Signed-off-by: Job Noorman Part-of: --- src/freedreno/ir3/ir3_spill.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/freedreno/ir3/ir3_spill.c b/src/freedreno/ir3/ir3_spill.c index 0ea80bca337..2e4f260a2f4 100644 --- a/src/freedreno/ir3/ir3_spill.c +++ b/src/freedreno/ir3/ir3_spill.c @@ -673,13 +673,13 @@ get_spill_slot(struct ra_spill_ctx *ctx, struct ir3_register *reg) if (reg->merge_set) { if (reg->merge_set->spill_slot == ~0) { reg->merge_set->spill_slot = ALIGN_POT(ctx->spill_slot, - reg->merge_set->alignment); + reg->merge_set->alignment * 2); ctx->spill_slot = reg->merge_set->spill_slot + reg->merge_set->size * 2; } return reg->merge_set->spill_slot + reg->merge_set_offset * 2; } else { if (reg->spill_slot == ~0) { - reg->spill_slot = ALIGN_POT(ctx->spill_slot, reg_elem_size(reg)); + reg->spill_slot = ALIGN_POT(ctx->spill_slot, reg_elem_size(reg) * 2); ctx->spill_slot = reg->spill_slot + reg_size(reg) * 2; } return reg->spill_slot;