mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 09:18:04 +02:00
Fix parsing of gl_FrontLightModelProduct.sceneColor, don't segfault on variable array indexes.
This commit is contained in:
parent
c14d969a69
commit
ba16243884
2 changed files with 15 additions and 5 deletions
|
|
@ -250,7 +250,7 @@ lookup_statevar(const char *var, GLint index1, GLint index2, const char *field,
|
|||
}
|
||||
}
|
||||
else if (strcmp(var, "gl_FrontLightModelProduct") == 0) {
|
||||
if (strcmp(field, "ambient") == 0) {
|
||||
if (strcmp(field, "sceneColor") == 0) {
|
||||
tokens[0] = STATE_LIGHTMODEL_SCENECOLOR;
|
||||
tokens[1] = 0;
|
||||
}
|
||||
|
|
@ -259,7 +259,7 @@ lookup_statevar(const char *var, GLint index1, GLint index2, const char *field,
|
|||
}
|
||||
}
|
||||
else if (strcmp(var, "gl_BackLightModelProduct") == 0) {
|
||||
if (strcmp(field, "ambient") == 0) {
|
||||
if (strcmp(field, "sceneColor") == 0) {
|
||||
tokens[0] = STATE_LIGHTMODEL_SCENECOLOR;
|
||||
tokens[1] = 1;
|
||||
}
|
||||
|
|
@ -397,6 +397,8 @@ lookup_statevar(const char *var, GLint index1, GLint index2, const char *field,
|
|||
* var.field
|
||||
* var[i].field
|
||||
* var[i][j]
|
||||
*
|
||||
* \return -1 upon error, else position in paramList of the state var/data
|
||||
*/
|
||||
GLint
|
||||
_slang_alloc_statevar(slang_ir_node *n,
|
||||
|
|
@ -414,9 +416,13 @@ _slang_alloc_statevar(slang_ir_node *n,
|
|||
|
||||
if (n->Opcode == IR_ELEMENT) {
|
||||
/* XXX can only handle constant indexes for now */
|
||||
assert(n->Children[1]->Opcode == IR_FLOAT);
|
||||
index1 = (GLint) n->Children[1]->Value[0];
|
||||
n = n->Children[0];
|
||||
if (n->Children[1]->Opcode == IR_FLOAT) {
|
||||
index1 = (GLint) n->Children[1]->Value[0];
|
||||
n = n->Children[0];
|
||||
}
|
||||
else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (n->Opcode == IR_ELEMENT) {
|
||||
|
|
|
|||
|
|
@ -1486,6 +1486,10 @@ emit_struct_field(slang_emit_info *emitInfo, slang_ir_node *n)
|
|||
{
|
||||
if (n->Store->File == PROGRAM_STATE_VAR) {
|
||||
n->Store->Index = _slang_alloc_statevar(n, emitInfo->prog->Parameters);
|
||||
if (n->Store->Index < 0) {
|
||||
slang_info_log_error(emitInfo->log, "Error parsing state variable");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
else {
|
||||
GLint offset = n->FieldOffset / 4;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue