radeonsi: Compile dummy pixel shader on demand
authorMichel Dänzer <michel.daenzer@amd.com>
Wed, 27 Aug 2014 08:29:08 +0000 (17:29 +0900)
committerMichel Dänzer <michel@daenzer.net>
Tue, 2 Sep 2014 06:24:07 +0000 (15:24 +0900)
It's never used under normal circumstances.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/radeonsi/si_pipe.c
src/gallium/drivers/radeonsi/si_state.c

index abd7d4f6a94b1a54eebe5f6026b5b07806f16a07..b63c5d7fef9402926f79df5ff092c0bdf71947b2 100644 (file)
@@ -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 */
index bb8deb6ccff38c7a6bacf25cb4d1eecd96719cc1..1d6ae864836455682325a6828b6138246f4b369c 100644 (file)
@@ -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;
 }