diff options
author | José Fonseca <[email protected]> | 2010-01-06 13:52:22 +0000 |
---|---|---|
committer | José Fonseca <[email protected]> | 2010-01-06 13:52:22 +0000 |
commit | e32487b8a13a9efabb0359a9dde33e074e905e82 (patch) | |
tree | fbfdb33273371a5faec1de4ff97b803766eacf63 | |
parent | aaf7ecfd816f82fef314f4f772cc53bc0ced553e (diff) | |
parent | 5b64d94390e4805e1634f0c8b5e3156e12b8b872 (diff) |
Merge remote branch 'origin/mesa_7_7_branch'
Conflicts:
configs/default
src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c
src/mesa/main/version.h
-rw-r--r-- | src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c | 34 | ||||
-rw-r--r-- | src/gallium/drivers/svga/svga_context.h | 2 | ||||
-rw-r--r-- | src/gallium/drivers/svga/svga_pipe_fs.c | 7 | ||||
-rw-r--r-- | src/gallium/drivers/svga/svga_pipe_vs.c | 7 | ||||
-rw-r--r-- | src/gallium/drivers/svga/svga_state_fs.c | 13 | ||||
-rw-r--r-- | src/gallium/drivers/svga/svga_state_vs.c | 13 | ||||
-rw-r--r-- | src/mesa/drivers/dri/tdfx/tdfx_texstate.c | 2 | ||||
-rw-r--r-- | src/mesa/shader/prog_parameter.c | 8 | ||||
-rw-r--r-- | src/mesa/shader/prog_parameter_layout.c | 16 | ||||
-rw-r--r-- | src/mesa/shader/program_parse.tab.c | 565 | ||||
-rw-r--r-- | src/mesa/shader/program_parse.tab.h | 2 | ||||
-rw-r--r-- | src/mesa/shader/program_parse.y | 29 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_mesa_to_tgsi.c | 21 |
13 files changed, 379 insertions, 340 deletions
diff --git a/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c b/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c index a9375abd218..ba6f7b15f9e 100644 --- a/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c +++ b/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c @@ -80,7 +80,7 @@ struct fenced_buffer_list */ struct fenced_buffer { - /* + /* * Immutable members. */ @@ -126,8 +126,8 @@ 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. + * 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. */ @@ -191,7 +191,7 @@ fenced_buffer_remove_locked(struct fenced_buffer_list *fenced_list, * 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 + * held -- it will be acquired internally. */ static INLINE enum pipe_error fenced_buffer_finish_locked(struct fenced_buffer_list *fenced_list, @@ -207,7 +207,10 @@ fenced_buffer_finish_locked(struct fenced_buffer_list *fenced_list, assert(pipe_is_referenced(&fenced_buf->base.base.reference)); assert(fenced_buf->fence); - /* Acquire the global lock */ + /* + * 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); @@ -217,7 +220,7 @@ fenced_buffer_finish_locked(struct fenced_buffer_list *fenced_list, /* 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)); @@ -238,7 +241,7 @@ fenced_buffer_finish_locked(struct fenced_buffer_list *fenced_list, */ static void fenced_buffer_list_check_free_locked(struct fenced_buffer_list *fenced_list, - int wait) + int wait) { struct pb_fence_ops *ops = fenced_list->ops; struct list_head *curr, *next; @@ -274,7 +277,6 @@ fenced_buffer_list_check_free_locked(struct fenced_buffer_list *fenced_list, pb_buf = &fenced_buf->base; pb_reference(&pb_buf, NULL); - curr = next; next = curr->next; @@ -329,7 +331,7 @@ fenced_buffer_map(struct pb_buffer *buf, if((flags & PIPE_BUFFER_USAGE_DONTBLOCK) && ops->fence_signalled(ops, fenced_buf->fence, 0) == 0) { /* Don't wait for the GPU to finish writing */ - goto finish; + goto done; } /* Wait for the GPU to finish writing */ @@ -350,7 +352,7 @@ fenced_buffer_map(struct pb_buffer *buf, fenced_buf->flags |= flags & PIPE_BUFFER_USAGE_CPU_READ_WRITE; } -finish: +done: pipe_mutex_unlock(fenced_buf->mutex); return map; @@ -391,7 +393,7 @@ fenced_buffer_validate(struct pb_buffer *buf, fenced_buf->vl = NULL; fenced_buf->validation_flags = 0; ret = PIPE_OK; - goto finish; + goto done; } assert(flags & PIPE_BUFFER_USAGE_GPU_READ_WRITE); @@ -401,7 +403,7 @@ fenced_buffer_validate(struct pb_buffer *buf, /* Buffer cannot be validated in two different lists */ if(fenced_buf->vl && fenced_buf->vl != vl) { ret = PIPE_ERROR_RETRY; - goto finish; + goto done; } #if 0 @@ -409,7 +411,7 @@ fenced_buffer_validate(struct pb_buffer *buf, if(fenced_buf->flags & PIPE_BUFFER_USAGE_CPU_READ_WRITE) { /* TODO: wait for the thread that mapped the buffer to unmap it */ ret = PIPE_ERROR_RETRY; - goto finish; + goto done; } /* Final sanity checking */ assert(!(fenced_buf->flags & PIPE_BUFFER_USAGE_CPU_READ_WRITE)); @@ -420,17 +422,17 @@ fenced_buffer_validate(struct pb_buffer *buf, (fenced_buf->validation_flags & flags) == flags) { /* Nothing to do -- buffer already validated */ ret = PIPE_OK; - goto finish; + goto done; } ret = pb_validate(fenced_buf->buffer, vl, flags); if (ret != PIPE_OK) - goto finish; + goto done; fenced_buf->vl = vl; fenced_buf->validation_flags |= flags; -finish: +done: pipe_mutex_unlock(fenced_buf->mutex); return ret; diff --git a/src/gallium/drivers/svga/svga_context.h b/src/gallium/drivers/svga/svga_context.h index fa7f6cb3bb9..66259fd0103 100644 --- a/src/gallium/drivers/svga/svga_context.h +++ b/src/gallium/drivers/svga/svga_context.h @@ -266,8 +266,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_pipe_fs.c b/src/gallium/drivers/svga/svga_pipe_fs.c index a461a86dd31..5f1213e46a3 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 e82d10c2595..7e6ab576add 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); diff --git a/src/gallium/drivers/svga/svga_state_fs.c b/src/gallium/drivers/svga/svga_state_fs.c index 1902b0106ba..272d1dd14e3 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 7e34c0a9804..ae1e77e7d44 100644 --- a/src/gallium/drivers/svga/svga_state_vs.c +++ b/src/gallium/drivers/svga/svga_state_vs.c @@ -150,16 +150,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; } diff --git a/src/mesa/drivers/dri/tdfx/tdfx_texstate.c b/src/mesa/drivers/dri/tdfx/tdfx_texstate.c index bbd2c8cfee9..3f737878ed9 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; diff --git a/src/mesa/shader/prog_parameter.c b/src/mesa/shader/prog_parameter.c index f22492e029e..5822510701b 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; } diff --git a/src/mesa/shader/prog_parameter_layout.c b/src/mesa/shader/prog_parameter_layout.c index 1c37b3a7a5a..a8885738321 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; diff --git a/src/mesa/shader/program_parse.tab.c b/src/mesa/shader/program_parse.tab.c index a1e69b84509..b12dcee9dfa 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; @@ -5472,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 @@ -5513,23 +5521,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 d8712b72684..045241d9e77 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; diff --git a/src/mesa/shader/program_parse.y b/src/mesa/shader/program_parse.y index b40b216d658..5c5d8d75908 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); } ; @@ -2515,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 @@ -2556,23 +2560,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/state_tracker/st_mesa_to_tgsi.c b/src/mesa/state_tracker/st_mesa_to_tgsi.c index 5c9be46a776..e788008dfe1 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]); @@ -174,9 +175,15 @@ 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 */ + 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]]; @@ -263,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; } @@ -859,6 +871,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: |