summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>2016-04-05 17:38:38 +0200
committerBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>2016-04-19 18:10:31 +0200
commite56514f6316e48ee2231841d45695ff2b8f8b4f5 (patch)
treef883828a8897de706dc4ef494737360352dc2fcc
parentc3083d841e04e14d3682e55cf5d1004f5310e9d4 (diff)
downloadmesa-e56514f6316e48ee2231841d45695ff2b8f8b4f5.tar.gz
mesa-e56514f6316e48ee2231841d45695ff2b8f8b4f5.tar.xz
radeonsi: update predicate condition for compute dispatches
Signed-off-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Reviewed-by: Marek Olšák <marek.olsak@amd.com> Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com> Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
-rw-r--r--src/gallium/drivers/radeonsi/si_compute.c6
-rw-r--r--src/gallium/drivers/radeonsi/si_pipe.h9
2 files changed, 15 insertions, 0 deletions
diff --git a/src/gallium/drivers/radeonsi/si_compute.c b/src/gallium/drivers/radeonsi/si_compute.c
index 1cdaf6c..e075031 100644
--- a/src/gallium/drivers/radeonsi/si_compute.c
+++ b/src/gallium/drivers/radeonsi/si_compute.c
@@ -450,6 +450,12 @@ static void si_launch_grid(
if (!si_switch_compute_shader(sctx, program, &program->shader, info->pc))
return;
+ if (si_is_atom_dirty(sctx, sctx->atoms.s.render_cond)) {
+ sctx->atoms.s.render_cond->emit(&sctx->b,
+ sctx->atoms.s.render_cond);
+ si_set_atom_dirty(sctx, sctx->atoms.s.render_cond, false);
+ }
+
if (program->input_size || program->ir_type == PIPE_SHADER_IR_NATIVE)
si_upload_compute_input(sctx, info);
diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h
index ff60dcf..5a5249c 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.h
+++ b/src/gallium/drivers/radeonsi/si_pipe.h
@@ -421,6 +421,15 @@ si_set_atom_dirty(struct si_context *sctx,
sctx->dirty_atoms &= ~bit;
}
+static inline bool
+si_is_atom_dirty(struct si_context *sctx,
+ struct r600_atom *atom)
+{
+ unsigned bit = 1 << (atom->id - 1);
+
+ return sctx->dirty_atoms & bit;
+}
+
static inline void
si_mark_atom_dirty(struct si_context *sctx,
struct r600_atom *atom)