summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosé Fonseca <jfonseca@vmware.com>2010-01-06 13:52:22 +0000
committerJosé Fonseca <jfonseca@vmware.com>2010-01-06 13:52:22 +0000
commite32487b8a13a9efabb0359a9dde33e074e905e82 (patch)
treefbfdb33273371a5faec1de4ff97b803766eacf63
parentaaf7ecfd816f82fef314f4f772cc53bc0ced553e (diff)
parent5b64d94390e4805e1634f0c8b5e3156e12b8b872 (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.c34
-rw-r--r--src/gallium/drivers/svga/svga_context.h2
-rw-r--r--src/gallium/drivers/svga/svga_pipe_fs.c7
-rw-r--r--src/gallium/drivers/svga/svga_pipe_vs.c7
-rw-r--r--src/gallium/drivers/svga/svga_state_fs.c13
-rw-r--r--src/gallium/drivers/svga/svga_state_vs.c13
-rw-r--r--src/mesa/drivers/dri/tdfx/tdfx_texstate.c2
-rw-r--r--src/mesa/shader/prog_parameter.c8
-rw-r--r--src/mesa/shader/prog_parameter_layout.c16
-rw-r--r--src/mesa/shader/program_parse.tab.c565
-rw-r--r--src/mesa/shader/program_parse.tab.h2
-rw-r--r--src/mesa/shader/program_parse.y29
-rw-r--r--src/mesa/state_tracker/st_mesa_to_tgsi.c21
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 a9375abd21..ba6f7b15f9 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 fa7f6cb3bb..66259fd010 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 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 e82d10c259..7e6ab576ad 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 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 7e34c0a980..ae1e77e7d4 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 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;
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;
}
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;
diff --git a/src/mesa/shader/program_parse.tab.c b/src/mesa/shader/program_parse.tab.c
index a1e69b8450..b12dcee9df 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 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;
diff --git a/src/mesa/shader/program_parse.y b/src/mesa/shader/program_parse.y
index b40b216d65..5c5d8d7590 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 5c9be46a77..e788008dfe 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: