About Social Code
aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFaith Ekstrand <faith.ekstrand@collabora.com>2025-11-05 12:07:59 -0500
committerMarge Bot <marge-bot@fdo.invalid>2025-11-06 14:57:32 +0000
commit69d7fcd6135a7713c02fffe644c09a6d738e767a (patch)
tree4457c3799e6f3f8ad5f0b4e88b694aa99345345d
parent6c5f981ba8db80c7e12b67819b60e206333d416a (diff)
pan: Move point size and viewport lowering to postprocess
Panvk calls pan_preprocess_nir() from its preprocess hook that it hands off to the Vulkan pipeline code. That hook gets called before we have the opportunity to lower geometry shaders. This means that we get our viewports lowered for the VS and then the geometry shader is trying to work on lowered viewports, which is wrong. Instead, we want to lower later and only apply the viewport transform in the shader that runs as the hardware VS. Reviewed-by: Olivia Lee <olivia.lee@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38265>
-rw-r--r--src/panfrost/compiler/bifrost_compile.c5
-rw-r--r--src/panfrost/midgard/midgard_compile.c8
2 files changed, 6 insertions, 7 deletions
diff --git a/src/panfrost/compiler/bifrost_compile.c b/src/panfrost/compiler/bifrost_compile.c
index 89e41b1d4a7..34516f5600c 100644
--- a/src/panfrost/compiler/bifrost_compile.c
+++ b/src/panfrost/compiler/bifrost_compile.c
@@ -5946,9 +5946,6 @@ bifrost_preprocess_nir(nir_shader *nir, unsigned gpu_id)
if (pan_arch(gpu_id) <= 7)
NIR_PASS(_, nir, pan_nir_lower_vertex_id);
- NIR_PASS(_, nir, nir_lower_viewport_transform);
- NIR_PASS(_, nir, nir_lower_point_size, 1.0, 0.0);
-
nir_variable *psiz = nir_find_variable_with_location(
nir, nir_var_shader_out, VARYING_SLOT_PSIZ);
if (psiz != NULL)
@@ -6011,6 +6008,8 @@ bifrost_postprocess_nir(nir_shader *nir, unsigned gpu_id)
NIR_PASS(_, nir, bifrost_nir_lower_load_output);
} else if (nir->info.stage == MESA_SHADER_VERTEX) {
+ NIR_PASS(_, nir, nir_lower_viewport_transform);
+ NIR_PASS(_, nir, nir_lower_point_size, 1.0, 0.0);
NIR_PASS(_, nir, pan_nir_lower_noperspective_vs);
if (pan_arch(gpu_id) >= 9) {
diff --git a/src/panfrost/midgard/midgard_compile.c b/src/panfrost/midgard/midgard_compile.c
index 6e8a332eea6..619d0a99d8e 100644
--- a/src/panfrost/midgard/midgard_compile.c
+++ b/src/panfrost/midgard/midgard_compile.c
@@ -377,11 +377,8 @@ midgard_preprocess_nir(nir_shader *nir, UNUSED unsigned gpu_id)
*/
NIR_PASS(_, nir, nir_lower_vars_to_ssa);
- if (nir->info.stage == MESA_SHADER_VERTEX) {
+ if (nir->info.stage == MESA_SHADER_VERTEX)
NIR_PASS(_, nir, pan_nir_lower_vertex_id);
- NIR_PASS(_, nir, nir_lower_viewport_transform);
- NIR_PASS(_, nir, nir_lower_point_size, 1.0, 0.0);
- }
NIR_PASS(_, nir, nir_lower_var_copies);
NIR_PASS(_, nir, nir_lower_vars_to_ssa);
@@ -398,6 +395,9 @@ midgard_postprocess_nir(nir_shader *nir, UNUSED unsigned gpu_id)
midgard_lower_texture_nir(nir, gpu_id);
if (nir->info.stage == MESA_SHADER_VERTEX) {
+ NIR_PASS(_, nir, nir_lower_viewport_transform);
+ NIR_PASS(_, nir, nir_lower_point_size, 1.0, 0.0);
+
/* nir_lower[_explicit]_io is lazy and emits mul+add chains even
* for offsets it could figure out are constant. Do some
* constant folding before pan_nir_lower_store_component below.