From: Francisco Jerez Date: Tue, 23 Aug 2016 18:15:57 +0000 (-0700) Subject: glsl: Calculate bitset of secondary outputs written in ir_set_program_inouts. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=cb4b38af41952c2e5ee77253592f0d0833aefd28;p=mesa.git glsl: Calculate bitset of secondary outputs written in ir_set_program_inouts. Reviewed-by: Ilia Mirkin --- diff --git a/src/compiler/glsl/ir_set_program_inouts.cpp b/src/compiler/glsl/ir_set_program_inouts.cpp index fcfbcd48c93..06d997352a6 100644 --- a/src/compiler/glsl/ir_set_program_inouts.cpp +++ b/src/compiler/glsl/ir_set_program_inouts.cpp @@ -135,10 +135,14 @@ mark(struct gl_program *prog, ir_variable *var, int offset, int len, prog->SystemValuesRead |= bitfield; } else { assert(var->data.mode == ir_var_shader_out); - if (is_patch_generic) + if (is_patch_generic) { prog->PatchOutputsWritten |= bitfield; - else if (!var->data.read_only) + } else if (!var->data.read_only) { prog->OutputsWritten |= bitfield; + if (var->data.index > 0) + prog->SecondaryOutputsWritten |= bitfield; + } + if (var->data.fb_fetch_output) prog->OutputsRead |= bitfield; } @@ -446,6 +450,7 @@ do_set_program_inouts(exec_list *instructions, struct gl_program *prog, prog->InputsRead = 0; prog->OutputsWritten = 0; + prog->SecondaryOutputsWritten = 0; prog->OutputsRead = 0; prog->PatchInputsRead = 0; prog->PatchOutputsWritten = 0; diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 4013ca7e341..09b84f148a7 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -1919,6 +1919,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 SecondaryOutputsWritten; /**< Subset of OutputsWritten outputs written with non-zero index. */ 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) */