r300g: use a dummy replacement vertex shader if the shader compilation fails
[mesa.git] / src / gallium / drivers / r300 / r300_state.c
index 6e69155068bb1f75ef203537cb6b9fb5ddb4e770..51c47770fe04edbc808c96aea19b769ad36e540e 100644 (file)
@@ -679,9 +679,6 @@ static void* r300_create_fs_state(struct pipe_context* pipe,
     fs->state = *shader;
     fs->state.tokens = tgsi_dup_tokens(shader->tokens);
 
-    tgsi_scan_shader(shader->tokens, &fs->info);
-    r300_shader_read_fs_inputs(&fs->info, &fs->inputs);
-
     return (void*)fs;
 }
 
@@ -1103,7 +1100,7 @@ static void r300_set_viewport_state(struct pipe_context* pipe,
     }
 
     r300->viewport_state.dirty = TRUE;
-    if (r300->fs && r300->fs->inputs.wpos != ATTR_UNUSED) {
+    if (r300->fs && r300->fs->shader->inputs.wpos != ATTR_UNUSED) {
         r300->dirty_state |= R300_NEW_FRAGMENT_SHADER_CONSTANTS;
     }
 }
@@ -1293,10 +1290,13 @@ static void* r300_create_vs_state(struct pipe_context* pipe,
     struct r300_context* r300 = r300_context(pipe);
 
     struct r300_vertex_shader* vs = CALLOC_STRUCT(r300_vertex_shader);
-    r300_vertex_shader_common_init(vs, shader);
+
+    /* Copy state directly into shader. */
+    vs->state = *shader;
+    vs->state.tokens = tgsi_dup_tokens(shader->tokens);
 
     if (r300->screen->caps.has_tcl) {
-        r300_translate_vertex_shader(r300, vs);
+        r300_translate_vertex_shader(r300, vs, vs->state.tokens);
     } else {
         vs->draw_vs = draw_create_vertex_shader(r300->draw, shader);
     }