st/mesa: remove output register reads inside shaders
authorMarek Olšák <maraeo@gmail.com>
Sun, 15 Aug 2010 23:53:30 +0000 (01:53 +0200)
committerMarek Olšák <maraeo@gmail.com>
Mon, 16 Aug 2010 00:19:18 +0000 (02:19 +0200)
This is a GLSL2 regression fix.

src/mesa/state_tracker/st_program.c

index 91528c227b23974ac850b76eaee1c4b058bbcbb8..8c2d8b6154bbef7f5f68f9e0ce2e1a57933fa141 100644 (file)
@@ -207,6 +207,9 @@ st_translate_vertex_program(struct st_context *st,
    enum pipe_error error;
    unsigned num_outputs;
 
+   _mesa_remove_output_reads(&stvp->Base.Base, PROGRAM_OUTPUT);
+   _mesa_remove_output_reads(&stvp->Base.Base, PROGRAM_VARYING);
+
    ureg = ureg_create( TGSI_PROCESSOR_VERTEX );
    if (ureg == NULL) {
       FREE(vpv);
@@ -298,6 +301,8 @@ st_translate_fragment_program(struct st_context *st,
    ubyte fs_output_semantic_index[PIPE_MAX_SHADER_OUTPUTS];
    uint fs_num_outputs = 0;
 
+   _mesa_remove_output_reads(&stfp->Base.Base, PROGRAM_OUTPUT);
+
    /*
     * Convert Mesa program inputs to TGSI input register semantics.
     */
@@ -485,6 +490,9 @@ st_translate_geometry_program(struct st_context *st,
    GLuint maxSlot = 0;
    struct ureg_program *ureg;
 
+   _mesa_remove_output_reads(&stgp->Base.Base, PROGRAM_OUTPUT);
+   _mesa_remove_output_reads(&stgp->Base.Base, PROGRAM_VARYING);
+
    ureg = ureg_create( TGSI_PROCESSOR_GEOMETRY );
    if (ureg == NULL) {
       return;