Revert "mesa: separate shader program object from shader object." (bug#15244)

This reverts commit 3ffd11f71d.
This commit is contained in:
Xiang, Haihao 2008-03-31 16:27:47 +08:00
parent d30d9e42b7
commit aef47c4dc8
3 changed files with 13 additions and 21 deletions

View file

@ -444,7 +444,6 @@ alloc_shared_state( GLcontext *ctx )
ss->ArrayObjects = _mesa_NewHashTable();
#if FEATURE_ARB_shader_objects
ss->ShaderProgramObjects = _mesa_NewHashTable();
ss->ShaderObjects = _mesa_NewHashTable();
#endif
@ -524,8 +523,6 @@ cleanup:
_mesa_DeleteHashTable (ss->ArrayObjects);
#if FEATURE_ARB_shader_objects
if (ss->ShaderProgramObjects)
_mesa_DeleteHashTable (ss->ShaderProgramObjects);
if (ss->ShaderObjects)
_mesa_DeleteHashTable (ss->ShaderObjects);
#endif
@ -634,17 +631,14 @@ delete_shader_cb(GLuint id, void *data, void *userData)
{
GLcontext *ctx = (GLcontext *) userData;
struct gl_shader *sh = (struct gl_shader *) data;
assert(sh->Type == GL_FRAGMENT_SHADER || sh->Type == GL_VERTEX_SHADER);
_mesa_free_shader(ctx, sh);
}
static void
delete_shader_program_cb(GLuint id, void *data, void *userData)
{
GLcontext *ctx = (GLcontext *) userData;
struct gl_shader_program *shProg = (struct gl_shader_program *) data;
assert(shProg->Type == GL_SHADER_PROGRAM_MESA);
_mesa_free_shader_program(ctx, shProg);
if (sh->Type == GL_FRAGMENT_SHADER || sh->Type == GL_VERTEX_SHADER) {
_mesa_free_shader(ctx, sh);
}
else {
struct gl_shader_program *shProg = (struct gl_shader_program *) data;
ASSERT(shProg->Type == GL_SHADER_PROGRAM_MESA);
_mesa_free_shader_program(ctx, shProg);
}
}
/**
@ -727,8 +721,6 @@ free_shared_state( GLcontext *ctx, struct gl_shared_state *ss )
_mesa_DeleteHashTable(ss->ArrayObjects);
#if FEATURE_ARB_shader_objects
_mesa_HashDeleteAll(ss->ShaderProgramObjects, delete_shader_program_cb, ctx);
_mesa_DeleteHashTable(ss->ShaderProgramObjects);
_mesa_HashDeleteAll(ss->ShaderObjects, delete_shader_cb, ctx);
_mesa_DeleteHashTable(ss->ShaderObjects);
#endif

View file

@ -2202,8 +2202,8 @@ struct gl_shared_state
#endif
#if FEATURE_ARB_shader_objects
/** Table of both gl_shader and gl_shader_program objects */
struct _mesa_HashTable *ShaderObjects;
struct _mesa_HashTable *ShaderProgramObjects;
#endif
#if FEATURE_EXT_framebuffer_object

View file

@ -178,7 +178,7 @@ _mesa_reference_shader_program(GLcontext *ctx,
deleteFlag = (old->RefCount == 0);
if (deleteFlag) {
_mesa_HashRemove(ctx->Shared->ShaderProgramObjects, old->Name);
_mesa_HashRemove(ctx->Shared->ShaderObjects, old->Name);
_mesa_free_shader_program(ctx, old);
}
@ -204,7 +204,7 @@ _mesa_lookup_shader_program(GLcontext *ctx, GLuint name)
struct gl_shader_program *shProg;
if (name) {
shProg = (struct gl_shader_program *)
_mesa_HashLookup(ctx->Shared->ShaderProgramObjects, name);
_mesa_HashLookup(ctx->Shared->ShaderObjects, name);
/* Note that both gl_shader and gl_shader_program objects are kept
* in the same hash table. Check the object's type to be sure it's
* what we're expecting.
@ -536,10 +536,10 @@ _mesa_create_program(GLcontext *ctx)
GLuint name;
struct gl_shader_program *shProg;
name = _mesa_HashFindFreeKeyBlock(ctx->Shared->ShaderProgramObjects, 1);
name = _mesa_HashFindFreeKeyBlock(ctx->Shared->ShaderObjects, 1);
shProg = _mesa_new_shader_program(ctx, name);
_mesa_HashInsert(ctx->Shared->ShaderProgramObjects, name, shProg);
_mesa_HashInsert(ctx->Shared->ShaderObjects, name, shProg);
assert(shProg->RefCount == 1);