[Mesa-dev] [PATCH 10/10] i965/sf: Replace push/pop in brw_emit_anyprim_setup.

Matt Turner mattst88 at gmail.com
Sun May 25 13:14:41 PDT 2014


On Sun, May 25, 2014 at 1:08 AM, Kenneth Graunke <kenneth at whitecape.org> wrote:
> Each of the subroutine emitters alter the predication state, but
> otherwise don't change anything (or put it back when they do).
> Resetting predication at the end makes these functions idempotent with
> regard to the default instruction state - which is a nice property.
>
> With that in place, push/pop is no longer necessary.
>
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
>  src/mesa/drivers/dri/i965/brw_sf_emit.c | 26 +++++++++++---------------
>  1 file changed, 11 insertions(+), 15 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_sf_emit.c b/src/mesa/drivers/dri/i965/brw_sf_emit.c
> index a30586f..274c604 100644
> --- a/src/mesa/drivers/dri/i965/brw_sf_emit.c
> +++ b/src/mesa/drivers/dri/i965/brw_sf_emit.c
> @@ -501,6 +501,8 @@ void brw_emit_tri_setup(struct brw_sf_compile *c, bool allocate)
>                        BRW_URB_SWIZZLE_TRANSPOSE); /* XXX: Swizzle control "SF to windower" */
>        }
>     }
> +
> +   brw_set_predicate_control(p, BRW_PREDICATE_NONE);
>  }
>
>
> @@ -573,6 +575,8 @@ void brw_emit_line_setup(struct brw_sf_compile *c, bool allocate)
>                        BRW_URB_SWIZZLE_TRANSPOSE);
>        }
>     }
> +
> +   brw_set_predicate_control(p, BRW_PREDICATE_NONE);
>  }
>
>  void brw_emit_point_sprite_setup(struct brw_sf_compile *c, bool allocate)
> @@ -661,6 +665,8 @@ void brw_emit_point_sprite_setup(struct brw_sf_compile *c, bool allocate)
>                     i*4,        /* urb destination offset */
>                     BRW_URB_SWIZZLE_TRANSPOSE);
>     }
> +
> +   brw_set_predicate_control(p, BRW_PREDICATE_NONE);
>  }
>
>  /* Points setup - several simplifications as all attributes are
> @@ -721,6 +727,8 @@ void brw_emit_point_setup(struct brw_sf_compile *c, bool allocate)
>                        BRW_URB_SWIZZLE_TRANSPOSE);
>        }
>     }
> +
> +   brw_set_predicate_control(p, BRW_PREDICATE_NONE);
>  }
>
>  void brw_emit_anyprim_setup( struct brw_sf_compile *c )
> @@ -750,11 +758,7 @@ void brw_emit_anyprim_setup( struct brw_sf_compile *c )
>                                                (1<<_3DPRIM_RECTLIST) |
>                                                (1<<_3DPRIM_TRIFAN_NOSTIPPLE)));
>     jmp = brw_JMPI(p, ip, ip, brw_imm_d(0)) - p->store;
> -   {
> -      brw_push_insn_state(p);
> -      brw_emit_tri_setup( c, false );
> -      brw_pop_insn_state(p);
> -   }
> +   brw_emit_tri_setup( c, false );

May want to remove the weird spacing while we're touching this.

>     brw_land_fwd_jump(p, jmp);
>
>     brw_set_conditionalmod(p, BRW_CONDITIONAL_Z);
> @@ -765,21 +769,13 @@ void brw_emit_anyprim_setup( struct brw_sf_compile *c )
>                                                (1<<_3DPRIM_LINESTRIP_BF) |
>                                                (1<<_3DPRIM_LINESTRIP_CONT_BF)));
>     jmp = brw_JMPI(p, ip, ip, brw_imm_d(0)) - p->store;
> -   {
> -      brw_push_insn_state(p);
> -      brw_emit_line_setup( c, false );
> -      brw_pop_insn_state(p);
> -   }
> +   brw_emit_line_setup( c, false );

and here.

>     brw_land_fwd_jump(p, jmp);
>
>     brw_set_conditionalmod(p, BRW_CONDITIONAL_Z);
>     brw_AND(p, v1_null_ud, payload_attr, brw_imm_ud(1<<BRW_SPRITE_POINT_ENABLE));
>     jmp = brw_JMPI(p, ip, ip, brw_imm_d(0)) - p->store;
> -   {
> -      brw_push_insn_state(p);
> -      brw_emit_point_sprite_setup( c, false );
> -      brw_pop_insn_state(p);
> -   }
> +   brw_emit_point_sprite_setup( c, false );

and here.


More information about the mesa-dev mailing list