From c88e7fe29ec7ddab5dc26664b9770066c790ceb5 Mon Sep 17 00:00:00 2001 From: Timothy Arceri Date: Wed, 21 Mar 2018 13:22:52 +1100 Subject: [PATCH] radeonsi/nir: fix explicit component packing for geom/tess doubles MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Reviewed-by: Marek Olšák --- src/gallium/drivers/radeonsi/si_shader.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index 18d5afe6ff6..e261d74b727 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -1290,12 +1290,13 @@ static LLVMValueRef si_nir_load_tcs_varyings(struct ac_shader_abi *abi, is_patch); LLVMValueRef value[4]; - for (unsigned i = 0; i < num_components + component; i++) { + for (unsigned i = 0; i < num_components; i++) { unsigned offset = i; if (llvm_type_is_64bit(ctx, type)) offset *= 2; - value[i] = lds_load(bld_base, type, offset, dw_addr); + offset += component; + value[i + component] = lds_load(bld_base, type, offset, dw_addr); } return ac_build_varying_gather_values(&ctx->ac, value, num_components, component); @@ -1377,13 +1378,14 @@ LLVMValueRef si_nir_load_input_tes(struct ac_shader_abi *abi, * between the NIR and TGSI backends. */ LLVMValueRef value[4]; - for (unsigned i = component; i < num_components + component; i++) { + for (unsigned i = 0; i < num_components; i++) { unsigned offset = i; if (llvm_type_is_64bit(ctx, type)) offset *= 2; - value[i] = buffer_load(&ctx->bld_base, type, offset, - ctx->tess_offchip_ring, base, addr, true); + offset += component; + value[i + component] = buffer_load(&ctx->bld_base, type, offset, + ctx->tess_offchip_ring, base, addr, true); } return ac_build_varying_gather_values(&ctx->ac, value, num_components, component); @@ -1693,13 +1695,14 @@ static LLVMValueRef si_nir_load_input_gs(struct ac_shader_abi *abi, struct si_shader_context *ctx = si_shader_context_from_abi(abi); LLVMValueRef value[4]; - for (unsigned i = component; i < num_components + component; i++) { + for (unsigned i = 0; i < num_components; i++) { unsigned offset = i; if (llvm_type_is_64bit(ctx, type)) offset *= 2; - value[i] = si_llvm_load_input_gs(&ctx->abi, driver_location / 4, - vertex_index, type, offset); + offset += component; + value[i + component] = si_llvm_load_input_gs(&ctx->abi, driver_location / 4, + vertex_index, type, offset); } return ac_build_varying_gather_values(&ctx->ac, value, num_components, component); -- 2.30.2