glsl2: Make gl_MaxDrawBuffers available in the fragment shader
authorIan Romanick <ian.d.romanick@intel.com>
Tue, 29 Jun 2010 22:19:11 +0000 (15:19 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Tue, 29 Jun 2010 22:32:15 +0000 (15:32 -0700)
src/glsl/ir_variable.cpp

index 6e466fa6d1eff46f4ac350393663bd3122d43a31..e298a0e06b50100b8eaae560b88ed23f2f16ec83 100644 (file)
@@ -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);