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

View File

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