Patches 2 and 3 are

Reviewed-by: Ian Romanick <ian.d.roman...@intel.com>

On 10/02/2018 11:06 AM, Chris Wilson wrote:
> Lots of places open-coded the assumed layout of the predicate/results
> within the query object, replace those with simple helpers.
> 
> v2: Fix function decl style.
> 
> Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk>
> Cc: Kenneth Graunke <kenn...@whitecape.org>
> Cc: Matt Turner <matts...@gmail.com>
> ---
>  .../drivers/dri/i965/brw_conditional_render.c  | 10 ++++++++--
>  src/mesa/drivers/dri/i965/brw_context.h        | 15 +++++++++++++++
>  src/mesa/drivers/dri/i965/gen6_queryobj.c      |  6 +++---
>  src/mesa/drivers/dri/i965/hsw_queryobj.c       | 18 +++++++++---------
>  4 files changed, 35 insertions(+), 14 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_conditional_render.c 
> b/src/mesa/drivers/dri/i965/brw_conditional_render.c
> index e33e79fb6ce..0177a7f80b4 100644
> --- a/src/mesa/drivers/dri/i965/brw_conditional_render.c
> +++ b/src/mesa/drivers/dri/i965/brw_conditional_render.c
> @@ -87,8 +87,14 @@ set_predicate_for_occlusion_query(struct brw_context *brw,
>      */
>     brw_emit_pipe_control_flush(brw, PIPE_CONTROL_FLUSH_ENABLE);
>  
> -   brw_load_register_mem64(brw, MI_PREDICATE_SRC0, query->bo, 0 /* offset 
> */);
> -   brw_load_register_mem64(brw, MI_PREDICATE_SRC1, query->bo, 8 /* offset 
> */);
> +   brw_load_register_mem64(brw,
> +                           MI_PREDICATE_SRC0,
> +                           query->bo,
> +                           gen6_query_results_offset(query, 0));
> +   brw_load_register_mem64(brw,
> +                           MI_PREDICATE_SRC1,
> +                           query->bo,
> +                           gen6_query_results_offset(query, 1));
>  }
>  
>  static void
> diff --git a/src/mesa/drivers/dri/i965/brw_context.h 
> b/src/mesa/drivers/dri/i965/brw_context.h
> index 7fd15669eb9..3014fa68aff 100644
> --- a/src/mesa/drivers/dri/i965/brw_context.h
> +++ b/src/mesa/drivers/dri/i965/brw_context.h
> @@ -467,6 +467,21 @@ struct brw_query_object {
>     bool flushed;
>  };
>  
> +#define GEN6_QUERY_PREDICATE (2)
> +#define GEN6_QUERY_RESULTS (0)
> +
> +static inline unsigned
> +gen6_query_predicate_offset(const struct brw_query_object *query)
> +{
> +   return GEN6_QUERY_PREDICATE * sizeof(uint64_t);
> +}
> +
> +static inline unsigned
> +gen6_query_results_offset(const struct brw_query_object *query, unsigned idx)
> +{
> +   return (GEN6_QUERY_RESULTS + idx) * sizeof(uint64_t);
> +}
> +
>  struct brw_reloc_list {
>     struct drm_i915_gem_relocation_entry *relocs;
>     int reloc_count;
> diff --git a/src/mesa/drivers/dri/i965/gen6_queryobj.c 
> b/src/mesa/drivers/dri/i965/gen6_queryobj.c
> index e3097e878aa..ffdee4040fc 100644
> --- a/src/mesa/drivers/dri/i965/gen6_queryobj.c
> +++ b/src/mesa/drivers/dri/i965/gen6_queryobj.c
> @@ -71,7 +71,7 @@ set_query_availability(struct brw_context *brw, struct 
> brw_query_object *query,
>        }
>  
>        brw_emit_pipe_control_write(brw, flags,
> -                                  query->bo, 2 * sizeof(uint64_t),
> +                                  query->bo, 
> gen6_query_predicate_offset(query),
>                                    available);
>     }
>  }
> @@ -326,7 +326,7 @@ gen6_begin_query(struct gl_context *ctx, struct 
> gl_query_object *q)
>  {
>     struct brw_context *brw = brw_context(ctx);
>     struct brw_query_object *query = (struct brw_query_object *)q;
> -   const int idx = 0;
> +   const int idx = GEN6_QUERY_RESULTS;
>  
>     /* Since we're starting a new query, we need to throw away old results. */
>     brw_bo_unreference(query->bo);
> @@ -416,7 +416,7 @@ gen6_end_query(struct gl_context *ctx, struct 
> gl_query_object *q)
>  {
>     struct brw_context *brw = brw_context(ctx);
>     struct brw_query_object *query = (struct brw_query_object *)q;
> -   const int idx = 1;
> +   const int idx = GEN6_QUERY_RESULTS + 1;
>  
>     switch (query->Base.Target) {
>     case GL_TIME_ELAPSED:
> diff --git a/src/mesa/drivers/dri/i965/hsw_queryobj.c 
> b/src/mesa/drivers/dri/i965/hsw_queryobj.c
> index 24f52a7d752..120733c759a 100644
> --- a/src/mesa/drivers/dri/i965/hsw_queryobj.c
> +++ b/src/mesa/drivers/dri/i965/hsw_queryobj.c
> @@ -191,7 +191,7 @@ load_overflow_data_to_cs_gprs(struct brw_context *brw,
>                                struct brw_query_object *query,
>                                int idx)
>  {
> -   int offset = idx * sizeof(uint64_t) * 4;
> +   int offset = gen6_query_results_offset(query, 0) + idx * sizeof(uint64_t) 
> * 4;
>  
>     brw_load_register_mem64(brw, HSW_CS_GPR(1), query->bo, offset);
>  
> @@ -283,7 +283,7 @@ hsw_result_to_gpr0(struct gl_context *ctx, struct 
> brw_query_object *query,
>        brw_load_register_mem64(brw,
>                                HSW_CS_GPR(0),
>                                query->bo,
> -                              2 * sizeof(uint64_t));
> +                              gen6_query_predicate_offset(query));
>        return;
>     }
>  
> @@ -300,7 +300,7 @@ hsw_result_to_gpr0(struct gl_context *ctx, struct 
> brw_query_object *query,
>        brw_load_register_mem64(brw,
>                                HSW_CS_GPR(0),
>                                query->bo,
> -                              0 * sizeof(uint64_t));
> +                              gen6_query_results_offset(query, 0));
>     } else if (query->Base.Target == GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB
>                || query->Base.Target == GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB) {
>        /* Don't do anything in advance here, since the math for this is a 
> little
> @@ -310,11 +310,11 @@ hsw_result_to_gpr0(struct gl_context *ctx, struct 
> brw_query_object *query,
>        brw_load_register_mem64(brw,
>                                HSW_CS_GPR(1),
>                                query->bo,
> -                              0 * sizeof(uint64_t));
> +                              gen6_query_results_offset(query, 0));
>        brw_load_register_mem64(brw,
>                                HSW_CS_GPR(2),
>                                query->bo,
> -                              1 * sizeof(uint64_t));
> +                              gen6_query_results_offset(query, 1));
>  
>        BEGIN_BATCH(5);
>        OUT_BATCH(HSW_MI_MATH | (5 - 2));
> @@ -384,13 +384,13 @@ store_query_result_imm(struct brw_context *brw, struct 
> brw_bo *bo,
>  }
>  
>  static void
> -set_predicate(struct brw_context *brw, struct brw_bo *query_bo)
> +set_predicate(struct brw_context *brw, struct brw_query_object *query)
>  {
>     brw_load_register_imm64(brw, MI_PREDICATE_SRC1, 0ull);
>  
>     /* Load query availability into SRC0 */
> -   brw_load_register_mem64(brw, MI_PREDICATE_SRC0, query_bo,
> -                           2 * sizeof(uint64_t));
> +   brw_load_register_mem64(brw, MI_PREDICATE_SRC0, query->bo,
> +                           gen6_query_predicate_offset(query));
>  
>     /* predicate = !(query_availability == 0); */
>     BEGIN_BATCH(1);
> @@ -456,7 +456,7 @@ hsw_store_query_result(struct gl_context *ctx, struct 
> gl_query_object *q,
>         */
>        hsw_result_to_gpr0(ctx, query, buf, offset, pname, ptype);
>        if (pipelined)
> -         set_predicate(brw, query->bo);
> +         set_predicate(brw, query);
>        store_query_result_reg(brw, bo->buffer, offset, ptype, HSW_CS_GPR(0),
>                               pipelined);
>     } else {
> 

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to