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:
|
||||
/* This is only for PRINT */
|
||||
ASSERT(source->Index < FRAG_RESULT_MAX);
|
||||
ASSERT(source->Index < MAX_PROGRAM_OUTPUTS);
|
||||
return machine->Outputs[source->Index];
|
||||
|
||||
case PROGRAM_LOCAL_PARAM:
|
||||
@@ -453,9 +452,11 @@ store_vector4(const struct prog_instruction *inst,
|
||||
|
||||
switch (dest->File) {
|
||||
case PROGRAM_OUTPUT:
|
||||
ASSERT(dest->Index < MAX_PROGRAM_OUTPUTS);
|
||||
dstReg = machine->Outputs[dest->Index];
|
||||
break;
|
||||
case PROGRAM_TEMPORARY:
|
||||
ASSERT(dest->Index < MAX_PROGRAM_TEMPS);
|
||||
dstReg = machine->Temporaries[dest->Index];
|
||||
break;
|
||||
case PROGRAM_WRITE_ONLY:
|
||||
|
@@ -35,6 +35,10 @@ typedef void (*FetchTexelDerivFunc)(GLcontext *ctx, const GLfloat texcoord[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.
|
||||
*/
|
||||
@@ -50,7 +54,7 @@ struct gl_program_machine
|
||||
GLfloat VertAttribs[VERT_ATTRIB_MAX][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 */
|
||||
|
||||
GLint AddressReg[MAX_VERTEX_PROGRAM_ADDRESS_REGS][4];
|
||||
|
Reference in New Issue
Block a user