diff --git a/src/gallium/drivers/etnaviv/Makefile.sources b/src/gallium/drivers/etnaviv/Makefile.sources index 7d4ee3955bc..b71bff63e2a 100644 --- a/src/gallium/drivers/etnaviv/Makefile.sources +++ b/src/gallium/drivers/etnaviv/Makefile.sources @@ -36,8 +36,8 @@ C_SOURCES := \ etnaviv_internal.h \ etnaviv_query.c \ etnaviv_query.h \ - etnaviv_query_hw.c \ - etnaviv_query_hw.h \ + etnaviv_query_acc.c \ + etnaviv_query_acc.h \ etnaviv_query_sw.c \ etnaviv_query_sw.h \ etnaviv_query_pm.c \ diff --git a/src/gallium/drivers/etnaviv/etnaviv_context.c b/src/gallium/drivers/etnaviv/etnaviv_context.c index 0f485f41071..e91e6f11a3b 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_context.c +++ b/src/gallium/drivers/etnaviv/etnaviv_context.c @@ -34,7 +34,7 @@ #include "etnaviv_emit.h" #include "etnaviv_fence.h" #include "etnaviv_query.h" -#include "etnaviv_query_hw.h" +#include "etnaviv_query_acc.h" #include "etnaviv_rasterizer.h" #include "etnaviv_resource.h" #include "etnaviv_screen.h" @@ -347,8 +347,8 @@ etna_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info) } } - list_for_each_entry(struct etna_hw_query, hq, &ctx->active_hw_queries, node) - resource_written(ctx, hq->prsc); + list_for_each_entry(struct etna_acc_query, aq, &ctx->active_acc_queries, node) + resource_written(ctx, aq->prsc); ctx->stats.prims_emitted += u_reduced_prims_for_vertices(info->mode, info->count); ctx->stats.draw_calls++; @@ -471,14 +471,17 @@ etna_flush(struct pipe_context *pctx, struct pipe_fence_handle **fence, mtx_lock(&ctx->lock); - list_for_each_entry(struct etna_hw_query, hq, &ctx->active_hw_queries, node) - etna_hw_query_suspend(hq, ctx); + list_for_each_entry(struct etna_acc_query, aq, &ctx->active_acc_queries, node) + etna_acc_query_suspend(aq, ctx); + + list_for_each_entry(struct etna_acc_query, aq, &ctx->active_acc_queries, node) + etna_acc_query_suspend(aq, ctx); etna_cmd_stream_flush(ctx->stream, ctx->in_fence_fd, (flags & PIPE_FLUSH_FENCE_FD) ? &out_fence_fd : NULL); - list_for_each_entry(struct etna_hw_query, hq, &ctx->active_hw_queries, node) - etna_hw_query_resume(hq, ctx); + list_for_each_entry(struct etna_acc_query, aq, &ctx->active_acc_queries, node) + etna_acc_query_resume(aq, ctx); if (fence) *fence = etna_fence_create(pctx, out_fence_fd); @@ -633,7 +636,7 @@ etna_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags) goto fail; slab_create_child(&ctx->transfer_pool, &screen->transfer_pool); - list_inithead(&ctx->active_hw_queries); + list_inithead(&ctx->active_acc_queries); /* create dummy RT buffer, used when rendering with no color buffer */ ctx->dummy_rt = etna_bo_new(ctx->screen->dev, 64 * 64 * 4, diff --git a/src/gallium/drivers/etnaviv/etnaviv_context.h b/src/gallium/drivers/etnaviv/etnaviv_context.h index 5deda100cbb..b115e737771 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_context.h +++ b/src/gallium/drivers/etnaviv/etnaviv_context.h @@ -190,8 +190,8 @@ struct etna_context { struct pipe_debug_callback debug; int in_fence_fd; - /* list of active hardware queries */ - struct list_head active_hw_queries; + /* list of accumulated HW queries */ + struct list_head active_acc_queries; struct etna_bo *dummy_rt; struct etna_reloc dummy_rt_reloc; diff --git a/src/gallium/drivers/etnaviv/etnaviv_query.c b/src/gallium/drivers/etnaviv/etnaviv_query.c index 89e016d0104..deb74258e7f 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_query.c +++ b/src/gallium/drivers/etnaviv/etnaviv_query.c @@ -30,7 +30,7 @@ #include "etnaviv_context.h" #include "etnaviv_query.h" -#include "etnaviv_query_hw.h" +#include "etnaviv_query_acc.h" #include "etnaviv_query_sw.h" #include "etnaviv_query_pm.h" @@ -43,7 +43,7 @@ etna_create_query(struct pipe_context *pctx, unsigned query_type, q = etna_sw_create_query(ctx, query_type); if (!q) - q = etna_hw_create_query(ctx, query_type); + q = etna_acc_create_query(ctx, query_type); if (!q) q = etna_pm_create_query(ctx, query_type); @@ -139,11 +139,11 @@ etna_set_active_query_state(struct pipe_context *pctx, bool enable) struct etna_context *ctx = etna_context(pctx); if (enable) { - list_for_each_entry(struct etna_hw_query, hq, &ctx->active_hw_queries, node) - etna_hw_query_resume(hq, ctx); + list_for_each_entry(struct etna_acc_query, aq, &ctx->active_acc_queries, node) + etna_acc_query_resume(aq, ctx); } else { - list_for_each_entry(struct etna_hw_query, hq, &ctx->active_hw_queries, node) - etna_hw_query_suspend(hq, ctx); + list_for_each_entry(struct etna_acc_query, aq, &ctx->active_acc_queries, node) + etna_acc_query_suspend(aq, ctx); } } diff --git a/src/gallium/drivers/etnaviv/etnaviv_query_hw.c b/src/gallium/drivers/etnaviv/etnaviv_query_acc.c similarity index 61% rename from src/gallium/drivers/etnaviv/etnaviv_query_hw.c rename to src/gallium/drivers/etnaviv/etnaviv_query_acc.c index 588583c4fde..ff709ed58ac 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_query_hw.c +++ b/src/gallium/drivers/etnaviv/etnaviv_query_acc.c @@ -32,7 +32,7 @@ #include "etnaviv_context.h" #include "etnaviv_debug.h" #include "etnaviv_emit.h" -#include "etnaviv_query_hw.h" +#include "etnaviv_query_acc.h" #include "etnaviv_screen.h" /* @@ -43,72 +43,72 @@ */ static void -occlusion_start(struct etna_hw_query *hq, struct etna_context *ctx) +occlusion_start(struct etna_acc_query *aq, struct etna_context *ctx) { - struct etna_resource *rsc = etna_resource(hq->prsc); + struct etna_resource *rsc = etna_resource(aq->prsc); struct etna_reloc r = { .bo = rsc->bo, .flags = ETNA_RELOC_WRITE }; - if (hq->samples > 63) { - hq->samples = 63; + if (aq->samples > 63) { + aq->samples = 63; BUG("samples overflow"); } - r.offset = hq->samples * 8; /* 64bit value */ + r.offset = aq->samples * 8; /* 64bit value */ etna_set_state_reloc(ctx->stream, VIVS_GL_OCCLUSION_QUERY_ADDR, &r); } static void -occlusion_stop(struct etna_hw_query *hq, struct etna_context *ctx) +occlusion_stop(struct etna_acc_query *aq, struct etna_context *ctx) { /* 0x1DF5E76 is the value used by blob - but any random value will work */ etna_set_state(ctx->stream, VIVS_GL_OCCLUSION_QUERY_CONTROL, 0x1DF5E76); } static void -occlusion_suspend(struct etna_hw_query *hq, struct etna_context *ctx) +occlusion_suspend(struct etna_acc_query *aq, struct etna_context *ctx) { - occlusion_stop(hq, ctx); + occlusion_stop(aq, ctx); } static void -occlusion_resume(struct etna_hw_query *hq, struct etna_context *ctx) +occlusion_resume(struct etna_acc_query *aq, struct etna_context *ctx) { - hq->samples++; - occlusion_start(hq, ctx); + aq->samples++; + occlusion_start(aq, ctx); } static void -occlusion_result(struct etna_hw_query *hq, void *buf, - union pipe_query_result *result) +occlusion_result(struct etna_acc_query *aq, void *buf, + union pipe_query_result *result) { uint64_t sum = 0; uint64_t *ptr = (uint64_t *)buf; - for (unsigned i = 0; i <= hq->samples; i++) + for (unsigned i = 0; i <= aq->samples; i++) sum += *(ptr + i); - if (hq->base.type == PIPE_QUERY_OCCLUSION_COUNTER) + if (aq->base.type == PIPE_QUERY_OCCLUSION_COUNTER) result->u64 = sum; else result->b = !!sum; } static void -etna_hw_destroy_query(struct etna_context *ctx, struct etna_query *q) +etna_acc_destroy_query(struct etna_context *ctx, struct etna_query *q) { - struct etna_hw_query *hq = etna_hw_query(q); + struct etna_acc_query *aq = etna_acc_query(q); - pipe_resource_reference(&hq->prsc, NULL); - list_del(&hq->node); + pipe_resource_reference(&aq->prsc, NULL); + list_del(&aq->node); - FREE(hq); + FREE(aq); } -static const struct etna_hw_sample_provider occlusion_provider = { +static const struct etna_acc_sample_provider occlusion_provider = { .start = occlusion_start, .stop = occlusion_stop, .suspend = occlusion_suspend, @@ -117,19 +117,19 @@ static const struct etna_hw_sample_provider occlusion_provider = { }; static void -realloc_query_bo(struct etna_context *ctx, struct etna_hw_query *hq) +realloc_query_bo(struct etna_context *ctx, struct etna_acc_query *aq) { struct etna_resource *rsc; void *map; - pipe_resource_reference(&hq->prsc, NULL); + pipe_resource_reference(&aq->prsc, NULL); /* allocate resource with space for 64 * 64bit values */ - hq->prsc = pipe_buffer_create(&ctx->screen->base, PIPE_BIND_QUERY_BUFFER, + aq->prsc = pipe_buffer_create(&ctx->screen->base, PIPE_BIND_QUERY_BUFFER, 0, 0x1000); /* don't assume the buffer is zero-initialized */ - rsc = etna_resource(hq->prsc); + rsc = etna_resource(aq->prsc); etna_bo_cpu_prep(rsc->bo, DRM_ETNA_PREP_WRITE); @@ -139,44 +139,44 @@ realloc_query_bo(struct etna_context *ctx, struct etna_hw_query *hq) } static bool -etna_hw_begin_query(struct etna_context *ctx, struct etna_query *q) +etna_acc_begin_query(struct etna_context *ctx, struct etna_query *q) { - struct etna_hw_query *hq = etna_hw_query(q); - const struct etna_hw_sample_provider *p = hq->provider; + struct etna_acc_query *aq = etna_acc_query(q); + const struct etna_acc_sample_provider *p = aq->provider; /* ->begin_query() discards previous results, so realloc bo */ - realloc_query_bo(ctx, hq); + realloc_query_bo(ctx, aq); - p->start(hq, ctx); + p->start(aq, ctx); /* add to active list */ - assert(list_is_empty(&hq->node)); - list_addtail(&hq->node, &ctx->active_hw_queries); + assert(list_is_empty(&aq->node)); + list_addtail(&aq->node, &ctx->active_acc_queries); return true; } static void -etna_hw_end_query(struct etna_context *ctx, struct etna_query *q) +etna_acc_end_query(struct etna_context *ctx, struct etna_query *q) { - struct etna_hw_query *hq = etna_hw_query(q); - const struct etna_hw_sample_provider *p = hq->provider; + struct etna_acc_query *aq = etna_acc_query(q); + const struct etna_acc_sample_provider *p = aq->provider; - p->stop(hq, ctx); + p->stop(aq, ctx); /* remove from active list */ - list_delinit(&hq->node); + list_delinit(&aq->node); } static bool -etna_hw_get_query_result(struct etna_context *ctx, struct etna_query *q, - bool wait, union pipe_query_result *result) +etna_acc_get_query_result(struct etna_context *ctx, struct etna_query *q, + bool wait, union pipe_query_result *result) { - struct etna_hw_query *hq = etna_hw_query(q); - struct etna_resource *rsc = etna_resource(hq->prsc); - const struct etna_hw_sample_provider *p = hq->provider; + struct etna_acc_query *aq = etna_acc_query(q); + struct etna_resource *rsc = etna_resource(aq->prsc); + const struct etna_acc_sample_provider *p = aq->provider; - assert(list_is_empty(&hq->node)); + assert(list_is_empty(&aq->node)); if (!wait) { int ret; @@ -188,7 +188,7 @@ etna_hw_get_query_result(struct etna_context *ctx, struct etna_query *q, * wait to flush unnecessarily but we also don't want to * spin forever. */ - if (hq->no_wait_cnt++ > 5) + if (aq->no_wait_cnt++ > 5) ctx->base.flush(&ctx->base, NULL, 0); return false; } @@ -207,21 +207,21 @@ etna_hw_get_query_result(struct etna_context *ctx, struct etna_query *q, etna_bo_cpu_prep(rsc->bo, DRM_ETNA_PREP_READ); void *ptr = etna_bo_map(rsc->bo); - p->result(hq, ptr, result); + p->result(aq, ptr, result); etna_bo_cpu_fini(rsc->bo); return true; } -static const struct etna_query_funcs hw_query_funcs = { - .destroy_query = etna_hw_destroy_query, - .begin_query = etna_hw_begin_query, - .end_query = etna_hw_end_query, - .get_query_result = etna_hw_get_query_result, +static const struct etna_query_funcs acc_query_funcs = { + .destroy_query = etna_acc_destroy_query, + .begin_query = etna_acc_begin_query, + .end_query = etna_acc_end_query, + .get_query_result = etna_acc_get_query_result, }; -static inline const struct etna_hw_sample_provider * +static inline const struct etna_acc_sample_provider * query_sample_provider(unsigned query_type) { switch (query_type) { @@ -237,26 +237,26 @@ query_sample_provider(unsigned query_type) } struct etna_query * -etna_hw_create_query(struct etna_context *ctx, unsigned query_type) +etna_acc_create_query(struct etna_context *ctx, unsigned query_type) { - struct etna_hw_query *hq; + struct etna_acc_query *aq; struct etna_query *q; - const struct etna_hw_sample_provider *p; + const struct etna_acc_sample_provider *p; p = query_sample_provider(query_type); if (!p) return NULL; - hq = CALLOC_STRUCT(etna_hw_query); - if (!hq) + aq = CALLOC_STRUCT(etna_acc_query); + if (!aq) return NULL; - hq->provider = p; + aq->provider = p; - list_inithead(&hq->node); + list_inithead(&aq->node); - q = &hq->base; - q->funcs = &hw_query_funcs; + q = &aq->base; + q->funcs = &acc_query_funcs; q->type = query_type; return q; diff --git a/src/gallium/drivers/etnaviv/etnaviv_query_hw.h b/src/gallium/drivers/etnaviv/etnaviv_query_acc.h similarity index 64% rename from src/gallium/drivers/etnaviv/etnaviv_query_hw.h rename to src/gallium/drivers/etnaviv/etnaviv_query_acc.h index 73f3c851e79..3545c4810dc 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_query_hw.h +++ b/src/gallium/drivers/etnaviv/etnaviv_query_acc.h @@ -31,19 +31,19 @@ #include "etnaviv_query.h" -struct etna_hw_query; +struct etna_acc_query; -struct etna_hw_sample_provider { - void (*start)(struct etna_hw_query *hq, struct etna_context *ctx); - void (*stop)(struct etna_hw_query *hq, struct etna_context *ctx); - void (*suspend)(struct etna_hw_query *hq, struct etna_context *ctx); - void (*resume)(struct etna_hw_query *hq, struct etna_context *ctx); +struct etna_acc_sample_provider { + void (*start)(struct etna_acc_query *aq, struct etna_context *ctx); + void (*stop)(struct etna_acc_query *aq, struct etna_context *ctx); + void (*suspend)(struct etna_acc_query *aq, struct etna_context *ctx); + void (*resume)(struct etna_acc_query *aq, struct etna_context *ctx); - void (*result)(struct etna_hw_query *hq, void *buf, + void (*result)(struct etna_acc_query *aq, void *buf, union pipe_query_result *result); }; -struct etna_hw_query { +struct etna_acc_query { struct etna_query base; struct pipe_resource *prsc; @@ -51,38 +51,38 @@ struct etna_hw_query { unsigned no_wait_cnt; /* see etna_hw_get_query_result() */ struct list_head node; /* list-node in ctx->active_hw_queries */ - const struct etna_hw_sample_provider *provider; + const struct etna_acc_sample_provider *provider; }; -static inline struct etna_hw_query * -etna_hw_query(struct etna_query *q) +static inline struct etna_acc_query * +etna_acc_query(struct etna_query *q) { - return (struct etna_hw_query *)q; + return (struct etna_acc_query *)q; } struct etna_query * -etna_hw_create_query(struct etna_context *ctx, unsigned query_type); +etna_acc_create_query(struct etna_context *ctx, unsigned query_type); static inline void -etna_hw_query_suspend(struct etna_hw_query *hq, struct etna_context *ctx) +etna_acc_query_suspend(struct etna_acc_query *aq, struct etna_context *ctx) { - const struct etna_hw_sample_provider *p = hq->provider; + const struct etna_acc_sample_provider *p = aq->provider; - if (!hq->base.active) + if (!aq->base.active) return; - p->suspend(hq, ctx); + p->suspend(aq, ctx); } static inline void -etna_hw_query_resume(struct etna_hw_query *hq, struct etna_context *ctx) +etna_acc_query_resume(struct etna_acc_query *aq, struct etna_context *ctx) { - const struct etna_hw_sample_provider *p = hq->provider; + const struct etna_acc_sample_provider *p = aq->provider; - if (!hq->base.active) + if (!aq->base.active) return; - p->resume(hq, ctx); + p->resume(aq, ctx); } #endif diff --git a/src/gallium/drivers/etnaviv/meson.build b/src/gallium/drivers/etnaviv/meson.build index e62a37e5833..578d9483892 100644 --- a/src/gallium/drivers/etnaviv/meson.build +++ b/src/gallium/drivers/etnaviv/meson.build @@ -55,8 +55,8 @@ files_etnaviv = files( 'etnaviv_internal.h', 'etnaviv_query.c', 'etnaviv_query.h', - 'etnaviv_query_hw.c', - 'etnaviv_query_hw.h', + 'etnaviv_query_acc.c', + 'etnaviv_query_acc.h', 'etnaviv_query_sw.c', 'etnaviv_query_sw.h', 'etnaviv_query_pm.c',