gallium: free bitmap fragment shaders, misc clean-up
authorBrian Paul <brian.paul@tungstengraphics.com>
Mon, 24 Mar 2008 17:55:29 +0000 (11:55 -0600)
committerBrian Paul <brian.paul@tungstengraphics.com>
Mon, 24 Mar 2008 17:56:05 +0000 (11:56 -0600)
src/mesa/state_tracker/st_cb_bitmap.c
src/mesa/state_tracker/st_cb_program.c
src/mesa/state_tracker/st_cb_program.h
src/mesa/state_tracker/st_context.c
src/mesa/state_tracker/st_program.h

index dbf2f77c2e0c2aef631dd90c4e0fbc37f95ef7cd..6e59439874372cbcac6e01717f7b176ce3da0697 100644 (file)
@@ -44,6 +44,7 @@
 #include "st_atom_constbuf.h"
 #include "st_program.h"
 #include "st_cb_bitmap.h"
+#include "st_cb_program.h"
 #include "st_mesa_to_tgsi.h"
 #include "st_texture.h"
 #include "pipe/p_context.h"
@@ -407,7 +408,6 @@ draw_bitmap_quad(GLcontext *ctx, GLint x, GLint y, GLfloat z,
 
    cso_save_rasterizer(cso);
    cso_save_samplers(cso);
-   //cso_save_viewport(cso);
 
    /* rasterizer state: just scissor */
    {
@@ -458,11 +458,9 @@ draw_bitmap_quad(GLcontext *ctx, GLint x, GLint y, GLfloat z,
    /* restore state */
    cso_restore_rasterizer(cso);
    cso_restore_samplers(cso);
-   //cso_restore_viewport(cso);
    /* shaders don't go through cso yet */
    pipe->bind_fs_state(pipe, st->fp->driver_shader);
    pipe->bind_vs_state(pipe, st->vp->driver_shader);
-
    pipe->set_sampler_textures(pipe, ctx->st->state.num_textures,
                               ctx->st->state.sampler_texture);
 }
@@ -514,7 +512,13 @@ st_destroy_bitmap(struct st_context *st)
 {
    struct pipe_context *pipe = st->pipe;
 
-   /* XXX free frag shader state */
+   if (st->bitmap.combined_prog) {
+      st_delete_program(st->ctx, &st->bitmap.combined_prog->Base.Base);
+   }
+
+   if (st->bitmap.program) {
+      st_delete_program(st->ctx, &st->bitmap.program->Base.Base);
+   }
 
    if (st->bitmap.vs) {
       pipe->delete_vs_state(pipe, st->bitmap.vs);
index a739fcd3362e9d6ffad15c805850c467df20f61c..003ec0d2b793b250ccf367ccf2799139e5a656ea 100644 (file)
@@ -45,6 +45,7 @@
 #include "st_context.h"
 #include "st_program.h"
 #include "st_atom_shader.h"
+#include "st_cb_program.h"
 
 
 static GLuint SerialNo = 1;
@@ -122,8 +123,8 @@ static struct gl_program *st_new_program( GLcontext *ctx,
 }
 
 
-static void st_delete_program( GLcontext *ctx,
-                              struct gl_program *prog )
+void
+st_delete_program(GLcontext *ctx, struct gl_program *prog)
 {
    struct st_context *st = st_context(ctx);
    struct pipe_context *pipe = st->pipe;
index 45dc753dffe320ea035280034ea3b089743a5f9c..0de96f2fd22e46bea10bd6acd142036248908d8c 100644 (file)
@@ -32,5 +32,8 @@
 extern void
 st_init_program_functions(struct dd_function_table *functions);
 
+extern void
+st_delete_program(GLcontext *ctx, struct gl_program *prog);
+
 
 #endif
index d9e8722976444e028f727366c90ce9c3c074f48d..7c18386575386310570e585b1bc1f89a75f2e2d4 100644 (file)
@@ -42,6 +42,7 @@
 #include "st_cb_drawpixels.h"
 #include "st_cb_fbo.h"
 #include "st_cb_feedback.h"
+#include "st_cb_program.h"
 #include "st_cb_queryobj.h"
 #include "st_cb_rasterpos.h"
 #include "st_cb_readpixels.h"
index 9ef2a07eaac2c63af448dcb74e5ae6dc9ea0e67d..63d6590540c739325b6937c4b0d4da9f7cc6b56b 100644 (file)
@@ -97,10 +97,6 @@ struct st_vertex_program
 };
 
 
-extern void
-st_init_program_functions(struct dd_function_table *functions);
-
-
 static inline struct st_fragment_program *
 st_fragment_program( struct gl_fragment_program *fp )
 {