mesa: split _mesa_reference_program() into hot/cold paths.

inline the hotpath of the reference remaining the same. This shouldn't
penalise the slow path at all but improve the hot path so we don't have
to jump to the function.

It also moves some assert checks under an #ifndef NDEBUG.

Minor clean-ups added by Brian.

Signed-off-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
Dave Airlie
2011-07-14 08:09:21 -06:00
committed by Brian Paul
parent 8619aa5683
commit 323e4bff79
2 changed files with 18 additions and 7 deletions

View File

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