From d2a0aa5efedf36c30b27521dce00c1d70b905a56 Mon Sep 17 00:00:00 2001 From: Ilia Mirkin Date: Wed, 24 Feb 2021 22:16:52 -0500 Subject: [PATCH] nv50/ir: retrieve (n)ctaid.z from first user param The driver is responsible for feeding this in. Signed-off-by: Ilia Mirkin Reviewed-by: Pierre Moreau Part-of: --- .../nouveau/codegen/nv50_ir_lowering_nv50.cpp | 18 ++++++------------ .../nouveau/codegen/nv50_ir_target_nv50.cpp | 4 ++-- .../drivers/nouveau/nv50/nv50_compute.c | 2 +- 3 files changed, 9 insertions(+), 15 deletions(-) diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nv50.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nv50.cpp index 5c2210e5f87..e03af380bbf 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nv50.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nv50.cpp @@ -1181,19 +1181,13 @@ NV50LoweringPreSSA::handleRDSV(Instruction *i) break; case SV_NCTAID: case SV_CTAID: - case SV_NTID: - if ((sv == SV_NCTAID && idx >= 2) || - (sv == SV_NTID && idx >= 3)) { - bld.mkMov(def, bld.mkImm(1)); - } else if (sv == SV_CTAID && idx >= 2) { - bld.mkMov(def, bld.mkImm(0)); - } else { - Value *x = bld.getSSA(2); - bld.mkOp1(OP_LOAD, TYPE_U16, x, - bld.mkSymbol(FILE_MEMORY_SHARED, 0, TYPE_U16, addr)); - bld.mkCvt(OP_CVT, TYPE_U32, def, TYPE_U16, x); - } + case SV_NTID: { + Value *x = bld.getSSA(2); + bld.mkOp1(OP_LOAD, TYPE_U16, x, + bld.mkSymbol(FILE_MEMORY_SHARED, 0, TYPE_U16, addr)); + bld.mkCvt(OP_CVT, TYPE_U32, def, TYPE_U16, x); break; + } case SV_TID: if (idx == 0) { bld.mkOp2(OP_AND, TYPE_U32, def, tid, bld.mkImm(0x0000ffff)); diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_target_nv50.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_target_nv50.cpp index d0865b82990..1242afbcf50 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_target_nv50.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_target_nv50.cpp @@ -251,9 +251,9 @@ TargetNV50::getSVAddress(DataFile shaderFile, const Symbol *sym) const return shaderFile == FILE_SHADER_INPUT ? 0x18 : sysvalLocation[sym->reg.data.sv.sv]; case SV_NCTAID: - return 0x8 + 2 * sym->reg.data.sv.index; + return sym->reg.data.sv.index >= 2 ? 0x10 : 0x8 + 2 * sym->reg.data.sv.index; case SV_CTAID: - return 0xc + 2 * sym->reg.data.sv.index; + return sym->reg.data.sv.index >= 2 ? 0x12 : 0xc + 2 * sym->reg.data.sv.index; case SV_NTID: return 0x2 + 2 * sym->reg.data.sv.index; case SV_TID: diff --git a/src/gallium/drivers/nouveau/nv50/nv50_compute.c b/src/gallium/drivers/nouveau/nv50/nv50_compute.c index 57f92ea9db1..3cbc1be47f9 100644 --- a/src/gallium/drivers/nouveau/nv50/nv50_compute.c +++ b/src/gallium/drivers/nouveau/nv50/nv50_compute.c @@ -528,7 +528,7 @@ nv50_launch_grid(struct pipe_context *pipe, const struct pipe_grid_info *info) PUSH_DATA (push, cp->code_base); BEGIN_NV04(push, NV50_CP(SHARED_SIZE), 1); - PUSH_DATA (push, align(cp->cp.smem_size + cp->parm_size + 0x10, 0x40)); + PUSH_DATA (push, align(cp->cp.smem_size + cp->parm_size + 0x14, 0x40)); BEGIN_NV04(push, NV50_CP(CP_REG_ALLOC_TEMP), 1); PUSH_DATA (push, cp->max_gpr);