[Mesa-dev] [PATCH 16/23] gallium: introduce device/driver UUID queries
Timothy Arceri
tarceri at itsqueeze.com
Fri Aug 4 01:54:19 UTC 2017
From: Andres Rodriguez <andresx7 at gmail.com>
v2: remove unnecessary returns
v3 (Timothy Arceri): updated trace
v4 (Timothy Arceri): actually dump the params in trace
Signed-off-by: Andres Rodriguez <andresx7 at gmail.com>
Reviewed-by: Marek Olšák <marek.olsak at amd.com> (v2)
---
src/gallium/drivers/ddebug/dd_screen.c | 18 ++++++++++++++++++
src/gallium/drivers/trace/tr_screen.c | 31 +++++++++++++++++++++++++++++++
src/gallium/include/pipe/p_defines.h | 1 +
src/gallium/include/pipe/p_screen.h | 13 +++++++++++++
4 files changed, 63 insertions(+)
diff --git a/src/gallium/drivers/ddebug/dd_screen.c b/src/gallium/drivers/ddebug/dd_screen.c
index 51382da1d7..c518f5f9e9 100644
--- a/src/gallium/drivers/ddebug/dd_screen.c
+++ b/src/gallium/drivers/ddebug/dd_screen.c
@@ -190,20 +190,36 @@ static int
dd_screen_get_driver_query_group_info(struct pipe_screen *_screen,
unsigned index,
struct pipe_driver_query_group_info *info)
{
struct pipe_screen *screen = dd_screen(_screen)->screen;
return screen->get_driver_query_group_info(screen, index, info);
}
+static void
+dd_screen_get_driver_uuid(struct pipe_screen *_screen, char *uuid)
+{
+ struct pipe_screen *screen = dd_screen(_screen)->screen;
+
+ screen->get_driver_uuid(screen, uuid);
+}
+
+static void
+dd_screen_get_device_uuid(struct pipe_screen *_screen, char *uuid)
+{
+ struct pipe_screen *screen = dd_screen(_screen)->screen;
+
+ screen->get_device_uuid(screen, uuid);
+}
+
/********************************************************************
* resource
*/
static struct pipe_resource *
dd_screen_resource_create(struct pipe_screen *_screen,
const struct pipe_resource *templat)
{
struct pipe_screen *screen = dd_screen(_screen)->screen;
struct pipe_resource *res = screen->resource_create(screen, templat);
@@ -455,20 +471,22 @@ ddebug_screen_create(struct pipe_screen *screen)
SCR_INIT(resource_changed);
dscreen->base.resource_destroy = dd_screen_resource_destroy;
SCR_INIT(flush_frontbuffer);
SCR_INIT(fence_reference);
SCR_INIT(fence_finish);
SCR_INIT(memobj_create_from_handle);
SCR_INIT(memobj_destroy);
SCR_INIT(get_driver_query_info);
SCR_INIT(get_driver_query_group_info);
SCR_INIT(get_compiler_options);
+ SCR_INIT(get_driver_uuid);
+ SCR_INIT(get_device_uuid);
#undef SCR_INIT
dscreen->screen = screen;
dscreen->timeout_ms = timeout;
dscreen->mode = mode;
dscreen->no_flush = no_flush;
dscreen->verbose = strstr(option, "verbose") != NULL;
dscreen->apitrace_dump_call = apitrace_dump_call;
diff --git a/src/gallium/drivers/trace/tr_screen.c b/src/gallium/drivers/trace/tr_screen.c
index 7c4c05b4c3..8802f3a737 100644
--- a/src/gallium/drivers/trace/tr_screen.c
+++ b/src/gallium/drivers/trace/tr_screen.c
@@ -295,20 +295,49 @@ trace_screen_flush_frontbuffer(struct pipe_screen *_screen,
/* XXX: hide, as there is nothing we can do with this
trace_dump_arg(ptr, context_private);
*/
screen->flush_frontbuffer(screen, resource, level, layer, context_private, sub_box);
trace_dump_call_end();
}
+static void
+trace_screen_get_driver_uuid(struct pipe_screen *_screen, char *uuid)
+{
+ struct pipe_screen *screen = trace_screen(_screen)->screen;
+
+ trace_dump_call_begin("pipe_screen", "get_driver_uuid");
+ trace_dump_arg(ptr, screen);
+
+ screen->get_driver_uuid(screen, uuid);
+
+ trace_dump_ret(string, uuid);
+ trace_dump_call_end();
+}
+
+static void
+trace_screen_get_device_uuid(struct pipe_screen *_screen, char *uuid)
+{
+ struct pipe_screen *screen = trace_screen(_screen)->screen;
+
+ trace_dump_call_begin("pipe_screen", "get_device_uuid");
+ trace_dump_arg(ptr, screen);
+
+ screen->get_device_uuid(screen, uuid);
+
+ trace_dump_ret(string, uuid);
+ trace_dump_call_end();
+}
+
+
/********************************************************************
* texture
*/
static struct pipe_resource *
trace_screen_resource_create(struct pipe_screen *_screen,
const struct pipe_resource *templat)
{
struct trace_screen *tr_scr = trace_screen(_screen);
@@ -613,20 +642,22 @@ trace_screen_create(struct pipe_screen *screen)
tr_scr->base.resource_get_handle = trace_screen_resource_get_handle;
SCR_INIT(resource_from_memobj);
SCR_INIT(resource_changed);
tr_scr->base.resource_destroy = trace_screen_resource_destroy;
tr_scr->base.fence_reference = trace_screen_fence_reference;
tr_scr->base.fence_finish = trace_screen_fence_finish;
SCR_INIT(memobj_create_from_handle);
SCR_INIT(memobj_destroy);
tr_scr->base.flush_frontbuffer = trace_screen_flush_frontbuffer;
tr_scr->base.get_timestamp = trace_screen_get_timestamp;
+ SCR_INIT(get_driver_uuid);
+ SCR_INIT(get_device_uuid);
tr_scr->screen = screen;
trace_dump_ret(ptr, screen);
trace_dump_call_end();
return &tr_scr->base;
error2:
trace_dump_ret(ptr, screen);
diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h
index 2b315e99c2..738892d4b6 100644
--- a/src/gallium/include/pipe/p_defines.h
+++ b/src/gallium/include/pipe/p_defines.h
@@ -1063,16 +1063,17 @@ enum pipe_debug_type
{
PIPE_DEBUG_TYPE_OUT_OF_MEMORY = 1,
PIPE_DEBUG_TYPE_ERROR,
PIPE_DEBUG_TYPE_SHADER_INFO,
PIPE_DEBUG_TYPE_PERF_INFO,
PIPE_DEBUG_TYPE_INFO,
PIPE_DEBUG_TYPE_FALLBACK,
PIPE_DEBUG_TYPE_CONFORMANCE,
};
+#define PIPE_UUID_SIZE 16
#ifdef __cplusplus
}
#endif
#endif
diff --git a/src/gallium/include/pipe/p_screen.h b/src/gallium/include/pipe/p_screen.h
index 65aa163f5f..021f9df5c0 100644
--- a/src/gallium/include/pipe/p_screen.h
+++ b/src/gallium/include/pipe/p_screen.h
@@ -387,20 +387,33 @@ struct pipe_screen {
* Create a texture from a memory object
*
* \param t texture template
* \param memobj The memory object used to back the texture
*/
struct pipe_resource * (*resource_from_memobj)(struct pipe_screen *screen,
const struct pipe_resource *t,
struct pipe_memory_object *memobj,
uint64_t offset);
+ /**
+ * Fill @uuid with a unique driver identifier
+ *
+ * \param uuid pointer to a memory region of PIPE_UUID_SIZE bytes
+ */
+ void (*get_driver_uuid)(struct pipe_screen *screen, char *uuid);
+
+ /**
+ * Fill @uuid with a unique device identifier
+ *
+ * \param uuid pointer to a memory region of PIPE_UUID_SIZE bytes
+ */
+ void (*get_device_uuid)(struct pipe_screen *screen, char *uuid);
};
/**
* Global configuration options for screen creation.
*/
struct pipe_screen_config {
unsigned flags;
const struct driOptionCache *options;
};
--
2.13.3
More information about the mesa-dev
mailing list