mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 15:48:36 +02:00
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:
parent
0a0a04bdaa
commit
7dd9bf45b9
5 changed files with 43 additions and 0 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue