From 5786c63be305636450d375e9637622780dbfdc4a Mon Sep 17 00:00:00 2001 From: Karol Herbst Date: Sat, 4 Jul 2020 11:32:14 +0200 Subject: [PATCH] nv50/ir/nir: fix interpolation on explicit operations Fixes a bunch of interpolate tests in the aosp GLES CTS Signed-off-by: Karol Herbst Part-of: --- .../drivers/nouveau/codegen/nv50_ir_from_nir.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_from_nir.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_from_nir.cpp index c634978497d..d5b81b84c35 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_from_nir.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_from_nir.cpp @@ -1692,11 +1692,21 @@ Converter::visit(nir_intrinsic_instr *insn) // see load_barycentric_* handling if (prog->getType() == Program::TYPE_FRAGMENT) { - mode = translateInterpMode(&vary, nvirOp); if (op == nir_intrinsic_load_interpolated_input) { ImmediateValue immMode; if (getSrc(&insn->src[0], 1)->getUniqueInsn()->src(0).getImmediate(immMode)) - mode |= immMode.reg.data.u32; + mode = immMode.reg.data.u32; + } + if (mode == NV50_IR_INTERP_DEFAULT) + mode |= translateInterpMode(&vary, nvirOp); + else { + if (vary.linear) { + nvirOp = OP_LINTERP; + mode |= NV50_IR_INTERP_LINEAR; + } else { + nvirOp = OP_PINTERP; + mode |= NV50_IR_INTERP_PERSPECTIVE; + } } } -- 2.30.2