mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-03 08:30:44 +02:00
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:
parent
60acd4da12
commit
3ea2e51c8b
10 changed files with 19 additions and 0 deletions
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue