st/mesa: Enable clip planes lowering for geometry shaders
[mesa.git] / src / mesa / state_tracker / st_program.c
index aad4d4d99225d2b7af8f0cd6fbabfe78ccd577c7..7e7373dc85e91b5950153df40ab4ebcf08d6bc90 100644 (file)
@@ -695,8 +695,14 @@ lower_ucp(struct st_context *st,
          _mesa_add_state_reference(params, clipplane_state[i]);
       }
 
-      NIR_PASS_V(nir, nir_lower_clip_vs, ucp_enables,
-                 true, can_compact, clipplane_state);
+      if (nir->info.stage == MESA_SHADER_VERTEX) {
+         NIR_PASS_V(nir, nir_lower_clip_vs, ucp_enables,
+                    true, can_compact, clipplane_state);
+      } else if (nir->info.stage == MESA_SHADER_GEOMETRY) {
+         NIR_PASS_V(nir, nir_lower_clip_gs, ucp_enables,
+                    can_compact, clipplane_state);
+      }
+
       NIR_PASS_V(nir, nir_lower_io_to_temporaries,
                  nir_shader_get_entrypoint(nir), true, false);
       NIR_PASS_V(nir, nir_lower_global_vars_to_local);
@@ -1782,6 +1788,7 @@ st_get_common_variant(struct st_context *st,
    struct pipe_context *pipe = st->pipe;
    struct st_variant *v;
    struct pipe_shader_state state = {0};
+   struct gl_program_parameter_list *params = prog->Base.Parameters;
 
    /* Search for existing variant */
    for (v = prog->variants; v; v = v->next) {
@@ -1804,6 +1811,11 @@ st_get_common_variant(struct st_context *st,
                finalize = true;
             }
 
+            if (key->lower_ucp) {
+               lower_ucp(st, state.ir.nir, key->lower_ucp, params);
+               finalize = true;
+            }
+
             state.stream_output = prog->state.stream_output;
 
             if (finalize || !st->allow_st_finalize_nir_twice) {