panfrost: add GALLIUM_HUD=draw-calls

Signed-off-by: Italo Nicola <italonicola@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20063>
This commit is contained in:
Italo Nicola 2022-11-29 13:30:07 +00:00 committed by Marge Bot
parent 0a0a04bdaa
commit 7dd9bf45b9
5 changed files with 43 additions and 0 deletions

View file

@ -3985,6 +3985,8 @@ panfrost_draw_vbo(struct pipe_context *pipe,
if (!panfrost_render_condition_check(ctx))
return;
ctx->draw_calls++;
/* Emulate indirect draws unless we're using the experimental path */
if ((!(dev->debug & PAN_DBG_INDIRECT) || !PAN_GPU_INDIRECTS) && indirect && indirect->buffer) {
assert(num_draws == 1);

View file

@ -645,6 +645,10 @@ panfrost_begin_query(struct pipe_context *pipe, struct pipe_query *q)
query->start = ctx->tf_prims_generated;
break;
case PAN_QUERY_DRAW_CALLS:
query->start = ctx->draw_calls;
break;
default:
/* TODO: timestamp queries, etc? */
break;
@ -672,6 +676,9 @@ panfrost_end_query(struct pipe_context *pipe, struct pipe_query *q)
case PIPE_QUERY_PRIMITIVES_EMITTED:
query->end = ctx->tf_prims_generated;
break;
case PAN_QUERY_DRAW_CALLS:
query->end = ctx->draw_calls;
break;
}
return true;
@ -719,6 +726,10 @@ panfrost_get_query_result(struct pipe_context *pipe,
vresult->u64 = query->end - query->start;
break;
case PAN_QUERY_DRAW_CALLS:
vresult->u64 = query->end - query->start;
break;
default:
/* TODO: more queries */
break;

View file

@ -165,6 +165,7 @@ struct panfrost_context {
bool active_queries;
uint64_t prims_generated;
uint64_t tf_prims_generated;
uint64_t draw_calls;
struct panfrost_query *occlusion_query;
bool indirect_draw;

View file

@ -869,6 +869,24 @@ panfrost_get_disk_shader_cache(struct pipe_screen *pscreen)
return pan_screen(pscreen)->disk_cache;
}
int
panfrost_get_driver_query_info(struct pipe_screen *pscreen, unsigned index,
struct pipe_driver_query_info *info)
{
int num_queries = ARRAY_SIZE(panfrost_driver_query_list);
if (!info)
return num_queries;
if (index >= num_queries)
return 0;
*info = panfrost_driver_query_list[index];
return 1;
}
struct pipe_screen *
panfrost_create_screen(int fd, struct renderonly *ro)
{
@ -901,6 +919,7 @@ panfrost_create_screen(int fd, struct renderonly *ro)
screen->base.get_name = panfrost_get_name;
screen->base.get_vendor = panfrost_get_vendor;
screen->base.get_device_vendor = panfrost_get_device_vendor;
screen->base.get_driver_query_info = panfrost_get_driver_query_info;
screen->base.get_param = panfrost_get_param;
screen->base.get_shader_param = panfrost_get_shader_param;
screen->base.get_compute_param = panfrost_get_compute_param;

View file

@ -42,6 +42,12 @@
#include "pan_device.h"
#include "pan_mempool.h"
#define PAN_QUERY_DRAW_CALLS (PIPE_QUERY_DRIVER_SPECIFIC + 0)
static const struct pipe_driver_query_info panfrost_driver_query_list[] = {
{"draw-calls", PAN_QUERY_DRAW_CALLS, { 0 }},
};
struct panfrost_batch;
struct panfrost_context;
struct panfrost_resource;
@ -126,6 +132,10 @@ pan_device(struct pipe_screen *p)
struct pipe_fence_handle *
panfrost_fence_create(struct panfrost_context *ctx);
int
panfrost_get_driver_query_info(struct pipe_screen *pscreen, unsigned index,
struct pipe_driver_query_info *info);
void panfrost_cmdstream_screen_init_v4(struct panfrost_screen *screen);
void panfrost_cmdstream_screen_init_v5(struct panfrost_screen *screen);
void panfrost_cmdstream_screen_init_v6(struct panfrost_screen *screen);