OLD | NEW |
(Empty) | |
| 1 diff -c -r Mesa-7.9/include/GL/gl.h MesaLib/include/GL/gl.h |
| 2 *** Mesa-7.9/include/GL/gl.h Tue Apr 27 14:41:21 2010 |
| 3 --- MesaLib/include/GL/gl.h Thu Oct 14 14:41:53 2010 |
| 4 *************** |
| 5 *** 55,61 **** |
| 6 # if (defined(_MSC_VER) || defined(__MINGW32__)) && defined(BUILD_GL32) /* ta
g specify we're building mesa as a DLL */ |
| 7 # define GLAPI __declspec(dllexport) |
| 8 # elif (defined(_MSC_VER) || defined(__MINGW32__)) && defined(_DLL) /* tag sp
ecifying we're building for DLL runtime support */ |
| 9 ! # define GLAPI __declspec(dllimport) |
| 10 # else /* for use with static link lib build of Win32 edition only */ |
| 11 # define GLAPI extern |
| 12 # endif /* _STATIC_MESA support */ |
| 13 --- 55,65 ---- |
| 14 # if (defined(_MSC_VER) || defined(__MINGW32__)) && defined(BUILD_GL32) /* ta
g specify we're building mesa as a DLL */ |
| 15 # define GLAPI __declspec(dllexport) |
| 16 # elif (defined(_MSC_VER) || defined(__MINGW32__)) && defined(_DLL) /* tag sp
ecifying we're building for DLL runtime support */ |
| 17 ! // We always retrieve the entry points dynamically via GetProcAddress or |
| 18 ! // OSMesaGetProcAddress. This works around an issue where using the MSVC |
| 19 ! // multi-threaded runtime library, which defines _DLL. |
| 20 ! //# define GLAPI __declspec(dllimport) |
| 21 ! # define GLAPI |
| 22 # else /* for use with static link lib build of Win32 edition only */ |
| 23 # define GLAPI extern |
| 24 # endif /* _STATIC_MESA support */ |
| 25 *************** |
| 26 *** 72,80 **** |
| 27 # define GLAPIENTRY |
| 28 #endif /* WIN32 && !CYGWIN */ |
| 29 |
| 30 ! #if (defined(__BEOS__) && defined(__POWERPC__)) || defined(__QUICKDRAW__) |
| 31 ! # define PRAGMA_EXPORT_SUPPORTED 1 |
| 32 ! #endif |
| 33 |
| 34 /* |
| 35 * WINDOWS: Include windows.h here to define APIENTRY. |
| 36 --- 76,86 ---- |
| 37 # define GLAPIENTRY |
| 38 #endif /* WIN32 && !CYGWIN */ |
| 39 |
| 40 ! // Disabled this because __QUICKDRAW__ is defined on Mac and gcc does not |
| 41 ! // support the pragma. |
| 42 ! //#if (defined(__BEOS__) && defined(__POWERPC__)) || defined(__QUICKDRAW__) |
| 43 ! //# define PRAGMA_EXPORT_SUPPORTED 1 |
| 44 ! //#endif |
| 45 |
| 46 /* |
| 47 * WINDOWS: Include windows.h here to define APIENTRY. |
| 48 diff -c -r Mesa-7.9/include/GL/glext.h MesaLib/include/GL/glext.h |
| 49 *** Mesa-7.9/include/GL/glext.h Fri Oct 1 15:51:28 2010 |
| 50 --- MesaLib/include/GL/glext.h Thu Oct 14 14:50:37 2010 |
| 51 *************** |
| 52 *** 5030,5043 **** |
| 53 |
| 54 #ifndef GL_VERSION_1_5 |
| 55 /* GL types for handling large vertex buffer objects */ |
| 56 ! typedef ptrdiff_t GLintptr; |
| 57 ! typedef ptrdiff_t GLsizeiptr; |
| 58 #endif |
| 59 |
| 60 #ifndef GL_ARB_vertex_buffer_object |
| 61 /* GL types for handling large vertex buffer objects */ |
| 62 ! typedef ptrdiff_t GLintptrARB; |
| 63 ! typedef ptrdiff_t GLsizeiptrARB; |
| 64 #endif |
| 65 |
| 66 #ifndef GL_ARB_shader_objects |
| 67 --- 5030,5043 ---- |
| 68 |
| 69 #ifndef GL_VERSION_1_5 |
| 70 /* GL types for handling large vertex buffer objects */ |
| 71 ! typedef signed long int GLintptr; |
| 72 ! typedef signed long int GLsizeiptr; |
| 73 #endif |
| 74 |
| 75 #ifndef GL_ARB_vertex_buffer_object |
| 76 /* GL types for handling large vertex buffer objects */ |
| 77 ! typedef signed long int GLintptrARB; |
| 78 ! typedef signed long int GLsizeiptrARB; |
| 79 #endif |
| 80 |
| 81 #ifndef GL_ARB_shader_objects |
| 82 diff -c -r Mesa-7.9/include/GL/osmesa.h MesaLib/include/GL/osmesa.h |
| 83 *** Mesa-7.9/include/GL/osmesa.h Thu Feb 4 16:10:39 2010 |
| 84 --- MesaLib/include/GL/osmesa.h Thu Oct 14 14:47:08 2010 |
| 85 *************** |
| 86 *** 101,109 **** |
| 87 typedef struct osmesa_context *OSMesaContext; |
| 88 |
| 89 |
| 90 ! #if defined(__BEOS__) || defined(__QUICKDRAW__) |
| 91 ! #pragma export on |
| 92 ! #endif |
| 93 |
| 94 |
| 95 /* |
| 96 --- 101,111 ---- |
| 97 typedef struct osmesa_context *OSMesaContext; |
| 98 |
| 99 |
| 100 ! // Disabled this because __QUICKDRAW__ is defined on Mac and gcc does not |
| 101 ! // support the pragma. |
| 102 ! //#if defined(__BEOS__) || defined(__QUICKDRAW__) |
| 103 ! //#pragma export on |
| 104 ! //#endif |
| 105 |
| 106 |
| 107 /* |
| 108 *************** |
| 109 *** 276,284 **** |
| 110 OSMesaColorClamp(GLboolean enable); |
| 111 |
| 112 |
| 113 ! #if defined(__BEOS__) || defined(__QUICKDRAW__) |
| 114 ! #pragma export off |
| 115 ! #endif |
| 116 |
| 117 |
| 118 #ifdef __cplusplus |
| 119 --- 278,288 ---- |
| 120 OSMesaColorClamp(GLboolean enable); |
| 121 |
| 122 |
| 123 ! // Disabled this because __QUICKDRAW__ is defined on Mac and gcc does not |
| 124 ! // support the pragma. |
| 125 ! //#if defined(__BEOS__) || defined(__QUICKDRAW__) |
| 126 ! //#pragma export off |
| 127 ! //#endif |
| 128 |
| 129 |
| 130 #ifdef __cplusplus |
| 131 diff -c -r Mesa-7.9/src/glsl/ast_to_hir.cpp MesaLib/src/glsl/ast_to_hir.cpp |
| 132 *** Mesa-7.9/src/glsl/ast_to_hir.cpp Fri Oct 1 15:51:28 2010 |
| 133 --- MesaLib/src/glsl/ast_to_hir.cpp Fri Oct 22 15:28:47 2010 |
| 134 *************** |
| 135 *** 55,60 **** |
| 136 --- 55,61 ---- |
| 137 #include "ast.h" |
| 138 #include "glsl_types.h" |
| 139 #include "ir.h" |
| 140 + #include "safe_strcmp.h" |
| 141 |
| 142 void |
| 143 _mesa_ast_to_hir(exec_list *instructions, struct _mesa_glsl_parse_state *state
) |
| 144 *************** |
| 145 *** 1615,1621 **** |
| 146 var->pixel_center_integer = qual->pixel_center_integer; |
| 147 var->origin_upper_left = qual->origin_upper_left; |
| 148 if ((qual->origin_upper_left || qual->pixel_center_integer) |
| 149 ! && (strcmp(var->name, "gl_FragCoord") != 0)) { |
| 150 const char *const qual_string = (qual->origin_upper_left) |
| 151 ? "origin_upper_left" : "pixel_center_integer"; |
| 152 |
| 153 --- 1616,1622 ---- |
| 154 var->pixel_center_integer = qual->pixel_center_integer; |
| 155 var->origin_upper_left = qual->origin_upper_left; |
| 156 if ((qual->origin_upper_left || qual->pixel_center_integer) |
| 157 ! && (safe_strcmp(var->name, "gl_FragCoord") != 0)) { |
| 158 const char *const qual_string = (qual->origin_upper_left) |
| 159 ? "origin_upper_left" : "pixel_center_integer"; |
| 160 |
| 161 *************** |
| 162 *** 2003,2009 **** |
| 163 * gl_MaxTextureCoords." |
| 164 */ |
| 165 const unsigned size = unsigned(var->type->array_size()); |
| 166 ! if ((strcmp("gl_TexCoord", var->name) == 0) |
| 167 && (size > state->Const.MaxTextureCoords)) { |
| 168 YYLTYPE loc = this->get_location(); |
| 169 |
| 170 --- 2004,2010 ---- |
| 171 * gl_MaxTextureCoords." |
| 172 */ |
| 173 const unsigned size = unsigned(var->type->array_size()); |
| 174 ! if ((safe_strcmp("gl_TexCoord", var->name) == 0) |
| 175 && (size > state->Const.MaxTextureCoords)) { |
| 176 YYLTYPE loc = this->get_location(); |
| 177 |
| 178 *************** |
| 179 *** 2022,2028 **** |
| 180 delete var; |
| 181 var = NULL; |
| 182 } else if (state->extensions->ARB_fragment_coord_conventions |
| 183 ! && strcmp(var->name, "gl_FragCoord") == 0 |
| 184 && earlier->type == var->type |
| 185 && earlier->mode == var->mode) { |
| 186 /* Allow redeclaration of gl_FragCoord for ARB_fcc layout |
| 187 --- 2023,2029 ---- |
| 188 delete var; |
| 189 var = NULL; |
| 190 } else if (state->extensions->ARB_fragment_coord_conventions |
| 191 ! && safe_strcmp(var->name, "gl_FragCoord") == 0 |
| 192 && earlier->type == var->type |
| 193 && earlier->mode == var->mode) { |
| 194 /* Allow redeclaration of gl_FragCoord for ARB_fcc layout |
| 195 *************** |
| 196 *** 2336,2342 **** |
| 197 } |
| 198 |
| 199 /* Verify the return type of main() */ |
| 200 ! if (strcmp(name, "main") == 0) { |
| 201 if (! return_type->is_void()) { |
| 202 YYLTYPE loc = this->get_location(); |
| 203 |
| 204 --- 2337,2343 ---- |
| 205 } |
| 206 |
| 207 /* Verify the return type of main() */ |
| 208 ! if (safe_strcmp(name, "main") == 0) { |
| 209 if (! return_type->is_void()) { |
| 210 YYLTYPE loc = this->get_location(); |
| 211 |
| 212 diff -c -r Mesa-7.9/src/glsl/glcpp/glcpp-parse.c MesaLib/src/glsl/glcpp/glcpp-pa
rse.c |
| 213 *** Mesa-7.9/src/glsl/glcpp/glcpp-parse.c Fri Oct 1 15:51:28 2010 |
| 214 --- MesaLib/src/glsl/glcpp/glcpp-parse.c Fri Oct 22 15:30:59 2010 |
| 215 *************** |
| 216 *** 96,106 **** |
| 217 --- 96,114 ---- |
| 218 #include <stdlib.h> |
| 219 #include <string.h> |
| 220 #include <assert.h> |
| 221 + /* The #include of inttypes.h causes problems on Windows */ |
| 222 + #ifndef _MSC_VER |
| 223 #include <inttypes.h> |
| 224 + #endif |
| 225 + /* Windows headers do not define PRIiMAX */ |
| 226 + #ifdef _MSC_VER |
| 227 + #define PRIiMAX "I64i" |
| 228 + #endif |
| 229 |
| 230 #include "glcpp.h" |
| 231 #include "main/core.h" /* for struct gl_extensions */ |
| 232 #include "main/mtypes.h" /* for gl_api enum */ |
| 233 + #include "safe_strcmp.h" |
| 234 |
| 235 #define glcpp_print(stream, str) stream = talloc_strdup_append(stream, str) |
| 236 #define glcpp_printf(stream, fmt, args, ...) \ |
| 237 *************** |
| 238 *** 2915,2921 **** |
| 239 return 0; |
| 240 |
| 241 for (i = 0, node = list->head; node; i++, node = node->next) { |
| 242 ! if (strcmp (node->str, member) == 0) { |
| 243 if (index) |
| 244 *index = i; |
| 245 return 1; |
| 246 --- 2923,2929 ---- |
| 247 return 0; |
| 248 |
| 249 for (i = 0, node = list->head; node; i++, node = node->next) { |
| 250 ! if (safe_strcmp (node->str, member) == 0) { |
| 251 if (index) |
| 252 *index = i; |
| 253 return 1; |
| 254 *************** |
| 255 *** 2955,2961 **** |
| 256 node_a && node_b; |
| 257 node_a = node_a->next, node_b = node_b->next) |
| 258 { |
| 259 ! if (strcmp (node_a->str, node_b->str)) |
| 260 return 0; |
| 261 } |
| 262 |
| 263 --- 2963,2969 ---- |
| 264 node_a && node_b; |
| 265 node_a = node_a->next, node_b = node_b->next) |
| 266 { |
| 267 ! if (safe_strcmp (node_a->str, node_b->str)) |
| 268 return 0; |
| 269 } |
| 270 |
| 271 *************** |
| 272 *** 3182,3189 **** |
| 273 case IDENTIFIER: |
| 274 case INTEGER_STRING: |
| 275 case OTHER: |
| 276 ! if (strcmp (node_a->token->value.str, |
| 277 ! node_b->token->value.str)) |
| 278 { |
| 279 return 0; |
| 280 } |
| 281 --- 3190,3197 ---- |
| 282 case IDENTIFIER: |
| 283 case INTEGER_STRING: |
| 284 case OTHER: |
| 285 ! if (safe_strcmp (node_a->token->value.str, |
| 286 ! node_b->token->value.str)) |
| 287 { |
| 288 return 0; |
| 289 } |
| 290 *************** |
| 291 *** 3832,3838 **** |
| 292 return 0; |
| 293 |
| 294 for (node = list; node; node = node->next) |
| 295 ! if (strcmp (node->identifier, identifier) == 0) |
| 296 return 1; |
| 297 |
| 298 return 0; |
| 299 --- 3840,3846 ---- |
| 300 return 0; |
| 301 |
| 302 for (node = list; node; node = node->next) |
| 303 ! if (safe_strcmp (node->identifier, identifier) == 0) |
| 304 return 1; |
| 305 |
| 306 return 0; |
| 307 diff -c -r Mesa-7.9/src/glsl/glcpp/glcpp-parse.y MesaLib/src/glsl/glcpp/glcpp-pa
rse.y |
| 308 *** Mesa-7.9/src/glsl/glcpp/glcpp-parse.y Fri Oct 1 15:51:28 2010 |
| 309 --- MesaLib/src/glsl/glcpp/glcpp-parse.y Fri Oct 22 15:30:47 2010 |
| 310 *************** |
| 311 *** 26,36 **** |
| 312 --- 26,44 ---- |
| 313 #include <stdlib.h> |
| 314 #include <string.h> |
| 315 #include <assert.h> |
| 316 + /* The #include of inttypes.h causes problems on Windows */ |
| 317 + #ifndef _MSC_VER |
| 318 #include <inttypes.h> |
| 319 + #endif |
| 320 + /* Windows headers do not define PRIiMAX */ |
| 321 + #ifdef _MSC_VER |
| 322 + #define PRIiMAX "I64i" |
| 323 + #endif |
| 324 |
| 325 #include "glcpp.h" |
| 326 #include "main/core.h" /* for struct gl_extensions */ |
| 327 #include "main/mtypes.h" /* for gl_api enum */ |
| 328 + #include "safe_strcmp.h" |
| 329 |
| 330 #define glcpp_print(stream, str) stream = talloc_strdup_append(stream, str) |
| 331 #define glcpp_printf(stream, fmt, args, ...) \ |
| 332 *************** |
| 333 *** 590,596 **** |
| 334 return 0; |
| 335 |
| 336 for (i = 0, node = list->head; node; i++, node = node->next) { |
| 337 ! if (strcmp (node->str, member) == 0) { |
| 338 if (index) |
| 339 *index = i; |
| 340 return 1; |
| 341 --- 598,604 ---- |
| 342 return 0; |
| 343 |
| 344 for (i = 0, node = list->head; node; i++, node = node->next) { |
| 345 ! if (safe_strcmp (node->str, member) == 0) { |
| 346 if (index) |
| 347 *index = i; |
| 348 return 1; |
| 349 *************** |
| 350 *** 630,636 **** |
| 351 node_a && node_b; |
| 352 node_a = node_a->next, node_b = node_b->next) |
| 353 { |
| 354 ! if (strcmp (node_a->str, node_b->str)) |
| 355 return 0; |
| 356 } |
| 357 |
| 358 --- 638,644 ---- |
| 359 node_a && node_b; |
| 360 node_a = node_a->next, node_b = node_b->next) |
| 361 { |
| 362 ! if (safe_strcmp (node_a->str, node_b->str)) |
| 363 return 0; |
| 364 } |
| 365 |
| 366 *************** |
| 367 *** 857,864 **** |
| 368 case IDENTIFIER: |
| 369 case INTEGER_STRING: |
| 370 case OTHER: |
| 371 ! if (strcmp (node_a->token->value.str, |
| 372 ! node_b->token->value.str)) |
| 373 { |
| 374 return 0; |
| 375 } |
| 376 --- 865,872 ---- |
| 377 case IDENTIFIER: |
| 378 case INTEGER_STRING: |
| 379 case OTHER: |
| 380 ! if (safe_strcmp (node_a->token->value.str, |
| 381 ! node_b->token->value.str)) |
| 382 { |
| 383 return 0; |
| 384 } |
| 385 *************** |
| 386 *** 1507,1513 **** |
| 387 return 0; |
| 388 |
| 389 for (node = list; node; node = node->next) |
| 390 ! if (strcmp (node->identifier, identifier) == 0) |
| 391 return 1; |
| 392 |
| 393 return 0; |
| 394 --- 1515,1521 ---- |
| 395 return 0; |
| 396 |
| 397 for (node = list; node; node = node->next) |
| 398 ! if (safe_strcmp (node->identifier, identifier) == 0) |
| 399 return 1; |
| 400 |
| 401 return 0; |
| 402 diff -c -r Mesa-7.9/src/glsl/glcpp/glcpp.c MesaLib/src/glsl/glcpp/glcpp.c |
| 403 *** Mesa-7.9/src/glsl/glcpp/glcpp.c Fri Oct 1 15:51:28 2010 |
| 404 --- MesaLib/src/glsl/glcpp/glcpp.c Fri Oct 22 15:31:25 2010 |
| 405 *************** |
| 406 *** 29,34 **** |
| 407 --- 29,35 ---- |
| 408 #include <errno.h> |
| 409 #include "glcpp.h" |
| 410 #include "main/mtypes.h" |
| 411 + #include "safe_strcmp.h" |
| 412 |
| 413 extern int yydebug; |
| 414 |
| 415 *************** |
| 416 *** 78,84 **** |
| 417 char *text; |
| 418 int fd; |
| 419 |
| 420 ! if (filename == NULL || strcmp (filename, "-") == 0) |
| 421 return load_text_fd (ctx, STDIN_FILENO); |
| 422 |
| 423 fd = open (filename, O_RDONLY); |
| 424 --- 79,85 ---- |
| 425 char *text; |
| 426 int fd; |
| 427 |
| 428 ! if (filename == NULL || safe_strcmp (filename, "-") == 0) |
| 429 return load_text_fd (ctx, STDIN_FILENO); |
| 430 |
| 431 fd = open (filename, O_RDONLY); |
| 432 diff -c -r Mesa-7.9/src/glsl/glcpp/glcpp.h MesaLib/src/glsl/glcpp/glcpp.h |
| 433 *** Mesa-7.9/src/glsl/glcpp/glcpp.h Fri Oct 1 15:51:28 2010 |
| 434 --- MesaLib/src/glsl/glcpp/glcpp.h Fri Oct 22 15:32:43 2010 |
| 435 *************** |
| 436 *** 24,30 **** |
| 437 --- 24,33 ---- |
| 438 #ifndef GLCPP_H |
| 439 #define GLCPP_H |
| 440 |
| 441 + /* Windows does not currently have stdint.h. */ |
| 442 + #ifndef _MSC_VER |
| 443 #include <stdint.h> |
| 444 + #endif |
| 445 |
| 446 #include <talloc.h> |
| 447 |
| 448 *************** |
| 449 *** 49,55 **** |
| 450 --- 52,62 ---- |
| 451 |
| 452 typedef union YYSTYPE |
| 453 { |
| 454 + #ifndef _MSC_VER |
| 455 intmax_t ival; |
| 456 + #else |
| 457 + __int64 ival; |
| 458 + #endif |
| 459 char *str; |
| 460 string_list_t *string_list; |
| 461 token_t *token; |
| 462 diff -c -r Mesa-7.9/src/glsl/glsl_parser.cpp MesaLib/src/glsl/glsl_parser.cpp |
| 463 *** Mesa-7.9/src/glsl/glsl_parser.cpp Fri Oct 1 15:51:28 2010 |
| 464 --- MesaLib/src/glsl/glsl_parser.cpp Fri Oct 22 15:33:24 2010 |
| 465 *************** |
| 466 *** 107,112 **** |
| 467 --- 107,113 ---- |
| 468 #include "ast.h" |
| 469 #include "glsl_parser_extras.h" |
| 470 #include "glsl_types.h" |
| 471 + #include "safe_strcmp.h" |
| 472 |
| 473 #define YYLEX_PARAM state->scanner |
| 474 |
| 475 *************** |
| 476 *** 3966,3975 **** |
| 477 if (state->ARB_fragment_coord_conventions_enable) { |
| 478 bool got_one = false; |
| 479 |
| 480 ! if (strcmp((yyvsp[(1) - (1)].identifier), "origin_upper_left") ==
0) { |
| 481 got_one = true; |
| 482 (yyval.type_qualifier).q.origin_upper_left = 1; |
| 483 ! } else if (strcmp((yyvsp[(1) - (1)].identifier), "pixel_center_int
eger") == 0) { |
| 484 got_one = true; |
| 485 (yyval.type_qualifier).q.pixel_center_integer = 1; |
| 486 } |
| 487 --- 3967,3976 ---- |
| 488 if (state->ARB_fragment_coord_conventions_enable) { |
| 489 bool got_one = false; |
| 490 |
| 491 ! if (safe_strcmp((yyvsp[(1) - (1)].identifier), "origin_upper_left"
) == 0) { |
| 492 got_one = true; |
| 493 (yyval.type_qualifier).q.origin_upper_left = 1; |
| 494 ! } else if (safe_strcmp((yyvsp[(1) - (1)].identifier), "pixel_cente
r_integer") == 0) { |
| 495 got_one = true; |
| 496 (yyval.type_qualifier).q.pixel_center_integer = 1; |
| 497 } |
| 498 diff -c -r Mesa-7.9/src/glsl/glsl_parser_extras.cpp MesaLib/src/glsl/glsl_parser
_extras.cpp |
| 499 *** Mesa-7.9/src/glsl/glsl_parser_extras.cpp Fri Oct 1 15:51:28 2010 |
| 500 --- MesaLib/src/glsl/glsl_parser_extras.cpp Fri Oct 22 15:33:37 2010 |
| 501 *************** |
| 502 *** 35,40 **** |
| 503 --- 35,41 ---- |
| 504 #include "glsl_parser.h" |
| 505 #include "ir_optimization.h" |
| 506 #include "loop_analysis.h" |
| 507 + #include "safe_strcmp.h" |
| 508 |
| 509 _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct __GLcontextRec *ctx, |
| 510 GLenum target, void *mem_ctx) |
| 511 *************** |
| 512 *** 148,160 **** |
| 513 extension_warn |
| 514 } ext_mode; |
| 515 |
| 516 ! if (strcmp(behavior, "warn") == 0) { |
| 517 ext_mode = extension_warn; |
| 518 ! } else if (strcmp(behavior, "require") == 0) { |
| 519 ext_mode = extension_require; |
| 520 ! } else if (strcmp(behavior, "enable") == 0) { |
| 521 ext_mode = extension_enable; |
| 522 ! } else if (strcmp(behavior, "disable") == 0) { |
| 523 ext_mode = extension_disable; |
| 524 } else { |
| 525 _mesa_glsl_error(behavior_locp, state, |
| 526 --- 149,161 ---- |
| 527 extension_warn |
| 528 } ext_mode; |
| 529 |
| 530 ! if (safe_strcmp(behavior, "warn") == 0) { |
| 531 ext_mode = extension_warn; |
| 532 ! } else if (safe_strcmp(behavior, "require") == 0) { |
| 533 ext_mode = extension_require; |
| 534 ! } else if (safe_strcmp(behavior, "enable") == 0) { |
| 535 ext_mode = extension_enable; |
| 536 ! } else if (safe_strcmp(behavior, "disable") == 0) { |
| 537 ext_mode = extension_disable; |
| 538 } else { |
| 539 _mesa_glsl_error(behavior_locp, state, |
| 540 *************** |
| 541 *** 165,178 **** |
| 542 |
| 543 bool unsupported = false; |
| 544 |
| 545 ! if (strcmp(name, "all") == 0) { |
| 546 if ((ext_mode == extension_enable) || (ext_mode == extension_require)) { |
| 547 _mesa_glsl_error(name_locp, state, "Cannot %s all extensions", |
| 548 (ext_mode == extension_enable) |
| 549 ? "enable" : "require"); |
| 550 return false; |
| 551 } |
| 552 ! } else if (strcmp(name, "GL_ARB_draw_buffers") == 0) { |
| 553 /* This extension is only supported in fragment shaders. |
| 554 */ |
| 555 if (state->target != fragment_shader) { |
| 556 --- 166,179 ---- |
| 557 |
| 558 bool unsupported = false; |
| 559 |
| 560 ! if (safe_strcmp(name, "all") == 0) { |
| 561 if ((ext_mode == extension_enable) || (ext_mode == extension_require)) { |
| 562 _mesa_glsl_error(name_locp, state, "Cannot %s all extensions", |
| 563 (ext_mode == extension_enable) |
| 564 ? "enable" : "require"); |
| 565 return false; |
| 566 } |
| 567 ! } else if (safe_strcmp(name, "GL_ARB_draw_buffers") == 0) { |
| 568 /* This extension is only supported in fragment shaders. |
| 569 */ |
| 570 if (state->target != fragment_shader) { |
| 571 *************** |
| 572 *** 181,197 **** |
| 573 state->ARB_draw_buffers_enable = (ext_mode != extension_disable); |
| 574 state->ARB_draw_buffers_warn = (ext_mode == extension_warn); |
| 575 } |
| 576 ! } else if (strcmp(name, "GL_ARB_fragment_coord_conventions") == 0) { |
| 577 state->ARB_fragment_coord_conventions_enable = |
| 578 (ext_mode != extension_disable); |
| 579 state->ARB_fragment_coord_conventions_warn = |
| 580 (ext_mode == extension_warn); |
| 581 |
| 582 unsupported = !state->extensions->ARB_fragment_coord_conventions; |
| 583 ! } else if (strcmp(name, "GL_ARB_texture_rectangle") == 0) { |
| 584 state->ARB_texture_rectangle_enable = (ext_mode != extension_disable); |
| 585 state->ARB_texture_rectangle_warn = (ext_mode == extension_warn); |
| 586 ! } else if (strcmp(name, "GL_EXT_texture_array") == 0) { |
| 587 state->EXT_texture_array_enable = (ext_mode != extension_disable); |
| 588 state->EXT_texture_array_warn = (ext_mode == extension_warn); |
| 589 |
| 590 --- 182,198 ---- |
| 591 state->ARB_draw_buffers_enable = (ext_mode != extension_disable); |
| 592 state->ARB_draw_buffers_warn = (ext_mode == extension_warn); |
| 593 } |
| 594 ! } else if (safe_strcmp(name, "GL_ARB_fragment_coord_conventions") == 0) { |
| 595 state->ARB_fragment_coord_conventions_enable = |
| 596 (ext_mode != extension_disable); |
| 597 state->ARB_fragment_coord_conventions_warn = |
| 598 (ext_mode == extension_warn); |
| 599 |
| 600 unsupported = !state->extensions->ARB_fragment_coord_conventions; |
| 601 ! } else if (safe_strcmp(name, "GL_ARB_texture_rectangle") == 0) { |
| 602 state->ARB_texture_rectangle_enable = (ext_mode != extension_disable); |
| 603 state->ARB_texture_rectangle_warn = (ext_mode == extension_warn); |
| 604 ! } else if (safe_strcmp(name, "GL_EXT_texture_array") == 0) { |
| 605 state->EXT_texture_array_enable = (ext_mode != extension_disable); |
| 606 state->EXT_texture_array_warn = (ext_mode == extension_warn); |
| 607 |
| 608 diff -c -r Mesa-7.9/src/glsl/glsl_types.cpp MesaLib/src/glsl/glsl_types.cpp |
| 609 *** Mesa-7.9/src/glsl/glsl_types.cpp Fri Oct 1 15:51:28 2010 |
| 610 --- MesaLib/src/glsl/glsl_types.cpp Fri Oct 22 15:33:51 2010 |
| 611 *************** |
| 612 *** 27,32 **** |
| 613 --- 27,33 ---- |
| 614 #include "glsl_symbol_table.h" |
| 615 #include "glsl_parser_extras.h" |
| 616 #include "glsl_types.h" |
| 617 + #include "safe_strcmp.h" |
| 618 #include "builtin_types.h" |
| 619 extern "C" { |
| 620 #include "program/hash_table.h" |
| 621 *************** |
| 622 *** 374,380 **** |
| 623 /* Return zero is the types match (there is zero difference) or non-zero |
| 624 * otherwise. |
| 625 */ |
| 626 ! if (strcmp(key1->name, key2->name) != 0) |
| 627 return 1; |
| 628 |
| 629 if (key1->length != key2->length) |
| 630 --- 375,381 ---- |
| 631 /* Return zero is the types match (there is zero difference) or non-zero |
| 632 * otherwise. |
| 633 */ |
| 634 ! if (safe_strcmp(key1->name, key2->name) != 0) |
| 635 return 1; |
| 636 |
| 637 if (key1->length != key2->length) |
| 638 *************** |
| 639 *** 383,389 **** |
| 640 for (unsigned i = 0; i < key1->length; i++) { |
| 641 if (key1->fields.structure[i].type != key2->fields.structure[i].type) |
| 642 return 1; |
| 643 ! if (strcmp(key1->fields.structure[i].name, |
| 644 key2->fields.structure[i].name) != 0) |
| 645 return 1; |
| 646 } |
| 647 --- 384,390 ---- |
| 648 for (unsigned i = 0; i < key1->length; i++) { |
| 649 if (key1->fields.structure[i].type != key2->fields.structure[i].type) |
| 650 return 1; |
| 651 ! if (safe_strcmp(key1->fields.structure[i].name, |
| 652 key2->fields.structure[i].name) != 0) |
| 653 return 1; |
| 654 } |
| 655 *************** |
| 656 *** 433,439 **** |
| 657 |
| 658 assert(t->base_type == GLSL_TYPE_STRUCT); |
| 659 assert(t->length == num_fields); |
| 660 ! assert(strcmp(t->name, name) == 0); |
| 661 |
| 662 return t; |
| 663 } |
| 664 --- 434,440 ---- |
| 665 |
| 666 assert(t->base_type == GLSL_TYPE_STRUCT); |
| 667 assert(t->length == num_fields); |
| 668 ! assert(safe_strcmp(t->name, name) == 0); |
| 669 |
| 670 return t; |
| 671 } |
| 672 *************** |
| 673 *** 446,452 **** |
| 674 return error_type; |
| 675 |
| 676 for (unsigned i = 0; i < this->length; i++) { |
| 677 ! if (strcmp(name, this->fields.structure[i].name) == 0) |
| 678 return this->fields.structure[i].type; |
| 679 } |
| 680 |
| 681 --- 447,453 ---- |
| 682 return error_type; |
| 683 |
| 684 for (unsigned i = 0; i < this->length; i++) { |
| 685 ! if (safe_strcmp(name, this->fields.structure[i].name) == 0) |
| 686 return this->fields.structure[i].type; |
| 687 } |
| 688 |
| 689 *************** |
| 690 *** 461,467 **** |
| 691 return -1; |
| 692 |
| 693 for (unsigned i = 0; i < this->length; i++) { |
| 694 ! if (strcmp(name, this->fields.structure[i].name) == 0) |
| 695 return i; |
| 696 } |
| 697 |
| 698 --- 462,468 ---- |
| 699 return -1; |
| 700 |
| 701 for (unsigned i = 0; i < this->length; i++) { |
| 702 ! if (safe_strcmp(name, this->fields.structure[i].name) == 0) |
| 703 return i; |
| 704 } |
| 705 |
| 706 diff -c -r Mesa-7.9/src/glsl/hir_field_selection.cpp MesaLib/src/glsl/hir_field_
selection.cpp |
| 707 *** Mesa-7.9/src/glsl/hir_field_selection.cpp Fri Oct 1 15:51:28 2010 |
| 708 --- MesaLib/src/glsl/hir_field_selection.cpp Fri Oct 22 15:34:11 2010 |
| 709 *************** |
| 710 *** 26,31 **** |
| 711 --- 26,32 ---- |
| 712 #include "glsl_parser_extras.h" |
| 713 #include "ast.h" |
| 714 #include "glsl_types.h" |
| 715 + #include "safe_strcmp.h" |
| 716 |
| 717 ir_rvalue * |
| 718 _mesa_ast_field_selection_to_hir(const ast_expression *expr, |
| 719 *************** |
| 720 *** 81,87 **** |
| 721 const char *method; |
| 722 method = call->subexpressions[0]->primary_expression.identifier; |
| 723 |
| 724 ! if (op->type->is_array() && strcmp(method, "length") == 0) { |
| 725 if (!call->expressions.is_empty()) |
| 726 _mesa_glsl_error(&loc, state, "length method takes no arguments."); |
| 727 |
| 728 --- 82,88 ---- |
| 729 const char *method; |
| 730 method = call->subexpressions[0]->primary_expression.identifier; |
| 731 |
| 732 ! if (op->type->is_array() && safe_strcmp(method, "length") == 0) { |
| 733 if (!call->expressions.is_empty()) |
| 734 _mesa_glsl_error(&loc, state, "length method takes no arguments."); |
| 735 |
| 736 diff -c -r Mesa-7.9/src/glsl/ir.cpp MesaLib/src/glsl/ir.cpp |
| 737 *** Mesa-7.9/src/glsl/ir.cpp Fri Oct 1 15:51:28 2010 |
| 738 --- MesaLib/src/glsl/ir.cpp Fri Oct 22 15:34:20 2010 |
| 739 *************** |
| 740 *** 25,30 **** |
| 741 --- 25,31 ---- |
| 742 #include "ir.h" |
| 743 #include "ir_visitor.h" |
| 744 #include "glsl_types.h" |
| 745 + #include "safe_strcmp.h" |
| 746 |
| 747 ir_rvalue::ir_rvalue() |
| 748 { |
| 749 *************** |
| 750 *** 338,344 **** |
| 751 { |
| 752 const int operator_count = sizeof(operator_strs) / sizeof(operator_strs[0])
; |
| 753 for (int op = 0; op < operator_count; op++) { |
| 754 ! if (strcmp(str, operator_strs[op]) == 0) |
| 755 return (ir_expression_operation) op; |
| 756 } |
| 757 return (ir_expression_operation) -1; |
| 758 --- 339,345 ---- |
| 759 { |
| 760 const int operator_count = sizeof(operator_strs) / sizeof(operator_strs[0])
; |
| 761 for (int op = 0; op < operator_count; op++) { |
| 762 ! if (safe_strcmp(str, operator_strs[op]) == 0) |
| 763 return (ir_expression_operation) op; |
| 764 } |
| 765 return (ir_expression_operation) -1; |
| 766 *************** |
| 767 *** 878,884 **** |
| 768 { |
| 769 const int count = sizeof(tex_opcode_strs) / sizeof(tex_opcode_strs[0]); |
| 770 for (int op = 0; op < count; op++) { |
| 771 ! if (strcmp(str, tex_opcode_strs[op]) == 0) |
| 772 return (ir_texture_opcode) op; |
| 773 } |
| 774 return (ir_texture_opcode) -1; |
| 775 --- 879,885 ---- |
| 776 { |
| 777 const int count = sizeof(tex_opcode_strs) / sizeof(tex_opcode_strs[0]); |
| 778 for (int op = 0; op < count; op++) { |
| 779 ! if (safe_strcmp(str, tex_opcode_strs[op]) == 0) |
| 780 return (ir_texture_opcode) op; |
| 781 } |
| 782 return (ir_texture_opcode) -1; |
| 783 diff -c -r Mesa-7.9/src/glsl/ir_constant_expression.cpp MesaLib/src/glsl/ir_cons
tant_expression.cpp |
| 784 *** Mesa-7.9/src/glsl/ir_constant_expression.cpp Fri Oct 1 15:51:28 2010 |
| 785 --- MesaLib/src/glsl/ir_constant_expression.cpp Fri Oct 22 15:34:40 2010 |
| 786 *************** |
| 787 *** 38,43 **** |
| 788 --- 38,44 ---- |
| 789 #include "ir.h" |
| 790 #include "ir_visitor.h" |
| 791 #include "glsl_types.h" |
| 792 + #include "safe_strcmp.h" |
| 793 |
| 794 static float |
| 795 dot(ir_constant *op0, ir_constant *op1) |
| 796 *************** |
| 797 *** 850,880 **** |
| 798 memset(&data, 0, sizeof(data)); |
| 799 |
| 800 const char *callee = this->callee_name(); |
| 801 ! if (strcmp(callee, "abs") == 0) { |
| 802 expr = new(mem_ctx) ir_expression(ir_unop_abs, type, op[0], NULL); |
| 803 ! } else if (strcmp(callee, "all") == 0) { |
| 804 assert(op[0]->type->is_boolean()); |
| 805 for (unsigned c = 0; c < op[0]->type->components(); c++) { |
| 806 if (!op[0]->value.b[c]) |
| 807 return new(mem_ctx) ir_constant(false); |
| 808 } |
| 809 return new(mem_ctx) ir_constant(true); |
| 810 ! } else if (strcmp(callee, "any") == 0) { |
| 811 assert(op[0]->type->is_boolean()); |
| 812 for (unsigned c = 0; c < op[0]->type->components(); c++) { |
| 813 if (op[0]->value.b[c]) |
| 814 return new(mem_ctx) ir_constant(true); |
| 815 } |
| 816 return new(mem_ctx) ir_constant(false); |
| 817 ! } else if (strcmp(callee, "acos") == 0) { |
| 818 assert(op[0]->type->is_float()); |
| 819 for (unsigned c = 0; c < op[0]->type->components(); c++) |
| 820 data.f[c] = acosf(op[0]->value.f[c]); |
| 821 ! } else if (strcmp(callee, "asin") == 0) { |
| 822 assert(op[0]->type->is_float()); |
| 823 for (unsigned c = 0; c < op[0]->type->components(); c++) |
| 824 data.f[c] = asinf(op[0]->value.f[c]); |
| 825 ! } else if (strcmp(callee, "atan") == 0) { |
| 826 assert(op[0]->type->is_float()); |
| 827 if (num_parameters == 2) { |
| 828 assert(op[1]->type->is_float()); |
| 829 --- 851,881 ---- |
| 830 memset(&data, 0, sizeof(data)); |
| 831 |
| 832 const char *callee = this->callee_name(); |
| 833 ! if (safe_strcmp(callee, "abs") == 0) { |
| 834 expr = new(mem_ctx) ir_expression(ir_unop_abs, type, op[0], NULL); |
| 835 ! } else if (safe_strcmp(callee, "all") == 0) { |
| 836 assert(op[0]->type->is_boolean()); |
| 837 for (unsigned c = 0; c < op[0]->type->components(); c++) { |
| 838 if (!op[0]->value.b[c]) |
| 839 return new(mem_ctx) ir_constant(false); |
| 840 } |
| 841 return new(mem_ctx) ir_constant(true); |
| 842 ! } else if (safe_strcmp(callee, "any") == 0) { |
| 843 assert(op[0]->type->is_boolean()); |
| 844 for (unsigned c = 0; c < op[0]->type->components(); c++) { |
| 845 if (op[0]->value.b[c]) |
| 846 return new(mem_ctx) ir_constant(true); |
| 847 } |
| 848 return new(mem_ctx) ir_constant(false); |
| 849 ! } else if (safe_strcmp(callee, "acos") == 0) { |
| 850 assert(op[0]->type->is_float()); |
| 851 for (unsigned c = 0; c < op[0]->type->components(); c++) |
| 852 data.f[c] = acosf(op[0]->value.f[c]); |
| 853 ! } else if (safe_strcmp(callee, "asin") == 0) { |
| 854 assert(op[0]->type->is_float()); |
| 855 for (unsigned c = 0; c < op[0]->type->components(); c++) |
| 856 data.f[c] = asinf(op[0]->value.f[c]); |
| 857 ! } else if (safe_strcmp(callee, "atan") == 0) { |
| 858 assert(op[0]->type->is_float()); |
| 859 if (num_parameters == 2) { |
| 860 assert(op[1]->type->is_float()); |
| 861 *************** |
| 862 *** 884,894 **** |
| 863 for (unsigned c = 0; c < op[0]->type->components(); c++) |
| 864 data.f[c] = atanf(op[0]->value.f[c]); |
| 865 } |
| 866 ! } else if (strcmp(callee, "dFdx") == 0 || strcmp(callee, "dFdy") == 0) { |
| 867 return ir_constant::zero(mem_ctx, this->type); |
| 868 ! } else if (strcmp(callee, "ceil") == 0) { |
| 869 expr = new(mem_ctx) ir_expression(ir_unop_ceil, type, op[0], NULL); |
| 870 ! } else if (strcmp(callee, "clamp") == 0) { |
| 871 assert(num_parameters == 3); |
| 872 unsigned c1_inc = op[1]->type->is_scalar() ? 0 : 1; |
| 873 unsigned c2_inc = op[2]->type->is_scalar() ? 0 : 1; |
| 874 --- 885,895 ---- |
| 875 for (unsigned c = 0; c < op[0]->type->components(); c++) |
| 876 data.f[c] = atanf(op[0]->value.f[c]); |
| 877 } |
| 878 ! } else if (safe_strcmp(callee, "dFdx") == 0 || safe_strcmp(callee, "dFdy")
== 0) { |
| 879 return ir_constant::zero(mem_ctx, this->type); |
| 880 ! } else if (safe_strcmp(callee, "ceil") == 0) { |
| 881 expr = new(mem_ctx) ir_expression(ir_unop_ceil, type, op[0], NULL); |
| 882 ! } else if (safe_strcmp(callee, "clamp") == 0) { |
| 883 assert(num_parameters == 3); |
| 884 unsigned c1_inc = op[1]->type->is_scalar() ? 0 : 1; |
| 885 unsigned c2_inc = op[2]->type->is_scalar() ? 0 : 1; |
| 886 *************** |
| 887 *** 913,931 **** |
| 888 assert(!"Should not get here."); |
| 889 } |
| 890 } |
| 891 ! } else if (strcmp(callee, "cos") == 0) { |
| 892 expr = new(mem_ctx) ir_expression(ir_unop_cos, type, op[0], NULL); |
| 893 ! } else if (strcmp(callee, "cosh") == 0) { |
| 894 assert(op[0]->type->is_float()); |
| 895 for (unsigned c = 0; c < op[0]->type->components(); c++) |
| 896 data.f[c] = coshf(op[0]->value.f[c]); |
| 897 ! } else if (strcmp(callee, "cross") == 0) { |
| 898 expr = new(mem_ctx) ir_expression(ir_binop_cross, type, op[0], op[1]); |
| 899 ! } else if (strcmp(callee, "degrees") == 0) { |
| 900 assert(op[0]->type->is_float()); |
| 901 for (unsigned c = 0; c < op[0]->type->components(); c++) |
| 902 data.f[c] = 180.0/M_PI * op[0]->value.f[c]; |
| 903 ! } else if (strcmp(callee, "distance") == 0) { |
| 904 assert(op[0]->type->is_float() && op[1]->type->is_float()); |
| 905 float length_squared = 0.0; |
| 906 for (unsigned c = 0; c < op[0]->type->components(); c++) { |
| 907 --- 914,932 ---- |
| 908 assert(!"Should not get here."); |
| 909 } |
| 910 } |
| 911 ! } else if (safe_strcmp(callee, "cos") == 0) { |
| 912 expr = new(mem_ctx) ir_expression(ir_unop_cos, type, op[0], NULL); |
| 913 ! } else if (safe_strcmp(callee, "cosh") == 0) { |
| 914 assert(op[0]->type->is_float()); |
| 915 for (unsigned c = 0; c < op[0]->type->components(); c++) |
| 916 data.f[c] = coshf(op[0]->value.f[c]); |
| 917 ! } else if (safe_strcmp(callee, "cross") == 0) { |
| 918 expr = new(mem_ctx) ir_expression(ir_binop_cross, type, op[0], op[1]); |
| 919 ! } else if (safe_strcmp(callee, "degrees") == 0) { |
| 920 assert(op[0]->type->is_float()); |
| 921 for (unsigned c = 0; c < op[0]->type->components(); c++) |
| 922 data.f[c] = 180.0/M_PI * op[0]->value.f[c]; |
| 923 ! } else if (safe_strcmp(callee, "distance") == 0) { |
| 924 assert(op[0]->type->is_float() && op[1]->type->is_float()); |
| 925 float length_squared = 0.0; |
| 926 for (unsigned c = 0; c < op[0]->type->components(); c++) { |
| 927 *************** |
| 928 *** 933,941 **** |
| 929 length_squared += t * t; |
| 930 } |
| 931 return new(mem_ctx) ir_constant(sqrtf(length_squared)); |
| 932 ! } else if (strcmp(callee, "dot") == 0) { |
| 933 return new(mem_ctx) ir_constant(dot(op[0], op[1])); |
| 934 ! } else if (strcmp(callee, "equal") == 0) { |
| 935 assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector()); |
| 936 for (unsigned c = 0; c < op[0]->type->components(); c++) { |
| 937 switch (op[0]->type->base_type) { |
| 938 --- 934,942 ---- |
| 939 length_squared += t * t; |
| 940 } |
| 941 return new(mem_ctx) ir_constant(sqrtf(length_squared)); |
| 942 ! } else if (safe_strcmp(callee, "dot") == 0) { |
| 943 return new(mem_ctx) ir_constant(dot(op[0], op[1])); |
| 944 ! } else if (safe_strcmp(callee, "equal") == 0) { |
| 945 assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector()); |
| 946 for (unsigned c = 0; c < op[0]->type->components(); c++) { |
| 947 switch (op[0]->type->base_type) { |
| 948 *************** |
| 949 *** 955,976 **** |
| 950 assert(!"Should not get here."); |
| 951 } |
| 952 } |
| 953 ! } else if (strcmp(callee, "exp") == 0) { |
| 954 expr = new(mem_ctx) ir_expression(ir_unop_exp, type, op[0], NULL); |
| 955 ! } else if (strcmp(callee, "exp2") == 0) { |
| 956 expr = new(mem_ctx) ir_expression(ir_unop_exp2, type, op[0], NULL); |
| 957 ! } else if (strcmp(callee, "faceforward") == 0) { |
| 958 if (dot(op[2], op[1]) < 0) |
| 959 return op[0]; |
| 960 for (unsigned c = 0; c < op[0]->type->components(); c++) |
| 961 data.f[c] = -op[0]->value.f[c]; |
| 962 ! } else if (strcmp(callee, "floor") == 0) { |
| 963 expr = new(mem_ctx) ir_expression(ir_unop_floor, type, op[0], NULL); |
| 964 ! } else if (strcmp(callee, "fract") == 0) { |
| 965 expr = new(mem_ctx) ir_expression(ir_unop_fract, type, op[0], NULL); |
| 966 ! } else if (strcmp(callee, "fwidth") == 0) { |
| 967 return ir_constant::zero(mem_ctx, this->type); |
| 968 ! } else if (strcmp(callee, "greaterThan") == 0) { |
| 969 assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector()); |
| 970 for (unsigned c = 0; c < op[0]->type->components(); c++) { |
| 971 switch (op[0]->type->base_type) { |
| 972 --- 956,977 ---- |
| 973 assert(!"Should not get here."); |
| 974 } |
| 975 } |
| 976 ! } else if (safe_strcmp(callee, "exp") == 0) { |
| 977 expr = new(mem_ctx) ir_expression(ir_unop_exp, type, op[0], NULL); |
| 978 ! } else if (safe_strcmp(callee, "exp2") == 0) { |
| 979 expr = new(mem_ctx) ir_expression(ir_unop_exp2, type, op[0], NULL); |
| 980 ! } else if (safe_strcmp(callee, "faceforward") == 0) { |
| 981 if (dot(op[2], op[1]) < 0) |
| 982 return op[0]; |
| 983 for (unsigned c = 0; c < op[0]->type->components(); c++) |
| 984 data.f[c] = -op[0]->value.f[c]; |
| 985 ! } else if (safe_strcmp(callee, "floor") == 0) { |
| 986 expr = new(mem_ctx) ir_expression(ir_unop_floor, type, op[0], NULL); |
| 987 ! } else if (safe_strcmp(callee, "fract") == 0) { |
| 988 expr = new(mem_ctx) ir_expression(ir_unop_fract, type, op[0], NULL); |
| 989 ! } else if (safe_strcmp(callee, "fwidth") == 0) { |
| 990 return ir_constant::zero(mem_ctx, this->type); |
| 991 ! } else if (safe_strcmp(callee, "greaterThan") == 0) { |
| 992 assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector()); |
| 993 for (unsigned c = 0; c < op[0]->type->components(); c++) { |
| 994 switch (op[0]->type->base_type) { |
| 995 *************** |
| 996 *** 987,993 **** |
| 997 assert(!"Should not get here."); |
| 998 } |
| 999 } |
| 1000 ! } else if (strcmp(callee, "greaterThanEqual") == 0) { |
| 1001 assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector()); |
| 1002 for (unsigned c = 0; c < op[0]->type->components(); c++) { |
| 1003 switch (op[0]->type->base_type) { |
| 1004 --- 988,994 ---- |
| 1005 assert(!"Should not get here."); |
| 1006 } |
| 1007 } |
| 1008 ! } else if (safe_strcmp(callee, "greaterThanEqual") == 0) { |
| 1009 assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector()); |
| 1010 for (unsigned c = 0; c < op[0]->type->components(); c++) { |
| 1011 switch (op[0]->type->base_type) { |
| 1012 *************** |
| 1013 *** 1004,1014 **** |
| 1014 assert(!"Should not get here."); |
| 1015 } |
| 1016 } |
| 1017 ! } else if (strcmp(callee, "inversesqrt") == 0) { |
| 1018 expr = new(mem_ctx) ir_expression(ir_unop_rsq, type, op[0], NULL); |
| 1019 ! } else if (strcmp(callee, "length") == 0) { |
| 1020 return new(mem_ctx) ir_constant(sqrtf(dot(op[0], op[0]))); |
| 1021 ! } else if (strcmp(callee, "lessThan") == 0) { |
| 1022 assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector()); |
| 1023 for (unsigned c = 0; c < op[0]->type->components(); c++) { |
| 1024 switch (op[0]->type->base_type) { |
| 1025 --- 1005,1015 ---- |
| 1026 assert(!"Should not get here."); |
| 1027 } |
| 1028 } |
| 1029 ! } else if (safe_strcmp(callee, "inversesqrt") == 0) { |
| 1030 expr = new(mem_ctx) ir_expression(ir_unop_rsq, type, op[0], NULL); |
| 1031 ! } else if (safe_strcmp(callee, "length") == 0) { |
| 1032 return new(mem_ctx) ir_constant(sqrtf(dot(op[0], op[0]))); |
| 1033 ! } else if (safe_strcmp(callee, "lessThan") == 0) { |
| 1034 assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector()); |
| 1035 for (unsigned c = 0; c < op[0]->type->components(); c++) { |
| 1036 switch (op[0]->type->base_type) { |
| 1037 *************** |
| 1038 *** 1025,1031 **** |
| 1039 assert(!"Should not get here."); |
| 1040 } |
| 1041 } |
| 1042 ! } else if (strcmp(callee, "lessThanEqual") == 0) { |
| 1043 assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector()); |
| 1044 for (unsigned c = 0; c < op[0]->type->components(); c++) { |
| 1045 switch (op[0]->type->base_type) { |
| 1046 --- 1026,1032 ---- |
| 1047 assert(!"Should not get here."); |
| 1048 } |
| 1049 } |
| 1050 ! } else if (safe_strcmp(callee, "lessThanEqual") == 0) { |
| 1051 assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector()); |
| 1052 for (unsigned c = 0; c < op[0]->type->components(); c++) { |
| 1053 switch (op[0]->type->base_type) { |
| 1054 *************** |
| 1055 *** 1042,1060 **** |
| 1056 assert(!"Should not get here."); |
| 1057 } |
| 1058 } |
| 1059 ! } else if (strcmp(callee, "log") == 0) { |
| 1060 expr = new(mem_ctx) ir_expression(ir_unop_log, type, op[0], NULL); |
| 1061 ! } else if (strcmp(callee, "log2") == 0) { |
| 1062 expr = new(mem_ctx) ir_expression(ir_unop_log2, type, op[0], NULL); |
| 1063 ! } else if (strcmp(callee, "matrixCompMult") == 0) { |
| 1064 assert(op[0]->type->is_float() && op[1]->type->is_float()); |
| 1065 for (unsigned c = 0; c < op[0]->type->components(); c++) |
| 1066 data.f[c] = op[0]->value.f[c] * op[1]->value.f[c]; |
| 1067 ! } else if (strcmp(callee, "max") == 0) { |
| 1068 expr = new(mem_ctx) ir_expression(ir_binop_max, type, op[0], op[1]); |
| 1069 ! } else if (strcmp(callee, "min") == 0) { |
| 1070 expr = new(mem_ctx) ir_expression(ir_binop_min, type, op[0], op[1]); |
| 1071 ! } else if (strcmp(callee, "mix") == 0) { |
| 1072 assert(op[0]->type->is_float() && op[1]->type->is_float()); |
| 1073 if (op[2]->type->is_float()) { |
| 1074 unsigned c2_inc = op[2]->type->is_scalar() ? 0 : 1; |
| 1075 --- 1043,1061 ---- |
| 1076 assert(!"Should not get here."); |
| 1077 } |
| 1078 } |
| 1079 ! } else if (safe_strcmp(callee, "log") == 0) { |
| 1080 expr = new(mem_ctx) ir_expression(ir_unop_log, type, op[0], NULL); |
| 1081 ! } else if (safe_strcmp(callee, "log2") == 0) { |
| 1082 expr = new(mem_ctx) ir_expression(ir_unop_log2, type, op[0], NULL); |
| 1083 ! } else if (safe_strcmp(callee, "matrixCompMult") == 0) { |
| 1084 assert(op[0]->type->is_float() && op[1]->type->is_float()); |
| 1085 for (unsigned c = 0; c < op[0]->type->components(); c++) |
| 1086 data.f[c] = op[0]->value.f[c] * op[1]->value.f[c]; |
| 1087 ! } else if (safe_strcmp(callee, "max") == 0) { |
| 1088 expr = new(mem_ctx) ir_expression(ir_binop_max, type, op[0], op[1]); |
| 1089 ! } else if (safe_strcmp(callee, "min") == 0) { |
| 1090 expr = new(mem_ctx) ir_expression(ir_binop_min, type, op[0], op[1]); |
| 1091 ! } else if (safe_strcmp(callee, "mix") == 0) { |
| 1092 assert(op[0]->type->is_float() && op[1]->type->is_float()); |
| 1093 if (op[2]->type->is_float()) { |
| 1094 unsigned c2_inc = op[2]->type->is_scalar() ? 0 : 1; |
| 1095 *************** |
| 1096 *** 1068,1076 **** |
| 1097 for (unsigned c = 0; c < op[0]->type->components(); c++) |
| 1098 data.f[c] = op[op[2]->value.b[c] ? 1 : 0]->value.f[c]; |
| 1099 } |
| 1100 ! } else if (strcmp(callee, "mod") == 0) { |
| 1101 expr = new(mem_ctx) ir_expression(ir_binop_mod, type, op[0], op[1]); |
| 1102 ! } else if (strcmp(callee, "normalize") == 0) { |
| 1103 assert(op[0]->type->is_float()); |
| 1104 float length = sqrtf(dot(op[0], op[0])); |
| 1105 |
| 1106 --- 1069,1077 ---- |
| 1107 for (unsigned c = 0; c < op[0]->type->components(); c++) |
| 1108 data.f[c] = op[op[2]->value.b[c] ? 1 : 0]->value.f[c]; |
| 1109 } |
| 1110 ! } else if (safe_strcmp(callee, "mod") == 0) { |
| 1111 expr = new(mem_ctx) ir_expression(ir_binop_mod, type, op[0], op[1]); |
| 1112 ! } else if (safe_strcmp(callee, "normalize") == 0) { |
| 1113 assert(op[0]->type->is_float()); |
| 1114 float length = sqrtf(dot(op[0], op[0])); |
| 1115 |
| 1116 *************** |
| 1117 *** 1079,1087 **** |
| 1118 |
| 1119 for (unsigned c = 0; c < op[0]->type->components(); c++) |
| 1120 data.f[c] = op[0]->value.f[c] / length; |
| 1121 ! } else if (strcmp(callee, "not") == 0) { |
| 1122 expr = new(mem_ctx) ir_expression(ir_unop_logic_not, type, op[0], NULL); |
| 1123 ! } else if (strcmp(callee, "notEqual") == 0) { |
| 1124 assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector()); |
| 1125 for (unsigned c = 0; c < op[0]->type->components(); c++) { |
| 1126 switch (op[0]->type->base_type) { |
| 1127 --- 1080,1088 ---- |
| 1128 |
| 1129 for (unsigned c = 0; c < op[0]->type->components(); c++) |
| 1130 data.f[c] = op[0]->value.f[c] / length; |
| 1131 ! } else if (safe_strcmp(callee, "not") == 0) { |
| 1132 expr = new(mem_ctx) ir_expression(ir_unop_logic_not, type, op[0], NULL); |
| 1133 ! } else if (safe_strcmp(callee, "notEqual") == 0) { |
| 1134 assert(op[0]->type->is_vector() && op[1] && op[1]->type->is_vector()); |
| 1135 for (unsigned c = 0; c < op[0]->type->components(); c++) { |
| 1136 switch (op[0]->type->base_type) { |
| 1137 *************** |
| 1138 *** 1101,1107 **** |
| 1139 assert(!"Should not get here."); |
| 1140 } |
| 1141 } |
| 1142 ! } else if (strcmp(callee, "outerProduct") == 0) { |
| 1143 assert(op[0]->type->is_vector() && op[1]->type->is_vector()); |
| 1144 const unsigned m = op[0]->type->vector_elements; |
| 1145 const unsigned n = op[1]->type->vector_elements; |
| 1146 --- 1102,1108 ---- |
| 1147 assert(!"Should not get here."); |
| 1148 } |
| 1149 } |
| 1150 ! } else if (safe_strcmp(callee, "outerProduct") == 0) { |
| 1151 assert(op[0]->type->is_vector() && op[1]->type->is_vector()); |
| 1152 const unsigned m = op[0]->type->vector_elements; |
| 1153 const unsigned n = op[1]->type->vector_elements; |
| 1154 *************** |
| 1155 *** 1110,1127 **** |
| 1156 data.f[i+m*j] = op[0]->value.f[i] * op[1]->value.f[j]; |
| 1157 } |
| 1158 } |
| 1159 ! } else if (strcmp(callee, "pow") == 0) { |
| 1160 expr = new(mem_ctx) ir_expression(ir_binop_pow, type, op[0], op[1]); |
| 1161 ! } else if (strcmp(callee, "radians") == 0) { |
| 1162 assert(op[0]->type->is_float()); |
| 1163 for (unsigned c = 0; c < op[0]->type->components(); c++) |
| 1164 data.f[c] = M_PI/180.0 * op[0]->value.f[c]; |
| 1165 ! } else if (strcmp(callee, "reflect") == 0) { |
| 1166 assert(op[0]->type->is_float()); |
| 1167 float dot_NI = dot(op[1], op[0]); |
| 1168 for (unsigned c = 0; c < op[0]->type->components(); c++) |
| 1169 data.f[c] = op[0]->value.f[c] - 2 * dot_NI * op[1]->value.f[c]; |
| 1170 ! } else if (strcmp(callee, "refract") == 0) { |
| 1171 const float eta = op[2]->value.f[0]; |
| 1172 const float dot_NI = dot(op[1], op[0]); |
| 1173 const float k = 1.0 - eta * eta * (1.0 - dot_NI * dot_NI); |
| 1174 --- 1111,1128 ---- |
| 1175 data.f[i+m*j] = op[0]->value.f[i] * op[1]->value.f[j]; |
| 1176 } |
| 1177 } |
| 1178 ! } else if (safe_strcmp(callee, "pow") == 0) { |
| 1179 expr = new(mem_ctx) ir_expression(ir_binop_pow, type, op[0], op[1]); |
| 1180 ! } else if (safe_strcmp(callee, "radians") == 0) { |
| 1181 assert(op[0]->type->is_float()); |
| 1182 for (unsigned c = 0; c < op[0]->type->components(); c++) |
| 1183 data.f[c] = M_PI/180.0 * op[0]->value.f[c]; |
| 1184 ! } else if (safe_strcmp(callee, "reflect") == 0) { |
| 1185 assert(op[0]->type->is_float()); |
| 1186 float dot_NI = dot(op[1], op[0]); |
| 1187 for (unsigned c = 0; c < op[0]->type->components(); c++) |
| 1188 data.f[c] = op[0]->value.f[c] - 2 * dot_NI * op[1]->value.f[c]; |
| 1189 ! } else if (safe_strcmp(callee, "refract") == 0) { |
| 1190 const float eta = op[2]->value.f[0]; |
| 1191 const float dot_NI = dot(op[1], op[0]); |
| 1192 const float k = 1.0 - eta * eta * (1.0 - dot_NI * dot_NI); |
| 1193 *************** |
| 1194 *** 1133,1147 **** |
| 1195 * op[1]->value.f[c]; |
| 1196 } |
| 1197 } |
| 1198 ! } else if (strcmp(callee, "sign") == 0) { |
| 1199 expr = new(mem_ctx) ir_expression(ir_unop_sign, type, op[0], NULL); |
| 1200 ! } else if (strcmp(callee, "sin") == 0) { |
| 1201 expr = new(mem_ctx) ir_expression(ir_unop_sin, type, op[0], NULL); |
| 1202 ! } else if (strcmp(callee, "sinh") == 0) { |
| 1203 assert(op[0]->type->is_float()); |
| 1204 for (unsigned c = 0; c < op[0]->type->components(); c++) |
| 1205 data.f[c] = sinhf(op[0]->value.f[c]); |
| 1206 ! } else if (strcmp(callee, "smoothstep") == 0) { |
| 1207 assert(num_parameters == 3); |
| 1208 assert(op[1]->type == op[0]->type); |
| 1209 unsigned edge_inc = op[0]->type->is_scalar() ? 0 : 1; |
| 1210 --- 1134,1148 ---- |
| 1211 * op[1]->value.f[c]; |
| 1212 } |
| 1213 } |
| 1214 ! } else if (safe_strcmp(callee, "sign") == 0) { |
| 1215 expr = new(mem_ctx) ir_expression(ir_unop_sign, type, op[0], NULL); |
| 1216 ! } else if (safe_strcmp(callee, "sin") == 0) { |
| 1217 expr = new(mem_ctx) ir_expression(ir_unop_sin, type, op[0], NULL); |
| 1218 ! } else if (safe_strcmp(callee, "sinh") == 0) { |
| 1219 assert(op[0]->type->is_float()); |
| 1220 for (unsigned c = 0; c < op[0]->type->components(); c++) |
| 1221 data.f[c] = sinhf(op[0]->value.f[c]); |
| 1222 ! } else if (safe_strcmp(callee, "smoothstep") == 0) { |
| 1223 assert(num_parameters == 3); |
| 1224 assert(op[1]->type == op[0]->type); |
| 1225 unsigned edge_inc = op[0]->type->is_scalar() ? 0 : 1; |
| 1226 *************** |
| 1227 *** 1157,1179 **** |
| 1228 data.f[c] = t * t * (3 - 2 * t); |
| 1229 } |
| 1230 } |
| 1231 ! } else if (strcmp(callee, "sqrt") == 0) { |
| 1232 expr = new(mem_ctx) ir_expression(ir_unop_sqrt, type, op[0], NULL); |
| 1233 ! } else if (strcmp(callee, "step") == 0) { |
| 1234 assert(op[0]->type->is_float() && op[1]->type->is_float()); |
| 1235 /* op[0] (edge) may be either a scalar or a vector */ |
| 1236 const unsigned c0_inc = op[0]->type->is_scalar() ? 0 : 1; |
| 1237 for (unsigned c = 0, c0 = 0; c < type->components(); c0 += c0_inc, c++) |
| 1238 data.f[c] = (op[1]->value.f[c] < op[0]->value.f[c0]) ? 0.0 : 1.0; |
| 1239 ! } else if (strcmp(callee, "tan") == 0) { |
| 1240 assert(op[0]->type->is_float()); |
| 1241 for (unsigned c = 0; c < op[0]->type->components(); c++) |
| 1242 data.f[c] = tanf(op[0]->value.f[c]); |
| 1243 ! } else if (strcmp(callee, "tanh") == 0) { |
| 1244 assert(op[0]->type->is_float()); |
| 1245 for (unsigned c = 0; c < op[0]->type->components(); c++) |
| 1246 data.f[c] = tanhf(op[0]->value.f[c]); |
| 1247 ! } else if (strcmp(callee, "transpose") == 0) { |
| 1248 assert(op[0]->type->is_matrix()); |
| 1249 const unsigned n = op[0]->type->vector_elements; |
| 1250 const unsigned m = op[0]->type->matrix_columns; |
| 1251 --- 1158,1180 ---- |
| 1252 data.f[c] = t * t * (3 - 2 * t); |
| 1253 } |
| 1254 } |
| 1255 ! } else if (safe_strcmp(callee, "sqrt") == 0) { |
| 1256 expr = new(mem_ctx) ir_expression(ir_unop_sqrt, type, op[0], NULL); |
| 1257 ! } else if (safe_strcmp(callee, "step") == 0) { |
| 1258 assert(op[0]->type->is_float() && op[1]->type->is_float()); |
| 1259 /* op[0] (edge) may be either a scalar or a vector */ |
| 1260 const unsigned c0_inc = op[0]->type->is_scalar() ? 0 : 1; |
| 1261 for (unsigned c = 0, c0 = 0; c < type->components(); c0 += c0_inc, c++) |
| 1262 data.f[c] = (op[1]->value.f[c] < op[0]->value.f[c0]) ? 0.0 : 1.0; |
| 1263 ! } else if (safe_strcmp(callee, "tan") == 0) { |
| 1264 assert(op[0]->type->is_float()); |
| 1265 for (unsigned c = 0; c < op[0]->type->components(); c++) |
| 1266 data.f[c] = tanf(op[0]->value.f[c]); |
| 1267 ! } else if (safe_strcmp(callee, "tanh") == 0) { |
| 1268 assert(op[0]->type->is_float()); |
| 1269 for (unsigned c = 0; c < op[0]->type->components(); c++) |
| 1270 data.f[c] = tanhf(op[0]->value.f[c]); |
| 1271 ! } else if (safe_strcmp(callee, "transpose") == 0) { |
| 1272 assert(op[0]->type->is_matrix()); |
| 1273 const unsigned n = op[0]->type->vector_elements; |
| 1274 const unsigned m = op[0]->type->matrix_columns; |
| 1275 diff -c -r Mesa-7.9/src/glsl/ir_dead_functions.cpp MesaLib/src/glsl/ir_dead_func
tions.cpp |
| 1276 *** Mesa-7.9/src/glsl/ir_dead_functions.cpp Fri Oct 1 15:51:28 2010 |
| 1277 --- MesaLib/src/glsl/ir_dead_functions.cpp Fri Oct 22 15:34:54 2010 |
| 1278 *************** |
| 1279 *** 31,36 **** |
| 1280 --- 31,37 ---- |
| 1281 #include "ir_visitor.h" |
| 1282 #include "ir_expression_flattening.h" |
| 1283 #include "glsl_types.h" |
| 1284 + #include "safe_strcmp.h" |
| 1285 |
| 1286 class signature_entry : public exec_node |
| 1287 { |
| 1288 *************** |
| 1289 *** 90,96 **** |
| 1290 { |
| 1291 signature_entry *entry = this->get_signature_entry(ir); |
| 1292 |
| 1293 ! if (strcmp(ir->function_name(), "main") == 0) { |
| 1294 entry->used = true; |
| 1295 } |
| 1296 |
| 1297 --- 91,97 ---- |
| 1298 { |
| 1299 signature_entry *entry = this->get_signature_entry(ir); |
| 1300 |
| 1301 ! if (safe_strcmp(ir->function_name(), "main") == 0) { |
| 1302 entry->used = true; |
| 1303 } |
| 1304 |
| 1305 diff -c -r Mesa-7.9/src/glsl/ir_function_inlining.cpp MesaLib/src/glsl/ir_functi
on_inlining.cpp |
| 1306 *** Mesa-7.9/src/glsl/ir_function_inlining.cpp Fri Oct 1 15:51:28 2010 |
| 1307 --- MesaLib/src/glsl/ir_function_inlining.cpp Fri Oct 22 15:35:58 2010 |
| 1308 *************** |
| 1309 *** 27,33 **** |
| 1310 * Replaces calls to functions with the body of the function. |
| 1311 */ |
| 1312 |
| 1313 ! #include <inttypes.h> |
| 1314 #include "ir.h" |
| 1315 #include "ir_visitor.h" |
| 1316 #include "ir_function_inlining.h" |
| 1317 --- 27,34 ---- |
| 1318 * Replaces calls to functions with the body of the function. |
| 1319 */ |
| 1320 |
| 1321 ! /* The use of inttypes.h seems to be unnecessary and causes problems on Window
s. */ |
| 1322 ! /* #include <inttypes.h> */ |
| 1323 #include "ir.h" |
| 1324 #include "ir_visitor.h" |
| 1325 #include "ir_function_inlining.h" |
| 1326 diff -c -r Mesa-7.9/src/glsl/ir_lower_jumps.cpp MesaLib/src/glsl/ir_lower_jumps.
cpp |
| 1327 *** Mesa-7.9/src/glsl/ir_lower_jumps.cpp Fri Oct 1 15:51:28 2010 |
| 1328 --- MesaLib/src/glsl/ir_lower_jumps.cpp Fri Oct 22 15:36:16 2010 |
| 1329 *************** |
| 1330 *** 28,33 **** |
| 1331 --- 28,34 ---- |
| 1332 #include "glsl_types.h" |
| 1333 #include <string.h> |
| 1334 #include "ir.h" |
| 1335 + #include "safe_strcmp.h" |
| 1336 |
| 1337 enum jump_strength |
| 1338 { |
| 1339 *************** |
| 1340 *** 125,131 **** |
| 1341 this->return_flag = 0; |
| 1342 this->return_value = 0; |
| 1343 this->nesting_depth = 0; |
| 1344 ! this->is_main = this->signature && (strcmp(this->signature->function_nam
e(), "main") == 0); |
| 1345 } |
| 1346 |
| 1347 ir_variable* get_return_flag() |
| 1348 --- 126,132 ---- |
| 1349 this->return_flag = 0; |
| 1350 this->return_value = 0; |
| 1351 this->nesting_depth = 0; |
| 1352 ! this->is_main = this->signature && (safe_strcmp(this->signature->functio
n_name(), "main") == 0); |
| 1353 } |
| 1354 |
| 1355 ir_variable* get_return_flag() |
| 1356 diff -c -r Mesa-7.9/src/glsl/ir_reader.cpp MesaLib/src/glsl/ir_reader.cpp |
| 1357 *** Mesa-7.9/src/glsl/ir_reader.cpp Fri Oct 1 15:51:28 2010 |
| 1358 --- MesaLib/src/glsl/ir_reader.cpp Fri Oct 22 15:36:27 2010 |
| 1359 *************** |
| 1360 *** 31,36 **** |
| 1361 --- 31,37 ---- |
| 1362 #include "glsl_parser_extras.h" |
| 1363 #include "glsl_types.h" |
| 1364 #include "s_expression.h" |
| 1365 + #include "safe_strcmp.h" |
| 1366 |
| 1367 const static bool debug = false; |
| 1368 |
| 1369 *************** |
| 1370 *** 128,134 **** |
| 1371 ir_read_error(st, expr, "expected type (array ...) or (struct ...)"); |
| 1372 return NULL; |
| 1373 } |
| 1374 ! if (strcmp(type_sym->value(), "array") == 0) { |
| 1375 if (list->length() != 3) { |
| 1376 ir_read_error(st, expr, "expected type (array <type> <int>)"); |
| 1377 return NULL; |
| 1378 --- 129,135 ---- |
| 1379 ir_read_error(st, expr, "expected type (array ...) or (struct ...)"); |
| 1380 return NULL; |
| 1381 } |
| 1382 ! if (safe_strcmp(type_sym->value(), "array") == 0) { |
| 1383 if (list->length() != 3) { |
| 1384 ir_read_error(st, expr, "expected type (array <type> <int>)"); |
| 1385 return NULL; |
| 1386 *************** |
| 1387 *** 150,156 **** |
| 1388 } |
| 1389 |
| 1390 return glsl_type::get_array_instance(base_type, size->value()); |
| 1391 ! } else if (strcmp(type_sym->value(), "struct") == 0) { |
| 1392 assert(false); // FINISHME |
| 1393 } else { |
| 1394 ir_read_error(st, expr, "expected (array ...) or (struct ...); " |
| 1395 --- 151,157 ---- |
| 1396 } |
| 1397 |
| 1398 return glsl_type::get_array_instance(base_type, size->value()); |
| 1399 ! } else if (safe_strcmp(type_sym->value(), "struct") == 0) { |
| 1400 assert(false); // FINISHME |
| 1401 } else { |
| 1402 ir_read_error(st, expr, "expected (array ...) or (struct ...); " |
| 1403 *************** |
| 1404 *** 189,195 **** |
| 1405 continue; // not a (function ...); ignore it. |
| 1406 |
| 1407 s_symbol *tag = SX_AS_SYMBOL(sub->subexpressions.get_head()); |
| 1408 ! if (tag == NULL || strcmp(tag->value(), "function") != 0) |
| 1409 continue; // not a (function ...); ignore it. |
| 1410 |
| 1411 ir_function *f = read_function(st, sub, true); |
| 1412 --- 190,196 ---- |
| 1413 continue; // not a (function ...); ignore it. |
| 1414 |
| 1415 s_symbol *tag = SX_AS_SYMBOL(sub->subexpressions.get_head()); |
| 1416 ! if (tag == NULL || safe_strcmp(tag->value(), "function") != 0) |
| 1417 continue; // not a (function ...); ignore it. |
| 1418 |
| 1419 ir_function *f = read_function(st, sub, true); |
| 1420 *************** |
| 1421 *** 233,239 **** |
| 1422 } |
| 1423 |
| 1424 s_symbol *tag = SX_AS_SYMBOL(siglist->subexpressions.get_head()); |
| 1425 ! if (tag == NULL || strcmp(tag->value(), "signature") != 0) { |
| 1426 ir_read_error(st, siglist, "Expected (signature ...)"); |
| 1427 return NULL; |
| 1428 } |
| 1429 --- 234,240 ---- |
| 1430 } |
| 1431 |
| 1432 s_symbol *tag = SX_AS_SYMBOL(siglist->subexpressions.get_head()); |
| 1433 ! if (tag == NULL || safe_strcmp(tag->value(), "signature") != 0) { |
| 1434 ir_read_error(st, siglist, "Expected (signature ...)"); |
| 1435 return NULL; |
| 1436 } |
| 1437 *************** |
| 1438 *** 267,273 **** |
| 1439 return; |
| 1440 } |
| 1441 s_symbol *paramtag = SX_AS_SYMBOL(paramlist->subexpressions.get_head()); |
| 1442 ! if (paramtag == NULL || strcmp(paramtag->value(), "parameters") != 0) { |
| 1443 ir_read_error(st, paramlist, "Expected (parameters ...)"); |
| 1444 return; |
| 1445 } |
| 1446 --- 268,274 ---- |
| 1447 return; |
| 1448 } |
| 1449 s_symbol *paramtag = SX_AS_SYMBOL(paramlist->subexpressions.get_head()); |
| 1450 ! if (paramtag == NULL || safe_strcmp(paramtag->value(), "parameters") != 0)
{ |
| 1451 ir_read_error(st, paramlist, "Expected (parameters ...)"); |
| 1452 return; |
| 1453 } |
| 1454 *************** |
| 1455 *** 364,372 **** |
| 1456 void *ctx = st; |
| 1457 s_symbol *symbol = SX_AS_SYMBOL(expr); |
| 1458 if (symbol != NULL) { |
| 1459 ! if (strcmp(symbol->value(), "break") == 0 && loop_ctx != NULL) |
| 1460 return new(ctx) ir_loop_jump(ir_loop_jump::jump_break); |
| 1461 ! if (strcmp(symbol->value(), "continue") == 0 && loop_ctx != NULL) |
| 1462 return new(ctx) ir_loop_jump(ir_loop_jump::jump_continue); |
| 1463 } |
| 1464 |
| 1465 --- 365,373 ---- |
| 1466 void *ctx = st; |
| 1467 s_symbol *symbol = SX_AS_SYMBOL(expr); |
| 1468 if (symbol != NULL) { |
| 1469 ! if (safe_strcmp(symbol->value(), "break") == 0 && loop_ctx != NULL) |
| 1470 return new(ctx) ir_loop_jump(ir_loop_jump::jump_break); |
| 1471 ! if (safe_strcmp(symbol->value(), "continue") == 0 && loop_ctx != NULL) |
| 1472 return new(ctx) ir_loop_jump(ir_loop_jump::jump_continue); |
| 1473 } |
| 1474 |
| 1475 *************** |
| 1476 *** 383,399 **** |
| 1477 } |
| 1478 |
| 1479 ir_instruction *inst = NULL; |
| 1480 ! if (strcmp(tag->value(), "declare") == 0) { |
| 1481 inst = read_declaration(st, list); |
| 1482 ! } else if (strcmp(tag->value(), "assign") == 0) { |
| 1483 inst = read_assignment(st, list); |
| 1484 ! } else if (strcmp(tag->value(), "if") == 0) { |
| 1485 inst = read_if(st, list, loop_ctx); |
| 1486 ! } else if (strcmp(tag->value(), "loop") == 0) { |
| 1487 inst = read_loop(st, list); |
| 1488 ! } else if (strcmp(tag->value(), "return") == 0) { |
| 1489 inst = read_return(st, list); |
| 1490 ! } else if (strcmp(tag->value(), "function") == 0) { |
| 1491 inst = read_function(st, list, false); |
| 1492 } else { |
| 1493 inst = read_rvalue(st, list); |
| 1494 --- 384,400 ---- |
| 1495 } |
| 1496 |
| 1497 ir_instruction *inst = NULL; |
| 1498 ! if (safe_strcmp(tag->value(), "declare") == 0) { |
| 1499 inst = read_declaration(st, list); |
| 1500 ! } else if (safe_strcmp(tag->value(), "assign") == 0) { |
| 1501 inst = read_assignment(st, list); |
| 1502 ! } else if (safe_strcmp(tag->value(), "if") == 0) { |
| 1503 inst = read_if(st, list, loop_ctx); |
| 1504 ! } else if (safe_strcmp(tag->value(), "loop") == 0) { |
| 1505 inst = read_loop(st, list); |
| 1506 ! } else if (safe_strcmp(tag->value(), "return") == 0) { |
| 1507 inst = read_return(st, list); |
| 1508 ! } else if (safe_strcmp(tag->value(), "function") == 0) { |
| 1509 inst = read_function(st, list, false); |
| 1510 } else { |
| 1511 inst = read_rvalue(st, list); |
| 1512 *************** |
| 1513 *** 443,467 **** |
| 1514 } |
| 1515 |
| 1516 // FINISHME: Check for duplicate/conflicting qualifiers. |
| 1517 ! if (strcmp(qualifier->value(), "centroid") == 0) { |
| 1518 var->centroid = 1; |
| 1519 ! } else if (strcmp(qualifier->value(), "invariant") == 0) { |
| 1520 var->invariant = 1; |
| 1521 ! } else if (strcmp(qualifier->value(), "uniform") == 0) { |
| 1522 var->mode = ir_var_uniform; |
| 1523 ! } else if (strcmp(qualifier->value(), "auto") == 0) { |
| 1524 var->mode = ir_var_auto; |
| 1525 ! } else if (strcmp(qualifier->value(), "in") == 0) { |
| 1526 var->mode = ir_var_in; |
| 1527 ! } else if (strcmp(qualifier->value(), "out") == 0) { |
| 1528 var->mode = ir_var_out; |
| 1529 ! } else if (strcmp(qualifier->value(), "inout") == 0) { |
| 1530 var->mode = ir_var_inout; |
| 1531 ! } else if (strcmp(qualifier->value(), "smooth") == 0) { |
| 1532 var->interpolation = ir_var_smooth; |
| 1533 ! } else if (strcmp(qualifier->value(), "flat") == 0) { |
| 1534 var->interpolation = ir_var_flat; |
| 1535 ! } else if (strcmp(qualifier->value(), "noperspective") == 0) { |
| 1536 var->interpolation = ir_var_noperspective; |
| 1537 } else { |
| 1538 ir_read_error(st, list, "unknown qualifier: %s", qualifier->value()); |
| 1539 --- 444,468 ---- |
| 1540 } |
| 1541 |
| 1542 // FINISHME: Check for duplicate/conflicting qualifiers. |
| 1543 ! if (safe_strcmp(qualifier->value(), "centroid") == 0) { |
| 1544 var->centroid = 1; |
| 1545 ! } else if (safe_strcmp(qualifier->value(), "invariant") == 0) { |
| 1546 var->invariant = 1; |
| 1547 ! } else if (safe_strcmp(qualifier->value(), "uniform") == 0) { |
| 1548 var->mode = ir_var_uniform; |
| 1549 ! } else if (safe_strcmp(qualifier->value(), "auto") == 0) { |
| 1550 var->mode = ir_var_auto; |
| 1551 ! } else if (safe_strcmp(qualifier->value(), "in") == 0) { |
| 1552 var->mode = ir_var_in; |
| 1553 ! } else if (safe_strcmp(qualifier->value(), "out") == 0) { |
| 1554 var->mode = ir_var_out; |
| 1555 ! } else if (safe_strcmp(qualifier->value(), "inout") == 0) { |
| 1556 var->mode = ir_var_inout; |
| 1557 ! } else if (safe_strcmp(qualifier->value(), "smooth") == 0) { |
| 1558 var->interpolation = ir_var_smooth; |
| 1559 ! } else if (safe_strcmp(qualifier->value(), "flat") == 0) { |
| 1560 var->interpolation = ir_var_flat; |
| 1561 ! } else if (safe_strcmp(qualifier->value(), "noperspective") == 0) { |
| 1562 var->interpolation = ir_var_noperspective; |
| 1563 } else { |
| 1564 ir_read_error(st, list, "unknown qualifier: %s", qualifier->value()); |
| 1565 *************** |
| 1566 *** 574,586 **** |
| 1567 ir_rvalue *rvalue = read_dereference(st, list); |
| 1568 if (rvalue != NULL || st->error) |
| 1569 return rvalue; |
| 1570 ! else if (strcmp(tag->value(), "swiz") == 0) { |
| 1571 rvalue = read_swizzle(st, list); |
| 1572 ! } else if (strcmp(tag->value(), "expression") == 0) { |
| 1573 rvalue = read_expression(st, list); |
| 1574 ! } else if (strcmp(tag->value(), "call") == 0) { |
| 1575 rvalue = read_call(st, list); |
| 1576 ! } else if (strcmp(tag->value(), "constant") == 0) { |
| 1577 rvalue = read_constant(st, list); |
| 1578 } else { |
| 1579 rvalue = read_texture(st, list); |
| 1580 --- 575,587 ---- |
| 1581 ir_rvalue *rvalue = read_dereference(st, list); |
| 1582 if (rvalue != NULL || st->error) |
| 1583 return rvalue; |
| 1584 ! else if (safe_strcmp(tag->value(), "swiz") == 0) { |
| 1585 rvalue = read_swizzle(st, list); |
| 1586 ! } else if (safe_strcmp(tag->value(), "expression") == 0) { |
| 1587 rvalue = read_expression(st, list); |
| 1588 ! } else if (safe_strcmp(tag->value(), "call") == 0) { |
| 1589 rvalue = read_call(st, list); |
| 1590 ! } else if (safe_strcmp(tag->value(), "constant") == 0) { |
| 1591 rvalue = read_constant(st, list); |
| 1592 } else { |
| 1593 rvalue = read_texture(st, list); |
| 1594 *************** |
| 1595 *** 921,931 **** |
| 1596 s_symbol *tag = SX_AS_SYMBOL(list->subexpressions.head); |
| 1597 assert(tag != NULL); |
| 1598 |
| 1599 ! if (strcmp(tag->value(), "var_ref") == 0) |
| 1600 return read_var_ref(st, list); |
| 1601 ! if (strcmp(tag->value(), "array_ref") == 0) |
| 1602 return read_array_ref(st, list); |
| 1603 ! if (strcmp(tag->value(), "record_ref") == 0) |
| 1604 return read_record_ref(st, list); |
| 1605 return NULL; |
| 1606 } |
| 1607 --- 922,932 ---- |
| 1608 s_symbol *tag = SX_AS_SYMBOL(list->subexpressions.head); |
| 1609 assert(tag != NULL); |
| 1610 |
| 1611 ! if (safe_strcmp(tag->value(), "var_ref") == 0) |
| 1612 return read_var_ref(st, list); |
| 1613 ! if (safe_strcmp(tag->value(), "array_ref") == 0) |
| 1614 return read_array_ref(st, list); |
| 1615 ! if (safe_strcmp(tag->value(), "record_ref") == 0) |
| 1616 return read_record_ref(st, list); |
| 1617 return NULL; |
| 1618 } |
| 1619 diff -c -r Mesa-7.9/src/glsl/ir_structure_splitting.cpp MesaLib/src/glsl/ir_stru
cture_splitting.cpp |
| 1620 *** Mesa-7.9/src/glsl/ir_structure_splitting.cpp Fri Oct 1 15:51:28 2010 |
| 1621 --- MesaLib/src/glsl/ir_structure_splitting.cpp Fri Oct 22 15:36:52 2010 |
| 1622 *************** |
| 1623 *** 37,42 **** |
| 1624 --- 37,43 ---- |
| 1625 #include "ir_print_visitor.h" |
| 1626 #include "ir_rvalue_visitor.h" |
| 1627 #include "glsl_types.h" |
| 1628 + #include "safe_strcmp.h" |
| 1629 |
| 1630 static bool debug = false; |
| 1631 |
| 1632 *************** |
| 1633 *** 228,235 **** |
| 1634 |
| 1635 unsigned int i; |
| 1636 for (i = 0; i < entry->var->type->length; i++) { |
| 1637 ! if (strcmp(deref_record->field, |
| 1638 ! entry->var->type->fields.structure[i].name) == 0) |
| 1639 break; |
| 1640 } |
| 1641 assert(i != entry->var->type->length); |
| 1642 --- 229,236 ---- |
| 1643 |
| 1644 unsigned int i; |
| 1645 for (i = 0; i < entry->var->type->length; i++) { |
| 1646 ! if (safe_strcmp(deref_record->field, |
| 1647 ! entry->var->type->fields.structure[i].name) == 0) |
| 1648 break; |
| 1649 } |
| 1650 assert(i != entry->var->type->length); |
| 1651 diff -c -r Mesa-7.9/src/glsl/ir_validate.cpp MesaLib/src/glsl/ir_validate.cpp |
| 1652 *** Mesa-7.9/src/glsl/ir_validate.cpp Mon Oct 4 18:58:00 2010 |
| 1653 --- MesaLib/src/glsl/ir_validate.cpp Fri Oct 22 15:37:24 2010 |
| 1654 *************** |
| 1655 *** 33,39 **** |
| 1656 * a dereference chain. |
| 1657 */ |
| 1658 |
| 1659 ! #include <inttypes.h> |
| 1660 #include "ir.h" |
| 1661 #include "ir_hierarchical_visitor.h" |
| 1662 #include "program/hash_table.h" |
| 1663 --- 33,40 ---- |
| 1664 * a dereference chain. |
| 1665 */ |
| 1666 |
| 1667 ! /* The use of inttypes.h seems to be unnecessary and causes problems on Window
s. */ |
| 1668 ! /* #include <inttypes.h> */ |
| 1669 #include "ir.h" |
| 1670 #include "ir_hierarchical_visitor.h" |
| 1671 #include "program/hash_table.h" |
| 1672 diff -c -r Mesa-7.9/src/glsl/linker.cpp MesaLib/src/glsl/linker.cpp |
| 1673 *** Mesa-7.9/src/glsl/linker.cpp Fri Oct 1 15:51:28 2010 |
| 1674 --- MesaLib/src/glsl/linker.cpp Fri Oct 22 15:38:08 2010 |
| 1675 *************** |
| 1676 *** 79,84 **** |
| 1677 --- 79,85 ---- |
| 1678 #include "program/hash_table.h" |
| 1679 #include "linker.h" |
| 1680 #include "ir_optimization.h" |
| 1681 + #include "safe_strcmp.h" |
| 1682 |
| 1683 /** |
| 1684 * Visitor that determines whether or not a variable is ever written. |
| 1685 *************** |
| 1686 *** 95,101 **** |
| 1687 { |
| 1688 ir_variable *const var = ir->lhs->variable_referenced(); |
| 1689 |
| 1690 ! if (strcmp(name, var->name) == 0) { |
| 1691 found = true; |
| 1692 return visit_stop; |
| 1693 } |
| 1694 --- 96,102 ---- |
| 1695 { |
| 1696 ir_variable *const var = ir->lhs->variable_referenced(); |
| 1697 |
| 1698 ! if (safe_strcmp(name, var->name) == 0) { |
| 1699 found = true; |
| 1700 return visit_stop; |
| 1701 } |
| 1702 *************** |
| 1703 *** 113,119 **** |
| 1704 if (sig_param->mode == ir_var_out || |
| 1705 sig_param->mode == ir_var_inout) { |
| 1706 ir_variable *var = param_rval->variable_referenced(); |
| 1707 ! if (var && strcmp(name, var->name) == 0) { |
| 1708 found = true; |
| 1709 return visit_stop; |
| 1710 } |
| 1711 --- 114,120 ---- |
| 1712 if (sig_param->mode == ir_var_out || |
| 1713 sig_param->mode == ir_var_inout) { |
| 1714 ir_variable *var = param_rval->variable_referenced(); |
| 1715 ! if (var && safe_strcmp(name, var->name) == 0) { |
| 1716 found = true; |
| 1717 return visit_stop; |
| 1718 } |
| 1719 *************** |
| 1720 *** 148,154 **** |
| 1721 |
| 1722 virtual ir_visitor_status visit(ir_dereference_variable *ir) |
| 1723 { |
| 1724 ! if (strcmp(this->name, ir->var->name) == 0) { |
| 1725 this->found = true; |
| 1726 return visit_stop; |
| 1727 } |
| 1728 --- 149,155 ---- |
| 1729 |
| 1730 virtual ir_visitor_status visit(ir_dereference_variable *ir) |
| 1731 { |
| 1732 ! if (safe_strcmp(this->name, ir->var->name) == 0) { |
| 1733 this->found = true; |
| 1734 return visit_stop; |
| 1735 } |
| 1736 *************** |
| 1737 *** 876,882 **** |
| 1738 if (!other_var) |
| 1739 continue; |
| 1740 |
| 1741 ! if (strcmp(var->name, other_var->name) == 0 && |
| 1742 other_var->max_array_access > size) { |
| 1743 size = other_var->max_array_access; |
| 1744 } |
| 1745 --- 877,883 ---- |
| 1746 if (!other_var) |
| 1747 continue; |
| 1748 |
| 1749 ! if (safe_strcmp(var->name, other_var->name) == 0 && |
| 1750 other_var->max_array_access > size) { |
| 1751 size = other_var->max_array_access; |
| 1752 } |
| 1753 Only in MesaLib/src/glsl: safe_strcmp.c |
| 1754 Only in MesaLib/src/glsl: safe_strcmp.h |
| 1755 diff -c -r Mesa-7.9/src/mapi/glapi/glapi_nop.c MesaLib/src/mapi/glapi/glapi_nop.
c |
| 1756 *** Mesa-7.9/src/mapi/glapi/glapi_nop.c Fri Oct 1 15:51:28 2010 |
| 1757 --- MesaLib/src/mapi/glapi/glapi_nop.c Fri Oct 22 15:41:35 2010 |
| 1758 *************** |
| 1759 *** 107,113 **** |
| 1760 return 0; |
| 1761 } |
| 1762 |
| 1763 ! #define TABLE_ENTRY(name) (_glapi_proc) NoOpGeneric |
| 1764 |
| 1765 #endif |
| 1766 |
| 1767 --- 107,138 ---- |
| 1768 return 0; |
| 1769 } |
| 1770 |
| 1771 ! /** |
| 1772 ! * This is called if the user somehow calls an unassigned GL dispatch function
. |
| 1773 ! */ |
| 1774 ! static GLint |
| 1775 ! NoOpUnused(void) |
| 1776 ! { |
| 1777 ! return NoOpGeneric(); |
| 1778 ! } |
| 1779 ! |
| 1780 ! /* |
| 1781 ! * It is necessary to generate custom no-op entry points at least on |
| 1782 ! * Windows, where the __stdcall calling convention is used (callee |
| 1783 ! * cleans the stack). This calling convention can not tolerate a |
| 1784 ! * mismatch between the numbers of arguments in caller and callee. |
| 1785 ! */ |
| 1786 ! #define KEYWORD1 static |
| 1787 ! #define KEYWORD1_ALT static |
| 1788 ! #define KEYWORD2 GLAPIENTRY |
| 1789 ! #define NAME(func) NoOp##func |
| 1790 ! #define DISPATCH(func, args, msg) NoOpGeneric(); |
| 1791 ! #define RETURN_DISPATCH(func, args, msg) return NoOpGeneric(); |
| 1792 ! |
| 1793 ! /* |
| 1794 ! * Defines for the table of no-op entry points. |
| 1795 ! */ |
| 1796 ! #define TABLE_ENTRY(name) (_glapi_proc) NoOp##name |
| 1797 |
| 1798 #endif |
| 1799 |
| 1800 diff -c -r Mesa-7.9/src/mesa/main/compiler.h MesaLib/src/mesa/main/compiler.h |
| 1801 *** Mesa-7.9/src/mesa/main/compiler.h Fri Oct 1 15:51:28 2010 |
| 1802 --- MesaLib/src/mesa/main/compiler.h Fri Oct 22 15:44:23 2010 |
| 1803 *************** |
| 1804 *** 175,181 **** |
| 1805 --- 175,183 ---- |
| 1806 # define PUBLIC __attribute__((visibility("default"))) |
| 1807 # define USED __attribute__((used)) |
| 1808 #else |
| 1809 + # ifndef PUBLIC |
| 1810 # define PUBLIC |
| 1811 + # endif |
| 1812 # define USED |
| 1813 #endif |
| 1814 |
| 1815 diff -c -r Mesa-7.9/src/mesa/main/querymatrix.c MesaLib/src/mesa/main/querymatri
x.c |
| 1816 *** Mesa-7.9/src/mesa/main/querymatrix.c Mon Oct 4 18:58:00 2010 |
| 1817 --- MesaLib/src/mesa/main/querymatrix.c Wed Oct 6 16:36:08 2010 |
| 1818 *************** |
| 1819 *** 73,79 **** |
| 1820 #elif defined(__APPLE__) || defined(__CYGWIN__) || defined(__FreeBSD__) || \ |
| 1821 defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__) ||
\ |
| 1822 (defined(__sun) && defined(__C99FEATURES__)) || defined(__MINGW32__) || \ |
| 1823 ! (defined(__sun) && defined(__GNUC__)) |
| 1824 |
| 1825 /* fpclassify is available. */ |
| 1826 |
| 1827 --- 73,80 ---- |
| 1828 #elif defined(__APPLE__) || defined(__CYGWIN__) || defined(__FreeBSD__) || \ |
| 1829 defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__) ||
\ |
| 1830 (defined(__sun) && defined(__C99FEATURES__)) || defined(__MINGW32__) || \ |
| 1831 ! (defined(__sun) && defined(__GNUC__)) || \ |
| 1832 ! (defined(__linux) && defined(__GNUC__)) |
| 1833 |
| 1834 /* fpclassify is available. */ |
| 1835 |
OLD | NEW |