From: Karol Herbst Date: Sat, 4 Jul 2020 09:32:14 +0000 (+0200) Subject: nv50/ir/nir: fix interpolation on explicit operations X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5786c63be305636450d375e9637622780dbfdc4a;p=mesa.git 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: --- 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; + } } }