From bd96b51303512bef301c4cee5c7a65ebb3371913 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Mon, 4 Jan 2010 14:31:08 -0700 Subject: mesa: bump version to 7.7.1-DEVEL --- src/mesa/main/version.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/mesa/main/version.h b/src/mesa/main/version.h index 9c758ce3b9..1c5749fbca 100644 --- a/src/mesa/main/version.h +++ b/src/mesa/main/version.h @@ -1,9 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 7.7 + * Version: 7.7.1 * * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. - * Copyright (C) 2009 VMware, Inc. All Rights Reserved. + * Copyright (C) 2009-2010 VMware, Inc. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -31,8 +31,8 @@ /* Mesa version */ #define MESA_MAJOR 7 #define MESA_MINOR 7 -#define MESA_PATCH 0 -#define MESA_VERSION_STRING "7.7" +#define MESA_PATCH 1 +#define MESA_VERSION_STRING "7.7.1-DEVEL" /* To make version comparison easy */ #define MESA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) -- cgit v1.2.3 From ef1b9426918a29b7ddd28601b0e53ed683abb89a Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Tue, 5 Jan 2010 09:14:48 -0700 Subject: st/mesa: added PROGRAM_LOCAL_PARAM case in src_register() Fixes piglit vpfp-generic arl.vpfp failure when using gallium. --- src/mesa/state_tracker/st_mesa_to_tgsi.c | 1 + 1 file changed, 1 insertion(+) (limited to 'src') diff --git a/src/mesa/state_tracker/st_mesa_to_tgsi.c b/src/mesa/state_tracker/st_mesa_to_tgsi.c index bd94c9d79e..a805251c46 100644 --- a/src/mesa/state_tracker/st_mesa_to_tgsi.c +++ b/src/mesa/state_tracker/st_mesa_to_tgsi.c @@ -174,6 +174,7 @@ src_register( struct st_translate *t, case PROGRAM_STATE_VAR: case PROGRAM_NAMED_PARAM: case PROGRAM_ENV_PARAM: + case PROGRAM_LOCAL_PARAM: case PROGRAM_UNIFORM: case PROGRAM_CONSTANT: /* ie, immediate */ return t->constants[index]; -- cgit v1.2.3 From 8ebef37c7ba67c4449367b95821293176a0a370b Mon Sep 17 00:00:00 2001 From: José Fonseca Date: Tue, 5 Jan 2010 17:32:19 +0000 Subject: svga: Rebind shaders when tokens change. Even shader ID doesn't change. Otherwise the token change is not effective. This reverts regression from commit cdb445f3a9285e2d8f042a07021ade78b94e0156. Regression could be seen in Quake3's loading screen -- the upper right corner of the screen would be black. --- src/gallium/drivers/svga/svga_context.h | 2 -- src/gallium/drivers/svga/svga_state_fs.c | 13 +++++-------- src/gallium/drivers/svga/svga_state_vs.c | 13 +++++-------- 3 files changed, 10 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/gallium/drivers/svga/svga_context.h b/src/gallium/drivers/svga/svga_context.h index eb666c2616..32e9304f81 100644 --- a/src/gallium/drivers/svga/svga_context.h +++ b/src/gallium/drivers/svga/svga_context.h @@ -268,8 +268,6 @@ struct svga_hw_draw_state unsigned ts[16][TS_MAX]; float cb[PIPE_SHADER_TYPES][CB_MAX][4]; - unsigned shader_id[PIPE_SHADER_TYPES]; - struct svga_shader_result *fs; struct svga_shader_result *vs; struct svga_hw_view_state views[PIPE_MAX_SAMPLERS]; diff --git a/src/gallium/drivers/svga/svga_state_fs.c b/src/gallium/drivers/svga/svga_state_fs.c index 1902b0106b..272d1dd14e 100644 --- a/src/gallium/drivers/svga/svga_state_fs.c +++ b/src/gallium/drivers/svga/svga_state_fs.c @@ -268,16 +268,13 @@ static int emit_hw_fs( struct svga_context *svga, assert(id != SVGA3D_INVALID_ID); if (result != svga->state.hw_draw.fs) { - if (id != svga->state.hw_draw.shader_id[PIPE_SHADER_FRAGMENT]) { - ret = SVGA3D_SetShader(svga->swc, - SVGA3D_SHADERTYPE_PS, - id ); - if (ret) - return ret; - } + ret = SVGA3D_SetShader(svga->swc, + SVGA3D_SHADERTYPE_PS, + id ); + if (ret) + return ret; svga->dirty |= SVGA_NEW_FS_RESULT; - svga->state.hw_draw.shader_id[PIPE_SHADER_FRAGMENT] = id; svga->state.hw_draw.fs = result; } diff --git a/src/gallium/drivers/svga/svga_state_vs.c b/src/gallium/drivers/svga/svga_state_vs.c index 6cf51434d7..db30f2735f 100644 --- a/src/gallium/drivers/svga/svga_state_vs.c +++ b/src/gallium/drivers/svga/svga_state_vs.c @@ -149,16 +149,13 @@ static int emit_hw_vs( struct svga_context *svga, } if (result != svga->state.hw_draw.vs) { - if (id != svga->state.hw_draw.shader_id[PIPE_SHADER_VERTEX]) { - ret = SVGA3D_SetShader(svga->swc, - SVGA3D_SHADERTYPE_VS, - id ); - if (ret) - return ret; - } + ret = SVGA3D_SetShader(svga->swc, + SVGA3D_SHADERTYPE_VS, + id ); + if (ret) + return ret; svga->dirty |= SVGA_NEW_VS_RESULT; - svga->state.hw_draw.shader_id[PIPE_SHADER_VERTEX] = id; svga->state.hw_draw.vs = result; } -- cgit v1.2.3 From 38d8b180038eef692cbc75731d340c9fcc721784 Mon Sep 17 00:00:00 2001 From: José Fonseca Date: Tue, 5 Jan 2010 17:56:26 +0000 Subject: svga: Remove stale references to delete shader results. To ensure that a new result that happens to have the same address of the old one will be detected as a change. --- src/gallium/drivers/svga/svga_pipe_fs.c | 7 +++++++ src/gallium/drivers/svga/svga_pipe_vs.c | 7 +++++++ 2 files changed, 14 insertions(+) (limited to 'src') diff --git a/src/gallium/drivers/svga/svga_pipe_fs.c b/src/gallium/drivers/svga/svga_pipe_fs.c index a461a86dd3..5f1213e46a 100644 --- a/src/gallium/drivers/svga/svga_pipe_fs.c +++ b/src/gallium/drivers/svga/svga_pipe_fs.c @@ -111,6 +111,13 @@ void svga_delete_fs_state(struct pipe_context *pipe, void *shader) util_bitmask_clear( svga->fs_bm, result->id ); svga_destroy_shader_result( result ); + + /* + * Remove stale references to this result to ensure a new result on the + * same address will be detected as a change. + */ + if(result == svga->state.hw_draw.fs) + svga->state.hw_draw.fs = NULL; } FREE((void *)fs->base.tokens); diff --git a/src/gallium/drivers/svga/svga_pipe_vs.c b/src/gallium/drivers/svga/svga_pipe_vs.c index 02709e12bd..fd9864c51a 100644 --- a/src/gallium/drivers/svga/svga_pipe_vs.c +++ b/src/gallium/drivers/svga/svga_pipe_vs.c @@ -176,6 +176,13 @@ static void svga_delete_vs_state(struct pipe_context *pipe, void *shader) util_bitmask_clear( svga->vs_bm, result->id ); svga_destroy_shader_result( result ); + + /* + * Remove stale references to this result to ensure a new result on the + * same address will be detected as a change. + */ + if(result == svga->state.hw_draw.vs) + svga->state.hw_draw.vs = NULL; } FREE((void *)vs->base.tokens); -- cgit v1.2.3 From f27e39aa4ec267fd2074a73da14bf1b4d2f8fb13 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Tue, 5 Jan 2010 09:57:41 -0700 Subject: mesa: change constant search behaviour in _mesa_add_unnamed_constant() Only search for an existing, matching constant if swizzleOut is non-null. We need to be able to disable constant consolidation when building an array of constants which will be indexed indirectly. --- src/mesa/shader/prog_parameter.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/mesa/shader/prog_parameter.c b/src/mesa/shader/prog_parameter.c index f22492e029..5822510701 100644 --- a/src/mesa/shader/prog_parameter.c +++ b/src/mesa/shader/prog_parameter.c @@ -230,9 +230,8 @@ _mesa_add_named_constant(struct gl_program_parameter_list *paramList, * Add a new unnamed constant to the parameter list. This will be used * when a fragment/vertex program contains something like this: * MOV r, { 0, 1, 2, 3 }; - * We'll search the parameter list for an existing instance of the - * constant. If swizzleOut is non-null, we'll try swizzling when - * looking for a match. + * If swizzleOut is non-null we'll search the parameter list for an + * existing instance of the constant which matches with a swizzle. * * \param paramList the parameter list * \param values four float values @@ -248,7 +247,8 @@ _mesa_add_unnamed_constant(struct gl_program_parameter_list *paramList, ASSERT(size >= 1); ASSERT(size <= 4); - if (_mesa_lookup_parameter_constant(paramList, values, + if (swizzleOut && + _mesa_lookup_parameter_constant(paramList, values, size, &pos, swizzleOut)) { return pos; } -- cgit v1.2.3 From 37f6929d29c9d3fbec873c0576a343d342ffdedf Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Tue, 5 Jan 2010 09:59:39 -0700 Subject: mesa: whitespace changes and comments --- src/mesa/shader/prog_parameter_layout.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/mesa/shader/prog_parameter_layout.c b/src/mesa/shader/prog_parameter_layout.c index 1c37b3a7a5..a888573832 100644 --- a/src/mesa/shader/prog_parameter_layout.c +++ b/src/mesa/shader/prog_parameter_layout.c @@ -72,14 +72,11 @@ copy_indirect_accessed_array(struct gl_program_parameter_list *src, unsigned first, unsigned count) { const int base = dst->NumParameters; - unsigned i; - unsigned j; - + unsigned i, j; for (i = first; i < (first + count); i++) { struct gl_program_parameter *curr = & src->Parameters[i]; - if (curr->Type == PROGRAM_CONSTANT) { j = dst->NumParameters; } else { @@ -93,10 +90,15 @@ copy_indirect_accessed_array(struct gl_program_parameter_list *src, assert(j == dst->NumParameters); + /* copy src parameter [i] to dest parameter [j] */ memcpy(& dst->Parameters[j], curr, sizeof(dst->Parameters[j])); memcpy(dst->ParameterValues[j], src->ParameterValues[i], sizeof(GLfloat) * 4); + + /* Pointer to the string name was copied. Null-out src param name + * to prevent double free later. + */ curr->Name = NULL; dst->NumParameters++; @@ -117,11 +119,9 @@ _mesa_layout_parameters(struct asm_parser_state *state) struct asm_instruction *inst; unsigned i; - layout = _mesa_new_parameter_list_sized(state->prog->Parameters->NumParameters); - /* PASS 1: Move any parameters that are accessed indirectly from the * original parameter list to the new parameter list. */ @@ -155,7 +155,6 @@ _mesa_layout_parameters(struct asm_parser_state *state) } } - /* PASS 2: Move any parameters that are not accessed indirectly from the * original parameter list to the new parameter list. */ @@ -165,7 +164,6 @@ _mesa_layout_parameters(struct asm_parser_state *state) const int idx = inst->SrcReg[i].Base.Index; unsigned swizzle = SWIZZLE_NOOP; - /* All relative addressed operands were processed on the first * pass. Just skip them here. */ @@ -173,7 +171,6 @@ _mesa_layout_parameters(struct asm_parser_state *state) continue; } - if ((inst->SrcReg[i].Base.File <= PROGRAM_VARYING ) || (inst->SrcReg[i].Base.File >= PROGRAM_WRITE_ONLY)) { continue; @@ -209,7 +206,6 @@ _mesa_layout_parameters(struct asm_parser_state *state) } } - _mesa_free_parameter_list(state->prog->Parameters); state->prog->Parameters = layout; -- cgit v1.2.3 From 7c6ae4c6c87edd02671a3857d1f774835b923e59 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Tue, 5 Jan 2010 10:01:20 -0700 Subject: ARB prog parser: add allowSwizzle param to initialize_symbol_from_const() We need to disable constant consolidation when building an array of constants which might be indexed indirectly. Fixes regression in piglit vpfp-generic vp-arl-constant-array.vpfp test caused by earlier constant consolidation patch. --- src/mesa/shader/program_parse.y | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/mesa/shader/program_parse.y b/src/mesa/shader/program_parse.y index b40b216d65..be8c841e3d 100644 --- a/src/mesa/shader/program_parse.y +++ b/src/mesa/shader/program_parse.y @@ -52,7 +52,8 @@ static int initialize_symbol_from_param(struct gl_program *prog, struct asm_symbol *param_var, const gl_state_index tokens[STATE_LENGTH]); static int initialize_symbol_from_const(struct gl_program *prog, - struct asm_symbol *param_var, const struct asm_vector *vec); + struct asm_symbol *param_var, const struct asm_vector *vec, + GLboolean allowSwizzle); static int yyparse(struct asm_parser_state *state); @@ -589,7 +590,7 @@ scalarUse: srcReg scalarSuffix memset(& temp_sym, 0, sizeof(temp_sym)); temp_sym.param_binding_begin = ~0; - initialize_symbol_from_const(state->prog, & temp_sym, & $1); + initialize_symbol_from_const(state->prog, & temp_sym, & $1, GL_TRUE); set_src_reg_swz(& $$, PROGRAM_CONSTANT, temp_sym.param_binding_begin, @@ -1300,7 +1301,7 @@ paramSingleItemDecl: stateSingleItem { memset(& $$, 0, sizeof($$)); $$.param_binding_begin = ~0; - initialize_symbol_from_const(state->prog, & $$, & $1); + initialize_symbol_from_const(state->prog, & $$, & $1, GL_TRUE); } ; @@ -1320,7 +1321,7 @@ paramSingleItemUse: stateSingleItem { memset(& $$, 0, sizeof($$)); $$.param_binding_begin = ~0; - initialize_symbol_from_const(state->prog, & $$, & $1); + initialize_symbol_from_const(state->prog, & $$, & $1, GL_TRUE); } ; @@ -1340,7 +1341,7 @@ paramMultipleItem: stateMultipleItem { memset(& $$, 0, sizeof($$)); $$.param_binding_begin = ~0; - initialize_symbol_from_const(state->prog, & $$, & $1); + initialize_symbol_from_const(state->prog, & $$, & $1, GL_FALSE); } ; @@ -2556,23 +2557,28 @@ initialize_symbol_from_param(struct gl_program *prog, * \param param_var returns info about the parameter/constant's location, * binding, type, etc. * \param vec the vector/constant to add + * \param allowSwizzle if true, try to consolidate constants which only differ + * by a swizzle. We don't want to do this when building + * arrays of constants that may be indexed indirectly. * \return index of the constant in the parameter list. */ int initialize_symbol_from_const(struct gl_program *prog, struct asm_symbol *param_var, - const struct asm_vector *vec) + const struct asm_vector *vec, + GLboolean allowSwizzle) { unsigned swizzle; const int idx = _mesa_add_unnamed_constant(prog->Parameters, - vec->data, vec->count, &swizzle); + vec->data, vec->count, + allowSwizzle ? &swizzle : NULL); param_var->type = at_param; param_var->param_binding_type = PROGRAM_CONSTANT; if (param_var->param_binding_begin == ~0U) { param_var->param_binding_begin = idx; - param_var->param_binding_swizzle = swizzle; + param_var->param_binding_swizzle = allowSwizzle ? swizzle : SWIZZLE_XYZW; } param_var->param_binding_length++; -- cgit v1.2.3 From e3514b73388c9df36941c370837a04d90ca44ddd Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Tue, 5 Jan 2010 10:03:16 -0700 Subject: ARB prog parser: regenerated parser files --- src/mesa/shader/program_parse.tab.c | 558 ++++++++++++++++++------------------ src/mesa/shader/program_parse.tab.h | 2 +- 2 files changed, 285 insertions(+), 275 deletions(-) (limited to 'src') diff --git a/src/mesa/shader/program_parse.tab.c b/src/mesa/shader/program_parse.tab.c index a1e69b8450..cc490bea6d 100644 --- a/src/mesa/shader/program_parse.tab.c +++ b/src/mesa/shader/program_parse.tab.c @@ -123,7 +123,8 @@ static int initialize_symbol_from_param(struct gl_program *prog, struct asm_symbol *param_var, const gl_state_index tokens[STATE_LENGTH]); static int initialize_symbol_from_const(struct gl_program *prog, - struct asm_symbol *param_var, const struct asm_vector *vec); + struct asm_symbol *param_var, const struct asm_vector *vec, + GLboolean allowSwizzle); static int yyparse(struct asm_parser_state *state); @@ -188,7 +189,7 @@ static struct asm_instruction *asm_instruction_copy_ctor( /* Line 189 of yacc.c */ -#line 192 "program_parse.tab.c" +#line 193 "program_parse.tab.c" /* Enabling traces. */ #ifndef YYDEBUG @@ -330,7 +331,7 @@ typedef union YYSTYPE { /* Line 214 of yacc.c */ -#line 125 "program_parse.y" +#line 126 "program_parse.y" struct asm_instruction *inst; struct asm_symbol *sym; @@ -359,7 +360,7 @@ typedef union YYSTYPE /* Line 214 of yacc.c */ -#line 363 "program_parse.tab.c" +#line 364 "program_parse.tab.c" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ @@ -383,14 +384,14 @@ typedef struct YYLTYPE /* Copy the second part of user declarations. */ /* Line 264 of yacc.c */ -#line 270 "program_parse.y" +#line 271 "program_parse.y" extern int yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param, void *yyscanner); /* Line 264 of yacc.c */ -#line 394 "program_parse.tab.c" +#line 395 "program_parse.tab.c" #ifdef short # undef short @@ -791,35 +792,35 @@ static const yytype_int16 yyrhs[] = /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 277, 277, 280, 288, 300, 301, 304, 328, 329, - 332, 347, 350, 355, 362, 363, 364, 365, 366, 367, - 368, 371, 372, 373, 376, 382, 388, 394, 401, 407, - 414, 458, 463, 473, 517, 523, 524, 525, 526, 527, - 528, 529, 530, 531, 532, 533, 534, 537, 549, 557, - 574, 581, 600, 611, 631, 656, 663, 696, 703, 718, - 773, 816, 825, 846, 856, 860, 889, 908, 908, 910, - 917, 929, 930, 931, 934, 948, 962, 982, 993, 1005, - 1007, 1008, 1009, 1010, 1013, 1013, 1013, 1013, 1014, 1017, - 1021, 1026, 1033, 1040, 1047, 1070, 1093, 1094, 1095, 1096, - 1097, 1098, 1101, 1120, 1124, 1130, 1134, 1138, 1142, 1151, - 1160, 1164, 1169, 1175, 1186, 1186, 1187, 1189, 1193, 1197, - 1201, 1207, 1207, 1209, 1227, 1253, 1256, 1267, 1273, 1279, - 1280, 1287, 1293, 1299, 1307, 1313, 1319, 1327, 1333, 1339, - 1347, 1348, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, - 1359, 1360, 1361, 1364, 1373, 1377, 1381, 1387, 1396, 1400, - 1404, 1413, 1417, 1423, 1429, 1436, 1441, 1449, 1459, 1461, - 1469, 1475, 1479, 1483, 1489, 1500, 1509, 1513, 1518, 1522, - 1526, 1530, 1536, 1543, 1547, 1553, 1561, 1572, 1579, 1583, - 1589, 1599, 1610, 1614, 1632, 1641, 1644, 1650, 1654, 1658, - 1664, 1675, 1680, 1685, 1690, 1695, 1700, 1708, 1711, 1716, - 1729, 1737, 1748, 1756, 1756, 1758, 1758, 1760, 1770, 1775, - 1782, 1792, 1801, 1806, 1813, 1823, 1833, 1845, 1845, 1846, - 1846, 1848, 1858, 1866, 1876, 1884, 1892, 1901, 1912, 1916, - 1922, 1923, 1924, 1927, 1927, 1930, 1965, 1969, 1969, 1972, - 1979, 1988, 2002, 2011, 2020, 2024, 2033, 2042, 2053, 2060, - 2065, 2074, 2086, 2089, 2098, 2109, 2110, 2111, 2114, 2115, - 2116, 2119, 2120, 2123, 2124, 2127, 2128, 2131, 2142, 2153, - 2164, 2190, 2191 + 0, 278, 278, 281, 289, 301, 302, 305, 329, 330, + 333, 348, 351, 356, 363, 364, 365, 366, 367, 368, + 369, 372, 373, 374, 377, 383, 389, 395, 402, 408, + 415, 459, 464, 474, 518, 524, 525, 526, 527, 528, + 529, 530, 531, 532, 533, 534, 535, 538, 550, 558, + 575, 582, 601, 612, 632, 657, 664, 697, 704, 719, + 774, 817, 826, 847, 857, 861, 890, 909, 909, 911, + 918, 930, 931, 932, 935, 949, 963, 983, 994, 1006, + 1008, 1009, 1010, 1011, 1014, 1014, 1014, 1014, 1015, 1018, + 1022, 1027, 1034, 1041, 1048, 1071, 1094, 1095, 1096, 1097, + 1098, 1099, 1102, 1121, 1125, 1131, 1135, 1139, 1143, 1152, + 1161, 1165, 1170, 1176, 1187, 1187, 1188, 1190, 1194, 1198, + 1202, 1208, 1208, 1210, 1228, 1254, 1257, 1268, 1274, 1280, + 1281, 1288, 1294, 1300, 1308, 1314, 1320, 1328, 1334, 1340, + 1348, 1349, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, + 1360, 1361, 1362, 1365, 1374, 1378, 1382, 1388, 1397, 1401, + 1405, 1414, 1418, 1424, 1430, 1437, 1442, 1450, 1460, 1462, + 1470, 1476, 1480, 1484, 1490, 1501, 1510, 1514, 1519, 1523, + 1527, 1531, 1537, 1544, 1548, 1554, 1562, 1573, 1580, 1584, + 1590, 1600, 1611, 1615, 1633, 1642, 1645, 1651, 1655, 1659, + 1665, 1676, 1681, 1686, 1691, 1696, 1701, 1709, 1712, 1717, + 1730, 1738, 1749, 1757, 1757, 1759, 1759, 1761, 1771, 1776, + 1783, 1793, 1802, 1807, 1814, 1824, 1834, 1846, 1846, 1847, + 1847, 1849, 1859, 1867, 1877, 1885, 1893, 1902, 1913, 1917, + 1923, 1924, 1925, 1928, 1928, 1931, 1966, 1970, 1970, 1973, + 1980, 1989, 2003, 2012, 2021, 2025, 2034, 2043, 2054, 2061, + 2066, 2075, 2087, 2090, 2099, 2110, 2111, 2112, 2115, 2116, + 2117, 2120, 2121, 2124, 2125, 2128, 2129, 2132, 2143, 2154, + 2165, 2191, 2192 }; #endif @@ -2128,7 +2129,7 @@ yyreduce: case 3: /* Line 1455 of yacc.c */ -#line 281 "program_parse.y" +#line 282 "program_parse.y" { if (state->prog->Target != GL_VERTEX_PROGRAM_ARB) { yyerror(& (yylsp[(1) - (1)]), state, "invalid fragment program header"); @@ -2141,7 +2142,7 @@ yyreduce: case 4: /* Line 1455 of yacc.c */ -#line 289 "program_parse.y" +#line 290 "program_parse.y" { if (state->prog->Target != GL_FRAGMENT_PROGRAM_ARB) { yyerror(& (yylsp[(1) - (1)]), state, "invalid vertex program header"); @@ -2156,7 +2157,7 @@ yyreduce: case 7: /* Line 1455 of yacc.c */ -#line 305 "program_parse.y" +#line 306 "program_parse.y" { int valid = 0; @@ -2183,7 +2184,7 @@ yyreduce: case 10: /* Line 1455 of yacc.c */ -#line 333 "program_parse.y" +#line 334 "program_parse.y" { if ((yyvsp[(1) - (2)].inst) != NULL) { if (state->inst_tail == NULL) { @@ -2203,7 +2204,7 @@ yyreduce: case 12: /* Line 1455 of yacc.c */ -#line 351 "program_parse.y" +#line 352 "program_parse.y" { (yyval.inst) = (yyvsp[(1) - (1)].inst); state->prog->NumAluInstructions++; @@ -2213,7 +2214,7 @@ yyreduce: case 13: /* Line 1455 of yacc.c */ -#line 356 "program_parse.y" +#line 357 "program_parse.y" { (yyval.inst) = (yyvsp[(1) - (1)].inst); state->prog->NumTexInstructions++; @@ -2223,7 +2224,7 @@ yyreduce: case 24: /* Line 1455 of yacc.c */ -#line 377 "program_parse.y" +#line 378 "program_parse.y" { (yyval.inst) = asm_instruction_ctor(OPCODE_ARL, & (yyvsp[(2) - (4)].dst_reg), & (yyvsp[(4) - (4)].src_reg), NULL, NULL); ;} @@ -2232,7 +2233,7 @@ yyreduce: case 25: /* Line 1455 of yacc.c */ -#line 383 "program_parse.y" +#line 384 "program_parse.y" { (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (4)].temp_inst), & (yyvsp[(2) - (4)].dst_reg), & (yyvsp[(4) - (4)].src_reg), NULL, NULL); ;} @@ -2241,7 +2242,7 @@ yyreduce: case 26: /* Line 1455 of yacc.c */ -#line 389 "program_parse.y" +#line 390 "program_parse.y" { (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (4)].temp_inst), & (yyvsp[(2) - (4)].dst_reg), & (yyvsp[(4) - (4)].src_reg), NULL, NULL); ;} @@ -2250,7 +2251,7 @@ yyreduce: case 27: /* Line 1455 of yacc.c */ -#line 395 "program_parse.y" +#line 396 "program_parse.y" { (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (6)].temp_inst), & (yyvsp[(2) - (6)].dst_reg), & (yyvsp[(4) - (6)].src_reg), & (yyvsp[(6) - (6)].src_reg), NULL); ;} @@ -2259,7 +2260,7 @@ yyreduce: case 28: /* Line 1455 of yacc.c */ -#line 402 "program_parse.y" +#line 403 "program_parse.y" { (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (6)].temp_inst), & (yyvsp[(2) - (6)].dst_reg), & (yyvsp[(4) - (6)].src_reg), & (yyvsp[(6) - (6)].src_reg), NULL); ;} @@ -2268,7 +2269,7 @@ yyreduce: case 29: /* Line 1455 of yacc.c */ -#line 409 "program_parse.y" +#line 410 "program_parse.y" { (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (8)].temp_inst), & (yyvsp[(2) - (8)].dst_reg), & (yyvsp[(4) - (8)].src_reg), & (yyvsp[(6) - (8)].src_reg), & (yyvsp[(8) - (8)].src_reg)); ;} @@ -2277,7 +2278,7 @@ yyreduce: case 30: /* Line 1455 of yacc.c */ -#line 415 "program_parse.y" +#line 416 "program_parse.y" { (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (8)].temp_inst), & (yyvsp[(2) - (8)].dst_reg), & (yyvsp[(4) - (8)].src_reg), NULL, NULL); if ((yyval.inst) != NULL) { @@ -2324,7 +2325,7 @@ yyreduce: case 31: /* Line 1455 of yacc.c */ -#line 459 "program_parse.y" +#line 460 "program_parse.y" { (yyval.inst) = asm_instruction_ctor(OPCODE_KIL, NULL, & (yyvsp[(2) - (2)].src_reg), NULL, NULL); state->fragment.UsesKill = 1; @@ -2334,7 +2335,7 @@ yyreduce: case 32: /* Line 1455 of yacc.c */ -#line 464 "program_parse.y" +#line 465 "program_parse.y" { (yyval.inst) = asm_instruction_ctor(OPCODE_KIL_NV, NULL, NULL, NULL, NULL); (yyval.inst)->Base.DstReg.CondMask = (yyvsp[(2) - (2)].dst_reg).CondMask; @@ -2347,7 +2348,7 @@ yyreduce: case 33: /* Line 1455 of yacc.c */ -#line 474 "program_parse.y" +#line 475 "program_parse.y" { (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (12)].temp_inst), & (yyvsp[(2) - (12)].dst_reg), & (yyvsp[(4) - (12)].src_reg), & (yyvsp[(6) - (12)].src_reg), & (yyvsp[(8) - (12)].src_reg)); if ((yyval.inst) != NULL) { @@ -2394,7 +2395,7 @@ yyreduce: case 34: /* Line 1455 of yacc.c */ -#line 518 "program_parse.y" +#line 519 "program_parse.y" { (yyval.integer) = (yyvsp[(2) - (2)].integer); ;} @@ -2403,91 +2404,91 @@ yyreduce: case 35: /* Line 1455 of yacc.c */ -#line 523 "program_parse.y" +#line 524 "program_parse.y" { (yyval.integer) = TEXTURE_1D_INDEX; ;} break; case 36: /* Line 1455 of yacc.c */ -#line 524 "program_parse.y" +#line 525 "program_parse.y" { (yyval.integer) = TEXTURE_2D_INDEX; ;} break; case 37: /* Line 1455 of yacc.c */ -#line 525 "program_parse.y" +#line 526 "program_parse.y" { (yyval.integer) = TEXTURE_3D_INDEX; ;} break; case 38: /* Line 1455 of yacc.c */ -#line 526 "program_parse.y" +#line 527 "program_parse.y" { (yyval.integer) = TEXTURE_CUBE_INDEX; ;} break; case 39: /* Line 1455 of yacc.c */ -#line 527 "program_parse.y" +#line 528 "program_parse.y" { (yyval.integer) = TEXTURE_RECT_INDEX; ;} break; case 40: /* Line 1455 of yacc.c */ -#line 528 "program_parse.y" +#line 529 "program_parse.y" { (yyval.integer) = -TEXTURE_1D_INDEX; ;} break; case 41: /* Line 1455 of yacc.c */ -#line 529 "program_parse.y" +#line 530 "program_parse.y" { (yyval.integer) = -TEXTURE_2D_INDEX; ;} break; case 42: /* Line 1455 of yacc.c */ -#line 530 "program_parse.y" +#line 531 "program_parse.y" { (yyval.integer) = -TEXTURE_RECT_INDEX; ;} break; case 43: /* Line 1455 of yacc.c */ -#line 531 "program_parse.y" +#line 532 "program_parse.y" { (yyval.integer) = TEXTURE_1D_ARRAY_INDEX; ;} break; case 44: /* Line 1455 of yacc.c */ -#line 532 "program_parse.y" +#line 533 "program_parse.y" { (yyval.integer) = TEXTURE_2D_ARRAY_INDEX; ;} break; case 45: /* Line 1455 of yacc.c */ -#line 533 "program_parse.y" +#line 534 "program_parse.y" { (yyval.integer) = -TEXTURE_1D_ARRAY_INDEX; ;} break; case 46: /* Line 1455 of yacc.c */ -#line 534 "program_parse.y" +#line 535 "program_parse.y" { (yyval.integer) = -TEXTURE_2D_ARRAY_INDEX; ;} break; case 47: /* Line 1455 of yacc.c */ -#line 538 "program_parse.y" +#line 539 "program_parse.y" { /* FIXME: Is this correct? Should the extenedSwizzle be applied * FIXME: to the existing swizzle? @@ -2502,7 +2503,7 @@ yyreduce: case 48: /* Line 1455 of yacc.c */ -#line 550 "program_parse.y" +#line 551 "program_parse.y" { (yyval.src_reg) = (yyvsp[(2) - (2)].src_reg); @@ -2515,7 +2516,7 @@ yyreduce: case 49: /* Line 1455 of yacc.c */ -#line 558 "program_parse.y" +#line 559 "program_parse.y" { (yyval.src_reg) = (yyvsp[(3) - (4)].src_reg); @@ -2535,7 +2536,7 @@ yyreduce: case 50: /* Line 1455 of yacc.c */ -#line 575 "program_parse.y" +#line 576 "program_parse.y" { (yyval.src_reg) = (yyvsp[(1) - (2)].src_reg); @@ -2547,7 +2548,7 @@ yyreduce: case 51: /* Line 1455 of yacc.c */ -#line 582 "program_parse.y" +#line 583 "program_parse.y" { struct asm_symbol temp_sym; @@ -2558,7 +2559,7 @@ yyreduce: memset(& temp_sym, 0, sizeof(temp_sym)); temp_sym.param_binding_begin = ~0; - initialize_symbol_from_const(state->prog, & temp_sym, & (yyvsp[(1) - (1)].vector)); + initialize_symbol_from_const(state->prog, & temp_sym, & (yyvsp[(1) - (1)].vector), GL_TRUE); set_src_reg_swz(& (yyval.src_reg), PROGRAM_CONSTANT, temp_sym.param_binding_begin, @@ -2569,7 +2570,7 @@ yyreduce: case 52: /* Line 1455 of yacc.c */ -#line 601 "program_parse.y" +#line 602 "program_parse.y" { (yyval.src_reg) = (yyvsp[(2) - (3)].src_reg); @@ -2585,7 +2586,7 @@ yyreduce: case 53: /* Line 1455 of yacc.c */ -#line 612 "program_parse.y" +#line 613 "program_parse.y" { (yyval.src_reg) = (yyvsp[(3) - (5)].src_reg); @@ -2607,7 +2608,7 @@ yyreduce: case 54: /* Line 1455 of yacc.c */ -#line 632 "program_parse.y" +#line 633 "program_parse.y" { (yyval.dst_reg) = (yyvsp[(1) - (3)].dst_reg); (yyval.dst_reg).WriteMask = (yyvsp[(2) - (3)].swiz_mask).mask; @@ -2635,7 +2636,7 @@ yyreduce: case 55: /* Line 1455 of yacc.c */ -#line 657 "program_parse.y" +#line 658 "program_parse.y" { set_dst_reg(& (yyval.dst_reg), PROGRAM_ADDRESS, 0); (yyval.dst_reg).WriteMask = (yyvsp[(2) - (2)].swiz_mask).mask; @@ -2645,7 +2646,7 @@ yyreduce: case 56: /* Line 1455 of yacc.c */ -#line 664 "program_parse.y" +#line 665 "program_parse.y" { const unsigned xyzw_valid = ((yyvsp[(1) - (7)].ext_swizzle).xyzw_valid << 0) @@ -2681,7 +2682,7 @@ yyreduce: case 57: /* Line 1455 of yacc.c */ -#line 697 "program_parse.y" +#line 698 "program_parse.y" { (yyval.ext_swizzle) = (yyvsp[(2) - (2)].ext_swizzle); (yyval.ext_swizzle).negate = ((yyvsp[(1) - (2)].negate)) ? 1 : 0; @@ -2691,7 +2692,7 @@ yyreduce: case 58: /* Line 1455 of yacc.c */ -#line 704 "program_parse.y" +#line 705 "program_parse.y" { if (((yyvsp[(1) - (1)].integer) != 0) && ((yyvsp[(1) - (1)].integer) != 1)) { yyerror(& (yylsp[(1) - (1)]), state, "invalid extended swizzle selector"); @@ -2711,7 +2712,7 @@ yyreduce: case 59: /* Line 1455 of yacc.c */ -#line 719 "program_parse.y" +#line 720 "program_parse.y" { char s; @@ -2769,7 +2770,7 @@ yyreduce: case 60: /* Line 1455 of yacc.c */ -#line 774 "program_parse.y" +#line 775 "program_parse.y" { struct asm_symbol *const s = (struct asm_symbol *) _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string)); @@ -2817,7 +2818,7 @@ yyreduce: case 61: /* Line 1455 of yacc.c */ -#line 817 "program_parse.y" +#line 818 "program_parse.y" { set_src_reg(& (yyval.src_reg), PROGRAM_INPUT, (yyvsp[(1) - (1)].attrib)); state->prog->InputsRead |= (1U << (yyval.src_reg).Base.Index); @@ -2831,7 +2832,7 @@ yyreduce: case 62: /* Line 1455 of yacc.c */ -#line 826 "program_parse.y" +#line 827 "program_parse.y" { if (! (yyvsp[(3) - (4)].src_reg).Base.RelAddr && ((unsigned) (yyvsp[(3) - (4)].src_reg).Base.Index >= (yyvsp[(1) - (4)].sym)->param_binding_length)) { @@ -2857,7 +2858,7 @@ yyreduce: case 63: /* Line 1455 of yacc.c */ -#line 847 "program_parse.y" +#line 848 "program_parse.y" { gl_register_file file = ((yyvsp[(1) - (1)].temp_sym).name != NULL) ? (yyvsp[(1) - (1)].temp_sym).param_binding_type @@ -2870,7 +2871,7 @@ yyreduce: case 64: /* Line 1455 of yacc.c */ -#line 857 "program_parse.y" +#line 858 "program_parse.y" { set_dst_reg(& (yyval.dst_reg), PROGRAM_OUTPUT, (yyvsp[(1) - (1)].result)); ;} @@ -2879,7 +2880,7 @@ yyreduce: case 65: /* Line 1455 of yacc.c */ -#line 861 "program_parse.y" +#line 862 "program_parse.y" { struct asm_symbol *const s = (struct asm_symbol *) _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string)); @@ -2911,7 +2912,7 @@ yyreduce: case 66: /* Line 1455 of yacc.c */ -#line 890 "program_parse.y" +#line 891 "program_parse.y" { struct asm_symbol *const s = (struct asm_symbol *) _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string)); @@ -2933,7 +2934,7 @@ yyreduce: case 69: /* Line 1455 of yacc.c */ -#line 911 "program_parse.y" +#line 912 "program_parse.y" { init_src_reg(& (yyval.src_reg)); (yyval.src_reg).Base.Index = (yyvsp[(1) - (1)].integer); @@ -2943,7 +2944,7 @@ yyreduce: case 70: /* Line 1455 of yacc.c */ -#line 918 "program_parse.y" +#line 919 "program_parse.y" { /* FINISHME: Add support for multiple address registers. */ @@ -2958,28 +2959,28 @@ yyreduce: case 71: /* Line 1455 of yacc.c */ -#line 929 "program_parse.y" +#line 930 "program_parse.y" { (yyval.integer) = 0; ;} break; case 72: /* Line 1455 of yacc.c */ -#line 930 "program_parse.y" +#line 931 "program_parse.y" { (yyval.integer) = (yyvsp[(2) - (2)].integer); ;} break; case 73: /* Line 1455 of yacc.c */ -#line 931 "program_parse.y" +#line 932 "program_parse.y" { (yyval.integer) = -(yyvsp[(2) - (2)].integer); ;} break; case 74: /* Line 1455 of yacc.c */ -#line 935 "program_parse.y" +#line 936 "program_parse.y" { if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > 63)) { char s[100]; @@ -2996,7 +2997,7 @@ yyreduce: case 75: /* Line 1455 of yacc.c */ -#line 949 "program_parse.y" +#line 950 "program_parse.y" { if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > 64)) { char s[100]; @@ -3013,7 +3014,7 @@ yyreduce: case 76: /* Line 1455 of yacc.c */ -#line 963 "program_parse.y" +#line 964 "program_parse.y" { struct asm_symbol *const s = (struct asm_symbol *) _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string)); @@ -3036,7 +3037,7 @@ yyreduce: case 77: /* Line 1455 of yacc.c */ -#line 983 "program_parse.y" +#line 984 "program_parse.y" { if ((yyvsp[(1) - (1)].swiz_mask).mask != WRITEMASK_X) { yyerror(& (yylsp[(1) - (1)]), state, "invalid address component selector"); @@ -3050,7 +3051,7 @@ yyreduce: case 78: /* Line 1455 of yacc.c */ -#line 994 "program_parse.y" +#line 995 "program_parse.y" { if ((yyvsp[(1) - (1)].swiz_mask).mask != WRITEMASK_X) { yyerror(& (yylsp[(1) - (1)]), state, @@ -3065,21 +3066,21 @@ yyreduce: case 83: /* Line 1455 of yacc.c */ -#line 1010 "program_parse.y" +#line 1011 "program_parse.y" { (yyval.swiz_mask).swizzle = SWIZZLE_NOOP; (yyval.swiz_mask).mask = WRITEMASK_XYZW; ;} break; case 88: /* Line 1455 of yacc.c */ -#line 1014 "program_parse.y" +#line 1015 "program_parse.y" { (yyval.swiz_mask).swizzle = SWIZZLE_NOOP; (yyval.swiz_mask).mask = WRITEMASK_XYZW; ;} break; case 89: /* Line 1455 of yacc.c */ -#line 1018 "program_parse.y" +#line 1019 "program_parse.y" { (yyval.dst_reg) = (yyvsp[(2) - (3)].dst_reg); ;} @@ -3088,7 +3089,7 @@ yyreduce: case 90: /* Line 1455 of yacc.c */ -#line 1022 "program_parse.y" +#line 1023 "program_parse.y" { (yyval.dst_reg) = (yyvsp[(2) - (3)].dst_reg); ;} @@ -3097,7 +3098,7 @@ yyreduce: case 91: /* Line 1455 of yacc.c */ -#line 1026 "program_parse.y" +#line 1027 "program_parse.y" { (yyval.dst_reg).CondMask = COND_TR; (yyval.dst_reg).CondSwizzle = SWIZZLE_NOOP; @@ -3108,7 +3109,7 @@ yyreduce: case 92: /* Line 1455 of yacc.c */ -#line 1034 "program_parse.y" +#line 1035 "program_parse.y" { (yyval.dst_reg) = (yyvsp[(1) - (2)].dst_reg); (yyval.dst_reg).CondSwizzle = (yyvsp[(2) - (2)].swiz_mask).swizzle; @@ -3118,7 +3119,7 @@ yyreduce: case 93: /* Line 1455 of yacc.c */ -#line 1041 "program_parse.y" +#line 1042 "program_parse.y" { (yyval.dst_reg) = (yyvsp[(1) - (2)].dst_reg); (yyval.dst_reg).CondSwizzle = (yyvsp[(2) - (2)].swiz_mask).swizzle; @@ -3128,7 +3129,7 @@ yyreduce: case 94: /* Line 1455 of yacc.c */ -#line 1048 "program_parse.y" +#line 1049 "program_parse.y" { const int cond = _mesa_parse_cc((yyvsp[(1) - (1)].string)); if ((cond == 0) || ((yyvsp[(1) - (1)].string)[2] != '\0')) { @@ -3154,7 +3155,7 @@ yyreduce: case 95: /* Line 1455 of yacc.c */ -#line 1071 "program_parse.y" +#line 1072 "program_parse.y" { const int cond = _mesa_parse_cc((yyvsp[(1) - (1)].string)); if ((cond == 0) || ((yyvsp[(1) - (1)].string)[2] != '\0')) { @@ -3180,7 +3181,7 @@ yyreduce: case 102: /* Line 1455 of yacc.c */ -#line 1102 "program_parse.y" +#line 1103 "program_parse.y" { struct asm_symbol *const s = declare_variable(state, (yyvsp[(2) - (4)].string), at_attrib, & (yylsp[(2) - (4)])); @@ -3202,7 +3203,7 @@ yyreduce: case 103: /* Line 1455 of yacc.c */ -#line 1121 "program_parse.y" +#line 1122 "program_parse.y" { (yyval.attrib) = (yyvsp[(2) - (2)].attrib); ;} @@ -3211,7 +3212,7 @@ yyreduce: case 104: /* Line 1455 of yacc.c */ -#line 1125 "program_parse.y" +#line 1126 "program_parse.y" { (yyval.attrib) = (yyvsp[(2) - (2)].attrib); ;} @@ -3220,7 +3221,7 @@ yyreduce: case 105: /* Line 1455 of yacc.c */ -#line 1131 "program_parse.y" +#line 1132 "program_parse.y" { (yyval.attrib) = VERT_ATTRIB_POS; ;} @@ -3229,7 +3230,7 @@ yyreduce: case 106: /* Line 1455 of yacc.c */ -#line 1135 "program_parse.y" +#line 1136 "program_parse.y" { (yyval.attrib) = VERT_ATTRIB_WEIGHT; ;} @@ -3238,7 +3239,7 @@ yyreduce: case 107: /* Line 1455 of yacc.c */ -#line 1139 "program_parse.y" +#line 1140 "program_parse.y" { (yyval.attrib) = VERT_ATTRIB_NORMAL; ;} @@ -3247,7 +3248,7 @@ yyreduce: case 108: /* Line 1455 of yacc.c */ -#line 1143 "program_parse.y" +#line 1144 "program_parse.y" { if (!state->ctx->Extensions.EXT_secondary_color) { yyerror(& (yylsp[(2) - (2)]), state, "GL_EXT_secondary_color not supported"); @@ -3261,7 +3262,7 @@ yyreduce: case 109: /* Line 1455 of yacc.c */ -#line 1152 "program_parse.y" +#line 1153 "program_parse.y" { if (!state->ctx->Extensions.EXT_fog_coord) { yyerror(& (yylsp[(1) - (1)]), state, "GL_EXT_fog_coord not supported"); @@ -3275,7 +3276,7 @@ yyreduce: case 110: /* Line 1455 of yacc.c */ -#line 1161 "program_parse.y" +#line 1162 "program_parse.y" { (yyval.attrib) = VERT_ATTRIB_TEX0 + (yyvsp[(2) - (2)].integer); ;} @@ -3284,7 +3285,7 @@ yyreduce: case 111: /* Line 1455 of yacc.c */ -#line 1165 "program_parse.y" +#line 1166 "program_parse.y" { yyerror(& (yylsp[(1) - (4)]), state, "GL_ARB_matrix_palette not supported"); YYERROR; @@ -3294,7 +3295,7 @@ yyreduce: case 112: /* Line 1455 of yacc.c */ -#line 1170 "program_parse.y" +#line 1171 "program_parse.y" { (yyval.attrib) = VERT_ATTRIB_GENERIC0 + (yyvsp[(3) - (4)].integer); ;} @@ -3303,7 +3304,7 @@ yyreduce: case 113: /* Line 1455 of yacc.c */ -#line 1176 "program_parse.y" +#line 1177 "program_parse.y" { if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxAttribs) { yyerror(& (yylsp[(1) - (1)]), state, "invalid vertex attribute reference"); @@ -3317,7 +3318,7 @@ yyreduce: case 117: /* Line 1455 of yacc.c */ -#line 1190 "program_parse.y" +#line 1191 "program_parse.y" { (yyval.attrib) = FRAG_ATTRIB_WPOS; ;} @@ -3326,7 +3327,7 @@ yyreduce: case 118: /* Line 1455 of yacc.c */ -#line 1194 "program_parse.y" +#line 1195 "program_parse.y" { (yyval.attrib) = FRAG_ATTRIB_COL0 + (yyvsp[(2) - (2)].integer); ;} @@ -3335,7 +3336,7 @@ yyreduce: case 119: /* Line 1455 of yacc.c */ -#line 1198 "program_parse.y" +#line 1199 "program_parse.y" { (yyval.attrib) = FRAG_ATTRIB_FOGC; ;} @@ -3344,7 +3345,7 @@ yyreduce: case 120: /* Line 1455 of yacc.c */ -#line 1202 "program_parse.y" +#line 1203 "program_parse.y" { (yyval.attrib) = FRAG_ATTRIB_TEX0 + (yyvsp[(2) - (2)].integer); ;} @@ -3353,7 +3354,7 @@ yyreduce: case 123: /* Line 1455 of yacc.c */ -#line 1210 "program_parse.y" +#line 1211 "program_parse.y" { struct asm_symbol *const s = declare_variable(state, (yyvsp[(2) - (3)].string), at_param, & (yylsp[(2) - (3)])); @@ -3374,7 +3375,7 @@ yyreduce: case 124: /* Line 1455 of yacc.c */ -#line 1228 "program_parse.y" +#line 1229 "program_parse.y" { if (((yyvsp[(4) - (6)].integer) != 0) && ((unsigned) (yyvsp[(4) - (6)].integer) != (yyvsp[(6) - (6)].temp_sym).param_binding_length)) { free((yyvsp[(2) - (6)].string)); @@ -3402,7 +3403,7 @@ yyreduce: case 125: /* Line 1455 of yacc.c */ -#line 1253 "program_parse.y" +#line 1254 "program_parse.y" { (yyval.integer) = 0; ;} @@ -3411,7 +3412,7 @@ yyreduce: case 126: /* Line 1455 of yacc.c */ -#line 1257 "program_parse.y" +#line 1258 "program_parse.y" { if (((yyvsp[(1) - (1)].integer) < 1) || ((unsigned) (yyvsp[(1) - (1)].integer) > state->limits->MaxParameters)) { yyerror(& (yylsp[(1) - (1)]), state, "invalid parameter array size"); @@ -3425,7 +3426,7 @@ yyreduce: case 127: /* Line 1455 of yacc.c */ -#line 1268 "program_parse.y" +#line 1269 "program_parse.y" { (yyval.temp_sym) = (yyvsp[(2) - (2)].temp_sym); ;} @@ -3434,7 +3435,7 @@ yyreduce: case 128: /* Line 1455 of yacc.c */ -#line 1274 "program_parse.y" +#line 1275 "program_parse.y" { (yyval.temp_sym) = (yyvsp[(3) - (4)].temp_sym); ;} @@ -3443,7 +3444,7 @@ yyreduce: case 130: /* Line 1455 of yacc.c */ -#line 1281 "program_parse.y" +#line 1282 "program_parse.y" { (yyvsp[(1) - (3)].temp_sym).param_binding_length += (yyvsp[(3) - (3)].temp_sym).param_binding_length; (yyval.temp_sym) = (yyvsp[(1) - (3)].temp_sym); @@ -3453,7 +3454,7 @@ yyreduce: case 131: /* Line 1455 of yacc.c */ -#line 1288 "program_parse.y" +#line 1289 "program_parse.y" { memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym))); (yyval.temp_sym).param_binding_begin = ~0; @@ -3464,7 +3465,7 @@ yyreduce: case 132: /* Line 1455 of yacc.c */ -#line 1294 "program_parse.y" +#line 1295 "program_parse.y" { memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym))); (yyval.temp_sym).param_binding_begin = ~0; @@ -3475,18 +3476,18 @@ yyreduce: case 133: /* Line 1455 of yacc.c */ -#line 1300 "program_parse.y" +#line 1301 "program_parse.y" { memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym))); (yyval.temp_sym).param_binding_begin = ~0; - initialize_symbol_from_const(state->prog, & (yyval.temp_sym), & (yyvsp[(1) - (1)].vector)); + initialize_symbol_from_const(state->prog, & (yyval.temp_sym), & (yyvsp[(1) - (1)].vector), GL_TRUE); ;} break; case 134: /* Line 1455 of yacc.c */ -#line 1308 "program_parse.y" +#line 1309 "program_parse.y" { memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym))); (yyval.temp_sym).param_binding_begin = ~0; @@ -3497,7 +3498,7 @@ yyreduce: case 135: /* Line 1455 of yacc.c */ -#line 1314 "program_parse.y" +#line 1315 "program_parse.y" { memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym))); (yyval.temp_sym).param_binding_begin = ~0; @@ -3508,18 +3509,18 @@ yyreduce: case 136: /* Line 1455 of yacc.c */ -#line 1320 "program_parse.y" +#line 1321 "program_parse.y" { memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym))); (yyval.temp_sym).param_binding_begin = ~0; - initialize_symbol_from_const(state->prog, & (yyval.temp_sym), & (yyvsp[(1) - (1)].vector)); + initialize_symbol_from_const(state->prog, & (yyval.temp_sym), & (yyvsp[(1) - (1)].vector), GL_TRUE); ;} break; case 137: /* Line 1455 of yacc.c */ -#line 1328 "program_parse.y" +#line 1329 "program_parse.y" { memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym))); (yyval.temp_sym).param_binding_begin = ~0; @@ -3530,7 +3531,7 @@ yyreduce: case 138: /* Line 1455 of yacc.c */ -#line 1334 "program_parse.y" +#line 1335 "program_parse.y" { memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym))); (yyval.temp_sym).param_binding_begin = ~0; @@ -3541,109 +3542,109 @@ yyreduce: case 139: /* Line 1455 of yacc.c */ -#line 1340 "program_parse.y" +#line 1341 "program_parse.y" { memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym))); (yyval.temp_sym).param_binding_begin = ~0; - initialize_symbol_from_const(state->prog, & (yyval.temp_sym), & (yyvsp[(1) - (1)].vector)); + initialize_symbol_from_const(state->prog, & (yyval.temp_sym), & (yyvsp[(1) - (1)].vector), GL_FALSE); ;} break; case 140: /* Line 1455 of yacc.c */ -#line 1347 "program_parse.y" +#line 1348 "program_parse.y" { memcpy((yyval.state), (yyvsp[(1) - (1)].state), sizeof((yyval.state))); ;} break; case 141: /* Line 1455 of yacc.c */ -#line 1348 "program_parse.y" +#line 1349 "program_parse.y" { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;} break; case 142: /* Line 1455 of yacc.c */ -#line 1351 "program_parse.y" +#line 1352 "program_parse.y" { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;} break; case 143: /* Line 1455 of yacc.c */ -#line 1352 "program_parse.y" +#line 1353 "program_parse.y" { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;} break; case 144: /* Line 1455 of yacc.c */ -#line 1353 "program_parse.y" +#line 1354 "program_parse.y" { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;} break; case 145: /* Line 1455 of yacc.c */ -#line 1354 "program_parse.y" +#line 1355 "program_parse.y" { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;} break; case 146: /* Line 1455 of yacc.c */ -#line 1355 "program_parse.y" +#line 1356 "program_parse.y" { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;} break; case 147: /* Line 1455 of yacc.c */ -#line 1356 "program_parse.y" +#line 1357 "program_parse.y" { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;} break; case 148: /* Line 1455 of yacc.c */ -#line 1357 "program_parse.y" +#line 1358 "program_parse.y" { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;} break; case 149: /* Line 1455 of yacc.c */ -#line 1358 "program_parse.y" +#line 1359 "program_parse.y" { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;} break; case 150: /* Line 1455 of yacc.c */ -#line 1359 "program_parse.y" +#line 1360 "program_parse.y" { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;} break; case 151: /* Line 1455 of yacc.c */ -#line 1360 "program_parse.y" +#line 1361 "program_parse.y" { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;} break; case 152: /* Line 1455 of yacc.c */ -#line 1361 "program_parse.y" +#line 1362 "program_parse.y" { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;} break; case 153: /* Line 1455 of yacc.c */ -#line 1365 "program_parse.y" +#line 1366 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); (yyval.state)[0] = STATE_MATERIAL; @@ -3655,7 +3656,7 @@ yyreduce: case 154: /* Line 1455 of yacc.c */ -#line 1374 "program_parse.y" +#line 1375 "program_parse.y" { (yyval.integer) = (yyvsp[(1) - (1)].integer); ;} @@ -3664,7 +3665,7 @@ yyreduce: case 155: /* Line 1455 of yacc.c */ -#line 1378 "program_parse.y" +#line 1379 "program_parse.y" { (yyval.integer) = STATE_EMISSION; ;} @@ -3673,7 +3674,7 @@ yyreduce: case 156: /* Line 1455 of yacc.c */ -#line 1382 "program_parse.y" +#line 1383 "program_parse.y" { (yyval.integer) = STATE_SHININESS; ;} @@ -3682,7 +3683,7 @@ yyreduce: case 157: /* Line 1455 of yacc.c */ -#line 1388 "program_parse.y" +#line 1389 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); (yyval.state)[0] = STATE_LIGHT; @@ -3694,7 +3695,7 @@ yyreduce: case 158: /* Line 1455 of yacc.c */ -#line 1397 "program_parse.y" +#line 1398 "program_parse.y" { (yyval.integer) = (yyvsp[(1) - (1)].integer); ;} @@ -3703,7 +3704,7 @@ yyreduce: case 159: /* Line 1455 of yacc.c */ -#line 1401 "program_parse.y" +#line 1402 "program_parse.y" { (yyval.integer) = STATE_POSITION; ;} @@ -3712,7 +3713,7 @@ yyreduce: case 160: /* Line 1455 of yacc.c */ -#line 1405 "program_parse.y" +#line 1406 "program_parse.y" { if (!state->ctx->Extensions.EXT_point_parameters) { yyerror(& (yylsp[(1) - (1)]), state, "GL_ARB_point_parameters not supported"); @@ -3726,7 +3727,7 @@ yyreduce: case 161: /* Line 1455 of yacc.c */ -#line 1414 "program_parse.y" +#line 1415 "program_parse.y" { (yyval.integer) = (yyvsp[(2) - (2)].integer); ;} @@ -3735,7 +3736,7 @@ yyreduce: case 162: /* Line 1455 of yacc.c */ -#line 1418 "program_parse.y" +#line 1419 "program_parse.y" { (yyval.integer) = STATE_HALF_VECTOR; ;} @@ -3744,7 +3745,7 @@ yyreduce: case 163: /* Line 1455 of yacc.c */ -#line 1424 "program_parse.y" +#line 1425 "program_parse.y" { (yyval.integer) = STATE_SPOT_DIRECTION; ;} @@ -3753,7 +3754,7 @@ yyreduce: case 164: /* Line 1455 of yacc.c */ -#line 1430 "program_parse.y" +#line 1431 "program_parse.y" { (yyval.state)[0] = (yyvsp[(2) - (2)].state)[0]; (yyval.state)[1] = (yyvsp[(2) - (2)].state)[1]; @@ -3763,7 +3764,7 @@ yyreduce: case 165: /* Line 1455 of yacc.c */ -#line 1437 "program_parse.y" +#line 1438 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); (yyval.state)[0] = STATE_LIGHTMODEL_AMBIENT; @@ -3773,7 +3774,7 @@ yyreduce: case 166: /* Line 1455 of yacc.c */ -#line 1442 "program_parse.y" +#line 1443 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); (yyval.state)[0] = STATE_LIGHTMODEL_SCENECOLOR; @@ -3784,7 +3785,7 @@ yyreduce: case 167: /* Line 1455 of yacc.c */ -#line 1450 "program_parse.y" +#line 1451 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); (yyval.state)[0] = STATE_LIGHTPROD; @@ -3797,7 +3798,7 @@ yyreduce: case 169: /* Line 1455 of yacc.c */ -#line 1462 "program_parse.y" +#line 1463 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); (yyval.state)[0] = (yyvsp[(3) - (3)].integer); @@ -3808,7 +3809,7 @@ yyreduce: case 170: /* Line 1455 of yacc.c */ -#line 1470 "program_parse.y" +#line 1471 "program_parse.y" { (yyval.integer) = STATE_TEXENV_COLOR; ;} @@ -3817,7 +3818,7 @@ yyreduce: case 171: /* Line 1455 of yacc.c */ -#line 1476 "program_parse.y" +#line 1477 "program_parse.y" { (yyval.integer) = STATE_AMBIENT; ;} @@ -3826,7 +3827,7 @@ yyreduce: case 172: /* Line 1455 of yacc.c */ -#line 1480 "program_parse.y" +#line 1481 "program_parse.y" { (yyval.integer) = STATE_DIFFUSE; ;} @@ -3835,7 +3836,7 @@ yyreduce: case 173: /* Line 1455 of yacc.c */ -#line 1484 "program_parse.y" +#line 1485 "program_parse.y" { (yyval.integer) = STATE_SPECULAR; ;} @@ -3844,7 +3845,7 @@ yyreduce: case 174: /* Line 1455 of yacc.c */ -#line 1490 "program_parse.y" +#line 1491 "program_parse.y" { if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxLights) { yyerror(& (yylsp[(1) - (1)]), state, "invalid light selector"); @@ -3858,7 +3859,7 @@ yyreduce: case 175: /* Line 1455 of yacc.c */ -#line 1501 "program_parse.y" +#line 1502 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); (yyval.state)[0] = STATE_TEXGEN; @@ -3870,7 +3871,7 @@ yyreduce: case 176: /* Line 1455 of yacc.c */ -#line 1510 "program_parse.y" +#line 1511 "program_parse.y" { (yyval.integer) = STATE_TEXGEN_EYE_S; ;} @@ -3879,7 +3880,7 @@ yyreduce: case 177: /* Line 1455 of yacc.c */ -#line 1514 "program_parse.y" +#line 1515 "program_parse.y" { (yyval.integer) = STATE_TEXGEN_OBJECT_S; ;} @@ -3888,7 +3889,7 @@ yyreduce: case 178: /* Line 1455 of yacc.c */ -#line 1519 "program_parse.y" +#line 1520 "program_parse.y" { (yyval.integer) = STATE_TEXGEN_EYE_S - STATE_TEXGEN_EYE_S; ;} @@ -3897,7 +3898,7 @@ yyreduce: case 179: /* Line 1455 of yacc.c */ -#line 1523 "program_parse.y" +#line 1524 "program_parse.y" { (yyval.integer) = STATE_TEXGEN_EYE_T - STATE_TEXGEN_EYE_S; ;} @@ -3906,7 +3907,7 @@ yyreduce: case 180: /* Line 1455 of yacc.c */ -#line 1527 "program_parse.y" +#line 1528 "program_parse.y" { (yyval.integer) = STATE_TEXGEN_EYE_R - STATE_TEXGEN_EYE_S; ;} @@ -3915,7 +3916,7 @@ yyreduce: case 181: /* Line 1455 of yacc.c */ -#line 1531 "program_parse.y" +#line 1532 "program_parse.y" { (yyval.integer) = STATE_TEXGEN_EYE_Q - STATE_TEXGEN_EYE_S; ;} @@ -3924,7 +3925,7 @@ yyreduce: case 182: /* Line 1455 of yacc.c */ -#line 1537 "program_parse.y" +#line 1538 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); (yyval.state)[0] = (yyvsp[(2) - (2)].integer); @@ -3934,7 +3935,7 @@ yyreduce: case 183: /* Line 1455 of yacc.c */ -#line 1544 "program_parse.y" +#line 1545 "program_parse.y" { (yyval.integer) = STATE_FOG_COLOR; ;} @@ -3943,7 +3944,7 @@ yyreduce: case 184: /* Line 1455 of yacc.c */ -#line 1548 "program_parse.y" +#line 1549 "program_parse.y" { (yyval.integer) = STATE_FOG_PARAMS; ;} @@ -3952,7 +3953,7 @@ yyreduce: case 185: /* Line 1455 of yacc.c */ -#line 1554 "program_parse.y" +#line 1555 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); (yyval.state)[0] = STATE_CLIPPLANE; @@ -3963,7 +3964,7 @@ yyreduce: case 186: /* Line 1455 of yacc.c */ -#line 1562 "program_parse.y" +#line 1563 "program_parse.y" { if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxClipPlanes) { yyerror(& (yylsp[(1) - (1)]), state, "invalid clip plane selector"); @@ -3977,7 +3978,7 @@ yyreduce: case 187: /* Line 1455 of yacc.c */ -#line 1573 "program_parse.y" +#line 1574 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); (yyval.state)[0] = (yyvsp[(2) - (2)].integer); @@ -3987,7 +3988,7 @@ yyreduce: case 188: /* Line 1455 of yacc.c */ -#line 1580 "program_parse.y" +#line 1581 "program_parse.y" { (yyval.integer) = STATE_POINT_SIZE; ;} @@ -3996,7 +3997,7 @@ yyreduce: case 189: /* Line 1455 of yacc.c */ -#line 1584 "program_parse.y" +#line 1585 "program_parse.y" { (yyval.integer) = STATE_POINT_ATTENUATION; ;} @@ -4005,7 +4006,7 @@ yyreduce: case 190: /* Line 1455 of yacc.c */ -#line 1590 "program_parse.y" +#line 1591 "program_parse.y" { (yyval.state)[0] = (yyvsp[(1) - (5)].state)[0]; (yyval.state)[1] = (yyvsp[(1) - (5)].state)[1]; @@ -4018,7 +4019,7 @@ yyreduce: case 191: /* Line 1455 of yacc.c */ -#line 1600 "program_parse.y" +#line 1601 "program_parse.y" { (yyval.state)[0] = (yyvsp[(1) - (2)].state)[0]; (yyval.state)[1] = (yyvsp[(1) - (2)].state)[1]; @@ -4031,7 +4032,7 @@ yyreduce: case 192: /* Line 1455 of yacc.c */ -#line 1610 "program_parse.y" +#line 1611 "program_parse.y" { (yyval.state)[2] = 0; (yyval.state)[3] = 3; @@ -4041,7 +4042,7 @@ yyreduce: case 193: /* Line 1455 of yacc.c */ -#line 1615 "program_parse.y" +#line 1616 "program_parse.y" { /* It seems logical that the matrix row range specifier would have * to specify a range or more than one row (i.e., $5 > $3). @@ -4062,7 +4063,7 @@ yyreduce: case 194: /* Line 1455 of yacc.c */ -#line 1633 "program_parse.y" +#line 1634 "program_parse.y" { (yyval.state)[0] = (yyvsp[(2) - (3)].state)[0]; (yyval.state)[1] = (yyvsp[(2) - (3)].state)[1]; @@ -4073,7 +4074,7 @@ yyreduce: case 195: /* Line 1455 of yacc.c */ -#line 1641 "program_parse.y" +#line 1642 "program_parse.y" { (yyval.integer) = 0; ;} @@ -4082,7 +4083,7 @@ yyreduce: case 196: /* Line 1455 of yacc.c */ -#line 1645 "program_parse.y" +#line 1646 "program_parse.y" { (yyval.integer) = (yyvsp[(1) - (1)].integer); ;} @@ -4091,7 +4092,7 @@ yyreduce: case 197: /* Line 1455 of yacc.c */ -#line 1651 "program_parse.y" +#line 1652 "program_parse.y" { (yyval.integer) = STATE_MATRIX_INVERSE; ;} @@ -4100,7 +4101,7 @@ yyreduce: case 198: /* Line 1455 of yacc.c */ -#line 1655 "program_parse.y" +#line 1656 "program_parse.y" { (yyval.integer) = STATE_MATRIX_TRANSPOSE; ;} @@ -4109,7 +4110,7 @@ yyreduce: case 199: /* Line 1455 of yacc.c */ -#line 1659 "program_parse.y" +#line 1660 "program_parse.y" { (yyval.integer) = STATE_MATRIX_INVTRANS; ;} @@ -4118,7 +4119,7 @@ yyreduce: case 200: /* Line 1455 of yacc.c */ -#line 1665 "program_parse.y" +#line 1666 "program_parse.y" { if ((yyvsp[(1) - (1)].integer) > 3) { yyerror(& (yylsp[(1) - (1)]), state, "invalid matrix row reference"); @@ -4132,7 +4133,7 @@ yyreduce: case 201: /* Line 1455 of yacc.c */ -#line 1676 "program_parse.y" +#line 1677 "program_parse.y" { (yyval.state)[0] = STATE_MODELVIEW_MATRIX; (yyval.state)[1] = (yyvsp[(2) - (2)].integer); @@ -4142,7 +4143,7 @@ yyreduce: case 202: /* Line 1455 of yacc.c */ -#line 1681 "program_parse.y" +#line 1682 "program_parse.y" { (yyval.state)[0] = STATE_PROJECTION_MATRIX; (yyval.state)[1] = 0; @@ -4152,7 +4153,7 @@ yyreduce: case 203: /* Line 1455 of yacc.c */ -#line 1686 "program_parse.y" +#line 1687 "program_parse.y" { (yyval.state)[0] = STATE_MVP_MATRIX; (yyval.state)[1] = 0; @@ -4162,7 +4163,7 @@ yyreduce: case 204: /* Line 1455 of yacc.c */ -#line 1691 "program_parse.y" +#line 1692 "program_parse.y" { (yyval.state)[0] = STATE_TEXTURE_MATRIX; (yyval.state)[1] = (yyvsp[(2) - (2)].integer); @@ -4172,7 +4173,7 @@ yyreduce: case 205: /* Line 1455 of yacc.c */ -#line 1696 "program_parse.y" +#line 1697 "program_parse.y" { yyerror(& (yylsp[(1) - (4)]), state, "GL_ARB_matrix_palette not supported"); YYERROR; @@ -4182,7 +4183,7 @@ yyreduce: case 206: /* Line 1455 of yacc.c */ -#line 1701 "program_parse.y" +#line 1702 "program_parse.y" { (yyval.state)[0] = STATE_PROGRAM_MATRIX; (yyval.state)[1] = (yyvsp[(3) - (4)].integer); @@ -4192,7 +4193,7 @@ yyreduce: case 207: /* Line 1455 of yacc.c */ -#line 1708 "program_parse.y" +#line 1709 "program_parse.y" { (yyval.integer) = 0; ;} @@ -4201,7 +4202,7 @@ yyreduce: case 208: /* Line 1455 of yacc.c */ -#line 1712 "program_parse.y" +#line 1713 "program_parse.y" { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;} @@ -4210,7 +4211,7 @@ yyreduce: case 209: /* Line 1455 of yacc.c */ -#line 1717 "program_parse.y" +#line 1718 "program_parse.y" { /* Since GL_ARB_vertex_blend isn't supported, only modelview matrix * zero is valid. @@ -4227,7 +4228,7 @@ yyreduce: case 210: /* Line 1455 of yacc.c */ -#line 1730 "program_parse.y" +#line 1731 "program_parse.y" { /* Since GL_ARB_matrix_palette isn't supported, just let any value * through here. The error will be generated later. @@ -4239,7 +4240,7 @@ yyreduce: case 211: /* Line 1455 of yacc.c */ -#line 1738 "program_parse.y" +#line 1739 "program_parse.y" { if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxProgramMatrices) { yyerror(& (yylsp[(1) - (1)]), state, "invalid program matrix selector"); @@ -4253,7 +4254,7 @@ yyreduce: case 212: /* Line 1455 of yacc.c */ -#line 1749 "program_parse.y" +#line 1750 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); (yyval.state)[0] = STATE_DEPTH_RANGE; @@ -4263,7 +4264,7 @@ yyreduce: case 217: /* Line 1455 of yacc.c */ -#line 1761 "program_parse.y" +#line 1762 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); (yyval.state)[0] = state->state_param_enum; @@ -4276,7 +4277,7 @@ yyreduce: case 218: /* Line 1455 of yacc.c */ -#line 1771 "program_parse.y" +#line 1772 "program_parse.y" { (yyval.state)[0] = (yyvsp[(1) - (1)].integer); (yyval.state)[1] = (yyvsp[(1) - (1)].integer); @@ -4286,7 +4287,7 @@ yyreduce: case 219: /* Line 1455 of yacc.c */ -#line 1776 "program_parse.y" +#line 1777 "program_parse.y" { (yyval.state)[0] = (yyvsp[(1) - (3)].integer); (yyval.state)[1] = (yyvsp[(3) - (3)].integer); @@ -4296,7 +4297,7 @@ yyreduce: case 220: /* Line 1455 of yacc.c */ -#line 1783 "program_parse.y" +#line 1784 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); (yyval.state)[0] = state->state_param_enum; @@ -4309,7 +4310,7 @@ yyreduce: case 221: /* Line 1455 of yacc.c */ -#line 1793 "program_parse.y" +#line 1794 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); (yyval.state)[0] = state->state_param_enum; @@ -4322,7 +4323,7 @@ yyreduce: case 222: /* Line 1455 of yacc.c */ -#line 1802 "program_parse.y" +#line 1803 "program_parse.y" { (yyval.state)[0] = (yyvsp[(1) - (1)].integer); (yyval.state)[1] = (yyvsp[(1) - (1)].integer); @@ -4332,7 +4333,7 @@ yyreduce: case 223: /* Line 1455 of yacc.c */ -#line 1807 "program_parse.y" +#line 1808 "program_parse.y" { (yyval.state)[0] = (yyvsp[(1) - (3)].integer); (yyval.state)[1] = (yyvsp[(3) - (3)].integer); @@ -4342,7 +4343,7 @@ yyreduce: case 224: /* Line 1455 of yacc.c */ -#line 1814 "program_parse.y" +#line 1815 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); (yyval.state)[0] = state->state_param_enum; @@ -4355,7 +4356,7 @@ yyreduce: case 225: /* Line 1455 of yacc.c */ -#line 1824 "program_parse.y" +#line 1825 "program_parse.y" { if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxEnvParams) { yyerror(& (yylsp[(1) - (1)]), state, "invalid environment parameter reference"); @@ -4368,7 +4369,7 @@ yyreduce: case 226: /* Line 1455 of yacc.c */ -#line 1834 "program_parse.y" +#line 1835 "program_parse.y" { if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxLocalParams) { yyerror(& (yylsp[(1) - (1)]), state, "invalid local parameter reference"); @@ -4381,7 +4382,7 @@ yyreduce: case 231: /* Line 1455 of yacc.c */ -#line 1849 "program_parse.y" +#line 1850 "program_parse.y" { (yyval.vector).count = 4; (yyval.vector).data[0] = (yyvsp[(1) - (1)].real); @@ -4394,7 +4395,7 @@ yyreduce: case 232: /* Line 1455 of yacc.c */ -#line 1859 "program_parse.y" +#line 1860 "program_parse.y" { (yyval.vector).count = 1; (yyval.vector).data[0] = (yyvsp[(1) - (1)].real); @@ -4407,7 +4408,7 @@ yyreduce: case 233: /* Line 1455 of yacc.c */ -#line 1867 "program_parse.y" +#line 1868 "program_parse.y" { (yyval.vector).count = 1; (yyval.vector).data[0] = (float) (yyvsp[(1) - (1)].integer); @@ -4420,7 +4421,7 @@ yyreduce: case 234: /* Line 1455 of yacc.c */ -#line 1877 "program_parse.y" +#line 1878 "program_parse.y" { (yyval.vector).count = 4; (yyval.vector).data[0] = (yyvsp[(2) - (3)].real); @@ -4433,7 +4434,7 @@ yyreduce: case 235: /* Line 1455 of yacc.c */ -#line 1885 "program_parse.y" +#line 1886 "program_parse.y" { (yyval.vector).count = 4; (yyval.vector).data[0] = (yyvsp[(2) - (5)].real); @@ -4446,7 +4447,7 @@ yyreduce: case 236: /* Line 1455 of yacc.c */ -#line 1894 "program_parse.y" +#line 1895 "program_parse.y" { (yyval.vector).count = 4; (yyval.vector).data[0] = (yyvsp[(2) - (7)].real); @@ -4459,7 +4460,7 @@ yyreduce: case 237: /* Line 1455 of yacc.c */ -#line 1903 "program_parse.y" +#line 1904 "program_parse.y" { (yyval.vector).count = 4; (yyval.vector).data[0] = (yyvsp[(2) - (9)].real); @@ -4472,7 +4473,7 @@ yyreduce: case 238: /* Line 1455 of yacc.c */ -#line 1913 "program_parse.y" +#line 1914 "program_parse.y" { (yyval.real) = ((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].real) : (yyvsp[(2) - (2)].real); ;} @@ -4481,7 +4482,7 @@ yyreduce: case 239: /* Line 1455 of yacc.c */ -#line 1917 "program_parse.y" +#line 1918 "program_parse.y" { (yyval.real) = (float)(((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].integer) : (yyvsp[(2) - (2)].integer)); ;} @@ -4490,35 +4491,35 @@ yyreduce: case 240: /* Line 1455 of yacc.c */ -#line 1922 "program_parse.y" +#line 1923 "program_parse.y" { (yyval.negate) = FALSE; ;} break; case 241: /* Line 1455 of yacc.c */ -#line 1923 "program_parse.y" +#line 1924 "program_parse.y" { (yyval.negate) = TRUE; ;} break; case 242: /* Line 1455 of yacc.c */ -#line 1924 "program_parse.y" +#line 1925 "program_parse.y" { (yyval.negate) = FALSE; ;} break; case 243: /* Line 1455 of yacc.c */ -#line 1927 "program_parse.y" +#line 1928 "program_parse.y" { (yyval.integer) = (yyvsp[(2) - (2)].integer); ;} break; case 245: /* Line 1455 of yacc.c */ -#line 1931 "program_parse.y" +#line 1932 "program_parse.y" { /* NV_fragment_program_option defines the size qualifiers in a * fairly broken way. "SHORT" or "LONG" can optionally be used @@ -4557,7 +4558,7 @@ yyreduce: case 246: /* Line 1455 of yacc.c */ -#line 1965 "program_parse.y" +#line 1966 "program_parse.y" { ;} break; @@ -4565,14 +4566,14 @@ yyreduce: case 247: /* Line 1455 of yacc.c */ -#line 1969 "program_parse.y" +#line 1970 "program_parse.y" { (yyval.integer) = (yyvsp[(1) - (1)].integer); ;} break; case 249: /* Line 1455 of yacc.c */ -#line 1973 "program_parse.y" +#line 1974 "program_parse.y" { if (!declare_variable(state, (yyvsp[(3) - (3)].string), (yyvsp[(0) - (3)].integer), & (yylsp[(3) - (3)]))) { free((yyvsp[(3) - (3)].string)); @@ -4584,7 +4585,7 @@ yyreduce: case 250: /* Line 1455 of yacc.c */ -#line 1980 "program_parse.y" +#line 1981 "program_parse.y" { if (!declare_variable(state, (yyvsp[(1) - (1)].string), (yyvsp[(0) - (1)].integer), & (yylsp[(1) - (1)]))) { free((yyvsp[(1) - (1)].string)); @@ -4596,7 +4597,7 @@ yyreduce: case 251: /* Line 1455 of yacc.c */ -#line 1989 "program_parse.y" +#line 1990 "program_parse.y" { struct asm_symbol *const s = declare_variable(state, (yyvsp[(3) - (5)].string), at_output, & (yylsp[(3) - (5)])); @@ -4613,7 +4614,7 @@ yyreduce: case 252: /* Line 1455 of yacc.c */ -#line 2003 "program_parse.y" +#line 2004 "program_parse.y" { if (state->mode == ARB_vertex) { (yyval.result) = VERT_RESULT_HPOS; @@ -4627,7 +4628,7 @@ yyreduce: case 253: /* Line 1455 of yacc.c */ -#line 2012 "program_parse.y" +#line 2013 "program_parse.y" { if (state->mode == ARB_vertex) { (yyval.result) = VERT_RESULT_FOGC; @@ -4641,7 +4642,7 @@ yyreduce: case 254: /* Line 1455 of yacc.c */ -#line 2021 "program_parse.y" +#line 2022 "program_parse.y" { (yyval.result) = (yyvsp[(2) - (2)].result); ;} @@ -4650,7 +4651,7 @@ yyreduce: case 255: /* Line 1455 of yacc.c */ -#line 2025 "program_parse.y" +#line 2026 "program_parse.y" { if (state->mode == ARB_vertex) { (yyval.result) = VERT_RESULT_PSIZ; @@ -4664,7 +4665,7 @@ yyreduce: case 256: /* Line 1455 of yacc.c */ -#line 2034 "program_parse.y" +#line 2035 "program_parse.y" { if (state->mode == ARB_vertex) { (yyval.result) = VERT_RESULT_TEX0 + (yyvsp[(3) - (3)].integer); @@ -4678,7 +4679,7 @@ yyreduce: case 257: /* Line 1455 of yacc.c */ -#line 2043 "program_parse.y" +#line 2044 "program_parse.y" { if (state->mode == ARB_fragment) { (yyval.result) = FRAG_RESULT_DEPTH; @@ -4692,7 +4693,7 @@ yyreduce: case 258: /* Line 1455 of yacc.c */ -#line 2054 "program_parse.y" +#line 2055 "program_parse.y" { (yyval.result) = (yyvsp[(2) - (3)].integer) + (yyvsp[(3) - (3)].integer); ;} @@ -4701,7 +4702,7 @@ yyreduce: case 259: /* Line 1455 of yacc.c */ -#line 2060 "program_parse.y" +#line 2061 "program_parse.y" { (yyval.integer) = (state->mode == ARB_vertex) ? VERT_RESULT_COL0 @@ -4712,7 +4713,7 @@ yyreduce: case 260: /* Line 1455 of yacc.c */ -#line 2066 "program_parse.y" +#line 2067 "program_parse.y" { if (state->mode == ARB_vertex) { (yyval.integer) = VERT_RESULT_COL0; @@ -4726,7 +4727,7 @@ yyreduce: case 261: /* Line 1455 of yacc.c */ -#line 2075 "program_parse.y" +#line 2076 "program_parse.y" { if (state->mode == ARB_vertex) { (yyval.integer) = VERT_RESULT_BFC0; @@ -4740,7 +4741,7 @@ yyreduce: case 262: /* Line 1455 of yacc.c */ -#line 2086 "program_parse.y" +#line 2087 "program_parse.y" { (yyval.integer) = 0; ;} @@ -4749,7 +4750,7 @@ yyreduce: case 263: /* Line 1455 of yacc.c */ -#line 2090 "program_parse.y" +#line 2091 "program_parse.y" { if (state->mode == ARB_vertex) { (yyval.integer) = 0; @@ -4763,7 +4764,7 @@ yyreduce: case 264: /* Line 1455 of yacc.c */ -#line 2099 "program_parse.y" +#line 2100 "program_parse.y" { if (state->mode == ARB_vertex) { (yyval.integer) = 1; @@ -4777,91 +4778,91 @@ yyreduce: case 265: /* Line 1455 of yacc.c */ -#line 2109 "program_parse.y" +#line 2110 "program_parse.y" { (yyval.integer) = 0; ;} break; case 266: /* Line 1455 of yacc.c */ -#line 2110 "program_parse.y" +#line 2111 "program_parse.y" { (yyval.integer) = 0; ;} break; case 267: /* Line 1455 of yacc.c */ -#line 2111 "program_parse.y" +#line 2112 "program_parse.y" { (yyval.integer) = 1; ;} break; case 268: /* Line 1455 of yacc.c */ -#line 2114 "program_parse.y" +#line 2115 "program_parse.y" { (yyval.integer) = 0; ;} break; case 269: /* Line 1455 of yacc.c */ -#line 2115 "program_parse.y" +#line 2116 "program_parse.y" { (yyval.integer) = 0; ;} break; case 270: /* Line 1455 of yacc.c */ -#line 2116 "program_parse.y" +#line 2117 "program_parse.y" { (yyval.integer) = 1; ;} break; case 271: /* Line 1455 of yacc.c */ -#line 2119 "program_parse.y" +#line 2120 "program_parse.y" { (yyval.integer) = 0; ;} break; case 272: /* Line 1455 of yacc.c */ -#line 2120 "program_parse.y" +#line 2121 "program_parse.y" { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;} break; case 273: /* Line 1455 of yacc.c */ -#line 2123 "program_parse.y" +#line 2124 "program_parse.y" { (yyval.integer) = 0; ;} break; case 274: /* Line 1455 of yacc.c */ -#line 2124 "program_parse.y" +#line 2125 "program_parse.y" { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;} break; case 275: /* Line 1455 of yacc.c */ -#line 2127 "program_parse.y" +#line 2128 "program_parse.y" { (yyval.integer) = 0; ;} break; case 276: /* Line 1455 of yacc.c */ -#line 2128 "program_parse.y" +#line 2129 "program_parse.y" { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;} break; case 277: /* Line 1455 of yacc.c */ -#line 2132 "program_parse.y" +#line 2133 "program_parse.y" { if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureCoordUnits) { yyerror(& (yylsp[(1) - (1)]), state, "invalid texture coordinate unit selector"); @@ -4875,7 +4876,7 @@ yyreduce: case 278: /* Line 1455 of yacc.c */ -#line 2143 "program_parse.y" +#line 2144 "program_parse.y" { if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureImageUnits) { yyerror(& (yylsp[(1) - (1)]), state, "invalid texture image unit selector"); @@ -4889,7 +4890,7 @@ yyreduce: case 279: /* Line 1455 of yacc.c */ -#line 2154 "program_parse.y" +#line 2155 "program_parse.y" { if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureUnits) { yyerror(& (yylsp[(1) - (1)]), state, "invalid texture unit selector"); @@ -4903,7 +4904,7 @@ yyreduce: case 280: /* Line 1455 of yacc.c */ -#line 2165 "program_parse.y" +#line 2166 "program_parse.y" { struct asm_symbol *exist = (struct asm_symbol *) _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(2) - (4)].string)); @@ -4932,7 +4933,7 @@ yyreduce: /* Line 1455 of yacc.c */ -#line 4936 "program_parse.tab.c" +#line 4937 "program_parse.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -5151,7 +5152,7 @@ yyreturn: /* Line 1675 of yacc.c */ -#line 2194 "program_parse.y" +#line 2195 "program_parse.y" void @@ -5258,7 +5259,9 @@ set_dst_reg(struct prog_dst_register *r, gl_register_file file, GLint index) const GLint maxIndex = 1 << INST_INDEX_BITS; const GLint minIndex = 0; ASSERT(index >= minIndex); + (void) minIndex; ASSERT(index <= maxIndex); + (void) maxIndex; ASSERT(file == PROGRAM_TEMPORARY || file == PROGRAM_ADDRESS || file == PROGRAM_OUTPUT); @@ -5299,7 +5302,9 @@ set_src_reg_swz(struct asm_src_register *r, gl_register_file file, GLint index, const GLint minIndex = -(1 << INST_INDEX_BITS); ASSERT(file < PROGRAM_FILE_MAX); ASSERT(index >= minIndex); + (void) minIndex; ASSERT(index <= maxIndex); + (void) maxIndex; memset(r, 0, sizeof(*r)); r->Base.File = file; r->Base.Index = index; @@ -5513,23 +5518,28 @@ initialize_symbol_from_param(struct gl_program *prog, * \param param_var returns info about the parameter/constant's location, * binding, type, etc. * \param vec the vector/constant to add + * \param allowSwizzle if true, try to consolidate constants which only differ + * by a swizzle. We don't want to do this when building + * arrays of constants that may be indexed indirectly. * \return index of the constant in the parameter list. */ int initialize_symbol_from_const(struct gl_program *prog, struct asm_symbol *param_var, - const struct asm_vector *vec) + const struct asm_vector *vec, + GLboolean allowSwizzle) { unsigned swizzle; const int idx = _mesa_add_unnamed_constant(prog->Parameters, - vec->data, vec->count, &swizzle); + vec->data, vec->count, + allowSwizzle ? &swizzle : NULL); param_var->type = at_param; param_var->param_binding_type = PROGRAM_CONSTANT; if (param_var->param_binding_begin == ~0U) { param_var->param_binding_begin = idx; - param_var->param_binding_swizzle = swizzle; + param_var->param_binding_swizzle = allowSwizzle ? swizzle : SWIZZLE_XYZW; } param_var->param_binding_length++; diff --git a/src/mesa/shader/program_parse.tab.h b/src/mesa/shader/program_parse.tab.h index d8712b7268..045241d9e7 100644 --- a/src/mesa/shader/program_parse.tab.h +++ b/src/mesa/shader/program_parse.tab.h @@ -154,7 +154,7 @@ typedef union YYSTYPE { /* Line 1676 of yacc.c */ -#line 125 "program_parse.y" +#line 126 "program_parse.y" struct asm_instruction *inst; struct asm_symbol *sym; -- cgit v1.2.3 From f0f68b1e4c3d3d23fc9a7d624a465537b2e74d6c Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Tue, 5 Jan 2010 10:53:44 -0700 Subject: ARB prog parser: fix parameter binding type References to program local and enviroment parameters are put into the unified program parameters list as PROGRAM_STATE_VAR entries which point into the local or environment arrays. So the param_binding_type field should be PROGRAM_STATE_VAR. This fixes the piglit vpfp-generic vp-arl-env-array.vpfp and vp-arl-local-array.vpfp test failures. --- src/mesa/shader/program_parse.y | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/mesa/shader/program_parse.y b/src/mesa/shader/program_parse.y index be8c841e3d..5c5d8d7590 100644 --- a/src/mesa/shader/program_parse.y +++ b/src/mesa/shader/program_parse.y @@ -2516,9 +2516,12 @@ initialize_symbol_from_param(struct gl_program *prog, assert((state_tokens[1] == STATE_ENV) || (state_tokens[1] == STATE_LOCAL)); + /* + * The param type is STATE_VAR. The program parameter entry will + * effectively be a pointer into the LOCAL or ENV parameter array. + */ param_var->type = at_param; - param_var->param_binding_type = (state_tokens[1] == STATE_ENV) - ? PROGRAM_ENV_PARAM : PROGRAM_LOCAL_PARAM; + param_var->param_binding_type = PROGRAM_STATE_VAR; /* If we are adding a STATE_ENV or STATE_LOCAL that has multiple elements, * we need to unroll it and call add_state_reference() for each row -- cgit v1.2.3 From 487a14b476d5e01bd03f50bc45fd3dfc59aa609c Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Tue, 5 Jan 2010 10:56:57 -0700 Subject: ARB prog parser: regenerated parser file --- src/mesa/shader/program_parse.tab.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/mesa/shader/program_parse.tab.c b/src/mesa/shader/program_parse.tab.c index cc490bea6d..b12dcee9df 100644 --- a/src/mesa/shader/program_parse.tab.c +++ b/src/mesa/shader/program_parse.tab.c @@ -5477,9 +5477,12 @@ initialize_symbol_from_param(struct gl_program *prog, assert((state_tokens[1] == STATE_ENV) || (state_tokens[1] == STATE_LOCAL)); + /* + * The param type is STATE_VAR. The program parameter entry will + * effectively be a pointer into the LOCAL or ENV parameter array. + */ param_var->type = at_param; - param_var->param_binding_type = (state_tokens[1] == STATE_ENV) - ? PROGRAM_ENV_PARAM : PROGRAM_LOCAL_PARAM; + param_var->param_binding_type = PROGRAM_STATE_VAR; /* If we are adding a STATE_ENV or STATE_LOCAL that has multiple elements, * we need to unroll it and call add_state_reference() for each row -- cgit v1.2.3 From 9f544394c1d059ce09c8bb2b5e11f5e871c7915f Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Tue, 5 Jan 2010 11:40:24 -0700 Subject: st/mesa: fix broken translation of negative register indexes A src register's index can be negative if we're doing indirect addressing into the constant buffer. Ex: MOV OUT[1], CONST[ADDR[0].x-3] This fixes the piglit vp-arl-neg-array.vpfp test. Before this change we were going out of bounds of the t->constants[] array and getting garbage that later triggered an assertion. --- src/mesa/state_tracker/st_mesa_to_tgsi.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/mesa/state_tracker/st_mesa_to_tgsi.c b/src/mesa/state_tracker/st_mesa_to_tgsi.c index a805251c46..0b7786c217 100644 --- a/src/mesa/state_tracker/st_mesa_to_tgsi.c +++ b/src/mesa/state_tracker/st_mesa_to_tgsi.c @@ -160,13 +160,14 @@ dst_register( struct st_translate *t, static struct ureg_src src_register( struct st_translate *t, gl_register_file file, - GLuint index ) + GLint index ) { switch( file ) { case PROGRAM_UNDEFINED: return ureg_src_undef(); case PROGRAM_TEMPORARY: + ASSERT(index >= 0); if (ureg_dst_is_undef(t->temps[index])) t->temps[index] = ureg_DECL_temporary( t->ureg ); return ureg_src(t->temps[index]); @@ -176,8 +177,13 @@ src_register( struct st_translate *t, case PROGRAM_ENV_PARAM: case PROGRAM_LOCAL_PARAM: case PROGRAM_UNIFORM: - case PROGRAM_CONSTANT: /* ie, immediate */ + ASSERT(index >= 0); return t->constants[index]; + case PROGRAM_CONSTANT: /* ie, immediate */ + if (index < 0) + return ureg_DECL_constant( t->ureg, 0 ); + else + return t->constants[index]; case PROGRAM_INPUT: return t->inputs[t->inputMapping[index]]; @@ -264,9 +270,14 @@ translate_src( struct st_translate *t, if (SrcReg->Abs) src = ureg_abs(src); - if (SrcReg->RelAddr) + if (SrcReg->RelAddr) { src = ureg_src_indirect( src, ureg_src(t->address[0])); - + /* If SrcReg->Index was negative, it was set to zero in + * src_register(). Reassign it now. + */ + src.Index = SrcReg->Index; + } + return src; } @@ -806,6 +817,7 @@ st_translate_mesa_program( for (i = 0; i < program->Parameters->NumParameters; i++) { switch (program->Parameters->Parameters[i].Type) { case PROGRAM_ENV_PARAM: + case PROGRAM_LOCAL_PARAM: case PROGRAM_STATE_VAR: case PROGRAM_NAMED_PARAM: case PROGRAM_UNIFORM: -- cgit v1.2.3 From 766f3ccbda7def1a81a3d07002e500e8bb1a898e Mon Sep 17 00:00:00 2001 From: Roel Kluin Date: Tue, 5 Jan 2010 13:40:40 -0800 Subject: tdfx: condition always evaluates to false in SetupDoubleTexEnvVoodoo3() This can never be true. Signed-off-by: Roel Kluin --- src/mesa/drivers/dri/tdfx/tdfx_texstate.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/mesa/drivers/dri/tdfx/tdfx_texstate.c b/src/mesa/drivers/dri/tdfx/tdfx_texstate.c index bbd2c8cfee..3f737878ed 100644 --- a/src/mesa/drivers/dri/tdfx/tdfx_texstate.c +++ b/src/mesa/drivers/dri/tdfx/tdfx_texstate.c @@ -1314,7 +1314,7 @@ SetupDoubleTexEnvVoodoo3(GLcontext *ctx, int tmu0, fxMesa->TexCombine[0].InvertRGB = FXFALSE; fxMesa->TexCombine[0].InvertAlpha = FXFALSE; - if ((baseFormat0 == GL_RGB) && (baseFormat0 == GL_LUMINANCE)) { + if ((baseFormat0 == GL_RGB) || (baseFormat0 == GL_LUMINANCE)) { fxMesa->AlphaCombine.Function = GR_COMBINE_FUNCTION_LOCAL; fxMesa->AlphaCombine.Factor = GR_COMBINE_FACTOR_NONE; fxMesa->AlphaCombine.Local = locala; -- cgit v1.2.3 From e555146fa35c897554a1af2d010187a6acccdd59 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Tue, 5 Jan 2010 15:53:01 -0700 Subject: i965: fix invalid assertion in emit_xpd() Invalid assertion found by Roel Kluin --- src/mesa/drivers/dri/i965/brw_wm_emit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/mesa/drivers/dri/i965/brw_wm_emit.c b/src/mesa/drivers/dri/i965/brw_wm_emit.c index 66fb611d50..4a30028480 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_emit.c +++ b/src/mesa/drivers/dri/i965/brw_wm_emit.c @@ -692,7 +692,7 @@ void emit_xpd(struct brw_compile *p, { GLuint i; - assert(!(mask & WRITEMASK_W) == WRITEMASK_X); + assert(!(mask & WRITEMASK_W) == WRITEMASK_W); for (i = 0 ; i < 3; i++) { if (mask & (1< Date: Tue, 5 Jan 2010 20:41:29 +0000 Subject: pipebuffer: Multi-threading fixes for fencing. I had this patch on my hard drive for long time. It doesn't fully address SVGA multi-threading issues, but causes no regressions, so decided to commit while it still applies cleanly. Attention: merging this into master will cause issues due to recent changes in reference counting to fix strict aliasing rules violation. --- .../auxiliary/pipebuffer/pb_buffer_fenced.c | 281 +++++++++++++-------- 1 file changed, 170 insertions(+), 111 deletions(-) (limited to 'src') diff --git a/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c b/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c index 2ef4293d4d..1ee2bf9b7c 100644 --- a/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c +++ b/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c @@ -80,11 +80,27 @@ struct fenced_buffer_list */ struct fenced_buffer { + /* + * Immutable members. + */ + struct pb_buffer base; - struct pb_buffer *buffer; + struct fenced_buffer_list *list; + + /** + * Protected by fenced_buffer_list::mutex + */ + struct list_head head; - /* FIXME: protect access with mutex */ + /** + * Following members are mutable and protected by this mutex. + * + * You may lock this mutex alone, or lock it with fenced_buffer_list::mutex + * held, but in order to prevent deadlocks you must never lock + * fenced_buffer_list::mutex with this mutex held. + */ + pipe_mutex mutex; /** * A bitmask of PIPE_BUFFER_USAGE_CPU/GPU_READ/WRITE describing the current @@ -96,9 +112,6 @@ struct fenced_buffer struct pb_validate *vl; unsigned validation_flags; struct pipe_fence_handle *fence; - - struct list_head head; - struct fenced_buffer_list *list; }; @@ -110,15 +123,24 @@ fenced_buffer(struct pb_buffer *buf) } +/** + * Add the buffer to the fenced list. + * + * fenced_buffer_list::mutex and fenced_buffer::mutex must be held, in this + * order, before calling this function. + * + * Reference count should be incremented before calling this function. + */ static INLINE void -_fenced_buffer_add(struct fenced_buffer *fenced_buf) +fenced_buffer_add_locked(struct fenced_buffer_list *fenced_list, + struct fenced_buffer *fenced_buf) { - struct fenced_buffer_list *fenced_list = fenced_buf->list; - assert(pipe_is_referenced(&fenced_buf->base.base.reference)); assert(fenced_buf->flags & PIPE_BUFFER_USAGE_GPU_READ_WRITE); assert(fenced_buf->fence); + /* TODO: Move the reference count increment here */ + #ifdef DEBUG LIST_DEL(&fenced_buf->head); assert(fenced_list->numUnfenced); @@ -130,32 +152,16 @@ _fenced_buffer_add(struct fenced_buffer *fenced_buf) /** - * Actually destroy the buffer. + * Remove the buffer from the fenced list. + * + * fenced_buffer_list::mutex and fenced_buffer::mutex must be held, in this + * order before calling this function. + * + * Reference count should be decremented after calling this function. */ static INLINE void -_fenced_buffer_destroy(struct fenced_buffer *fenced_buf) -{ - struct fenced_buffer_list *fenced_list = fenced_buf->list; - - assert(!pipe_is_referenced(&fenced_buf->base.base.reference)); - assert(!fenced_buf->fence); -#ifdef DEBUG - assert(fenced_buf->head.prev); - assert(fenced_buf->head.next); - LIST_DEL(&fenced_buf->head); - assert(fenced_list->numUnfenced); - --fenced_list->numUnfenced; -#else - (void)fenced_list; -#endif - pb_reference(&fenced_buf->buffer, NULL); - FREE(fenced_buf); -} - - -static INLINE void -_fenced_buffer_remove(struct fenced_buffer_list *fenced_list, - struct fenced_buffer *fenced_buf) +fenced_buffer_remove_locked(struct fenced_buffer_list *fenced_list, + struct fenced_buffer *fenced_buf) { struct pb_fence_ops *ops = fenced_list->ops; @@ -177,37 +183,56 @@ _fenced_buffer_remove(struct fenced_buffer_list *fenced_list, ++fenced_list->numUnfenced; #endif - /** - * FIXME!!! - */ - - if(!pipe_is_referenced(&fenced_buf->base.base.reference)) - _fenced_buffer_destroy(fenced_buf); + /* TODO: Move the reference count decrement and destruction here */ } +/** + * Wait for the fence to expire, and remove it from the fenced list. + * + * fenced_buffer::mutex must be held. fenced_buffer_list::mutex must not be + * held -- it will be acquired internally. + */ static INLINE enum pipe_error -_fenced_buffer_finish(struct fenced_buffer *fenced_buf) +fenced_buffer_finish_locked(struct fenced_buffer_list *fenced_list, + struct fenced_buffer *fenced_buf) { - struct fenced_buffer_list *fenced_list = fenced_buf->list; struct pb_fence_ops *ops = fenced_list->ops; + enum pipe_error ret = PIPE_ERROR; #if 0 debug_warning("waiting for GPU"); #endif + assert(pipe_is_referenced(&fenced_buf->base.base.reference)); assert(fenced_buf->fence); + + /* + * Acquire the global lock. Must release buffer mutex first to preserve + * lock order. + */ + pipe_mutex_unlock(fenced_buf->mutex); + pipe_mutex_lock(fenced_list->mutex); + pipe_mutex_lock(fenced_buf->mutex); + if(fenced_buf->fence) { - if(ops->fence_finish(ops, fenced_buf->fence, 0) != 0) { - return PIPE_ERROR; + if(ops->fence_finish(ops, fenced_buf->fence, 0) == 0) { + /* Remove from the fenced list */ + /* TODO: remove consequents */ + fenced_buffer_remove_locked(fenced_list, fenced_buf); + + p_atomic_dec(&fenced_buf->base.base.reference.count); + assert(pipe_is_referenced(&fenced_buf->base.base.reference)); + + fenced_buf->flags &= ~PIPE_BUFFER_USAGE_GPU_READ_WRITE; + + ret = PIPE_OK; } - /* Remove from the fenced list */ - /* TODO: remove consequents */ - _fenced_buffer_remove(fenced_list, fenced_buf); } - fenced_buf->flags &= ~PIPE_BUFFER_USAGE_GPU_READ_WRITE; - return PIPE_OK; + pipe_mutex_unlock(fenced_list->mutex); + + return ret; } @@ -215,8 +240,8 @@ _fenced_buffer_finish(struct fenced_buffer *fenced_buf) * Free as many fenced buffers from the list head as possible. */ static void -_fenced_buffer_list_check_free(struct fenced_buffer_list *fenced_list, - int wait) +fenced_buffer_list_check_free_locked(struct fenced_buffer_list *fenced_list, + int wait) { struct pb_fence_ops *ops = fenced_list->ops; struct list_head *curr, *next; @@ -228,21 +253,28 @@ _fenced_buffer_list_check_free(struct fenced_buffer_list *fenced_list, while(curr != &fenced_list->delayed) { fenced_buf = LIST_ENTRY(struct fenced_buffer, curr, head); + pipe_mutex_lock(fenced_buf->mutex); + if(fenced_buf->fence != prev_fence) { int signaled; if (wait) signaled = ops->fence_finish(ops, fenced_buf->fence, 0); else signaled = ops->fence_signalled(ops, fenced_buf->fence, 0); - if (signaled != 0) + if (signaled != 0) { + pipe_mutex_unlock(fenced_buf->mutex); break; + } prev_fence = fenced_buf->fence; } else { assert(ops->fence_signalled(ops, fenced_buf->fence, 0) == 0); } - _fenced_buffer_remove(fenced_list, fenced_buf); + fenced_buffer_remove_locked(fenced_list, fenced_buf); + pipe_mutex_unlock(fenced_buf->mutex); + + pb_reference((struct pb_buffer **)&fenced_buf, NULL); curr = next; next = curr->next; @@ -256,30 +288,25 @@ fenced_buffer_destroy(struct pb_buffer *buf) struct fenced_buffer *fenced_buf = fenced_buffer(buf); struct fenced_buffer_list *fenced_list = fenced_buf->list; - pipe_mutex_lock(fenced_list->mutex); assert(!pipe_is_referenced(&fenced_buf->base.base.reference)); - if (fenced_buf->fence) { - struct pb_fence_ops *ops = fenced_list->ops; - if(ops->fence_signalled(ops, fenced_buf->fence, 0) == 0) { - struct list_head *curr, *prev; - curr = &fenced_buf->head; - prev = curr->prev; - do { - fenced_buf = LIST_ENTRY(struct fenced_buffer, curr, head); - assert(ops->fence_signalled(ops, fenced_buf->fence, 0) == 0); - _fenced_buffer_remove(fenced_list, fenced_buf); - curr = prev; - prev = curr->prev; - } while (curr != &fenced_list->delayed); - } - else { - /* delay destruction */ - } - } - else { - _fenced_buffer_destroy(fenced_buf); - } + assert(!fenced_buf->fence); + +#ifdef DEBUG + pipe_mutex_lock(fenced_list->mutex); + assert(fenced_buf->head.prev); + assert(fenced_buf->head.next); + LIST_DEL(&fenced_buf->head); + assert(fenced_list->numUnfenced); + --fenced_list->numUnfenced; pipe_mutex_unlock(fenced_list->mutex); +#else + (void)fenced_list; +#endif + + pb_reference(&fenced_buf->buffer, NULL); + + pipe_mutex_destroy(fenced_buf->mutex); + FREE(fenced_buf); } @@ -290,24 +317,23 @@ fenced_buffer_map(struct pb_buffer *buf, struct fenced_buffer *fenced_buf = fenced_buffer(buf); struct fenced_buffer_list *fenced_list = fenced_buf->list; struct pb_fence_ops *ops = fenced_list->ops; - void *map; + void *map = NULL; + + pipe_mutex_lock(fenced_buf->mutex); assert(!(flags & PIPE_BUFFER_USAGE_GPU_READ_WRITE)); /* Serialize writes */ if((fenced_buf->flags & PIPE_BUFFER_USAGE_GPU_WRITE) || ((fenced_buf->flags & PIPE_BUFFER_USAGE_GPU_READ) && (flags & PIPE_BUFFER_USAGE_CPU_WRITE))) { - if(flags & PIPE_BUFFER_USAGE_DONTBLOCK) { + if((flags & PIPE_BUFFER_USAGE_DONTBLOCK) && + ops->fence_signalled(ops, fenced_buf->fence, 0) == 0) { /* Don't wait for the GPU to finish writing */ - if(ops->fence_signalled(ops, fenced_buf->fence, 0) == 0) - _fenced_buffer_remove(fenced_list, fenced_buf); - else - return NULL; - } - else { - /* Wait for the GPU to finish writing */ - _fenced_buffer_finish(fenced_buf); + goto done; } + + /* Wait for the GPU to finish writing */ + fenced_buffer_finish_locked(fenced_list, fenced_buf); } #if 0 @@ -324,6 +350,9 @@ fenced_buffer_map(struct pb_buffer *buf, fenced_buf->flags |= flags & PIPE_BUFFER_USAGE_CPU_READ_WRITE; } +done: + pipe_mutex_unlock(fenced_buf->mutex); + return map; } @@ -332,6 +361,9 @@ static void fenced_buffer_unmap(struct pb_buffer *buf) { struct fenced_buffer *fenced_buf = fenced_buffer(buf); + + pipe_mutex_lock(fenced_buf->mutex); + assert(fenced_buf->mapcount); if(fenced_buf->mapcount) { pb_unmap(fenced_buf->buffer); @@ -339,6 +371,8 @@ fenced_buffer_unmap(struct pb_buffer *buf) if(!fenced_buf->mapcount) fenced_buf->flags &= ~PIPE_BUFFER_USAGE_CPU_READ_WRITE; } + + pipe_mutex_unlock(fenced_buf->mutex); } @@ -350,11 +384,14 @@ fenced_buffer_validate(struct pb_buffer *buf, struct fenced_buffer *fenced_buf = fenced_buffer(buf); enum pipe_error ret; + pipe_mutex_lock(fenced_buf->mutex); + if(!vl) { /* invalidate */ fenced_buf->vl = NULL; fenced_buf->validation_flags = 0; - return PIPE_OK; + ret = PIPE_OK; + goto done; } assert(flags & PIPE_BUFFER_USAGE_GPU_READ_WRITE); @@ -362,14 +399,17 @@ fenced_buffer_validate(struct pb_buffer *buf, flags &= PIPE_BUFFER_USAGE_GPU_READ_WRITE; /* Buffer cannot be validated in two different lists */ - if(fenced_buf->vl && fenced_buf->vl != vl) - return PIPE_ERROR_RETRY; + if(fenced_buf->vl && fenced_buf->vl != vl) { + ret = PIPE_ERROR_RETRY; + goto done; + } #if 0 /* Do not validate if buffer is still mapped */ if(fenced_buf->flags & PIPE_BUFFER_USAGE_CPU_READ_WRITE) { /* TODO: wait for the thread that mapped the buffer to unmap it */ - return PIPE_ERROR_RETRY; + ret = PIPE_ERROR_RETRY; + goto done; } /* Final sanity checking */ assert(!(fenced_buf->flags & PIPE_BUFFER_USAGE_CPU_READ_WRITE)); @@ -379,17 +419,21 @@ fenced_buffer_validate(struct pb_buffer *buf, if(fenced_buf->vl == vl && (fenced_buf->validation_flags & flags) == flags) { /* Nothing to do -- buffer already validated */ - return PIPE_OK; + ret = PIPE_OK; + goto done; } ret = pb_validate(fenced_buf->buffer, vl, flags); if (ret != PIPE_OK) - return ret; + goto done; fenced_buf->vl = vl; fenced_buf->validation_flags |= flags; - return PIPE_OK; +done: + pipe_mutex_unlock(fenced_buf->mutex); + + return ret; } @@ -404,29 +448,36 @@ fenced_buffer_fence(struct pb_buffer *buf, fenced_buf = fenced_buffer(buf); fenced_list = fenced_buf->list; ops = fenced_list->ops; - - if(fence == fenced_buf->fence) { - /* Nothing to do */ - return; - } - assert(fenced_buf->vl); - assert(fenced_buf->validation_flags); - pipe_mutex_lock(fenced_list->mutex); - if (fenced_buf->fence) - _fenced_buffer_remove(fenced_list, fenced_buf); - if (fence) { - ops->fence_reference(ops, &fenced_buf->fence, fence); - fenced_buf->flags |= fenced_buf->validation_flags; - _fenced_buffer_add(fenced_buf); - } - pipe_mutex_unlock(fenced_list->mutex); + pipe_mutex_lock(fenced_buf->mutex); + + assert(pipe_is_referenced(&fenced_buf->base.base.reference)); + + if(fence != fenced_buf->fence) { + assert(fenced_buf->vl); + assert(fenced_buf->validation_flags); + + if (fenced_buf->fence) { + fenced_buffer_remove_locked(fenced_list, fenced_buf); + p_atomic_dec(&fenced_buf->base.base.reference.count); + assert(pipe_is_referenced(&fenced_buf->base.base.reference)); + } + if (fence) { + ops->fence_reference(ops, &fenced_buf->fence, fence); + fenced_buf->flags |= fenced_buf->validation_flags; + p_atomic_inc(&fenced_buf->base.base.reference.count); + fenced_buffer_add_locked(fenced_list, fenced_buf); + } + + pb_fence(fenced_buf->buffer, fence); - pb_fence(fenced_buf->buffer, fence); + fenced_buf->vl = NULL; + fenced_buf->validation_flags = 0; + } - fenced_buf->vl = NULL; - fenced_buf->validation_flags = 0; + pipe_mutex_unlock(fenced_buf->mutex); + pipe_mutex_unlock(fenced_list->mutex); } @@ -436,6 +487,7 @@ fenced_buffer_get_base_buffer(struct pb_buffer *buf, pb_size *offset) { struct fenced_buffer *fenced_buf = fenced_buffer(buf); + /* NOTE: accesses immutable members only -- mutex not necessary */ pb_get_base_buffer(fenced_buf->buffer, base_buf, offset); } @@ -475,6 +527,8 @@ fenced_buffer_create(struct fenced_buffer_list *fenced_list, buf->buffer = buffer; buf->list = fenced_list; + pipe_mutex_init(buf->mutex); + #ifdef DEBUG pipe_mutex_lock(fenced_list->mutex); LIST_ADDTAIL(&buf->head, &fenced_list->unfenced); @@ -516,7 +570,7 @@ fenced_buffer_list_check_free(struct fenced_buffer_list *fenced_list, int wait) { pipe_mutex_lock(fenced_list->mutex); - _fenced_buffer_list_check_free(fenced_list, wait); + fenced_buffer_list_check_free_locked(fenced_list, wait); pipe_mutex_unlock(fenced_list->mutex); } @@ -538,11 +592,13 @@ fenced_buffer_list_dump(struct fenced_buffer_list *fenced_list) next = curr->next; while(curr != &fenced_list->unfenced) { fenced_buf = LIST_ENTRY(struct fenced_buffer, curr, head); + pipe_mutex_lock(fenced_buf->mutex); assert(!fenced_buf->fence); debug_printf("%10p %7u %7u\n", (void *) fenced_buf, fenced_buf->base.base.size, p_atomic_read(&fenced_buf->base.base.reference.count)); + pipe_mutex_unlock(fenced_buf->mutex); curr = next; next = curr->next; } @@ -552,6 +608,7 @@ fenced_buffer_list_dump(struct fenced_buffer_list *fenced_list) while(curr != &fenced_list->delayed) { int signaled; fenced_buf = LIST_ENTRY(struct fenced_buffer, curr, head); + pipe_mutex_lock(fenced_buf->mutex); signaled = ops->fence_signalled(ops, fenced_buf->fence, 0); debug_printf("%10p %7u %7u %10p %s\n", (void *) fenced_buf, @@ -559,6 +616,7 @@ fenced_buffer_list_dump(struct fenced_buffer_list *fenced_list) p_atomic_read(&fenced_buf->base.base.reference.count), (void *) fenced_buf->fence, signaled == 0 ? "y" : "n"); + pipe_mutex_unlock(fenced_buf->mutex); curr = next; next = curr->next; } @@ -579,8 +637,8 @@ fenced_buffer_list_destroy(struct fenced_buffer_list *fenced_list) #if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD) || defined(PIPE_OS_SOLARIS) sched_yield(); #endif - _fenced_buffer_list_check_free(fenced_list, 1); pipe_mutex_lock(fenced_list->mutex); + fenced_buffer_list_check_free_locked(fenced_list, 1); } #ifdef DEBUG @@ -588,6 +646,7 @@ fenced_buffer_list_destroy(struct fenced_buffer_list *fenced_list) #endif pipe_mutex_unlock(fenced_list->mutex); + pipe_mutex_destroy(fenced_list->mutex); fenced_list->ops->destroy(fenced_list->ops); -- cgit v1.2.3