Outputs[] array wasn't large enough, define MAX_PROGRAM_OUTPUTS, new assertions.
This commit is contained in:
@@ -153,8 +153,7 @@ get_register_pointer(GLcontext * ctx,
|
|||||||
}
|
}
|
||||||
|
|
||||||
case PROGRAM_OUTPUT:
|
case PROGRAM_OUTPUT:
|
||||||
/* This is only for PRINT */
|
ASSERT(source->Index < MAX_PROGRAM_OUTPUTS);
|
||||||
ASSERT(source->Index < FRAG_RESULT_MAX);
|
|
||||||
return machine->Outputs[source->Index];
|
return machine->Outputs[source->Index];
|
||||||
|
|
||||||
case PROGRAM_LOCAL_PARAM:
|
case PROGRAM_LOCAL_PARAM:
|
||||||
@@ -453,9 +452,11 @@ store_vector4(const struct prog_instruction *inst,
|
|||||||
|
|
||||||
switch (dest->File) {
|
switch (dest->File) {
|
||||||
case PROGRAM_OUTPUT:
|
case PROGRAM_OUTPUT:
|
||||||
|
ASSERT(dest->Index < MAX_PROGRAM_OUTPUTS);
|
||||||
dstReg = machine->Outputs[dest->Index];
|
dstReg = machine->Outputs[dest->Index];
|
||||||
break;
|
break;
|
||||||
case PROGRAM_TEMPORARY:
|
case PROGRAM_TEMPORARY:
|
||||||
|
ASSERT(dest->Index < MAX_PROGRAM_TEMPS);
|
||||||
dstReg = machine->Temporaries[dest->Index];
|
dstReg = machine->Temporaries[dest->Index];
|
||||||
break;
|
break;
|
||||||
case PROGRAM_WRITE_ONLY:
|
case PROGRAM_WRITE_ONLY:
|
||||||
|
@@ -35,6 +35,10 @@ typedef void (*FetchTexelDerivFunc)(GLcontext *ctx, const GLfloat texcoord[4],
|
|||||||
GLuint unit, GLfloat color[4]);
|
GLuint unit, GLfloat color[4]);
|
||||||
|
|
||||||
|
|
||||||
|
/** The larger of VERT_RESULT_MAX, FRAG_RESULT_MAX */
|
||||||
|
#define MAX_PROGRAM_OUTPUTS VERT_RESULT_MAX
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Virtual machine state used during execution of vertex/fragment programs.
|
* Virtual machine state used during execution of vertex/fragment programs.
|
||||||
*/
|
*/
|
||||||
@@ -50,7 +54,7 @@ struct gl_program_machine
|
|||||||
GLfloat VertAttribs[VERT_ATTRIB_MAX][4];
|
GLfloat VertAttribs[VERT_ATTRIB_MAX][4];
|
||||||
|
|
||||||
GLfloat Temporaries[MAX_PROGRAM_TEMPS][4];
|
GLfloat Temporaries[MAX_PROGRAM_TEMPS][4];
|
||||||
GLfloat Outputs[FRAG_RESULT_MAX][4];
|
GLfloat Outputs[MAX_PROGRAM_OUTPUTS][4];
|
||||||
GLuint CondCodes[4]; /**< COND_* value for x/y/z/w */
|
GLuint CondCodes[4]; /**< COND_* value for x/y/z/w */
|
||||||
|
|
||||||
GLint AddressReg[MAX_VERTEX_PROGRAM_ADDRESS_REGS][4];
|
GLint AddressReg[MAX_VERTEX_PROGRAM_ADDRESS_REGS][4];
|
||||||
|
Reference in New Issue
Block a user