From 54de7099115502c561f5f51095e08dc0a52c71b7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Tue, 30 Sep 2014 16:25:18 +0200 Subject: [PATCH] radeonsi: always compile shaders on demand MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The first compiled shader is sometimes useless, because the key doesn't match the key for the draw call where it's used. Reviewed-by: Michel Dänzer --- src/gallium/drivers/radeonsi/si_state.c | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c index eb256063811..da5fcb09423 100644 --- a/src/gallium/drivers/radeonsi/si_state.c +++ b/src/gallium/drivers/radeonsi/si_state.c @@ -2305,19 +2305,12 @@ static void *si_create_shader_state(struct pipe_context *ctx, unsigned pipe_shader_type) { struct si_shader_selector *sel = CALLOC_STRUCT(si_shader_selector); - int r; sel->type = pipe_shader_type; sel->tokens = tgsi_dup_tokens(state->tokens); sel->so = state->stream_output; tgsi_scan_shader(state->tokens, &sel->info); - r = si_shader_select(ctx, sel); - if (r) { - free(sel); - return NULL; - } - return sel; } @@ -2344,10 +2337,7 @@ static void si_bind_vs_shader(struct pipe_context *ctx, void *state) struct si_context *sctx = (struct si_context *)ctx; struct si_shader_selector *sel = state; - if (sctx->vs_shader == sel) - return; - - if (!sel || !sel->current) + if (sctx->vs_shader == sel || !sel) return; sctx->vs_shader = sel; @@ -2373,8 +2363,8 @@ static void si_bind_ps_shader(struct pipe_context *ctx, void *state) if (sctx->ps_shader == sel) return; - /* use dummy shader if supplied shader is corrupt */ - if (!sel || !sel->current) { + /* use a dummy shader if binding a NULL shader */ + if (!sel) { if (!sctx->dummy_pixel_shader) { sctx->dummy_pixel_shader = util_make_fragment_cloneinput_shader(&sctx->b.b, 0, -- 2.30.2