#ifndef GLSL_PARSER_EXTRAS_H
#define GLSL_PARSER_EXTRAS_H
+/*
+ * Most of the definitions here only apply to C++
+ */
+#ifdef __cplusplus
+
+
#include <cstdlib>
#include "glsl_symbol_table.h"
enum _mesa_glsl_parser_targets {
vertex_shader,
geometry_shader,
- fragment_shader,
- ir_shader
+ fragment_shader
};
-struct __GLcontextRec;
+struct gl_context;
struct _mesa_glsl_parse_state {
- _mesa_glsl_parse_state(struct __GLcontextRec *ctx, GLenum target,
+ _mesa_glsl_parse_state(struct gl_context *ctx, GLenum target,
void *mem_ctx);
/* Callers of this talloc-based new need not call delete. It's
exec_list translation_unit;
glsl_symbol_table *symbols;
+ bool es_shader;
unsigned language_version;
+ const char *version_string;
enum _mesa_glsl_parser_targets target;
/**
/** Was there an error during compilation? */
bool error;
+ /**
+ * Are all shader inputs / outputs invariant?
+ *
+ * This is set when the 'STDGL invariant(all)' pragma is used.
+ */
+ bool all_invariant;
+
/** Loop or switch statement containing the current instructions. */
class ir_instruction *loop_or_switch_nesting;
+ class ast_iteration_statement *loop_or_switch_nesting_ast;
/** List of structures defined in user code. */
const glsl_type **user_structures;
/*@{*/
unsigned ARB_draw_buffers_enable:1;
unsigned ARB_draw_buffers_warn:1;
+ unsigned ARB_draw_instanced_enable:1;
+ unsigned ARB_draw_instanced_warn:1;
+ unsigned ARB_explicit_attrib_location_enable:1;
+ unsigned ARB_explicit_attrib_location_warn:1;
+ unsigned ARB_fragment_coord_conventions_enable:1;
+ unsigned ARB_fragment_coord_conventions_warn:1;
unsigned ARB_texture_rectangle_enable:1;
unsigned ARB_texture_rectangle_warn:1;
unsigned EXT_texture_array_enable:1;
unsigned EXT_texture_array_warn:1;
+ unsigned ARB_shader_stencil_export_enable:1;
+ unsigned ARB_shader_stencil_export_warn:1;
/*@}*/
/** Extensions supported by the OpenGL implementation. */
const struct gl_extensions *extensions;
+
+ /** Shaders containing built-in functions that are used for linking. */
+ struct gl_shader *builtins_to_link[16];
+ unsigned num_builtins_to_link;
};
typedef struct YYLTYPE {
_mesa_glsl_parse_state *state,
const char *fmt, ...);
-extern "C" {
-extern int preprocess(void *ctx, const char **shader, char **info_log,
- const struct gl_extensions *extensions);
-}
-
extern void _mesa_glsl_lexer_ctor(struct _mesa_glsl_parse_state *state,
const char *string);
extern const char *
_mesa_glsl_shader_target_name(enum _mesa_glsl_parser_targets target);
-void do_ir_to_mesa(exec_list *instructions);
+
+#endif /* __cplusplus */
+
+
+/*
+ * These definitions apply to C and C++
+ */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int preprocess(void *ctx, const char **shader, char **info_log,
+ const struct gl_extensions *extensions, int api);
+
+extern void _mesa_destroy_shader_compiler();
+extern void _mesa_destroy_shader_compiler_caches();
+
+#ifdef __cplusplus
+}
+#endif
+
#endif /* GLSL_PARSER_EXTRAS_H */