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