[Mesa-dev] [PATCH 01/24] mapi: add EXT_external_objects and EXT_external_objects_fd

Timothy Arceri tarceri at itsqueeze.com
Thu Jul 27 13:08:26 UTC 2017


From: Andres Rodriguez <andresx7 at gmail.com>

Includes implementation stubs.

Signed-off-by: Andres Rodriguez <andresx7 at gmail.com>
Acked-by: Timothy Arceri <tarceri at itsqueeze.com>
Acked-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
---
 src/mapi/glapi/gen/EXT_external_objects.xml    | 234 ++++++++++++++++++++++
 src/mapi/glapi/gen/EXT_external_objects_fd.xml |  28 +++
 src/mapi/glapi/gen/Makefile.am                 |   2 +
 src/mapi/glapi/gen/gl_API.xml                  |   3 +
 src/mapi/glapi/gen/gl_genexec.py               |   1 +
 src/mesa/Makefile.sources                      |   2 +
 src/mesa/main/bufferobj.c                      |  32 +++
 src/mesa/main/bufferobj.h                      |  13 +-
 src/mesa/main/externalobjects.c                | 257 +++++++++++++++++++++++++
 src/mesa/main/externalobjects.h                | 200 +++++++++++++++++++
 src/mesa/main/get.c                            |  12 ++
 src/mesa/main/get.h                            |   6 +
 src/mesa/main/tests/dispatch_sanity.cpp        |  32 +++
 13 files changed, 821 insertions(+), 1 deletion(-)
 create mode 100644 src/mapi/glapi/gen/EXT_external_objects.xml
 create mode 100644 src/mapi/glapi/gen/EXT_external_objects_fd.xml
 create mode 100644 src/mesa/main/externalobjects.c
 create mode 100644 src/mesa/main/externalobjects.h

diff --git a/src/mapi/glapi/gen/EXT_external_objects.xml b/src/mapi/glapi/gen/EXT_external_objects.xml
new file mode 100644
index 0000000000..25e6879ec7
--- /dev/null
+++ b/src/mapi/glapi/gen/EXT_external_objects.xml
@@ -0,0 +1,234 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<!-- Note: no GLX protocol info yet. -->
+
+
+<OpenGLAPI>
+
+<category name="EXT_external_objects" number="503">
+
+    <enum name="TEXTURE_TILING_EXT"                     value="0x9580"/>
+    <enum name="DEDICATED_MEMORY_OBJECT_EXT"            value="0x9581"/>
+    <enum name="PROTECTED_MEMORY_OBJECT_EXT"            value="0x959B"/>
+    <enum name="NUM_TILING_TYPES_EXT"                   value="0x9582"/>
+    <enum name="TILING_TYPES_EXT"                       value="0x9583"/>
+    <enum name="OPTIMAL_TILING_EXT"                     value="0x9584"/>
+    <enum name="LINEAR_TILING_EXT"                      value="0x9585"/>
+    <enum name="NUM_DEVICE_UUIDS_EXT"                   value="0x9596"/>
+    <enum name="DEVICE_UUID_EXT"                        value="0x9597"/>
+    <enum name="DRIVER_UUID_EXT"                        value="0x9598"/>
+    <enum name="LAYOUT_GENERAL_EXT"                     value="0x958D"/>
+    <enum name="LAYOUT_COLOR_ATTACHMENT_EXT"            value="0x958E"/>
+    <enum name="LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT"    value="0x958F"/>
+    <enum name="LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT"     value="0x9590"/>
+    <enum name="LAYOUT_SHADER_READ_ONLY_EXT"            value="0x9591"/>
+    <enum name="LAYOUT_TRANSFER_SRC_EXT"                value="0x9592"/>
+    <enum name="LAYOUT_TRANSFER_DST_EXT"                value="0x9593"/>
+
+    <function name="GetUnsignedBytevEXT" es2="3.2">
+        <param name="pname" type="GLenum"/>
+        <param name="data" type="GLubyte *"/>
+    </function>
+
+    <function name="GetUnsignedBytei_vEXT" es2="3.2">
+        <param name="target" type="GLenum"/>
+        <param name="index" type="GLuint"/>
+        <param name="data" type="GLubyte *"/>
+    </function>
+
+    <function name="DeleteMemoryObjectsEXT" es2="3.2">
+        <param name="n" type="GLsizei"/>
+        <param name="memoryObjects" type="const GLuint *"/>
+    </function>
+
+    <function name="IsMemoryObjectEXT" es2="3.2">
+        <param name="memoryObject" type="GLuint"/>
+        <return type="GLboolean"/>
+    </function>
+
+    <function name="CreateMemoryObjectsEXT" es2="3.2">
+        <param name="n" type="GLsizei"/>
+        <param name="memoryObjects" type="GLuint *"/>
+    </function>
+
+    <function name="MemoryObjectParameterivEXT" es2="3.2">
+        <param name="memoryObject" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLint *"/>
+    </function>
+
+    <function name="GetMemoryObjectParameterivEXT" es2="3.2">
+        <param name="memoryObject" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *"/>
+    </function>
+
+    <function name="TexStorageMem2DEXT" es2="3.2">
+        <param name="target" type="GLenum"/>
+        <param name="levels" type="GLsizei"/>
+        <param name="internalFormat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="memory" type="GLuint"/>
+        <param name="offset" type="GLuint64"/>
+    </function>
+
+    <function name="TexStorageMem2DMultisampleEXT" es2="3.2">
+        <param name="target" type="GLenum"/>
+        <param name="samples" type="GLsizei"/>
+        <param name="internalFormat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="fixedSampleLocations" type="GLboolean"/>
+        <param name="memory" type="GLuint"/>
+        <param name="offset" type="GLuint64"/>
+    </function>
+
+    <function name="TexStorageMem3DEXT" es2="3.2">
+        <param name="target" type="GLenum"/>
+        <param name="levels" type="GLsizei"/>
+        <param name="internalFormat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="depth" type="GLsizei"/>
+        <param name="memory" type="GLuint"/>
+        <param name="offset" type="GLuint64"/>
+    </function>
+
+    <function name="TexStorageMem3DMultisampleEXT" es2="3.2">
+        <param name="target" type="GLenum"/>
+        <param name="samples" type="GLsizei"/>
+        <param name="internalFormat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="depth" type="GLsizei"/>
+        <param name="fixedSampleLocations" type="GLboolean"/>
+        <param name="memory" type="GLuint"/>
+        <param name="offset" type="GLuint64"/>
+    </function>
+
+    <function name="BufferStorageMemEXT" es2="3.2" no_error="true">
+        <param name="target" type="GLenum"/>
+        <param name="size" type="GLsizeiptr"/>
+        <param name="memory" type="GLuint"/>
+        <param name="offset" type="GLuint64"/>
+     </function>
+
+    <function name="TextureStorageMem2DEXT" es2="3.2">
+        <param name="texture" type="GLenum"/>
+        <param name="levels" type="GLsizei"/>
+        <param name="internalFormat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="memory" type="GLuint"/>
+        <param name="offset" type="GLuint64"/>
+    </function>
+
+    <function name="TextureStorageMem2DMultisampleEXT" es2="3.2">
+        <param name="texture" type="GLuint"/>
+        <param name="samples" type="GLsizei"/>
+        <param name="internalFormat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="fixedSampleLocations" type="GLboolean"/>
+        <param name="memory" type="GLuint"/>
+        <param name="offset" type="GLuint64"/>
+    </function>
+
+    <function name="TextureStorageMem3DEXT" es2="3.2">
+        <param name="texture" type="GLuint"/>
+        <param name="levels" type="GLsizei"/>
+        <param name="internalFormat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="depth" type="GLsizei"/>
+        <param name="memory" type="GLuint"/>
+        <param name="offset" type="GLuint64"/>
+    </function>
+
+    <function name="TextureStorageMem3DMultisampleEXT" es2="3.2">
+        <param name="texture" type="GLuint"/>
+        <param name="samples" type="GLsizei"/>
+        <param name="internalFormat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="height" type="GLsizei"/>
+        <param name="depth" type="GLsizei"/>
+        <param name="fixedSampleLocations" type="GLboolean"/>
+        <param name="memory" type="GLuint"/>
+        <param name="offset" type="GLuint64"/>
+    </function>
+
+    <function name="NamedBufferStorageMemEXT" es2="3.2" no_error="true">
+        <param name="buffer" type="GLuint"/>
+        <param name="size" type="GLsizeiptr"/>
+        <param name="memory" type="GLuint"/>
+        <param name="offset" type="GLuint64"/>
+    </function>
+
+    <function name="TexStorageMem1DEXT">
+        <param name="target" type="GLenum"/>
+        <param name="levels" type="GLsizei"/>
+        <param name="internalFormat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="memory" type="GLuint"/>
+        <param name="offset" type="GLuint64"/>
+    </function>
+
+    <function name="TextureStorageMem1DEXT">
+        <param name="texture" type="GLuint"/>
+        <param name="levels" type="GLsizei"/>
+        <param name="internalFormat" type="GLenum"/>
+        <param name="width" type="GLsizei"/>
+        <param name="memory" type="GLuint"/>
+        <param name="offset" type="GLuint64"/>
+    </function>
+
+    <function name="GenSemaphoresEXT" es2="3.2">
+        <param name="n" type="GLsizei"/>
+        <param name="semaphores" type="GLuint *"/>
+    </function>
+
+    <function name="DeleteSemaphoresEXT" es2="3.2">
+        <param name="n" type="GLsizei"/>
+        <param name="semaphores" type="const GLuint *"/>
+    </function>
+
+    <function name="IsSemaphoreEXT" es2="3.2">
+        <param name="semaphore" type="GLuint"/>
+        <return type="GLboolean"/>
+    </function>
+
+    <function name="SemaphoreParameterui64vEXT" es2="3.2">
+        <param name="semaphore" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="const GLuint64 *"/>
+    </function>
+
+    <function name="GetSemaphoreParameterui64vEXT" es2="3.2">
+        <param name="semaphore" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLuint64 *"/>
+    </function>
+
+    <function name="WaitSemaphoreEXT" es2="3.2">
+        <param name="semaphore" type="GLuint"/>
+        <param name="numBufferBarriers" type="GLuint"/>
+        <param name="buffers" type="const GLuint *"/>
+        <param name="numTextureBarriers" type="GLuint"/>
+        <param name="textures" type="const GLuint *"/>
+        <param name="srcLayouts" type="const GLenum *"/>
+    </function>
+
+    <function name="SignalSemaphoreEXT" es2="3.2">
+        <param name="semaphore" type="GLuint"/>
+        <param name="numBufferBarriers" type="GLuint"/>
+        <param name="buffers" type="const GLuint *"/>
+        <param name="numTextureBarriers" type="GLuint"/>
+        <param name="textures" type="const GLuint *"/>
+        <param name="dstLayouts" type="const GLenum *"/>
+    </function>
+
+</category>
+
+</OpenGLAPI>
diff --git a/src/mapi/glapi/gen/EXT_external_objects_fd.xml b/src/mapi/glapi/gen/EXT_external_objects_fd.xml
new file mode 100644
index 0000000000..6eaa3f5b0c
--- /dev/null
+++ b/src/mapi/glapi/gen/EXT_external_objects_fd.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<!-- Note: no GLX protocol info yet. -->
+
+
+<OpenGLAPI>
+
+<category name="EXT_external_objects_fd" number="504">
+
+    <enum name="HANDLE_TYPE_OPAQUE_FD_EXT"              value="0x9586"/>
+
+    <function name="ImportMemoryFdEXT" es2="3.2">
+        <param name="memory" type="GLuint"/>
+        <param name="size" type="GLuint64"/>
+        <param name="handleType" type="GLenum"/>
+        <param name="fd" type="GLint"/>
+    </function>
+
+    <function name="ImportSemaphoreFdEXT" es2="3.2">
+        <param name="semaphore" type="GLuint"/>
+        <param name="handleType" type="GLenum"/>
+        <param name="fd" type="GLint"/>
+    </function>
+
+</category>
+
+</OpenGLAPI>
diff --git a/src/mapi/glapi/gen/Makefile.am b/src/mapi/glapi/gen/Makefile.am
index bd04519f80..7f4a469303 100644
--- a/src/mapi/glapi/gen/Makefile.am
+++ b/src/mapi/glapi/gen/Makefile.am
@@ -185,20 +185,22 @@ API_XML = \
 	ARB_vertex_array_object.xml \
 	ARB_vertex_attrib_64bit.xml \
 	ARB_vertex_attrib_binding.xml \
 	ARB_viewport_array.xml \
 	AMD_draw_buffers_blend.xml \
 	AMD_performance_monitor.xml \
 	ARB_vertex_type_2_10_10_10_rev.xml \
 	APPLE_object_purgeable.xml \
 	APPLE_vertex_array_object.xml \
 	EXT_draw_buffers2.xml \
+	EXT_external_objects.xml \
+	EXT_external_objects_fd.xml \
 	EXT_framebuffer_object.xml \
 	EXT_gpu_shader4.xml \
 	EXT_packed_depth_stencil.xml \
 	EXT_provoking_vertex.xml \
 	EXT_separate_shader_objects.xml \
 	EXT_texture_array.xml \
 	EXT_texture_integer.xml \
 	EXT_transform_feedback.xml \
 	EXT_window_rectangles.xml \
 	GREMEDY_string_marker.xml \
diff --git a/src/mapi/glapi/gen/gl_API.xml b/src/mapi/glapi/gen/gl_API.xml
index 18839ec70c..608451820f 100644
--- a/src/mapi/glapi/gen/gl_API.xml
+++ b/src/mapi/glapi/gen/gl_API.xml
@@ -13053,13 +13053,16 @@
 <xi:include href="NV_conditional_render.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
 <xi:include href="NV_primitive_restart.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
 <xi:include href="NV_texture_barrier.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
 <xi:include href="EXT_transform_feedback.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
 <xi:include href="NV_vdpau_interop.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
+<xi:include href="EXT_external_objects.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+<xi:include href="EXT_external_objects_fd.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
 <xi:include href="GL4x.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
 </OpenGLAPI>
diff --git a/src/mapi/glapi/gen/gl_genexec.py b/src/mapi/glapi/gen/gl_genexec.py
index 57e155bd1f..b7b22328ff 100644
--- a/src/mapi/glapi/gen/gl_genexec.py
+++ b/src/mapi/glapi/gen/gl_genexec.py
@@ -68,20 +68,21 @@ header = """/**
 #include "main/depth.h"
 #include "main/debug_output.h"
 #include "main/dlist.h"
 #include "main/drawpix.h"
 #include "main/drawtex.h"
 #include "main/rastpos.h"
 #include "main/enable.h"
 #include "main/errors.h"
 #include "main/es1_conversion.h"
 #include "main/eval.h"
+#include "main/externalobjects.h"
 #include "main/get.h"
 #include "main/feedback.h"
 #include "main/fog.h"
 #include "main/fbobject.h"
 #include "main/framebuffer.h"
 #include "main/genmipmap.h"
 #include "main/hint.h"
 #include "main/histogram.h"
 #include "main/imports.h"
 #include "main/light.h"
diff --git a/src/mesa/Makefile.sources b/src/mesa/Makefile.sources
index 86fbf3974e..2ee1d2f814 100644
--- a/src/mesa/Makefile.sources
+++ b/src/mesa/Makefile.sources
@@ -78,20 +78,22 @@ MAIN_FILES = \
 	main/enums.h \
 	main/errors.c \
 	main/errors.h \
 	main/eval.c \
 	main/eval.h \
 	main/execmem.c \
 	main/extensions.c \
 	main/extensions.h \
 	main/extensions_table.c \
 	main/extensions_table.h \
+	main/externalobjects.c \
+	main/externalobjects.h \
 	main/fbobject.c \
 	main/fbobject.h \
 	main/feedback.c \
 	main/feedback.h \
 	main/ff_fragment_shader.cpp \
 	main/ffvertex_prog.c \
 	main/ffvertex_prog.h \
 	main/fog.c \
 	main/fog.h \
 	main/format_fallback.c \
diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c
index cd561a0a27..2660e1389c 100644
--- a/src/mesa/main/bufferobj.c
+++ b/src/mesa/main/bufferobj.c
@@ -1878,20 +1878,36 @@ _mesa_BufferStorage_no_error(GLenum target, GLsizeiptr size,
 void GLAPIENTRY
 _mesa_BufferStorage(GLenum target, GLsizeiptr size, const GLvoid *data,
                     GLbitfield flags)
 {
    inlined_buffer_storage(target, 0, size, data, flags, false, false,
                           "glBufferStorage");
 }
 
 
 void GLAPIENTRY
+_mesa_BufferStorageMemEXT(GLenum target, GLsizeiptr size,
+                          GLuint memory, GLuint64 offset)
+{
+
+}
+
+
+void GLAPIENTRY
+_mesa_BufferStorageMemEXT_no_error(GLenum target, GLsizeiptr size,
+                                   GLuint memory, GLuint64 offset)
+{
+
+}
+
+
+void GLAPIENTRY
 _mesa_NamedBufferStorage_no_error(GLuint buffer, GLsizeiptr size,
                                   const GLvoid *data, GLbitfield flags)
 {
    /* In direct state access, buffer objects have an unspecified target
     * since they are not required to be bound.
     */
    inlined_buffer_storage(GL_NONE, buffer, size, data, flags, true, true,
                           "glNamedBufferStorage");
 }
 
@@ -1901,20 +1917,36 @@ _mesa_NamedBufferStorage(GLuint buffer, GLsizeiptr size, const GLvoid *data,
                          GLbitfield flags)
 {
    /* In direct state access, buffer objects have an unspecified target
     * since they are not required to be bound.
     */
    inlined_buffer_storage(GL_NONE, buffer, size, data, flags, true, false,
                           "glNamedBufferStorage");
 }
 
 
+void GLAPIENTRY
+_mesa_NamedBufferStorageMemEXT(GLuint buffer, GLsizeiptr size,
+                               GLuint memory, GLuint64 offset)
+{
+
+}
+
+
+void GLAPIENTRY
+_mesa_NamedBufferStorageMemEXT_no_error(GLuint buffer, GLsizeiptr size,
+                                        GLuint memory, GLuint64 offset)
+{
+
+}
+
+
 void
 _mesa_buffer_data(struct gl_context *ctx, struct gl_buffer_object *bufObj,
                   GLenum target, GLsizeiptr size, const GLvoid *data,
                   GLenum usage, const char *func)
 {
    bool valid_usage;
 
    if (MESA_VERBOSE & VERBOSE_API) {
       _mesa_debug(ctx, "%s(%s, %ld, %p, %s)\n",
                   func,
diff --git a/src/mesa/main/bufferobj.h b/src/mesa/main/bufferobj.h
index 662ceba8a6..085305c810 100644
--- a/src/mesa/main/bufferobj.h
+++ b/src/mesa/main/bufferobj.h
@@ -178,27 +178,38 @@ _mesa_CreateBuffers(GLsizei n, GLuint *buffers);
 
 GLboolean GLAPIENTRY
 _mesa_IsBuffer(GLuint buffer);
 
 void GLAPIENTRY
 _mesa_BufferStorage_no_error(GLenum target, GLsizeiptr size,
                              const GLvoid *data, GLbitfield flags);
 void GLAPIENTRY
 _mesa_BufferStorage(GLenum target, GLsizeiptr size, const GLvoid *data,
                     GLbitfield flags);
-
+void GLAPIENTRY
+_mesa_BufferStorageMemEXT(GLenum target, GLsizeiptr size,
+                          GLuint memory, GLuint64 offset);
+void GLAPIENTRY
+_mesa_BufferStorageMemEXT_no_error(GLenum target, GLsizeiptr size,
+                                   GLuint memory, GLuint64 offset);
 void GLAPIENTRY
 _mesa_NamedBufferStorage_no_error(GLuint buffer, GLsizeiptr size,
                                   const GLvoid *data, GLbitfield flags);
 void GLAPIENTRY
 _mesa_NamedBufferStorage(GLuint buffer, GLsizeiptr size, const GLvoid *data,
                          GLbitfield flags);
+void GLAPIENTRY
+_mesa_NamedBufferStorageMemEXT(GLuint buffer, GLsizeiptr size,
+                               GLuint memory, GLuint64 offset);
+void GLAPIENTRY
+_mesa_NamedBufferStorageMemEXT_no_error(GLuint buffer, GLsizeiptr size,
+                                        GLuint memory, GLuint64 offset);
 
 void GLAPIENTRY
 _mesa_BufferData(GLenum target, GLsizeiptr size,
                  const GLvoid *data, GLenum usage);
 
 void GLAPIENTRY
 _mesa_NamedBufferData(GLuint buffer, GLsizeiptr size,
                       const GLvoid *data, GLenum usage);
 
 void GLAPIENTRY
diff --git a/src/mesa/main/externalobjects.c b/src/mesa/main/externalobjects.c
new file mode 100644
index 0000000000..86404d2a8d
--- /dev/null
+++ b/src/mesa/main/externalobjects.c
@@ -0,0 +1,257 @@
+/*
+ * Copyright © 2016 Red Hat.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#include "externalobjects.h"
+
+void GLAPIENTRY
+_mesa_DeleteMemoryObjectsEXT(GLsizei n, const GLuint *memoryObjects)
+{
+
+}
+
+GLboolean GLAPIENTRY
+_mesa_IsMemoryObjectEXT(GLuint memoryObject)
+{
+   return GL_FALSE;
+}
+
+void GLAPIENTRY
+_mesa_CreateMemoryObjectsEXT(GLsizei n, GLuint *memoryObjects)
+{
+
+}
+
+void GLAPIENTRY
+_mesa_MemoryObjectParameterivEXT(GLuint memoryObject,
+                                 GLenum pname,
+                                 const GLint *params)
+{
+
+}
+
+void GLAPIENTRY
+_mesa_GetMemoryObjectParameterivEXT(GLuint memoryObject,
+                                    GLenum pname,
+                                    GLint *params)
+{
+
+}
+
+void GLAPIENTRY
+_mesa_TexStorageMem2DEXT(GLenum target,
+                         GLsizei levels,
+                         GLenum internalFormat,
+                         GLsizei width,
+                         GLsizei height,
+                         GLuint memory,
+                         GLuint64 offset)
+{
+
+}
+
+void GLAPIENTRY
+_mesa_TexStorageMem2DMultisampleEXT(GLenum target,
+                                    GLsizei samples,
+                                    GLenum internalFormat,
+                                    GLsizei width,
+                                    GLsizei height,
+                                    GLboolean fixedSampleLocations,
+                                    GLuint memory,
+                                    GLuint64 offset)
+{
+
+}
+
+void GLAPIENTRY
+_mesa_TexStorageMem3DEXT(GLenum target,
+                         GLsizei levels,
+                         GLenum internalFormat,
+                         GLsizei width,
+                         GLsizei height,
+                         GLsizei depth,
+                         GLuint memory,
+                         GLuint64 offset)
+{
+
+}
+
+void GLAPIENTRY
+_mesa_TexStorageMem3DMultisampleEXT(GLenum target,
+                                    GLsizei samples,
+                                    GLenum internalFormat,
+                                    GLsizei width,
+                                    GLsizei height,
+                                    GLsizei depth,
+                                    GLboolean fixedSampleLocations,
+                                    GLuint memory,
+                                    GLuint64 offset)
+{
+
+}
+
+void GLAPIENTRY
+_mesa_TextureStorageMem2DEXT(GLuint texture,
+                             GLsizei levels,
+                             GLenum internalFormat,
+                             GLsizei width,
+                             GLsizei height,
+                             GLuint memory,
+                             GLuint64 offset)
+{
+
+}
+
+void GLAPIENTRY
+_mesa_TextureStorageMem2DMultisampleEXT(GLuint texture,
+                                        GLsizei samples,
+                                        GLenum internalFormat,
+                                        GLsizei width,
+                                        GLsizei height,
+                                        GLboolean fixedSampleLocations,
+                                        GLuint memory,
+                                        GLuint64 offset)
+{
+
+}
+
+void GLAPIENTRY
+_mesa_TextureStorageMem3DEXT(GLuint texture,
+                             GLsizei levels,
+                             GLenum internalFormat,
+                             GLsizei width,
+                             GLsizei height,
+                             GLsizei depth,
+                             GLuint memory,
+                             GLuint64 offset)
+{
+
+}
+
+void GLAPIENTRY
+_mesa_TextureStorageMem3DMultisampleEXT(GLuint texture,
+                                        GLsizei samples,
+                                        GLenum internalFormat,
+                                        GLsizei width,
+                                        GLsizei height,
+                                        GLsizei depth,
+                                        GLboolean fixedSampleLocations,
+                                        GLuint memory,
+                                        GLuint64 offset)
+{
+
+}
+
+void GLAPIENTRY
+_mesa_TexStorageMem1DEXT(GLenum target,
+                         GLsizei levels,
+                         GLenum internalFormat,
+                         GLsizei width,
+                         GLuint memory,
+                         GLuint64 offset)
+{
+
+}
+
+void GLAPIENTRY
+_mesa_TextureStorageMem1DEXT(GLuint texture,
+                             GLsizei levels,
+                             GLenum internalFormat,
+                             GLsizei width,
+                             GLuint memory,
+                             GLuint64 offset)
+{
+
+}
+
+void GLAPIENTRY
+_mesa_GenSemaphoresEXT(GLsizei n, GLuint *semaphores)
+{
+
+}
+
+void GLAPIENTRY
+_mesa_DeleteSemaphoresEXT(GLsizei n, const GLuint *semaphores)
+{
+
+}
+
+GLboolean GLAPIENTRY
+_mesa_IsSemaphoreEXT(GLuint semaphore)
+{
+   return GL_FALSE;
+}
+
+void GLAPIENTRY
+_mesa_SemaphoreParameterui64vEXT(GLuint semaphore,
+                                 GLenum pname,
+                                 const GLuint64 *params)
+{
+
+}
+
+void GLAPIENTRY
+_mesa_GetSemaphoreParameterui64vEXT(GLuint semaphore,
+                                    GLenum pname,
+                                    GLuint64 *params)
+{
+
+}
+
+void GLAPIENTRY
+_mesa_WaitSemaphoreEXT(GLuint semaphore,
+                       GLuint numBufferBarriers,
+                       const GLuint *buffers,
+                       GLuint numTextureBarriers,
+                       const GLuint *textures,
+                       const GLenum *srcLayouts)
+{
+
+}
+
+void GLAPIENTRY
+_mesa_SignalSemaphoreEXT(GLuint semaphore,
+                         GLuint numBufferBarriers,
+                         const GLuint *buffers,
+                         GLuint numTextureBarriers,
+                         const GLuint *textures,
+                         const GLenum *dstLayouts)
+{
+
+}
+
+void GLAPIENTRY
+_mesa_ImportMemoryFdEXT(GLuint memory,
+                        GLuint64 size,
+                        GLenum handleType,
+                        GLint fd)
+{
+
+}
+
+void GLAPIENTRY
+_mesa_ImportSemaphoreFdEXT(GLuint semaphore,
+                           GLenum handleType,
+                           GLint fd)
+{
+
+}
diff --git a/src/mesa/main/externalobjects.h b/src/mesa/main/externalobjects.h
new file mode 100644
index 0000000000..f70be8e8ab
--- /dev/null
+++ b/src/mesa/main/externalobjects.h
@@ -0,0 +1,200 @@
+/*
+ * Mesa 3-D graphics library
+ *
+ * Copyright (C) 2017 Red Hat.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Authors: Dave Airlie <airlied at gmail.com>
+ * 	    Andres Rodriguez <andresx7 at gmail.com>
+ */
+
+/**
+ * \file externalobjects.h
+ *
+ * Declarations of functions related to the API interop extensions.
+ */
+
+#ifndef EXTERNALOBJECTS_H
+#define EXTERNALOBJECTS_H
+
+#include "glheader.h"
+
+extern void GLAPIENTRY
+_mesa_DeleteMemoryObjectsEXT(GLsizei n, const GLuint *memoryObjects);
+
+extern GLboolean GLAPIENTRY
+_mesa_IsMemoryObjectEXT(GLuint memoryObject);
+
+extern void GLAPIENTRY
+_mesa_CreateMemoryObjectsEXT(GLsizei n, GLuint *memoryObjects);
+
+extern void GLAPIENTRY
+_mesa_MemoryObjectParameterivEXT(GLuint memoryObject,
+                                 GLenum pname,
+                                 const GLint *params);
+
+extern void GLAPIENTRY
+_mesa_GetMemoryObjectParameterivEXT(GLuint memoryObject,
+                                    GLenum pname,
+                                    GLint *params);
+
+extern void GLAPIENTRY
+_mesa_TexStorageMem2DEXT(GLenum target,
+                         GLsizei levels,
+                         GLenum internalFormat,
+                         GLsizei width,
+                         GLsizei height,
+                         GLuint memory,
+                         GLuint64 offset);
+
+extern void GLAPIENTRY
+_mesa_TexStorageMem2DMultisampleEXT(GLenum target,
+                                    GLsizei samples,
+                                    GLenum internalFormat,
+                                    GLsizei width,
+                                    GLsizei height,
+                                    GLboolean fixedSampleLocations,
+                                    GLuint memory,
+                                    GLuint64 offset);
+
+extern void GLAPIENTRY
+_mesa_TexStorageMem3DEXT(GLenum target,
+                         GLsizei levels,
+                         GLenum internalFormat,
+                         GLsizei width,
+                         GLsizei height,
+                         GLsizei depth,
+                         GLuint memory,
+                         GLuint64 offset);
+
+extern void GLAPIENTRY
+_mesa_TexStorageMem3DMultisampleEXT(GLenum target,
+                                    GLsizei samples,
+                                    GLenum internalFormat,
+                                    GLsizei width,
+                                    GLsizei height,
+                                    GLsizei depth,
+                                    GLboolean fixedSampleLocations,
+                                    GLuint memory,
+                                    GLuint64 offset);
+
+extern void GLAPIENTRY
+_mesa_TextureStorageMem2DEXT(GLuint texture,
+                             GLsizei levels,
+                             GLenum internalFormat,
+                             GLsizei width,
+                             GLsizei height,
+                             GLuint memory,
+                             GLuint64 offset);
+
+extern void GLAPIENTRY
+_mesa_TextureStorageMem2DMultisampleEXT(GLuint texture,
+                                        GLsizei samples,
+                                        GLenum internalFormat,
+                                        GLsizei width,
+                                        GLsizei height,
+                                        GLboolean fixedSampleLocations,
+                                        GLuint memory,
+                                        GLuint64 offset);
+
+extern void GLAPIENTRY
+_mesa_TextureStorageMem3DEXT(GLuint texture,
+                             GLsizei levels,
+                             GLenum internalFormat,
+                             GLsizei width,
+                             GLsizei height,
+                             GLsizei depth,
+                             GLuint memory,
+                             GLuint64 offset);
+
+extern void GLAPIENTRY
+_mesa_TextureStorageMem3DMultisampleEXT(GLuint texture,
+                                        GLsizei samples,
+                                        GLenum internalFormat,
+                                        GLsizei width,
+                                        GLsizei height,
+                                        GLsizei depth,
+                                        GLboolean fixedSampleLocations,
+                                        GLuint memory,
+                                        GLuint64 offset);
+
+extern void GLAPIENTRY
+_mesa_TexStorageMem1DEXT(GLenum target,
+                         GLsizei levels,
+                         GLenum internalFormat,
+                         GLsizei width,
+                         GLuint memory,
+                         GLuint64 offset);
+
+extern void GLAPIENTRY
+_mesa_TextureStorageMem1DEXT(GLuint texture,
+                             GLsizei levels,
+                             GLenum internalFormat,
+                             GLsizei width,
+                             GLuint memory,
+                             GLuint64 offset);
+
+extern void GLAPIENTRY
+_mesa_GenSemaphoresEXT(GLsizei n, GLuint *semaphores);
+
+extern void GLAPIENTRY
+_mesa_DeleteSemaphoresEXT(GLsizei n, const GLuint *semaphores);
+
+extern GLboolean GLAPIENTRY
+_mesa_IsSemaphoreEXT(GLuint semaphore);
+
+extern void GLAPIENTRY
+_mesa_SemaphoreParameterui64vEXT(GLuint semaphore,
+                                 GLenum pname,
+                                 const GLuint64 *params);
+
+extern void GLAPIENTRY
+_mesa_GetSemaphoreParameterui64vEXT(GLuint semaphore,
+                                    GLenum pname,
+                                    GLuint64 *params);
+
+extern void GLAPIENTRY
+_mesa_WaitSemaphoreEXT(GLuint semaphore,
+                       GLuint numBufferBarriers,
+                       const GLuint *buffers,
+                       GLuint numTextureBarriers,
+                       const GLuint *textures,
+                       const GLenum *srcLayouts);
+
+extern void GLAPIENTRY
+_mesa_SignalSemaphoreEXT(GLuint semaphore,
+                         GLuint numBufferBarriers,
+                         const GLuint *buffers,
+                         GLuint numTextureBarriers,
+                         const GLuint *textures,
+                         const GLenum *dstLayouts);
+
+extern void GLAPIENTRY
+_mesa_ImportMemoryFdEXT(GLuint memory,
+                        GLuint64 size,
+                        GLenum handleType,
+                        GLint fd);
+
+extern void GLAPIENTRY
+_mesa_ImportSemaphoreFdEXT(GLuint semaphore,
+                           GLenum handleType,
+                           GLint fd);
+
+#endif
diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
index 68f520f14e..982f64a08a 100644
--- a/src/mesa/main/get.c
+++ b/src/mesa/main/get.c
@@ -1939,20 +1939,26 @@ _mesa_GetDoublev(GLenum pname, GLdouble *params)
    case TYPE_BIT_4:
    case TYPE_BIT_5:
    case TYPE_BIT_6:
    case TYPE_BIT_7:
       shift = d->type - TYPE_BIT_0;
       params[0] = (*(GLbitfield *) p >> shift) & 1;
       break;
    }
 }
 
+void GLAPIENTRY
+_mesa_GetUnsignedBytevEXT(GLenum pname, GLubyte *data)
+{
+
+}
+
 /**
  * Convert a GL texture binding enum such as GL_TEXTURE_BINDING_2D
  * into the corresponding Mesa texture target index.
  * \return TEXTURE_x_INDEX or -1 if binding is invalid
  */
 static int
 tex_binding_to_index(const struct gl_context *ctx, GLenum binding)
 {
    switch (binding) {
    case GL_TEXTURE_BINDING_1D:
@@ -2645,20 +2651,26 @@ _mesa_GetDoublei_v(GLenum pname, GLuint index, GLdouble *params)
       for (i = 0; i < 16; i++)
          params[i] = (GLdouble) m->m[transpose[i]];
       break;
 
    default:
       ;
    }
 }
 
 void GLAPIENTRY
+_mesa_GetUnsignedBytei_vEXT(GLenum target, GLuint index, GLubyte *data)
+{
+
+}
+
+void GLAPIENTRY
 _mesa_GetFixedv(GLenum pname, GLfixed *params)
 {
    const struct value_desc *d;
    union value v;
    GLmatrix *m;
    int shift, i;
    void *p;
 
    d = find_value("glGetDoublev", pname, &p, &v);
    switch (d->type) {
diff --git a/src/mesa/main/get.h b/src/mesa/main/get.h
index ce97cc586d..34cb9381fe 100644
--- a/src/mesa/main/get.h
+++ b/src/mesa/main/get.h
@@ -47,37 +47,43 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params );
 extern void GLAPIENTRY
 _mesa_GetIntegerv( GLenum pname, GLint *params );
 
 extern void GLAPIENTRY
 _mesa_GetInteger64v( GLenum pname, GLint64 *params );
 
 extern void GLAPIENTRY
 _mesa_GetFixedv(GLenum pname, GLfixed *params);
 
 extern void GLAPIENTRY
+_mesa_GetUnsignedBytevEXT(GLenum pname, GLubyte *data);
+
+extern void GLAPIENTRY
 _mesa_GetBooleani_v( GLenum pname, GLuint index, GLboolean *params );
 
 extern void GLAPIENTRY
 _mesa_GetIntegeri_v( GLenum pname, GLuint index, GLint *params );
 
 extern void GLAPIENTRY
 _mesa_GetInteger64i_v( GLenum pname, GLuint index, GLint64 *params );
 
 extern void GLAPIENTRY
 _mesa_GetPointerv( GLenum pname, GLvoid **params );
 
 extern void GLAPIENTRY
 _mesa_GetFloati_v(GLenum target, GLuint index, GLfloat *data);
 
 extern void GLAPIENTRY
 _mesa_GetDoublei_v(GLenum target, GLuint index, GLdouble *data);
 
+extern void GLAPIENTRY
+_mesa_GetUnsignedBytei_vEXT(GLenum target, GLuint index, GLubyte *data);
+
 extern const GLubyte * GLAPIENTRY
 _mesa_GetString( GLenum name );
 
 extern const GLubyte * GLAPIENTRY
 _mesa_GetStringi(GLenum name, GLuint index);
 
 extern GLenum GLAPIENTRY
 _mesa_GetError( void );
 
 /* GL_ARB_robustness */
diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp
index 724c22ee9b..aea9ffb37f 100644
--- a/src/mesa/main/tests/dispatch_sanity.cpp
+++ b/src/mesa/main/tests/dispatch_sanity.cpp
@@ -976,20 +976,52 @@ const struct function common_desktop_functions_possible[] = {
    { "glMakeImageHandleNonResidentARB", 40, -1 },
    { "glIsImageHandleResidentARB", 40, -1 },
    { "glUniformHandleui64ARB", 40, -1 },
    { "glUniformHandleui64vARB", 40, -1 },
    { "glProgramUniformHandleui64ARB", 40, -1 },
    { "glProgramUniformHandleui64vARB", 40, -1 },
    { "glVertexAttribL1ui64ARB", 40, -1 },
    { "glVertexAttribL1ui64vARB", 40, -1 },
    { "glGetVertexAttribLui64vARB", 40, -1 },
 
+   /* GL_EXT_external_objects */
+   { "glGetUnsignedBytevEXT", 45, -1 },
+   { "glGetUnsignedBytei_vEXT", 45, -1 },
+   { "glDeleteMemoryObjectsEXT", 45, -1 },
+   { "glIsMemoryObjectEXT", 45, -1 },
+   { "glCreateMemoryObjectsEXT", 45, -1 },
+   { "glMemoryObjectParameterivEXT", 45, -1 },
+   { "glGetMemoryObjectParameterivEXT", 45, -1 },
+   { "glTexStorageMem2DEXT", 45, -1 },
+   { "glTexStorageMem2DMultisampleEXT", 45, -1 },
+   { "glTexStorageMem3DEXT", 45, -1 },
+   { "glTexStorageMem3DMultisampleEXT", 45, -1 },
+   { "glBufferStorageMemEXT", 45, -1 },
+   { "glTextureStorageMem2DEXT", 45, -1 },
+   { "glTextureStorageMem2DMultisampleEXT", 45, -1 },
+   { "glTextureStorageMem3DEXT", 45, -1 },
+   { "glTextureStorageMem3DMultisampleEXT", 45, -1 },
+   { "glNamedBufferStorageMemEXT", 45, -1 },
+   { "glTexStorageMem1DEXT", 45, -1 },
+   { "glTextureStorageMem1DEXT", 45, -1 },
+   { "glGenSemaphoresEXT", 45, -1 },
+   { "glDeleteSemaphoresEXT", 45, -1 },
+   { "glIsSemaphoreEXT", 45, -1 },
+   { "glSemaphoreParameterui64vEXT", 45, -1 },
+   { "glGetSemaphoreParameterui64vEXT", 45, -1 },
+   { "glWaitSemaphoreEXT", 45, -1 },
+   { "glSignalSemaphoreEXT", 45, -1 },
+
+   /* GL_EXT_external_objects_fd */
+   { "glImportMemoryFdEXT", 45, -1 },
+   { "glImportSemaphoreFdEXT", 45, -1 },
+
    { NULL, 0, -1 }
 };
 
 const struct function gl_compatibility_functions_possible[] = {
    { "glBindRenderbufferEXT", 10, -1 },
    { "glBindFramebufferEXT", 10, -1 },
    { "glNewList", 10, _gloffset_NewList },
    { "glEndList", 10, _gloffset_EndList },
    { "glCallList", 10, _gloffset_CallList },
    { "glCallLists", 10, _gloffset_CallLists },
-- 
2.13.3



More information about the mesa-dev mailing list