radeonsi/gfx10: fix the PRIMITIVES_GENERATED query if using legacy streamout
authorMarek Olšák <marek.olsak@amd.com>
Wed, 21 Aug 2019 00:07:26 +0000 (20:07 -0400)
committerMarek Olšák <marek.olsak@amd.com>
Tue, 27 Aug 2019 20:16:08 +0000 (16:16 -0400)
Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
src/gallium/drivers/radeonsi/si_state.h
src/gallium/drivers/radeonsi/si_state_shaders.c
src/gallium/drivers/radeonsi/si_state_streamout.c

index 11c7224b1d825e54730216cb4a4e4339302e4bd8..3480c4f7eeb1b8967e15547a3120dfa2246f43fd 100644 (file)
@@ -601,6 +601,7 @@ void si_shader_selector_key_vs(struct si_context *sctx,
                               struct si_shader_key *key,
                               struct si_vs_prolog_bits *prolog_key);
 unsigned si_get_input_prim(const struct si_shader_selector *gs);
+bool si_update_ngg(struct si_context *sctx);
 
 /* si_state_draw.c */
 void si_emit_surface_sync(struct si_context *sctx, struct radeon_cmdbuf *cs,
index 22c54d32e9f8a60b5c9aab625081895e6a89c30d..72719d8c47599f1862fe7d5d19bf7bca60e20dd0 100644 (file)
@@ -2984,8 +2984,6 @@ static void si_update_common_shader_state(struct si_context *sctx)
        sctx->do_update_shaders = true;
 }
 
-static bool si_update_ngg(struct si_context *sctx);
-
 static void si_bind_vs_shader(struct pipe_context *ctx, void *state)
 {
        struct si_context *sctx = (struct si_context *)ctx;
@@ -3024,7 +3022,7 @@ static void si_update_tess_uses_prim_id(struct si_context *sctx)
                 sctx->ps_shader.cso->info.uses_primid);
 }
 
-static bool si_update_ngg(struct si_context *sctx)
+bool si_update_ngg(struct si_context *sctx)
 {
        if (!sctx->screen->use_ngg) {
                assert(!sctx->ngg);
@@ -3039,7 +3037,8 @@ static bool si_update_ngg(struct si_context *sctx)
        } else if (!sctx->screen->use_ngg_streamout) {
                struct si_shader_selector *last = si_get_vs(sctx)->cso;
 
-               if (last && last->so.num_outputs)
+               if ((last && last->so.num_outputs) ||
+                   sctx->streamout.prims_gen_query_enabled)
                        new_ngg = false;
        }
 
index ae91c55e0c263e1ca14692f542e3ceec594ca796..9b1d05f4df8279736f137de9ecdcca17528825ba 100644 (file)
@@ -470,6 +470,11 @@ void si_update_prims_generated_query_state(struct si_context *sctx,
 
                if (old_strmout_en != si_get_strmout_en(sctx))
                        si_mark_atom_dirty(sctx, &sctx->atoms.s.streamout_enable);
+
+               if (si_update_ngg(sctx)) {
+                       si_shader_change_notify(sctx);
+                       sctx->do_update_shaders = true;
+               }
        }
 }