Browse Source

nv40: destroy programs

tags/mesa_20090313
Ben Skeggs 17 years ago
parent
commit
ab4c2e014d

+ 4
- 0
src/mesa/pipe/nv40/nv40_context.h View File

@@ -79,12 +79,16 @@ extern void nv40_vertprog_translate(struct nv40_context *,
struct nv40_vertex_program *);
extern void nv40_vertprog_bind(struct nv40_context *,
struct nv40_vertex_program *);
extern void nv40_vertprog_destroy(struct nv40_context *,
struct nv40_vertex_program *);

/* nv40_fragprog.c */
extern void nv40_fragprog_translate(struct nv40_context *,
struct nv40_fragment_program *);
extern void nv40_fragprog_bind(struct nv40_context *,
struct nv40_fragment_program *);
extern void nv40_fragprog_destroy(struct nv40_context *,
struct nv40_fragment_program *);

/* nv40_state.c and friends */
extern void nv40_emit_hw_state(struct nv40_context *nv40);

+ 10
- 20
src/mesa/pipe/nv40/nv40_fragprog.c View File

@@ -27,22 +27,6 @@
#define abs(s) nv40_sr_abs((s))
#define scale(s,v) nv40_sr_scale((s), NV40_FP_OP_DST_SCALE_##v)

static uint32_t
passthrough_fp_data[] = {
0x01403e81, 0x1c9dc801, 0x0001c800, 0x3fe1c800
};

static struct nv40_fragment_program
passthrough_fp = {
.pipe = NULL,
.translated = TRUE,
.insn = passthrough_fp_data,
.insn_len = sizeof(passthrough_fp_data) / sizeof(uint32_t),
.buffer = NULL,
.uses_kil = 0,
.num_regs = 2,
};

struct nv40_fpc {
struct nv40_fragment_program *fp;

@@ -705,10 +689,8 @@ nv40_fragprog_bind(struct nv40_context *nv40, struct nv40_fragment_program *fp)

if (!fp->translated) {
nv40_fragprog_translate(nv40, fp);
if (!fp->translated) {
NOUVEAU_ERR("invalid, using passthrough shader\n");
fp = &passthrough_fp;
}
if (!fp->translated)
assert(0);
}

if (fp->num_consts) {
@@ -763,3 +745,11 @@ nv40_fragprog_bind(struct nv40_context *nv40, struct nv40_fragment_program *fp)
nv40->fragprog.active = fp;
}

void
nv40_fragprog_destroy(struct nv40_context *nv40,
struct nv40_fragment_program *fp)
{
if (fp->insn_len)
free(fp->insn);
}


+ 10
- 2
src/mesa/pipe/nv40/nv40_state.c View File

@@ -505,7 +505,11 @@ nv40_vp_state_bind(struct pipe_context *pipe, void *hwcso)
static void
nv40_vp_state_delete(struct pipe_context *pipe, void *hwcso)
{
free(hwcso);
struct nv40_context *nv40 = (struct nv40_context *)pipe;
struct nv40_vertex_program *vp = hwcso;

nv40_vertprog_destroy(nv40, vp);
free(vp);
}

static void *
@@ -533,7 +537,11 @@ nv40_fp_state_bind(struct pipe_context *pipe, void *hwcso)
static void
nv40_fp_state_delete(struct pipe_context *pipe, void *hwcso)
{
free(hwcso);
struct nv40_context *nv40 = (struct nv40_context *)pipe;
struct nv40_fragment_program *fp = hwcso;

nv40_fragprog_destroy(nv40, fp);
free(fp);
}

static void

+ 9
- 0
src/mesa/pipe/nv40/nv40_vertprog.c View File

@@ -721,3 +721,12 @@ nv40_vertprog_bind(struct nv40_context *nv40, struct nv40_vertex_program *vp)
nv40->vertprog.active = vp;
}

void
nv40_vertprog_destroy(struct nv40_context *nv40, struct nv40_vertex_program *vp)
{
if (vp->nr_consts)
free(vp->consts);
if (vp->nr_insns)
free(vp->insns);
}


Loading…
Cancel
Save