Beispiel #1
0
/**
 * Called via ctx->Driver.DeleteProgram()
 */
static void
st_delete_program(struct gl_context *ctx, struct gl_program *prog)
{
   struct st_context *st = st_context(ctx);

   switch( prog->Target ) {
   case GL_VERTEX_PROGRAM_ARB:
      {
         struct st_vertex_program *stvp = (struct st_vertex_program *) prog;
         st_release_vp_variants( st, stvp );
         
         if (stvp->glsl_to_tgsi)
            free_glsl_to_tgsi_visitor(stvp->glsl_to_tgsi);
      }
      break;
   case MESA_GEOMETRY_PROGRAM:
      {
         struct st_geometry_program *stgp =
            (struct st_geometry_program *) prog;

         st_release_gp_variants(st, stgp);
         
         if (stgp->glsl_to_tgsi)
            free_glsl_to_tgsi_visitor(stgp->glsl_to_tgsi);

         if (stgp->tgsi.tokens) {
            st_free_tokens((void *) stgp->tgsi.tokens);
            stgp->tgsi.tokens = NULL;
         }
      }
      break;
   case GL_FRAGMENT_PROGRAM_ARB:
      {
         struct st_fragment_program *stfp =
            (struct st_fragment_program *) prog;

         st_release_fp_variants(st, stfp);
         
         if (stfp->glsl_to_tgsi)
            free_glsl_to_tgsi_visitor(stfp->glsl_to_tgsi);
         
         if (stfp->tgsi.tokens) {
            st_free_tokens(stfp->tgsi.tokens);
            stfp->tgsi.tokens = NULL;
         }
      }
      break;
   default:
      assert(0); /* problem */
   }

   /* delete base class */
   _mesa_delete_program( ctx, prog );
}
Beispiel #2
0
/**
 * Called via ctx->Driver.DeleteProgram()
 */
static void
st_delete_program(struct gl_context *ctx, struct gl_program *prog)
{
   struct st_context *st = st_context(ctx);

   switch( prog->Target ) {
   case GL_VERTEX_PROGRAM_ARB:
      {
         struct st_vertex_program *stvp = (struct st_vertex_program *) prog;
         st_release_vp_variants( st, stvp );
         
         if (stvp->glsl_to_tgsi)
            free_glsl_to_tgsi_visitor(stvp->glsl_to_tgsi);
      }
      break;
   case GL_GEOMETRY_PROGRAM_NV:
      {
         struct st_geometry_program *stgp =
            (struct st_geometry_program *) prog;

         st_release_basic_variants(st, stgp->Base.Base.Target,
                                   &stgp->variants, &stgp->tgsi);
         
         if (stgp->glsl_to_tgsi)
            free_glsl_to_tgsi_visitor(stgp->glsl_to_tgsi);
      }
      break;
   case GL_FRAGMENT_PROGRAM_ARB:
      {
         struct st_fragment_program *stfp =
            (struct st_fragment_program *) prog;

         st_release_fp_variants(st, stfp);
         
         if (stfp->glsl_to_tgsi)
            free_glsl_to_tgsi_visitor(stfp->glsl_to_tgsi);
      }
      break;
   case GL_TESS_CONTROL_PROGRAM_NV:
      {
         struct st_tessctrl_program *sttcp =
            (struct st_tessctrl_program *) prog;

         st_release_basic_variants(st, sttcp->Base.Base.Target,
                                   &sttcp->variants, &sttcp->tgsi);

         if (sttcp->glsl_to_tgsi)
            free_glsl_to_tgsi_visitor(sttcp->glsl_to_tgsi);
      }
      break;
   case GL_TESS_EVALUATION_PROGRAM_NV:
      {
         struct st_tesseval_program *sttep =
            (struct st_tesseval_program *) prog;

         st_release_basic_variants(st, sttep->Base.Base.Target,
                                   &sttep->variants, &sttep->tgsi);

         if (sttep->glsl_to_tgsi)
            free_glsl_to_tgsi_visitor(sttep->glsl_to_tgsi);
      }
      break;
   case GL_COMPUTE_PROGRAM_NV:
      {
         struct st_compute_program *stcp =
            (struct st_compute_program *) prog;

         st_release_cp_variants(st, stcp);

         if (stcp->glsl_to_tgsi)
            free_glsl_to_tgsi_visitor(stcp->glsl_to_tgsi);
      }
      break;
   default:
      assert(0); /* problem */
   }

   /* delete base class */
   _mesa_delete_program( ctx, prog );
}