radv: Move radv_select_hw_stage to radv_shader_info.

Signed-off-by: Timur Kristóf <timur.kristof@gmail.com>
Reviewed-by: Rhys Perry <pendingchaos02@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24005>
This commit is contained in:
Timur Kristóf
2023-07-10 10:36:20 +02:00
committed by Marge Bot
parent 5825e20dbf
commit 6551be9c6e
3 changed files with 48 additions and 46 deletions

View File

@@ -39,52 +39,6 @@ static inline void radv_aco_convert_ps_epilog_key(struct aco_ps_epilog_info *aco
const struct radv_ps_epilog_key *radv,
const struct radv_shader_args *radv_args);
static enum ac_hw_stage
radv_select_hw_stage(const struct radv_shader_info *const info, const enum amd_gfx_level gfx_level)
{
switch (info->stage) {
case MESA_SHADER_VERTEX:
if (info->is_ngg)
return AC_HW_NEXT_GEN_GEOMETRY_SHADER;
else if (info->vs.as_es)
return gfx_level >= GFX9 ? AC_HW_LEGACY_GEOMETRY_SHADER : AC_HW_EXPORT_SHADER;
else if (info->vs.as_ls)
return gfx_level >= GFX9 ? AC_HW_HULL_SHADER : AC_HW_LOCAL_SHADER;
else
return AC_HW_VERTEX_SHADER;
case MESA_SHADER_TESS_EVAL:
if (info->is_ngg)
return AC_HW_NEXT_GEN_GEOMETRY_SHADER;
else if (info->tes.as_es)
return gfx_level >= GFX9 ? AC_HW_LEGACY_GEOMETRY_SHADER : AC_HW_EXPORT_SHADER;
else
return AC_HW_VERTEX_SHADER;
case MESA_SHADER_TESS_CTRL:
return AC_HW_HULL_SHADER;
case MESA_SHADER_GEOMETRY:
if (info->is_ngg)
return AC_HW_NEXT_GEN_GEOMETRY_SHADER;
else
return AC_HW_LEGACY_GEOMETRY_SHADER;
case MESA_SHADER_MESH:
return AC_HW_NEXT_GEN_GEOMETRY_SHADER;
case MESA_SHADER_FRAGMENT:
return AC_HW_PIXEL_SHADER;
case MESA_SHADER_COMPUTE:
case MESA_SHADER_KERNEL:
case MESA_SHADER_TASK:
case MESA_SHADER_RAYGEN:
case MESA_SHADER_ANY_HIT:
case MESA_SHADER_CLOSEST_HIT:
case MESA_SHADER_MISS:
case MESA_SHADER_INTERSECTION:
case MESA_SHADER_CALLABLE:
return AC_HW_COMPUTE_SHADER;
default:
unreachable("Unsupported HW stage");
}
}
static inline void
radv_aco_convert_shader_info(struct aco_shader_info *aco_info, const struct radv_shader_info *radv,
const struct radv_shader_args *radv_args, const struct radv_pipeline_key *radv_key,

View File

@@ -698,6 +698,8 @@ VkResult radv_dump_shader_stats(struct radv_device *device, struct radv_pipeline
/* Returns true on success and false on failure */
bool radv_shader_reupload(struct radv_device *device, struct radv_shader *shader);
enum ac_hw_stage radv_select_hw_stage(const struct radv_shader_info *const info, const enum amd_gfx_level gfx_level);
extern const struct vk_pipeline_cache_object_ops radv_shader_ops;
static inline struct radv_shader *

View File

@@ -1660,3 +1660,49 @@ radv_nir_shader_info_link(struct radv_device *device, const struct radv_pipeline
}
}
}
enum ac_hw_stage
radv_select_hw_stage(const struct radv_shader_info *const info, const enum amd_gfx_level gfx_level)
{
switch (info->stage) {
case MESA_SHADER_VERTEX:
if (info->is_ngg)
return AC_HW_NEXT_GEN_GEOMETRY_SHADER;
else if (info->vs.as_es)
return gfx_level >= GFX9 ? AC_HW_LEGACY_GEOMETRY_SHADER : AC_HW_EXPORT_SHADER;
else if (info->vs.as_ls)
return gfx_level >= GFX9 ? AC_HW_HULL_SHADER : AC_HW_LOCAL_SHADER;
else
return AC_HW_VERTEX_SHADER;
case MESA_SHADER_TESS_EVAL:
if (info->is_ngg)
return AC_HW_NEXT_GEN_GEOMETRY_SHADER;
else if (info->tes.as_es)
return gfx_level >= GFX9 ? AC_HW_LEGACY_GEOMETRY_SHADER : AC_HW_EXPORT_SHADER;
else
return AC_HW_VERTEX_SHADER;
case MESA_SHADER_TESS_CTRL:
return AC_HW_HULL_SHADER;
case MESA_SHADER_GEOMETRY:
if (info->is_ngg)
return AC_HW_NEXT_GEN_GEOMETRY_SHADER;
else
return AC_HW_LEGACY_GEOMETRY_SHADER;
case MESA_SHADER_MESH:
return AC_HW_NEXT_GEN_GEOMETRY_SHADER;
case MESA_SHADER_FRAGMENT:
return AC_HW_PIXEL_SHADER;
case MESA_SHADER_COMPUTE:
case MESA_SHADER_KERNEL:
case MESA_SHADER_TASK:
case MESA_SHADER_RAYGEN:
case MESA_SHADER_ANY_HIT:
case MESA_SHADER_CLOSEST_HIT:
case MESA_SHADER_MISS:
case MESA_SHADER_INTERSECTION:
case MESA_SHADER_CALLABLE:
return AC_HW_COMPUTE_SHADER;
default:
unreachable("Unsupported HW stage");
}
}