radv: set next_stage to MESA_SHADER_NONE if there is no FS

This follows the same convention as shader object where the last stage
would have nextStage to 0. This will allow more refactoring.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24313>
This commit is contained in:
Samuel Pitoiset
2023-07-24 15:25:23 +02:00
committed by Marge Bot
parent b250efa714
commit 9d89b29a80
2 changed files with 17 additions and 5 deletions

View File

@@ -626,11 +626,15 @@ radv_postprocess_nir(struct radv_device *device, const struct radv_pipeline_layo
}
/* Lower I/O intrinsics to memory instructions. */
bool is_last_vgt_stage =
(stage->info.stage == MESA_SHADER_VERTEX || stage->info.stage == MESA_SHADER_TESS_EVAL ||
stage->info.stage == MESA_SHADER_GEOMETRY || stage->info.stage == MESA_SHADER_MESH) &&
(stage->info.next_stage == MESA_SHADER_FRAGMENT || stage->info.next_stage == MESA_SHADER_NONE);
bool io_to_mem = radv_nir_lower_io_to_mem(device, stage);
bool lowered_ngg = stage->info.is_ngg && stage->info.next_stage == MESA_SHADER_FRAGMENT;
bool lowered_ngg = stage->info.is_ngg && is_last_vgt_stage;
if (lowered_ngg) {
radv_lower_ngg(device, stage, pipeline_key);
} else if (stage->info.next_stage == MESA_SHADER_FRAGMENT) {
} else if (is_last_vgt_stage) {
if (stage->stage != MESA_SHADER_GEOMETRY) {
NIR_PASS_V(stage->nir, ac_nir_lower_legacy_vs, gfx_level,
stage->info.outinfo.clip_dist_mask | stage->info.outinfo.cull_dist_mask,

View File

@@ -2084,20 +2084,28 @@ radv_get_next_stage(gl_shader_stage stage, VkShaderStageFlagBits active_nir_stag
return MESA_SHADER_TESS_CTRL;
} else if (active_nir_stages & VK_SHADER_STAGE_GEOMETRY_BIT) {
return MESA_SHADER_GEOMETRY;
} else {
} else if (active_nir_stages & VK_SHADER_STAGE_FRAGMENT_BIT) {
return MESA_SHADER_FRAGMENT;
} else {
return MESA_SHADER_NONE;
}
case MESA_SHADER_TESS_CTRL:
return MESA_SHADER_TESS_EVAL;
case MESA_SHADER_TESS_EVAL:
if (active_nir_stages & VK_SHADER_STAGE_GEOMETRY_BIT) {
return MESA_SHADER_GEOMETRY;
} else {
} else if (active_nir_stages & VK_SHADER_STAGE_FRAGMENT_BIT) {
return MESA_SHADER_FRAGMENT;
} else {
return MESA_SHADER_NONE;
}
case MESA_SHADER_GEOMETRY:
case MESA_SHADER_MESH:
if (active_nir_stages & VK_SHADER_STAGE_FRAGMENT_BIT) {
return MESA_SHADER_FRAGMENT;
} else {
return MESA_SHADER_NONE;
}
case MESA_SHADER_TASK:
return MESA_SHADER_MESH;
case MESA_SHADER_FRAGMENT: