svga: call tgsi_scan_shader() for dummy shaders
authorBrian Paul <brianp@vmware.com>
Wed, 14 Feb 2018 20:50:00 +0000 (13:50 -0700)
committerBrian Paul <brianp@vmware.com>
Thu, 15 Feb 2018 16:05:01 +0000 (09:05 -0700)
If we fail to compile the normal VS or FS we fall back to a simple/
dummy shader.  We need to rescan the the shader to update the shader
info.  Otherwise, this can lead to further translations failures
because the shader info doesn't match the actual shader.

Found by adding some extra debug assertions in the state-update code
while debugging something else.

v2: also update shader generic_inputs/outputs, etc. per Charmaine

Reviewed-by: Charmaine Lee <charmainel@vmware.com>
src/gallium/drivers/svga/svga_state_fs.c
src/gallium/drivers/svga/svga_state_vs.c

index 5e568993feddad4567cc4e2cf28de5f683877531..eeb1ba60f6553534d818a810728ffe6f9a0df02e 100644 (file)
@@ -115,6 +115,10 @@ get_compiled_dummy_shader(struct svga_context *svga,
    FREE((void *) fs->base.tokens);
    fs->base.tokens = dummy;
 
+   tgsi_scan_shader(fs->base.tokens, &fs->base.info);
+   fs->generic_inputs = svga_get_generic_inputs_mask(&fs->base.info);
+   svga_remap_generics(fs->generic_inputs, fs->generic_remap_table);
+
    variant = translate_fragment_program(svga, fs, key);
    return variant;
 }
index a0ab868cbbab80ee4f17c61ef48b26a1544aae0f..3dfc9f451c918d1a8fb2dc14f04ed96092d3a68b 100644 (file)
@@ -105,6 +105,9 @@ get_compiled_dummy_vertex_shader(struct svga_context *svga,
    FREE((void *) vs->base.tokens);
    vs->base.tokens = dummy;
 
+   tgsi_scan_shader(vs->base.tokens, &vs->base.info);
+   vs->generic_outputs = svga_get_generic_outputs_mask(&vs->base.info);
+
    variant = translate_vertex_program(svga, vs, key);
    return variant;
 }