1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright © 2010 Intel Corporation 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the "Software"), 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to deal in the Software without restriction, including without limitation 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and/or sell copies of the Software, and to permit persons to whom the 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Software is furnished to do so, subject to the following conditions: 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice (including the next 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * paragraph) shall be included in all copies or substantial portions of the 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Software. 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * DEALINGS IN THE SOFTWARE. 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#pragma once 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef GLSL_PARSER_EXTRAS_H 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GLSL_PARSER_EXTRAS_H 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Most of the definitions here only apply to C++ 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef __cplusplus 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <stdlib.h> 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "glsl_symbol_table.h" 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgenum _mesa_glsl_parser_targets { 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vertex_shader, 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org geometry_shader, 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fragment_shader 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_context; 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct glsl_switch_state { 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Temporary variables needed for switch statement. */ 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ir_variable *test_var; 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ir_variable *is_fallthru_var; 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ir_variable *is_break_var; 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org class ast_switch_statement *switch_nesting_ast; 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Table of constant values already used in case labels */ 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct hash_table *labels_ht; 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org class ast_case_label *previous_default; 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool is_switch_innermost; // if switch stmt is closest to break, ... 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct _mesa_glsl_parse_state { 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_glsl_parse_state(struct gl_context *_ctx, GLenum target, 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *mem_ctx); 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Callers of this ralloc-based new need not call delete. It's 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * easier to just ralloc_free 'ctx' (or any of its ancestors). */ 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org static void* operator new(size_t size, void *ctx) 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *mem = rzalloc_size(ctx, size); 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(mem != NULL); 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return mem; 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* If the user *does* call delete, that's OK, we will just 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * ralloc_free in that case. */ 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org static void operator delete(void *mem) 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ralloc_free(mem); 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_context *const ctx; 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *scanner; 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org exec_list translation_unit; 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glsl_symbol_table *symbols; 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_uniform_blocks; 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned uniform_block_array_size; 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_uniform_block *uniform_blocks; 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool es_shader; 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned language_version; 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *version_string; 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum _mesa_glsl_parser_targets target; 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Default uniform layout qualifiers tracked during parsing. 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Currently affects uniform blocks and uniform buffer variables in 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * those blocks. 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ast_type_qualifier *default_uniform_qualifier; 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Printable list of GLSL versions supported by the current context 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \note 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This string should probably be generated per-context instead of per 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * invokation of the compiler. This should be changed when the method of 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * tracking supported GLSL versions changes. 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *supported_version_string; 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Implementation defined limits that affect built-in variables, etc. 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \sa struct gl_constants (in mtypes.h) 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 1.10 */ 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned MaxLights; 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned MaxClipPlanes; 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned MaxTextureUnits; 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned MaxTextureCoords; 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned MaxVertexAttribs; 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned MaxVertexUniformComponents; 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned MaxVaryingFloats; 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned MaxVertexTextureImageUnits; 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned MaxCombinedTextureImageUnits; 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned MaxTextureImageUnits; 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned MaxFragmentUniformComponents; 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* ARB_draw_buffers */ 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned MaxDrawBuffers; 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } Const; 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * During AST to IR conversion, pointer to current IR function 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Will be \c NULL whenever the AST to IR conversion is not inside a 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * function definition. 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org class ir_function_signature *current_function; 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * During AST to IR conversion, pointer to the toplevel IR 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * instruction list being generated. 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org exec_list *toplevel_ir; 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Have we found a return statement in this function? */ 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool found_return; 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Was there an error during compilation? */ 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool error; 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Are all shader inputs / outputs invariant? 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This is set when the 'STDGL invariant(all)' pragma is used. 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool all_invariant; 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Loop or switch statement containing the current instructions. */ 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org class ast_iteration_statement *loop_nesting_ast; 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct glsl_switch_state switch_state; 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** List of structures defined in user code. */ 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const glsl_type **user_structures; 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_user_structures; 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org char *info_log; 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \name Enable bits for GLSL extensions 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool ARB_draw_buffers_enable; 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool ARB_draw_buffers_warn; 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool ARB_draw_instanced_enable; 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool ARB_draw_instanced_warn; 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool ARB_explicit_attrib_location_enable; 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool ARB_explicit_attrib_location_warn; 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool ARB_fragment_coord_conventions_enable; 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool ARB_fragment_coord_conventions_warn; 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool ARB_texture_rectangle_enable; 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool ARB_texture_rectangle_warn; 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool EXT_texture_array_enable; 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool EXT_texture_array_warn; 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool ARB_shader_texture_lod_enable; 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool ARB_shader_texture_lod_warn; 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool ARB_shader_stencil_export_enable; 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool ARB_shader_stencil_export_warn; 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool AMD_conservative_depth_enable; 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool AMD_conservative_depth_warn; 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool ARB_conservative_depth_enable; 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool ARB_conservative_depth_warn; 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool AMD_shader_stencil_export_enable; 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool AMD_shader_stencil_export_warn; 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool OES_texture_3D_enable; 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool OES_texture_3D_warn; 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool OES_EGL_image_external_enable; 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool OES_EGL_image_external_warn; 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool ARB_shader_bit_encoding_enable; 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool ARB_shader_bit_encoding_warn; 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool ARB_uniform_buffer_object_enable; 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool ARB_uniform_buffer_object_warn; 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool OES_standard_derivatives_enable; 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool OES_standard_derivatives_warn; 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Extensions supported by the OpenGL implementation. */ 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct gl_extensions *extensions; 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Shaders containing built-in functions that are used for linking. */ 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_shader *builtins_to_link[16]; 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_builtins_to_link; 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtypedef struct YYLTYPE { 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int first_line; 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int first_column; 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int last_line; 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int last_column; 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned source; 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} YYLTYPE; 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# define YYLTYPE_IS_DECLARED 1 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# define YYLTYPE_IS_TRIVIAL 1 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# define YYLLOC_DEFAULT(Current, Rhs, N) \ 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdo { \ 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (N) \ 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { \ 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (Current).first_line = YYRHSLOC(Rhs, 1).first_line; \ 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (Current).first_column = YYRHSLOC(Rhs, 1).first_column; \ 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (Current).last_line = YYRHSLOC(Rhs, N).last_line; \ 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (Current).last_column = YYRHSLOC(Rhs, N).last_column; \ 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } \ 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else \ 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { \ 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (Current).first_line = (Current).last_line = \ 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org YYRHSLOC(Rhs, 0).last_line; \ 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (Current).first_column = (Current).last_column = \ 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org YYRHSLOC(Rhs, 0).last_column; \ 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } \ 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (Current).source = 0; \ 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} while (0) 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void _mesa_glsl_error(YYLTYPE *locp, _mesa_glsl_parse_state *state, 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *fmt, ...); 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Emit a warning to the shader log 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \sa _mesa_glsl_error 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void _mesa_glsl_warning(const YYLTYPE *locp, 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_glsl_parse_state *state, 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *fmt, ...); 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void _mesa_glsl_lexer_ctor(struct _mesa_glsl_parse_state *state, 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *string); 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void _mesa_glsl_lexer_dtor(struct _mesa_glsl_parse_state *state); 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunion YYSTYPE; 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern int _mesa_glsl_lex(union YYSTYPE *yylval, YYLTYPE *yylloc, 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *scanner); 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern int _mesa_glsl_parse(struct _mesa_glsl_parse_state *); 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Process elements of the #extension directive 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \return 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * If \c name and \c behavior are valid, \c true is returned. Otherwise 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \c false is returned. 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern bool _mesa_glsl_process_extension(const char *name, YYLTYPE *name_locp, 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *behavior, 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org YYLTYPE *behavior_locp, 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_glsl_parse_state *state); 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Get the textual name of the specified shader target 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern const char * 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_glsl_shader_target_name(enum _mesa_glsl_parser_targets target); 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* __cplusplus */ 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * These definitions apply to C and C++ 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef __cplusplus 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern "C" { 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern int glcpp_preprocess(void *ctx, const char **shader, char **info_log, 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct gl_extensions *extensions, int api); 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void _mesa_destroy_shader_compiler(void); 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void _mesa_destroy_shader_compiler_caches(void); 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef __cplusplus 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* GLSL_PARSER_EXTRAS_H */ 311