Outputs[] array wasn't large enough, define MAX_PROGRAM_OUTPUTS, new assertions.

This commit is contained in:
Brian
2007-02-24 15:49:54 -07:00
parent 5e80c62f31
commit 292a80466d
2 changed files with 8 additions and 3 deletions

View File

@@ -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:

View File

@@ -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];