struct st_context *st = st_context(ctx);
struct st_program *stp = st_program(prog);
- if (prog->Target == GL_VERTEX_PROGRAM_ARB)
- st_release_vp_variants(st, stp);
- if (prog->Target == GL_FRAGMENT_PROGRAM_ARB)
- st_release_fp_variants(st, stp);
- else
- st_release_common_variants(st, stp);
+ st_release_variants(st, stp);
if (stp->glsl_to_tgsi)
free_glsl_to_tgsi_visitor(stp->glsl_to_tgsi);
+ free(stp->serialized_nir);
+
/* delete base class */
_mesa_delete_program( ctx, prog );
}
/* GLSL-to-NIR should not end up here. */
assert(!stp->shader_program);
+ st_release_variants(st, stp);
+
if (target == GL_FRAGMENT_PROGRAM_ARB ||
target == GL_FRAGMENT_SHADER_ATI) {
if (target == GL_FRAGMENT_SHADER_ATI) {
st_init_atifs_prog(ctx, prog);
}
- st_release_fp_variants(st, stp);
if (!st_translate_fragment_program(st, stp))
return false;
} else if (target == GL_VERTEX_PROGRAM_ARB) {
- st_release_vp_variants(st, stp);
if (!st_translate_vertex_program(st, stp))
return false;
} else {
- st_release_common_variants(st, stp);
if (!st_translate_common_program(st, stp))
return false;
}
if (!linked || !linked->Program)
continue;
- switch (i) {
- case MESA_SHADER_VERTEX:
- if (st_program(linked->Program)->vp_variants)
- sh = st_program(linked->Program)->vp_variants->driver_shader;
- break;
- case MESA_SHADER_FRAGMENT:
- if (st_program(linked->Program)->fp_variants)
- sh = st_program(linked->Program)->fp_variants->driver_shader;
- break;
- case MESA_SHADER_TESS_CTRL:
- case MESA_SHADER_TESS_EVAL:
- case MESA_SHADER_GEOMETRY:
- case MESA_SHADER_COMPUTE:
- if (st_program(linked->Program)->variants)
- sh = st_program(linked->Program)->variants->driver_shader;
- break;
- }
+ if (st_program(linked->Program)->variants)
+ sh = st_program(linked->Program)->variants->driver_shader;
unsigned type = pipe_shader_type_from_mesa(i);