Signed-off-by: Rob Clark <robclark@freedesktop.org>tags/12.0-branchpoint
@@ -167,6 +167,7 @@ fd3_draw_vbo(struct fd_context *ctx, const struct pipe_draw_info *info) | |||
emit.key.binning_pass = false; | |||
emit.dirty = dirty; | |||
emit.vp = NULL; /* we changed key so need to refetch vp */ | |||
emit.fp = NULL; | |||
draw_impl(ctx, ctx->ring, &emit); | |||
} | |||
@@ -75,8 +75,14 @@ static inline const struct ir3_shader_variant * | |||
fd3_emit_get_fp(struct fd3_emit *emit) | |||
{ | |||
if (!emit->fp) { | |||
struct fd3_shader_stateobj *so = emit->prog->fp; | |||
emit->fp = ir3_shader_variant(so->shader, emit->key); | |||
if (emit->key.binning_pass) { | |||
/* use dummy stateobj to simplify binning vs non-binning: */ | |||
static const struct ir3_shader_variant binning_fp = {}; | |||
emit->fp = &binning_fp; | |||
} else { | |||
struct fd3_shader_stateobj *so = emit->prog->fp; | |||
emit->fp = ir3_shader_variant(so->shader, emit->key); | |||
} | |||
} | |||
return emit->fp; | |||
} |
@@ -140,14 +140,7 @@ fd3_program_emit(struct fd_ringbuffer *ring, struct fd3_emit *emit, | |||
debug_assert(nr <= ARRAY_SIZE(color_regid)); | |||
vp = fd3_emit_get_vp(emit); | |||
if (emit->key.binning_pass) { | |||
/* use dummy stateobj to simplify binning vs non-binning: */ | |||
static const struct ir3_shader_variant binning_fp = {}; | |||
fp = &binning_fp; | |||
} else { | |||
fp = fd3_emit_get_fp(emit); | |||
} | |||
fp = fd3_emit_get_fp(emit); | |||
vsi = &vp->info; | |||
fsi = &fp->info; |