diff options
author | Dave Airlie <airlied@redhat.com> | 2021-12-06 17:56:59 +1000 |
---|---|---|
committer | Marge Bot <emma+marge@anholt.net> | 2021-12-08 19:06:48 +0000 |
commit | b79d12bbb24102252412722077cc6563d6a93f47 (patch) | |
tree | afa13d5d233bc863829f55dbce3d5cb149ef2dfb | |
parent | 097646cf7c6753945a1f463611a66f5cfa7a8a1b (diff) |
mesa/st: move perfomance monitor to direct call
Acked-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14100>
-rw-r--r-- | src/mesa/main/dd.h | 25 | ||||
-rw-r--r-- | src/mesa/main/performance_monitor.c | 24 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_cb_perfmon.c | 28 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_cb_perfmon.h | 16 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_context.c | 1 |
5 files changed, 34 insertions, 60 deletions
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h index f1612c1e3c2..ac66972df2f 100644 --- a/src/mesa/main/dd.h +++ b/src/mesa/main/dd.h @@ -777,31 +777,6 @@ struct dd_function_table { /*@}*/ /** - * \name Performance monitors - */ - /*@{*/ - void (*InitPerfMonitorGroups)(struct gl_context *ctx); - struct gl_perf_monitor_object * (*NewPerfMonitor)(struct gl_context *ctx); - void (*DeletePerfMonitor)(struct gl_context *ctx, - struct gl_perf_monitor_object *m); - GLboolean (*BeginPerfMonitor)(struct gl_context *ctx, - struct gl_perf_monitor_object *m); - - /** Stop an active performance monitor, discarding results. */ - void (*ResetPerfMonitor)(struct gl_context *ctx, - struct gl_perf_monitor_object *m); - void (*EndPerfMonitor)(struct gl_context *ctx, - struct gl_perf_monitor_object *m); - GLboolean (*IsPerfMonitorResultAvailable)(struct gl_context *ctx, - struct gl_perf_monitor_object *m); - void (*GetPerfMonitorResult)(struct gl_context *ctx, - struct gl_perf_monitor_object *m, - GLsizei dataSize, - GLuint *data, - GLint *bytesWritten); - /*@}*/ - - /** * \name GREMEDY debug/marker functions */ /*@{*/ diff --git a/src/mesa/main/performance_monitor.c b/src/mesa/main/performance_monitor.c index e972b878268..da3aedd62de 100644 --- a/src/mesa/main/performance_monitor.c +++ b/src/mesa/main/performance_monitor.c @@ -45,6 +45,8 @@ #include "util/bitset.h" #include "util/ralloc.h" +#include "state_tracker/st_cb_perfmon.h" + void _mesa_init_performance_monitors(struct gl_context *ctx) { @@ -57,14 +59,14 @@ static inline void init_groups(struct gl_context *ctx) { if (unlikely(!ctx->PerfMonitor.Groups)) - ctx->Driver.InitPerfMonitorGroups(ctx); + st_InitPerfMonitorGroups(ctx); } static struct gl_perf_monitor_object * new_performance_monitor(struct gl_context *ctx, GLuint index) { unsigned i; - struct gl_perf_monitor_object *m = ctx->Driver.NewPerfMonitor(ctx); + struct gl_perf_monitor_object *m = st_NewPerfMonitor(ctx); if (m == NULL) return NULL; @@ -96,7 +98,7 @@ new_performance_monitor(struct gl_context *ctx, GLuint index) fail: ralloc_free(m->ActiveGroups); ralloc_free(m->ActiveCounters); - ctx->Driver.DeletePerfMonitor(ctx, m); + st_DeletePerfMonitor(ctx, m); return NULL; } @@ -108,7 +110,7 @@ free_performance_monitor(void *data, void *user) ralloc_free(m->ActiveGroups); ralloc_free(m->ActiveCounters); - ctx->Driver.DeletePerfMonitor(ctx, m); + st_DeletePerfMonitor(ctx, m); } void @@ -393,14 +395,14 @@ _mesa_DeletePerfMonitorsAMD(GLsizei n, GLuint *monitors) if (m) { /* Give the driver a chance to stop the monitor if it's active. */ if (m->Active) { - ctx->Driver.ResetPerfMonitor(ctx, m); + st_ResetPerfMonitor(ctx, m); m->Ended = false; } _mesa_HashRemove(ctx->PerfMonitor.Monitors, monitors[i]); ralloc_free(m->ActiveGroups); ralloc_free(m->ActiveCounters); - ctx->Driver.DeletePerfMonitor(ctx, m); + st_DeletePerfMonitor(ctx, m); } else { /* "INVALID_VALUE error will be generated if any of the monitor IDs * in the <monitors> parameter to DeletePerfMonitorsAMD do not @@ -460,7 +462,7 @@ _mesa_SelectPerfMonitorCountersAMD(GLuint monitor, GLboolean enable, * results for that monitor become invalidated and the result queries * PERFMON_RESULT_SIZE_AMD and PERFMON_RESULT_AVAILABLE_AMD are reset to 0." */ - ctx->Driver.ResetPerfMonitor(ctx, m); + st_ResetPerfMonitor(ctx, m); /* Sanity check the counter ID list. */ for (i = 0; i < numCounters; i++) { @@ -515,7 +517,7 @@ _mesa_BeginPerfMonitorAMD(GLuint monitor) /* The driver is free to return false if it can't begin monitoring for * any reason. This translates into an INVALID_OPERATION error. */ - if (ctx->Driver.BeginPerfMonitor(ctx, m)) { + if (st_BeginPerfMonitor(ctx, m)) { m->Active = true; m->Ended = false; } else { @@ -544,7 +546,7 @@ _mesa_EndPerfMonitorAMD(GLuint monitor) return; } - ctx->Driver.EndPerfMonitor(ctx, m); + st_EndPerfMonitor(ctx, m); m->Active = false; m->Ended = true; @@ -606,7 +608,7 @@ _mesa_GetPerfMonitorCounterDataAMD(GLuint monitor, GLenum pname, /* If the monitor has never ended, there is no result. */ result_available = m->Ended && - ctx->Driver.IsPerfMonitorResultAvailable(ctx, m); + st_IsPerfMonitorResultAvailable(ctx, m); /* AMD appears to return 0 for all queries unless a result is available. */ if (!result_available) { @@ -628,7 +630,7 @@ _mesa_GetPerfMonitorCounterDataAMD(GLuint monitor, GLenum pname, *bytesWritten = sizeof(GLuint); break; case GL_PERFMON_RESULT_AMD: - ctx->Driver.GetPerfMonitorResult(ctx, m, dataSize, data, bytesWritten); + st_GetPerfMonitorResult(ctx, m, dataSize, data, bytesWritten); break; default: _mesa_error(ctx, GL_INVALID_ENUM, diff --git a/src/mesa/state_tracker/st_cb_perfmon.c b/src/mesa/state_tracker/st_cb_perfmon.c index 72cb5cd3408..de36545509d 100644 --- a/src/mesa/state_tracker/st_cb_perfmon.c +++ b/src/mesa/state_tracker/st_cb_perfmon.c @@ -148,7 +148,7 @@ reset_perf_monitor(struct st_perf_monitor_object *stm, stm->batch_result = NULL; } -static struct gl_perf_monitor_object * +struct gl_perf_monitor_object * st_NewPerfMonitor(struct gl_context *ctx) { struct st_perf_monitor_object *stq = ST_CALLOC_STRUCT(st_perf_monitor_object); @@ -157,7 +157,7 @@ st_NewPerfMonitor(struct gl_context *ctx) return NULL; } -static void +void st_DeletePerfMonitor(struct gl_context *ctx, struct gl_perf_monitor_object *m) { struct st_perf_monitor_object *stm = st_perf_monitor_object(m); @@ -167,7 +167,7 @@ st_DeletePerfMonitor(struct gl_context *ctx, struct gl_perf_monitor_object *m) FREE(stm); } -static GLboolean +GLboolean st_BeginPerfMonitor(struct gl_context *ctx, struct gl_perf_monitor_object *m) { struct st_perf_monitor_object *stm = st_perf_monitor_object(m); @@ -199,7 +199,7 @@ fail: return false; } -static void +void st_EndPerfMonitor(struct gl_context *ctx, struct gl_perf_monitor_object *m) { struct st_perf_monitor_object *stm = st_perf_monitor_object(m); @@ -217,7 +217,7 @@ st_EndPerfMonitor(struct gl_context *ctx, struct gl_perf_monitor_object *m) pipe->end_query(pipe, stm->batch_query); } -static void +void st_ResetPerfMonitor(struct gl_context *ctx, struct gl_perf_monitor_object *m) { struct st_perf_monitor_object *stm = st_perf_monitor_object(m); @@ -232,7 +232,7 @@ st_ResetPerfMonitor(struct gl_context *ctx, struct gl_perf_monitor_object *m) st_BeginPerfMonitor(ctx, m); } -static GLboolean +GLboolean st_IsPerfMonitorResultAvailable(struct gl_context *ctx, struct gl_perf_monitor_object *m) { @@ -261,7 +261,7 @@ st_IsPerfMonitorResultAvailable(struct gl_context *ctx, return true; } -static void +void st_GetPerfMonitorResult(struct gl_context *ctx, struct gl_perf_monitor_object *m, GLsizei dataSize, @@ -339,7 +339,7 @@ st_have_perfmon(struct st_context *st) return screen->get_driver_query_group_info(screen, 0, NULL) != 0; } -static void +void st_InitPerfMonitorGroups(struct gl_context *ctx) { struct st_context *st = st_context(ctx); @@ -463,15 +463,3 @@ st_destroy_perfmon(struct st_context *st) FREE(st->perfmon); FREE((void *)perfmon->Groups); } - -void st_init_perfmon_functions(struct dd_function_table *functions) -{ - functions->InitPerfMonitorGroups = st_InitPerfMonitorGroups; - functions->NewPerfMonitor = st_NewPerfMonitor; - functions->DeletePerfMonitor = st_DeletePerfMonitor; - functions->BeginPerfMonitor = st_BeginPerfMonitor; - functions->EndPerfMonitor = st_EndPerfMonitor; - functions->ResetPerfMonitor = st_ResetPerfMonitor; - functions->IsPerfMonitorResultAvailable = st_IsPerfMonitorResultAvailable; - functions->GetPerfMonitorResult = st_GetPerfMonitorResult; -} diff --git a/src/mesa/state_tracker/st_cb_perfmon.h b/src/mesa/state_tracker/st_cb_perfmon.h index 98202f23c83..5964d3bcf8e 100644 --- a/src/mesa/state_tracker/st_cb_perfmon.h +++ b/src/mesa/state_tracker/st_cb_perfmon.h @@ -78,7 +78,17 @@ st_have_perfmon(struct st_context *st); void st_destroy_perfmon(struct st_context *st); -extern void -st_init_perfmon_functions(struct dd_function_table *functions); - +struct gl_perf_monitor_object *st_NewPerfMonitor(struct gl_context *ctx); +void st_DeletePerfMonitor(struct gl_context *ctx, struct gl_perf_monitor_object *m); +GLboolean st_BeginPerfMonitor(struct gl_context *ctx, struct gl_perf_monitor_object *m); +void st_EndPerfMonitor(struct gl_context *ctx, struct gl_perf_monitor_object *m); +void st_ResetPerfMonitor(struct gl_context *ctx, struct gl_perf_monitor_object *m); +GLboolean st_IsPerfMonitorResultAvailable(struct gl_context *ctx, + struct gl_perf_monitor_object *m); +void st_GetPerfMonitorResult(struct gl_context *ctx, + struct gl_perf_monitor_object *m, + GLsizei dataSize, + GLuint *data, + GLint *bytesWritten); +void st_InitPerfMonitorGroups(struct gl_context *ctx); #endif diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c index 353a604573e..62071fe9c2a 100644 --- a/src/mesa/state_tracker/st_context.c +++ b/src/mesa/state_tracker/st_context.c @@ -944,7 +944,6 @@ st_init_driver_functions(struct pipe_screen *screen, st_init_fbo_functions(functions); st_init_msaa_functions(functions); - st_init_perfmon_functions(functions); st_init_program_functions(functions); st_init_readpixels_functions(functions); st_init_texture_functions(functions); |