summaryrefslogtreecommitdiff
path: root/src/glsl
diff options
context:
space:
mode:
authorIan Romanick <ian.d.romanick@intel.com>2010-07-18 15:59:43 -0700
committerIan Romanick <ian.d.romanick@intel.com>2010-07-20 17:48:24 -0700
commit2462a536ea5c98867296905e3da127eba7c7bdff (patch)
tree661139c92c86bda4966b6365cd95820650fc52ef /src/glsl
parent7e2aa91507a5883e33473e0a94215ee3985baad1 (diff)
glsl2: Add a constructor for _mesa_glsl_parse_state
Coming changes to the handling of built-in functions necessitate this.
Diffstat (limited to 'src/glsl')
-rw-r--r--src/glsl/Makefile1
-rw-r--r--src/glsl/glsl_parser_extras.cpp41
-rw-r--r--src/glsl/glsl_parser_extras.h22
3 files changed, 64 insertions, 0 deletions
diff --git a/src/glsl/Makefile b/src/glsl/Makefile
index 7bf95fbfc2..2b040377b0 100644
--- a/src/glsl/Makefile
+++ b/src/glsl/Makefile
@@ -93,6 +93,7 @@ INCLUDES = \
-I../mesa \
-I../mapi \
-I../mesa/shader \
+ -I../../include \
$(LIBRARY_INCLUDES)
ALL_SOURCES = \
diff --git a/src/glsl/glsl_parser_extras.cpp b/src/glsl/glsl_parser_extras.cpp
index cb7b6d36a2..bcf2579733 100644
--- a/src/glsl/glsl_parser_extras.cpp
+++ b/src/glsl/glsl_parser_extras.cpp
@@ -34,6 +34,47 @@ extern "C" {
#include "glsl_parser_extras.h"
#include "glsl_parser.h"
+_mesa_glsl_parse_state::_mesa_glsl_parse_state(struct __GLcontextRec *ctx,
+ GLenum target, void *mem_ctx)
+{
+ switch (target) {
+ case GL_VERTEX_SHADER: this->target = vertex_shader; break;
+ case GL_FRAGMENT_SHADER: this->target = fragment_shader; break;
+ case GL_GEOMETRY_SHADER: this->target = geometry_shader; break;
+ }
+
+ this->scanner = NULL;
+ this->translation_unit.make_empty();
+ this->symbols = new(mem_ctx) glsl_symbol_table;
+ this->info_log = talloc_strdup(mem_ctx, "");
+ this->error = false;
+ this->loop_or_switch_nesting = NULL;
+ this->ARB_texture_rectangle_enable = true;
+
+ if (ctx != NULL) {
+ this->extensions = &ctx->Extensions;
+
+ this->Const.MaxLights = ctx->Const.MaxLights;
+ this->Const.MaxClipPlanes = ctx->Const.MaxClipPlanes;
+ this->Const.MaxTextureUnits = ctx->Const.MaxTextureUnits;
+ this->Const.MaxTextureCoords = ctx->Const.MaxTextureCoordUnits;
+ this->Const.MaxVertexAttribs = ctx->Const.VertexProgram.MaxAttribs;
+ this->Const.MaxVertexUniformComponents = ctx->Const.VertexProgram.MaxUniformComponents;
+ this->Const.MaxVaryingFloats = ctx->Const.MaxVarying * 4;
+ this->Const.MaxVertexTextureImageUnits = ctx->Const.MaxVertexTextureImageUnits;
+ this->Const.MaxCombinedTextureImageUnits = ctx->Const.MaxCombinedTextureImageUnits;
+ this->Const.MaxTextureImageUnits = ctx->Const.MaxTextureImageUnits;
+ this->Const.MaxFragmentUniformComponents = ctx->Const.FragmentProgram.MaxUniformComponents;
+
+ this->Const.MaxDrawBuffers = ctx->Const.MaxDrawBuffers;
+ } else {
+ static struct gl_extensions null_extensions;
+
+ memset(&null_extensions, 0, sizeof(null_extensions));
+ this->extensions = &null_extensions;
+ }
+}
+
const char *
_mesa_glsl_shader_target_name(enum _mesa_glsl_parser_targets target)
{
diff --git a/src/glsl/glsl_parser_extras.h b/src/glsl/glsl_parser_extras.h
index fed6e8c823..e2efbd9ac9 100644
--- a/src/glsl/glsl_parser_extras.h
+++ b/src/glsl/glsl_parser_extras.h
@@ -35,7 +35,29 @@ enum _mesa_glsl_parser_targets {
ir_shader
};
+struct __GLcontextRec;
+
struct _mesa_glsl_parse_state {
+ _mesa_glsl_parse_state(struct __GLcontextRec *ctx, GLenum target,
+ void *mem_ctx);
+
+ /* Callers of this talloc-based new need not call delete. It's
+ * easier to just talloc_free 'ctx' (or any of its ancestors). */
+ static void* operator new(size_t size, void *ctx)
+ {
+ void *mem = talloc_zero_size(ctx, size);
+ assert(mem != NULL);
+
+ return mem;
+ }
+
+ /* If the user *does* call delete, that's OK, we will just
+ * talloc_free in that case. */
+ static void operator delete(void *mem)
+ {
+ talloc_free(mem);
+ }
+
void *scanner;
exec_list translation_unit;
glsl_symbol_table *symbols;