- /* we make a private copy of the tokens */
- vs->base.state.tokens = tgsi_dup_tokens(templ->tokens);
- if (!vs->base.state.tokens) {
- FREE(vs);
- return NULL;
+ /* due to some bugs in the feedback state tracker we have to check
+ for ir.nir & PIPE_SHADER_IR_NIR here. */
+ if (state->ir.nir && state->type == PIPE_SHADER_IR_NIR) {
+ vs->base.state.ir.nir = state->ir.nir;
+ if (!draw->pipe->screen->get_param(draw->pipe->screen, PIPE_CAP_PACKED_UNIFORMS))
+ NIR_PASS_V(state->ir.nir, nir_lower_uniforms_to_ubo, 16);
+ nir_tgsi_scan_shader(state->ir.nir, &vs->base.info, true);
+ } else {
+ /* we make a private copy of the tokens */
+ vs->base.state.tokens = tgsi_dup_tokens(state->tokens);
+ if (!vs->base.state.tokens) {
+ FREE(vs);
+ return NULL;
+ }
+
+ tgsi_scan_shader(state->tokens, &vs->base.info);