- CachedShaders[i].handle =
- util_make_vertex_passthrough_shader(pipe,
- num_attribs,
- semantic_names,
- semantic_indexes);
+ enum pipe_shader_ir preferred_ir =
+ screen->get_shader_param(screen, PIPE_SHADER_VERTEX,
+ PIPE_SHADER_CAP_PREFERRED_IR);
+
+ if (preferred_ir == PIPE_SHADER_IR_NIR) {
+ unsigned inputs[2 + MAX_TEXTURE_UNITS];
+ unsigned outputs[2 + MAX_TEXTURE_UNITS];
+
+ for (int j = 0; j < num_attribs; j++) {
+ inputs[j] = semantic_to_vert_attrib(semantic_names[j]);
+ outputs[j] = semantic_to_varying_slot(semantic_names[j]);
+ }
+
+ CachedShaders[i].handle =
+ st_nir_make_passthrough_shader(st, "st/drawtex VS",
+ MESA_SHADER_VERTEX,
+ num_attribs, inputs,
+ outputs, NULL, 0);
+ } else {
+ CachedShaders[i].handle =
+ util_make_vertex_passthrough_shader(pipe,
+ num_attribs,
+ semantic_names,
+ semantic_indexes, FALSE);
+ }
+