treewide: Enable lowering of primitive ID in a bunch of Vulkan drivers

Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Mary Guillemard <mary@mary.zone>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40512>
This commit is contained in:
Faith Ekstrand 2026-03-19 12:10:19 -04:00 committed by Marge Bot
parent 60acd4da12
commit 3ea2e51c8b
10 changed files with 19 additions and 0 deletions

View file

@ -523,6 +523,7 @@ radv_shader_spirv_to_nir(struct radv_device *device, const struct radv_shader_st
const struct nir_lower_sysvals_to_varyings_options sysvals_to_varyings = {
.point_coord = true,
.primitive_id = nir->info.stage == MESA_SHADER_FRAGMENT,
};
NIR_PASS(_, nir, nir_lower_sysvals_to_varyings, &sysvals_to_varyings);

View file

@ -153,6 +153,7 @@ hk_preprocess_nir_internal(struct vk_physical_device *vk_pdev, nir_shader *nir)
if (nir->info.stage == MESA_SHADER_FRAGMENT) {
struct nir_lower_sysvals_to_varyings_options sysvals_opts = {
.point_coord = true,
.primitive_id = nir->info.stage == MESA_SHADER_FRAGMENT,
};
nir_lower_sysvals_to_varyings(nir, &sysvals_opts);

View file

@ -298,6 +298,7 @@ preprocess_nir(nir_shader *nir)
.frag_coord = true,
.point_coord = true,
.layer_id = true,
.primitive_id = nir->info.stage == MESA_SHADER_FRAGMENT,
};
NIR_PASS(_, nir, nir_lower_sysvals_to_varyings, &sysvals_to_varyings);

View file

@ -238,6 +238,16 @@ tu_spirv_to_nir(struct tu_device *dev,
NIR_PASS(_, nir, nir_opt_copy_prop_vars);
NIR_PASS(_, nir, nir_opt_dce);
if (stage == MESA_SHADER_FRAGMENT) {
/* We currently assume gl_PrimitiveID lives in a varying in fragment
* shaders but spirv_to_nir gives us a sysval.
*/
const nir_lower_sysvals_to_varyings_options sysval_options = {
.primitive_id = true,
};
NIR_PASS(_, nir, nir_lower_sysvals_to_varyings, &sysval_options);
}
nir_shader_gather_info(nir, nir_shader_get_entrypoint(nir));
if (nir->info.ray_queries > 0) {

View file

@ -401,6 +401,7 @@ lvp_shader_lower(struct lvp_device *pdevice, nir_shader *nir, struct lvp_pipelin
.frag_coord = true,
.point_coord = true,
.layer_id = true,
.primitive_id = nir->info.stage == MESA_SHADER_FRAGMENT,
};
NIR_PASS(_, nir, nir_lower_sysvals_to_varyings, &sysvals_to_varyings);

View file

@ -539,6 +539,7 @@ void pco_preprocess_nir(pco_ctx *ctx, nir_shader *nir)
const struct nir_lower_sysvals_to_varyings_options sysvals_to_varyings = {
.frag_coord = true,
.point_coord = true,
.primitive_id = nir->info.stage == MESA_SHADER_FRAGMENT,
};
NIR_PASS(_, nir, nir_lower_sysvals_to_varyings, &sysvals_to_varyings);
NIR_PASS(_, nir, nir_lower_helper_writes, true);

View file

@ -249,6 +249,7 @@ anv_shader_preprocess_nir(struct vk_physical_device *device,
const struct nir_lower_sysvals_to_varyings_options sysvals_to_varyings = {
.point_coord = true,
.primitive_id = nir->info.stage == MESA_SHADER_FRAGMENT,
};
NIR_PASS(_, nir, nir_lower_sysvals_to_varyings, &sysvals_to_varyings);

View file

@ -94,6 +94,7 @@ anv_shader_stage_to_nir(struct anv_device *device,
const struct nir_lower_sysvals_to_varyings_options sysvals_to_varyings = {
.point_coord = true,
.primitive_id = nir->info.stage == MESA_SHADER_FRAGMENT,
};
NIR_PASS(_, nir, nir_lower_sysvals_to_varyings, &sysvals_to_varyings);

View file

@ -306,6 +306,7 @@ _mesa_spirv_to_nir(struct gl_context *ctx,
.frag_coord = !ctx->Const.GLSLFragCoordIsSysVal,
.point_coord = !ctx->Const.GLSLPointCoordIsSysVal,
.front_face = !ctx->Const.GLSLFrontFacingIsSysVal,
.primitive_id = nir->info.stage == MESA_SHADER_FRAGMENT,
};
NIR_PASS(_, nir, nir_lower_sysvals_to_varyings, &sysvals_to_varyings);

View file

@ -919,6 +919,7 @@ dxil_spirv_nir_passes(nir_shader *nir,
.point_coord = true,
.front_face = true,
.layer_id = true,
.primitive_id = nir->info.stage == MESA_SHADER_FRAGMENT,
};
NIR_PASS(_, nir, nir_lower_sysvals_to_varyings, &sysvals_to_varyings);