From 4b40314cc0a370ff2e651424008f8c16a60e88d4 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sun, 30 Jul 2017 20:49:24 +1000 Subject: [PATCH] Initial OpenGL 4.6 support --- auto/bin/filter_gl_ext.sh | 43 +++++++++++++++++++++++++ auto/core/gl/GL_EXT_external_buffer | 7 ++++ auto/core/gl/GL_EXT_memory_object | 41 +++++++++++++++++++++++ auto/core/gl/GL_EXT_memory_object_fd | 6 ++++ auto/core/gl/GL_EXT_memory_object_win32 | 17 ++++++++++ auto/core/gl/GL_EXT_semaphore | 11 +++++++ auto/core/gl/GL_EXT_semaphore_fd | 5 +++ auto/core/gl/GL_EXT_semaphore_win32 | 6 ++++ auto/core/gl/GL_VERSION_4_6 | 29 +++++++++++++++++ auto/src/glew_init_gl.c | 3 +- 10 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 auto/core/gl/GL_EXT_external_buffer create mode 100644 auto/core/gl/GL_EXT_memory_object create mode 100644 auto/core/gl/GL_EXT_memory_object_fd create mode 100644 auto/core/gl/GL_EXT_memory_object_win32 create mode 100644 auto/core/gl/GL_EXT_semaphore create mode 100644 auto/core/gl/GL_EXT_semaphore_fd create mode 100644 auto/core/gl/GL_EXT_semaphore_win32 create mode 100644 auto/core/gl/GL_VERSION_4_6 diff --git a/auto/bin/filter_gl_ext.sh b/auto/bin/filter_gl_ext.sh index baca194..88eebb1 100755 --- a/auto/bin/filter_gl_ext.sh +++ b/auto/bin/filter_gl_ext.sh @@ -516,6 +516,49 @@ EOT grep -v "RasterSamplesEXT" $1/GL_NV_framebuffer_mixed_samples > tmp mv tmp $1/GL_NV_framebuffer_mixed_samples +# Filter out glNamedBufferStorageEXT from GL_ARB_buffer_storage + + grep -v "glNamedBufferStorageEXT" $1/GL_ARB_buffer_storage > tmp + mv tmp $1/GL_ARB_buffer_storage + +# Filter out glFramebufferTextureEXT from GL_EXT_geometry_point_size +# and GL_EXT_geometry_shader + + grep -v "glFramebufferTextureEXT" $1/GL_EXT_geometry_point_size > tmp + mv tmp $1/GL_EXT_geometry_point_size + + grep -v "glFramebufferTextureEXT" $1/GL_EXT_geometry_shader > tmp + mv tmp $1/GL_EXT_geometry_shader + +# Filter out glBindFragDataLocationEXT from GL_EXT_blend_func_extended + + grep -v "glBindFragDataLocationEXT" $1/GL_EXT_blend_func_extended > tmp + mv tmp $1/GL_EXT_blend_func_extended + +# Filter out glDrawArraysInstancedEXT and glDrawElementsInstancedEXT from GL_EXT_blend_func_extended + + grep -v "glDrawArraysInstancedEXT" $1/GL_EXT_instanced_arrays > tmp + mv tmp $1/GL_EXT_instanced_arrays + + grep -v "glDrawElementsInstancedEXT" $1/GL_EXT_instanced_arrays > tmp + mv tmp $1/GL_EXT_instanced_arrays + +# Filter out glRenderbufferStorageMultisampleEXT from GL_EXT_multisampled_render_to_texture + + grep -v "glRenderbufferStorageMultisampleEXT" $1/GL_EXT_multisampled_render_to_texture > tmp + mv tmp $1/GL_EXT_multisampled_render_to_texture + +# Filter out glTexturePageCommitmentEXT from GL_ARB_sparse_texture + + grep -v "glTexturePageCommitmentEXT" $1/GL_ARB_sparse_texture > tmp + mv tmp $1/GL_ARB_sparse_texture + +# Filter out TextureStorage* from GL_ARB_texture_storage + + grep -v "TextureStorage" $1/GL_ARB_texture_storage > tmp + mv tmp $1/GL_ARB_texture_storage + + # Append GLVULKANPROCNV to GL_NV_draw_vulkan_image # Probably ought to be explicitly mentioned in the spec language diff --git a/auto/core/gl/GL_EXT_external_buffer b/auto/core/gl/GL_EXT_external_buffer new file mode 100644 index 0000000..25a3ca6 --- /dev/null +++ b/auto/core/gl/GL_EXT_external_buffer @@ -0,0 +1,7 @@ +GL_EXT_external_buffer +http://www.opengl.org/registry/specs/EXT/external_buffer.txt +GL_EXT_external_buffer + + void glBufferStorageExternalEXT (GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags) + void glNamedBufferStorageExternalEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags) + typedef void* GLeglClientBufferEXT \ No newline at end of file diff --git a/auto/core/gl/GL_EXT_memory_object b/auto/core/gl/GL_EXT_memory_object new file mode 100644 index 0000000..1f4531d --- /dev/null +++ b/auto/core/gl/GL_EXT_memory_object @@ -0,0 +1,41 @@ +GL_EXT_memory_object +http://www.opengl.org/registry/specs/EXT/external_objects.txt +GL_EXT_memory_object + + GL_UUID_SIZE_EXT 16 + GL_TEXTURE_TILING_EXT 0x9580 + GL_DEDICATED_MEMORY_OBJECT_EXT 0x9581 + GL_NUM_TILING_TYPES_EXT 0x9582 + GL_TILING_TYPES_EXT 0x9583 + GL_OPTIMAL_TILING_EXT 0x9584 + GL_LINEAR_TILING_EXT 0x9585 + GL_LAYOUT_GENERAL_EXT 0x958D + GL_LAYOUT_COLOR_ATTACHMENT_EXT 0x958E + GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT 0x958F + GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT 0x9590 + GL_LAYOUT_SHADER_READ_ONLY_EXT 0x9591 + GL_LAYOUT_TRANSFER_SRC_EXT 0x9592 + GL_LAYOUT_TRANSFER_DST_EXT 0x9593 + GL_NUM_DEVICE_UUIDS_EXT 0x9596 + GL_DEVICE_UUID_EXT 0x9597 + GL_DRIVER_UUID_EXT 0x9598 + GL_PROTECTED_MEMORY_OBJECT_EXT 0x959B + void glBufferStorageMemEXT (GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset) + void glCreateMemoryObjectsEXT (GLsizei n, GLuint* memoryObjects) + void glDeleteMemoryObjectsEXT (GLsizei n, const GLuint* memoryObjects) + void glGetMemoryObjectParameterivEXT (GLuint memoryObject, GLenum pname, GLint* params) + void glGetUnsignedBytei_vEXT (GLenum target, GLuint index, GLubyte* data) + void glGetUnsignedBytevEXT (GLenum pname, GLubyte* data) + GLboolean glIsMemoryObjectEXT (GLuint memoryObject) + void glMemoryObjectParameterivEXT (GLuint memoryObject, GLenum pname, const GLint* params) + void glNamedBufferStorageMemEXT (GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset) + void glTexStorageMem1DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset) + void glTexStorageMem2DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset) + void glTexStorageMem2DMultisampleEXT (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset) + void glTexStorageMem3DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset) + void glTexStorageMem3DMultisampleEXT (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset) + void glTextureStorageMem1DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset) + void glTextureStorageMem2DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset) + void glTextureStorageMem2DMultisampleEXT (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset) + void glTextureStorageMem3DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset) + void glTextureStorageMem3DMultisampleEXT (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset) diff --git a/auto/core/gl/GL_EXT_memory_object_fd b/auto/core/gl/GL_EXT_memory_object_fd new file mode 100644 index 0000000..38536c0 --- /dev/null +++ b/auto/core/gl/GL_EXT_memory_object_fd @@ -0,0 +1,6 @@ +GL_EXT_memory_object_fd +http://www.opengl.org/registry/specs/EXT/external_objects_fd.txt +GL_EXT_memory_object_fd + + GL_HANDLE_TYPE_OPAQUE_FD_EXT 0x9586 + void glImportMemoryFdEXT (GLuint memory, GLuint64 size, GLenum handleType, GLint fd) diff --git a/auto/core/gl/GL_EXT_memory_object_win32 b/auto/core/gl/GL_EXT_memory_object_win32 new file mode 100644 index 0000000..6d36a69 --- /dev/null +++ b/auto/core/gl/GL_EXT_memory_object_win32 @@ -0,0 +1,17 @@ +GL_EXT_memory_object_win32 +http://www.opengl.org/registry/specs/EXT/external_objects_win32.txt +GL_EXT_memory_object_win32 + + GL_LUID_SIZE_EXT 8 + GL_HANDLE_TYPE_OPAQUE_WIN32_EXT 0x9587 + GL_HANDLE_TYPE_OPAQUE_WIN32_KMT_EXT 0x9588 + GL_HANDLE_TYPE_D3D12_TILEPOOL_EXT 0x9589 + GL_HANDLE_TYPE_D3D12_RESOURCE_EXT 0x958A + GL_HANDLE_TYPE_D3D11_IMAGE_EXT 0x958B + GL_HANDLE_TYPE_D3D11_IMAGE_KMT_EXT 0x958C + GL_HANDLE_TYPE_D3D12_FENCE_EXT 0x9594 + GL_D3D12_FENCE_VALUE_EXT 0x9595 + GL_DEVICE_LUID_EXT 0x9599 + GL_DEVICE_NODE_MASK_EXT 0x959A + void glImportMemoryWin32HandleEXT (GLuint memory, GLuint64 size, GLenum handleType, void *handle) + void glImportMemoryWin32NameEXT (GLuint memory, GLuint64 size, GLenum handleType, const void *name) diff --git a/auto/core/gl/GL_EXT_semaphore b/auto/core/gl/GL_EXT_semaphore new file mode 100644 index 0000000..2e774d1 --- /dev/null +++ b/auto/core/gl/GL_EXT_semaphore @@ -0,0 +1,11 @@ +GL_EXT_semaphore +http://www.opengl.org/registry/specs/EXT/external_objects.txt +GL_EXT_semaphore + + void glDeleteSemaphoresEXT (GLsizei n, const GLuint* semaphores) + void glGenSemaphoresEXT (GLsizei n, GLuint* semaphores) + void glGetSemaphoreParameterui64vEXT (GLuint semaphore, GLenum pname, GLuint64* params) + GLboolean glIsSemaphoreEXT (GLuint semaphore) + void glSemaphoreParameterui64vEXT (GLuint semaphore, GLenum pname, const GLuint64* params) + void glSignalSemaphoreEXT (GLuint semaphore, GLuint numBufferBarriers, const GLuint* buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts) + void glWaitSemaphoreEXT (GLuint semaphore, GLuint numBufferBarriers, const GLuint* buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts) diff --git a/auto/core/gl/GL_EXT_semaphore_fd b/auto/core/gl/GL_EXT_semaphore_fd new file mode 100644 index 0000000..e3b2985 --- /dev/null +++ b/auto/core/gl/GL_EXT_semaphore_fd @@ -0,0 +1,5 @@ +GL_EXT_semaphore_fd +http://www.opengl.org/registry/specs/EXT/external_objects_fd.txt +GL_EXT_semaphore_fd + + void glImportSemaphoreFdEXT (GLuint semaphore, GLenum handleType, GLint fd) diff --git a/auto/core/gl/GL_EXT_semaphore_win32 b/auto/core/gl/GL_EXT_semaphore_win32 new file mode 100644 index 0000000..4854f58 --- /dev/null +++ b/auto/core/gl/GL_EXT_semaphore_win32 @@ -0,0 +1,6 @@ +GL_EXT_semaphore_win32 +http://www.opengl.org/registry/specs/EXT/external_objects_win32.txt +GL_EXT_semaphore_win32 + + void glImportSemaphoreWin32HandleEXT (GLuint semaphore, GLenum handleType, void *handle) + void glImportSemaphoreWin32NameEXT (GLuint semaphore, GLenum handleType, const void *name) diff --git a/auto/core/gl/GL_VERSION_4_6 b/auto/core/gl/GL_VERSION_4_6 new file mode 100644 index 0000000..2efe918 --- /dev/null +++ b/auto/core/gl/GL_VERSION_4_6 @@ -0,0 +1,29 @@ +GL_VERSION_4_6 +https://www.opengl.org/registry/doc/glspec46.compatibility.pdf + + + GL_PARAMETER_BUFFER 0x80EE + GL_PARAMETER_BUFFER_BINDING 0x80EF + GL_VERTICES_SUBMITTED 0x82EE + GL_PRIMITIVES_SUBMITTED 0x82EF + GL_VERTEX_SHADER_INVOCATIONS 0x82F0 + GL_TESS_CONTROL_SHADER_PATCHES 0x82F1 + GL_TESS_EVALUATION_SHADER_INVOCATIONS 0x82F2 + GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED 0x82F3 + GL_FRAGMENT_SHADER_INVOCATIONS 0x82F4 + GL_COMPUTE_SHADER_INVOCATIONS 0x82F5 + GL_CLIPPING_INPUT_PRIMITIVES 0x82F6 + GL_CLIPPING_OUTPUT_PRIMITIVES 0x82F7 + GL_TRANSFORM_FEEDBACK_OVERFLOW 0x82EC + GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW 0x82ED + GL_POLYGON_OFFSET_CLAMP 0x8E1B + GL_TEXTURE_MAX_ANISOTROPY 0x84FE + GL_MAX_TEXTURE_MAX_ANISOTROPY 0x84FF + GL_SHADER_BINARY_FORMAT_SPIR_V 0x9551 + GL_SPIR_V_BINARY 0x9552 + GL_CONTEXT_FLAG_NO_ERROR_BIT 0x00000008 + GL_SPIR_V_EXTENSIONS 0x9553 + GL_NUM_SPIR_V_EXTENSIONS 0x9554 + void glMultiDrawArraysIndirectCount (GLenum mode, const GLvoid *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride) + void glMultiDrawElementsIndirectCount (GLenum mode, GLenum type, const GLvoid *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride) + void glSpecializeShader (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue) diff --git a/auto/src/glew_init_gl.c b/auto/src/glew_init_gl.c index c153720..4b3da56 100644 --- a/auto/src/glew_init_gl.c +++ b/auto/src/glew_init_gl.c @@ -109,7 +109,8 @@ static GLenum GLEWAPIENTRY glewContextInit () } else { - GLEW_VERSION_4_5 = ( major > 4 ) || ( major == 4 && minor >= 5 ) ? GL_TRUE : GL_FALSE; + GLEW_VERSION_4_6 = ( major > 4 ) || ( major == 4 && minor >= 6 ) ? GL_TRUE : GL_FALSE; + GLEW_VERSION_4_5 = GLEW_VERSION_4_4 == GL_TRUE || ( major == 4 && minor >= 5 ) ? GL_TRUE : GL_FALSE; GLEW_VERSION_4_4 = GLEW_VERSION_4_5 == GL_TRUE || ( major == 4 && minor >= 4 ) ? GL_TRUE : GL_FALSE; GLEW_VERSION_4_3 = GLEW_VERSION_4_4 == GL_TRUE || ( major == 4 && minor >= 3 ) ? GL_TRUE : GL_FALSE; GLEW_VERSION_4_2 = GLEW_VERSION_4_3 == GL_TRUE || ( major == 4 && minor >= 2 ) ? GL_TRUE : GL_FALSE;