[1/2] st/mesa: Pull nir_lower_wpos_ytransform work into a helper function.

Submitted by Kenneth Graunke on Oct. 25, 2018, 9:22 a.m.

Details

Message ID 20181025092234.17487-1-kenneth@whitecape.org
State New
Headers show
Series "Series without cover letter" ( rev: 1 ) in Mesa

Not browsing as part of any series.

Commit Message

Kenneth Graunke Oct. 25, 2018, 9:22 a.m.
This will let me use it in the ARB program code as well.
---
 src/mesa/state_tracker/st_glsl_to_nir.cpp | 66 +++++++++++++----------
 src/mesa/state_tracker/st_nir.h           |  4 ++
 2 files changed, 41 insertions(+), 29 deletions(-)

Patch hide | download patch | download mbox

diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp
index 911284401e0..c15bd7e511b 100644
--- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
@@ -619,6 +619,41 @@  st_nir_link_shaders(nir_shader **producer, nir_shader **consumer, bool scalar)
 
 extern "C" {
 
+void
+st_nir_lower_wpos_ytransform(struct nir_shader *nir,
+                             struct gl_program *prog,
+                             struct pipe_screen *pscreen)
+{
+   if (nir->info.stage != MESA_SHADER_FRAGMENT)
+      return;
+
+   static const gl_state_index16 wposTransformState[STATE_LENGTH] = {
+      STATE_INTERNAL, STATE_FB_WPOS_Y_TRANSFORM
+   };
+   nir_lower_wpos_ytransform_options wpos_options = { { 0 } };
+
+   memcpy(wpos_options.state_tokens, wposTransformState,
+          sizeof(wpos_options.state_tokens));
+   wpos_options.fs_coord_origin_upper_left =
+      pscreen->get_param(pscreen,
+                         PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT);
+   wpos_options.fs_coord_origin_lower_left =
+      pscreen->get_param(pscreen,
+                         PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT);
+   wpos_options.fs_coord_pixel_center_integer =
+      pscreen->get_param(pscreen,
+                         PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER);
+   wpos_options.fs_coord_pixel_center_half_integer =
+      pscreen->get_param(pscreen,
+                         PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER);
+
+   if (nir_lower_wpos_ytransform(nir, &wpos_options)) {
+      nir_validate_shader(nir);
+      _mesa_add_state_reference(prog->Parameters,
+                                wposTransformState);
+   }
+}
+
 bool
 st_link_nir(struct gl_context *ctx,
             struct gl_shader_program *shader_program)
@@ -697,35 +732,8 @@  st_link_nir(struct gl_context *ctx,
 
       nir_shader *nir = shader->Program->nir;
 
-      /* fragment shaders may need : */
-      if (nir->info.stage == MESA_SHADER_FRAGMENT) {
-         static const gl_state_index16 wposTransformState[STATE_LENGTH] = {
-            STATE_INTERNAL, STATE_FB_WPOS_Y_TRANSFORM
-         };
-         nir_lower_wpos_ytransform_options wpos_options = { { 0 } };
-         struct pipe_screen *pscreen = st->pipe->screen;
-
-         memcpy(wpos_options.state_tokens, wposTransformState,
-                sizeof(wpos_options.state_tokens));
-         wpos_options.fs_coord_origin_upper_left =
-            pscreen->get_param(pscreen,
-                               PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT);
-         wpos_options.fs_coord_origin_lower_left =
-            pscreen->get_param(pscreen,
-                               PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT);
-         wpos_options.fs_coord_pixel_center_integer =
-            pscreen->get_param(pscreen,
-                               PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER);
-         wpos_options.fs_coord_pixel_center_half_integer =
-            pscreen->get_param(pscreen,
-                               PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER);
-
-         if (nir_lower_wpos_ytransform(nir, &wpos_options)) {
-            nir_validate_shader(nir);
-            _mesa_add_state_reference(shader->Program->Parameters,
-                                      wposTransformState);
-         }
-      }
+      NIR_PASS_V(nir, st_nir_lower_wpos_ytransform, shader->Program,
+                 st->pipe->screen);
 
       NIR_PASS_V(nir, nir_lower_system_values);
 
diff --git a/src/mesa/state_tracker/st_nir.h b/src/mesa/state_tracker/st_nir.h
index aa6e32758e8..10f23c03ef6 100644
--- a/src/mesa/state_tracker/st_nir.h
+++ b/src/mesa/state_tracker/st_nir.h
@@ -38,6 +38,10 @@  void st_nir_lower_tex_src_plane(struct nir_shader *shader, unsigned free_slots,
                                 unsigned lower_2plane, unsigned lower_3plane);
 bool st_nir_lower_uniforms_to_ubo(struct nir_shader *shader);
 
+void st_nir_lower_wpos_ytransform(struct nir_shader *nir,
+                                  struct gl_program *prog,
+                                  struct pipe_screen *pscreen);
+
 void st_finalize_nir(struct st_context *st, struct gl_program *prog,
                      struct gl_shader_program *shader_program,
                      struct nir_shader *nir);

Comments

On Thu, Oct 25, 2018 at 5:22 AM Kenneth Graunke <kenneth@whitecape.org> wrote:
>
> This will let me use it in the ARB program code as well.

lgtm,

Reviewed-by: Rob Clark <robdclark@gmail.com>

> ---
>  src/mesa/state_tracker/st_glsl_to_nir.cpp | 66 +++++++++++++----------
>  src/mesa/state_tracker/st_nir.h           |  4 ++
>  2 files changed, 41 insertions(+), 29 deletions(-)
>
> diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp
> index 911284401e0..c15bd7e511b 100644
> --- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
> +++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
> @@ -619,6 +619,41 @@ st_nir_link_shaders(nir_shader **producer, nir_shader **consumer, bool scalar)
>
>  extern "C" {
>
> +void
> +st_nir_lower_wpos_ytransform(struct nir_shader *nir,
> +                             struct gl_program *prog,
> +                             struct pipe_screen *pscreen)
> +{
> +   if (nir->info.stage != MESA_SHADER_FRAGMENT)
> +      return;
> +
> +   static const gl_state_index16 wposTransformState[STATE_LENGTH] = {
> +      STATE_INTERNAL, STATE_FB_WPOS_Y_TRANSFORM
> +   };
> +   nir_lower_wpos_ytransform_options wpos_options = { { 0 } };
> +
> +   memcpy(wpos_options.state_tokens, wposTransformState,
> +          sizeof(wpos_options.state_tokens));
> +   wpos_options.fs_coord_origin_upper_left =
> +      pscreen->get_param(pscreen,
> +                         PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT);
> +   wpos_options.fs_coord_origin_lower_left =
> +      pscreen->get_param(pscreen,
> +                         PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT);
> +   wpos_options.fs_coord_pixel_center_integer =
> +      pscreen->get_param(pscreen,
> +                         PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER);
> +   wpos_options.fs_coord_pixel_center_half_integer =
> +      pscreen->get_param(pscreen,
> +                         PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER);
> +
> +   if (nir_lower_wpos_ytransform(nir, &wpos_options)) {
> +      nir_validate_shader(nir);
> +      _mesa_add_state_reference(prog->Parameters,
> +                                wposTransformState);
> +   }
> +}
> +
>  bool
>  st_link_nir(struct gl_context *ctx,
>              struct gl_shader_program *shader_program)
> @@ -697,35 +732,8 @@ st_link_nir(struct gl_context *ctx,
>
>        nir_shader *nir = shader->Program->nir;
>
> -      /* fragment shaders may need : */
> -      if (nir->info.stage == MESA_SHADER_FRAGMENT) {
> -         static const gl_state_index16 wposTransformState[STATE_LENGTH] = {
> -            STATE_INTERNAL, STATE_FB_WPOS_Y_TRANSFORM
> -         };
> -         nir_lower_wpos_ytransform_options wpos_options = { { 0 } };
> -         struct pipe_screen *pscreen = st->pipe->screen;
> -
> -         memcpy(wpos_options.state_tokens, wposTransformState,
> -                sizeof(wpos_options.state_tokens));
> -         wpos_options.fs_coord_origin_upper_left =
> -            pscreen->get_param(pscreen,
> -                               PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT);
> -         wpos_options.fs_coord_origin_lower_left =
> -            pscreen->get_param(pscreen,
> -                               PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT);
> -         wpos_options.fs_coord_pixel_center_integer =
> -            pscreen->get_param(pscreen,
> -                               PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER);
> -         wpos_options.fs_coord_pixel_center_half_integer =
> -            pscreen->get_param(pscreen,
> -                               PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER);
> -
> -         if (nir_lower_wpos_ytransform(nir, &wpos_options)) {
> -            nir_validate_shader(nir);
> -            _mesa_add_state_reference(shader->Program->Parameters,
> -                                      wposTransformState);
> -         }
> -      }
> +      NIR_PASS_V(nir, st_nir_lower_wpos_ytransform, shader->Program,
> +                 st->pipe->screen);
>
>        NIR_PASS_V(nir, nir_lower_system_values);
>
> diff --git a/src/mesa/state_tracker/st_nir.h b/src/mesa/state_tracker/st_nir.h
> index aa6e32758e8..10f23c03ef6 100644
> --- a/src/mesa/state_tracker/st_nir.h
> +++ b/src/mesa/state_tracker/st_nir.h
> @@ -38,6 +38,10 @@ void st_nir_lower_tex_src_plane(struct nir_shader *shader, unsigned free_slots,
>                                  unsigned lower_2plane, unsigned lower_3plane);
>  bool st_nir_lower_uniforms_to_ubo(struct nir_shader *shader);
>
> +void st_nir_lower_wpos_ytransform(struct nir_shader *nir,
> +                                  struct gl_program *prog,
> +                                  struct pipe_screen *pscreen);
> +
>  void st_finalize_nir(struct st_context *st, struct gl_program *prog,
>                       struct gl_shader_program *shader_program,
>                       struct nir_shader *nir);
> --
> 2.19.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev