From ea8fc23119063eb879aadd3360141226b6ac9287 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Thu, 26 May 2022 21:20:18 -0400 Subject: [PATCH] zink: avoid adding more 64bit alus during bo rewriting nir_unpack_64_2x32 isn't supported, but split is, so use that Reviewed-by: Adam Jackson Part-of: --- src/gallium/drivers/zink/zink_compiler.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/gallium/drivers/zink/zink_compiler.c b/src/gallium/drivers/zink/zink_compiler.c index d66bcdc..403e801 100644 --- a/src/gallium/drivers/zink/zink_compiler.c +++ b/src/gallium/drivers/zink/zink_compiler.c @@ -995,10 +995,9 @@ rewrite_bo_access_instr(nir_builder *b, nir_instr *instr, void *data) if (nir_src_bit_size(intr->src[0]) == 64 && !has_int64) { /* this is always scalarized */ assert(intr->src[0].ssa->num_components == 1); - /* cast to 32bit: nir_unpack_64_2x32 not supported by ntv */ - nir_ssa_def *casted = nir_vec2(b, nir_u2u32(b, intr->src[0].ssa), nir_u2u32(b, nir_ushr_imm(b, intr->src[0].ssa, 32))); + nir_ssa_def *vals[2] = {nir_unpack_64_2x32_split_x(b, intr->src[0].ssa), nir_unpack_64_2x32_split_y(b, intr->src[0].ssa)}; for (unsigned i = 0; i < 2; i++) - nir_store_ssbo(b, nir_channel(b, casted, i), intr->src[1].ssa, nir_iadd_imm(b, intr->src[2].ssa, i), .align_mul = 4, .align_offset = 0); + nir_store_ssbo(b, vals[i], intr->src[1].ssa, nir_iadd_imm(b, intr->src[2].ssa, i), .align_mul = 4, .align_offset = 0); nir_instr_remove(instr); } return true; @@ -1009,10 +1008,9 @@ rewrite_bo_access_instr(nir_builder *b, nir_instr *instr, void *data) if (nir_src_bit_size(intr->src[0]) == 64 && !has_int64) { /* this is always scalarized */ assert(intr->src[0].ssa->num_components == 1); - /* cast to 32bit: nir_unpack_64_2x32 not supported by ntv */ - nir_ssa_def *casted = nir_vec2(b, nir_u2u32(b, intr->src[0].ssa), nir_u2u32(b, nir_ushr_imm(b, intr->src[0].ssa, 32))); + nir_ssa_def *vals[2] = {nir_unpack_64_2x32_split_x(b, intr->src[0].ssa), nir_unpack_64_2x32_split_y(b, intr->src[0].ssa)}; for (unsigned i = 0; i < 2; i++) - nir_store_shared(b, nir_channel(b, casted, i), nir_iadd_imm(b, intr->src[1].ssa, i), .align_mul = 4, .align_offset = 0); + nir_store_shared(b, vals[i], nir_iadd_imm(b, intr->src[1].ssa, i), .align_mul = 4, .align_offset = 0); nir_instr_remove(instr); } return true; -- 2.7.4