From 3cd5450df52c6a314979f5dadf2f6f9d83deb533 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Thu, 26 Mar 2020 14:14:45 +0100 Subject: [PATCH] ac/nir: split 16-bit SSBO stores on GFX6 Due to possible alignment issues, make sure to split stores of 16-bit vectors. Doom Eternal requires storageBuffer16BitAccess. Cc: 20.0 Signed-off-by: Samuel Pitoiset Reviewed-by: Bas Nieuwenhuizen Part-of: --- src/amd/llvm/ac_nir_to_llvm.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/amd/llvm/ac_nir_to_llvm.c b/src/amd/llvm/ac_nir_to_llvm.c index f68253edc89..00970638516 100644 --- a/src/amd/llvm/ac_nir_to_llvm.c +++ b/src/amd/llvm/ac_nir_to_llvm.c @@ -1741,12 +1741,13 @@ static void visit_store_ssbo(struct ac_nir_context *ctx, num_bytes = 2; } - /* Due to alignment issues, split stores of 8-bit vectors. */ - if (ctx->ac.chip_class == GFX6 && - elem_size_bytes == 1 && count > 1) { + /* Due to alignment issues, split stores of 8-bit/16-bit + * vectors. + */ + if (ctx->ac.chip_class == GFX6 && count > 1 && elem_size_bytes < 4) { writemask |= ((1u << (count - 1)) - 1u) << (start + 1); count = 1; - num_bytes = 1; + num_bytes = elem_size_bytes; } data = extract_vector_range(&ctx->ac, base_data, start, count); -- 2.30.2