[Mesa-dev] [PATCH 15/19] mesa: hook up UUID queries for driver and device
Andres Rodriguez
andresx7 at gmail.com
Sat Jul 1 16:41:40 UTC 2017
On 2017-07-01 11:29 AM, Jason Ekstrand wrote:
> On June 30, 2017 5:58:24 PM Andres Rodriguez <andresx7 at gmail.com> wrote:
>
>>
>>
>> On 2017-06-30 07:21 PM, Jason Ekstrand wrote:
>>> On June 30, 2017 4:04:31 PM Andres Rodriguez <andresx7 at gmail.com> wrote:
>>>
>>>> Signed-off-by: Andres Rodriguez <andresx7 at gmail.com>
>>>> ---
>>>> src/mesa/main/dd.h | 6 ++++++
>>>> src/mesa/main/get.c | 17 +++++++++++++++++
>>>> src/mesa/main/version.c | 16 ++++++++++++++++
>>>> src/mesa/main/version.h | 6 ++++++
>>>> src/mesa/state_tracker/st_context.c | 10 ++++++++++
>>>> 5 files changed, 55 insertions(+)
>>>>
>>>> diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
>>>> index 27c6efc..65bc97e 100644
>>>> --- a/src/mesa/main/dd.h
>>>> +++ b/src/mesa/main/dd.h
>>>> @@ -1108,6 +1108,12 @@ struct dd_function_table {
>>>> GLenum usage,
>>>> struct gl_buffer_object *bufObj);
>>>>
>>>> + /**
>>>> + * Fill uuid with an unique identifier for this driver
>>>> + *
>>>> + * uuid must point to UUID_SIZE_EXT bytes of available memory
>>>> + */
>>>> + void (*GetUuid)(struct gl_context *ctx, char *uuid);
>>>> /*@}*/
>>>>
>>>> /**
>>>> diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
>>>> index 9f26ad1..bcbec1a 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
>>>> @@ -832,6 +833,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:
>>>> {
>>>> @@ -2491,6 +2500,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 34f8bbb..402fc01 100644
>>>> --- a/src/mesa/main/version.c
>>>> +++ b/src/mesa/main/version.c
>>>> @@ -635,3 +635,19 @@ _mesa_compute_version(struct gl_context *ctx)
>>>> break;
>>>> }
>>>> }
>>>> +
>>>> +
>>>> +void
>>>> +_mesa_get_driver_uuid(struct gl_context *ctx, GLint *uuid)
>>>> +{
>>>> + uuid[0] = 'M';
>>>> + uuid[1] = 'E';
>>>> + uuid[2] = 'S';
>>>> + uuid[4] = 'A';
>>>
>>> This isn't right. The driver uuid is supposed to encompass not only the
>>> driver but also a version. This is used to ensure that all of the magic
>>> between GL and Vulkan will "just work". That magic includes whatever
>>> heuristics are used to choose image layout. Since these may change from
>>> version to version, this should be some sort of version number and
>>> probably needs to be provided by the actual driver.
>>>
>>
>> This is something I've been on the fence about for a while, mostly
>> because the vulkan and gl driver for mesa come out of the same source
>> base. It is very unlikely that an end user will have an incompatible
>> version of mesa-gl and mesa-vulkan since they will probably be built
>> from the same commit.
>>
>> The possible users that could end up mixing and matching different
>> versions of vulkan and gl are developers or testers. And, while I don't
>> personally agree with having a mix-and-match of shared libraries, some
>> people sometimes do it. And that is something that has always been "at
>> your own risk". I didn't want to kill this use case with a version check.
>
> Killing that use-case is exactly why that query exists in the first
> place. Texture layout is a very complex operation with, at least for
> Intel, several arbitrary choices. If any of that code changes, things
> are liable to break in strange, unpredictable, and hard to debug ways.
> The individual developers may not know if a particular addrlib or ISL
> change will affect things so it's better off to assume that they all do.
>
> Also, I don't think users trying to run mixed setups is as unlikely as
> you make it sound. There are all sorts of people out there that will
> build a custom mesa if needed to play their game. If they try to use
> that with their system mesa, they're in for trouble.
>
>> Having said that, your suggestion is 100% according to spec. I'm just
>> abusing the fact that mesa-gl and mesa-vk are release tagged together.
>> It lets us be less restrictive for funky dev/test setups (and it lets me
>> be a little lazy).
>>
>> If we still want the version in there, that can be accommodated. If so,
>> would the mesa version number be sufficient, or do we want something
>> more specific?
>
> I think we probably want some sort of git she or build id. This
> actually gets rather tricky because you can have breaking changes in
> your tree that aren't committed in git. In the world of shader caching,
> we've solved this by using the sha1 build-id of the .so. Unfortunately,
> this doesn't work for driver uuid because the Vulkan and GL drivers are
> in different .sos with different build-ids. Ideally, for us, I'd like
> it to be some sort of sha1 hash of the ISL sources used to build the
> driver. Ultimately, though, I think this is a back-end driver
> choice.and not something we want to enforce across all of mesa.
>
Cool. I'll plumb this down to gallium then. Thanks for the time to write
this out.
Regards,
Andres
P.S. Happy Canada Day to everyone :)
> --Jason
>
>> Regards,
>> Andres
>>
>>>> +}
>>>> +
>>>> +void
>>>> +_mesa_get_device_uuid(struct gl_context *ctx, GLint *uuid)
>>>> +{
>>>> + ctx->Driver.GetUuid(ctx, (char*) uuid);
>>>> +}
>>>> diff --git a/src/mesa/main/version.h b/src/mesa/main/version.h
>>>> index ee7cb75..4cb5e5f 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 a846be3..110805e 100644
>>>> --- a/src/mesa/state_tracker/st_context.c
>>>> +++ b/src/mesa/state_tracker/st_context.c
>>>> @@ -641,6 +641,15 @@ st_set_background_context(struct gl_context *ctx,
>>>> smapi->set_background_context(&st->iface, queue_info);
>>>> }
>>>>
>>>> +static void
>>>> +st_get_uuid(struct gl_context *ctx, char *uuid)
>>>> +{
>>>> + struct pipe_screen *screen = st_context(ctx)->pipe->screen;
>>>> +
>>>> + assert(GL_UUID_SIZE_EXT <= PIPE_UUID_SIZE);
>>>> + memcpy(uuid, screen->uuid, GL_UUID_SIZE_EXT);
>>>> +}
>>>> +
>>>> void st_init_driver_functions(struct pipe_screen *screen,
>>>> struct dd_function_table *functions)
>>>> {
>>>> @@ -687,4 +696,5 @@ 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->GetUuid = st_get_uuid;
>>>> }
>>>> --
>>>> 2.9.3
>>>>
>>>> _______________________________________________
>>>> mesa-dev mailing list
>>>> mesa-dev at lists.freedesktop.org
>>>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>>>
>>>
>
>
More information about the mesa-dev
mailing list