Signed-off-by: Jerome Glisse <jglisse@redhat.com>tags/mesa-7.9-rc1
| @@ -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) | |||