mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-21 08:58:10 +02:00
Copy the code from the gallium driver into a small library located in src/broadcom. Signed-off-by: Christian Gmeiner <cgmeiner@igalia.com> Reviewed-by: Iago Toral Quiroga <itoral@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32277>
69 lines
2 KiB
C
69 lines
2 KiB
C
/*
|
|
* Copyright © 2024 Raspberry Pi Ltd
|
|
* SPDX-License-Identifier: MIT
|
|
*/
|
|
|
|
#include <assert.h>
|
|
#include "common/v3d_device_info.h"
|
|
#include "common/v3d_util.h"
|
|
#include "util/ralloc.h"
|
|
#include "v3d_perfcntrs.h"
|
|
|
|
#define v3dX(x) v3d42_##x
|
|
#include "v3dx_counter.h"
|
|
#undef v3dX
|
|
|
|
#define v3dX(x) v3d71_##x
|
|
#include "v3dx_counter.h"
|
|
#undef v3dX
|
|
|
|
struct v3d_perfcntrs *
|
|
v3d_perfcntrs_init(const struct v3d_device_info *devinfo, int fd)
|
|
{
|
|
struct v3d_perfcntrs *perfcounters;
|
|
|
|
if (!devinfo)
|
|
return NULL;
|
|
|
|
perfcounters = rzalloc(NULL, struct v3d_perfcntrs);
|
|
if (!perfcounters)
|
|
return NULL;
|
|
|
|
perfcounters->name_table = _mesa_hash_table_create(NULL, _mesa_hash_string, _mesa_key_string_equal);
|
|
if (!perfcounters->name_table) {
|
|
v3d_perfcntrs_fini(perfcounters);
|
|
return NULL;
|
|
}
|
|
|
|
perfcounters->fd = fd;
|
|
perfcounters->devinfo = devinfo;
|
|
|
|
perfcounters->max_perfcnt = v3d_X(perfcounters->devinfo, perfcounters_num)(perfcounters->devinfo);
|
|
assert(perfcounters->max_perfcnt);
|
|
|
|
perfcounters->perfcnt = rzalloc_array(perfcounters, struct v3d_perfcntr_desc *, perfcounters->max_perfcnt);
|
|
if (!perfcounters->perfcnt) {
|
|
fprintf(stderr, "Error allocating performance counters names");
|
|
v3d_perfcntrs_fini(perfcounters);
|
|
return NULL;
|
|
}
|
|
|
|
/* pre-fill our array and hash_table */
|
|
for (unsigned i = 0; i < perfcounters->max_perfcnt; i++) {
|
|
struct v3d_perfcntr_desc *desc = v3d_X(perfcounters->devinfo, perfcounters_get)(perfcounters, i);
|
|
|
|
_mesa_hash_table_insert(perfcounters->name_table, desc->name, desc);
|
|
}
|
|
|
|
return perfcounters;
|
|
}
|
|
|
|
void
|
|
v3d_perfcntrs_fini(struct v3d_perfcntrs *perfcounters)
|
|
{
|
|
if (!perfcounters)
|
|
return;
|
|
|
|
_mesa_hash_table_destroy(perfcounters->name_table, NULL);
|
|
ralloc_free(perfcounters);
|
|
}
|