diff options
Diffstat (limited to 'src/mesa/state_tracker')
| -rw-r--r-- | src/mesa/state_tracker/st_atom_shader.c | 7 | ||||
| -rw-r--r-- | src/mesa/state_tracker/st_context.c | 3 | ||||
| -rw-r--r-- | src/mesa/state_tracker/st_program.h | 24 | 
3 files changed, 31 insertions, 3 deletions
diff --git a/src/mesa/state_tracker/st_atom_shader.c b/src/mesa/state_tracker/st_atom_shader.c index 652500f52a..7745591afb 100644 --- a/src/mesa/state_tracker/st_atom_shader.c +++ b/src/mesa/state_tracker/st_atom_shader.c @@ -39,6 +39,7 @@  #include "main/imports.h"  #include "main/mtypes.h" +#include "shader/program.h"  #include "pipe/p_context.h"  #include "pipe/p_shader_tokens.h" @@ -264,14 +265,16 @@ update_linkage( struct st_context *st )      */     assert(st->ctx->VertexProgram._Current);     stvp = st_vertex_program(st->ctx->VertexProgram._Current); +   assert(stvp->Base.Base.Target == GL_VERTEX_PROGRAM_ARB);     assert(st->ctx->FragmentProgram._Current);     stfp = st_fragment_program(st->ctx->FragmentProgram._Current); +   assert(stfp->Base.Base.Target == GL_FRAGMENT_PROGRAM_ARB);     xvp = find_translated_vp(st, stvp, stfp); -   st->vp = stvp; -   st->fp = stfp; +   st_reference_vertprog(st, &st->vp, stvp); +   st_reference_fragprog(st, &st->fp, stfp);     cso_set_vertex_shader_handle(st->cso_context, stvp->driver_shader);     cso_set_fragment_shader_handle(st->cso_context, stfp->driver_shader); diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c index c900064f2b..8db55a179f 100644 --- a/src/mesa/state_tracker/st_context.c +++ b/src/mesa/state_tracker/st_context.c @@ -158,6 +158,9 @@ static void st_destroy_context_priv( struct st_context *st )  {     uint i; +   st_reference_fragprog(st, &st->fp, NULL); +   st_reference_vertprog(st, &st->vp, NULL); +     draw_destroy(st->draw);     st_destroy_atoms( st );     st_destroy_draw( st ); diff --git a/src/mesa/state_tracker/st_program.h b/src/mesa/state_tracker/st_program.h index d8f26da2ee..bf07a50789 100644 --- a/src/mesa/state_tracker/st_program.h +++ b/src/mesa/state_tracker/st_program.h @@ -34,7 +34,8 @@  #ifndef ST_PROGRAM_H  #define ST_PROGRAM_H -#include "mtypes.h" +#include "main/mtypes.h" +#include "shader/program.h"  #include "pipe/p_shader_tokens.h" @@ -115,6 +116,27 @@ st_vertex_program( struct gl_vertex_program *vp )  } +static INLINE void +st_reference_vertprog(struct st_context *st, +                      struct st_vertex_program **ptr, +                      struct st_vertex_program *prog) +{ +   _mesa_reference_program(st->ctx, +                           (struct gl_program **) ptr, +                           (struct gl_program *) prog); +} + +static INLINE void +st_reference_fragprog(struct st_context *st, +                      struct st_fragment_program **ptr, +                      struct st_fragment_program *prog) +{ +   _mesa_reference_program(st->ctx, +                           (struct gl_program **) ptr, +                           (struct gl_program *) prog); +} + +  extern void  st_translate_fragment_program(struct st_context *st,                                struct st_fragment_program *fp,  | 
