diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/program/program.c | 14 | ||||
-rw-r--r-- | src/mesa/program/program.h | 11 |
2 files changed, 18 insertions, 7 deletions
diff --git a/src/mesa/program/program.c b/src/mesa/program/program.c index 78efca9f122..adca094ee89 100644 --- a/src/mesa/program/program.c +++ b/src/mesa/program/program.c @@ -421,12 +421,15 @@ _mesa_lookup_program(struct gl_context *ctx, GLuint id) /** * Reference counting for vertex/fragment programs + * This is normally only called from the _mesa_reference_program() macro + * when there's a real pointer change. */ void -_mesa_reference_program(struct gl_context *ctx, - struct gl_program **ptr, - struct gl_program *prog) +_mesa_reference_program_(struct gl_context *ctx, + struct gl_program **ptr, + struct gl_program *prog) { +#ifndef NDEBUG assert(ptr); if (*ptr && prog) { /* sanity check */ @@ -438,9 +441,8 @@ _mesa_reference_program(struct gl_context *ctx, else if ((*ptr)->Target == MESA_GEOMETRY_PROGRAM) ASSERT(prog->Target == MESA_GEOMETRY_PROGRAM); } - if (*ptr == prog) { - return; /* no change */ - } +#endif + if (*ptr) { GLboolean deleteFlag; diff --git a/src/mesa/program/program.h b/src/mesa/program/program.h index ce37b95bf82..0f32a6af73b 100644 --- a/src/mesa/program/program.h +++ b/src/mesa/program/program.h @@ -89,9 +89,18 @@ extern struct gl_program * _mesa_lookup_program(struct gl_context *ctx, GLuint id); extern void +_mesa_reference_program_(struct gl_context *ctx, + struct gl_program **ptr, + struct gl_program *prog); + +static INLINE void _mesa_reference_program(struct gl_context *ctx, struct gl_program **ptr, - struct gl_program *prog); + struct gl_program *prog) +{ + if (*ptr != prog) + _mesa_reference_program_(ctx, ptr, prog); +} static INLINE void _mesa_reference_vertprog(struct gl_context *ctx, |