summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Romanick <ian.d.romanick@intel.com>2010-06-29 15:19:11 -0700
committerIan Romanick <ian.d.romanick@intel.com>2010-06-29 15:32:15 -0700
commite2f84f04e5df1d4364694e5f150058f7c847550e (patch)
tree7756bbd29dcc83cf2fbff6aac5c91f35732b87ea
parent9c4b1f2bad97b1b83c6bf01db567be5494dfaee5 (diff)
glsl2: Make gl_MaxDrawBuffers available in the fragment shader
-rw-r--r--src/glsl/ir_variable.cpp15
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);