mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 00:58:05 +02:00
radeonsi: add vs prolog aco build
Reviewed-by: Marek Olšák <marek.olsak@amd.com> Signed-off-by: Qiang Yu <yuq825@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24713>
This commit is contained in:
parent
8c3b5ce0c4
commit
4247b742ec
1 changed files with 39 additions and 0 deletions
|
|
@ -304,6 +304,43 @@ si_aco_build_tcs_epilog(struct si_screen *screen,
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
si_aco_build_vs_prolog(struct si_screen *screen,
|
||||
struct aco_compiler_options *options,
|
||||
struct si_shader_part *result)
|
||||
{
|
||||
const union si_shader_part_key *key = &result->key;
|
||||
|
||||
struct si_shader_args args;
|
||||
si_get_vs_prolog_args(screen->info.gfx_level, &args, key);
|
||||
|
||||
struct aco_gl_vs_prolog_info pinfo = {
|
||||
.instance_divisor_is_one = key->vs_prolog.states.instance_divisor_is_one,
|
||||
.instance_divisor_is_fetched = key->vs_prolog.states.instance_divisor_is_fetched,
|
||||
.instance_diviser_buf_offset = SI_VS_CONST_INSTANCE_DIVISORS * 16,
|
||||
.num_inputs = key->vs_prolog.num_inputs,
|
||||
.as_ls = key->vs_prolog.as_ls,
|
||||
|
||||
.internal_bindings = args.internal_bindings,
|
||||
};
|
||||
|
||||
struct aco_shader_info info = {0};
|
||||
info.workgroup_size = info.wave_size = key->vs_prolog.wave32 ? 32 : 64;
|
||||
|
||||
if (key->vs_prolog.as_ngg)
|
||||
info.hw_stage = AC_HW_NEXT_GEN_GEOMETRY_SHADER;
|
||||
else if (key->vs_prolog.as_es)
|
||||
info.hw_stage = options->gfx_level >= GFX9 ? AC_HW_LEGACY_GEOMETRY_SHADER : AC_HW_EXPORT_SHADER;
|
||||
else if (key->vs_prolog.as_ls)
|
||||
info.hw_stage = options->gfx_level >= GFX9 ? AC_HW_HULL_SHADER : AC_HW_LOCAL_SHADER;
|
||||
else
|
||||
info.hw_stage = AC_HW_VERTEX_SHADER;
|
||||
|
||||
aco_compile_gl_vs_prolog(options, &info, &pinfo, &args.ac,
|
||||
si_aco_build_shader_part_binary, (void **)result);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
si_aco_build_shader_part(struct si_screen *screen, gl_shader_stage stage, bool prolog,
|
||||
struct util_debug_callback *debug, const char *name,
|
||||
|
|
@ -313,6 +350,8 @@ si_aco_build_shader_part(struct si_screen *screen, gl_shader_stage stage, bool p
|
|||
si_fill_aco_options(screen, stage, &options, debug);
|
||||
|
||||
switch (stage) {
|
||||
case MESA_SHADER_VERTEX:
|
||||
return si_aco_build_vs_prolog(screen, &options, result);
|
||||
case MESA_SHADER_TESS_CTRL:
|
||||
return si_aco_build_tcs_epilog(screen, &options, result);
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue