[Mesa-dev] [PATCH 2/2] i965: Use the new brw_load_register_mem helper for draw indirect.

Ian Romanick idr at freedesktop.org
Thu Feb 6 15:43:32 PST 2014


On 02/04/2014 09:07 PM, Kenneth Graunke wrote:
> This makes it work on Broadwell, too.

Eric convinced me (on IRC) that the extra BEGIN_BATCH / ADVANCE_BATCH
calls won't cause problems.  Series is

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
>  src/mesa/drivers/dri/i965/brw_draw.c | 56 ++++++++++++++++--------------------
>  1 file changed, 25 insertions(+), 31 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_draw.c b/src/mesa/drivers/dri/i965/brw_draw.c
> index 39da953..9de622f 100644
> --- a/src/mesa/drivers/dri/i965/brw_draw.c
> +++ b/src/mesa/drivers/dri/i965/brw_draw.c
> @@ -217,42 +217,36 @@ static void brw_emit_prim(struct brw_context *brw,
>  
>        indirect_flag = GEN7_3DPRIM_INDIRECT_PARAMETER_ENABLE;
>  
> -      BEGIN_BATCH(15);
> -
> -      OUT_BATCH(GEN7_MI_LOAD_REGISTER_MEM | (3 - 2));
> -      OUT_BATCH(GEN7_3DPRIM_VERTEX_COUNT);
> -      OUT_RELOC(bo, I915_GEM_DOMAIN_VERTEX, 0,
> -            prim->indirect_offset + 0);
> -      OUT_BATCH(GEN7_MI_LOAD_REGISTER_MEM | (3 - 2));
> -      OUT_BATCH(GEN7_3DPRIM_INSTANCE_COUNT);
> -      OUT_RELOC(bo, I915_GEM_DOMAIN_VERTEX, 0,
> -            prim->indirect_offset + 4);
> -      OUT_BATCH(GEN7_MI_LOAD_REGISTER_MEM | (3 - 2));
> -      OUT_BATCH(GEN7_3DPRIM_START_VERTEX);
> -      OUT_RELOC(bo, I915_GEM_DOMAIN_VERTEX, 0,
> -            prim->indirect_offset + 8);
> -
> +      brw_load_register_mem(brw, GEN7_3DPRIM_VERTEX_COUNT, bo,
> +                            I915_GEM_DOMAIN_VERTEX, 0,
> +                            prim->indirect_offset + 0);
> +      brw_load_register_mem(brw, GEN7_3DPRIM_INSTANCE_COUNT, bo,
> +                            I915_GEM_DOMAIN_VERTEX, 0,
> +                            prim->indirect_offset + 4);
> +
> +      brw_load_register_mem(brw, GEN7_3DPRIM_START_VERTEX, bo,
> +                            I915_GEM_DOMAIN_VERTEX, 0,
> +                            prim->indirect_offset + 8);
>        if (prim->indexed) {
> -         OUT_BATCH(GEN7_MI_LOAD_REGISTER_MEM | (3 - 2));
> -         OUT_BATCH(GEN7_3DPRIM_BASE_VERTEX);
> -         OUT_RELOC(bo, I915_GEM_DOMAIN_VERTEX, 0,
> -               prim->indirect_offset + 12);
> -         OUT_BATCH(GEN7_MI_LOAD_REGISTER_MEM | (3 - 2));
> -         OUT_BATCH(GEN7_3DPRIM_START_INSTANCE);
> -         OUT_RELOC(bo, I915_GEM_DOMAIN_VERTEX, 0,
> -               prim->indirect_offset + 16);
> -      }
> -      else {
> -         OUT_BATCH(GEN7_MI_LOAD_REGISTER_MEM | (3 - 2));
> -         OUT_BATCH(GEN7_3DPRIM_START_INSTANCE);
> -         OUT_RELOC(bo, I915_GEM_DOMAIN_VERTEX, 0,
> -               prim->indirect_offset + 12);
> +         brw_load_register_mem(brw, GEN7_3DPRIM_BASE_VERTEX, bo,
> +                               I915_GEM_DOMAIN_VERTEX, 0,
> +                               prim->indirect_offset + 12);
> +         brw_load_register_mem(brw, GEN7_3DPRIM_START_INSTANCE, bo,
> +                               I915_GEM_DOMAIN_VERTEX, 0,
> +                               prim->indirect_offset + 16);
> +      } else {
> +         brw_load_register_mem(brw, GEN7_3DPRIM_START_INSTANCE, bo,
> +                               I915_GEM_DOMAIN_VERTEX, 0,
> +                               prim->indirect_offset + 12);
> +         brw_load_register_mem(brw, GEN7_3DPRIM_BASE_VERTEX, bo,
> +                               I915_GEM_DOMAIN_VERTEX, 0,
> +                               prim->indirect_offset + 12);
> +         BEGIN_BATCH(3);
>           OUT_BATCH(MI_LOAD_REGISTER_IMM | (3 - 2));
>           OUT_BATCH(GEN7_3DPRIM_BASE_VERTEX);
>           OUT_BATCH(0);
> +         ADVANCE_BATCH();
>        }
> -
> -      ADVANCE_BATCH();
>     }
>     else {
>        indirect_flag = 0;
> 



More information about the mesa-dev mailing list