glsl: Keep track of the set of fragment outputs read by a GL program.
authorFrancisco Jerez <currojerez@riseup.net>
Wed, 20 Jul 2016 03:30:24 +0000 (20:30 -0700)
committerFrancisco Jerez <currojerez@riseup.net>
Wed, 24 Aug 2016 20:28:31 +0000 (13:28 -0700)
This is the set of shader outputs whose initial value is provided to
the shader by some external means when the shader is executed, rather
than computed by the shader itself.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/compiler/glsl/ir_set_program_inouts.cpp
src/mesa/main/mtypes.h

index a6475b519e4a84a7dad346f3b86aec73a6ae07bc..fcfbcd48c93b3d80f3b411d4052c4bf6bfc1f8a1 100644 (file)
@@ -139,6 +139,8 @@ mark(struct gl_program *prog, ir_variable *var, int offset, int len,
             prog->PatchOutputsWritten |= bitfield;
          else if (!var->data.read_only)
             prog->OutputsWritten |= bitfield;
+         if (var->data.fb_fetch_output)
+            prog->OutputsRead |= bitfield;
       }
    }
 }
@@ -444,6 +446,7 @@ do_set_program_inouts(exec_list *instructions, struct gl_program *prog,
 
    prog->InputsRead = 0;
    prog->OutputsWritten = 0;
+   prog->OutputsRead = 0;
    prog->PatchInputsRead = 0;
    prog->PatchOutputsWritten = 0;
    prog->SystemValuesRead = 0;
index 965de5dc8b4b60d59e72f3faec09f026d40f48e6..d0ceda9ed251537a3e09c38cf98404a78afe68c3 100644 (file)
@@ -1907,6 +1907,7 @@ struct gl_program
    GLbitfield64 InputsRead;     /**< Bitmask of which input regs are read */
    GLbitfield64 DoubleInputsRead;     /**< Bitmask of which input regs are read  and are doubles */
    GLbitfield64 OutputsWritten; /**< Bitmask of which output regs are written */
+   GLbitfield64 OutputsRead; /**< Bitmask of which output regs are read */
    GLbitfield PatchInputsRead;  /**< VAR[0..31] usage for patch inputs (user-defined only) */
    GLbitfield PatchOutputsWritten; /**< VAR[0..31] usage for patch outputs (user-defined only) */
    GLbitfield SystemValuesRead;   /**< Bitmask of SYSTEM_VALUE_x inputs used */