radeonsi/gfx9: fix vertex idx in ES with multiple waves per threadgroup

Cc: mesa-stable@lists.freedesktop.org
Reviewed: Marek Olšák <marek.olsak@amd.com>
(cherry picked from commit 873789002f)
This commit is contained in:
Nicolai Hähnle 2017-07-14 13:31:49 +02:00 committed by Emil Velikov
parent 99b2613ce1
commit b36ff2d1f2

View file

@ -2879,7 +2879,12 @@ static void si_llvm_emit_es_epilogue(struct lp_build_tgsi_context *bld_base)
if (ctx->screen->b.chip_class >= GFX9 && info->num_outputs) {
unsigned itemsize_dw = es->selector->esgs_itemsize / 4;
lds_base = LLVMBuildMul(gallivm->builder, ac_get_thread_id(&ctx->ac),
LLVMValueRef vertex_idx = ac_get_thread_id(&ctx->ac);
LLVMValueRef wave_idx = unpack_param(ctx, ctx->param_merged_wave_info, 24, 4);
vertex_idx = LLVMBuildOr(gallivm->builder, vertex_idx,
LLVMBuildMul(gallivm->builder, wave_idx,
LLVMConstInt(ctx->i32, 64, false), ""), "");
lds_base = LLVMBuildMul(gallivm->builder, vertex_idx,
LLVMConstInt(ctx->i32, itemsize_dw, 0), "");
}