summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorIan Romanick <[email protected]>2010-06-30 16:42:07 -0700
committerIan Romanick <[email protected]>2010-07-01 20:40:08 -0700
commit667f4e1940c4c4660e35dc9906672a476369660f (patch)
treecec67053730af9c360c3c1148fd55eb7bcb3d2fa /src
parentefb6b24223e0bfd29959e131cd308b1e07ff20df (diff)
glsl2: Conditionally allow optional extensions to be enabled
The only optional extension currently supported by the compiler is GL_EXT_texture_array.
Diffstat (limited to 'src')
-rw-r--r--src/glsl/glsl_parser_extras.cpp6
-rw-r--r--src/glsl/glsl_parser_extras.h3
-rw-r--r--src/glsl/main.cpp1
-rw-r--r--src/mesa/shader/ir_to_mesa.cpp1
4 files changed, 11 insertions, 0 deletions
diff --git a/src/glsl/glsl_parser_extras.cpp b/src/glsl/glsl_parser_extras.cpp
index 2e17c4c3372..fc3f9e90b6b 100644
--- a/src/glsl/glsl_parser_extras.cpp
+++ b/src/glsl/glsl_parser_extras.cpp
@@ -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;
}
diff --git a/src/glsl/glsl_parser_extras.h b/src/glsl/glsl_parser_extras.h
index dc3d23ac545..16f72681816 100644
--- a/src/glsl/glsl_parser_extras.h
+++ b/src/glsl/glsl_parser_extras.h
@@ -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 {
diff --git a/src/glsl/main.cpp b/src/glsl/main.cpp
index deaab7e0335..16bbc8cd3f1 100644
--- a/src/glsl/main.cpp
+++ b/src/glsl/main.cpp
@@ -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;
diff --git a/src/mesa/shader/ir_to_mesa.cpp b/src/mesa/shader/ir_to_mesa.cpp
index 918004c79f1..7c7e368d0d5 100644
--- a/src/mesa/shader/ir_to_mesa.cpp
+++ b/src/mesa/shader/ir_to_mesa.cpp
@@ -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;