mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 15:10:10 +01:00
radeonsi: add wave32 flag into prolog/epilog keys
It will vary between shaders. 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
3b2a6e1b21
commit
41523773f5
2 changed files with 17 additions and 10 deletions
|
|
@ -1330,6 +1330,7 @@ void si_get_vs_prolog_key(const struct si_shader_info *info, unsigned num_input_
|
|||
{
|
||||
memset(key, 0, sizeof(*key));
|
||||
key->vs_prolog.states = *prolog_key;
|
||||
key->vs_prolog.wave32 = si_get_shader_wave_size(shader_out) == 32;
|
||||
key->vs_prolog.num_input_sgprs = num_input_sgprs;
|
||||
key->vs_prolog.num_inputs = info->num_inputs;
|
||||
key->vs_prolog.as_ls = shader_out->key.ge.as_ls;
|
||||
|
|
@ -1605,36 +1606,35 @@ si_get_shader_part(struct si_screen *sscreen, struct si_shader_part **list,
|
|||
|
||||
struct si_shader shader = {};
|
||||
shader.selector = &sel;
|
||||
bool wave32 = false;
|
||||
|
||||
switch (stage) {
|
||||
case MESA_SHADER_VERTEX:
|
||||
shader.key.ge.as_ls = key->vs_prolog.as_ls;
|
||||
shader.key.ge.as_es = key->vs_prolog.as_es;
|
||||
shader.key.ge.as_ngg = key->vs_prolog.as_ngg;
|
||||
wave32 = key->vs_prolog.wave32;
|
||||
break;
|
||||
case MESA_SHADER_TESS_CTRL:
|
||||
assert(!prolog);
|
||||
shader.key.ge.part.tcs.epilog = key->tcs_epilog.states;
|
||||
wave32 = key->tcs_epilog.wave32;
|
||||
break;
|
||||
case MESA_SHADER_FRAGMENT:
|
||||
if (prolog)
|
||||
if (prolog) {
|
||||
shader.key.ps.part.prolog = key->ps_prolog.states;
|
||||
else
|
||||
wave32 = key->ps_prolog.wave32;
|
||||
} else {
|
||||
shader.key.ps.part.epilog = key->ps_epilog.states;
|
||||
wave32 = key->ps_epilog.wave32;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
unreachable("bad shader part");
|
||||
}
|
||||
|
||||
unsigned wave_size;
|
||||
if (stage <= MESA_SHADER_GEOMETRY) {
|
||||
wave_size = si_get_wave_size(sscreen, stage, shader.key.ge.as_ngg, shader.key.ge.as_es);
|
||||
} else {
|
||||
wave_size = si_get_wave_size(sscreen, stage, false, false);
|
||||
}
|
||||
|
||||
struct si_shader_context ctx;
|
||||
si_llvm_context_init(&ctx, sscreen, compiler, wave_size);
|
||||
si_llvm_context_init(&ctx, sscreen, compiler, wave32 ? 32 : 64);
|
||||
|
||||
ctx.shader = &shader;
|
||||
ctx.stage = stage;
|
||||
|
|
@ -1709,6 +1709,7 @@ static bool si_shader_select_tcs_parts(struct si_screen *sscreen, struct ac_llvm
|
|||
/* Get the epilog. */
|
||||
union si_shader_part_key epilog_key;
|
||||
memset(&epilog_key, 0, sizeof(epilog_key));
|
||||
epilog_key.tcs_epilog.wave32 = si_get_shader_wave_size(shader) == 32;
|
||||
epilog_key.tcs_epilog.states = shader->key.ge.part.tcs.epilog;
|
||||
|
||||
shader->epilog = si_get_shader_part(sscreen, &sscreen->tcs_epilogs, MESA_SHADER_TESS_CTRL, false,
|
||||
|
|
@ -1753,6 +1754,7 @@ void si_get_ps_prolog_key(struct si_shader *shader, union si_shader_part_key *ke
|
|||
|
||||
memset(key, 0, sizeof(*key));
|
||||
key->ps_prolog.states = shader->key.ps.part.prolog;
|
||||
key->ps_prolog.wave32 = si_get_shader_wave_size(shader) == 32;
|
||||
key->ps_prolog.colors_read = info->colors_read;
|
||||
key->ps_prolog.num_input_sgprs = shader->info.num_input_sgprs;
|
||||
key->ps_prolog.num_input_vgprs = shader->info.num_input_vgprs;
|
||||
|
|
@ -1886,6 +1888,7 @@ void si_get_ps_epilog_key(struct si_shader *shader, union si_shader_part_key *ke
|
|||
{
|
||||
struct si_shader_info *info = &shader->selector->info;
|
||||
memset(key, 0, sizeof(*key));
|
||||
key->ps_epilog.wave32 = si_get_shader_wave_size(shader) == 32;
|
||||
key->ps_epilog.colors_written = info->colors_written;
|
||||
key->ps_epilog.color_types = info->output_color_types;
|
||||
key->ps_epilog.writes_z = info->writes_z;
|
||||
|
|
|
|||
|
|
@ -577,6 +577,7 @@ struct si_ps_epilog_bits {
|
|||
union si_shader_part_key {
|
||||
struct {
|
||||
struct si_vs_prolog_bits states;
|
||||
unsigned wave32 : 1;
|
||||
unsigned num_input_sgprs : 6;
|
||||
/* For merged stages such as LS-HS, HS input VGPRs are first. */
|
||||
unsigned num_merged_next_stage_vgprs : 3;
|
||||
|
|
@ -590,9 +591,11 @@ union si_shader_part_key {
|
|||
} vs_prolog;
|
||||
struct {
|
||||
struct si_tcs_epilog_bits states;
|
||||
unsigned wave32 : 1;
|
||||
} tcs_epilog;
|
||||
struct {
|
||||
struct si_ps_prolog_bits states;
|
||||
unsigned wave32 : 1;
|
||||
unsigned num_input_sgprs : 6;
|
||||
unsigned num_input_vgprs : 5;
|
||||
/* Color interpolation and two-side color selection. */
|
||||
|
|
@ -606,6 +609,7 @@ union si_shader_part_key {
|
|||
} ps_prolog;
|
||||
struct {
|
||||
struct si_ps_epilog_bits states;
|
||||
unsigned wave32 : 1;
|
||||
unsigned colors_written : 8;
|
||||
unsigned color_types : 16;
|
||||
unsigned writes_z : 1;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue