r600g: fix memory/bo leak
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
This commit is contained in:
parent
c9039fdb16
commit
e73c5501b2
|
@ -39,6 +39,21 @@ static void r600_destroy_context(struct pipe_context *context)
|
|||
{
|
||||
struct r600_context *rctx = r600_context(context);
|
||||
|
||||
rctx->rasterizer = r600_context_state_decref(rctx->rasterizer);
|
||||
rctx->poly_stipple = r600_context_state_decref(rctx->poly_stipple);
|
||||
rctx->scissor = r600_context_state_decref(rctx->scissor);
|
||||
rctx->clip = r600_context_state_decref(rctx->clip);
|
||||
rctx->ps_shader = r600_context_state_decref(rctx->ps_shader);
|
||||
rctx->vs_shader = r600_context_state_decref(rctx->vs_shader);
|
||||
rctx->depth = r600_context_state_decref(rctx->depth);
|
||||
rctx->stencil = r600_context_state_decref(rctx->stencil);
|
||||
rctx->alpha = r600_context_state_decref(rctx->alpha);
|
||||
rctx->dsa = r600_context_state_decref(rctx->dsa);
|
||||
rctx->blend = r600_context_state_decref(rctx->blend);
|
||||
rctx->stencil_ref = r600_context_state_decref(rctx->stencil_ref);
|
||||
rctx->viewport = r600_context_state_decref(rctx->viewport);
|
||||
rctx->framebuffer = r600_context_state_decref(rctx->framebuffer);
|
||||
radeon_ctx_fini(&rctx->ctx);
|
||||
FREE(rctx);
|
||||
}
|
||||
|
||||
|
|
|
@ -131,6 +131,7 @@ struct r600_context {
|
|||
struct radeon_state config;
|
||||
/* FIXME get rid of those vs_resource,vs/ps_constant */
|
||||
struct radeon_state vs_resource[160];
|
||||
unsigned vs_nresource;
|
||||
struct radeon_state vs_constant[256];
|
||||
struct radeon_state ps_constant[256];
|
||||
/* hw states */
|
||||
|
|
|
@ -94,6 +94,9 @@ static int r600_draw_common(struct r600_draw *draw)
|
|||
radeon_draw_bind(&rctx->draw, &rctx->vs_shader->rstate[0]);
|
||||
radeon_draw_bind(&rctx->draw, &rctx->ps_shader->rstate[0]);
|
||||
|
||||
for (i = 0 ; i < rctx->vs_nresource; i++) {
|
||||
radeon_state_fini(&rctx->vs_resource[i]);
|
||||
}
|
||||
for (i = 0 ; i < rctx->vertex_elements->count; i++) {
|
||||
vs_resource = &rctx->vs_resource[i];
|
||||
j = rctx->vertex_elements->elements[i].vertex_buffer_index;
|
||||
|
@ -120,6 +123,7 @@ static int r600_draw_common(struct r600_draw *draw)
|
|||
}
|
||||
radeon_draw_bind(&rctx->draw, vs_resource);
|
||||
}
|
||||
rctx->vs_nresource = rctx->vertex_elements->count;
|
||||
/* FIXME start need to change winsys */
|
||||
radeon_state_init(&draw->draw, rscreen->rw, R600_STATE_DRAW, 0, 0);
|
||||
draw->draw.states[R600_DRAW__VGT_NUM_INDICES] = draw->count;
|
||||
|
|
|
@ -121,8 +121,7 @@ void radeon_ctx_fini(struct radeon_ctx *ctx)
|
|||
free(ctx->bo);
|
||||
free(ctx->pm4);
|
||||
free(ctx->reloc);
|
||||
memset(ctx, 0, sizeof(*ctx));
|
||||
free(ctx);
|
||||
memset(ctx, 0, sizeof(struct radeon_ctx));
|
||||
}
|
||||
|
||||
static int radeon_ctx_state_bo(struct radeon_ctx *ctx, struct radeon_state *state)
|
||||
|
|
Loading…
Reference in New Issue