[Mesa-dev] [PATCH 13/18] i965/blorp: Use flat inputs instead of uniforms

Jason Ekstrand jason at jlekstrand.net
Fri Jul 1 20:10:59 UTC 2016


On Thu, Jun 23, 2016 at 12:17 PM, Topi Pohjolainen <
topi.pohjolainen at intel.com> wrote:

> Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
> ---
>  src/mesa/drivers/dri/i965/brw_blorp_blit.cpp  | 43
> ++++++++++++++-------------
>  src/mesa/drivers/dri/i965/brw_blorp_clear.cpp |  9 +++---
>  2 files changed, 27 insertions(+), 25 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
> b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
> index 1683f8e..616f87e 100644
> --- a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
> @@ -331,10 +331,10 @@ enum sampler_message_arg
>
>  struct brw_blorp_blit_vars {
>     /* Input values from brw_blorp_wm_inputs */
> -   nir_variable *u_discard_rect;
> -   nir_variable *u_rect_grid;
> -   nir_variable *u_coord_transform;
> -   nir_variable *u_src_z;
> +   nir_variable *v_discard_rect;
> +   nir_variable *v_rect_grid;
> +   nir_variable *v_coord_transform;
> +   nir_variable *v_src_z;
>
>     /* gl_FragCoord */
>     nir_variable *frag_coord;
> @@ -349,34 +349,35 @@ brw_blorp_blit_vars_init(nir_builder *b, struct
> brw_blorp_blit_vars *v,
>  {
>     if (key->use_kill) {
>        assert(!(key->blend && key->blit_scaled));
> -      v->u_discard_rect = nir_variable_create(b->shader, nir_var_uniform,
> +      v->v_discard_rect = nir_variable_create(b->shader,
> nir_var_shader_in,
>                                                glsl_type::uvec4_type,
>                                                "discard_rect");
> -      v->u_discard_rect->data.location =
> -         offsetof(struct brw_blorp_wm_inputs, discard_rect);
> -      v->u_rect_grid = NULL;
> +      v->v_discard_rect->data.location = VARYING_SLOT_VAR0;
>

I think I'd prefer "VARYING_SLOT_VAR0 + offsetof() / 16".  That way, if
someone adds a new varying in the middle, slots automatically get updated.
That's the reason why I made the UNIFORM macro in the first place.


> +      v->v_discard_rect->data.interpolation = INTERP_QUALIFIER_FLAT;
> +      v->v_rect_grid = NULL;
>     } else {
>        /* Blending grid only has two components but loading it as vec4
>         * will keep offsets for the subsequent inputs the same between
>         * this and the discard branch.
>         */
> -      v->u_rect_grid = nir_variable_create(b->shader, nir_var_uniform,
> +      v->v_rect_grid = nir_variable_create(b->shader, nir_var_shader_in,
>                                             glsl_type::vec2_type,
>                                             "rect_grid");
> -      v->u_rect_grid->data.location =
> -         offsetof(struct brw_blorp_wm_inputs, rect_grid);
> -      v->u_discard_rect = NULL;
> +      v->v_rect_grid->data.location = VARYING_SLOT_VAR0;
> +      v->v_rect_grid->data.interpolation = INTERP_QUALIFIER_FLAT;
> +      v->v_discard_rect = NULL;
>     }
>
> -   v->u_coord_transform = nir_variable_create(b->shader, nir_var_uniform,
> +   v->v_coord_transform = nir_variable_create(b->shader,
> nir_var_shader_in,
>                                                glsl_type::vec4_type,
>                                                "coord_transform");
> -   v->u_coord_transform->data.location =
> -      offsetof(struct brw_blorp_wm_inputs, x_transform.multiplier);
> +   v->v_coord_transform->data.location = VARYING_SLOT_VAR1;
> +   v->v_coord_transform->data.interpolation = INTERP_QUALIFIER_FLAT;
>
> -   v->u_src_z = nir_variable_create(b->shader, nir_var_uniform,
> +   v->v_src_z = nir_variable_create(b->shader, nir_var_shader_in,
>                                      glsl_type::uint_type, "src_z");
> -   v->u_src_z->data.location = offsetof(struct brw_blorp_wm_inputs,
> src_z);
> +   v->v_src_z->data.location = VARYING_SLOT_VAR2;
> +   v->v_src_z->data.interpolation = INTERP_QUALIFIER_FLAT;
>
>     v->frag_coord = nir_variable_create(b->shader, nir_var_shader_in,
>                                         glsl_vec4_type(), "gl_FragCoord");
> @@ -411,7 +412,7 @@ nir_ssa_def *
>  blorp_blit_apply_transform(nir_builder *b, nir_ssa_def *src_pos,
>                             struct brw_blorp_blit_vars *v)
>  {
> -   nir_ssa_def *coord_transform = nir_load_var(b, v->u_coord_transform);
> +   nir_ssa_def *coord_transform = nir_load_var(b, v->v_coord_transform);
>
>     nir_ssa_def *offset = nir_vec2(b, nir_channel(b, coord_transform, 1),
>                                       nir_channel(b, coord_transform, 3));
> @@ -426,7 +427,7 @@ blorp_nir_discard_if_outside_rect(nir_builder *b,
> nir_ssa_def *pos,
>                                    struct brw_blorp_blit_vars *v)
>  {
>     nir_ssa_def *c0, *c1, *c2, *c3;
> -   nir_ssa_def *discard_rect = nir_load_var(b, v->u_discard_rect);
> +   nir_ssa_def *discard_rect = nir_load_var(b, v->v_discard_rect);
>     nir_ssa_def *dst_x0 = nir_channel(b, discard_rect, 0);
>     nir_ssa_def *dst_x1 = nir_channel(b, discard_rect, 1);
>     nir_ssa_def *dst_y0 = nir_channel(b, discard_rect, 2);
> @@ -514,7 +515,7 @@ blorp_nir_txf(nir_builder *b, struct
> brw_blorp_blit_vars *v,
>      */
>     assert(pos->num_components == 2);
>     pos = nir_vec3(b, nir_channel(b, pos, 0), nir_channel(b, pos, 1),
> -                     nir_load_var(b, v->u_src_z));
> +                     nir_load_var(b, v->v_src_z));
>
>     tex->sampler_dim = GLSL_SAMPLER_DIM_3D;
>     tex->coord_components = 3;
> @@ -1047,7 +1048,7 @@ blorp_nir_manual_blend_bilinear(nir_builder *b,
> nir_ssa_def *pos,
>                                  struct brw_blorp_blit_vars *v)
>  {
>     nir_ssa_def *pos_xy = nir_channels(b, pos, 0x3);
> -   nir_ssa_def *rect_grid = nir_load_var(b, v->u_rect_grid);
> +   nir_ssa_def *rect_grid = nir_load_var(b, v->v_rect_grid);
>     nir_ssa_def *scale = nir_imm_vec2(b, key->x_scale, key->y_scale);
>
>     /* Translate coordinates to lay out the samples in a rectangular  grid
> diff --git a/src/mesa/drivers/dri/i965/brw_blorp_clear.cpp
> b/src/mesa/drivers/dri/i965/brw_blorp_clear.cpp
> index b4beec2..2308b8d 100644
> --- a/src/mesa/drivers/dri/i965/brw_blorp_clear.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_blorp_clear.cpp
> @@ -67,16 +67,17 @@ brw_blorp_params_get_clear_kernel(struct brw_context
> *brw,
>     nir_builder_init_simple_shader(&b, NULL, MESA_SHADER_FRAGMENT, NULL);
>     b.shader->info.name = ralloc_strdup(b.shader, "BLORP-clear");
>
> -   nir_variable *u_color = nir_variable_create(b.shader, nir_var_uniform,
> -                                               glsl_vec4_type(),
> "u_color");
> -   u_color->data.location = 0;
> +   nir_variable *v_color = nir_variable_create(b.shader,
> nir_var_shader_in,
> +                                               glsl_vec4_type(),
> "v_color");
> +   v_color->data.location = VARYING_SLOT_VAR0;
> +   v_color->data.interpolation = INTERP_QUALIFIER_FLAT;
>
>     nir_variable *frag_color = nir_variable_create(b.shader,
> nir_var_shader_out,
>                                                    glsl_vec4_type(),
>                                                    "gl_FragColor");
>     frag_color->data.location = FRAG_RESULT_COLOR;
>
> -   nir_copy_var(&b, frag_color, u_color);
> +   nir_copy_var(&b, frag_color, v_color);
>
>     struct brw_wm_prog_key wm_key;
>     brw_blorp_init_wm_prog_key(&wm_key);
> --
> 2.5.5
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160701/44c3b67a/attachment.html>


More information about the mesa-dev mailing list