From 8b5fce6bcc88cd9dd321f0db95c1714e5e5e85a1 Mon Sep 17 00:00:00 2001 From: Brian Date: Thu, 19 Apr 2007 14:24:10 -0600 Subject: Put gl_program_machine into swrast structure rather than using a local variable. Basically an easy way to make sure the memory gets initialized once (to zero) to avoid lots of valgrind warnings. --- src/mesa/swrast/s_context.h | 8 ++++++-- src/mesa/swrast/s_fragprog.c | 15 +++++++-------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/mesa/swrast/s_context.h b/src/mesa/swrast/s_context.h index 1cf3813fd3..dfe311a40b 100644 --- a/src/mesa/swrast/s_context.h +++ b/src/mesa/swrast/s_context.h @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.5.2 + * Version: 6.5.3 * - * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -46,6 +46,7 @@ #include "mtypes.h" #include "swrast.h" #include "s_span.h" +#include "prog_execute.h" typedef void (*texture_sample_func)(GLcontext *ctx, @@ -222,6 +223,9 @@ typedef struct validate_texture_image_func ValidateTextureImage; + /** State used during execution of fragment programs */ + struct gl_program_machine FragProgMachine; + } SWcontext; diff --git a/src/mesa/swrast/s_fragprog.c b/src/mesa/swrast/s_fragprog.c index 7f7c0d6db5..1b5f20d42d 100644 --- a/src/mesa/swrast/s_fragprog.c +++ b/src/mesa/swrast/s_fragprog.c @@ -25,7 +25,6 @@ #include "glheader.h" #include "colormac.h" #include "context.h" -#include "prog_execute.h" #include "prog_instruction.h" #include "s_fragprog.h" @@ -105,7 +104,7 @@ init_machine(GLcontext *ctx, struct gl_program_machine *machine, if (ctx->FragmentProgram.CallbackEnabled) inputsRead = ~0; - if (program->Base.Target == GL_FRAGMENT_PROGRAM_NV) { + if (1/*program->Base.Target == GL_FRAGMENT_PROGRAM_NV*/) { /* Clear temporary registers (undefined for ARB_f_p) */ _mesa_bzero(machine->Temporaries, MAX_PROGRAM_TEMPS * 4 * sizeof(GLfloat)); @@ -142,19 +141,19 @@ run_program(GLcontext *ctx, SWspan *span, GLuint start, GLuint end) SWcontext *swrast = SWRAST_CONTEXT(ctx); const struct gl_fragment_program *program = ctx->FragmentProgram._Current; const GLbitfield outputsWritten = program->Base.OutputsWritten; - struct gl_program_machine machine; + struct gl_program_machine *machine = &swrast->FragProgMachine; GLuint i; for (i = start; i < end; i++) { if (span->array->mask[i]) { - init_machine(ctx, &machine, program, span, i); + init_machine(ctx, machine, program, span, i); - if (_mesa_execute_program(ctx, &program->Base, &machine)) { + if (_mesa_execute_program(ctx, &program->Base, machine)) { /* Store result color */ if (outputsWritten & (1 << FRAG_RESULT_COLR)) { COPY_4V(span->array->attribs[FRAG_ATTRIB_COL0][i], - machine.Outputs[FRAG_RESULT_COLR]); + machine->Outputs[FRAG_RESULT_COLR]); } else { /* Multiple drawbuffers / render targets @@ -165,14 +164,14 @@ run_program(GLcontext *ctx, SWspan *span, GLuint start, GLuint end) for (output = 0; output < swrast->_NumColorOutputs; output++) { if (outputsWritten & (1 << (FRAG_RESULT_DATA0 + output))) { COPY_4V(span->array->attribs[FRAG_ATTRIB_COL0+output][i], - machine.Outputs[FRAG_RESULT_DATA0 + output]); + machine->Outputs[FRAG_RESULT_DATA0 + output]); } } } /* Store result depth/z */ if (outputsWritten & (1 << FRAG_RESULT_DEPR)) { - const GLfloat depth = machine.Outputs[FRAG_RESULT_DEPR][2]; + const GLfloat depth = machine->Outputs[FRAG_RESULT_DEPR][2]; if (depth <= 0.0) span->array->z[i] = 0; else if (depth >= 1.0) -- cgit v1.2.3