gallium: free bitmap fragment shaders, misc clean-up
diff --git a/src/mesa/state_tracker/st_cb_bitmap.c b/src/mesa/state_tracker/st_cb_bitmap.c
index dbf2f77..6e59439 100644
--- a/src/mesa/state_tracker/st_cb_bitmap.c
+++ b/src/mesa/state_tracker/st_cb_bitmap.c
@@ -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 @@
cso_save_rasterizer(cso);
cso_save_samplers(cso);
- //cso_save_viewport(cso);
/* rasterizer state: just scissor */
{
@@ -458,11 +458,9 @@
/* 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 @@
{
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);
diff --git a/src/mesa/state_tracker/st_cb_program.c b/src/mesa/state_tracker/st_cb_program.c
index a739fcd..003ec0d 100644
--- a/src/mesa/state_tracker/st_cb_program.c
+++ b/src/mesa/state_tracker/st_cb_program.c
@@ -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 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;
diff --git a/src/mesa/state_tracker/st_cb_program.h b/src/mesa/state_tracker/st_cb_program.h
index 45dc753..0de96f2 100644
--- a/src/mesa/state_tracker/st_cb_program.h
+++ b/src/mesa/state_tracker/st_cb_program.h
@@ -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
diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c
index d9e8722..7c18386 100644
--- a/src/mesa/state_tracker/st_context.c
+++ b/src/mesa/state_tracker/st_context.c
@@ -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"
diff --git a/src/mesa/state_tracker/st_program.h b/src/mesa/state_tracker/st_program.h
index 9ef2a07..63d6590 100644
--- a/src/mesa/state_tracker/st_program.h
+++ b/src/mesa/state_tracker/st_program.h
@@ -97,10 +97,6 @@
};
-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 )
{