alloc caches for fixed-func vertex/fragment progs
authorBrian <brian.paul@tungstengraphics.com>
Wed, 31 Oct 2007 18:00:38 +0000 (12:00 -0600)
committerBrian <brian.paul@tungstengraphics.com>
Wed, 31 Oct 2007 18:02:55 +0000 (12:02 -0600)
src/mesa/main/mtypes.h
src/mesa/shader/program.c

index 44587ae96222fc187a1ac61de1eee6e4bb401adb..b435c29793bf1ffd4a7fff5b437bda61f8ef17bd 100644 (file)
@@ -123,6 +123,7 @@ typedef int GLfixed;
 /*@{*/
 struct _mesa_HashTable;
 struct gl_pixelstore_attrib;
+struct gl_program_cache;
 struct gl_texture_format;
 struct gl_texture_image;
 struct gl_texture_object;
@@ -2000,6 +2001,9 @@ struct gl_vertex_program_state
    /** Program to emulate fixed-function T&L (see above) */
    struct gl_vertex_program *_TnlProgram;
 
+   /** Cache of fixed-function programs */
+   struct gl_program_cache *Cache;
+
 #if FEATURE_MESA_program_debug
    GLprogramcallbackMESA Callback;
    GLvoid *CallbackData;
@@ -2033,6 +2037,9 @@ struct gl_fragment_program_state
    /** Program to emulate fixed-function texture env/combine (see above) */
    struct gl_fragment_program *_TexEnvProgram;
 
+   /** Cache of fixed-function programs */
+   struct gl_program_cache *Cache;
+
 #if FEATURE_MESA_program_debug
    GLprogramcallbackMESA Callback;
    GLvoid *CallbackData;
index ed1aacd068d6505ced0169afa595f8af7676aa14..f13aa18e9501d8076f369674f23d9e057d62ddaa 100644 (file)
@@ -33,6 +33,7 @@
 #include "context.h"
 #include "hash.h"
 #include "program.h"
+#include "prog_cache.h"
 #include "prog_parameter.h"
 #include "prog_instruction.h"
 
@@ -66,6 +67,7 @@ _mesa_init_program(GLcontext *ctx)
       ctx->VertexProgram.TrackMatrix[i] = GL_NONE;
       ctx->VertexProgram.TrackMatrixTransform[i] = GL_IDENTITY_NV;
    }
+   ctx->VertexProgram.Cache = _mesa_new_program_cache();
 #endif
 
 #if FEATURE_NV_fragment_program || FEATURE_ARB_fragment_program
@@ -73,8 +75,10 @@ _mesa_init_program(GLcontext *ctx)
    ctx->FragmentProgram.Current = (struct gl_fragment_program *) ctx->Shared->DefaultFragmentProgram;
    assert(ctx->FragmentProgram.Current);
    ctx->FragmentProgram.Current->Base.RefCount++;
+   ctx->FragmentProgram.Cache = _mesa_new_program_cache();
 #endif
 
+
    /* XXX probably move this stuff */
 #if FEATURE_ATI_fragment_shader
    ctx->ATIFragmentShader.Enabled = GL_FALSE;