From bebb0438113efdcc1c2aaed95c70ba87de1d3053 Mon Sep 17 00:00:00 2001 From: Paul Berry Date: Mon, 18 Jun 2012 12:10:13 -0700 Subject: glsl: Add IsCentroid bitfield to gl_fragment_program. This bitfield tells the back-ends which of a fragment shader's inputs require centroid interpolation. It is only set for GLSL fragment shaders, since assembly fragment shaders don't support centroid interpolation. Reviewed-by: Eric Anholt --- src/glsl/ir_set_program_inouts.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/glsl/ir_set_program_inouts.cpp') diff --git a/src/glsl/ir_set_program_inouts.cpp b/src/glsl/ir_set_program_inouts.cpp index 8f3edb9..a7415c7 100644 --- a/src/glsl/ir_set_program_inouts.cpp +++ b/src/glsl/ir_set_program_inouts.cpp @@ -26,7 +26,8 @@ * * Sets the InputsRead and OutputsWritten of Mesa programs. * - * Additionally, for fragment shaders, sets the InterpQualifier array. + * Additionally, for fragment shaders, sets the InterpQualifier array and + * IsCentroid bitfield. * * Mesa programs (gl_program, not gl_shader_program) have a set of * flags indicating which varyings are read and written. Computing @@ -88,6 +89,8 @@ mark(struct gl_program *prog, ir_variable *var, int offset, int len, gl_fragment_program *fprog = (gl_fragment_program *) prog; fprog->InterpQualifier[var->location + var->index + offset + i] = (glsl_interp_qualifier) var->interpolation; + if (var->centroid) + fprog->IsCentroid |= bitfield; } } else if (var->mode == ir_var_system_value) { prog->SystemValuesRead |= bitfield; @@ -178,6 +181,7 @@ do_set_program_inouts(exec_list *instructions, struct gl_program *prog, if (is_fragment_shader) { memset(((gl_fragment_program *) prog)->InterpQualifier, 0, sizeof(((gl_fragment_program *) prog)->InterpQualifier)); + ((gl_fragment_program *) prog)->IsCentroid = 0; } visit_list_elements(&v, instructions); } -- cgit v1.1