summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Olšák <marek.olsak@amd.com>2020-09-17 19:45:14 -0400
committerEric Engestrom <eric@engestrom.ch>2020-09-27 11:10:03 +0200
commit520d023bfb256dd0e90f3dde96c6920682290243 (patch)
tree08feaf449ba75043f78cf284514b8e5b967a18f8
parent14c7f4740e38bf259d9eff5835118b3ad63e3fb8 (diff)
radeonsi: fix indirect dispatches with variable block sizes
The block size input was uninitialized. Fixes: 77c81164bc1c "radeonsi: support ARB_compute_variable_group_size" Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6782> (cherry picked from commit 8be46d6558e04f5dc9b8bebd31a36b1f3d593aa6)
-rw-r--r--.pick_status.json2
-rw-r--r--src/gallium/drivers/radeonsi/si_compute.c21
2 files changed, 11 insertions, 12 deletions
diff --git a/.pick_status.json b/.pick_status.json
index f11dcc9759a..c4fe0a8f095 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -472,7 +472,7 @@
"description": "radeonsi: fix indirect dispatches with variable block sizes",
"nominated": true,
"nomination_type": 1,
- "resolution": 0,
+ "resolution": 1,
"master_sha": null,
"because_sha": "77c81164bc1cd9ec98b32c40753f590791450434"
},
diff --git a/src/gallium/drivers/radeonsi/si_compute.c b/src/gallium/drivers/radeonsi/si_compute.c
index f92c96f0830..9e7ee5c3458 100644
--- a/src/gallium/drivers/radeonsi/si_compute.c
+++ b/src/gallium/drivers/radeonsi/si_compute.c
@@ -677,27 +677,26 @@ static void si_setup_nir_user_data(struct si_context *sctx, const struct pipe_gr
12 * sel->info.uses_grid_size;
unsigned cs_user_data_reg = block_size_reg + 12 * program->reads_variable_block_size;
- if (info->indirect) {
- if (sel->info.uses_grid_size) {
+ if (sel->info.uses_grid_size) {
+ if (info->indirect) {
for (unsigned i = 0; i < 3; ++i) {
si_cp_copy_data(sctx, sctx->gfx_cs, COPY_DATA_REG, NULL, (grid_size_reg >> 2) + i,
COPY_DATA_SRC_MEM, si_resource(info->indirect),
info->indirect_offset + 4 * i);
}
- }
- } else {
- if (sel->info.uses_grid_size) {
+ } else {
radeon_set_sh_reg_seq(cs, grid_size_reg, 3);
radeon_emit(cs, info->grid[0]);
radeon_emit(cs, info->grid[1]);
radeon_emit(cs, info->grid[2]);
}
- if (program->reads_variable_block_size) {
- radeon_set_sh_reg_seq(cs, block_size_reg, 3);
- radeon_emit(cs, info->block[0]);
- radeon_emit(cs, info->block[1]);
- radeon_emit(cs, info->block[2]);
- }
+ }
+
+ if (program->reads_variable_block_size) {
+ radeon_set_sh_reg_seq(cs, block_size_reg, 3);
+ radeon_emit(cs, info->block[0]);
+ radeon_emit(cs, info->block[1]);
+ radeon_emit(cs, info->block[2]);
}
if (program->num_cs_user_data_dwords) {