glsl2: Conditionally allow optional extensions to be enabled

The only optional extension currently supported by the compiler is
GL_EXT_texture_array.
This commit is contained in:
Ian Romanick
2010-06-30 16:42:07 -07:00
parent efb6b24223
commit 667f4e1940
4 changed files with 11 additions and 0 deletions

View 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;
}

View 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 {

View 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;

View 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;