diff --git a/.pick_status.json b/.pick_status.json index 4332c441e21..12c5118019b 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -751,7 +751,7 @@ "description": "ac/nir: set TRUNC_COORD=0 for nir_texop_tg4", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": "58f25098a0dc4f4976dadacdc4e7a9db42ec0c50" }, diff --git a/src/amd/llvm/ac_nir_to_llvm.c b/src/amd/llvm/ac_nir_to_llvm.c index fc61447d81d..cd69c3c9d8a 100644 --- a/src/amd/llvm/ac_nir_to_llvm.c +++ b/src/amd/llvm/ac_nir_to_llvm.c @@ -4625,6 +4625,13 @@ static void visit_tex(struct ac_nir_context *ctx, nir_tex_instr *instr) } } + /* Set TRUNC_COORD=0 for textureGather(). */ + if (instr->op == nir_texop_tg4) { + LLVMValueRef dword0 = LLVMBuildExtractElement(ctx->ac.builder, args.sampler, ctx->ac.i32_0, ""); + dword0 = LLVMBuildAnd(ctx->ac.builder, dword0, LLVMConstInt(ctx->ac.i32, C_008F30_TRUNC_COORD, 0), ""); + args.sampler = LLVMBuildInsertElement(ctx->ac.builder, args.sampler, dword0, ctx->ac.i32_0, ""); + } + assert(instr->dest.is_ssa); args.d16 = instr->dest.ssa.bit_size == 16; args.tfe = instr->is_sparse;