glsl2: Conditionally allow optional extensions to be enabled
authorIan Romanick <ian.d.romanick@intel.com>
Wed, 30 Jun 2010 23:42:07 +0000 (16:42 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Fri, 2 Jul 2010 03:40:08 +0000 (20:40 -0700)
The only optional extension currently supported by the compiler is
GL_EXT_texture_array.

src/glsl/glsl_parser_extras.cpp
src/glsl/glsl_parser_extras.h
src/glsl/main.cpp
src/mesa/shader/ir_to_mesa.cpp

index 2e17c4c..fc3f9e9 100644 (file)
@@ -27,6 +27,7 @@
 
 extern "C" {
 #include <talloc.h>
+#include "main/mtypes.h"
 }
 
 #include "ast.h"
@@ -135,6 +136,11 @@ _mesa_glsl_process_extension(const char *name, YYLTYPE *name_locp,
    } else if (strcmp(name, "GL_ARB_texture_rectangle") == 0) {
       state->ARB_texture_rectangle_enable = (ext_mode != extension_disable);
       state->ARB_texture_rectangle_warn = (ext_mode == extension_warn);
+   } else if (strcmp(name, "GL_EXT_texture_array") == 0) {
+      state->EXT_texture_array_enable = (ext_mode != extension_disable);
+      state->EXT_texture_array_warn = (ext_mode == extension_warn);
+
+      unsupported = !state->extensions->EXT_texture_array;
    } else {
       unsupported = true;
    }
index dc3d23a..16f7268 100644 (file)
@@ -90,6 +90,9 @@ struct _mesa_glsl_parse_state {
    unsigned EXT_texture_array_enable:1;
    unsigned EXT_texture_array_warn:1;
    /*@}*/
+
+   /** Extensions supported by the OpenGL implementation. */
+   const struct gl_extensions *extensions;
 };
 
 typedef struct YYLTYPE {
index deaab7e..16bbc8c 100644 (file)
@@ -129,6 +129,7 @@ compile_shader(struct gl_shader *shader)
    state->ARB_texture_rectangle_enable = true;
 
    memset(&ext, 0, sizeof(ext));
+   state->extensions = &ext;
    state->Const.MaxDrawBuffers = 2;
    state->Const.MaxTextureCoords = 4;
 
index 918004c..7c7e368 100644 (file)
@@ -1709,6 +1709,7 @@ _mesa_glsl_compile_shader(GLcontext *ctx, struct gl_shader *shader)
    state->loop_or_switch_nesting = NULL;
    state->ARB_texture_rectangle_enable = true;
 
+   state->extensions = &ctx->Extensions;
    state->Const.MaxDrawBuffers = ctx->Const.MaxDrawBuffers;
    state->Const.MaxTextureCoords = ctx->Const.MaxTextureCoordUnits;