From 20a499aa0f6735520365350b77fc98bd4af54375 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sun, 25 Feb 2018 01:30:24 +0100 Subject: [PATCH] Minimal support for OpenGL 4.6. --- Doxyfile | 1 + Doxyfile-mcss | 1 + Doxyfile-public | 1 + doc/opengl-support.dox | 25 +++++++++++++++++++------ doc/opengl.dox | 5 +++++ src/Magnum/Context.cpp | 22 +++++++++++++++------- src/Magnum/Extensions.h | 14 ++++++++++---- src/Magnum/Platform/magnum-info.cpp | 1 + src/Magnum/Shader.cpp | 1 + src/Magnum/Version.cpp | 1 + src/Magnum/Version.h | 1 + 11 files changed, 56 insertions(+), 17 deletions(-) diff --git a/Doxyfile b/Doxyfile index afcc8888b..156ee9045 100644 --- a/Doxyfile +++ b/Doxyfile @@ -261,6 +261,7 @@ ALIASES = \ "requires_gl43=@xrefitem requires-gl43 \"Requires OpenGL 4.3\" \"Functionality requiring OpenGL 4.3\"" \ "requires_gl44=@xrefitem requires-gl44 \"Requires OpenGL 4.4\" \"Functionality requiring OpenGL 4.4\"" \ "requires_gl45=@xrefitem requires-gl45 \"Requires OpenGL 4.5\" \"Functionality requiring OpenGL 4.5\"" \ + "requires_gl46=@xrefitem requires-gl46 \"Requires OpenGL 4.6\" \"Functionality requiring OpenGL 4.6\"" \ "requires_extension=@xrefitem requires-extension \"Requires OpenGL extension\" \"Functionality requiring specific OpenGL extension\"" \ "requires_gl=@xrefitem requires-gl \"Requires desktop OpenGL\" \"Functionality requiring desktop OpenGL\"" \ "extension{2}=\1_\2" \ diff --git a/Doxyfile-mcss b/Doxyfile-mcss index 4a46522a6..b3fdc4c54 100644 --- a/Doxyfile-mcss +++ b/Doxyfile-mcss @@ -40,6 +40,7 @@ ALIASES = \ "requires_gl43=@xrefitem requires-gl43 \"Requires OpenGL 4.3\" \"Functionality requiring OpenGL 4.3\"" \ "requires_gl44=@xrefitem requires-gl44 \"Requires OpenGL 4.4\" \"Functionality requiring OpenGL 4.4\"" \ "requires_gl45=@xrefitem requires-gl45 \"Requires OpenGL 4.5\" \"Functionality requiring OpenGL 4.5\"" \ + "requires_gl46=@xrefitem requires-gl46 \"Requires OpenGL 4.6\" \"Functionality requiring OpenGL 4.6\"" \ "requires_extension=@xrefitem requires-extension \"Requires OpenGL extension\" \"Functionality requiring specific OpenGL extension\"" \ "requires_gl=@xrefitem requires-gl \"Requires desktop OpenGL\" \"Functionality requiring desktop OpenGL\"" \ "extension{2}=@m_class{m-dox-external} \1_\2" \ diff --git a/Doxyfile-public b/Doxyfile-public index d6e6c172d..552b2d901 100644 --- a/Doxyfile-public +++ b/Doxyfile-public @@ -37,6 +37,7 @@ ALIASES = \ "requires_gl43=@xrefitem requires-gl43 \"Requires OpenGL 4.3\" \"Functionality requiring OpenGL 4.3\"" \ "requires_gl44=@xrefitem requires-gl44 \"Requires OpenGL 4.4\" \"Functionality requiring OpenGL 4.4\"" \ "requires_gl45=@xrefitem requires-gl45 \"Requires OpenGL 4.5\" \"Functionality requiring OpenGL 4.5\"" \ + "requires_gl46=@xrefitem requires-gl46 \"Requires OpenGL 4.6\" \"Functionality requiring OpenGL 4.6\"" \ "requires_extension=@xrefitem requires-extension \"Requires OpenGL extension\" \"Functionality requiring specific OpenGL extension\"" \ "requires_gl=@xrefitem requires-gl \"Requires desktop OpenGL\" \"Functionality requiring desktop OpenGL\"" \ "extension{2}=@m_class{m-dox-external} \1_\2" \ diff --git a/doc/opengl-support.dox b/doc/opengl-support.dox index 8464783c7..808d4b572 100644 --- a/doc/opengl-support.dox +++ b/doc/opengl-support.dox @@ -249,6 +249,25 @@ GLSL 4.50 | done @extension{KHR,context_flush_control} | | @extension{KHR,robustness} | | +@subsection opengl-support-46 OpenGL 4.6 + +@m_class{m-fullwidth} + +Extension | Status +------------------------------------------- | ------ +GLSL 4.60 | done +@extension{ARB,indirect_parameters} | | +@extension{ARB,shader_draw_parameters} | done (shading language only) +@extension{ARB,shader_group_vote} | done (shading language only) +@extension{ARB,pipeline_statistics_query} | | +@extension{ARB,transform_feedback_overflow_query} | done +@extension{ARB,shader_atomic_counter_ops} | done (shading language only) +@extension{ARB,gl_spirv} | | +@extension{ARB,polygon_offset_clamp} | | +@extension{ARB,spirv_extensions} | | +@extension{ARB,texture_filter_anisotropic} | | +@extension{KHR,no_error} | done + @subsection opengl-support-extensions ARB / Khronos OpenGL extensions @m_class{m-fullwidth} @@ -260,20 +279,14 @@ Extension | Status @extension{ARB,robustness_isolation} | done @extension{ARB,bindless_texture} | | @extension{ARB,compute_variable_group_size} | | -@extension{ARB,indirect_parameters} | | @extension{ARB,seamless_cubemap_per_texture} | | -@extension{ARB,shader_draw_parameters} | done (shading language only) -@extension{ARB,shader_group_vote} | done (shading language only) @extension{ARB,sparse_texture} | | -@extension{ARB,pipeline_statistics_query} | | @extension{ARB,sparse_buffer} | | -@extension{ARB,transform_feedback_overflow_query} | done @extension{ARB,ES3_2_compatibility} | | @extension2{KHR,texture_compression_astc_ldr,texture_compression_astc_hdr} | done @extension{KHR,robust_buffer_access_behavior} | done (nothing to do) @extension{KHR,blend_equation_advanced} | done @extension2{KHR,blend_equation_advanced_coherent,blend_equation_advanced} | done -@extension{KHR,no_error} | done @subsection opengl-support-extensions-vendor Vendor OpenGL extensions diff --git a/doc/opengl.dox b/doc/opengl.dox index f6913132d..0e348aabd 100644 --- a/doc/opengl.dox +++ b/doc/opengl.dox @@ -62,6 +62,7 @@ is supported on older Intel GPUs even if they are capable of OpenGL 2.1 only). - @subpage requires-gl43 - @subpage requires-gl44 - @subpage requires-gl45 +- @subpage requires-gl46 - @subpage requires-extension - @subpage requires-gl - @subpage requires-gles20 @@ -117,6 +118,10 @@ is supported on older Intel GPUs even if they are capable of OpenGL 2.1 only). * @m_footernavigation */ +/** @page requires-gl46 Functionality requiring OpenGL 4.6 + * @m_footernavigation + */ + /** @page requires-extension Functionality requiring specific OpenGL extension * @m_footernavigation */ diff --git a/src/Magnum/Context.cpp b/src/Magnum/Context.cpp index 4da7a8d8f..3a7ad2385 100644 --- a/src/Magnum/Context.cpp +++ b/src/Magnum/Context.cpp @@ -79,14 +79,9 @@ const std::vector& Extension::extensions(Version version) { _extension(GL,ARB,robustness_share_group_isolation), _extension(GL,ARB,bindless_texture), _extension(GL,ARB,compute_variable_group_size), - _extension(GL,ARB,indirect_parameters), _extension(GL,ARB,seamless_cubemap_per_texture), - _extension(GL,ARB,shader_draw_parameters), - _extension(GL,ARB,shader_group_vote), _extension(GL,ARB,sparse_texture), - _extension(GL,ARB,pipeline_statistics_query), _extension(GL,ARB,sparse_buffer), - _extension(GL,ARB,transform_feedback_overflow_query), _extension(GL,ARB,ES3_2_compatibility), _extension(GL,ATI,texture_mirror_once), _extension(GL,EXT,texture_filter_anisotropic), @@ -101,8 +96,7 @@ const std::vector& Extension::extensions(Version version) { _extension(GL,KHR,texture_compression_astc_ldr), _extension(GL,KHR,texture_compression_astc_hdr), _extension(GL,KHR,blend_equation_advanced), - _extension(GL,KHR,blend_equation_advanced_coherent), - _extension(GL,KHR,no_error)}; + _extension(GL,KHR,blend_equation_advanced_coherent)}; static const std::vector extensions300{ _extension(GL,ARB,map_buffer_range), _extension(GL,ARB,color_buffer_float), @@ -232,6 +226,18 @@ const std::vector& Extension::extensions(Version version) { _extension(GL,ARB,texture_barrier), _extension(GL,KHR,context_flush_control), _extension(GL,KHR,robustness)}; + static const std::vector extensions460{ + _extension(GL,ARB,indirect_parameters), + _extension(GL,ARB,shader_draw_parameters), + _extension(GL,ARB,shader_group_vote), + _extension(GL,ARB,pipeline_statistics_query), + _extension(GL,ARB,transform_feedback_overflow_query), + _extension(GL,ARB,shader_atomic_counter_ops), + _extension(GL,ARB,gl_spirv), + _extension(GL,ARB,polygon_offset_clamp), + _extension(GL,ARB,spirv_extensions), + _extension(GL,ARB,texture_filter_anisotropic), + _extension(GL,KHR,no_error)}; #elif defined(MAGNUM_TARGET_WEBGL) static const std::vector extensions{ _extension(GL,EXT,texture_filter_anisotropic), @@ -282,6 +288,7 @@ const std::vector& Extension::extensions(Version version) { #ifndef MAGNUM_TARGET_GLES2 _extension(GL,EXT,shader_integer_mix), #endif + _extension(GL,EXT,polygon_offset_clamp), _extension(GL,KHR,texture_compression_astc_hdr), _extension(GL,KHR,blend_equation_advanced_coherent), _extension(GL,KHR,context_flush_control), @@ -402,6 +409,7 @@ const std::vector& Extension::extensions(Version version) { case Version::GL430: return extensions430; case Version::GL440: return extensions440; case Version::GL450: return extensions450; + case Version::GL460: return extensions460; case Version::GLES200: case Version::GLES300: case Version::GLES310: diff --git a/src/Magnum/Extensions.h b/src/Magnum/Extensions.h index 5b18e2938..9c03f1834 100644 --- a/src/Magnum/Extensions.h +++ b/src/Magnum/Extensions.h @@ -193,10 +193,10 @@ namespace GL { _extension(GL,ARB,vertex_type_10f_11f_11f_rev, GL300, GL440) // #151 _extension(GL,ARB,bindless_texture, GL400, None) // #152 _extension(GL,ARB,compute_variable_group_size, GL420, None) // #153 - _extension(GL,ARB,indirect_parameters, GL420, None) // #154 + _extension(GL,ARB,indirect_parameters, GL420, GL460) // #154 _extension(GL,ARB,seamless_cubemap_per_texture, GL320, None) // #155 - _extension(GL,ARB,shader_draw_parameters, GL310, None) // #156 - _extension(GL,ARB,shader_group_vote, GL420, None) // #157 + _extension(GL,ARB,shader_draw_parameters, GL310, GL460) // #156 + _extension(GL,ARB,shader_group_vote, GL420, GL460) // #157 _extension(GL,ARB,sparse_texture, GL210, None) // #158 _extension(GL,ARB,ES3_1_compatibility, GL440, GL450) // #159 _extension(GL,ARB,clip_control, GL210, GL450) // #160 @@ -207,10 +207,15 @@ namespace GL { _extension(GL,ARB,get_texture_sub_image, GL210, GL450) // #165 _extension(GL,ARB,shader_texture_image_samples, GL430, GL450) // #166 _extension(GL,ARB,texture_barrier, GL210, GL450) // #167 - _extension(GL,ARB,pipeline_statistics_query, GL300, None) // #171 + _extension(GL,ARB,pipeline_statistics_query, GL300, GL460) // #171 _extension(GL,ARB,sparse_buffer, GL210, None) // #172 _extension(GL,ARB,transform_feedback_overflow_query, GL300, None) // #173 _extension(GL,ARB,ES3_2_compatibility, GL450, None) // #177 + _extension(GL,ARB,shader_atomic_counter_ops, GL300, GL460) // #182 + _extension(GL,ARB,gl_spirv, GL330, GL460) // #190 + _extension(GL,ARB,polygon_offset_clamp, GL330, GL460) // #193 + _extension(GL,ARB,spirv_extensions, GL330, GL460) // #194 + _extension(GL,ARB,texture_filter_anisotropic, GL210, GL460) // #195 } namespace ATI { _extension(GL,ATI,texture_mirror_once, GL210, None) // #221 } namespace EXT { @@ -386,6 +391,7 @@ namespace GL { _extension(GL,EXT,texture_cube_map_array, GLES310, GLES320) // #184 _extension(GL,EXT,primitive_bounding_box, GLES310, GLES320) // #186 #endif + _extension(GL,EXT,polygon_offset_clamp, GLES200, None) // #252 } namespace KHR { _extension(GL,KHR,texture_compression_astc_ldr, GLES200, GLES320) // #117 _extension(GL,KHR,texture_compression_astc_hdr, GLES200, None) // #117 diff --git a/src/Magnum/Platform/magnum-info.cpp b/src/Magnum/Platform/magnum-info.cpp index c66a224eb..20fb8595a 100644 --- a/src/Magnum/Platform/magnum-info.cpp +++ b/src/Magnum/Platform/magnum-info.cpp @@ -295,6 +295,7 @@ MagnumInfo::MagnumInfo(const Arguments& arguments): Platform::WindowlessApplicat Version::GL430, Version::GL440, Version::GL450, + Version::GL460, #else Version::GLES300, #ifndef MAGNUM_TARGET_WEBGL diff --git a/src/Magnum/Shader.cpp b/src/Magnum/Shader.cpp index 56ab2ab3c..702cdd3ad 100644 --- a/src/Magnum/Shader.cpp +++ b/src/Magnum/Shader.cpp @@ -661,6 +661,7 @@ Shader::Shader(const Version version, const Type type): _type(type), _id(0) { case Version::GL430: _sources.emplace_back("#version 430\n"); return; case Version::GL440: _sources.emplace_back("#version 440\n"); return; case Version::GL450: _sources.emplace_back("#version 450\n"); return; + case Version::GL460: _sources.emplace_back("#version 460\n"); return; #endif /* `#version 100` really is GLSL ES 1.00 and *not* GLSL 1.00. What a mess. */ case Version::GLES200: _sources.emplace_back("#version 100\n"); return; diff --git a/src/Magnum/Version.cpp b/src/Magnum/Version.cpp index 138274293..6b99e424a 100644 --- a/src/Magnum/Version.cpp +++ b/src/Magnum/Version.cpp @@ -47,6 +47,7 @@ Debug& operator<<(Debug& debug, Version value) { _c(GL430, "OpenGL 4.3") _c(GL440, "OpenGL 4.4") _c(GL450, "OpenGL 4.5") + _c(GL460, "OpenGL 4.6") #endif #ifdef MAGNUM_TARGET_WEBGL _c(GLES200, "WebGL 1.0") diff --git a/src/Magnum/Version.h b/src/Magnum/Version.h index 3d2a704f8..0d4fbef69 100644 --- a/src/Magnum/Version.h +++ b/src/Magnum/Version.h @@ -61,6 +61,7 @@ enum class Version: Int { GL430 = 430, /**< OpenGL 4.3, GLSL 4.30 */ GL440 = 440, /**< OpenGL 4.4, GLSL 4.40 */ GL450 = 450, /**< OpenGL 4.5, GLSL 4.50 */ + GL460 = 460, /**< OpenGL 4.6, GLSL 4.60 */ #endif /**