unreachable("Invalid format");
}
+static void
+agx_emit_load_coefficients(agx_builder *b, agx_index dest,
+ nir_intrinsic_instr *instr)
+{
+ enum glsl_interp_mode mode = nir_intrinsic_interp_mode(instr);
+ bool smooth = (mode != INTERP_MODE_FLAT);
+ bool perspective = smooth && (mode != INTERP_MODE_NOPERSPECTIVE);
+
+ agx_index cf = agx_get_cf(b->shader, smooth, perspective,
+ nir_intrinsic_io_semantics(instr).location,
+ nir_intrinsic_component(instr), 1);
+
+ agx_ldcf_to(b, dest, cf, 1);
+ agx_emit_cached_split(b, dest, 3);
+}
+
static void
agx_emit_load_vary_flat(agx_builder *b, agx_index dest,
nir_intrinsic_instr *instr)
agx_emit_load_vary_flat(b, dst, instr);
return NULL;
+ case nir_intrinsic_load_coefficients_agx:
+ assert(stage == MESA_SHADER_FRAGMENT);
+ agx_emit_load_coefficients(b, dst, instr);
+ return NULL;
+
case nir_intrinsic_load_agx:
case nir_intrinsic_load_constant_agx:
agx_emit_load(b, dst, instr);