From 3b26301bc3fa5818a7b7a14c11cfa378d41f2f7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Thu, 19 Feb 2026 14:23:12 +0100 Subject: [PATCH] GL: recognize EXT_multi_draw_indirect and EXT_external_objects extensions. --- doc/changelog.dox | 9 + doc/opengl-mapping.dox | 25 ++- doc/opengl-support.dox | 13 ++ src/Magnum/GL/Context.cpp | 31 ++++ src/Magnum/GL/Extensions.h | 104 +++++++---- src/MagnumExternal/OpenGL/GL/extensions.txt | 6 + src/MagnumExternal/OpenGL/GL/flextGL.cpp | 44 +++++ src/MagnumExternal/OpenGL/GL/flextGL.h | 160 +++++++++++++++++ .../OpenGL/GL/flextGLPlatform.cpp | 44 +++++ .../OpenGL/GLES3/extensions.txt | 7 + src/MagnumExternal/OpenGL/GLES3/flextGL.h | 166 ++++++++++++++++++ .../OpenGL/GLES3/flextGLPlatform.cpp | 46 +++++ .../OpenGL/GLES3/flextGLPlatformIOS.cpp | 92 ++++++++++ .../GLES3/flextGLPlatformWindowsDesktop.cpp | 46 +++++ .../OpenGL/GLES3/flextGLWindowsDesktop.h | 166 ++++++++++++++++++ 15 files changed, 919 insertions(+), 40 deletions(-) diff --git a/doc/changelog.dox b/doc/changelog.dox index 22c2c03b5..4cb6f5ecc 100644 --- a/doc/changelog.dox +++ b/doc/changelog.dox @@ -195,6 +195,15 @@ See also: - @webgl_extension{WEBGL,multi_draw} - @webgl_extension{WEBGL,draw_instanced_base_vertex_base_instance} - @webgl_extension{WEBGL,multi_draw_instanced_base_vertex_base_instance} +- Recognizing the @gl_extension{EXT,multi_draw_indirect} OpenGL ES extension +- Recognizing the @gl_extension2{EXT,memory_object,EXT_external_objects}, + @gl_extension2{EXT,semaphore,EXT_external_objects}, + @gl_extension2{EXT,memory_object_fd,EXT_external_objects_fd}, + @gl_extension2{EXT,semaphore_fd,EXT_external_objects_fd}, + @gl_extension2{EXT,memory_object_win32,EXT_external_objects_win32} and + @gl_extension2{EXT,semaphore_win32,EXT_external_objects_win32} OpenGL and + OpenGL ES extensions for interoperation with other GPU APIs (see + [mosra/magnum#688](https://github.com/mosra/magnum/issues/688)) - Recognizing @m_class{m-doc-external} [ANGLE_compressed_texture_etc](https://chromium.googlesource.com/angle/angle/+/master/extensions/ANGLE_compressed_texture_etc.txt) OpenGL ES and @webgl_extension{WEBGL,compressed_texture_etc} WebGL extensions, making ETC and EAC @ref GL::CompressedPixelFormat and diff --git a/doc/opengl-mapping.dox b/doc/opengl-mapping.dox index 45e07565c..f04f5a1ac 100644 --- a/doc/opengl-mapping.dox +++ b/doc/opengl-mapping.dox @@ -87,6 +87,7 @@ OpenGL function | Matching API @fn_gl{BufferData}, \n `glNamedBufferData()` | @ref GL::Buffer::setData() @fn_gl_extension{BufferPageCommitment,ARB,sparse_buffer}, \n `glNamedBufferPageCommitmentEXT()`, \n `glNamedBufferPageCommitmentARB()` | | @fn_gl{BufferStorage}, \n `glNamedBufferStorage()` | @ref GL::Buffer::setStorage() +@fn_gl_extension{BufferStorageMem,EXT,external_objects}, \n @fn_gl_extension{NamedBufferStorageMem,EXT,external_objects} | | @fn_gl{BufferSubData}, \n `glNamedBufferSubData()` | @ref GL::Buffer::setSubData() @subsection opengl-mapping-functions-c C @@ -116,6 +117,7 @@ OpenGL function | Matching API @fn_gl{CopyImageSubData} | | @fn_gl{CopyTexImage1D}, \n @fn_gl{CopyTexImage2D} | @ref GL::Framebuffer::copyImage() @fn_gl{CopyTexSubImage1D}, \n `glCopyTextureSubImage1D()`, \n @fn_gl{CopyTexSubImage2D}, \n `glCopyTextureSubImage2D()`, \n @fn_gl{CopyTexSubImage3D}, \n `glCopyTextureSubImage3D()` | @ref GL::Framebuffer::copySubImage() +@fn_gl_extension{CreateMemoryObjects,EXT,external_objects}, \n @fn_gl_extension{DeleteMemoryObjects,EXT,external_objects} | | @fn_gl{CreateProgram}, @fn_gl{DeleteProgram} | @ref GL::AbstractShaderProgram constructor and destructor @fn_gl{CreateShader}, @fn_gl{DeleteShader} | @ref GL::Shader constructor and destructor @fn_gl{CreateShaderProgram} | | @@ -183,6 +185,7 @@ OpenGL function | Matching API @fn_gl{GenBuffers}, \n @fn_gl{CreateBuffers}, \n @fn_gl{DeleteBuffers} | @ref GL::Buffer constructor and destructor @fn_gl{GenFramebuffers}, \n @fn_gl{CreateFramebuffers}, \n @fn_gl{DeleteFramebuffers} | @ref GL::Framebuffer constructor and destructor @fn_gl{GenProgramPipelines}, \n @fn_gl{CreateProgramPipelines}, \n @fn_gl{DeleteProgramPipelines} | | +@fn_gl_extension{GenSemaphores,EXT,external_objects}, \n @fn_gl_extension{DeleteSemaphores,EXT,external_objects} | | @fn_gl{GenQueries}, \n @fn_gl{CreateQueries}, \n @fn_gl{DeleteQueries} | @ref GL::AbstractQuery constructor and destructor @fn_gl{GenRenderbuffers}, \n @fn_gl{CreateRenderbuffers}, \n @fn_gl{DeleteRenderbuffers} | @ref GL::Renderbuffer constructor and destructor @fn_gl{GenSamplers}, \n @fn_gl{CreateSamplers}, \n @fn_gl{DeleteSamplers} | | @@ -190,7 +193,7 @@ OpenGL function | Matching API @fn_gl{GenTransformFeedbacks}, \n @fn_gl{CreateTransformFeedbacks}, \n @fn_gl{DeleteTransformFeedbacks} | @ref GL::TransformFeedback constructor and destructor @fn_gl{GenVertexArrays}, \n @fn_gl{CreateVertexArrays}, \n @fn_gl{DeleteVertexArrays} | @ref GL::Mesh constructor and destructor @fn_gl{GenerateMipmap}, \n `glGenerateTextureMipmap()` | @ref GL::Texture::generateMipmap(), \n @ref GL::TextureArray::generateMipmap(), \n @ref GL::CubeMapTexture::generateMipmap(), \n @ref GL::CubeMapTextureArray::generateMipmap() -@fn_gl{Get} | see @ref opengl-mapping-state "table below" +@fn_gl{Get}, \n @fn_gl_extension{GetUnsignedBytev,EXT,external_objects}, \n @fn_gl_extension{GetUnsignedBytei_v,EXT,external_objects} | see @ref opengl-mapping-state "table below" @fn_gl2{GetActiveAtomicCounterBuffer,GetActiveAtomicCounterBufferiv} | not queryable @fn_gl{GetActiveAttrib}, \n @fn_gl{GetActiveSubroutineName}, \n @fn_gl{GetActiveSubroutineUniform}, \n @fn_gl{GetActiveSubroutineUniformName}, \n @fn_gl{GetActiveUniform}, \n @fn_gl{GetActiveUniformBlock}, \n @fn_gl{GetActiveUniformBlockName}, \n @fn_gl{GetActiveUniformName}, \n @fn_gl{GetActiveUniforms} | not queryable @fn_gl{GetAttachedShaders} | not queryable, @ref GL::AbstractShaderProgram::attachShader() setter only @@ -208,6 +211,7 @@ OpenGL function | Matching API @fn_gl{GetGraphicsResetStatus}, \n @fn_gl_extension{GetGraphicsResetStatus,ARB,robustness} | @ref GL::Renderer::graphicsResetStatus() @fn_gl_extension{GetImageHandle,ARB,bindless_texture} | | @fn_gl{GetInternalformat} | | +@fn_gl_extension{GetMemoryObjectParameteriv,EXT,external_objects} | | @fn_gl{GetMultisample} | | @fn_gl{GetObjectLabel}, \n @fn_gl{GetObjectPtrLabel} | @ref GL::AbstractShaderProgram::label(), \n @ref GL::AbstractQuery::label(), \n @ref GL::AbstractTexture::label(), \n @ref GL::Buffer::label(), \n @ref GL::Framebuffer::label(), \n @ref GL::Mesh::label(), \n @ref GL::Renderbuffer::label(), \n @ref GL::Shader::label() @fn_gl{GetProgram}, \n @fn_gl{GetProgramInfoLog} | @ref GL::AbstractShaderProgram::link(), \n @ref GL::AbstractShaderProgram::validate() @@ -217,6 +221,7 @@ OpenGL function | Matching API @fn_gl{GetProgramPipelineInfoLog} | | @fn_gl{GetProgramResource}, \n @fn_gl{GetProgramResourceIndex}, \n @fn_gl{GetProgramResourceLocation}, \n @fn_gl{GetProgramResourceLocationIndex}, \n @fn_gl{GetProgramResourceName} | not queryable, set them in shader code directly as described in @ref GL::AbstractShaderProgram docs @fn_gl{GetProgramStage} | | +@fn_gl_extension{GetSemaphoreParameterui64v,EXT,external_objects} | | @fn_gl{GetQueryIndexed} | | @fn_gl{GetQueryObject} | @ref GL::AbstractQuery::result() @fn_gl{GetQueryBufferObject} | | @@ -259,6 +264,12 @@ OpenGL function | Matching API OpenGL function | Matching API --------------------------------------- | ------------ +@fn_gl_extension{ImportMemoryFd,EXT,external_objects_fd} | | +@fn_gl_extension{ImportMemoryWin32Handle,EXT,external_objects_win32} | | +@fn_gl_extension{ImportMemoryWin32Name,EXT,external_objects_win32} | | +@fn_gl_extension{ImportSemaphoreFd,EXT,external_objects_fd} | | +@fn_gl_extension{ImportSemaphoreWin32Handle,EXT,external_objects_win32} | | +@fn_gl_extension{ImportSemaphoreWin32Name,EXT,external_objects_win32} | | @fn_gl{InvalidateBufferData} | @ref GL::Buffer::invalidateData() @fn_gl{InvalidateBufferSubData} | @ref GL::Buffer::invalidateSubData() @fn_gl{InvalidateFramebuffer}, \n `glInvalidateNamedFramebufferData()`, \n @fn_gl_extension{DiscardFramebuffer,EXT,discard_framebuffer} | @ref GL::DefaultFramebuffer::invalidate(), \n @ref GL::Framebuffer::invalidate() @@ -266,6 +277,7 @@ OpenGL function | Matching API @fn_gl{InvalidateTexImage} | @ref GL::Texture::invalidateImage(), \n @ref GL::TextureArray::invalidateImage(), \n @ref GL::CubeMapTexture::invalidateImage(), \n @ref GL::CubeMapTextureArray::invalidateImage(), \n @ref GL::RectangleTexture::invalidateImage(), \n @ref GL::MultisampleTexture::invalidateImage() @fn_gl{InvalidateTexSubImage} | @ref GL::Texture::invalidateSubImage(), \n @ref GL::TextureArray::invalidateSubImage(), \n @ref GL::CubeMapTexture::invalidateSubImage(), \n @ref GL::CubeMapTextureArray::invalidateSubImage(), \n @ref GL::RectangleTexture::invalidateSubImage(), \n @ref GL::MultisampleTexture::invalidateSubImage() @fn_gl{IsBuffer}, \n @fn_gl{IsFramebuffer}, \n @fn_gl{IsProgram}, \n @fn_gl{IsProgramPipeline}, \n @fn_gl{IsQuery}, \n @fn_gl{IsRenderbuffer}, \n @fn_gl{IsSampler}, \n @fn_gl{IsShader}, \n @fn_gl{IsSync}, \n @fn_gl{IsTexture}, \n @fn_gl{IsTransformFeedback}, \n @fn_gl{IsVertexArray} | not needed, objects are strongly typed +@fn_gl_extension{IsMemoryObject,EXT,external_objects}, \n @fn_gl_extension{IsSemaphore,EXT,external_objects} | | @fn_gl{IsEnabled}, `glIsEnabledi()` | not queryable, @ref GL::Renderer::setFeature() setter only @fn_gl_extension{IsImageHandleResident,ARB,bindless_texture} | | @fn_gl_extension{IsTextureHandleResident,ARB,bindless_texture} | | @@ -293,6 +305,7 @@ OpenGL function | Matching API @fn_gl{MapBuffer}, \n `glMapNamedBuffer()`, \n @fn_gl{MapBufferRange}, \n `glMapNamedBufferRange()`, \n @fn_gl{UnmapBuffer}, \n `glUnmapNamedBuffer()` | @ref GL::Buffer::map(), @ref GL::Buffer::unmap() @fn_gl_extension{MaxShaderCompilerThreads,KHR,parallel_shader_compile} | | @fn_gl{MemoryBarrier}, \n `glMemoryBarrierByRegion()` | @ref GL::Renderer::setMemoryBarrier(), \n @ref GL::Renderer::setMemoryBarrierByRegion() +@fn_gl_extension{MemoryObjectParameteriv,EXT,external_objects} | | @fn_gl{MinSampleShading} | @ref GL::Renderer::setMinSampleShading() @fn_gl{MultiDrawArrays}, \n @fn_gl{MultiDrawElements}, \n @fn_gl{MultiDrawElementsBaseVertex} | @ref GL::AbstractShaderProgram::draw(const Containers::Iterable&) @fn_gl{MultiDrawArraysIndirectCount}, \n @fn_gl{MultiDrawElementsIndirectCount} | | @@ -356,12 +369,14 @@ OpenGL function | Matching API @fn_gl{SampleCoverage} | @ref GL::Renderer::setSampleCoverage() @fn_gl{SampleMaski} | | @fn_gl{SamplerParameter} | | +@fn_gl_extension{SemaphoreParameterui64v,EXT,external_objects} | | @fn_gl{Scissor} | @ref GL::Renderer::setScissor() @fn_gl{ScissorArray} | | @fn_gl{ScissorIndexed} | | @fn_gl{ShaderBinary} | | @fn_gl{ShaderSource} | @ref GL::Shader::addFile(), \n @ref GL::Shader::addSource() @fn_gl{ShaderStorageBlockBinding} | | +@fn_gl_extension{SignalSemaphore,EXT,external_objects} | | @fn_gl{SpecializeShader} | | @fn_gl{StencilFunc}, \n @fn_gl{StencilFuncSeparate} | @ref GL::Renderer::setStencilFunction() @fn_gl{StencilMask}, \n @fn_gl{StencilMaskSeparate} | @ref GL::Renderer::setStencilMask() @@ -379,7 +394,9 @@ OpenGL function | Matching API @fn_gl_extension{TexPageCommitment,ARB,sparse_texture} | | @fn_gl{TexParameter}, \n `glTextureParameter()` | @ref GL::Texture::setBaseLevel() "*Texture::setBaseLevel()", \n @ref GL::Texture::setMaxLevel() "*Texture::setMaxLevel()", \n @ref GL::Texture::setMinificationFilter() "*Texture::setMinificationFilter()", \n @ref GL::Texture::setMagnificationFilter() "*Texture::setMagnificationFilter()", \n @ref GL::Texture::setMinLod() "*Texture::setMinLod()", \n @ref GL::Texture::setMaxLod() "*Texture::setMaxLod()", \n @ref GL::Texture::setLodBias() "*Texture::setLodBias()", \n @ref GL::Texture::setWrapping() "*Texture::setWrapping()", \n @ref GL::Texture::setBorderColor() "*Texture::setBorderColor()", \n @ref GL::Texture::setMaxAnisotropy() "*Texture::setMaxAnisotropy()", \n @ref GL::Texture::setSrgbDecode() "*Texture::setSrgbDecode()", \n @ref GL::Texture::setSwizzle() "*Texture::setSwizzle()", \n @ref GL::Texture::setCompareMode() "*Texture::setCompareMode()", \n @ref GL::Texture::setCompareFunction() "*Texture::setCompareFunction()", \n @ref GL::Texture::setDepthStencilMode() "*Texture::setDepthStencilMode()" @fn_gl{TexStorage1D}, \n `glTextureStorage1D()`, \n @fn_gl{TexStorage2D}, \n `glTextureStorage2D()`, \n @fn_gl{TexStorage3D}, \n `glTextureStorage3D()` | @ref GL::Texture::setStorage(), \n @ref GL::TextureArray::setStorage(), \n @ref GL::CubeMapTexture::setStorage(), \n @ref GL::CubeMapTextureArray::setStorage(), \n @ref GL::RectangleTexture::setStorage() +@fn_gl_extension{TexStorageMem1D,EXT,external_objects}, \n @fn_gl_extension{TextureStorageMem1D,EXT,external_objects}, \n @fn_gl_extension{TexStorageMem2D,EXT,external_objects}, \n @fn_gl_extension{TextureStorageMem2D,EXT,external_objects}, \n @fn_gl_extension{TexStorageMem3D,EXT,external_objects}, \n @fn_gl_extension{TextureStorageMem3D,EXT,external_objects} | | @fn_gl{TexStorage2DMultisample}, \n `glTextureStorage2DMultisample()`, \n @fn_gl{TexStorage3DMultisample}, \n `glTextureStorage3DMultisample()` | @ref GL::MultisampleTexture::setStorage() +@fn_gl_extension{TexStorageMem2DMultisample,EXT,external_objects}, \n @fn_gl_extension{TextureStorageMem2DMultisample,EXT,external_objects}, \n @fn_gl_extension{TexStorageMem3DMultisample,EXT,external_objects}, \n @fn_gl_extension{TextureStorageMem3DMultisample,EXT,external_objects} | | @fn_gl{TexSubImage1D}, \n `glTextureSubImage1D()`, \n @fn_gl{TexSubImage2D}, \n `glTextureSubImage2D()`, \n @fn_gl{TexSubImage3D}, \n `glTextureSubImage3D()` | @ref GL::Texture::setSubImage(), \n @ref GL::TextureArray::setSubImage(), \n @ref GL::CubeMapTexture::setSubImage(), \n @ref GL::CubeMapTextureArray::setSubImage(), \n @ref GL::RectangleTexture::setSubImage() @fn_gl{TextureBarrier} | @ref GL::Renderer::setTextureBarrier() @fn_gl{TextureView} | @ref GL::Texture::view(), \n @ref GL::TextureArray::view(), \n @ref GL::CubeMapTexture::view(), \n @ref GL::CubeMapTextureArray::view(), @ref GL::MultisampleTexture::view(), \n @ref GL::RectangleTexture::view() @@ -424,6 +441,7 @@ OpenGL function | Matching API OpenGL function | Matching API --------------------------------------- | ------------ +@fn_gl_extension{WaitSemaphore,EXT,external_objects} | | @fn_gl{WaitSync} | | @section opengl-mapping-state Limit and state queries @@ -449,6 +467,10 @@ glGet() parameter | Matching API @def_gl{DEBUG_GROUP_STACK_DEPTH} | | @def_gl{DEPTH_FUNC} | not queryable, @ref GL::Renderer::setDepthFunction() setter only @def_gl{DEPTH_RANGE} | not queryable +@def_gl_extension{DEVICE_LUID,EXT,external_objects_win32} | | +@def_gl_extension{DEVICE_NODE_MASK,EXT,external_objects_win32} | | +@def_gl_extension{DEVICE_UUID,EXT,external_objects} | | +@def_gl_extension{DRIVER_UUID,EXT,external_objects} | | @def_gl{DOUBLEBUFFER}, \n @def_gl{STEREO} | | @def_gl{DRAW_BUFFERi}, \n @def_gl{DRAW_BUFFER}, \n @def_gl{READ_BUFFER} | not queryable, @ref GL::DefaultFramebuffer::mapForDraw(), \n @ref GL::DefaultFramebuffer::mapForRead(), \n @ref GL::Framebuffer::mapForDraw() and \n @ref GL::Framebuffer::mapForRead() setters only @def_gl{DRAW_FRAMEBUFFER_BINDING}, \n @def_gl{READ_FRAMEBUFFER_BINDING} | not queryable but tracked internally @@ -537,6 +559,7 @@ glGet() parameter | Matching API @def_gl{MIN_PROGRAM_TEXEL_OFFSET}, \n @def_gl{MAX_PROGRAM_TEXEL_OFFSET} | @ref GL::AbstractShaderProgram::minTexelOffset(), \n @ref GL::AbstractShaderProgram::maxTexelOffset() @def_gl{MIN_PROGRAM_TEXTURE_GATHER_OFFSET}, \n @def_gl{MAX_PROGRAM_TEXTURE_GATHER_OFFSET} | | @def_gl{MIN_SAMPLE_SHADING_VALUE} | | +@def_gl_extension{NUM_DEVICE_UUIDS,EXT,external_objects} | | @def_gl{NUM_EXTENSIONS} | @ref GL::Context::extensionStrings() @def_gl{NUM_PROGRAM_BINARY_FORMATS}, \n @def_gl{PROGRAM_BINARY_FORMATS} | | @def_gl{NUM_SHADER_BINARY_FORMATS}, \n @def_gl{SHADER_BINARY_FORMATS} | | diff --git a/doc/opengl-support.dox b/doc/opengl-support.dox index f24da41b8..77c34dc9a 100644 --- a/doc/opengl-support.dox +++ b/doc/opengl-support.dox @@ -321,6 +321,12 @@ Extension | Status @gl_extension{EXT,shader_integer_mix} | done (shading language only) @gl_extension{EXT,debug_label} | missing pipeline and sampler label @gl_extension{EXT,debug_marker} | done +@gl_extension2{EXT,memory_object,EXT_external_objects} | | +@gl_extension2{EXT,memory_object_fd,EXT_external_objects_fd} | | +@gl_extension2{EXT,memory_object_win32,EXT_external_objects_win32} | | +@gl_extension2{EXT,semaphore,EXT_external_objects} | | +@gl_extension2{EXT,semaphore_fd,EXT_external_objects_fd} | | +@gl_extension2{EXT,semaphore_win32,EXT_external_objects_win32} | | @gl_extension{EXT,texture_sRGB_R8} | done @gl_extension{EXT,texture_sRGB_RG8} | done @gl_extension{GREMEDY,string_marker} | done @@ -468,6 +474,9 @@ Extension | Status @gl_extension{EXT,multi_draw_arrays} | done @gl_extension{EXT,debug_label} | see above @gl_extension{EXT,debug_marker} | done +@gl_extension2{EXT,memory_object,EXT_external_objects} | | +@gl_extension2{EXT,memory_object_fd,EXT_external_objects_fd} | | +@gl_extension2{EXT,memory_object_win32,EXT_external_objects_win32} | | @gl_extension2{EXT,separate_shader_objects,EXT_separate_shader_objects.gles} | only direct uniform binding @gl_extension{EXT,multisampled_render_to_texture} | only renderbuffer storage @gl_extension{EXT,robustness} | done @@ -480,6 +489,7 @@ Extension | Status @gl_extension{EXT,shader_integer_mix} | done (shading language only) @gl_extension{EXT,texture_view} | done @gl_extension{EXT,draw_elements_base_vertex} | done +@gl_extension{EXT,multi_draw_indirect} | | @gl_extension{EXT,texture_norm16} | done @gl_extension{EXT,texture_sRGB_R8} | done @gl_extension{EXT,texture_sRGB_RG8} | done @@ -487,6 +497,9 @@ Extension | Status @gl_extension{EXT,blend_func_extended} | done @gl_extension{EXT,polygon_offset_clamp} | | @gl_extension{EXT,clip_cull_distance} | done +@gl_extension2{EXT,semaphore,EXT_external_objects} | | +@gl_extension2{EXT,semaphore_fd,EXT_external_objects_fd} | | +@gl_extension2{EXT,semaphore_win32,EXT_external_objects_win32} | | @gl_extension{EXT,texture_compression_rgtc} | done @gl_extension{EXT,texture_compression_bptc} | done @gl_extension{EXT,texture_compression_s3tc_srgb} | done diff --git a/src/Magnum/GL/Context.cpp b/src/Magnum/GL/Context.cpp index e12d97cd6..36ac6c291 100644 --- a/src/Magnum/GL/Context.cpp +++ b/src/Magnum/GL/Context.cpp @@ -96,6 +96,18 @@ constexpr Extension ExtensionList[]{ Extensions::ATI::texture_mirror_once{}, Extensions::EXT::debug_label{}, Extensions::EXT::debug_marker{}, + Extensions::EXT::memory_object{}, + #ifndef CORRADE_TARGET_WINDOWS + Extensions::EXT::memory_object_fd{}, + #else + Extensions::EXT::memory_object_win32{}, + #endif + Extensions::EXT::semaphore{}, + #ifndef CORRADE_TARGET_WINDOWS + Extensions::EXT::semaphore_fd{}, + #else + Extensions::EXT::semaphore_win32{}, + #endif Extensions::EXT::shader_integer_mix{}, Extensions::EXT::texture_compression_dxt1{}, Extensions::EXT::texture_compression_s3tc{}, @@ -396,13 +408,32 @@ constexpr Extension ExtensionList[]{ Extensions::EXT::depth_clamp{}, Extensions::EXT::disjoint_timer_query{}, Extensions::EXT::draw_elements_base_vertex{}, + #ifndef MAGNUM_TARGET_GLES2 + Extensions::EXT::memory_object{}, + #ifndef CORRADE_TARGET_WINDOWS + Extensions::EXT::memory_object_fd{}, + #else + Extensions::EXT::memory_object_win32{}, + #endif + #endif Extensions::EXT::multi_draw_arrays{}, + #ifndef MAGNUM_TARGET_GLES2 + Extensions::EXT::multi_draw_indirect{}, + #endif Extensions::EXT::multisampled_render_to_texture{}, Extensions::EXT::polygon_offset_clamp{}, Extensions::EXT::pvrtc_sRGB{}, Extensions::EXT::read_format_bgra{}, Extensions::EXT::robustness{}, Extensions::EXT::sRGB_write_control{}, + #ifndef MAGNUM_TARGET_GLES2 + Extensions::EXT::semaphore{}, + #ifndef CORRADE_TARGET_WINDOWS + Extensions::EXT::semaphore_fd{}, + #else + Extensions::EXT::semaphore_win32{}, + #endif + #endif Extensions::EXT::separate_shader_objects{}, Extensions::EXT::shader_framebuffer_fetch{}, #ifndef MAGNUM_TARGET_GLES2 diff --git a/src/Magnum/GL/Extensions.h b/src/Magnum/GL/Extensions.h index cbc7c684a..a040e6334 100644 --- a/src/Magnum/GL/Extensions.h +++ b/src/Magnum/GL/Extensions.h @@ -243,37 +243,47 @@ namespace AMD { _extension(153,EXT,shader_integer_mix, GL300, None) // #437 _extension(154,EXT,debug_label, GL210, None) // #439 _extension(155,EXT,debug_marker, GL210, None) // #440 - _extension(156,EXT,texture_sRGB_R8, GL210, None) // #534 - _extension(157,EXT,texture_sRGB_RG8, GL210, None) // #555 + _extension(156,EXT,memory_object, GL210, None) // #503 + _extension(157,EXT,semaphore, GL210, None) // #503 + /* These two pairs appear to be exclusive so they share the same indices */ + #ifndef CORRADE_TARGET_WINDOWS + _extension(158,EXT,memory_object_fd, GL210, None) // #504 + _extension(159,EXT,semaphore_fd, GL210, None) // #504 + #else + _extension(158,EXT,memory_object_win32, GL210, None) // #505 + _extension(159,EXT,semaphore_win32, GL210, None) // #505 + #endif + _extension(160,EXT,texture_sRGB_R8, GL210, None) // #534 + _extension(161,EXT,texture_sRGB_RG8, GL210, None) // #555 } namespace GREMEDY { - _extension(158,GREMEDY,string_marker, GL210, None) // #311 + _extension(162,GREMEDY,string_marker, GL210, None) // #311 } namespace INTEL { - _extension(159,INTEL,blackhole_render, GL300, None) // #521 + _extension(163,INTEL,blackhole_render, GL300, None) // #521 } namespace KHR { - _extension(160,KHR,texture_compression_astc_ldr, GL210, None) // #118 - _extension(161,KHR,texture_compression_astc_hdr, GL210, None) // #118 - _extension(162,KHR,debug, GL210, GL430) // #119 - _extension(163,KHR,context_flush_control, GL210, GL450) // #168 - _extension(164,KHR,robust_buffer_access_behavior, GL320, None) // #169 - _extension(165,KHR,robustness, GL320, GL450) // #170 - _extension(166,KHR,blend_equation_advanced, GL210, None) // #174 - _extension(167,KHR,blend_equation_advanced_coherent, GL210, None) // #174 - _extension(168,KHR,no_error, GL210, GL460) // #175 - _extension(169,KHR,texture_compression_astc_sliced_3d, GL210, None) // #189 - _extension(170,KHR,parallel_shader_compile, GL210, None) // #192 + _extension(170,KHR,texture_compression_astc_ldr, GL210, None) // #118 + _extension(171,KHR,texture_compression_astc_hdr, GL210, None) // #118 + _extension(172,KHR,debug, GL210, GL430) // #119 + _extension(173,KHR,context_flush_control, GL210, GL450) // #168 + _extension(174,KHR,robust_buffer_access_behavior, GL320, None) // #169 + _extension(175,KHR,robustness, GL320, GL450) // #170 + _extension(176,KHR,blend_equation_advanced, GL210, None) // #174 + _extension(177,KHR,blend_equation_advanced_coherent, GL210, None) // #174 + _extension(178,KHR,no_error, GL210, GL460) // #175 + _extension(179,KHR,texture_compression_astc_sliced_3d, GL210, None) // #189 + _extension(180,KHR,parallel_shader_compile, GL210, None) // #192 } namespace MAGNUM { - _extension(171,MAGNUM,shader_vertex_id, GL300, GL300) + _extension(181,MAGNUM,shader_vertex_id, GL300, GL300) } namespace NV { - _extension(175,NV,primitive_restart, GL210, GL310) // #285 - _extension(176,NV,depth_buffer_float, GL210, None) // #334 - _extension(177,NV,conditional_render, GL210, GL300) // #346 + _extension(182,NV,primitive_restart, GL210, GL310) // #285 + _extension(183,NV,depth_buffer_float, GL210, None) // #334 + _extension(184,NV,conditional_render, GL210, GL300) // #346 /* NV_draw_texture not supported */ // #430 - _extension(178,NV,geometry_shader_passthrough, GL330, None) // #470 - _extension(179,NV,sample_locations, GL210, None) // #472 - _extension(180,NV,fragment_shader_barycentric, GL450, None) // #526 + _extension(185,NV,geometry_shader_passthrough, GL330, None) // #470 + _extension(186,NV,sample_locations, GL210, None) // #472 + _extension(187,NV,fragment_shader_barycentric, GL450, None) // #526 } namespace OVR { - _extension(185,OVR,multiview, GL300, None) // #478 - _extension(186,OVR,multiview2, GL300, None) // #479 + _extension(188,OVR,multiview, GL300, None) // #478 + _extension(189,OVR,multiview2, GL300, None) // #479 } #elif defined(MAGNUM_TARGET_WEBGL) namespace ANGLE { @@ -517,24 +527,40 @@ namespace ANDROID { #endif _extension( 74,EXT,draw_elements_base_vertex, GLES200, None) // #204 #ifndef MAGNUM_TARGET_GLES2 - _extension( 75,EXT,texture_norm16, GLES310, None) // #207 - _extension( 76,EXT,texture_sRGB_R8, GLES300, None) // #221 - _extension( 77,EXT,texture_sRGB_RG8, GLES300, None) // #223 - _extension( 78,EXT,buffer_storage, GLES310, None) // #239 + _extension( 75,EXT,multi_draw_indirect, GLES310, None) // #205 + _extension( 76,EXT,texture_norm16, GLES310, None) // #207 + _extension( 77,EXT,texture_sRGB_R8, GLES300, None) // #221 + _extension( 78,EXT,texture_sRGB_RG8, GLES300, None) // #223 + _extension( 79,EXT,buffer_storage, GLES310, None) // #239 + #endif + _extension( 80,EXT,blend_func_extended, GLES200, None) // #247 + _extension( 81,EXT,polygon_offset_clamp, GLES200, None) // #252 + #ifndef MAGNUM_TARGET_GLES2 + _extension( 82,EXT,clip_cull_distance, GLES300, None) // #257 + #endif + /* The extension says "Requires ARB_texture_storage or a version of OpenGL + or OpenGL ES that incorporates it." There's EXT_texture_storage on ES2, + however I don't think ES2 really matters today, so it's just ES3+. */ + _extension( 83,EXT,memory_object, GLES300, None) // #280 + _extension( 84,EXT,semaphore, GLES300, None) // #280 + /* These two pairs appear to be exclusive so they share the same indices */ + #ifndef CORRADE_TARGET_WINDOWS + _extension( 85,EXT,memory_object_fd, GLES300, None) // #281 + _extension( 86,EXT,semaphore_fd, GLES300, None) // #281 + #else + _extension( 85,EXT,memory_object_win32, GLES300, None) // #282 + _extension( 86,EXT,semaphore_win32, GLES300, None) // #282 #endif - _extension( 79,EXT,blend_func_extended, GLES200, None) // #247 - _extension( 80,EXT,polygon_offset_clamp, GLES200, None) // #252 #ifndef MAGNUM_TARGET_GLES2 - _extension( 81,EXT,clip_cull_distance, GLES300, None) // #257 - _extension( 82,EXT,texture_compression_rgtc, GLES300, None) // #286 - _extension( 83,EXT,texture_compression_bptc, GLES300, None) // #287 - #endif - _extension( 84,EXT,texture_compression_s3tc_srgb, GLES200, None) // #289 - _extension( 85,EXT,clip_control, GLES200, None) // #290 - _extension( 86,EXT,texture_mirror_clamp_to_edge, GLES200, None) // #291 - _extension( 87,EXT,depth_clamp, GLES200, None) // #309 + _extension( 87,EXT,texture_compression_rgtc, GLES300, None) // #286 + _extension( 88,EXT,texture_compression_bptc, GLES300, None) // #287 + #endif + _extension( 89,EXT,texture_compression_s3tc_srgb, GLES200, None) // #289 + _extension( 90,EXT,clip_control, GLES200, None) // #290 + _extension( 91,EXT,texture_mirror_clamp_to_edge, GLES200, None) // #291 + _extension( 92,EXT,depth_clamp, GLES200, None) // #309 } namespace IMG { - _extension( 88,IMG,texture_compression_pvrtc, GLES200, None) // #54 + _extension( 93,IMG,texture_compression_pvrtc, GLES200, None) // #54 } namespace INTEL { _extension( 94,INTEL,blackhole_render, /*?*/ GLES200, None) // #300 } namespace KHR { diff --git a/src/MagnumExternal/OpenGL/GL/extensions.txt b/src/MagnumExternal/OpenGL/GL/extensions.txt index 1b5558716..d8ee39561 100644 --- a/src/MagnumExternal/OpenGL/GL/extensions.txt +++ b/src/MagnumExternal/OpenGL/GL/extensions.txt @@ -33,6 +33,12 @@ extension EXT_texture_sRGB_decode optional extension EXT_shader_integer_mix optional extension EXT_debug_label optional extension EXT_debug_marker optional +extension EXT_memory_object optional +extension EXT_memory_object_fd optional +extension EXT_memory_object_win32 optional +extension EXT_semaphore optional +extension EXT_semaphore_fd optional +extension EXT_semaphore_win32 optional extension EXT_texture_sRGB_R8 optional extension EXT_texture_sRGB_RG8 optional extension GREMEDY_string_marker optional diff --git a/src/MagnumExternal/OpenGL/GL/flextGL.cpp b/src/MagnumExternal/OpenGL/GL/flextGL.cpp index 5d5025482..e645783c3 100644 --- a/src/MagnumExternal/OpenGL/GL/flextGL.cpp +++ b/src/MagnumExternal/OpenGL/GL/flextGL.cpp @@ -217,6 +217,50 @@ FlextGL flextGL{ nullptr, nullptr, + /* GL_EXT_memory_object */ + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + + /* GL_EXT_memory_object_fd */ + nullptr, + + /* GL_EXT_memory_object_win32 */ + nullptr, + nullptr, + + /* GL_EXT_semaphore */ + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + + /* GL_EXT_semaphore_fd */ + nullptr, + + /* GL_EXT_semaphore_win32 */ + nullptr, + nullptr, + /* GL_GREMEDY_string_marker */ nullptr, diff --git a/src/MagnumExternal/OpenGL/GL/flextGL.h b/src/MagnumExternal/OpenGL/GL/flextGL.h index b91b5a177..ff0181e55 100644 --- a/src/MagnumExternal/OpenGL/GL/flextGL.h +++ b/src/MagnumExternal/OpenGL/GL/flextGL.h @@ -1713,6 +1713,66 @@ typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum #define GL_SAMPLER 0x82E6 #define GL_TRANSFORM_FEEDBACK 0x8E22 +/* GL_EXT_memory_object */ + +#define GL_TEXTURE_TILING_EXT 0x9580 +#define GL_DEDICATED_MEMORY_OBJECT_EXT 0x9581 +#define GL_PROTECTED_MEMORY_OBJECT_EXT 0x959B +#define GL_NUM_TILING_TYPES_EXT 0x9582 +#define GL_TILING_TYPES_EXT 0x9583 +#define GL_OPTIMAL_TILING_EXT 0x9584 +#define GL_LINEAR_TILING_EXT 0x9585 +#define GL_NUM_DEVICE_UUIDS_EXT 0x9596 +#define GL_DEVICE_UUID_EXT 0x9597 +#define GL_DRIVER_UUID_EXT 0x9598 +#define GL_UUID_SIZE_EXT 16 + +/* GL_EXT_memory_object_fd */ + +#define GL_HANDLE_TYPE_OPAQUE_FD_EXT 0x9586 + +/* GL_EXT_memory_object_win32 */ + +#define GL_HANDLE_TYPE_OPAQUE_WIN32_EXT 0x9587 +#define GL_HANDLE_TYPE_OPAQUE_WIN32_KMT_EXT 0x9588 +#define GL_DEVICE_LUID_EXT 0x9599 +#define GL_DEVICE_NODE_MASK_EXT 0x959A +#define GL_LUID_SIZE_EXT 8 +#define GL_HANDLE_TYPE_D3D12_TILEPOOL_EXT 0x9589 +#define GL_HANDLE_TYPE_D3D12_RESOURCE_EXT 0x958A +#define GL_HANDLE_TYPE_D3D11_IMAGE_EXT 0x958B +#define GL_HANDLE_TYPE_D3D11_IMAGE_KMT_EXT 0x958C + +/* GL_EXT_semaphore */ + +#define GL_NUM_DEVICE_UUIDS_EXT 0x9596 +#define GL_DEVICE_UUID_EXT 0x9597 +#define GL_DRIVER_UUID_EXT 0x9598 +#define GL_UUID_SIZE_EXT 16 +#define GL_LAYOUT_GENERAL_EXT 0x958D +#define GL_LAYOUT_COLOR_ATTACHMENT_EXT 0x958E +#define GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT 0x958F +#define GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT 0x9590 +#define GL_LAYOUT_SHADER_READ_ONLY_EXT 0x9591 +#define GL_LAYOUT_TRANSFER_SRC_EXT 0x9592 +#define GL_LAYOUT_TRANSFER_DST_EXT 0x9593 +#define GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT 0x9530 +#define GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT 0x9531 + +/* GL_EXT_semaphore_fd */ + +#define GL_HANDLE_TYPE_OPAQUE_FD_EXT 0x9586 + +/* GL_EXT_semaphore_win32 */ + +#define GL_HANDLE_TYPE_OPAQUE_WIN32_EXT 0x9587 +#define GL_HANDLE_TYPE_OPAQUE_WIN32_KMT_EXT 0x9588 +#define GL_DEVICE_LUID_EXT 0x9599 +#define GL_DEVICE_NODE_MASK_EXT 0x959A +#define GL_LUID_SIZE_EXT 8 +#define GL_HANDLE_TYPE_D3D12_FENCE_EXT 0x9594 +#define GL_D3D12_FENCE_VALUE_EXT 0x9595 + /* GL_EXT_texture_sRGB_R8 */ #define GL_SR8_EXT 0x8FBD @@ -1885,6 +1945,56 @@ struct FlextGL { void(APIENTRY *PopGroupMarkerEXT)(void); void(APIENTRY *PushGroupMarkerEXT)(GLsizei, const GLchar *); + /* GL_EXT_memory_object */ + + void(APIENTRY *BufferStorageMemEXT)(GLenum, GLsizeiptr, GLuint, GLuint64); + void(APIENTRY *CreateMemoryObjectsEXT)(GLsizei, GLuint *); + void(APIENTRY *DeleteMemoryObjectsEXT)(GLsizei, const GLuint *); + void(APIENTRY *GetMemoryObjectParameterivEXT)(GLuint, GLenum, GLint *); + void(APIENTRY *GetUnsignedBytei_vEXT)(GLenum, GLuint, GLubyte *); + void(APIENTRY *GetUnsignedBytevEXT)(GLenum, GLubyte *); + GLboolean(APIENTRY *IsMemoryObjectEXT)(GLuint); + void(APIENTRY *MemoryObjectParameterivEXT)(GLuint, GLenum, const GLint *); + void(APIENTRY *NamedBufferStorageMemEXT)(GLuint, GLsizeiptr, GLuint, GLuint64); + void(APIENTRY *TexStorageMem1DEXT)(GLenum, GLsizei, GLenum, GLsizei, GLuint, GLuint64); + void(APIENTRY *TexStorageMem2DEXT)(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLuint, GLuint64); + void(APIENTRY *TexStorageMem2DMultisampleEXT)(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLboolean, GLuint, GLuint64); + void(APIENTRY *TexStorageMem3DEXT)(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLuint, GLuint64); + void(APIENTRY *TexStorageMem3DMultisampleEXT)(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLboolean, GLuint, GLuint64); + void(APIENTRY *TextureStorageMem1DEXT)(GLuint, GLsizei, GLenum, GLsizei, GLuint, GLuint64); + void(APIENTRY *TextureStorageMem2DEXT)(GLuint, GLsizei, GLenum, GLsizei, GLsizei, GLuint, GLuint64); + void(APIENTRY *TextureStorageMem2DMultisampleEXT)(GLuint, GLsizei, GLenum, GLsizei, GLsizei, GLboolean, GLuint, GLuint64); + void(APIENTRY *TextureStorageMem3DEXT)(GLuint, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLuint, GLuint64); + void(APIENTRY *TextureStorageMem3DMultisampleEXT)(GLuint, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLboolean, GLuint, GLuint64); + + /* GL_EXT_memory_object_fd */ + + void(APIENTRY *ImportMemoryFdEXT)(GLuint, GLuint64, GLenum, GLint); + + /* GL_EXT_memory_object_win32 */ + + void(APIENTRY *ImportMemoryWin32HandleEXT)(GLuint, GLuint64, GLenum, void *); + void(APIENTRY *ImportMemoryWin32NameEXT)(GLuint, GLuint64, GLenum, const void *); + + /* GL_EXT_semaphore */ + + void(APIENTRY *DeleteSemaphoresEXT)(GLsizei, const GLuint *); + void(APIENTRY *GenSemaphoresEXT)(GLsizei, GLuint *); + void(APIENTRY *GetSemaphoreParameterui64vEXT)(GLuint, GLenum, GLuint64 *); + GLboolean(APIENTRY *IsSemaphoreEXT)(GLuint); + void(APIENTRY *SemaphoreParameterui64vEXT)(GLuint, GLenum, const GLuint64 *); + void(APIENTRY *SignalSemaphoreEXT)(GLuint, GLuint, const GLuint *, GLuint, const GLuint *, const GLenum *); + void(APIENTRY *WaitSemaphoreEXT)(GLuint, GLuint, const GLuint *, GLuint, const GLuint *, const GLenum *); + + /* GL_EXT_semaphore_fd */ + + void(APIENTRY *ImportSemaphoreFdEXT)(GLuint, GLenum, GLint); + + /* GL_EXT_semaphore_win32 */ + + void(APIENTRY *ImportSemaphoreWin32HandleEXT)(GLuint, GLenum, void *); + void(APIENTRY *ImportSemaphoreWin32NameEXT)(GLuint, GLenum, const void *); + /* GL_GREMEDY_string_marker */ void(APIENTRY *StringMarkerGREMEDY)(GLsizei, const void *); @@ -2699,6 +2809,56 @@ extern FLEXTGL_EXPORT FlextGL flextGL; #define glPopGroupMarkerEXT flextGL.PopGroupMarkerEXT #define glPushGroupMarkerEXT flextGL.PushGroupMarkerEXT +/* GL_EXT_memory_object */ + +#define glBufferStorageMemEXT flextGL.BufferStorageMemEXT +#define glCreateMemoryObjectsEXT flextGL.CreateMemoryObjectsEXT +#define glDeleteMemoryObjectsEXT flextGL.DeleteMemoryObjectsEXT +#define glGetMemoryObjectParameterivEXT flextGL.GetMemoryObjectParameterivEXT +#define glGetUnsignedBytei_vEXT flextGL.GetUnsignedBytei_vEXT +#define glGetUnsignedBytevEXT flextGL.GetUnsignedBytevEXT +#define glIsMemoryObjectEXT flextGL.IsMemoryObjectEXT +#define glMemoryObjectParameterivEXT flextGL.MemoryObjectParameterivEXT +#define glNamedBufferStorageMemEXT flextGL.NamedBufferStorageMemEXT +#define glTexStorageMem1DEXT flextGL.TexStorageMem1DEXT +#define glTexStorageMem2DEXT flextGL.TexStorageMem2DEXT +#define glTexStorageMem2DMultisampleEXT flextGL.TexStorageMem2DMultisampleEXT +#define glTexStorageMem3DEXT flextGL.TexStorageMem3DEXT +#define glTexStorageMem3DMultisampleEXT flextGL.TexStorageMem3DMultisampleEXT +#define glTextureStorageMem1DEXT flextGL.TextureStorageMem1DEXT +#define glTextureStorageMem2DEXT flextGL.TextureStorageMem2DEXT +#define glTextureStorageMem2DMultisampleEXT flextGL.TextureStorageMem2DMultisampleEXT +#define glTextureStorageMem3DEXT flextGL.TextureStorageMem3DEXT +#define glTextureStorageMem3DMultisampleEXT flextGL.TextureStorageMem3DMultisampleEXT + +/* GL_EXT_memory_object_fd */ + +#define glImportMemoryFdEXT flextGL.ImportMemoryFdEXT + +/* GL_EXT_memory_object_win32 */ + +#define glImportMemoryWin32HandleEXT flextGL.ImportMemoryWin32HandleEXT +#define glImportMemoryWin32NameEXT flextGL.ImportMemoryWin32NameEXT + +/* GL_EXT_semaphore */ + +#define glDeleteSemaphoresEXT flextGL.DeleteSemaphoresEXT +#define glGenSemaphoresEXT flextGL.GenSemaphoresEXT +#define glGetSemaphoreParameterui64vEXT flextGL.GetSemaphoreParameterui64vEXT +#define glIsSemaphoreEXT flextGL.IsSemaphoreEXT +#define glSemaphoreParameterui64vEXT flextGL.SemaphoreParameterui64vEXT +#define glSignalSemaphoreEXT flextGL.SignalSemaphoreEXT +#define glWaitSemaphoreEXT flextGL.WaitSemaphoreEXT + +/* GL_EXT_semaphore_fd */ + +#define glImportSemaphoreFdEXT flextGL.ImportSemaphoreFdEXT + +/* GL_EXT_semaphore_win32 */ + +#define glImportSemaphoreWin32HandleEXT flextGL.ImportSemaphoreWin32HandleEXT +#define glImportSemaphoreWin32NameEXT flextGL.ImportSemaphoreWin32NameEXT + /* GL_GREMEDY_string_marker */ #define glStringMarkerGREMEDY flextGL.StringMarkerGREMEDY diff --git a/src/MagnumExternal/OpenGL/GL/flextGLPlatform.cpp b/src/MagnumExternal/OpenGL/GL/flextGLPlatform.cpp index c6d00cdd1..42d41a1a2 100644 --- a/src/MagnumExternal/OpenGL/GL/flextGLPlatform.cpp +++ b/src/MagnumExternal/OpenGL/GL/flextGLPlatform.cpp @@ -181,6 +181,50 @@ void flextGLInit(Magnum::GL::Context& context) { flextGL.PopGroupMarkerEXT = reinterpret_cast(loader.load("glPopGroupMarkerEXT")); flextGL.PushGroupMarkerEXT = reinterpret_cast(loader.load("glPushGroupMarkerEXT")); + /* GL_EXT_memory_object */ + flextGL.BufferStorageMemEXT = reinterpret_cast(loader.load("glBufferStorageMemEXT")); + flextGL.CreateMemoryObjectsEXT = reinterpret_cast(loader.load("glCreateMemoryObjectsEXT")); + flextGL.DeleteMemoryObjectsEXT = reinterpret_cast(loader.load("glDeleteMemoryObjectsEXT")); + flextGL.GetMemoryObjectParameterivEXT = reinterpret_cast(loader.load("glGetMemoryObjectParameterivEXT")); + flextGL.GetUnsignedBytei_vEXT = reinterpret_cast(loader.load("glGetUnsignedBytei_vEXT")); + flextGL.GetUnsignedBytevEXT = reinterpret_cast(loader.load("glGetUnsignedBytevEXT")); + flextGL.IsMemoryObjectEXT = reinterpret_cast(loader.load("glIsMemoryObjectEXT")); + flextGL.MemoryObjectParameterivEXT = reinterpret_cast(loader.load("glMemoryObjectParameterivEXT")); + flextGL.NamedBufferStorageMemEXT = reinterpret_cast(loader.load("glNamedBufferStorageMemEXT")); + flextGL.TexStorageMem1DEXT = reinterpret_cast(loader.load("glTexStorageMem1DEXT")); + flextGL.TexStorageMem2DEXT = reinterpret_cast(loader.load("glTexStorageMem2DEXT")); + flextGL.TexStorageMem2DMultisampleEXT = reinterpret_cast(loader.load("glTexStorageMem2DMultisampleEXT")); + flextGL.TexStorageMem3DEXT = reinterpret_cast(loader.load("glTexStorageMem3DEXT")); + flextGL.TexStorageMem3DMultisampleEXT = reinterpret_cast(loader.load("glTexStorageMem3DMultisampleEXT")); + flextGL.TextureStorageMem1DEXT = reinterpret_cast(loader.load("glTextureStorageMem1DEXT")); + flextGL.TextureStorageMem2DEXT = reinterpret_cast(loader.load("glTextureStorageMem2DEXT")); + flextGL.TextureStorageMem2DMultisampleEXT = reinterpret_cast(loader.load("glTextureStorageMem2DMultisampleEXT")); + flextGL.TextureStorageMem3DEXT = reinterpret_cast(loader.load("glTextureStorageMem3DEXT")); + flextGL.TextureStorageMem3DMultisampleEXT = reinterpret_cast(loader.load("glTextureStorageMem3DMultisampleEXT")); + + /* GL_EXT_memory_object_fd */ + flextGL.ImportMemoryFdEXT = reinterpret_cast(loader.load("glImportMemoryFdEXT")); + + /* GL_EXT_memory_object_win32 */ + flextGL.ImportMemoryWin32HandleEXT = reinterpret_cast(loader.load("glImportMemoryWin32HandleEXT")); + flextGL.ImportMemoryWin32NameEXT = reinterpret_cast(loader.load("glImportMemoryWin32NameEXT")); + + /* GL_EXT_semaphore */ + flextGL.DeleteSemaphoresEXT = reinterpret_cast(loader.load("glDeleteSemaphoresEXT")); + flextGL.GenSemaphoresEXT = reinterpret_cast(loader.load("glGenSemaphoresEXT")); + flextGL.GetSemaphoreParameterui64vEXT = reinterpret_cast(loader.load("glGetSemaphoreParameterui64vEXT")); + flextGL.IsSemaphoreEXT = reinterpret_cast(loader.load("glIsSemaphoreEXT")); + flextGL.SemaphoreParameterui64vEXT = reinterpret_cast(loader.load("glSemaphoreParameterui64vEXT")); + flextGL.SignalSemaphoreEXT = reinterpret_cast(loader.load("glSignalSemaphoreEXT")); + flextGL.WaitSemaphoreEXT = reinterpret_cast(loader.load("glWaitSemaphoreEXT")); + + /* GL_EXT_semaphore_fd */ + flextGL.ImportSemaphoreFdEXT = reinterpret_cast(loader.load("glImportSemaphoreFdEXT")); + + /* GL_EXT_semaphore_win32 */ + flextGL.ImportSemaphoreWin32HandleEXT = reinterpret_cast(loader.load("glImportSemaphoreWin32HandleEXT")); + flextGL.ImportSemaphoreWin32NameEXT = reinterpret_cast(loader.load("glImportSemaphoreWin32NameEXT")); + /* GL_GREMEDY_string_marker */ flextGL.StringMarkerGREMEDY = reinterpret_cast(loader.load("glStringMarkerGREMEDY")); diff --git a/src/MagnumExternal/OpenGL/GLES3/extensions.txt b/src/MagnumExternal/OpenGL/GLES3/extensions.txt index 7fc0a853b..11b123122 100644 --- a/src/MagnumExternal/OpenGL/GLES3/extensions.txt +++ b/src/MagnumExternal/OpenGL/GLES3/extensions.txt @@ -61,6 +61,10 @@ extension EXT_texture_compression_s3tc optional extension EXT_pvrtc_sRGB optional extension EXT_shader_integer_mix optional extension EXT_draw_elements_base_vertex optional +extension EXT_memory_object optional +extension EXT_memory_object_fd optional +extension EXT_memory_object_win32 optional +extension EXT_multi_draw_indirect optional extension EXT_texture_norm16 optional extension EXT_texture_sRGB_R8 optional extension EXT_texture_sRGB_RG8 optional @@ -68,6 +72,9 @@ extension EXT_buffer_storage optional extension EXT_blend_func_extended optional extension EXT_polygon_offset_clamp optional extension EXT_clip_cull_distance optional +extension EXT_semaphore optional +extension EXT_semaphore_fd optional +extension EXT_semaphore_win32 optional extension EXT_texture_compression_rgtc optional extension EXT_texture_compression_bptc optional extension EXT_texture_compression_s3tc_srgb optional diff --git a/src/MagnumExternal/OpenGL/GLES3/flextGL.h b/src/MagnumExternal/OpenGL/GLES3/flextGL.h index f8489c9b6..0c142c89f 100644 --- a/src/MagnumExternal/OpenGL/GLES3/flextGL.h +++ b/src/MagnumExternal/OpenGL/GLES3/flextGL.h @@ -1572,6 +1572,36 @@ typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLen #define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV2_IMG 0x93F0 #define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV2_IMG 0x93F1 +/* GL_EXT_memory_object */ + +#define GL_TEXTURE_TILING_EXT 0x9580 +#define GL_DEDICATED_MEMORY_OBJECT_EXT 0x9581 +#define GL_PROTECTED_MEMORY_OBJECT_EXT 0x959B +#define GL_NUM_TILING_TYPES_EXT 0x9582 +#define GL_TILING_TYPES_EXT 0x9583 +#define GL_OPTIMAL_TILING_EXT 0x9584 +#define GL_LINEAR_TILING_EXT 0x9585 +#define GL_NUM_DEVICE_UUIDS_EXT 0x9596 +#define GL_DEVICE_UUID_EXT 0x9597 +#define GL_DRIVER_UUID_EXT 0x9598 +#define GL_UUID_SIZE_EXT 16 + +/* GL_EXT_memory_object_fd */ + +#define GL_HANDLE_TYPE_OPAQUE_FD_EXT 0x9586 + +/* GL_EXT_memory_object_win32 */ + +#define GL_HANDLE_TYPE_OPAQUE_WIN32_EXT 0x9587 +#define GL_HANDLE_TYPE_OPAQUE_WIN32_KMT_EXT 0x9588 +#define GL_DEVICE_LUID_EXT 0x9599 +#define GL_DEVICE_NODE_MASK_EXT 0x959A +#define GL_LUID_SIZE_EXT 8 +#define GL_HANDLE_TYPE_D3D12_TILEPOOL_EXT 0x9589 +#define GL_HANDLE_TYPE_D3D12_RESOURCE_EXT 0x958A +#define GL_HANDLE_TYPE_D3D11_IMAGE_EXT 0x958B +#define GL_HANDLE_TYPE_D3D11_IMAGE_KMT_EXT 0x958C + /* GL_EXT_texture_norm16 */ #define GL_R16_EXT 0x822A @@ -1631,6 +1661,36 @@ typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLen #define GL_CLIP_DISTANCE6_EXT 0x3006 #define GL_CLIP_DISTANCE7_EXT 0x3007 +/* GL_EXT_semaphore */ + +#define GL_NUM_DEVICE_UUIDS_EXT 0x9596 +#define GL_DEVICE_UUID_EXT 0x9597 +#define GL_DRIVER_UUID_EXT 0x9598 +#define GL_UUID_SIZE_EXT 16 +#define GL_LAYOUT_GENERAL_EXT 0x958D +#define GL_LAYOUT_COLOR_ATTACHMENT_EXT 0x958E +#define GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT 0x958F +#define GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT 0x9590 +#define GL_LAYOUT_SHADER_READ_ONLY_EXT 0x9591 +#define GL_LAYOUT_TRANSFER_SRC_EXT 0x9592 +#define GL_LAYOUT_TRANSFER_DST_EXT 0x9593 +#define GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT 0x9530 +#define GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT 0x9531 + +/* GL_EXT_semaphore_fd */ + +#define GL_HANDLE_TYPE_OPAQUE_FD_EXT 0x9586 + +/* GL_EXT_semaphore_win32 */ + +#define GL_HANDLE_TYPE_OPAQUE_WIN32_EXT 0x9587 +#define GL_HANDLE_TYPE_OPAQUE_WIN32_KMT_EXT 0x9588 +#define GL_DEVICE_LUID_EXT 0x9599 +#define GL_DEVICE_NODE_MASK_EXT 0x959A +#define GL_LUID_SIZE_EXT 8 +#define GL_HANDLE_TYPE_D3D12_FENCE_EXT 0x9594 +#define GL_D3D12_FENCE_VALUE_EXT 0x9595 + /* GL_EXT_texture_compression_rgtc */ #define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB @@ -2229,11 +2289,45 @@ struct FlextGL { void(APIENTRY *FramebufferTextureEXT)(GLenum, GLenum, GLuint, GLint); + /* GL_EXT_memory_object */ + + void(APIENTRY *BufferStorageMemEXT)(GLenum, GLsizeiptr, GLuint, GLuint64); + void(APIENTRY *CreateMemoryObjectsEXT)(GLsizei, GLuint *); + void(APIENTRY *DeleteMemoryObjectsEXT)(GLsizei, const GLuint *); + void(APIENTRY *GetMemoryObjectParameterivEXT)(GLuint, GLenum, GLint *); + void(APIENTRY *GetUnsignedBytei_vEXT)(GLenum, GLuint, GLubyte *); + void(APIENTRY *GetUnsignedBytevEXT)(GLenum, GLubyte *); + GLboolean(APIENTRY *IsMemoryObjectEXT)(GLuint); + void(APIENTRY *MemoryObjectParameterivEXT)(GLuint, GLenum, const GLint *); + void(APIENTRY *NamedBufferStorageMemEXT)(GLuint, GLsizeiptr, GLuint, GLuint64); + void(APIENTRY *TexStorageMem2DEXT)(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLuint, GLuint64); + void(APIENTRY *TexStorageMem2DMultisampleEXT)(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLboolean, GLuint, GLuint64); + void(APIENTRY *TexStorageMem3DEXT)(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLuint, GLuint64); + void(APIENTRY *TexStorageMem3DMultisampleEXT)(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLboolean, GLuint, GLuint64); + void(APIENTRY *TextureStorageMem2DEXT)(GLuint, GLsizei, GLenum, GLsizei, GLsizei, GLuint, GLuint64); + void(APIENTRY *TextureStorageMem2DMultisampleEXT)(GLuint, GLsizei, GLenum, GLsizei, GLsizei, GLboolean, GLuint, GLuint64); + void(APIENTRY *TextureStorageMem3DEXT)(GLuint, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLuint, GLuint64); + void(APIENTRY *TextureStorageMem3DMultisampleEXT)(GLuint, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLboolean, GLuint, GLuint64); + + /* GL_EXT_memory_object_fd */ + + void(APIENTRY *ImportMemoryFdEXT)(GLuint, GLuint64, GLenum, GLint); + + /* GL_EXT_memory_object_win32 */ + + void(APIENTRY *ImportMemoryWin32HandleEXT)(GLuint, GLuint64, GLenum, void *); + void(APIENTRY *ImportMemoryWin32NameEXT)(GLuint, GLuint64, GLenum, const void *); + /* GL_EXT_multi_draw_arrays */ void(APIENTRY *MultiDrawArraysEXT)(GLenum, const GLint *, const GLsizei *, GLsizei); void(APIENTRY *MultiDrawElementsEXT)(GLenum, const GLsizei *, GLenum, const void *const*, GLsizei); + /* GL_EXT_multi_draw_indirect */ + + void(APIENTRY *MultiDrawArraysIndirectEXT)(GLenum, const void *, GLsizei, GLsizei); + void(APIENTRY *MultiDrawElementsIndirectEXT)(GLenum, GLenum, const void *, GLsizei, GLsizei); + /* GL_EXT_multisampled_render_to_texture */ void(APIENTRY *FramebufferTexture2DMultisampleEXT)(GLenum, GLenum, GLenum, GLuint, GLint, GLsizei); @@ -2254,6 +2348,25 @@ struct FlextGL { void(APIENTRY *GetnUniformivEXT)(GLuint, GLint, GLsizei, GLint *); void(APIENTRY *ReadnPixelsEXT)(GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLsizei, void *); + /* GL_EXT_semaphore */ + + void(APIENTRY *DeleteSemaphoresEXT)(GLsizei, const GLuint *); + void(APIENTRY *GenSemaphoresEXT)(GLsizei, GLuint *); + void(APIENTRY *GetSemaphoreParameterui64vEXT)(GLuint, GLenum, GLuint64 *); + GLboolean(APIENTRY *IsSemaphoreEXT)(GLuint); + void(APIENTRY *SemaphoreParameterui64vEXT)(GLuint, GLenum, const GLuint64 *); + void(APIENTRY *SignalSemaphoreEXT)(GLuint, GLuint, const GLuint *, GLuint, const GLuint *, const GLenum *); + void(APIENTRY *WaitSemaphoreEXT)(GLuint, GLuint, const GLuint *, GLuint, const GLuint *, const GLenum *); + + /* GL_EXT_semaphore_fd */ + + void(APIENTRY *ImportSemaphoreFdEXT)(GLuint, GLenum, GLint); + + /* GL_EXT_semaphore_win32 */ + + void(APIENTRY *ImportSemaphoreWin32HandleEXT)(GLuint, GLenum, void *); + void(APIENTRY *ImportSemaphoreWin32NameEXT)(GLuint, GLenum, const void *); + /* GL_EXT_separate_shader_objects */ void(APIENTRY *ActiveShaderProgramEXT)(GLuint, GLuint); @@ -2604,11 +2717,45 @@ extern FLEXTGL_EXPORT FlextGL flextGL; #define glFramebufferTextureEXT flextGL.FramebufferTextureEXT +/* GL_EXT_memory_object */ + +#define glBufferStorageMemEXT flextGL.BufferStorageMemEXT +#define glCreateMemoryObjectsEXT flextGL.CreateMemoryObjectsEXT +#define glDeleteMemoryObjectsEXT flextGL.DeleteMemoryObjectsEXT +#define glGetMemoryObjectParameterivEXT flextGL.GetMemoryObjectParameterivEXT +#define glGetUnsignedBytei_vEXT flextGL.GetUnsignedBytei_vEXT +#define glGetUnsignedBytevEXT flextGL.GetUnsignedBytevEXT +#define glIsMemoryObjectEXT flextGL.IsMemoryObjectEXT +#define glMemoryObjectParameterivEXT flextGL.MemoryObjectParameterivEXT +#define glNamedBufferStorageMemEXT flextGL.NamedBufferStorageMemEXT +#define glTexStorageMem2DEXT flextGL.TexStorageMem2DEXT +#define glTexStorageMem2DMultisampleEXT flextGL.TexStorageMem2DMultisampleEXT +#define glTexStorageMem3DEXT flextGL.TexStorageMem3DEXT +#define glTexStorageMem3DMultisampleEXT flextGL.TexStorageMem3DMultisampleEXT +#define glTextureStorageMem2DEXT flextGL.TextureStorageMem2DEXT +#define glTextureStorageMem2DMultisampleEXT flextGL.TextureStorageMem2DMultisampleEXT +#define glTextureStorageMem3DEXT flextGL.TextureStorageMem3DEXT +#define glTextureStorageMem3DMultisampleEXT flextGL.TextureStorageMem3DMultisampleEXT + +/* GL_EXT_memory_object_fd */ + +#define glImportMemoryFdEXT flextGL.ImportMemoryFdEXT + +/* GL_EXT_memory_object_win32 */ + +#define glImportMemoryWin32HandleEXT flextGL.ImportMemoryWin32HandleEXT +#define glImportMemoryWin32NameEXT flextGL.ImportMemoryWin32NameEXT + /* GL_EXT_multi_draw_arrays */ #define glMultiDrawArraysEXT flextGL.MultiDrawArraysEXT #define glMultiDrawElementsEXT flextGL.MultiDrawElementsEXT +/* GL_EXT_multi_draw_indirect */ + +#define glMultiDrawArraysIndirectEXT flextGL.MultiDrawArraysIndirectEXT +#define glMultiDrawElementsIndirectEXT flextGL.MultiDrawElementsIndirectEXT + /* GL_EXT_multisampled_render_to_texture */ #define glFramebufferTexture2DMultisampleEXT flextGL.FramebufferTexture2DMultisampleEXT @@ -2629,6 +2776,25 @@ extern FLEXTGL_EXPORT FlextGL flextGL; #define glGetnUniformivEXT flextGL.GetnUniformivEXT #define glReadnPixelsEXT flextGL.ReadnPixelsEXT +/* GL_EXT_semaphore */ + +#define glDeleteSemaphoresEXT flextGL.DeleteSemaphoresEXT +#define glGenSemaphoresEXT flextGL.GenSemaphoresEXT +#define glGetSemaphoreParameterui64vEXT flextGL.GetSemaphoreParameterui64vEXT +#define glIsSemaphoreEXT flextGL.IsSemaphoreEXT +#define glSemaphoreParameterui64vEXT flextGL.SemaphoreParameterui64vEXT +#define glSignalSemaphoreEXT flextGL.SignalSemaphoreEXT +#define glWaitSemaphoreEXT flextGL.WaitSemaphoreEXT + +/* GL_EXT_semaphore_fd */ + +#define glImportSemaphoreFdEXT flextGL.ImportSemaphoreFdEXT + +/* GL_EXT_semaphore_win32 */ + +#define glImportSemaphoreWin32HandleEXT flextGL.ImportSemaphoreWin32HandleEXT +#define glImportSemaphoreWin32NameEXT flextGL.ImportSemaphoreWin32NameEXT + /* GL_EXT_separate_shader_objects */ #define glActiveShaderProgramEXT flextGL.ActiveShaderProgramEXT diff --git a/src/MagnumExternal/OpenGL/GLES3/flextGLPlatform.cpp b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatform.cpp index 708173460..63cef823b 100644 --- a/src/MagnumExternal/OpenGL/GLES3/flextGLPlatform.cpp +++ b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatform.cpp @@ -225,10 +225,40 @@ void flextGLInit(Magnum::GL::Context&) { /* GL_EXT_geometry_shader */ flextGL.FramebufferTextureEXT = reinterpret_cast(loader.load("glFramebufferTextureEXT")); + /* GL_EXT_memory_object */ + flextGL.BufferStorageMemEXT = reinterpret_cast(loader.load("glBufferStorageMemEXT")); + flextGL.CreateMemoryObjectsEXT = reinterpret_cast(loader.load("glCreateMemoryObjectsEXT")); + flextGL.DeleteMemoryObjectsEXT = reinterpret_cast(loader.load("glDeleteMemoryObjectsEXT")); + flextGL.GetMemoryObjectParameterivEXT = reinterpret_cast(loader.load("glGetMemoryObjectParameterivEXT")); + flextGL.GetUnsignedBytei_vEXT = reinterpret_cast(loader.load("glGetUnsignedBytei_vEXT")); + flextGL.GetUnsignedBytevEXT = reinterpret_cast(loader.load("glGetUnsignedBytevEXT")); + flextGL.IsMemoryObjectEXT = reinterpret_cast(loader.load("glIsMemoryObjectEXT")); + flextGL.MemoryObjectParameterivEXT = reinterpret_cast(loader.load("glMemoryObjectParameterivEXT")); + flextGL.NamedBufferStorageMemEXT = reinterpret_cast(loader.load("glNamedBufferStorageMemEXT")); + flextGL.TexStorageMem2DEXT = reinterpret_cast(loader.load("glTexStorageMem2DEXT")); + flextGL.TexStorageMem2DMultisampleEXT = reinterpret_cast(loader.load("glTexStorageMem2DMultisampleEXT")); + flextGL.TexStorageMem3DEXT = reinterpret_cast(loader.load("glTexStorageMem3DEXT")); + flextGL.TexStorageMem3DMultisampleEXT = reinterpret_cast(loader.load("glTexStorageMem3DMultisampleEXT")); + flextGL.TextureStorageMem2DEXT = reinterpret_cast(loader.load("glTextureStorageMem2DEXT")); + flextGL.TextureStorageMem2DMultisampleEXT = reinterpret_cast(loader.load("glTextureStorageMem2DMultisampleEXT")); + flextGL.TextureStorageMem3DEXT = reinterpret_cast(loader.load("glTextureStorageMem3DEXT")); + flextGL.TextureStorageMem3DMultisampleEXT = reinterpret_cast(loader.load("glTextureStorageMem3DMultisampleEXT")); + + /* GL_EXT_memory_object_fd */ + flextGL.ImportMemoryFdEXT = reinterpret_cast(loader.load("glImportMemoryFdEXT")); + + /* GL_EXT_memory_object_win32 */ + flextGL.ImportMemoryWin32HandleEXT = reinterpret_cast(loader.load("glImportMemoryWin32HandleEXT")); + flextGL.ImportMemoryWin32NameEXT = reinterpret_cast(loader.load("glImportMemoryWin32NameEXT")); + /* GL_EXT_multi_draw_arrays */ flextGL.MultiDrawArraysEXT = reinterpret_cast(loader.load("glMultiDrawArraysEXT")); flextGL.MultiDrawElementsEXT = reinterpret_cast(loader.load("glMultiDrawElementsEXT")); + /* GL_EXT_multi_draw_indirect */ + flextGL.MultiDrawArraysIndirectEXT = reinterpret_cast(loader.load("glMultiDrawArraysIndirectEXT")); + flextGL.MultiDrawElementsIndirectEXT = reinterpret_cast(loader.load("glMultiDrawElementsIndirectEXT")); + /* GL_EXT_multisampled_render_to_texture */ flextGL.FramebufferTexture2DMultisampleEXT = reinterpret_cast(loader.load("glFramebufferTexture2DMultisampleEXT")); flextGL.RenderbufferStorageMultisampleEXT = reinterpret_cast(loader.load("glRenderbufferStorageMultisampleEXT")); @@ -245,6 +275,22 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.GetnUniformivEXT = reinterpret_cast(loader.load("glGetnUniformivEXT")); flextGL.ReadnPixelsEXT = reinterpret_cast(loader.load("glReadnPixelsEXT")); + /* GL_EXT_semaphore */ + flextGL.DeleteSemaphoresEXT = reinterpret_cast(loader.load("glDeleteSemaphoresEXT")); + flextGL.GenSemaphoresEXT = reinterpret_cast(loader.load("glGenSemaphoresEXT")); + flextGL.GetSemaphoreParameterui64vEXT = reinterpret_cast(loader.load("glGetSemaphoreParameterui64vEXT")); + flextGL.IsSemaphoreEXT = reinterpret_cast(loader.load("glIsSemaphoreEXT")); + flextGL.SemaphoreParameterui64vEXT = reinterpret_cast(loader.load("glSemaphoreParameterui64vEXT")); + flextGL.SignalSemaphoreEXT = reinterpret_cast(loader.load("glSignalSemaphoreEXT")); + flextGL.WaitSemaphoreEXT = reinterpret_cast(loader.load("glWaitSemaphoreEXT")); + + /* GL_EXT_semaphore_fd */ + flextGL.ImportSemaphoreFdEXT = reinterpret_cast(loader.load("glImportSemaphoreFdEXT")); + + /* GL_EXT_semaphore_win32 */ + flextGL.ImportSemaphoreWin32HandleEXT = reinterpret_cast(loader.load("glImportSemaphoreWin32HandleEXT")); + flextGL.ImportSemaphoreWin32NameEXT = reinterpret_cast(loader.load("glImportSemaphoreWin32NameEXT")); + /* GL_EXT_separate_shader_objects */ flextGL.ActiveShaderProgramEXT = reinterpret_cast(loader.load("glActiveShaderProgramEXT")); flextGL.BindProgramPipelineEXT = reinterpret_cast(loader.load("glBindProgramPipelineEXT")); diff --git a/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformIOS.cpp b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformIOS.cpp index 080451143..b56ca5bfa 100644 --- a/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformIOS.cpp +++ b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformIOS.cpp @@ -73,8 +73,30 @@ #undef glDrawRangeElementsBaseVertexEXT #undef glMultiDrawElementsBaseVertexEXT #undef glFramebufferTextureEXT +#undef glBufferStorageMemEXT +#undef glCreateMemoryObjectsEXT +#undef glDeleteMemoryObjectsEXT +#undef glGetMemoryObjectParameterivEXT +#undef glGetUnsignedBytei_vEXT +#undef glGetUnsignedBytevEXT +#undef glIsMemoryObjectEXT +#undef glMemoryObjectParameterivEXT +#undef glNamedBufferStorageMemEXT +#undef glTexStorageMem2DEXT +#undef glTexStorageMem2DMultisampleEXT +#undef glTexStorageMem3DEXT +#undef glTexStorageMem3DMultisampleEXT +#undef glTextureStorageMem2DEXT +#undef glTextureStorageMem2DMultisampleEXT +#undef glTextureStorageMem3DEXT +#undef glTextureStorageMem3DMultisampleEXT +#undef glImportMemoryFdEXT +#undef glImportMemoryWin32HandleEXT +#undef glImportMemoryWin32NameEXT #undef glMultiDrawArraysEXT #undef glMultiDrawElementsEXT +#undef glMultiDrawArraysIndirectEXT +#undef glMultiDrawElementsIndirectEXT #undef glFramebufferTexture2DMultisampleEXT #undef glRenderbufferStorageMultisampleEXT #undef glPolygonOffsetClampEXT @@ -83,6 +105,16 @@ #undef glGetnUniformfvEXT #undef glGetnUniformivEXT #undef glReadnPixelsEXT +#undef glDeleteSemaphoresEXT +#undef glGenSemaphoresEXT +#undef glGetSemaphoreParameterui64vEXT +#undef glIsSemaphoreEXT +#undef glSemaphoreParameterui64vEXT +#undef glSignalSemaphoreEXT +#undef glWaitSemaphoreEXT +#undef glImportSemaphoreFdEXT +#undef glImportSemaphoreWin32HandleEXT +#undef glImportSemaphoreWin32NameEXT #undef glActiveShaderProgramEXT #undef glBindProgramPipelineEXT #undef glCreateShaderProgramvEXT @@ -281,12 +313,50 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.FramebufferTextureEXT = reinterpret_cast(glFramebufferTextureEXT); #endif + /* GL_EXT_memory_object */ + #if GL_EXT_memory_object + flextGL.BufferStorageMemEXT = reinterpret_cast(glBufferStorageMemEXT); + flextGL.CreateMemoryObjectsEXT = reinterpret_cast(glCreateMemoryObjectsEXT); + flextGL.DeleteMemoryObjectsEXT = reinterpret_cast(glDeleteMemoryObjectsEXT); + flextGL.GetMemoryObjectParameterivEXT = reinterpret_cast(glGetMemoryObjectParameterivEXT); + flextGL.GetUnsignedBytei_vEXT = reinterpret_cast(glGetUnsignedBytei_vEXT); + flextGL.GetUnsignedBytevEXT = reinterpret_cast(glGetUnsignedBytevEXT); + flextGL.IsMemoryObjectEXT = reinterpret_cast(glIsMemoryObjectEXT); + flextGL.MemoryObjectParameterivEXT = reinterpret_cast(glMemoryObjectParameterivEXT); + flextGL.NamedBufferStorageMemEXT = reinterpret_cast(glNamedBufferStorageMemEXT); + flextGL.TexStorageMem2DEXT = reinterpret_cast(glTexStorageMem2DEXT); + flextGL.TexStorageMem2DMultisampleEXT = reinterpret_cast(glTexStorageMem2DMultisampleEXT); + flextGL.TexStorageMem3DEXT = reinterpret_cast(glTexStorageMem3DEXT); + flextGL.TexStorageMem3DMultisampleEXT = reinterpret_cast(glTexStorageMem3DMultisampleEXT); + flextGL.TextureStorageMem2DEXT = reinterpret_cast(glTextureStorageMem2DEXT); + flextGL.TextureStorageMem2DMultisampleEXT = reinterpret_cast(glTextureStorageMem2DMultisampleEXT); + flextGL.TextureStorageMem3DEXT = reinterpret_cast(glTextureStorageMem3DEXT); + flextGL.TextureStorageMem3DMultisampleEXT = reinterpret_cast(glTextureStorageMem3DMultisampleEXT); + #endif + + /* GL_EXT_memory_object_fd */ + #if GL_EXT_memory_object_fd + flextGL.ImportMemoryFdEXT = reinterpret_cast(glImportMemoryFdEXT); + #endif + + /* GL_EXT_memory_object_win32 */ + #if GL_EXT_memory_object_win32 + flextGL.ImportMemoryWin32HandleEXT = reinterpret_cast(glImportMemoryWin32HandleEXT); + flextGL.ImportMemoryWin32NameEXT = reinterpret_cast(glImportMemoryWin32NameEXT); + #endif + /* GL_EXT_multi_draw_arrays */ #if GL_EXT_multi_draw_arrays flextGL.MultiDrawArraysEXT = reinterpret_cast(glMultiDrawArraysEXT); flextGL.MultiDrawElementsEXT = reinterpret_cast(glMultiDrawElementsEXT); #endif + /* GL_EXT_multi_draw_indirect */ + #if GL_EXT_multi_draw_indirect + flextGL.MultiDrawArraysIndirectEXT = reinterpret_cast(glMultiDrawArraysIndirectEXT); + flextGL.MultiDrawElementsIndirectEXT = reinterpret_cast(glMultiDrawElementsIndirectEXT); + #endif + /* GL_EXT_multisampled_render_to_texture */ #if GL_EXT_multisampled_render_to_texture flextGL.FramebufferTexture2DMultisampleEXT = reinterpret_cast(glFramebufferTexture2DMultisampleEXT); @@ -311,6 +381,28 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.ReadnPixelsEXT = reinterpret_cast(glReadnPixelsEXT); #endif + /* GL_EXT_semaphore */ + #if GL_EXT_semaphore + flextGL.DeleteSemaphoresEXT = reinterpret_cast(glDeleteSemaphoresEXT); + flextGL.GenSemaphoresEXT = reinterpret_cast(glGenSemaphoresEXT); + flextGL.GetSemaphoreParameterui64vEXT = reinterpret_cast(glGetSemaphoreParameterui64vEXT); + flextGL.IsSemaphoreEXT = reinterpret_cast(glIsSemaphoreEXT); + flextGL.SemaphoreParameterui64vEXT = reinterpret_cast(glSemaphoreParameterui64vEXT); + flextGL.SignalSemaphoreEXT = reinterpret_cast(glSignalSemaphoreEXT); + flextGL.WaitSemaphoreEXT = reinterpret_cast(glWaitSemaphoreEXT); + #endif + + /* GL_EXT_semaphore_fd */ + #if GL_EXT_semaphore_fd + flextGL.ImportSemaphoreFdEXT = reinterpret_cast(glImportSemaphoreFdEXT); + #endif + + /* GL_EXT_semaphore_win32 */ + #if GL_EXT_semaphore_win32 + flextGL.ImportSemaphoreWin32HandleEXT = reinterpret_cast(glImportSemaphoreWin32HandleEXT); + flextGL.ImportSemaphoreWin32NameEXT = reinterpret_cast(glImportSemaphoreWin32NameEXT); + #endif + /* GL_EXT_separate_shader_objects */ #if GL_EXT_separate_shader_objects flextGL.ActiveShaderProgramEXT = reinterpret_cast(glActiveShaderProgramEXT); diff --git a/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformWindowsDesktop.cpp b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformWindowsDesktop.cpp index 0f4ce6982..af59e9d31 100644 --- a/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformWindowsDesktop.cpp +++ b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformWindowsDesktop.cpp @@ -427,10 +427,40 @@ void flextGLInit(Magnum::GL::Context&) { /* GL_EXT_geometry_shader */ flextGL.FramebufferTextureEXT = reinterpret_cast(loader.load("glFramebufferTextureEXT")); + /* GL_EXT_memory_object */ + flextGL.BufferStorageMemEXT = reinterpret_cast(loader.load("glBufferStorageMemEXT")); + flextGL.CreateMemoryObjectsEXT = reinterpret_cast(loader.load("glCreateMemoryObjectsEXT")); + flextGL.DeleteMemoryObjectsEXT = reinterpret_cast(loader.load("glDeleteMemoryObjectsEXT")); + flextGL.GetMemoryObjectParameterivEXT = reinterpret_cast(loader.load("glGetMemoryObjectParameterivEXT")); + flextGL.GetUnsignedBytei_vEXT = reinterpret_cast(loader.load("glGetUnsignedBytei_vEXT")); + flextGL.GetUnsignedBytevEXT = reinterpret_cast(loader.load("glGetUnsignedBytevEXT")); + flextGL.IsMemoryObjectEXT = reinterpret_cast(loader.load("glIsMemoryObjectEXT")); + flextGL.MemoryObjectParameterivEXT = reinterpret_cast(loader.load("glMemoryObjectParameterivEXT")); + flextGL.NamedBufferStorageMemEXT = reinterpret_cast(loader.load("glNamedBufferStorageMemEXT")); + flextGL.TexStorageMem2DEXT = reinterpret_cast(loader.load("glTexStorageMem2DEXT")); + flextGL.TexStorageMem2DMultisampleEXT = reinterpret_cast(loader.load("glTexStorageMem2DMultisampleEXT")); + flextGL.TexStorageMem3DEXT = reinterpret_cast(loader.load("glTexStorageMem3DEXT")); + flextGL.TexStorageMem3DMultisampleEXT = reinterpret_cast(loader.load("glTexStorageMem3DMultisampleEXT")); + flextGL.TextureStorageMem2DEXT = reinterpret_cast(loader.load("glTextureStorageMem2DEXT")); + flextGL.TextureStorageMem2DMultisampleEXT = reinterpret_cast(loader.load("glTextureStorageMem2DMultisampleEXT")); + flextGL.TextureStorageMem3DEXT = reinterpret_cast(loader.load("glTextureStorageMem3DEXT")); + flextGL.TextureStorageMem3DMultisampleEXT = reinterpret_cast(loader.load("glTextureStorageMem3DMultisampleEXT")); + + /* GL_EXT_memory_object_fd */ + flextGL.ImportMemoryFdEXT = reinterpret_cast(loader.load("glImportMemoryFdEXT")); + + /* GL_EXT_memory_object_win32 */ + flextGL.ImportMemoryWin32HandleEXT = reinterpret_cast(loader.load("glImportMemoryWin32HandleEXT")); + flextGL.ImportMemoryWin32NameEXT = reinterpret_cast(loader.load("glImportMemoryWin32NameEXT")); + /* GL_EXT_multi_draw_arrays */ flextGL.MultiDrawArraysEXT = reinterpret_cast(loader.load("glMultiDrawArraysEXT")); flextGL.MultiDrawElementsEXT = reinterpret_cast(loader.load("glMultiDrawElementsEXT")); + /* GL_EXT_multi_draw_indirect */ + flextGL.MultiDrawArraysIndirectEXT = reinterpret_cast(loader.load("glMultiDrawArraysIndirectEXT")); + flextGL.MultiDrawElementsIndirectEXT = reinterpret_cast(loader.load("glMultiDrawElementsIndirectEXT")); + /* GL_EXT_multisampled_render_to_texture */ flextGL.FramebufferTexture2DMultisampleEXT = reinterpret_cast(loader.load("glFramebufferTexture2DMultisampleEXT")); flextGL.RenderbufferStorageMultisampleEXT = reinterpret_cast(loader.load("glRenderbufferStorageMultisampleEXT")); @@ -447,6 +477,22 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.GetnUniformivEXT = reinterpret_cast(loader.load("glGetnUniformivEXT")); flextGL.ReadnPixelsEXT = reinterpret_cast(loader.load("glReadnPixelsEXT")); + /* GL_EXT_semaphore */ + flextGL.DeleteSemaphoresEXT = reinterpret_cast(loader.load("glDeleteSemaphoresEXT")); + flextGL.GenSemaphoresEXT = reinterpret_cast(loader.load("glGenSemaphoresEXT")); + flextGL.GetSemaphoreParameterui64vEXT = reinterpret_cast(loader.load("glGetSemaphoreParameterui64vEXT")); + flextGL.IsSemaphoreEXT = reinterpret_cast(loader.load("glIsSemaphoreEXT")); + flextGL.SemaphoreParameterui64vEXT = reinterpret_cast(loader.load("glSemaphoreParameterui64vEXT")); + flextGL.SignalSemaphoreEXT = reinterpret_cast(loader.load("glSignalSemaphoreEXT")); + flextGL.WaitSemaphoreEXT = reinterpret_cast(loader.load("glWaitSemaphoreEXT")); + + /* GL_EXT_semaphore_fd */ + flextGL.ImportSemaphoreFdEXT = reinterpret_cast(loader.load("glImportSemaphoreFdEXT")); + + /* GL_EXT_semaphore_win32 */ + flextGL.ImportSemaphoreWin32HandleEXT = reinterpret_cast(loader.load("glImportSemaphoreWin32HandleEXT")); + flextGL.ImportSemaphoreWin32NameEXT = reinterpret_cast(loader.load("glImportSemaphoreWin32NameEXT")); + /* GL_EXT_separate_shader_objects */ flextGL.ActiveShaderProgramEXT = reinterpret_cast(loader.load("glActiveShaderProgramEXT")); flextGL.BindProgramPipelineEXT = reinterpret_cast(loader.load("glBindProgramPipelineEXT")); diff --git a/src/MagnumExternal/OpenGL/GLES3/flextGLWindowsDesktop.h b/src/MagnumExternal/OpenGL/GLES3/flextGLWindowsDesktop.h index f5c69cf31..6f81c1e7e 100644 --- a/src/MagnumExternal/OpenGL/GLES3/flextGLWindowsDesktop.h +++ b/src/MagnumExternal/OpenGL/GLES3/flextGLWindowsDesktop.h @@ -1565,6 +1565,36 @@ typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLen #define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV2_IMG 0x93F0 #define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV2_IMG 0x93F1 +/* GL_EXT_memory_object */ + +#define GL_TEXTURE_TILING_EXT 0x9580 +#define GL_DEDICATED_MEMORY_OBJECT_EXT 0x9581 +#define GL_PROTECTED_MEMORY_OBJECT_EXT 0x959B +#define GL_NUM_TILING_TYPES_EXT 0x9582 +#define GL_TILING_TYPES_EXT 0x9583 +#define GL_OPTIMAL_TILING_EXT 0x9584 +#define GL_LINEAR_TILING_EXT 0x9585 +#define GL_NUM_DEVICE_UUIDS_EXT 0x9596 +#define GL_DEVICE_UUID_EXT 0x9597 +#define GL_DRIVER_UUID_EXT 0x9598 +#define GL_UUID_SIZE_EXT 16 + +/* GL_EXT_memory_object_fd */ + +#define GL_HANDLE_TYPE_OPAQUE_FD_EXT 0x9586 + +/* GL_EXT_memory_object_win32 */ + +#define GL_HANDLE_TYPE_OPAQUE_WIN32_EXT 0x9587 +#define GL_HANDLE_TYPE_OPAQUE_WIN32_KMT_EXT 0x9588 +#define GL_DEVICE_LUID_EXT 0x9599 +#define GL_DEVICE_NODE_MASK_EXT 0x959A +#define GL_LUID_SIZE_EXT 8 +#define GL_HANDLE_TYPE_D3D12_TILEPOOL_EXT 0x9589 +#define GL_HANDLE_TYPE_D3D12_RESOURCE_EXT 0x958A +#define GL_HANDLE_TYPE_D3D11_IMAGE_EXT 0x958B +#define GL_HANDLE_TYPE_D3D11_IMAGE_KMT_EXT 0x958C + /* GL_EXT_texture_norm16 */ #define GL_R16_EXT 0x822A @@ -1624,6 +1654,36 @@ typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLen #define GL_CLIP_DISTANCE6_EXT 0x3006 #define GL_CLIP_DISTANCE7_EXT 0x3007 +/* GL_EXT_semaphore */ + +#define GL_NUM_DEVICE_UUIDS_EXT 0x9596 +#define GL_DEVICE_UUID_EXT 0x9597 +#define GL_DRIVER_UUID_EXT 0x9598 +#define GL_UUID_SIZE_EXT 16 +#define GL_LAYOUT_GENERAL_EXT 0x958D +#define GL_LAYOUT_COLOR_ATTACHMENT_EXT 0x958E +#define GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT 0x958F +#define GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT 0x9590 +#define GL_LAYOUT_SHADER_READ_ONLY_EXT 0x9591 +#define GL_LAYOUT_TRANSFER_SRC_EXT 0x9592 +#define GL_LAYOUT_TRANSFER_DST_EXT 0x9593 +#define GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT 0x9530 +#define GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT 0x9531 + +/* GL_EXT_semaphore_fd */ + +#define GL_HANDLE_TYPE_OPAQUE_FD_EXT 0x9586 + +/* GL_EXT_semaphore_win32 */ + +#define GL_HANDLE_TYPE_OPAQUE_WIN32_EXT 0x9587 +#define GL_HANDLE_TYPE_OPAQUE_WIN32_KMT_EXT 0x9588 +#define GL_DEVICE_LUID_EXT 0x9599 +#define GL_DEVICE_NODE_MASK_EXT 0x959A +#define GL_LUID_SIZE_EXT 8 +#define GL_HANDLE_TYPE_D3D12_FENCE_EXT 0x9594 +#define GL_D3D12_FENCE_VALUE_EXT 0x9595 + /* GL_EXT_texture_compression_rgtc */ #define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB @@ -2233,11 +2293,45 @@ struct FlextGL { void(APIENTRY *FramebufferTextureEXT)(GLenum, GLenum, GLuint, GLint); + /* GL_EXT_memory_object */ + + void(APIENTRY *BufferStorageMemEXT)(GLenum, GLsizeiptr, GLuint, GLuint64); + void(APIENTRY *CreateMemoryObjectsEXT)(GLsizei, GLuint *); + void(APIENTRY *DeleteMemoryObjectsEXT)(GLsizei, const GLuint *); + void(APIENTRY *GetMemoryObjectParameterivEXT)(GLuint, GLenum, GLint *); + void(APIENTRY *GetUnsignedBytei_vEXT)(GLenum, GLuint, GLubyte *); + void(APIENTRY *GetUnsignedBytevEXT)(GLenum, GLubyte *); + GLboolean(APIENTRY *IsMemoryObjectEXT)(GLuint); + void(APIENTRY *MemoryObjectParameterivEXT)(GLuint, GLenum, const GLint *); + void(APIENTRY *NamedBufferStorageMemEXT)(GLuint, GLsizeiptr, GLuint, GLuint64); + void(APIENTRY *TexStorageMem2DEXT)(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLuint, GLuint64); + void(APIENTRY *TexStorageMem2DMultisampleEXT)(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLboolean, GLuint, GLuint64); + void(APIENTRY *TexStorageMem3DEXT)(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLuint, GLuint64); + void(APIENTRY *TexStorageMem3DMultisampleEXT)(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLboolean, GLuint, GLuint64); + void(APIENTRY *TextureStorageMem2DEXT)(GLuint, GLsizei, GLenum, GLsizei, GLsizei, GLuint, GLuint64); + void(APIENTRY *TextureStorageMem2DMultisampleEXT)(GLuint, GLsizei, GLenum, GLsizei, GLsizei, GLboolean, GLuint, GLuint64); + void(APIENTRY *TextureStorageMem3DEXT)(GLuint, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLuint, GLuint64); + void(APIENTRY *TextureStorageMem3DMultisampleEXT)(GLuint, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLboolean, GLuint, GLuint64); + + /* GL_EXT_memory_object_fd */ + + void(APIENTRY *ImportMemoryFdEXT)(GLuint, GLuint64, GLenum, GLint); + + /* GL_EXT_memory_object_win32 */ + + void(APIENTRY *ImportMemoryWin32HandleEXT)(GLuint, GLuint64, GLenum, void *); + void(APIENTRY *ImportMemoryWin32NameEXT)(GLuint, GLuint64, GLenum, const void *); + /* GL_EXT_multi_draw_arrays */ void(APIENTRY *MultiDrawArraysEXT)(GLenum, const GLint *, const GLsizei *, GLsizei); void(APIENTRY *MultiDrawElementsEXT)(GLenum, const GLsizei *, GLenum, const void *const*, GLsizei); + /* GL_EXT_multi_draw_indirect */ + + void(APIENTRY *MultiDrawArraysIndirectEXT)(GLenum, const void *, GLsizei, GLsizei); + void(APIENTRY *MultiDrawElementsIndirectEXT)(GLenum, GLenum, const void *, GLsizei, GLsizei); + /* GL_EXT_multisampled_render_to_texture */ void(APIENTRY *FramebufferTexture2DMultisampleEXT)(GLenum, GLenum, GLenum, GLuint, GLint, GLsizei); @@ -2258,6 +2352,25 @@ struct FlextGL { void(APIENTRY *GetnUniformivEXT)(GLuint, GLint, GLsizei, GLint *); void(APIENTRY *ReadnPixelsEXT)(GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLsizei, void *); + /* GL_EXT_semaphore */ + + void(APIENTRY *DeleteSemaphoresEXT)(GLsizei, const GLuint *); + void(APIENTRY *GenSemaphoresEXT)(GLsizei, GLuint *); + void(APIENTRY *GetSemaphoreParameterui64vEXT)(GLuint, GLenum, GLuint64 *); + GLboolean(APIENTRY *IsSemaphoreEXT)(GLuint); + void(APIENTRY *SemaphoreParameterui64vEXT)(GLuint, GLenum, const GLuint64 *); + void(APIENTRY *SignalSemaphoreEXT)(GLuint, GLuint, const GLuint *, GLuint, const GLuint *, const GLenum *); + void(APIENTRY *WaitSemaphoreEXT)(GLuint, GLuint, const GLuint *, GLuint, const GLuint *, const GLenum *); + + /* GL_EXT_semaphore_fd */ + + void(APIENTRY *ImportSemaphoreFdEXT)(GLuint, GLenum, GLint); + + /* GL_EXT_semaphore_win32 */ + + void(APIENTRY *ImportSemaphoreWin32HandleEXT)(GLuint, GLenum, void *); + void(APIENTRY *ImportSemaphoreWin32NameEXT)(GLuint, GLenum, const void *); + /* GL_EXT_separate_shader_objects */ void(APIENTRY *ActiveShaderProgramEXT)(GLuint, GLuint); @@ -2812,11 +2925,45 @@ extern FLEXTGL_EXPORT FlextGL flextGL; #define glFramebufferTextureEXT flextGL.FramebufferTextureEXT +/* GL_EXT_memory_object */ + +#define glBufferStorageMemEXT flextGL.BufferStorageMemEXT +#define glCreateMemoryObjectsEXT flextGL.CreateMemoryObjectsEXT +#define glDeleteMemoryObjectsEXT flextGL.DeleteMemoryObjectsEXT +#define glGetMemoryObjectParameterivEXT flextGL.GetMemoryObjectParameterivEXT +#define glGetUnsignedBytei_vEXT flextGL.GetUnsignedBytei_vEXT +#define glGetUnsignedBytevEXT flextGL.GetUnsignedBytevEXT +#define glIsMemoryObjectEXT flextGL.IsMemoryObjectEXT +#define glMemoryObjectParameterivEXT flextGL.MemoryObjectParameterivEXT +#define glNamedBufferStorageMemEXT flextGL.NamedBufferStorageMemEXT +#define glTexStorageMem2DEXT flextGL.TexStorageMem2DEXT +#define glTexStorageMem2DMultisampleEXT flextGL.TexStorageMem2DMultisampleEXT +#define glTexStorageMem3DEXT flextGL.TexStorageMem3DEXT +#define glTexStorageMem3DMultisampleEXT flextGL.TexStorageMem3DMultisampleEXT +#define glTextureStorageMem2DEXT flextGL.TextureStorageMem2DEXT +#define glTextureStorageMem2DMultisampleEXT flextGL.TextureStorageMem2DMultisampleEXT +#define glTextureStorageMem3DEXT flextGL.TextureStorageMem3DEXT +#define glTextureStorageMem3DMultisampleEXT flextGL.TextureStorageMem3DMultisampleEXT + +/* GL_EXT_memory_object_fd */ + +#define glImportMemoryFdEXT flextGL.ImportMemoryFdEXT + +/* GL_EXT_memory_object_win32 */ + +#define glImportMemoryWin32HandleEXT flextGL.ImportMemoryWin32HandleEXT +#define glImportMemoryWin32NameEXT flextGL.ImportMemoryWin32NameEXT + /* GL_EXT_multi_draw_arrays */ #define glMultiDrawArraysEXT flextGL.MultiDrawArraysEXT #define glMultiDrawElementsEXT flextGL.MultiDrawElementsEXT +/* GL_EXT_multi_draw_indirect */ + +#define glMultiDrawArraysIndirectEXT flextGL.MultiDrawArraysIndirectEXT +#define glMultiDrawElementsIndirectEXT flextGL.MultiDrawElementsIndirectEXT + /* GL_EXT_multisampled_render_to_texture */ #define glFramebufferTexture2DMultisampleEXT flextGL.FramebufferTexture2DMultisampleEXT @@ -2837,6 +2984,25 @@ extern FLEXTGL_EXPORT FlextGL flextGL; #define glGetnUniformivEXT flextGL.GetnUniformivEXT #define glReadnPixelsEXT flextGL.ReadnPixelsEXT +/* GL_EXT_semaphore */ + +#define glDeleteSemaphoresEXT flextGL.DeleteSemaphoresEXT +#define glGenSemaphoresEXT flextGL.GenSemaphoresEXT +#define glGetSemaphoreParameterui64vEXT flextGL.GetSemaphoreParameterui64vEXT +#define glIsSemaphoreEXT flextGL.IsSemaphoreEXT +#define glSemaphoreParameterui64vEXT flextGL.SemaphoreParameterui64vEXT +#define glSignalSemaphoreEXT flextGL.SignalSemaphoreEXT +#define glWaitSemaphoreEXT flextGL.WaitSemaphoreEXT + +/* GL_EXT_semaphore_fd */ + +#define glImportSemaphoreFdEXT flextGL.ImportSemaphoreFdEXT + +/* GL_EXT_semaphore_win32 */ + +#define glImportSemaphoreWin32HandleEXT flextGL.ImportSemaphoreWin32HandleEXT +#define glImportSemaphoreWin32NameEXT flextGL.ImportSemaphoreWin32NameEXT + /* GL_EXT_separate_shader_objects */ #define glActiveShaderProgramEXT flextGL.ActiveShaderProgramEXT