From 9ca83924848070d02a5ac2f0aa4e20444eec2183 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Sat, 2 Oct 2004 15:16:59 +0000 Subject: fix LoadProgramNV regression when I had fixed the RefCount bug --- src/mesa/shader/nvprogram.c | 10 +++++----- src/mesa/shader/program.c | 8 ++++---- src/mesa/shader/program.h | 3 +++ 3 files changed, 12 insertions(+), 9 deletions(-) (limited to 'src/mesa/shader') diff --git a/src/mesa/shader/nvprogram.c b/src/mesa/shader/nvprogram.c index 070451452a..4db78a8cc7 100644 --- a/src/mesa/shader/nvprogram.c +++ b/src/mesa/shader/nvprogram.c @@ -160,12 +160,12 @@ _mesa_RequestResidentProgramsNV(GLsizei n, const GLuint *ids) } prog = (struct program *) _mesa_HashLookup(ctx->Shared->Programs, ids[i]); - if (!prog) { _mesa_error(ctx, GL_INVALID_VALUE, "glRequestResidentProgramsNV(id)"); return; } + /* XXX this is really a hardware thing we should hook out */ prog->Resident = GL_TRUE; } } @@ -529,7 +529,7 @@ _mesa_LoadProgramNV(GLenum target, GLuint id, GLsizei len, target == GL_VERTEX_STATE_PROGRAM_NV) && ctx->Extensions.NV_vertex_program) { struct vertex_program *vprog = (struct vertex_program *) prog; - if (!vprog) { + if (!vprog || prog == &_mesa_DummyProgram) { vprog = (struct vertex_program *) ctx->Driver.NewProgram(ctx, target, id); if (!vprog) { @@ -543,7 +543,7 @@ _mesa_LoadProgramNV(GLenum target, GLuint id, GLsizei len, else if (target == GL_FRAGMENT_PROGRAM_NV && ctx->Extensions.NV_fragment_program) { struct fragment_program *fprog = (struct fragment_program *) prog; - if (!fprog) { + if (!fprog || prog == &_mesa_DummyProgram) { fprog = (struct fragment_program *) ctx->Driver.NewProgram(ctx, target, id); if (!fprog) { @@ -776,7 +776,7 @@ _mesa_ProgramNamedParameter4fNV(GLuint id, GLsizei len, const GLubyte *name, } if (len <= 0) { - _mesa_error(ctx, GL_INVALID_VALUE, "glProgramNamedParameterNV"); + _mesa_error(ctx, GL_INVALID_VALUE, "glProgramNamedParameterNV(len)"); return; } @@ -790,7 +790,7 @@ _mesa_ProgramNamedParameter4fNV(GLuint id, GLsizei len, const GLubyte *name, return; } - _mesa_error(ctx, GL_INVALID_VALUE, "glProgramNamedParameterNV"); + _mesa_error(ctx, GL_INVALID_VALUE, "glProgramNamedParameterNV(name)"); } diff --git a/src/mesa/shader/program.c b/src/mesa/shader/program.c index 7ec09b0256..88085f811a 100644 --- a/src/mesa/shader/program.c +++ b/src/mesa/shader/program.c @@ -49,7 +49,7 @@ /* A pointer to this dummy program is put into the hash table when * glGenPrograms is called. */ -static struct program DummyProgram; +struct program _mesa_DummyProgram; /** @@ -938,7 +938,7 @@ _mesa_BindProgram(GLenum target, GLuint id) else { /* Bind user program */ prog = (struct program *) _mesa_HashLookup(ctx->Shared->Programs, id); - if (!prog || prog == &DummyProgram) { + if (!prog || prog == &_mesa_DummyProgram) { /* allocate a new program now */ prog = ctx->Driver.NewProgram(ctx, target, id); if (!prog) { @@ -995,7 +995,7 @@ _mesa_DeletePrograms(GLsizei n, const GLuint *ids) if (ids[i] != 0) { struct program *prog = (struct program *) _mesa_HashLookup(ctx->Shared->Programs, ids[i]); - if (prog == &DummyProgram) { + if (prog == &_mesa_DummyProgram) { _mesa_HashRemove(ctx->Shared->Programs, ids[i]); } else if (prog) { @@ -1060,7 +1060,7 @@ _mesa_GenPrograms(GLsizei n, GLuint *ids) /* Insert pointer to dummy program as placeholder */ for (i = 0; i < (GLuint) n; i++) { - _mesa_HashInsert(ctx->Shared->Programs, first + i, &DummyProgram); + _mesa_HashInsert(ctx->Shared->Programs, first + i, &_mesa_DummyProgram); } /* Return the program names */ diff --git a/src/mesa/shader/program.h b/src/mesa/shader/program.h index fb99a79cf6..e8a667ddc6 100644 --- a/src/mesa/shader/program.h +++ b/src/mesa/shader/program.h @@ -52,6 +52,9 @@ #define SWIZZLE_ONE 5 /* keep these values together: KW */ +extern struct program _mesa_DummyProgram; + + /* * Internal functions */ -- cgit v1.2.3