mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 13:58:04 +02:00
radeonsi: store group_size_variable in struct si_compute
For compute shaders, we free the selector after the shader has been
compiled, so we need to save this bit somewhere else. Also, make sure that
this type of bug cannot re-appear, by NULL-ing the selector pointer after
we're done with it.
This bug has been there since the feature was added, but was only exposed
in piglit arb_compute_variable_group_size-local-size by commit
9bfee7047b (which is totally unrelated).
Cc: 13.0 <mesa-stable@lists.freedesktop.org>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
47db6b4600
commit
42d5e91a2a
1 changed files with 8 additions and 5 deletions
|
|
@ -42,7 +42,8 @@ struct si_compute {
|
|||
struct si_shader shader;
|
||||
|
||||
struct pipe_resource *global_buffers[MAX_GLOBAL_BUFFERS];
|
||||
bool use_code_object_v2;
|
||||
unsigned use_code_object_v2 : 1;
|
||||
unsigned variable_group_size : 1;
|
||||
};
|
||||
|
||||
struct dispatch_packet {
|
||||
|
|
@ -147,7 +148,11 @@ static void *si_create_compute_state(
|
|||
S_00B84C_TGID_Z_EN(1) | S_00B84C_TIDIG_COMP_CNT(2) |
|
||||
S_00B84C_LDS_SIZE(shader->config.lds_size);
|
||||
|
||||
program->variable_group_size =
|
||||
sel.info.properties[TGSI_PROPERTY_CS_FIXED_BLOCK_WIDTH] == 0;
|
||||
|
||||
FREE(sel.tokens);
|
||||
program->shader.selector = NULL;
|
||||
} else {
|
||||
const struct pipe_llvm_program_header *header;
|
||||
const char *code;
|
||||
|
|
@ -607,14 +612,12 @@ static void si_setup_tgsi_grid(struct si_context *sctx,
|
|||
}
|
||||
} else {
|
||||
struct si_compute *program = sctx->cs_shader_state.program;
|
||||
bool variable_group_size =
|
||||
program->shader.selector->info.properties[TGSI_PROPERTY_CS_FIXED_BLOCK_WIDTH] == 0;
|
||||
|
||||
radeon_set_sh_reg_seq(cs, grid_size_reg, variable_group_size ? 6 : 3);
|
||||
radeon_set_sh_reg_seq(cs, grid_size_reg, program->variable_group_size ? 6 : 3);
|
||||
radeon_emit(cs, info->grid[0]);
|
||||
radeon_emit(cs, info->grid[1]);
|
||||
radeon_emit(cs, info->grid[2]);
|
||||
if (variable_group_size) {
|
||||
if (program->variable_group_size) {
|
||||
radeon_emit(cs, info->block[0]);
|
||||
radeon_emit(cs, info->block[1]);
|
||||
radeon_emit(cs, info->block[2]);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue