From b2aaa91e8db006adbd2ca672756b3fdb23c5b589 Mon Sep 17 00:00:00 2001 From: Andres Rodriguez Date: Wed, 12 Jul 2017 18:45:24 -0400 Subject: [PATCH] mesa: hook up UUID queries for driver and device v2: respective changes for new gallium interface v3: fix UUID size asserts Signed-off-by: Andres Rodriguez Reviewed-by: Timothy Arceri Reviewed-by: Samuel Pitoiset --- src/mesa/main/dd.h | 15 +++++++++++++++ src/mesa/main/get.c | 17 +++++++++++++++++ src/mesa/main/version.c | 13 +++++++++++++ src/mesa/main/version.h | 6 ++++++ src/mesa/state_tracker/st_context.c | 22 ++++++++++++++++++++++ 5 files changed, 73 insertions(+) diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h index a1c9e8e793d..7b2fe8b519c 100644 --- a/src/mesa/main/dd.h +++ b/src/mesa/main/dd.h @@ -1109,6 +1109,21 @@ struct dd_function_table { GLenum usage, struct gl_buffer_object *bufObj); + /** + * Fill uuid with an unique identifier for this driver + * + * uuid must point to GL_UUID_SIZE_EXT bytes of available memory + */ + void (*GetDriverUuid)(struct gl_context *ctx, char *uuid); + + /** + * Fill uuid with an unique identifier for the device associated + * to this driver + * + * uuid must point to GL_UUID_SIZE_EXT bytes of available memory + */ + void (*GetDeviceUuid)(struct gl_context *ctx, char *uuid); + /*@}*/ /** diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c index 75d77c80b0a..93dd927bb01 100644 --- a/src/mesa/main/get.c +++ b/src/mesa/main/get.c @@ -40,6 +40,7 @@ #include "framebuffer.h" #include "samplerobj.h" #include "stencil.h" +#include "version.h" /* This is a table driven implemetation of the glGet*v() functions. * The basic idea is that most getters just look up an int somewhere @@ -839,6 +840,14 @@ find_custom_value(struct gl_context *ctx, const struct value_desc *d, union valu ctx->Texture.Unit[unit].CurrentTex[d->offset]->Name; break; + /* GL_EXT_external_objects */ + case GL_DRIVER_UUID_EXT: + _mesa_get_driver_uuid(ctx, v->value_int_4); + break; + case GL_DEVICE_UUID_EXT: + _mesa_get_device_uuid(ctx, v->value_int_4); + break; + /* GL_EXT_packed_float */ case GL_RGBA_SIGNED_COMPONENTS_EXT: { @@ -2501,6 +2510,14 @@ find_value_indexed(const char *func, GLenum pname, GLuint index, union value *v) goto invalid_value; v->value_int = ctx->Const.MaxComputeVariableGroupSize[index]; return TYPE_INT; + + /* GL_EXT_external_objects */ + case GL_DRIVER_UUID_EXT: + _mesa_get_driver_uuid(ctx, v->value_int_4); + return TYPE_INT_4; + case GL_DEVICE_UUID_EXT: + _mesa_get_device_uuid(ctx, v->value_int_4); + return TYPE_INT_4; } invalid_enum: diff --git a/src/mesa/main/version.c b/src/mesa/main/version.c index f04c43ddf57..fe82b4674d7 100644 --- a/src/mesa/main/version.c +++ b/src/mesa/main/version.c @@ -651,3 +651,16 @@ _mesa_compute_version(struct gl_context *ctx) break; } } + + +void +_mesa_get_driver_uuid(struct gl_context *ctx, GLint *uuid) +{ + ctx->Driver.GetDriverUuid(ctx, (char*) uuid); +} + +void +_mesa_get_device_uuid(struct gl_context *ctx, GLint *uuid) +{ + ctx->Driver.GetDeviceUuid(ctx, (char*) uuid); +} diff --git a/src/mesa/main/version.h b/src/mesa/main/version.h index ee7cb7501eb..4cb5e5f0fa9 100644 --- a/src/mesa/main/version.h +++ b/src/mesa/main/version.h @@ -47,4 +47,10 @@ _mesa_override_gl_version(struct gl_context *ctx); extern void _mesa_override_glsl_version(struct gl_constants *consts); +extern void +_mesa_get_driver_uuid(struct gl_context *ctx, GLint *uuid); + +extern void +_mesa_get_device_uuid(struct gl_context *ctx, GLint *uuid); + #endif /* VERSION_H */ diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c index 2420e743630..ef2e73e7415 100644 --- a/src/mesa/state_tracker/st_context.c +++ b/src/mesa/state_tracker/st_context.c @@ -665,6 +665,26 @@ st_set_background_context(struct gl_context *ctx, smapi->set_background_context(&st->iface, queue_info); } +static void +st_get_device_uuid(struct gl_context *ctx, char *uuid) +{ + struct pipe_screen *screen = st_context(ctx)->pipe->screen; + + assert(GL_UUID_SIZE_EXT >= PIPE_UUID_SIZE); + memset(uuid, 0, GL_UUID_SIZE_EXT); + screen->get_device_uuid(screen, uuid); +} + +static void +st_get_driver_uuid(struct gl_context *ctx, char *uuid) +{ + struct pipe_screen *screen = st_context(ctx)->pipe->screen; + + assert(GL_UUID_SIZE_EXT >= PIPE_UUID_SIZE); + memset(uuid, 0, GL_UUID_SIZE_EXT); + screen->get_driver_uuid(screen, uuid); +} + void st_init_driver_functions(struct pipe_screen *screen, struct dd_function_table *functions) { @@ -711,4 +731,6 @@ void st_init_driver_functions(struct pipe_screen *screen, functions->UpdateState = st_invalidate_state; functions->QueryMemoryInfo = st_query_memory_info; functions->SetBackgroundContext = st_set_background_context; + functions->GetDriverUuid = st_get_device_uuid; + functions->GetDeviceUuid = st_get_driver_uuid; } -- 2.30.2