[Mesa-dev] [PATCH 3/9] i965: Replace open-coded gen6 queryobj offsets with simple helpers
Ian Romanick
idr at freedesktop.org
Sat Oct 6 02:01:27 UTC 2018
Patches 2 and 3 are
Reviewed-by: Ian Romanick <ian.d.romanick at 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 <chris at chris-wilson.co.uk>
> Cc: Kenneth Graunke <kenneth at whitecape.org>
> Cc: Matt Turner <mattst88 at 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 {
>
More information about the mesa-dev
mailing list