glsl_parser_extras.cpp revision e24d35a5b59ca1e75b69a32db6294787378a963f
136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy/* 236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy * Copyright © 2008, 2009 Intel Corporation 336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy * 436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy * Permission is hereby granted, free of charge, to any person obtaining a 536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy * copy of this software and associated documentation files (the "Software"), 636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy * to deal in the Software without restriction, including without limitation 736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy * the rights to use, copy, modify, merge, publish, distribute, sublicense, 836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy * and/or sell copies of the Software, and to permit persons to whom the 936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy * Software is furnished to do so, subject to the following conditions: 1036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy * 1136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy * The above copyright notice and this permission notice (including the next 1236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy * paragraph) shall be included in all copies or substantial portions of the 1336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy * Software. 1436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy * 1536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 1836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 2036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 2136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy * DEALINGS IN THE SOFTWARE. 227ce65e7125a4e1df1a274ce373c537a9df9c16cdCristy */ 2336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy#include <stdio.h> 2436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy#include <stdarg.h> 25882d9f4ab22246b0110b960e923614ae9c53702aCristy#include <string.h> 26882d9f4ab22246b0110b960e923614ae9c53702aCristy#include <assert.h> 27882d9f4ab22246b0110b960e923614ae9c53702aCristy 2836421ee45722da418b8ab99d7e6358e4f86b9f1eCristyextern "C" { 2936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy#include <talloc.h> 3036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy#include "main/core.h" /* for struct __GLcontextRec */ 3136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 3236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 33882d9f4ab22246b0110b960e923614ae9c53702aCristy#include "ast.h" 3436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy#include "glsl_parser_extras.h" 3536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy#include "glsl_parser.h" 3636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy#include "ir_optimization.h" 3736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy#include "loop_analysis.h" 3836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 39882d9f4ab22246b0110b960e923614ae9c53702aCristy_mesa_glsl_parse_state::_mesa_glsl_parse_state(struct __GLcontextRec *ctx, 4036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy GLenum target, void *mem_ctx) 4136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 4236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy switch (target) { 4336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case GL_VERTEX_SHADER: this->target = vertex_shader; break; 4436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case GL_FRAGMENT_SHADER: this->target = fragment_shader; break; 4536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case GL_GEOMETRY_SHADER: this->target = geometry_shader; break; 4636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } 4736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 4836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->scanner = NULL; 4936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->translation_unit.make_empty(); 5036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->symbols = new(mem_ctx) glsl_symbol_table; 5136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->info_log = talloc_strdup(mem_ctx, ""); 5236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->error = false; 5336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->loop_or_switch_nesting = NULL; 5436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 5536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy /* Set default language version and extensions */ 5636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->language_version = 110; 5736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->es_shader = false; 5836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->ARB_texture_rectangle_enable = true; 5936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 6036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy /* OpenGL ES 2.0 has different defaults from desktop GL. */ 6136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (ctx->API == API_OPENGLES2) { 6236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->language_version = 100; 6336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->es_shader = true; 6436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->ARB_texture_rectangle_enable = false; 6536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } 6636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 6736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->extensions = &ctx->Extensions; 6836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 6936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->Const.MaxLights = ctx->Const.MaxLights; 7036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->Const.MaxClipPlanes = ctx->Const.MaxClipPlanes; 7136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->Const.MaxTextureUnits = ctx->Const.MaxTextureUnits; 7236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->Const.MaxTextureCoords = ctx->Const.MaxTextureCoordUnits; 7336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->Const.MaxVertexAttribs = ctx->Const.VertexProgram.MaxAttribs; 7436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->Const.MaxVertexUniformComponents = ctx->Const.VertexProgram.MaxUniformComponents; 7536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->Const.MaxVaryingFloats = ctx->Const.MaxVarying * 4; 7636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->Const.MaxVertexTextureImageUnits = ctx->Const.MaxVertexTextureImageUnits; 7736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->Const.MaxCombinedTextureImageUnits = ctx->Const.MaxCombinedTextureImageUnits; 7836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->Const.MaxTextureImageUnits = ctx->Const.MaxTextureImageUnits; 7936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->Const.MaxFragmentUniformComponents = ctx->Const.FragmentProgram.MaxUniformComponents; 8036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 8136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->Const.MaxDrawBuffers = ctx->Const.MaxDrawBuffers; 8236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 8336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 8436421ee45722da418b8ab99d7e6358e4f86b9f1eCristyconst char * 8536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy_mesa_glsl_shader_target_name(enum _mesa_glsl_parser_targets target) 8636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 8736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy switch (target) { 8836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case vertex_shader: return "vertex"; 8936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case fragment_shader: return "fragment"; 9036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case geometry_shader: return "geometry"; 9136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ir_shader: break; 9236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } 9336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 9436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy assert(!"Should not get here."); 9536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy return "unknown"; 9636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 9736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 9836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 9936421ee45722da418b8ab99d7e6358e4f86b9f1eCristyvoid 10036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy_mesa_glsl_error(YYLTYPE *locp, _mesa_glsl_parse_state *state, 10136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy const char *fmt, ...) 10236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 10336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy va_list ap; 10436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 10536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy state->error = true; 10636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 10736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy assert(state->info_log != NULL); 10836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy state->info_log = talloc_asprintf_append(state->info_log, 10936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy "%u:%u(%u): error: ", 11036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy locp->source, 11136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy locp->first_line, 11236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy locp->first_column); 11336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy va_start(ap, fmt); 11436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy state->info_log = talloc_vasprintf_append(state->info_log, fmt, ap); 11536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy va_end(ap); 11636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy state->info_log = talloc_strdup_append(state->info_log, "\n"); 11736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 11836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 11936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 12036421ee45722da418b8ab99d7e6358e4f86b9f1eCristyvoid 12136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy_mesa_glsl_warning(const YYLTYPE *locp, _mesa_glsl_parse_state *state, 12236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy const char *fmt, ...) 12336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 12436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy va_list ap; 12536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 12636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy assert(state->info_log != NULL); 12736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy state->info_log = talloc_asprintf_append(state->info_log, 12836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy "%u:%u(%u): warning: ", 12936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy locp->source, 13036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy locp->first_line, 13136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy locp->first_column); 13236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy va_start(ap, fmt); 13336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy state->info_log = talloc_vasprintf_append(state->info_log, fmt, ap); 13436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy va_end(ap); 13536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy state->info_log = talloc_strdup_append(state->info_log, "\n"); 13636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 13736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 13836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 13936421ee45722da418b8ab99d7e6358e4f86b9f1eCristybool 14036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy_mesa_glsl_process_extension(const char *name, YYLTYPE *name_locp, 14136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy const char *behavior, YYLTYPE *behavior_locp, 14236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy _mesa_glsl_parse_state *state) 14336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 14436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy enum { 14536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy extension_disable, 14636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy extension_enable, 14736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy extension_require, 14836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy extension_warn 14936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } ext_mode; 15036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 15136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (strcmp(behavior, "warn") == 0) { 15236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ext_mode = extension_warn; 15336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } else if (strcmp(behavior, "require") == 0) { 15436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ext_mode = extension_require; 15536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } else if (strcmp(behavior, "enable") == 0) { 15636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ext_mode = extension_enable; 15736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } else if (strcmp(behavior, "disable") == 0) { 15836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ext_mode = extension_disable; 15936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } else { 16036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy _mesa_glsl_error(behavior_locp, state, 16136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy "Unknown extension behavior `%s'", 16236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy behavior); 16336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy return false; 16436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } 16536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 16636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy bool unsupported = false; 16736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 16836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (strcmp(name, "all") == 0) { 16936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if ((ext_mode == extension_enable) || (ext_mode == extension_require)) { 17036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy _mesa_glsl_error(name_locp, state, "Cannot %s all extensions", 17136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy (ext_mode == extension_enable) 17236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ? "enable" : "require"); 17336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy return false; 17436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } 17536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } else if (strcmp(name, "GL_ARB_draw_buffers") == 0) { 17636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy /* This extension is only supported in fragment shaders. 17736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy */ 17836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (state->target != fragment_shader) { 17936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy unsupported = true; 18036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } else { 18136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy state->ARB_draw_buffers_enable = (ext_mode != extension_disable); 18236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy state->ARB_draw_buffers_warn = (ext_mode == extension_warn); 18336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } 18436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } else if (strcmp(name, "GL_ARB_fragment_coord_conventions") == 0) { 18536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy state->ARB_fragment_coord_conventions_enable = 18636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy (ext_mode != extension_disable); 18736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy state->ARB_fragment_coord_conventions_warn = 18836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy (ext_mode == extension_warn); 18936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 19036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy unsupported = !state->extensions->ARB_fragment_coord_conventions; 19136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } else if (strcmp(name, "GL_ARB_texture_rectangle") == 0) { 19236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy state->ARB_texture_rectangle_enable = (ext_mode != extension_disable); 19336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy state->ARB_texture_rectangle_warn = (ext_mode == extension_warn); 19436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } else if (strcmp(name, "GL_EXT_texture_array") == 0) { 19536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy state->EXT_texture_array_enable = (ext_mode != extension_disable); 19636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy state->EXT_texture_array_warn = (ext_mode == extension_warn); 19736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 19836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy unsupported = !state->extensions->EXT_texture_array; 19936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } else { 20036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy unsupported = true; 20136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } 20236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 20336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (unsupported) { 20436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy static const char *const fmt = "extension `%s' unsupported in %s shader"; 20536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 20636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (ext_mode == extension_require) { 20736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy _mesa_glsl_error(name_locp, state, fmt, 20836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy name, _mesa_glsl_shader_target_name(state->target)); 20936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy return false; 21036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } else { 21136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy _mesa_glsl_warning(name_locp, state, fmt, 21236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy name, _mesa_glsl_shader_target_name(state->target)); 21336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } 21436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } 21536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 21636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy return true; 21736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 21836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 21936421ee45722da418b8ab99d7e6358e4f86b9f1eCristyvoid 22036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy_mesa_ast_type_qualifier_print(const struct ast_type_qualifier *q) 22136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 22236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (q->flags.q.constant) 22336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("const "); 22436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 22536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (q->flags.q.invariant) 22636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("invariant "); 22736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 22836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (q->flags.q.attribute) 22936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("attribute "); 23036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 23136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (q->flags.q.varying) 23236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("varying "); 23336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 23436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (q->flags.q.in && q->flags.q.out) 23536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("inout "); 23636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy else { 23736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (q->flags.q.in) 23836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("in "); 23936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 24036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (q->flags.q.out) 24136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("out "); 24236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } 24336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 24436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (q->flags.q.centroid) 24536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("centroid "); 24636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (q->flags.q.uniform) 24736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("uniform "); 24836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (q->flags.q.smooth) 24936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("smooth "); 25036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (q->flags.q.flat) 25136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("flat "); 25236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (q->flags.q.noperspective) 25336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("noperspective "); 25436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 25536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 25636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 25736421ee45722da418b8ab99d7e6358e4f86b9f1eCristyvoid 25836421ee45722da418b8ab99d7e6358e4f86b9f1eCristyast_node::print(void) const 25936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 26036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("unhandled node "); 26136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 26236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 26336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 26436421ee45722da418b8ab99d7e6358e4f86b9f1eCristyast_node::ast_node(void) 26536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 26636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->location.source = 0; 26736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->location.line = 0; 26836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->location.column = 0; 26936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 27036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 27136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 27236421ee45722da418b8ab99d7e6358e4f86b9f1eCristystatic void 27336421ee45722da418b8ab99d7e6358e4f86b9f1eCristyast_opt_array_size_print(bool is_array, const ast_expression *array_size) 27436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 27536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (is_array) { 27636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("[ "); 27736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 27836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (array_size) 27936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy array_size->print(); 28036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 28136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("] "); 28236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } 28336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 28436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 28536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 28636421ee45722da418b8ab99d7e6358e4f86b9f1eCristyvoid 28736421ee45722da418b8ab99d7e6358e4f86b9f1eCristyast_compound_statement::print(void) const 28836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 28936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("{\n"); 29036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 29136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy foreach_list_const(n, &this->statements) { 29236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ast_node *ast = exec_node_data(ast_node, n, link); 29336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ast->print(); 29436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } 29536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 29636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("}\n"); 29736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 29836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 29936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 30036421ee45722da418b8ab99d7e6358e4f86b9f1eCristyast_compound_statement::ast_compound_statement(int new_scope, 30136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ast_node *statements) 30236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 30336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->new_scope = new_scope; 30436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 30536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (statements != NULL) { 30636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->statements.push_degenerate_list_at_head(&statements->link); 30736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } 30836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 30936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 31036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 31136421ee45722da418b8ab99d7e6358e4f86b9f1eCristyvoid 31236421ee45722da418b8ab99d7e6358e4f86b9f1eCristyast_expression::print(void) const 31336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 31436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy switch (oper) { 31536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_assign: 31636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_mul_assign: 31736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_div_assign: 31836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_mod_assign: 31936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_add_assign: 32036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_sub_assign: 32136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_ls_assign: 32236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_rs_assign: 32336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_and_assign: 32436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_xor_assign: 32536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_or_assign: 32636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy subexpressions[0]->print(); 32736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("%s ", operator_string(oper)); 32836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy subexpressions[1]->print(); 32936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy break; 33036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 33136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_field_selection: 33236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy subexpressions[0]->print(); 33336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf(". %s ", primary_expression.identifier); 33436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy break; 33536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 33636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_plus: 33736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_neg: 33836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_bit_not: 33936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_logic_not: 34036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_pre_inc: 34136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_pre_dec: 34236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("%s ", operator_string(oper)); 34336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy subexpressions[0]->print(); 34436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy break; 34536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 34636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_post_inc: 34736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_post_dec: 34836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy subexpressions[0]->print(); 34936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("%s ", operator_string(oper)); 35036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy break; 35136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 35236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_conditional: 35336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy subexpressions[0]->print(); 35436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("? "); 35536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy subexpressions[1]->print(); 35636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf(": "); 35736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy subexpressions[1]->print(); 35836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy break; 35936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 36036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_array_index: 36136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy subexpressions[0]->print(); 36236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("[ "); 36336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy subexpressions[1]->print(); 36436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("] "); 36536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy break; 36636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 36736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_function_call: { 36836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy subexpressions[0]->print(); 36936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("( "); 37036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 37136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy foreach_list_const (n, &this->expressions) { 372882d9f4ab22246b0110b960e923614ae9c53702aCristy if (n != this->expressions.get_head()) 37336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf(", "); 37436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 37536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ast_node *ast = exec_node_data(ast_node, n, link); 37636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ast->print(); 37736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } 37836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 37936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf(") "); 38036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy break; 38136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } 38236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 38336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_identifier: 38436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("%s ", primary_expression.identifier); 38536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy break; 38636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 38736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_int_constant: 38836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("%d ", primary_expression.int_constant); 38936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy break; 39036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 39136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_uint_constant: 39236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("%u ", primary_expression.uint_constant); 39336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy break; 39436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 39536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_float_constant: 39636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("%f ", primary_expression.float_constant); 39736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy break; 39836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 39936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_bool_constant: 40036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("%s ", 40136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy primary_expression.bool_constant 40236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ? "true" : "false"); 40336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy break; 40436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 40536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_sequence: { 40636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("( "); 40736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy foreach_list_const(n, & this->expressions) { 40836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (n != this->expressions.get_head()) 40936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf(", "); 41036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 41136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ast_node *ast = exec_node_data(ast_node, n, link); 41236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ast->print(); 41336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } 41436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf(") "); 41536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy break; 41636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } 41736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 41836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy default: 41936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy assert(0); 42036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy break; 42136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } 42236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 42336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 42436421ee45722da418b8ab99d7e6358e4f86b9f1eCristyast_expression::ast_expression(int oper, 42536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ast_expression *ex0, 42636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ast_expression *ex1, 42736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ast_expression *ex2) 42836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 42936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->oper = ast_operators(oper); 43036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->subexpressions[0] = ex0; 43136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->subexpressions[1] = ex1; 43236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->subexpressions[2] = ex2; 43336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 43436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 43536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 43636421ee45722da418b8ab99d7e6358e4f86b9f1eCristyvoid 43736421ee45722da418b8ab99d7e6358e4f86b9f1eCristyast_expression_statement::print(void) const 43836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 43936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (expression) 44036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy expression->print(); 44136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 44236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("; "); 44336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 44436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 44536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 44636421ee45722da418b8ab99d7e6358e4f86b9f1eCristyast_expression_statement::ast_expression_statement(ast_expression *ex) : 44736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy expression(ex) 44836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 44936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy /* empty */ 45036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 45136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 45236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 45336421ee45722da418b8ab99d7e6358e4f86b9f1eCristyvoid 45436421ee45722da418b8ab99d7e6358e4f86b9f1eCristyast_function::print(void) const 45536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 45636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy return_type->print(); 45736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf(" %s (", identifier); 45836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 45936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy foreach_list_const(n, & this->parameters) { 46036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ast_node *ast = exec_node_data(ast_node, n, link); 46136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ast->print(); 46236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } 46336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 46436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf(")"); 46536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 46636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 46736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 46836421ee45722da418b8ab99d7e6358e4f86b9f1eCristyast_function::ast_function(void) 46936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy : is_definition(false), signature(NULL) 47036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 47136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy /* empty */ 47236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 47336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 47436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 47536421ee45722da418b8ab99d7e6358e4f86b9f1eCristyvoid 47636421ee45722da418b8ab99d7e6358e4f86b9f1eCristyast_fully_specified_type::print(void) const 47736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 47836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy _mesa_ast_type_qualifier_print(& qualifier); 47936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy specifier->print(); 48036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 48136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 48236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 48336421ee45722da418b8ab99d7e6358e4f86b9f1eCristyvoid 48436421ee45722da418b8ab99d7e6358e4f86b9f1eCristyast_parameter_declarator::print(void) const 48536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 48636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy type->print(); 48736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (identifier) 48836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("%s ", identifier); 48936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ast_opt_array_size_print(is_array, array_size); 49036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 49136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 49236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 49336421ee45722da418b8ab99d7e6358e4f86b9f1eCristyvoid 49436421ee45722da418b8ab99d7e6358e4f86b9f1eCristyast_function_definition::print(void) const 49536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 49636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy prototype->print(); 49736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy body->print(); 49836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 49936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 50036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 50136421ee45722da418b8ab99d7e6358e4f86b9f1eCristyvoid 50236421ee45722da418b8ab99d7e6358e4f86b9f1eCristyast_declaration::print(void) const 50336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 50436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("%s ", identifier); 50536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ast_opt_array_size_print(is_array, array_size); 50636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 50736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (initializer) { 50836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("= "); 50936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy initializer->print(); 51036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } 51136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 51236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 51336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 51436421ee45722da418b8ab99d7e6358e4f86b9f1eCristyast_declaration::ast_declaration(char *identifier, int is_array, 51536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ast_expression *array_size, 51636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ast_expression *initializer) 51736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 51836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->identifier = identifier; 51936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->is_array = is_array; 52036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->array_size = array_size; 52136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->initializer = initializer; 52236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 52336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 52436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 52536421ee45722da418b8ab99d7e6358e4f86b9f1eCristyvoid 52636421ee45722da418b8ab99d7e6358e4f86b9f1eCristyast_declarator_list::print(void) const 52736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 52836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy assert(type || invariant); 52936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 53036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (type) 53136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy type->print(); 53236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy else 53336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("invariant "); 53436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 53536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy foreach_list_const (ptr, & this->declarations) { 53636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (ptr != this->declarations.get_head()) 53736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf(", "); 53836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 53936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ast_node *ast = exec_node_data(ast_node, ptr, link); 54036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ast->print(); 54136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } 54236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 54336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("; "); 54436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 54536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 54636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 54736421ee45722da418b8ab99d7e6358e4f86b9f1eCristyast_declarator_list::ast_declarator_list(ast_fully_specified_type *type) 54836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 54936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->type = type; 55036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->invariant = false; 55136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 55236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 55336421ee45722da418b8ab99d7e6358e4f86b9f1eCristyvoid 55436421ee45722da418b8ab99d7e6358e4f86b9f1eCristyast_jump_statement::print(void) const 55536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 55636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy switch (mode) { 55736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_continue: 55836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("continue; "); 55936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy break; 56036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_break: 56136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("break; "); 56236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy break; 56336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_return: 56436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("return "); 56536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (opt_return_value) 56636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy opt_return_value->print(); 56736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 56836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("; "); 56936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy break; 57036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_discard: 57136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("discard; "); 57236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy break; 57336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } 57436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 57536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 57636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 57736421ee45722da418b8ab99d7e6358e4f86b9f1eCristyast_jump_statement::ast_jump_statement(int mode, ast_expression *return_value) 57836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 57936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->mode = ast_jump_modes(mode); 58036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 58136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (mode == ast_return) 58236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy opt_return_value = return_value; 58336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 58436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 58536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 58636421ee45722da418b8ab99d7e6358e4f86b9f1eCristyvoid 58736421ee45722da418b8ab99d7e6358e4f86b9f1eCristyast_selection_statement::print(void) const 58836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 58936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("if ( "); 59036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy condition->print(); 59136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf(") "); 59236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 59336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy then_statement->print(); 59436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 59536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (else_statement) { 59636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("else "); 59736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy else_statement->print(); 59836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } 59936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 60036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 60136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 60236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 60336421ee45722da418b8ab99d7e6358e4f86b9f1eCristyast_selection_statement::ast_selection_statement(ast_expression *condition, 60436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ast_node *then_statement, 60536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ast_node *else_statement) 60636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 60736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->condition = condition; 60836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->then_statement = then_statement; 60936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->else_statement = else_statement; 61036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 61136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 61236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 61336421ee45722da418b8ab99d7e6358e4f86b9f1eCristyvoid 61436421ee45722da418b8ab99d7e6358e4f86b9f1eCristyast_iteration_statement::print(void) const 61536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 61636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy switch (mode) { 61736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_for: 61836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("for( "); 61936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (init_statement) 62036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy init_statement->print(); 62136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("; "); 62236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 62336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (condition) 62436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy condition->print(); 62536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("; "); 62636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 62736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (rest_expression) 62836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy rest_expression->print(); 62936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf(") "); 63036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 63136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy body->print(); 63236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy break; 63336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 63436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_while: 63536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("while ( "); 63636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (condition) 63736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy condition->print(); 63836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf(") "); 63936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy body->print(); 64036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy break; 64136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 64236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy case ast_do_while: 64336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("do "); 64436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy body->print(); 64536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("while ( "); 64636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (condition) 64736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy condition->print(); 64836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("); "); 64936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy break; 65036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } 65136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 65236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 65336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 65436421ee45722da418b8ab99d7e6358e4f86b9f1eCristyast_iteration_statement::ast_iteration_statement(int mode, 65536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ast_node *init, 65636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ast_node *condition, 65736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ast_expression *rest_expression, 65836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ast_node *body) 65936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 66036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->mode = ast_iteration_modes(mode); 66136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->init_statement = init; 66236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->condition = condition; 66336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->rest_expression = rest_expression; 66436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->body = body; 66536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 66636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 66736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 66836421ee45722da418b8ab99d7e6358e4f86b9f1eCristyvoid 66936421ee45722da418b8ab99d7e6358e4f86b9f1eCristyast_struct_specifier::print(void) const 67036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 67136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("struct %s { ", name); 67236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy foreach_list_const(n, &this->declarations) { 67336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ast_node *ast = exec_node_data(ast_node, n, link); 67436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ast->print(); 67536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } 67636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy printf("} "); 67736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 67836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 67936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 68036421ee45722da418b8ab99d7e6358e4f86b9f1eCristyast_struct_specifier::ast_struct_specifier(char *identifier, 68136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy ast_node *declarator_list) 68236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 68336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (identifier == NULL) { 68436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy static unsigned anon_count = 1; 68536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy identifier = talloc_asprintf(this, "#anon_struct_%04x", anon_count); 68636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy anon_count++; 68736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } 68836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy name = identifier; 68936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy this->declarations.push_degenerate_list_at_head(&declarator_list->link); 69036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 69136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 69236421ee45722da418b8ab99d7e6358e4f86b9f1eCristybool 69336421ee45722da418b8ab99d7e6358e4f86b9f1eCristydo_common_optimization(exec_list *ir, bool linked, unsigned max_unroll_iterations) 69436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 69536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy GLboolean progress = GL_FALSE; 69636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 69736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy progress = do_sub_to_add_neg(ir) || progress; 69836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 69936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (linked) { 70036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy progress = do_function_inlining(ir) || progress; 70136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy progress = do_dead_functions(ir) || progress; 70236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy } 70336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy progress = do_structure_splitting(ir) || progress; 70436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy progress = do_if_simplification(ir) || progress; 70536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy progress = do_copy_propagation(ir) || progress; 70636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (linked) 70736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy progress = do_dead_code(ir) || progress; 70836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy else 70936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy progress = do_dead_code_unlinked(ir) || progress; 71036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy progress = do_dead_code_local(ir) || progress; 71136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy progress = do_tree_grafting(ir) || progress; 71236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy progress = do_constant_propagation(ir) || progress; 71336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy if (linked) 71436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy progress = do_constant_variable(ir) || progress; 71536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy else 71636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy progress = do_constant_variable_unlinked(ir) || progress; 71736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy progress = do_constant_folding(ir) || progress; 71836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy progress = do_algebraic(ir) || progress; 71936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy progress = do_lower_jumps(ir) || progress; 72036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy progress = do_vec_index_to_swizzle(ir) || progress; 72136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy progress = do_swizzle_swizzle(ir) || progress; 72236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy progress = do_noop_swizzle(ir) || progress; 72336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 72436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy progress = optimize_redundant_jumps(ir) || progress; 72536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 72636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy loop_state *ls = analyze_loop_variables(ir); 72736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy progress = set_loop_controls(ir, ls) || progress; 72836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy progress = unroll_loops(ir, ls, max_unroll_iterations) || progress; 72936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy delete ls; 73036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 73136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy return progress; 73236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 73336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 73436421ee45722da418b8ab99d7e6358e4f86b9f1eCristyextern "C" { 73536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 73636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy/** 73736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy * To be called at GL teardown time, this frees compiler datastructures. 73836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy * 73936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy * After calling this, any previously compiled shaders and shader 74036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy * programs would be invalid. So this should happen at approximately 74136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy * program exit. 74236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy */ 74336421ee45722da418b8ab99d7e6358e4f86b9f1eCristyvoid 74436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy_mesa_destroy_shader_compiler(void) 74536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 74636421ee45722da418b8ab99d7e6358e4f86b9f1eCristy _mesa_destroy_shader_compiler_caches(); 74736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 74836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy _mesa_glsl_release_types(); 74936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 75036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 75136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy/** 75236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy * Releases compiler caches to trade off performance for memory. 75336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy * 75436421ee45722da418b8ab99d7e6358e4f86b9f1eCristy * Intended to be used with glReleaseShaderCompiler(). 75536421ee45722da418b8ab99d7e6358e4f86b9f1eCristy */ 75636421ee45722da418b8ab99d7e6358e4f86b9f1eCristyvoid 75736421ee45722da418b8ab99d7e6358e4f86b9f1eCristy_mesa_destroy_shader_compiler_caches(void) 75836421ee45722da418b8ab99d7e6358e4f86b9f1eCristy{ 75936421ee45722da418b8ab99d7e6358e4f86b9f1eCristy _mesa_glsl_release_functions(); 76036421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 76136421ee45722da418b8ab99d7e6358e4f86b9f1eCristy 76236421ee45722da418b8ab99d7e6358e4f86b9f1eCristy} 76336421ee45722da418b8ab99d7e6358e4f86b9f1eCristy