[Mesa-dev] [PATCH 1/2] st/mesa: Pull nir_lower_wpos_ytransform work into a helper function.
Rob Clark
robdclark at gmail.com
Thu Oct 25 14:19:39 UTC 2018
On Thu, Oct 25, 2018 at 5:22 AM Kenneth Graunke <kenneth at whitecape.org> wrote:
>
> This will let me use it in the ARB program code as well.
lgtm,
Reviewed-by: Rob Clark <robdclark at 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 at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list