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 { -- 2.19.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev