- nir_ssa_def *face = nir_channel(b, load_input(b, state->face), 0);
- nir_ssa_def *front = load_input(b, state->colors[idx].front);
- nir_ssa_def *back = load_input(b, state->colors[idx].back);
- nir_ssa_def *cond = nir_flt(b, face, nir_imm_float(b, 0.0));
- nir_ssa_def *color = nir_bcsel(b, cond, back, front);
+ /* gl_FrontFace is a boolean but the intrinsic constructor creates
+ * 32-bit value by default.
+ */
+ nir_ssa_def *face;
+ if (state->face_sysval)
+ face = nir_load_front_face(b, 1);
+ else
+ face = nir_load_var(b, state->face);
+
+ nir_ssa_def *front, *back;
+ if (intr->intrinsic == nir_intrinsic_load_deref) {
+ front = nir_load_var(b, state->colors[idx].front);
+ back = nir_load_var(b, state->colors[idx].back);
+ } else {
+ front = load_input(b, state->colors[idx].front);
+ back = load_input(b, state->colors[idx].back);
+ }
+ nir_ssa_def *color = nir_bcsel(b, face, front, back);