OSDN Git Service

Revert "mesa: separate shader program object from shader object." (bug#15244)
authorXiang, Haihao <haihao.xiang@intel.com>
Mon, 31 Mar 2008 08:27:47 +0000 (16:27 +0800)
committerXiang, Haihao <haihao.xiang@intel.com>
Mon, 31 Mar 2008 08:27:47 +0000 (16:27 +0800)
This reverts commit 3ffd11f71d021f672b9bc15b3c39c155a0e2fecb.

src/mesa/main/context.c
src/mesa/main/mtypes.h
src/mesa/shader/shader_api.c

index 62d5927..087e18f 100644 (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
index da60a46..c8718a7 100644 (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
index 76da855..df2f9dc 100644 (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);