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:

committed by
Marge Bot

parent
b250efa714
commit
9d89b29a80
@@ -626,11 +626,15 @@ radv_postprocess_nir(struct radv_device *device, const struct radv_pipeline_layo
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Lower I/O intrinsics to memory instructions. */
|
/* 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 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) {
|
if (lowered_ngg) {
|
||||||
radv_lower_ngg(device, stage, pipeline_key);
|
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) {
|
if (stage->stage != MESA_SHADER_GEOMETRY) {
|
||||||
NIR_PASS_V(stage->nir, ac_nir_lower_legacy_vs, gfx_level,
|
NIR_PASS_V(stage->nir, ac_nir_lower_legacy_vs, gfx_level,
|
||||||
stage->info.outinfo.clip_dist_mask | stage->info.outinfo.cull_dist_mask,
|
stage->info.outinfo.clip_dist_mask | stage->info.outinfo.cull_dist_mask,
|
||||||
|
@@ -2084,20 +2084,28 @@ radv_get_next_stage(gl_shader_stage stage, VkShaderStageFlagBits active_nir_stag
|
|||||||
return MESA_SHADER_TESS_CTRL;
|
return MESA_SHADER_TESS_CTRL;
|
||||||
} else if (active_nir_stages & VK_SHADER_STAGE_GEOMETRY_BIT) {
|
} else if (active_nir_stages & VK_SHADER_STAGE_GEOMETRY_BIT) {
|
||||||
return MESA_SHADER_GEOMETRY;
|
return MESA_SHADER_GEOMETRY;
|
||||||
} else {
|
} else if (active_nir_stages & VK_SHADER_STAGE_FRAGMENT_BIT) {
|
||||||
return MESA_SHADER_FRAGMENT;
|
return MESA_SHADER_FRAGMENT;
|
||||||
|
} else {
|
||||||
|
return MESA_SHADER_NONE;
|
||||||
}
|
}
|
||||||
case MESA_SHADER_TESS_CTRL:
|
case MESA_SHADER_TESS_CTRL:
|
||||||
return MESA_SHADER_TESS_EVAL;
|
return MESA_SHADER_TESS_EVAL;
|
||||||
case MESA_SHADER_TESS_EVAL:
|
case MESA_SHADER_TESS_EVAL:
|
||||||
if (active_nir_stages & VK_SHADER_STAGE_GEOMETRY_BIT) {
|
if (active_nir_stages & VK_SHADER_STAGE_GEOMETRY_BIT) {
|
||||||
return MESA_SHADER_GEOMETRY;
|
return MESA_SHADER_GEOMETRY;
|
||||||
} else {
|
} else if (active_nir_stages & VK_SHADER_STAGE_FRAGMENT_BIT) {
|
||||||
return MESA_SHADER_FRAGMENT;
|
return MESA_SHADER_FRAGMENT;
|
||||||
|
} else {
|
||||||
|
return MESA_SHADER_NONE;
|
||||||
}
|
}
|
||||||
case MESA_SHADER_GEOMETRY:
|
case MESA_SHADER_GEOMETRY:
|
||||||
case MESA_SHADER_MESH:
|
case MESA_SHADER_MESH:
|
||||||
return MESA_SHADER_FRAGMENT;
|
if (active_nir_stages & VK_SHADER_STAGE_FRAGMENT_BIT) {
|
||||||
|
return MESA_SHADER_FRAGMENT;
|
||||||
|
} else {
|
||||||
|
return MESA_SHADER_NONE;
|
||||||
|
}
|
||||||
case MESA_SHADER_TASK:
|
case MESA_SHADER_TASK:
|
||||||
return MESA_SHADER_MESH;
|
return MESA_SHADER_MESH;
|
||||||
case MESA_SHADER_FRAGMENT:
|
case MESA_SHADER_FRAGMENT:
|
||||||
|
Reference in New Issue
Block a user