diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c index 20258101e74..1efab608967 100644 --- a/src/mesa/main/get.c +++ b/src/mesa/main/get.c @@ -230,6 +230,7 @@ union value { GLdouble value_double_2[2]; GLmatrix *value_matrix; GLint value_int; + GLint value_int_2[2]; GLint value_int_4[4]; GLint64 value_int64; GLenum value_enum; @@ -979,6 +980,14 @@ find_custom_value(struct gl_context *ctx, const struct value_desc *d, union valu _mesa_get_device_uuid(ctx, v->value_int_4); break; + /* GL_EXT_memory_object_win32 */ + case GL_DEVICE_LUID_EXT: + _mesa_get_device_luid(ctx, v->value_int_2); + break; + case GL_DEVICE_NODE_MASK_EXT: + v->value_int = ctx->pipe->screen->get_device_node_mask(ctx->pipe->screen); + break; + /* GL_EXT_packed_float */ case GL_RGBA_SIGNED_COMPONENTS_EXT: { @@ -2872,6 +2881,17 @@ find_value_indexed(const char *func, GLenum pname, GLuint index, union value *v) goto invalid_value; _mesa_get_device_uuid(ctx, v->value_int_4); return TYPE_INT_4; + /* GL_EXT_memory_object_win32 */ + case GL_DEVICE_LUID_EXT: + if (index >= 1) + goto invalid_value; + _mesa_get_device_luid(ctx, v->value_int_2); + return TYPE_INT_2; + case GL_DEVICE_NODE_MASK_EXT: + if (index >= 1) + goto invalid_value; + v->value_int = ctx->pipe->screen->get_device_node_mask(ctx->pipe->screen); + return TYPE_INT; /* GL_EXT_direct_state_access */ case GL_TEXTURE_1D: case GL_TEXTURE_2D: diff --git a/src/mesa/main/get_hash_params.py b/src/mesa/main/get_hash_params.py index 0a629ad6ace..63adcd9b8eb 100644 --- a/src/mesa/main/get_hash_params.py +++ b/src/mesa/main/get_hash_params.py @@ -143,6 +143,10 @@ descriptor=[ [ "NUM_DEVICE_UUIDS_EXT", "LOC_CUSTOM, TYPE_INT, NO_OFFSET, NO_EXTRA" ], [ "DRIVER_UUID_EXT", "LOC_CUSTOM, TYPE_INT_4, NO_OFFSET, NO_EXTRA" ], [ "DEVICE_UUID_EXT", "LOC_CUSTOM, TYPE_INT_4, NO_OFFSET, NO_EXTRA" ], + +# GL_EXT_memory_object_win32 + [ "DEVICE_LUID_EXT", "LOC_CUSTOM, TYPE_INT_2, NO_OFFSET, NO_EXTRA" ], + [ "DEVICE_NODE_MASK_EXT", "LOC_CUSTOM, TYPE_INT_4, NO_OFFSET, NO_EXTRA" ], ]}, # Enums in OpenGL and GLES1 diff --git a/src/mesa/main/version.c b/src/mesa/main/version.c index 5d18efc4b23..74220657b4e 100644 --- a/src/mesa/main/version.c +++ b/src/mesa/main/version.c @@ -704,6 +704,15 @@ _mesa_get_device_uuid(struct gl_context *ctx, GLint *uuid) screen->get_device_uuid(screen, (char *)uuid); } +void +_mesa_get_device_luid(struct gl_context *ctx, GLint *luid) +{ + struct pipe_screen *screen = ctx->pipe->screen; + assert(GL_LUID_SIZE_EXT >= PIPE_LUID_SIZE); + memset(luid, 0, GL_UUID_SIZE_EXT); + screen->get_device_luid(screen, (char *)luid); +} + /** * Get the i-th GLSL version string. If index=0, return the most recent * supported version. diff --git a/src/mesa/main/version.h b/src/mesa/main/version.h index 4469509c08e..535c6a864f3 100644 --- a/src/mesa/main/version.h +++ b/src/mesa/main/version.h @@ -58,6 +58,9 @@ _mesa_get_driver_uuid(struct gl_context *ctx, GLint *uuid); extern void _mesa_get_device_uuid(struct gl_context *ctx, GLint *uuid); +extern void +_mesa_get_device_luid(struct gl_context *ctx, GLint *luid); + extern int _mesa_get_shading_language_version(const struct gl_context *ctx, int index,