diff options
author | Ian Romanick <[email protected]> | 2010-06-29 15:19:11 -0700 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2010-06-29 15:32:15 -0700 |
commit | e2f84f04e5df1d4364694e5f150058f7c847550e (patch) | |
tree | 7756bbd29dcc83cf2fbff6aac5c91f35732b87ea /src/glsl/ir_variable.cpp | |
parent | 9c4b1f2bad97b1b83c6bf01db567be5494dfaee5 (diff) |
glsl2: Make gl_MaxDrawBuffers available in the fragment shader
Diffstat (limited to 'src/glsl/ir_variable.cpp')
-rw-r--r-- | src/glsl/ir_variable.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/glsl/ir_variable.cpp b/src/glsl/ir_variable.cpp index 6e466fa6d1e..e298a0e06b5 100644 --- a/src/glsl/ir_variable.cpp +++ b/src/glsl/ir_variable.cpp @@ -42,6 +42,9 @@ add_variable(const char *name, enum ir_variable_mode mode, int slot, var->mode = mode; switch (var->mode) { + case ir_var_auto: + var->read_only = true; + break; case ir_var_in: var->shader_in = true; var->read_only = true; @@ -259,6 +262,18 @@ generate_ARB_draw_buffers_fs_variables(exec_list *instructions, struct _mesa_glsl_parse_state *state, bool warn) { + assert(state->Const.MaxDrawBuffers >= 1); + + ir_variable *const mdb = + add_variable("gl_MaxDrawBuffers", ir_var_auto, -1, + glsl_type::int_type, instructions, state->symbols); + + if (warn) + mdb->warn_extension = "GL_ARB_draw_buffers"; + + mdb->constant_value = new(mdb) + ir_constant(int(state->Const.MaxDrawBuffers)); + const glsl_type *const vec4_array_type = glsl_type::get_array_instance(state->symbols, glsl_type::vec4_type, state->Const.MaxDrawBuffers); |