mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 08:50:13 +01:00
radeonsi: add si_shader::wave_size because it will vary
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13878>
This commit is contained in:
parent
41523773f5
commit
bc57488936
6 changed files with 15 additions and 0 deletions
|
|
@ -239,6 +239,7 @@ static void *si_create_compute_state(struct pipe_context *ctx, const struct pipe
|
|||
si_sampler_and_image_descriptors_idx(PIPE_SHADER_COMPUTE);
|
||||
sel->info.base.shared_size = cso->req_local_mem;
|
||||
program->shader.selector = &program->sel;
|
||||
program->shader.wave_size = si_get_shader_wave_size(&program->shader);
|
||||
program->ir_type = cso->ir_type;
|
||||
program->private_size = cso->req_private_mem;
|
||||
program->input_size = cso->req_input_mem;
|
||||
|
|
|
|||
|
|
@ -1997,6 +1997,9 @@ static inline unsigned si_get_wave_size(struct si_screen *sscreen,
|
|||
|
||||
static inline unsigned si_get_shader_wave_size(struct si_shader *shader)
|
||||
{
|
||||
if (shader->is_gs_copy_shader)
|
||||
return shader->selector->screen->ge_wave_size;
|
||||
|
||||
if (shader->selector->info.stage <= MESA_SHADER_GEOMETRY) {
|
||||
return si_get_wave_size(shader->selector->screen, shader->selector->info.stage,
|
||||
shader->key.ge.as_ngg,
|
||||
|
|
|
|||
|
|
@ -2100,6 +2100,9 @@ bool si_create_shader_variant(struct si_screen *sscreen, struct ac_llvm_compiler
|
|||
default:;
|
||||
}
|
||||
|
||||
assert(shader->wave_size == mainp->wave_size);
|
||||
assert(!shader->previous_stage || shader->wave_size == shader->previous_stage->wave_size);
|
||||
|
||||
/* Update SGPR and VGPR counts. */
|
||||
if (shader->prolog) {
|
||||
shader->config.num_sgprs =
|
||||
|
|
|
|||
|
|
@ -813,6 +813,7 @@ struct si_shader {
|
|||
bool is_optimized;
|
||||
bool is_binary_shared;
|
||||
bool is_gs_copy_shader;
|
||||
uint8_t wave_size;
|
||||
|
||||
/* The following data is all that's needed for binary shaders. */
|
||||
struct si_shader_binary binary;
|
||||
|
|
|
|||
|
|
@ -425,6 +425,7 @@ struct si_shader *si_generate_gs_copy_shader(struct si_screen *sscreen,
|
|||
|
||||
shader->selector = gs_selector;
|
||||
shader->is_gs_copy_shader = true;
|
||||
shader->wave_size = si_get_shader_wave_size(shader);
|
||||
|
||||
si_llvm_context_init(&ctx, sscreen, compiler,
|
||||
si_get_wave_size(sscreen, MESA_SHADER_VERTEX,
|
||||
|
|
|
|||
|
|
@ -1748,6 +1748,8 @@ static void si_shader_ps(struct si_screen *sscreen, struct si_shader *shader)
|
|||
|
||||
static void si_shader_init_pm4_state(struct si_screen *sscreen, struct si_shader *shader)
|
||||
{
|
||||
assert(shader->wave_size);
|
||||
|
||||
switch (shader->selector->info.stage) {
|
||||
case MESA_SHADER_VERTEX:
|
||||
if (shader->key.ge.as_ls)
|
||||
|
|
@ -2268,6 +2270,7 @@ static bool si_check_missing_main_part(struct si_screen *sscreen, struct si_shad
|
|||
main_part->key.ge.as_ngg = key->ge.as_ngg;
|
||||
}
|
||||
main_part->is_monolithic = false;
|
||||
main_part->wave_size = si_get_shader_wave_size(main_part);
|
||||
|
||||
if (!si_compile_shader(sscreen, compiler_state->compiler, main_part,
|
||||
&compiler_state->debug)) {
|
||||
|
|
@ -2444,6 +2447,7 @@ current_not_ready:
|
|||
|
||||
shader->selector = sel;
|
||||
*((SHADER_KEY_TYPE*)&shader->key) = *key;
|
||||
shader->wave_size = si_get_shader_wave_size(shader);
|
||||
shader->compiler_ctx_state.compiler = &sctx->compiler;
|
||||
shader->compiler_ctx_state.debug = sctx->debug;
|
||||
shader->compiler_ctx_state.is_debug_context = sctx->is_debug;
|
||||
|
|
@ -2710,6 +2714,8 @@ static void si_init_shader_selector_async(void *job, void *gdata, int thread_ind
|
|||
sel->info.stage == MESA_SHADER_TESS_EVAL || sel->info.stage == MESA_SHADER_GEOMETRY))
|
||||
shader->key.ge.as_ngg = 1;
|
||||
|
||||
shader->wave_size = si_get_shader_wave_size(shader);
|
||||
|
||||
if (sel->nir) {
|
||||
if (sel->info.stage <= MESA_SHADER_GEOMETRY)
|
||||
si_get_ir_cache_key(sel, shader->key.ge.as_ngg, shader->key.ge.as_es, ir_sha1_cache_key);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue