freedreno/ir3: fix crash in fail path

Signed-off-by: Rob Clark <robclark@freedesktop.org>
This commit is contained in:
Rob Clark 2015-06-26 13:38:03 -04:00
parent 1370fde8af
commit 0a8c8fa770
3 changed files with 12 additions and 3 deletions

View File

@ -60,6 +60,9 @@ draw_impl(struct fd_context *ctx, struct fd_ringbuffer *ring,
const struct pipe_draw_info *info = emit->info; const struct pipe_draw_info *info = emit->info;
enum pc_di_primtype primtype = ctx->primtypes[info->mode]; enum pc_di_primtype primtype = ctx->primtypes[info->mode];
if (!(fd3_emit_get_vp(emit) && fd3_emit_get_fp(emit)))
return;
fd3_emit_state(ctx, ring, emit); fd3_emit_state(ctx, ring, emit);
if (emit->dirty & (FD_DIRTY_VTXBUF | FD_DIRTY_VTXSTATE)) if (emit->dirty & (FD_DIRTY_VTXBUF | FD_DIRTY_VTXSTATE))

View File

@ -48,6 +48,9 @@ draw_impl(struct fd_context *ctx, struct fd_ringbuffer *ring,
{ {
const struct pipe_draw_info *info = emit->info; const struct pipe_draw_info *info = emit->info;
if (!(fd4_emit_get_vp(emit) && fd4_emit_get_fp(emit)))
return;
fd4_emit_state(ctx, ring, emit); fd4_emit_state(ctx, ring, emit);
if (emit->dirty & (FD_DIRTY_VTXBUF | FD_DIRTY_VTXSTATE)) if (emit->dirty & (FD_DIRTY_VTXBUF | FD_DIRTY_VTXSTATE))

View File

@ -46,7 +46,8 @@ delete_variant(struct ir3_shader_variant *v)
{ {
if (v->ir) if (v->ir)
ir3_destroy(v->ir); ir3_destroy(v->ir);
fd_bo_del(v->bo); if (v->bo)
fd_bo_del(v->bo);
free(v); free(v);
} }
@ -228,8 +229,10 @@ ir3_shader_variant(struct ir3_shader *shader, struct ir3_shader_key key)
/* compile new variant if it doesn't exist already: */ /* compile new variant if it doesn't exist already: */
v = create_variant(shader, key); v = create_variant(shader, key);
v->next = shader->variants; if (v) {
shader->variants = v; v->next = shader->variants;
shader->variants = v;
}
return v; return v;
} }