- if (!st->clear.fs)
- st->clear.fs =
- util_make_fragment_passthrough_shader(st->pipe, TGSI_SEMANTIC_GENERIC,
- TGSI_INTERPOLATE_CONSTANT,
- TRUE);
+ struct pipe_screen *pscreen = st->pipe->screen;
+ bool use_nir = PIPE_SHADER_IR_NIR ==
+ pscreen->get_shader_param(pscreen, PIPE_SHADER_VERTEX,
+ PIPE_SHADER_CAP_PREFERRED_IR);
+
+ if (!st->clear.fs) {
+ if (use_nir) {
+ unsigned inputs[] = { VARYING_SLOT_VAR0 };
+ unsigned outputs[] = { FRAG_RESULT_COLOR };
+ unsigned interpolation[] = { INTERP_MODE_FLAT };
+ st->clear.fs = st_nir_make_passthrough_shader(st, "clear FS",
+ MESA_SHADER_FRAGMENT,
+ 1, inputs, outputs,
+ interpolation, 0);
+ } else {
+ st->clear.fs =
+ util_make_fragment_passthrough_shader(st->pipe,
+ TGSI_SEMANTIC_GENERIC,
+ TGSI_INTERPOLATE_CONSTANT,
+ TRUE);
+ }
+ }