diff options
author | Michel Dänzer <[email protected]> | 2014-08-27 17:29:08 +0900 |
---|---|---|
committer | Michel Dänzer <[email protected]> | 2014-09-02 15:24:07 +0900 |
commit | a75fee78c680054aeb1b96ec25e02dd36286fed5 (patch) | |
tree | 1782cd5dd5a81c3233ba3279e299c19a9ac66b77 /src/gallium/drivers | |
parent | b84b9eae20156ad46775c7834a82078a008ddb2c (diff) |
radeonsi: Compile dummy pixel shader on demand
It's never used under normal circumstances.
Reviewed-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src/gallium/drivers')
-rw-r--r-- | src/gallium/drivers/radeonsi/si_pipe.c | 7 | ||||
-rw-r--r-- | src/gallium/drivers/radeonsi/si_state.c | 11 |
2 files changed, 10 insertions, 8 deletions
diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c index abd7d4f6a94..b63c5d7fef9 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.c +++ b/src/gallium/drivers/radeonsi/si_pipe.c @@ -27,7 +27,6 @@ #include "radeon/radeon_uvd.h" #include "util/u_memory.h" -#include "util/u_simple_shaders.h" #include "vl/vl_decoder.h" /* @@ -124,12 +123,6 @@ static struct pipe_context *si_create_context(struct pipe_screen *screen, void * goto fail; sctx->blitter->draw_rectangle = r600_draw_rectangle; - sctx->dummy_pixel_shader = - util_make_fragment_cloneinput_shader(&sctx->b.b, 0, - TGSI_SEMANTIC_GENERIC, - TGSI_INTERPOLATE_CONSTANT); - sctx->b.b.bind_fs_state(&sctx->b.b, sctx->dummy_pixel_shader); - /* these must be last */ si_begin_new_cs(sctx); r600_query_init_backend_mask(&sctx->b); /* this emits commands and must be last */ diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c index bb8deb6ccff..1d6ae864836 100644 --- a/src/gallium/drivers/radeonsi/si_state.c +++ b/src/gallium/drivers/radeonsi/si_state.c @@ -36,6 +36,7 @@ #include "util/u_framebuffer.h" #include "util/u_helpers.h" #include "util/u_memory.h" +#include "util/u_simple_shaders.h" static void si_init_atom(struct r600_atom *atom, struct r600_atom **list_elem, void (*emit)(struct si_context *ctx, struct r600_atom *state), @@ -2283,8 +2284,16 @@ static void si_bind_ps_shader(struct pipe_context *ctx, void *state) return; /* use dummy shader if supplied shader is corrupt */ - if (!sel || !sel->current) + if (!sel || !sel->current) { + if (!sctx->dummy_pixel_shader) { + sctx->dummy_pixel_shader = + util_make_fragment_cloneinput_shader(&sctx->b.b, 0, + TGSI_SEMANTIC_GENERIC, + TGSI_INTERPOLATE_CONSTANT); + } + sel = sctx->dummy_pixel_shader; + } sctx->ps_shader = sel; } |