From 292a80466d3e0b1cec998f2dc1b0abe25dc10fb8 Mon Sep 17 00:00:00 2001 From: Brian Date: Sat, 24 Feb 2007 15:49:54 -0700 Subject: Outputs[] array wasn't large enough, define MAX_PROGRAM_OUTPUTS, new assertions. --- src/mesa/shader/prog_execute.c | 5 +++-- src/mesa/shader/prog_execute.h | 6 +++++- 2 files changed, 8 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/mesa/shader/prog_execute.c b/src/mesa/shader/prog_execute.c index 6417a88e900..063d572428b 100644 --- a/src/mesa/shader/prog_execute.c +++ b/src/mesa/shader/prog_execute.c @@ -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: diff --git a/src/mesa/shader/prog_execute.h b/src/mesa/shader/prog_execute.h index 0e737657e34..1eb9e73d01a 100644 --- a/src/mesa/shader/prog_execute.h +++ b/src/mesa/shader/prog_execute.h @@ -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]; -- cgit v1.2.3