| Index: third_party/mesa/chromium.patch
|
| ===================================================================
|
| --- third_party/mesa/chromium.patch (revision 0)
|
| +++ third_party/mesa/chromium.patch (revision 0)
|
| @@ -0,0 +1,1835 @@
|
| +diff -c -r Mesa-7.9/include/GL/gl.h MesaLib/include/GL/gl.h
|
| +*** Mesa-7.9/include/GL/gl.h Tue Apr 27 14:41:21 2010
|
| +--- MesaLib/include/GL/gl.h Thu Oct 14 14:41:53 2010
|
| +***************
|
| +*** 55,61 ****
|
| + # if (defined(_MSC_VER) || defined(__MINGW32__)) && defined(BUILD_GL32) /* tag specify we're building mesa as a DLL */
|
| + # define GLAPI __declspec(dllexport)
|
| + # elif (defined(_MSC_VER) || defined(__MINGW32__)) && defined(_DLL) /* tag specifying we're building for DLL runtime support */
|
| +! # define GLAPI __declspec(dllimport)
|
| + # else /* for use with static link lib build of Win32 edition only */
|
| + # define GLAPI extern
|
| + # endif /* _STATIC_MESA support */
|
| +--- 55,65 ----
|
| + # if (defined(_MSC_VER) || defined(__MINGW32__)) && defined(BUILD_GL32) /* tag specify we're building mesa as a DLL */
|
| + # define GLAPI __declspec(dllexport)
|
| + # elif (defined(_MSC_VER) || defined(__MINGW32__)) && defined(_DLL) /* tag specifying we're building for DLL runtime support */
|
| +! // We always retrieve the entry points dynamically via GetProcAddress or
|
| +! // OSMesaGetProcAddress. This works around an issue where using the MSVC
|
| +! // multi-threaded runtime library, which defines _DLL.
|
| +! //# define GLAPI __declspec(dllimport)
|
| +! # define GLAPI
|
| + # else /* for use with static link lib build of Win32 edition only */
|
| + # define GLAPI extern
|
| + # endif /* _STATIC_MESA support */
|
| +***************
|
| +*** 72,80 ****
|
| + # define GLAPIENTRY
|
| + #endif /* WIN32 && !CYGWIN */
|
| +
|
| +! #if (defined(__BEOS__) && defined(__POWERPC__)) || defined(__QUICKDRAW__)
|
| +! # define PRAGMA_EXPORT_SUPPORTED 1
|
| +! #endif
|
| +
|
| + /*
|
| + * WINDOWS: Include windows.h here to define APIENTRY.
|
| +--- 76,86 ----
|
| + # define GLAPIENTRY
|
| + #endif /* WIN32 && !CYGWIN */
|
| +
|
| +! // Disabled this because __QUICKDRAW__ is defined on Mac and gcc does not
|
| +! // support the pragma.
|
| +! //#if (defined(__BEOS__) && defined(__POWERPC__)) || defined(__QUICKDRAW__)
|
| +! //# define PRAGMA_EXPORT_SUPPORTED 1
|
| +! //#endif
|
| +
|
| + /*
|
| + * WINDOWS: Include windows.h here to define APIENTRY.
|
| +diff -c -r Mesa-7.9/include/GL/glext.h MesaLib/include/GL/glext.h
|
| +*** Mesa-7.9/include/GL/glext.h Fri Oct 1 15:51:28 2010
|
| +--- MesaLib/include/GL/glext.h Thu Oct 14 14:50:37 2010
|
| +***************
|
| +*** 5030,5043 ****
|
| +
|
| + #ifndef GL_VERSION_1_5
|
| + /* GL types for handling large vertex buffer objects */
|
| +! typedef ptrdiff_t GLintptr;
|
| +! typedef ptrdiff_t GLsizeiptr;
|
| + #endif
|
| +
|
| + #ifndef GL_ARB_vertex_buffer_object
|
| + /* GL types for handling large vertex buffer objects */
|
| +! typedef ptrdiff_t GLintptrARB;
|
| +! typedef ptrdiff_t GLsizeiptrARB;
|
| + #endif
|
| +
|
| + #ifndef GL_ARB_shader_objects
|
| +--- 5030,5043 ----
|
| +
|
| + #ifndef GL_VERSION_1_5
|
| + /* GL types for handling large vertex buffer objects */
|
| +! typedef signed long int GLintptr;
|
| +! typedef signed long int GLsizeiptr;
|
| + #endif
|
| +
|
| + #ifndef GL_ARB_vertex_buffer_object
|
| + /* GL types for handling large vertex buffer objects */
|
| +! typedef signed long int GLintptrARB;
|
| +! typedef signed long int GLsizeiptrARB;
|
| + #endif
|
| +
|
| + #ifndef GL_ARB_shader_objects
|
| +diff -c -r Mesa-7.9/include/GL/osmesa.h MesaLib/include/GL/osmesa.h
|
| +*** Mesa-7.9/include/GL/osmesa.h Thu Feb 4 16:10:39 2010
|
| +--- MesaLib/include/GL/osmesa.h Thu Oct 14 14:47:08 2010
|
| +***************
|
| +*** 101,109 ****
|
| + typedef struct osmesa_context *OSMesaContext;
|
| +
|
| +
|
| +! #if defined(__BEOS__) || defined(__QUICKDRAW__)
|
| +! #pragma export on
|
| +! #endif
|
| +
|
| +
|
| + /*
|
| +--- 101,111 ----
|
| + typedef struct osmesa_context *OSMesaContext;
|
| +
|
| +
|
| +! // Disabled this because __QUICKDRAW__ is defined on Mac and gcc does not
|
| +! // support the pragma.
|
| +! //#if defined(__BEOS__) || defined(__QUICKDRAW__)
|
| +! //#pragma export on
|
| +! //#endif
|
| +
|
| +
|
| + /*
|
| +***************
|
| +*** 276,284 ****
|
| + OSMesaColorClamp(GLboolean enable);
|
| +
|
| +
|
| +! #if defined(__BEOS__) || defined(__QUICKDRAW__)
|
| +! #pragma export off
|
| +! #endif
|
| +
|
| +
|
| + #ifdef __cplusplus
|
| +--- 278,288 ----
|
| + OSMesaColorClamp(GLboolean enable);
|
| +
|
| +
|
| +! // Disabled this because __QUICKDRAW__ is defined on Mac and gcc does not
|
| +! // support the pragma.
|
| +! //#if defined(__BEOS__) || defined(__QUICKDRAW__)
|
| +! //#pragma export off
|
| +! //#endif
|
| +
|
| +
|
| + #ifdef __cplusplus
|
| +diff -c -r Mesa-7.9/src/glsl/ast_to_hir.cpp MesaLib/src/glsl/ast_to_hir.cpp
|
| +*** Mesa-7.9/src/glsl/ast_to_hir.cpp Fri Oct 1 15:51:28 2010
|
| +--- MesaLib/src/glsl/ast_to_hir.cpp Fri Oct 22 15:28:47 2010
|
| +***************
|
| +*** 55,60 ****
|
| +--- 55,61 ----
|
| + #include "ast.h"
|
| + #include "glsl_types.h"
|
| + #include "ir.h"
|
| ++ #include "safe_strcmp.h"
|
| +
|
| + void
|
| + _mesa_ast_to_hir(exec_list *instructions, struct _mesa_glsl_parse_state *state)
|
| +***************
|
| +*** 1615,1621 ****
|
| + var->pixel_center_integer = qual->pixel_center_integer;
|
| + var->origin_upper_left = qual->origin_upper_left;
|
| + if ((qual->origin_upper_left || qual->pixel_center_integer)
|
| +! && (strcmp(var->name, "gl_FragCoord") != 0)) {
|
| + const char *const qual_string = (qual->origin_upper_left)
|
| + ? "origin_upper_left" : "pixel_center_integer";
|
| +
|
| +--- 1616,1622 ----
|
| + var->pixel_center_integer = qual->pixel_center_integer;
|
| + var->origin_upper_left = qual->origin_upper_left;
|
| + if ((qual->origin_upper_left || qual->pixel_center_integer)
|
| +! && (safe_strcmp(var->name, "gl_FragCoord") != 0)) {
|
| + const char *const qual_string = (qual->origin_upper_left)
|
| + ? "origin_upper_left" : "pixel_center_integer";
|
| +
|
| +***************
|
| +*** 2003,2009 ****
|
| + * gl_MaxTextureCoords."
|
| + */
|
| + const unsigned size = unsigned(var->type->array_size());
|
| +! if ((strcmp("gl_TexCoord", var->name) == 0)
|
| + && (size > state->Const.MaxTextureCoords)) {
|
| + YYLTYPE loc = this->get_location();
|
| +
|
| +--- 2004,2010 ----
|
| + * gl_MaxTextureCoords."
|
| + */
|
| + const unsigned size = unsigned(var->type->array_size());
|
| +! if ((safe_strcmp("gl_TexCoord", var->name) == 0)
|
| + && (size > state->Const.MaxTextureCoords)) {
|
| + YYLTYPE loc = this->get_location();
|
| +
|
| +***************
|
| +*** 2022,2028 ****
|
| + delete var;
|
| + var = NULL;
|
| + } else if (state->extensions->ARB_fragment_coord_conventions
|
| +! && strcmp(var->name, "gl_FragCoord") == 0
|
| + && earlier->type == var->type
|
| + && earlier->mode == var->mode) {
|
| + /* Allow redeclaration of gl_FragCoord for ARB_fcc layout
|
| +--- 2023,2029 ----
|
| + delete var;
|
| + var = NULL;
|
| + } else if (state->extensions->ARB_fragment_coord_conventions
|
| +! && safe_strcmp(var->name, "gl_FragCoord") == 0
|
| + && earlier->type == var->type
|
| + && earlier->mode == var->mode) {
|
| + /* Allow redeclaration of gl_FragCoord for ARB_fcc layout
|
| +***************
|
| +*** 2336,2342 ****
|
| + }
|
| +
|
| + /* Verify the return type of main() */
|
| +! if (strcmp(name, "main") == 0) {
|
| + if (! return_type->is_void()) {
|
| + YYLTYPE loc = this->get_location();
|
| +
|
| +--- 2337,2343 ----
|
| + }
|
| +
|
| + /* Verify the return type of main() */
|
| +! if (safe_strcmp(name, "main") == 0) {
|
| + if (! return_type->is_void()) {
|
| + YYLTYPE loc = this->get_location();
|
| +
|
| +diff -c -r Mesa-7.9/src/glsl/glcpp/glcpp-parse.c MesaLib/src/glsl/glcpp/glcpp-parse.c
|
| +*** Mesa-7.9/src/glsl/glcpp/glcpp-parse.c Fri Oct 1 15:51:28 2010
|
| +--- MesaLib/src/glsl/glcpp/glcpp-parse.c Fri Oct 22 15:30:59 2010
|
| +***************
|
| +*** 96,106 ****
|
| +--- 96,114 ----
|
| + #include <stdlib.h>
|
| + #include <string.h>
|
| + #include <assert.h>
|
| ++ /* The #include of inttypes.h causes problems on Windows */
|
| ++ #ifndef _MSC_VER
|
| + #include <inttypes.h>
|
| ++ #endif
|
| ++ /* Windows headers do not define PRIiMAX */
|
| ++ #ifdef _MSC_VER
|
| ++ #define PRIiMAX "I64i"
|
| ++ #endif
|
| +
|
| + #include "glcpp.h"
|
| + #include "main/core.h" /* for struct gl_extensions */
|
| + #include "main/mtypes.h" /* for gl_api enum */
|
| ++ #include "safe_strcmp.h"
|
| +
|
| + #define glcpp_print(stream, str) stream = talloc_strdup_append(stream, str)
|
| + #define glcpp_printf(stream, fmt, args, ...) \
|
| +***************
|
| +*** 2915,2921 ****
|
| + return 0;
|
| +
|
| + for (i = 0, node = list->head; node; i++, node = node->next) {
|
| +! if (strcmp (node->str, member) == 0) {
|
| + if (index)
|
| + *index = i;
|
| + return 1;
|
| +--- 2923,2929 ----
|
| + return 0;
|
| +
|
| + for (i = 0, node = list->head; node; i++, node = node->next) {
|
| +! if (safe_strcmp (node->str, member) == 0) {
|
| + if (index)
|
| + *index = i;
|
| + return 1;
|
| +***************
|
| +*** 2955,2961 ****
|
| + node_a && node_b;
|
| + node_a = node_a->next, node_b = node_b->next)
|
| + {
|
| +! if (strcmp (node_a->str, node_b->str))
|
| + return 0;
|
| + }
|
| +
|
| +--- 2963,2969 ----
|
| + node_a && node_b;
|
| + node_a = node_a->next, node_b = node_b->next)
|
| + {
|
| +! if (safe_strcmp (node_a->str, node_b->str))
|
| + return 0;
|
| + }
|
| +
|
| +***************
|
| +*** 3182,3189 ****
|
| + case IDENTIFIER:
|
| + case INTEGER_STRING:
|
| + case OTHER:
|
| +! if (strcmp (node_a->token->value.str,
|
| +! node_b->token->value.str))
|
| + {
|
| + return 0;
|
| + }
|
| +--- 3190,3197 ----
|
| + case IDENTIFIER:
|
| + case INTEGER_STRING:
|
| + case OTHER:
|
| +! if (safe_strcmp (node_a->token->value.str,
|
| +! node_b->token->value.str))
|
| + {
|
| + return 0;
|
| + }
|
| +***************
|
| +*** 3832,3838 ****
|
| + return 0;
|
| +
|
| + for (node = list; node; node = node->next)
|
| +! if (strcmp (node->identifier, identifier) == 0)
|
| + return 1;
|
| +
|
| + return 0;
|
| +--- 3840,3846 ----
|
| + return 0;
|
| +
|
| + for (node = list; node; node = node->next)
|
| +! if (safe_strcmp (node->identifier, identifier) == 0)
|
| + return 1;
|
| +
|
| + return 0;
|
| +diff -c -r Mesa-7.9/src/glsl/glcpp/glcpp-parse.y MesaLib/src/glsl/glcpp/glcpp-parse.y
|
| +*** Mesa-7.9/src/glsl/glcpp/glcpp-parse.y Fri Oct 1 15:51:28 2010
|
| +--- MesaLib/src/glsl/glcpp/glcpp-parse.y Fri Oct 22 15:30:47 2010
|
| +***************
|
| +*** 26,36 ****
|
| +--- 26,44 ----
|
| + #include <stdlib.h>
|
| + #include <string.h>
|
| + #include <assert.h>
|
| ++ /* The #include of inttypes.h causes problems on Windows */
|
| ++ #ifndef _MSC_VER
|
| + #include <inttypes.h>
|
| ++ #endif
|
| ++ /* Windows headers do not define PRIiMAX */
|
| ++ #ifdef _MSC_VER
|
| ++ #define PRIiMAX "I64i"
|
| ++ #endif
|
| +
|
| + #include "glcpp.h"
|
| + #include "main/core.h" /* for struct gl_extensions */
|
| + #include "main/mtypes.h" /* for gl_api enum */
|
| ++ #include "safe_strcmp.h"
|
| +
|
| + #define glcpp_print(stream, str) stream = talloc_strdup_append(stream, str)
|
| + #define glcpp_printf(stream, fmt, args, ...) \
|
| +***************
|
| +*** 590,596 ****
|
| + return 0;
|
| +
|
| + for (i = 0, node = list->head; node; i++, node = node->next) {
|
| +! if (strcmp (node->str, member) == 0) {
|
| + if (index)
|
| + *index = i;
|
| + return 1;
|
| +--- 598,604 ----
|
| + return 0;
|
| +
|
| + for (i = 0, node = list->head; node; i++, node = node->next) {
|
| +! if (safe_strcmp (node->str, member) == 0) {
|
| + if (index)
|
| + *index = i;
|
| + return 1;
|
| +***************
|
| +*** 630,636 ****
|
| + node_a && node_b;
|
| + node_a = node_a->next, node_b = node_b->next)
|
| + {
|
| +! if (strcmp (node_a->str, node_b->str))
|
| + return 0;
|
| + }
|
| +
|
| +--- 638,644 ----
|
| + node_a && node_b;
|
| + node_a = node_a->next, node_b = node_b->next)
|
| + {
|
| +! if (safe_strcmp (node_a->str, node_b->str))
|
| + return 0;
|
| + }
|
| +
|
| +***************
|
| +*** 857,864 ****
|
| + case IDENTIFIER:
|
| + case INTEGER_STRING:
|
| + case OTHER:
|
| +! if (strcmp (node_a->token->value.str,
|
| +! node_b->token->value.str))
|
| + {
|
| + return 0;
|
| + }
|
| +--- 865,872 ----
|
| + case IDENTIFIER:
|
| + case INTEGER_STRING:
|
| + case OTHER:
|
| +! if (safe_strcmp (node_a->token->value.str,
|
| +! node_b->token->value.str))
|
| + {
|
| + return 0;
|
| + }
|
| +***************
|
| +*** 1507,1513 ****
|
| + return 0;
|
| +
|
| + for (node = list; node; node = node->next)
|
| +! if (strcmp (node->identifier, identifier) == 0)
|
| + return 1;
|
| +
|
| + return 0;
|
| +--- 1515,1521 ----
|
| + return 0;
|
| +
|
| + for (node = list; node; node = node->next)
|
| +! if (safe_strcmp (node->identifier, identifier) == 0)
|
| + return 1;
|
| +
|
| + return 0;
|
| +diff -c -r Mesa-7.9/src/glsl/glcpp/glcpp.c MesaLib/src/glsl/glcpp/glcpp.c
|
| +*** Mesa-7.9/src/glsl/glcpp/glcpp.c Fri Oct 1 15:51:28 2010
|
| +--- MesaLib/src/glsl/glcpp/glcpp.c Fri Oct 22 15:31:25 2010
|
| +***************
|
| +*** 29,34 ****
|
| +--- 29,35 ----
|
| + #include <errno.h>
|
| + #include "glcpp.h"
|
| + #include "main/mtypes.h"
|
| ++ #include "safe_strcmp.h"
|
| +
|
| + extern int yydebug;
|
| +
|
| +***************
|
| +*** 78,84 ****
|
| + char *text;
|
| + int fd;
|
| +
|
| +! if (filename == NULL || strcmp (filename, "-") == 0)
|
| + return load_text_fd (ctx, STDIN_FILENO);
|
| +
|
| + fd = open (filename, O_RDONLY);
|
| +--- 79,85 ----
|
| + char *text;
|
| + int fd;
|
| +
|
| +! if (filename == NULL || safe_strcmp (filename, "-") == 0)
|
| + return load_text_fd (ctx, STDIN_FILENO);
|
| +
|
| + fd = open (filename, O_RDONLY);
|
| +diff -c -r Mesa-7.9/src/glsl/glcpp/glcpp.h MesaLib/src/glsl/glcpp/glcpp.h
|
| +*** Mesa-7.9/src/glsl/glcpp/glcpp.h Fri Oct 1 15:51:28 2010
|
| +--- MesaLib/src/glsl/glcpp/glcpp.h Fri Oct 22 15:32:43 2010
|
| +***************
|
| +*** 24,30 ****
|
| +--- 24,33 ----
|
| + #ifndef GLCPP_H
|
| + #define GLCPP_H
|
| +
|
| ++ /* Windows does not currently have stdint.h. */
|
| ++ #ifndef _MSC_VER
|
| + #include <stdint.h>
|
| ++ #endif
|
| +
|
| + #include <talloc.h>
|
| +
|
| +***************
|
| +*** 49,55 ****
|
| +--- 52,62 ----
|
| +
|
| + typedef union YYSTYPE
|
| + {
|
| ++ #ifndef _MSC_VER
|
| + intmax_t ival;
|
| ++ #else
|
| ++ __int64 ival;
|
| ++ #endif
|
| + char *str;
|
| + string_list_t *string_list;
|
| + token_t *token;
|
| +diff -c -r Mesa-7.9/src/glsl/glsl_parser.cpp MesaLib/src/glsl/glsl_parser.cpp
|
| +*** Mesa-7.9/src/glsl/glsl_parser.cpp Fri Oct 1 15:51:28 2010
|
| +--- MesaLib/src/glsl/glsl_parser.cpp Fri Oct 22 15:33:24 2010
|
| +***************
|
| +*** 107,112 ****
|
| +--- 107,113 ----
|
| + #include "ast.h"
|
| + #include "glsl_parser_extras.h"
|
| + #include "glsl_types.h"
|
| ++ #include "safe_strcmp.h"
|
| +
|
| + #define YYLEX_PARAM state->scanner
|
| +
|
| +***************
|
| +*** 3966,3975 ****
|
| + if (state->ARB_fragment_coord_conventions_enable) {
|
| + bool got_one = false;
|
| +
|
| +! if (strcmp((yyvsp[(1) - (1)].identifier), "origin_upper_left") == 0) {
|
| + got_one = true;
|
| + (yyval.type_qualifier).q.origin_upper_left = 1;
|
| +! } else if (strcmp((yyvsp[(1) - (1)].identifier), "pixel_center_integer") == 0) {
|
| + got_one = true;
|
| + (yyval.type_qualifier).q.pixel_center_integer = 1;
|
| + }
|
| +--- 3967,3976 ----
|
| + if (state->ARB_fragment_coord_conventions_enable) {
|
| + bool got_one = false;
|
| +
|
| +! if (safe_strcmp((yyvsp[(1) - (1)].identifier), "origin_upper_left") == 0) {
|
| + got_one = true;
|
| + (yyval.type_qualifier).q.origin_upper_left = 1;
|
| +! } else if (safe_strcmp((yyvsp[(1) - (1)].identifier), "pixel_center_integer") == 0) {
|
| + got_one = true;
|
| + (yyval.type_qualifier).q.pixel_center_integer = 1;
|
| + }
|
| +diff -c -r Mesa-7.9/src/glsl/glsl_parser_extras.cpp MesaLib/src/glsl/glsl_parser_extras.cpp
|
| +*** Mesa-7.9/src/glsl/glsl_parser_extras.cpp Fri Oct 1 15:51:28 2010
|
| +--- MesaLib/src/glsl/glsl_parser_extras.cpp Fri Oct 22 15:33:37 2010
|
| +***************
|
| +*** 35,40 ****
|
| +--- 35,41 ----
|
| + #include "glsl_parser.h"
|
| + #include "ir_optimization.h"
|
| + #include "loop_analysis.h"
|
| ++ #include "safe_strcmp.h"
|
| +
|
| + _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct __GLcontextRec *ctx,
|
| + GLenum target, void *mem_ctx)
|
| +***************
|
| +*** 148,160 ****
|
| + extension_warn
|
| + } ext_mode;
|
| +
|
| +! if (strcmp(behavior, "warn") == 0) {
|
| + ext_mode = extension_warn;
|
| +! } else if (strcmp(behavior, "require") == 0) {
|
| + ext_mode = extension_require;
|
| +! } else if (strcmp(behavior, "enable") == 0) {
|
| + ext_mode = extension_enable;
|
| +! } else if (strcmp(behavior, "disable") == 0) {
|
| + ext_mode = extension_disable;
|
| + } else {
|
| + _mesa_glsl_error(behavior_locp, state,
|
| +--- 149,161 ----
|
| + extension_warn
|
| + } ext_mode;
|
| +
|
| +! if (safe_strcmp(behavior, "warn") == 0) {
|
| + ext_mode = extension_warn;
|
| +! } else if (safe_strcmp(behavior, "require") == 0) {
|
| + ext_mode = extension_require;
|
| +! } else if (safe_strcmp(behavior, "enable") == 0) {
|
| + ext_mode = extension_enable;
|
| +! } else if (safe_strcmp(behavior, "disable") == 0) {
|
| + ext_mode = extension_disable;
|
| + } else {
|
| + _mesa_glsl_error(behavior_locp, state,
|
| +***************
|
| +*** 165,178 ****
|
| +
|
| + bool unsupported = false;
|
| +
|
| +! if (strcmp(name, "all") == 0) {
|
| + if ((ext_mode == extension_enable) || (ext_mode == extension_require)) {
|
| + _mesa_glsl_error(name_locp, state, "Cannot %s all extensions",
|
| + (ext_mode == extension_enable)
|
| + ? "enable" : "require");
|
| + return false;
|
| + }
|
| +! } else if (strcmp(name, "GL_ARB_draw_buffers") == 0) {
|
| + /* This extension is only supported in fragment shaders.
|
| + */
|
| + if (state->target != fragment_shader) {
|
| +--- 166,179 ----
|
| +
|
| + bool unsupported = false;
|
| +
|
| +! if (safe_strcmp(name, "all") == 0) {
|
| + if ((ext_mode == extension_enable) || (ext_mode == extension_require)) {
|
| + _mesa_glsl_error(name_locp, state, "Cannot %s all extensions",
|
| + (ext_mode == extension_enable)
|
| + ? "enable" : "require");
|
| + return false;
|
| + }
|
| +! } else if (safe_strcmp(name, "GL_ARB_draw_buffers") == 0) {
|
| + /* This extension is only supported in fragment shaders.
|
| + */
|
| + if (state->target != fragment_shader) {
|
| +***************
|
| +*** 181,197 ****
|
| + state->ARB_draw_buffers_enable = (ext_mode != extension_disable);
|
| + state->ARB_draw_buffers_warn = (ext_mode == extension_warn);
|
| + }
|
| +! } else if (strcmp(name, "GL_ARB_fragment_coord_conventions") == 0) {
|
| + state->ARB_fragment_coord_conventions_enable =
|
| + (ext_mode != extension_disable);
|
| + state->ARB_fragment_coord_conventions_warn =
|
| + (ext_mode == extension_warn);
|
| +
|
| + unsupported = !state->extensions->ARB_fragment_coord_conventions;
|
| +! } 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);
|
| +
|
| +--- 182,198 ----
|
| + state->ARB_draw_buffers_enable = (ext_mode != extension_disable);
|
| + state->ARB_draw_buffers_warn = (ext_mode == extension_warn);
|
| + }
|
| +! } else if (safe_strcmp(name, "GL_ARB_fragment_coord_conventions") == 0) {
|
| + state->ARB_fragment_coord_conventions_enable =
|
| + (ext_mode != extension_disable);
|
| + state->ARB_fragment_coord_conventions_warn =
|
| + (ext_mode == extension_warn);
|
| +
|
| + unsupported = !state->extensions->ARB_fragment_coord_conventions;
|
| +! } else if (safe_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 (safe_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);
|
| +
|
| +diff -c -r Mesa-7.9/src/glsl/glsl_types.cpp MesaLib/src/glsl/glsl_types.cpp
|
| +*** Mesa-7.9/src/glsl/glsl_types.cpp Fri Oct 1 15:51:28 2010
|
| +--- MesaLib/src/glsl/glsl_types.cpp Fri Oct 22 15:33:51 2010
|
| +***************
|
| +*** 27,32 ****
|
| +--- 27,33 ----
|
| + #include "glsl_symbol_table.h"
|
| + #include "glsl_parser_extras.h"
|
| + #include "glsl_types.h"
|
| ++ #include "safe_strcmp.h"
|
| + #include "builtin_types.h"
|
| + extern "C" {
|
| + #include "program/hash_table.h"
|
| +***************
|
| +*** 374,380 ****
|
| + /* Return zero is the types match (there is zero difference) or non-zero
|
| + * otherwise.
|
| + */
|
| +! if (strcmp(key1->name, key2->name) != 0)
|
| + return 1;
|
| +
|
| + if (key1->length != key2->length)
|
| +--- 375,381 ----
|
| + /* Return zero is the types match (there is zero difference) or non-zero
|
| + * otherwise.
|
| + */
|
| +! if (safe_strcmp(key1->name, key2->name) != 0)
|
| + return 1;
|
| +
|
| + if (key1->length != key2->length)
|
| +***************
|
| +*** 383,389 ****
|
| + for (unsigned i = 0; i < key1->length; i++) {
|
| + if (key1->fields.structure[i].type != key2->fields.structure[i].type)
|
| + return 1;
|
| +! if (strcmp(key1->fields.structure[i].name,
|
| + key2->fields.structure[i].name) != 0)
|
| + return 1;
|
| + }
|
| +--- 384,390 ----
|
| + for (unsigned i = 0; i < key1->length; i++) {
|
| + if (key1->fields.structure[i].type != key2->fields.structure[i].type)
|
| + return 1;
|
| +! if (safe_strcmp(key1->fields.structure[i].name,
|
| + key2->fields.structure[i].name) != 0)
|
| + return 1;
|
| + }
|
| +***************
|
| +*** 433,439 ****
|
| +
|
| + assert(t->base_type == GLSL_TYPE_STRUCT);
|
| + assert(t->length == num_fields);
|
| +! assert(strcmp(t->name, name) == 0);
|
| +
|
| + return t;
|
| + }
|
| +--- 434,440 ----
|
| +
|
| + assert(t->base_type == GLSL_TYPE_STRUCT);
|
| + assert(t->length == num_fields);
|
| +! assert(safe_strcmp(t->name, name) == 0);
|
| +
|
| + return t;
|
| + }
|
| +***************
|
| +*** 446,452 ****
|
| + return error_type;
|
| +
|
| + for (unsigned i = 0; i < this->length; i++) {
|
| +! if (strcmp(name, this->fields.structure[i].name) == 0)
|
| + return this->fields.structure[i].type;
|
| + }
|
| +
|
| +--- 447,453 ----
|
| + return error_type;
|
| +
|
| + for (unsigned i = 0; i < this->length; i++) {
|
| +! if (safe_strcmp(name, this->fields.structure[i].name) == 0)
|
| + return this->fields.structure[i].type;
|
| + }
|
| +
|
| +***************
|
| +*** 461,467 ****
|
| + return -1;
|
| +
|
| + for (unsigned i = 0; i < this->length; i++) {
|
| +! if (strcmp(name, this->fields.structure[i].name) == 0)
|
| + return i;
|
| + }
|
| +
|
| +--- 462,468 ----
|
| + return -1;
|
| +
|
| + for (unsigned i = 0; i < this->length; i++) {
|
| +! if (safe_strcmp(name, this->fields.structure[i].name) == 0)
|
| + return i;
|
| + }
|
| +
|
| +diff -c -r Mesa-7.9/src/glsl/hir_field_selection.cpp MesaLib/src/glsl/hir_field_selection.cpp
|
| +*** Mesa-7.9/src/glsl/hir_field_selection.cpp Fri Oct 1 15:51:28 2010
|
| +--- MesaLib/src/glsl/hir_field_selection.cpp Fri Oct 22 15:34:11 2010
|
| +***************
|
| +*** 26,31 ****
|
| +--- 26,32 ----
|
| + #include "glsl_parser_extras.h"
|
| + #include "ast.h"
|
| + #include "glsl_types.h"
|
| ++ #include "safe_strcmp.h"
|
| +
|
| + ir_rvalue *
|
| + _mesa_ast_field_selection_to_hir(const ast_expression *expr,
|
| +***************
|
| +*** 81,87 ****
|
| + const char *method;
|
| + method = call->subexpressions[0]->primary_expression.identifier;
|
| +
|
| +! if (op->type->is_array() && strcmp(method, "length") == 0) {
|
| + if (!call->expressions.is_empty())
|
| + _mesa_glsl_error(&loc, state, "length method takes no arguments.");
|
| +
|
| +--- 82,88 ----
|
| + const char *method;
|
| + method = call->subexpressions[0]->primary_expression.identifier;
|
| +
|
| +! if (op->type->is_array() && safe_strcmp(method, "length") == 0) {
|
| + if (!call->expressions.is_empty())
|
| + _mesa_glsl_error(&loc, state, "length method takes no arguments.");
|
| +
|
| +diff -c -r Mesa-7.9/src/glsl/ir.cpp MesaLib/src/glsl/ir.cpp
|
| +*** Mesa-7.9/src/glsl/ir.cpp Fri Oct 1 15:51:28 2010
|
| +--- MesaLib/src/glsl/ir.cpp Fri Oct 22 15:34:20 2010
|
| +***************
|
| +*** 25,30 ****
|
| +--- 25,31 ----
|
| + #include "ir.h"
|
| + #include "ir_visitor.h"
|
| + #include "glsl_types.h"
|
| ++ #include "safe_strcmp.h"
|
| +
|
| + ir_rvalue::ir_rvalue()
|
| + {
|
| +***************
|
| +*** 338,344 ****
|
| + {
|
| + const int operator_count = sizeof(operator_strs) / sizeof(operator_strs[0]);
|
| + for (int op = 0; op < operator_count; op++) {
|
| +! if (strcmp(str, operator_strs[op]) == 0)
|
| + return (ir_expression_operation) op;
|
| + }
|
| + return (ir_expression_operation) -1;
|
| +--- 339,345 ----
|
| + {
|
| + const int operator_count = sizeof(operator_strs) / sizeof(operator_strs[0]);
|
| + for (int op = 0; op < operator_count; op++) {
|
| +! if (safe_strcmp(str, operator_strs[op]) == 0)
|
| + return (ir_expression_operation) op;
|
| + }
|
| + return (ir_expression_operation) -1;
|
| +***************
|
| +*** 878,884 ****
|
| + {
|
| + const int count = sizeof(tex_opcode_strs) / sizeof(tex_opcode_strs[0]);
|
| + for (int op = 0; op < count; op++) {
|
| +! if (strcmp(str, tex_opcode_strs[op]) == 0)
|
| + return (ir_texture_opcode) op;
|
| + }
|
| + return (ir_texture_opcode) -1;
|
| +--- 879,885 ----
|
| + {
|
| + const int count = sizeof(tex_opcode_strs) / sizeof(tex_opcode_strs[0]);
|
| + for (int op = 0; op < count; op++) {
|
| +! if (safe_strcmp(str, tex_opcode_strs[op]) == 0)
|
| + return (ir_texture_opcode) op;
|
| + }
|
| + return (ir_texture_opcode) -1;
|
| +diff -c -r Mesa-7.9/src/glsl/ir_constant_expression.cpp MesaLib/src/glsl/ir_constant_expression.cpp
|
| +*** Mesa-7.9/src/glsl/ir_constant_expression.cpp Fri Oct 1 15:51:28 2010
|
| +--- MesaLib/src/glsl/ir_constant_expression.cpp Fri Oct 22 15:34:40 2010
|
| +***************
|
| +*** 38,43 ****
|
| +--- 38,44 ----
|
| + #include "ir.h"
|
| + #include "ir_visitor.h"
|
| + #include "glsl_types.h"
|
| ++ #include "safe_strcmp.h"
|
| +
|
| + static float
|
| + dot(ir_constant *op0, ir_constant *op1)
|
| +***************
|
| +*** 850,880 ****
|
| + memset(&data, 0, sizeof(data));
|
| +
|
| + const char *callee = this->callee_name();
|
| +! if (strcmp(callee, "abs") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_unop_abs, type, op[0], NULL);
|
| +! } else if (strcmp(callee, "all") == 0) {
|
| + assert(op[0]->type->is_boolean());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++) {
|
| + if (!op[0]->value.b[c])
|
| + return new(mem_ctx) ir_constant(false);
|
| + }
|
| + return new(mem_ctx) ir_constant(true);
|
| +! } else if (strcmp(callee, "any") == 0) {
|
| + assert(op[0]->type->is_boolean());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++) {
|
| + if (op[0]->value.b[c])
|
| + return new(mem_ctx) ir_constant(true);
|
| + }
|
| + return new(mem_ctx) ir_constant(false);
|
| +! } else if (strcmp(callee, "acos") == 0) {
|
| + assert(op[0]->type->is_float());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++)
|
| + data.f[c] = acosf(op[0]->value.f[c]);
|
| +! } else if (strcmp(callee, "asin") == 0) {
|
| + assert(op[0]->type->is_float());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++)
|
| + data.f[c] = asinf(op[0]->value.f[c]);
|
| +! } else if (strcmp(callee, "atan") == 0) {
|
| + assert(op[0]->type->is_float());
|
| + if (num_parameters == 2) {
|
| + assert(op[1]->type->is_float());
|
| +--- 851,881 ----
|
| + memset(&data, 0, sizeof(data));
|
| +
|
| + const char *callee = this->callee_name();
|
| +! if (safe_strcmp(callee, "abs") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_unop_abs, type, op[0], NULL);
|
| +! } else if (safe_strcmp(callee, "all") == 0) {
|
| + assert(op[0]->type->is_boolean());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++) {
|
| + if (!op[0]->value.b[c])
|
| + return new(mem_ctx) ir_constant(false);
|
| + }
|
| + return new(mem_ctx) ir_constant(true);
|
| +! } else if (safe_strcmp(callee, "any") == 0) {
|
| + assert(op[0]->type->is_boolean());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++) {
|
| + if (op[0]->value.b[c])
|
| + return new(mem_ctx) ir_constant(true);
|
| + }
|
| + return new(mem_ctx) ir_constant(false);
|
| +! } else if (safe_strcmp(callee, "acos") == 0) {
|
| + assert(op[0]->type->is_float());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++)
|
| + data.f[c] = acosf(op[0]->value.f[c]);
|
| +! } else if (safe_strcmp(callee, "asin") == 0) {
|
| + assert(op[0]->type->is_float());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++)
|
| + data.f[c] = asinf(op[0]->value.f[c]);
|
| +! } else if (safe_strcmp(callee, "atan") == 0) {
|
| + assert(op[0]->type->is_float());
|
| + if (num_parameters == 2) {
|
| + assert(op[1]->type->is_float());
|
| +***************
|
| +*** 884,894 ****
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++)
|
| + data.f[c] = atanf(op[0]->value.f[c]);
|
| + }
|
| +! } else if (strcmp(callee, "dFdx") == 0 || strcmp(callee, "dFdy") == 0) {
|
| + return ir_constant::zero(mem_ctx, this->type);
|
| +! } else if (strcmp(callee, "ceil") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_unop_ceil, type, op[0], NULL);
|
| +! } else if (strcmp(callee, "clamp") == 0) {
|
| + assert(num_parameters == 3);
|
| + unsigned c1_inc = op[1]->type->is_scalar() ? 0 : 1;
|
| + unsigned c2_inc = op[2]->type->is_scalar() ? 0 : 1;
|
| +--- 885,895 ----
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++)
|
| + data.f[c] = atanf(op[0]->value.f[c]);
|
| + }
|
| +! } else if (safe_strcmp(callee, "dFdx") == 0 || safe_strcmp(callee, "dFdy") == 0) {
|
| + return ir_constant::zero(mem_ctx, this->type);
|
| +! } else if (safe_strcmp(callee, "ceil") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_unop_ceil, type, op[0], NULL);
|
| +! } else if (safe_strcmp(callee, "clamp") == 0) {
|
| + assert(num_parameters == 3);
|
| + unsigned c1_inc = op[1]->type->is_scalar() ? 0 : 1;
|
| + unsigned c2_inc = op[2]->type->is_scalar() ? 0 : 1;
|
| +***************
|
| +*** 913,931 ****
|
| + assert(!"Should not get here.");
|
| + }
|
| + }
|
| +! } else if (strcmp(callee, "cos") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_unop_cos, type, op[0], NULL);
|
| +! } else if (strcmp(callee, "cosh") == 0) {
|
| + assert(op[0]->type->is_float());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++)
|
| + data.f[c] = coshf(op[0]->value.f[c]);
|
| +! } else if (strcmp(callee, "cross") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_binop_cross, type, op[0], op[1]);
|
| +! } else if (strcmp(callee, "degrees") == 0) {
|
| + assert(op[0]->type->is_float());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++)
|
| + data.f[c] = 180.0/M_PI * op[0]->value.f[c];
|
| +! } else if (strcmp(callee, "distance") == 0) {
|
| + assert(op[0]->type->is_float() && op[1]->type->is_float());
|
| + float length_squared = 0.0;
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++) {
|
| +--- 914,932 ----
|
| + assert(!"Should not get here.");
|
| + }
|
| + }
|
| +! } else if (safe_strcmp(callee, "cos") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_unop_cos, type, op[0], NULL);
|
| +! } else if (safe_strcmp(callee, "cosh") == 0) {
|
| + assert(op[0]->type->is_float());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++)
|
| + data.f[c] = coshf(op[0]->value.f[c]);
|
| +! } else if (safe_strcmp(callee, "cross") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_binop_cross, type, op[0], op[1]);
|
| +! } else if (safe_strcmp(callee, "degrees") == 0) {
|
| + assert(op[0]->type->is_float());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++)
|
| + data.f[c] = 180.0/M_PI * op[0]->value.f[c];
|
| +! } else if (safe_strcmp(callee, "distance") == 0) {
|
| + assert(op[0]->type->is_float() && op[1]->type->is_float());
|
| + float length_squared = 0.0;
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++) {
|
| +***************
|
| +*** 933,941 ****
|
| + length_squared += t * t;
|
| + }
|
| + return new(mem_ctx) ir_constant(sqrtf(length_squared));
|
| +! } else if (strcmp(callee, "dot") == 0) {
|
| + return new(mem_ctx) ir_constant(dot(op[0], op[1]));
|
| +! } else if (strcmp(callee, "equal") == 0) {
|
| + assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++) {
|
| + switch (op[0]->type->base_type) {
|
| +--- 934,942 ----
|
| + length_squared += t * t;
|
| + }
|
| + return new(mem_ctx) ir_constant(sqrtf(length_squared));
|
| +! } else if (safe_strcmp(callee, "dot") == 0) {
|
| + return new(mem_ctx) ir_constant(dot(op[0], op[1]));
|
| +! } else if (safe_strcmp(callee, "equal") == 0) {
|
| + assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++) {
|
| + switch (op[0]->type->base_type) {
|
| +***************
|
| +*** 955,976 ****
|
| + assert(!"Should not get here.");
|
| + }
|
| + }
|
| +! } else if (strcmp(callee, "exp") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_unop_exp, type, op[0], NULL);
|
| +! } else if (strcmp(callee, "exp2") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_unop_exp2, type, op[0], NULL);
|
| +! } else if (strcmp(callee, "faceforward") == 0) {
|
| + if (dot(op[2], op[1]) < 0)
|
| + return op[0];
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++)
|
| + data.f[c] = -op[0]->value.f[c];
|
| +! } else if (strcmp(callee, "floor") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_unop_floor, type, op[0], NULL);
|
| +! } else if (strcmp(callee, "fract") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_unop_fract, type, op[0], NULL);
|
| +! } else if (strcmp(callee, "fwidth") == 0) {
|
| + return ir_constant::zero(mem_ctx, this->type);
|
| +! } else if (strcmp(callee, "greaterThan") == 0) {
|
| + assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++) {
|
| + switch (op[0]->type->base_type) {
|
| +--- 956,977 ----
|
| + assert(!"Should not get here.");
|
| + }
|
| + }
|
| +! } else if (safe_strcmp(callee, "exp") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_unop_exp, type, op[0], NULL);
|
| +! } else if (safe_strcmp(callee, "exp2") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_unop_exp2, type, op[0], NULL);
|
| +! } else if (safe_strcmp(callee, "faceforward") == 0) {
|
| + if (dot(op[2], op[1]) < 0)
|
| + return op[0];
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++)
|
| + data.f[c] = -op[0]->value.f[c];
|
| +! } else if (safe_strcmp(callee, "floor") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_unop_floor, type, op[0], NULL);
|
| +! } else if (safe_strcmp(callee, "fract") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_unop_fract, type, op[0], NULL);
|
| +! } else if (safe_strcmp(callee, "fwidth") == 0) {
|
| + return ir_constant::zero(mem_ctx, this->type);
|
| +! } else if (safe_strcmp(callee, "greaterThan") == 0) {
|
| + assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++) {
|
| + switch (op[0]->type->base_type) {
|
| +***************
|
| +*** 987,993 ****
|
| + assert(!"Should not get here.");
|
| + }
|
| + }
|
| +! } else if (strcmp(callee, "greaterThanEqual") == 0) {
|
| + assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++) {
|
| + switch (op[0]->type->base_type) {
|
| +--- 988,994 ----
|
| + assert(!"Should not get here.");
|
| + }
|
| + }
|
| +! } else if (safe_strcmp(callee, "greaterThanEqual") == 0) {
|
| + assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++) {
|
| + switch (op[0]->type->base_type) {
|
| +***************
|
| +*** 1004,1014 ****
|
| + assert(!"Should not get here.");
|
| + }
|
| + }
|
| +! } else if (strcmp(callee, "inversesqrt") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_unop_rsq, type, op[0], NULL);
|
| +! } else if (strcmp(callee, "length") == 0) {
|
| + return new(mem_ctx) ir_constant(sqrtf(dot(op[0], op[0])));
|
| +! } else if (strcmp(callee, "lessThan") == 0) {
|
| + assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++) {
|
| + switch (op[0]->type->base_type) {
|
| +--- 1005,1015 ----
|
| + assert(!"Should not get here.");
|
| + }
|
| + }
|
| +! } else if (safe_strcmp(callee, "inversesqrt") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_unop_rsq, type, op[0], NULL);
|
| +! } else if (safe_strcmp(callee, "length") == 0) {
|
| + return new(mem_ctx) ir_constant(sqrtf(dot(op[0], op[0])));
|
| +! } else if (safe_strcmp(callee, "lessThan") == 0) {
|
| + assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++) {
|
| + switch (op[0]->type->base_type) {
|
| +***************
|
| +*** 1025,1031 ****
|
| + assert(!"Should not get here.");
|
| + }
|
| + }
|
| +! } else if (strcmp(callee, "lessThanEqual") == 0) {
|
| + assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++) {
|
| + switch (op[0]->type->base_type) {
|
| +--- 1026,1032 ----
|
| + assert(!"Should not get here.");
|
| + }
|
| + }
|
| +! } else if (safe_strcmp(callee, "lessThanEqual") == 0) {
|
| + assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++) {
|
| + switch (op[0]->type->base_type) {
|
| +***************
|
| +*** 1042,1060 ****
|
| + assert(!"Should not get here.");
|
| + }
|
| + }
|
| +! } else if (strcmp(callee, "log") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_unop_log, type, op[0], NULL);
|
| +! } else if (strcmp(callee, "log2") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_unop_log2, type, op[0], NULL);
|
| +! } else if (strcmp(callee, "matrixCompMult") == 0) {
|
| + assert(op[0]->type->is_float() && op[1]->type->is_float());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++)
|
| + data.f[c] = op[0]->value.f[c] * op[1]->value.f[c];
|
| +! } else if (strcmp(callee, "max") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_binop_max, type, op[0], op[1]);
|
| +! } else if (strcmp(callee, "min") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_binop_min, type, op[0], op[1]);
|
| +! } else if (strcmp(callee, "mix") == 0) {
|
| + assert(op[0]->type->is_float() && op[1]->type->is_float());
|
| + if (op[2]->type->is_float()) {
|
| + unsigned c2_inc = op[2]->type->is_scalar() ? 0 : 1;
|
| +--- 1043,1061 ----
|
| + assert(!"Should not get here.");
|
| + }
|
| + }
|
| +! } else if (safe_strcmp(callee, "log") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_unop_log, type, op[0], NULL);
|
| +! } else if (safe_strcmp(callee, "log2") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_unop_log2, type, op[0], NULL);
|
| +! } else if (safe_strcmp(callee, "matrixCompMult") == 0) {
|
| + assert(op[0]->type->is_float() && op[1]->type->is_float());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++)
|
| + data.f[c] = op[0]->value.f[c] * op[1]->value.f[c];
|
| +! } else if (safe_strcmp(callee, "max") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_binop_max, type, op[0], op[1]);
|
| +! } else if (safe_strcmp(callee, "min") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_binop_min, type, op[0], op[1]);
|
| +! } else if (safe_strcmp(callee, "mix") == 0) {
|
| + assert(op[0]->type->is_float() && op[1]->type->is_float());
|
| + if (op[2]->type->is_float()) {
|
| + unsigned c2_inc = op[2]->type->is_scalar() ? 0 : 1;
|
| +***************
|
| +*** 1068,1076 ****
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++)
|
| + data.f[c] = op[op[2]->value.b[c] ? 1 : 0]->value.f[c];
|
| + }
|
| +! } else if (strcmp(callee, "mod") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_binop_mod, type, op[0], op[1]);
|
| +! } else if (strcmp(callee, "normalize") == 0) {
|
| + assert(op[0]->type->is_float());
|
| + float length = sqrtf(dot(op[0], op[0]));
|
| +
|
| +--- 1069,1077 ----
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++)
|
| + data.f[c] = op[op[2]->value.b[c] ? 1 : 0]->value.f[c];
|
| + }
|
| +! } else if (safe_strcmp(callee, "mod") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_binop_mod, type, op[0], op[1]);
|
| +! } else if (safe_strcmp(callee, "normalize") == 0) {
|
| + assert(op[0]->type->is_float());
|
| + float length = sqrtf(dot(op[0], op[0]));
|
| +
|
| +***************
|
| +*** 1079,1087 ****
|
| +
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++)
|
| + data.f[c] = op[0]->value.f[c] / length;
|
| +! } else if (strcmp(callee, "not") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_unop_logic_not, type, op[0], NULL);
|
| +! } else if (strcmp(callee, "notEqual") == 0) {
|
| + assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++) {
|
| + switch (op[0]->type->base_type) {
|
| +--- 1080,1088 ----
|
| +
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++)
|
| + data.f[c] = op[0]->value.f[c] / length;
|
| +! } else if (safe_strcmp(callee, "not") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_unop_logic_not, type, op[0], NULL);
|
| +! } else if (safe_strcmp(callee, "notEqual") == 0) {
|
| + assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++) {
|
| + switch (op[0]->type->base_type) {
|
| +***************
|
| +*** 1101,1107 ****
|
| + assert(!"Should not get here.");
|
| + }
|
| + }
|
| +! } else if (strcmp(callee, "outerProduct") == 0) {
|
| + assert(op[0]->type->is_vector() && op[1]->type->is_vector());
|
| + const unsigned m = op[0]->type->vector_elements;
|
| + const unsigned n = op[1]->type->vector_elements;
|
| +--- 1102,1108 ----
|
| + assert(!"Should not get here.");
|
| + }
|
| + }
|
| +! } else if (safe_strcmp(callee, "outerProduct") == 0) {
|
| + assert(op[0]->type->is_vector() && op[1]->type->is_vector());
|
| + const unsigned m = op[0]->type->vector_elements;
|
| + const unsigned n = op[1]->type->vector_elements;
|
| +***************
|
| +*** 1110,1127 ****
|
| + data.f[i+m*j] = op[0]->value.f[i] * op[1]->value.f[j];
|
| + }
|
| + }
|
| +! } else if (strcmp(callee, "pow") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_binop_pow, type, op[0], op[1]);
|
| +! } else if (strcmp(callee, "radians") == 0) {
|
| + assert(op[0]->type->is_float());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++)
|
| + data.f[c] = M_PI/180.0 * op[0]->value.f[c];
|
| +! } else if (strcmp(callee, "reflect") == 0) {
|
| + assert(op[0]->type->is_float());
|
| + float dot_NI = dot(op[1], op[0]);
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++)
|
| + data.f[c] = op[0]->value.f[c] - 2 * dot_NI * op[1]->value.f[c];
|
| +! } else if (strcmp(callee, "refract") == 0) {
|
| + const float eta = op[2]->value.f[0];
|
| + const float dot_NI = dot(op[1], op[0]);
|
| + const float k = 1.0 - eta * eta * (1.0 - dot_NI * dot_NI);
|
| +--- 1111,1128 ----
|
| + data.f[i+m*j] = op[0]->value.f[i] * op[1]->value.f[j];
|
| + }
|
| + }
|
| +! } else if (safe_strcmp(callee, "pow") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_binop_pow, type, op[0], op[1]);
|
| +! } else if (safe_strcmp(callee, "radians") == 0) {
|
| + assert(op[0]->type->is_float());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++)
|
| + data.f[c] = M_PI/180.0 * op[0]->value.f[c];
|
| +! } else if (safe_strcmp(callee, "reflect") == 0) {
|
| + assert(op[0]->type->is_float());
|
| + float dot_NI = dot(op[1], op[0]);
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++)
|
| + data.f[c] = op[0]->value.f[c] - 2 * dot_NI * op[1]->value.f[c];
|
| +! } else if (safe_strcmp(callee, "refract") == 0) {
|
| + const float eta = op[2]->value.f[0];
|
| + const float dot_NI = dot(op[1], op[0]);
|
| + const float k = 1.0 - eta * eta * (1.0 - dot_NI * dot_NI);
|
| +***************
|
| +*** 1133,1147 ****
|
| + * op[1]->value.f[c];
|
| + }
|
| + }
|
| +! } else if (strcmp(callee, "sign") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_unop_sign, type, op[0], NULL);
|
| +! } else if (strcmp(callee, "sin") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_unop_sin, type, op[0], NULL);
|
| +! } else if (strcmp(callee, "sinh") == 0) {
|
| + assert(op[0]->type->is_float());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++)
|
| + data.f[c] = sinhf(op[0]->value.f[c]);
|
| +! } else if (strcmp(callee, "smoothstep") == 0) {
|
| + assert(num_parameters == 3);
|
| + assert(op[1]->type == op[0]->type);
|
| + unsigned edge_inc = op[0]->type->is_scalar() ? 0 : 1;
|
| +--- 1134,1148 ----
|
| + * op[1]->value.f[c];
|
| + }
|
| + }
|
| +! } else if (safe_strcmp(callee, "sign") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_unop_sign, type, op[0], NULL);
|
| +! } else if (safe_strcmp(callee, "sin") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_unop_sin, type, op[0], NULL);
|
| +! } else if (safe_strcmp(callee, "sinh") == 0) {
|
| + assert(op[0]->type->is_float());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++)
|
| + data.f[c] = sinhf(op[0]->value.f[c]);
|
| +! } else if (safe_strcmp(callee, "smoothstep") == 0) {
|
| + assert(num_parameters == 3);
|
| + assert(op[1]->type == op[0]->type);
|
| + unsigned edge_inc = op[0]->type->is_scalar() ? 0 : 1;
|
| +***************
|
| +*** 1157,1179 ****
|
| + data.f[c] = t * t * (3 - 2 * t);
|
| + }
|
| + }
|
| +! } else if (strcmp(callee, "sqrt") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_unop_sqrt, type, op[0], NULL);
|
| +! } else if (strcmp(callee, "step") == 0) {
|
| + assert(op[0]->type->is_float() && op[1]->type->is_float());
|
| + /* op[0] (edge) may be either a scalar or a vector */
|
| + const unsigned c0_inc = op[0]->type->is_scalar() ? 0 : 1;
|
| + for (unsigned c = 0, c0 = 0; c < type->components(); c0 += c0_inc, c++)
|
| + data.f[c] = (op[1]->value.f[c] < op[0]->value.f[c0]) ? 0.0 : 1.0;
|
| +! } else if (strcmp(callee, "tan") == 0) {
|
| + assert(op[0]->type->is_float());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++)
|
| + data.f[c] = tanf(op[0]->value.f[c]);
|
| +! } else if (strcmp(callee, "tanh") == 0) {
|
| + assert(op[0]->type->is_float());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++)
|
| + data.f[c] = tanhf(op[0]->value.f[c]);
|
| +! } else if (strcmp(callee, "transpose") == 0) {
|
| + assert(op[0]->type->is_matrix());
|
| + const unsigned n = op[0]->type->vector_elements;
|
| + const unsigned m = op[0]->type->matrix_columns;
|
| +--- 1158,1180 ----
|
| + data.f[c] = t * t * (3 - 2 * t);
|
| + }
|
| + }
|
| +! } else if (safe_strcmp(callee, "sqrt") == 0) {
|
| + expr = new(mem_ctx) ir_expression(ir_unop_sqrt, type, op[0], NULL);
|
| +! } else if (safe_strcmp(callee, "step") == 0) {
|
| + assert(op[0]->type->is_float() && op[1]->type->is_float());
|
| + /* op[0] (edge) may be either a scalar or a vector */
|
| + const unsigned c0_inc = op[0]->type->is_scalar() ? 0 : 1;
|
| + for (unsigned c = 0, c0 = 0; c < type->components(); c0 += c0_inc, c++)
|
| + data.f[c] = (op[1]->value.f[c] < op[0]->value.f[c0]) ? 0.0 : 1.0;
|
| +! } else if (safe_strcmp(callee, "tan") == 0) {
|
| + assert(op[0]->type->is_float());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++)
|
| + data.f[c] = tanf(op[0]->value.f[c]);
|
| +! } else if (safe_strcmp(callee, "tanh") == 0) {
|
| + assert(op[0]->type->is_float());
|
| + for (unsigned c = 0; c < op[0]->type->components(); c++)
|
| + data.f[c] = tanhf(op[0]->value.f[c]);
|
| +! } else if (safe_strcmp(callee, "transpose") == 0) {
|
| + assert(op[0]->type->is_matrix());
|
| + const unsigned n = op[0]->type->vector_elements;
|
| + const unsigned m = op[0]->type->matrix_columns;
|
| +diff -c -r Mesa-7.9/src/glsl/ir_dead_functions.cpp MesaLib/src/glsl/ir_dead_functions.cpp
|
| +*** Mesa-7.9/src/glsl/ir_dead_functions.cpp Fri Oct 1 15:51:28 2010
|
| +--- MesaLib/src/glsl/ir_dead_functions.cpp Fri Oct 22 15:34:54 2010
|
| +***************
|
| +*** 31,36 ****
|
| +--- 31,37 ----
|
| + #include "ir_visitor.h"
|
| + #include "ir_expression_flattening.h"
|
| + #include "glsl_types.h"
|
| ++ #include "safe_strcmp.h"
|
| +
|
| + class signature_entry : public exec_node
|
| + {
|
| +***************
|
| +*** 90,96 ****
|
| + {
|
| + signature_entry *entry = this->get_signature_entry(ir);
|
| +
|
| +! if (strcmp(ir->function_name(), "main") == 0) {
|
| + entry->used = true;
|
| + }
|
| +
|
| +--- 91,97 ----
|
| + {
|
| + signature_entry *entry = this->get_signature_entry(ir);
|
| +
|
| +! if (safe_strcmp(ir->function_name(), "main") == 0) {
|
| + entry->used = true;
|
| + }
|
| +
|
| +diff -c -r Mesa-7.9/src/glsl/ir_function_inlining.cpp MesaLib/src/glsl/ir_function_inlining.cpp
|
| +*** Mesa-7.9/src/glsl/ir_function_inlining.cpp Fri Oct 1 15:51:28 2010
|
| +--- MesaLib/src/glsl/ir_function_inlining.cpp Fri Oct 22 15:35:58 2010
|
| +***************
|
| +*** 27,33 ****
|
| + * Replaces calls to functions with the body of the function.
|
| + */
|
| +
|
| +! #include <inttypes.h>
|
| + #include "ir.h"
|
| + #include "ir_visitor.h"
|
| + #include "ir_function_inlining.h"
|
| +--- 27,34 ----
|
| + * Replaces calls to functions with the body of the function.
|
| + */
|
| +
|
| +! /* The use of inttypes.h seems to be unnecessary and causes problems on Windows. */
|
| +! /* #include <inttypes.h> */
|
| + #include "ir.h"
|
| + #include "ir_visitor.h"
|
| + #include "ir_function_inlining.h"
|
| +diff -c -r Mesa-7.9/src/glsl/ir_lower_jumps.cpp MesaLib/src/glsl/ir_lower_jumps.cpp
|
| +*** Mesa-7.9/src/glsl/ir_lower_jumps.cpp Fri Oct 1 15:51:28 2010
|
| +--- MesaLib/src/glsl/ir_lower_jumps.cpp Fri Oct 22 15:36:16 2010
|
| +***************
|
| +*** 28,33 ****
|
| +--- 28,34 ----
|
| + #include "glsl_types.h"
|
| + #include <string.h>
|
| + #include "ir.h"
|
| ++ #include "safe_strcmp.h"
|
| +
|
| + enum jump_strength
|
| + {
|
| +***************
|
| +*** 125,131 ****
|
| + this->return_flag = 0;
|
| + this->return_value = 0;
|
| + this->nesting_depth = 0;
|
| +! this->is_main = this->signature && (strcmp(this->signature->function_name(), "main") == 0);
|
| + }
|
| +
|
| + ir_variable* get_return_flag()
|
| +--- 126,132 ----
|
| + this->return_flag = 0;
|
| + this->return_value = 0;
|
| + this->nesting_depth = 0;
|
| +! this->is_main = this->signature && (safe_strcmp(this->signature->function_name(), "main") == 0);
|
| + }
|
| +
|
| + ir_variable* get_return_flag()
|
| +diff -c -r Mesa-7.9/src/glsl/ir_reader.cpp MesaLib/src/glsl/ir_reader.cpp
|
| +*** Mesa-7.9/src/glsl/ir_reader.cpp Fri Oct 1 15:51:28 2010
|
| +--- MesaLib/src/glsl/ir_reader.cpp Fri Oct 22 15:36:27 2010
|
| +***************
|
| +*** 31,36 ****
|
| +--- 31,37 ----
|
| + #include "glsl_parser_extras.h"
|
| + #include "glsl_types.h"
|
| + #include "s_expression.h"
|
| ++ #include "safe_strcmp.h"
|
| +
|
| + const static bool debug = false;
|
| +
|
| +***************
|
| +*** 128,134 ****
|
| + ir_read_error(st, expr, "expected type (array ...) or (struct ...)");
|
| + return NULL;
|
| + }
|
| +! if (strcmp(type_sym->value(), "array") == 0) {
|
| + if (list->length() != 3) {
|
| + ir_read_error(st, expr, "expected type (array <type> <int>)");
|
| + return NULL;
|
| +--- 129,135 ----
|
| + ir_read_error(st, expr, "expected type (array ...) or (struct ...)");
|
| + return NULL;
|
| + }
|
| +! if (safe_strcmp(type_sym->value(), "array") == 0) {
|
| + if (list->length() != 3) {
|
| + ir_read_error(st, expr, "expected type (array <type> <int>)");
|
| + return NULL;
|
| +***************
|
| +*** 150,156 ****
|
| + }
|
| +
|
| + return glsl_type::get_array_instance(base_type, size->value());
|
| +! } else if (strcmp(type_sym->value(), "struct") == 0) {
|
| + assert(false); // FINISHME
|
| + } else {
|
| + ir_read_error(st, expr, "expected (array ...) or (struct ...); "
|
| +--- 151,157 ----
|
| + }
|
| +
|
| + return glsl_type::get_array_instance(base_type, size->value());
|
| +! } else if (safe_strcmp(type_sym->value(), "struct") == 0) {
|
| + assert(false); // FINISHME
|
| + } else {
|
| + ir_read_error(st, expr, "expected (array ...) or (struct ...); "
|
| +***************
|
| +*** 189,195 ****
|
| + continue; // not a (function ...); ignore it.
|
| +
|
| + s_symbol *tag = SX_AS_SYMBOL(sub->subexpressions.get_head());
|
| +! if (tag == NULL || strcmp(tag->value(), "function") != 0)
|
| + continue; // not a (function ...); ignore it.
|
| +
|
| + ir_function *f = read_function(st, sub, true);
|
| +--- 190,196 ----
|
| + continue; // not a (function ...); ignore it.
|
| +
|
| + s_symbol *tag = SX_AS_SYMBOL(sub->subexpressions.get_head());
|
| +! if (tag == NULL || safe_strcmp(tag->value(), "function") != 0)
|
| + continue; // not a (function ...); ignore it.
|
| +
|
| + ir_function *f = read_function(st, sub, true);
|
| +***************
|
| +*** 233,239 ****
|
| + }
|
| +
|
| + s_symbol *tag = SX_AS_SYMBOL(siglist->subexpressions.get_head());
|
| +! if (tag == NULL || strcmp(tag->value(), "signature") != 0) {
|
| + ir_read_error(st, siglist, "Expected (signature ...)");
|
| + return NULL;
|
| + }
|
| +--- 234,240 ----
|
| + }
|
| +
|
| + s_symbol *tag = SX_AS_SYMBOL(siglist->subexpressions.get_head());
|
| +! if (tag == NULL || safe_strcmp(tag->value(), "signature") != 0) {
|
| + ir_read_error(st, siglist, "Expected (signature ...)");
|
| + return NULL;
|
| + }
|
| +***************
|
| +*** 267,273 ****
|
| + return;
|
| + }
|
| + s_symbol *paramtag = SX_AS_SYMBOL(paramlist->subexpressions.get_head());
|
| +! if (paramtag == NULL || strcmp(paramtag->value(), "parameters") != 0) {
|
| + ir_read_error(st, paramlist, "Expected (parameters ...)");
|
| + return;
|
| + }
|
| +--- 268,274 ----
|
| + return;
|
| + }
|
| + s_symbol *paramtag = SX_AS_SYMBOL(paramlist->subexpressions.get_head());
|
| +! if (paramtag == NULL || safe_strcmp(paramtag->value(), "parameters") != 0) {
|
| + ir_read_error(st, paramlist, "Expected (parameters ...)");
|
| + return;
|
| + }
|
| +***************
|
| +*** 364,372 ****
|
| + void *ctx = st;
|
| + s_symbol *symbol = SX_AS_SYMBOL(expr);
|
| + if (symbol != NULL) {
|
| +! if (strcmp(symbol->value(), "break") == 0 && loop_ctx != NULL)
|
| + return new(ctx) ir_loop_jump(ir_loop_jump::jump_break);
|
| +! if (strcmp(symbol->value(), "continue") == 0 && loop_ctx != NULL)
|
| + return new(ctx) ir_loop_jump(ir_loop_jump::jump_continue);
|
| + }
|
| +
|
| +--- 365,373 ----
|
| + void *ctx = st;
|
| + s_symbol *symbol = SX_AS_SYMBOL(expr);
|
| + if (symbol != NULL) {
|
| +! if (safe_strcmp(symbol->value(), "break") == 0 && loop_ctx != NULL)
|
| + return new(ctx) ir_loop_jump(ir_loop_jump::jump_break);
|
| +! if (safe_strcmp(symbol->value(), "continue") == 0 && loop_ctx != NULL)
|
| + return new(ctx) ir_loop_jump(ir_loop_jump::jump_continue);
|
| + }
|
| +
|
| +***************
|
| +*** 383,399 ****
|
| + }
|
| +
|
| + ir_instruction *inst = NULL;
|
| +! if (strcmp(tag->value(), "declare") == 0) {
|
| + inst = read_declaration(st, list);
|
| +! } else if (strcmp(tag->value(), "assign") == 0) {
|
| + inst = read_assignment(st, list);
|
| +! } else if (strcmp(tag->value(), "if") == 0) {
|
| + inst = read_if(st, list, loop_ctx);
|
| +! } else if (strcmp(tag->value(), "loop") == 0) {
|
| + inst = read_loop(st, list);
|
| +! } else if (strcmp(tag->value(), "return") == 0) {
|
| + inst = read_return(st, list);
|
| +! } else if (strcmp(tag->value(), "function") == 0) {
|
| + inst = read_function(st, list, false);
|
| + } else {
|
| + inst = read_rvalue(st, list);
|
| +--- 384,400 ----
|
| + }
|
| +
|
| + ir_instruction *inst = NULL;
|
| +! if (safe_strcmp(tag->value(), "declare") == 0) {
|
| + inst = read_declaration(st, list);
|
| +! } else if (safe_strcmp(tag->value(), "assign") == 0) {
|
| + inst = read_assignment(st, list);
|
| +! } else if (safe_strcmp(tag->value(), "if") == 0) {
|
| + inst = read_if(st, list, loop_ctx);
|
| +! } else if (safe_strcmp(tag->value(), "loop") == 0) {
|
| + inst = read_loop(st, list);
|
| +! } else if (safe_strcmp(tag->value(), "return") == 0) {
|
| + inst = read_return(st, list);
|
| +! } else if (safe_strcmp(tag->value(), "function") == 0) {
|
| + inst = read_function(st, list, false);
|
| + } else {
|
| + inst = read_rvalue(st, list);
|
| +***************
|
| +*** 443,467 ****
|
| + }
|
| +
|
| + // FINISHME: Check for duplicate/conflicting qualifiers.
|
| +! if (strcmp(qualifier->value(), "centroid") == 0) {
|
| + var->centroid = 1;
|
| +! } else if (strcmp(qualifier->value(), "invariant") == 0) {
|
| + var->invariant = 1;
|
| +! } else if (strcmp(qualifier->value(), "uniform") == 0) {
|
| + var->mode = ir_var_uniform;
|
| +! } else if (strcmp(qualifier->value(), "auto") == 0) {
|
| + var->mode = ir_var_auto;
|
| +! } else if (strcmp(qualifier->value(), "in") == 0) {
|
| + var->mode = ir_var_in;
|
| +! } else if (strcmp(qualifier->value(), "out") == 0) {
|
| + var->mode = ir_var_out;
|
| +! } else if (strcmp(qualifier->value(), "inout") == 0) {
|
| + var->mode = ir_var_inout;
|
| +! } else if (strcmp(qualifier->value(), "smooth") == 0) {
|
| + var->interpolation = ir_var_smooth;
|
| +! } else if (strcmp(qualifier->value(), "flat") == 0) {
|
| + var->interpolation = ir_var_flat;
|
| +! } else if (strcmp(qualifier->value(), "noperspective") == 0) {
|
| + var->interpolation = ir_var_noperspective;
|
| + } else {
|
| + ir_read_error(st, list, "unknown qualifier: %s", qualifier->value());
|
| +--- 444,468 ----
|
| + }
|
| +
|
| + // FINISHME: Check for duplicate/conflicting qualifiers.
|
| +! if (safe_strcmp(qualifier->value(), "centroid") == 0) {
|
| + var->centroid = 1;
|
| +! } else if (safe_strcmp(qualifier->value(), "invariant") == 0) {
|
| + var->invariant = 1;
|
| +! } else if (safe_strcmp(qualifier->value(), "uniform") == 0) {
|
| + var->mode = ir_var_uniform;
|
| +! } else if (safe_strcmp(qualifier->value(), "auto") == 0) {
|
| + var->mode = ir_var_auto;
|
| +! } else if (safe_strcmp(qualifier->value(), "in") == 0) {
|
| + var->mode = ir_var_in;
|
| +! } else if (safe_strcmp(qualifier->value(), "out") == 0) {
|
| + var->mode = ir_var_out;
|
| +! } else if (safe_strcmp(qualifier->value(), "inout") == 0) {
|
| + var->mode = ir_var_inout;
|
| +! } else if (safe_strcmp(qualifier->value(), "smooth") == 0) {
|
| + var->interpolation = ir_var_smooth;
|
| +! } else if (safe_strcmp(qualifier->value(), "flat") == 0) {
|
| + var->interpolation = ir_var_flat;
|
| +! } else if (safe_strcmp(qualifier->value(), "noperspective") == 0) {
|
| + var->interpolation = ir_var_noperspective;
|
| + } else {
|
| + ir_read_error(st, list, "unknown qualifier: %s", qualifier->value());
|
| +***************
|
| +*** 574,586 ****
|
| + ir_rvalue *rvalue = read_dereference(st, list);
|
| + if (rvalue != NULL || st->error)
|
| + return rvalue;
|
| +! else if (strcmp(tag->value(), "swiz") == 0) {
|
| + rvalue = read_swizzle(st, list);
|
| +! } else if (strcmp(tag->value(), "expression") == 0) {
|
| + rvalue = read_expression(st, list);
|
| +! } else if (strcmp(tag->value(), "call") == 0) {
|
| + rvalue = read_call(st, list);
|
| +! } else if (strcmp(tag->value(), "constant") == 0) {
|
| + rvalue = read_constant(st, list);
|
| + } else {
|
| + rvalue = read_texture(st, list);
|
| +--- 575,587 ----
|
| + ir_rvalue *rvalue = read_dereference(st, list);
|
| + if (rvalue != NULL || st->error)
|
| + return rvalue;
|
| +! else if (safe_strcmp(tag->value(), "swiz") == 0) {
|
| + rvalue = read_swizzle(st, list);
|
| +! } else if (safe_strcmp(tag->value(), "expression") == 0) {
|
| + rvalue = read_expression(st, list);
|
| +! } else if (safe_strcmp(tag->value(), "call") == 0) {
|
| + rvalue = read_call(st, list);
|
| +! } else if (safe_strcmp(tag->value(), "constant") == 0) {
|
| + rvalue = read_constant(st, list);
|
| + } else {
|
| + rvalue = read_texture(st, list);
|
| +***************
|
| +*** 921,931 ****
|
| + s_symbol *tag = SX_AS_SYMBOL(list->subexpressions.head);
|
| + assert(tag != NULL);
|
| +
|
| +! if (strcmp(tag->value(), "var_ref") == 0)
|
| + return read_var_ref(st, list);
|
| +! if (strcmp(tag->value(), "array_ref") == 0)
|
| + return read_array_ref(st, list);
|
| +! if (strcmp(tag->value(), "record_ref") == 0)
|
| + return read_record_ref(st, list);
|
| + return NULL;
|
| + }
|
| +--- 922,932 ----
|
| + s_symbol *tag = SX_AS_SYMBOL(list->subexpressions.head);
|
| + assert(tag != NULL);
|
| +
|
| +! if (safe_strcmp(tag->value(), "var_ref") == 0)
|
| + return read_var_ref(st, list);
|
| +! if (safe_strcmp(tag->value(), "array_ref") == 0)
|
| + return read_array_ref(st, list);
|
| +! if (safe_strcmp(tag->value(), "record_ref") == 0)
|
| + return read_record_ref(st, list);
|
| + return NULL;
|
| + }
|
| +diff -c -r Mesa-7.9/src/glsl/ir_structure_splitting.cpp MesaLib/src/glsl/ir_structure_splitting.cpp
|
| +*** Mesa-7.9/src/glsl/ir_structure_splitting.cpp Fri Oct 1 15:51:28 2010
|
| +--- MesaLib/src/glsl/ir_structure_splitting.cpp Fri Oct 22 15:36:52 2010
|
| +***************
|
| +*** 37,42 ****
|
| +--- 37,43 ----
|
| + #include "ir_print_visitor.h"
|
| + #include "ir_rvalue_visitor.h"
|
| + #include "glsl_types.h"
|
| ++ #include "safe_strcmp.h"
|
| +
|
| + static bool debug = false;
|
| +
|
| +***************
|
| +*** 228,235 ****
|
| +
|
| + unsigned int i;
|
| + for (i = 0; i < entry->var->type->length; i++) {
|
| +! if (strcmp(deref_record->field,
|
| +! entry->var->type->fields.structure[i].name) == 0)
|
| + break;
|
| + }
|
| + assert(i != entry->var->type->length);
|
| +--- 229,236 ----
|
| +
|
| + unsigned int i;
|
| + for (i = 0; i < entry->var->type->length; i++) {
|
| +! if (safe_strcmp(deref_record->field,
|
| +! entry->var->type->fields.structure[i].name) == 0)
|
| + break;
|
| + }
|
| + assert(i != entry->var->type->length);
|
| +diff -c -r Mesa-7.9/src/glsl/ir_validate.cpp MesaLib/src/glsl/ir_validate.cpp
|
| +*** Mesa-7.9/src/glsl/ir_validate.cpp Mon Oct 4 18:58:00 2010
|
| +--- MesaLib/src/glsl/ir_validate.cpp Fri Oct 22 15:37:24 2010
|
| +***************
|
| +*** 33,39 ****
|
| + * a dereference chain.
|
| + */
|
| +
|
| +! #include <inttypes.h>
|
| + #include "ir.h"
|
| + #include "ir_hierarchical_visitor.h"
|
| + #include "program/hash_table.h"
|
| +--- 33,40 ----
|
| + * a dereference chain.
|
| + */
|
| +
|
| +! /* The use of inttypes.h seems to be unnecessary and causes problems on Windows. */
|
| +! /* #include <inttypes.h> */
|
| + #include "ir.h"
|
| + #include "ir_hierarchical_visitor.h"
|
| + #include "program/hash_table.h"
|
| +diff -c -r Mesa-7.9/src/glsl/linker.cpp MesaLib/src/glsl/linker.cpp
|
| +*** Mesa-7.9/src/glsl/linker.cpp Fri Oct 1 15:51:28 2010
|
| +--- MesaLib/src/glsl/linker.cpp Fri Oct 22 15:38:08 2010
|
| +***************
|
| +*** 79,84 ****
|
| +--- 79,85 ----
|
| + #include "program/hash_table.h"
|
| + #include "linker.h"
|
| + #include "ir_optimization.h"
|
| ++ #include "safe_strcmp.h"
|
| +
|
| + /**
|
| + * Visitor that determines whether or not a variable is ever written.
|
| +***************
|
| +*** 95,101 ****
|
| + {
|
| + ir_variable *const var = ir->lhs->variable_referenced();
|
| +
|
| +! if (strcmp(name, var->name) == 0) {
|
| + found = true;
|
| + return visit_stop;
|
| + }
|
| +--- 96,102 ----
|
| + {
|
| + ir_variable *const var = ir->lhs->variable_referenced();
|
| +
|
| +! if (safe_strcmp(name, var->name) == 0) {
|
| + found = true;
|
| + return visit_stop;
|
| + }
|
| +***************
|
| +*** 113,119 ****
|
| + if (sig_param->mode == ir_var_out ||
|
| + sig_param->mode == ir_var_inout) {
|
| + ir_variable *var = param_rval->variable_referenced();
|
| +! if (var && strcmp(name, var->name) == 0) {
|
| + found = true;
|
| + return visit_stop;
|
| + }
|
| +--- 114,120 ----
|
| + if (sig_param->mode == ir_var_out ||
|
| + sig_param->mode == ir_var_inout) {
|
| + ir_variable *var = param_rval->variable_referenced();
|
| +! if (var && safe_strcmp(name, var->name) == 0) {
|
| + found = true;
|
| + return visit_stop;
|
| + }
|
| +***************
|
| +*** 148,154 ****
|
| +
|
| + virtual ir_visitor_status visit(ir_dereference_variable *ir)
|
| + {
|
| +! if (strcmp(this->name, ir->var->name) == 0) {
|
| + this->found = true;
|
| + return visit_stop;
|
| + }
|
| +--- 149,155 ----
|
| +
|
| + virtual ir_visitor_status visit(ir_dereference_variable *ir)
|
| + {
|
| +! if (safe_strcmp(this->name, ir->var->name) == 0) {
|
| + this->found = true;
|
| + return visit_stop;
|
| + }
|
| +***************
|
| +*** 876,882 ****
|
| + if (!other_var)
|
| + continue;
|
| +
|
| +! if (strcmp(var->name, other_var->name) == 0 &&
|
| + other_var->max_array_access > size) {
|
| + size = other_var->max_array_access;
|
| + }
|
| +--- 877,883 ----
|
| + if (!other_var)
|
| + continue;
|
| +
|
| +! if (safe_strcmp(var->name, other_var->name) == 0 &&
|
| + other_var->max_array_access > size) {
|
| + size = other_var->max_array_access;
|
| + }
|
| +Only in MesaLib/src/glsl: safe_strcmp.c
|
| +Only in MesaLib/src/glsl: safe_strcmp.h
|
| +diff -c -r Mesa-7.9/src/mapi/glapi/glapi_nop.c MesaLib/src/mapi/glapi/glapi_nop.c
|
| +*** Mesa-7.9/src/mapi/glapi/glapi_nop.c Fri Oct 1 15:51:28 2010
|
| +--- MesaLib/src/mapi/glapi/glapi_nop.c Fri Oct 22 15:41:35 2010
|
| +***************
|
| +*** 107,113 ****
|
| + return 0;
|
| + }
|
| +
|
| +! #define TABLE_ENTRY(name) (_glapi_proc) NoOpGeneric
|
| +
|
| + #endif
|
| +
|
| +--- 107,138 ----
|
| + return 0;
|
| + }
|
| +
|
| +! /**
|
| +! * This is called if the user somehow calls an unassigned GL dispatch function.
|
| +! */
|
| +! static GLint
|
| +! NoOpUnused(void)
|
| +! {
|
| +! return NoOpGeneric();
|
| +! }
|
| +!
|
| +! /*
|
| +! * It is necessary to generate custom no-op entry points at least on
|
| +! * Windows, where the __stdcall calling convention is used (callee
|
| +! * cleans the stack). This calling convention can not tolerate a
|
| +! * mismatch between the numbers of arguments in caller and callee.
|
| +! */
|
| +! #define KEYWORD1 static
|
| +! #define KEYWORD1_ALT static
|
| +! #define KEYWORD2 GLAPIENTRY
|
| +! #define NAME(func) NoOp##func
|
| +! #define DISPATCH(func, args, msg) NoOpGeneric();
|
| +! #define RETURN_DISPATCH(func, args, msg) return NoOpGeneric();
|
| +!
|
| +! /*
|
| +! * Defines for the table of no-op entry points.
|
| +! */
|
| +! #define TABLE_ENTRY(name) (_glapi_proc) NoOp##name
|
| +
|
| + #endif
|
| +
|
| +diff -c -r Mesa-7.9/src/mesa/main/compiler.h MesaLib/src/mesa/main/compiler.h
|
| +*** Mesa-7.9/src/mesa/main/compiler.h Fri Oct 1 15:51:28 2010
|
| +--- MesaLib/src/mesa/main/compiler.h Fri Oct 22 15:44:23 2010
|
| +***************
|
| +*** 175,181 ****
|
| +--- 175,183 ----
|
| + # define PUBLIC __attribute__((visibility("default")))
|
| + # define USED __attribute__((used))
|
| + #else
|
| ++ # ifndef PUBLIC
|
| + # define PUBLIC
|
| ++ # endif
|
| + # define USED
|
| + #endif
|
| +
|
| +diff -c -r Mesa-7.9/src/mesa/main/querymatrix.c MesaLib/src/mesa/main/querymatrix.c
|
| +*** Mesa-7.9/src/mesa/main/querymatrix.c Mon Oct 4 18:58:00 2010
|
| +--- MesaLib/src/mesa/main/querymatrix.c Wed Oct 6 16:36:08 2010
|
| +***************
|
| +*** 73,79 ****
|
| + #elif defined(__APPLE__) || defined(__CYGWIN__) || defined(__FreeBSD__) || \
|
| + defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || \
|
| + (defined(__sun) && defined(__C99FEATURES__)) || defined(__MINGW32__) || \
|
| +! (defined(__sun) && defined(__GNUC__))
|
| +
|
| + /* fpclassify is available. */
|
| +
|
| +--- 73,80 ----
|
| + #elif defined(__APPLE__) || defined(__CYGWIN__) || defined(__FreeBSD__) || \
|
| + defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || \
|
| + (defined(__sun) && defined(__C99FEATURES__)) || defined(__MINGW32__) || \
|
| +! (defined(__sun) && defined(__GNUC__)) || \
|
| +! (defined(__linux) && defined(__GNUC__))
|
| +
|
| + /* fpclassify is available. */
|
| +
|
|
|