From 7d0a8215d38284f7b7ae041cfbb19d410e5988a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Wed, 6 Mar 2024 10:43:56 +0100 Subject: [PATCH] GL: recognize and implement INTEL_blackhole_render. --- doc/changelog.dox | 2 + doc/opengl-support.dox | 2 + src/Magnum/GL/Context.cpp | 2 + src/Magnum/GL/Extensions.h | 136 +++++++++--------- src/Magnum/GL/GL.h | 2 +- src/Magnum/GL/Renderer.h | 14 ++ src/MagnumExternal/OpenGL/GL/extensions.txt | 1 + src/MagnumExternal/OpenGL/GL/flextGL.h | 4 + .../OpenGL/GLES2/extensions.txt | 1 + src/MagnumExternal/OpenGL/GLES2/flextGL.h | 4 + .../OpenGL/GLES2/flextGLWindowsDesktop.h | 4 + .../OpenGL/GLES3/extensions.txt | 1 + src/MagnumExternal/OpenGL/GLES3/flextGL.h | 4 + .../OpenGL/GLES3/flextGLWindowsDesktop.h | 4 + 14 files changed, 114 insertions(+), 67 deletions(-) diff --git a/doc/changelog.dox b/doc/changelog.dox index 5c50dc61b..96c11b0d4 100644 --- a/doc/changelog.dox +++ b/doc/changelog.dox @@ -159,6 +159,8 @@ See also: ES and @webgl_extension{WEBGL,stencil_texturing} WebGL extensions - Implemented the @gl_extension{EXT,blend_func_extended} ES and @webgl_extension{WEBGL,blend_func_extended} WebGL extensions +- Implemented the @gl_extension{INTEL,blackhole_render} desktop and ES + extension - Recognizing @webgl_extension{EXT,float_blend} and @webgl_extension{WEBGL,debug_shaders} WebGL extensions, no implementation done yet diff --git a/doc/opengl-support.dox b/doc/opengl-support.dox index 82cbb8e7c..90f52c02e 100644 --- a/doc/opengl-support.dox +++ b/doc/opengl-support.dox @@ -323,6 +323,7 @@ Extension | Status @gl_extension{EXT,texture_sRGB_R8} | done @gl_extension{EXT,texture_sRGB_RG8} | done @gl_extension{GREMEDY,string_marker} | done +@gl_extension{INTEL,blackhole_render} | done @gl_extension{NV,geometry_shader_passthrough} | done (shading language only) @gl_extension{NV,sample_locations} | | @gl_extension{NV,fragment_shader_barycentric} | done (shading language only) @@ -492,6 +493,7 @@ Extension | Status @gl_extension{EXT,texture_mirror_clamp_to_edge} | done @gl_extension{EXT,depth_clamp} | done @gl_extension{IMG,texture_compression_pvrtc} | done +@gl_extension{INTEL,blackhole_render} | done @gl_extension2{KHR,texture_compression_astc_hdr,KHR_texture_compression_astc_hdr} | done @gl_extension2{KHR,blend_equation_advanced_coherent,KHR_blend_equation_advanced} | done @gl_extension{KHR,context_flush_control} | | diff --git a/src/Magnum/GL/Context.cpp b/src/Magnum/GL/Context.cpp index 1d6c6ea41..57dea1ab3 100644 --- a/src/Magnum/GL/Context.cpp +++ b/src/Magnum/GL/Context.cpp @@ -104,6 +104,7 @@ constexpr Extension ExtensionList[]{ Extensions::EXT::texture_sRGB_RG8{}, Extensions::EXT::texture_sRGB_decode{}, Extensions::GREMEDY::string_marker{}, + Extensions::INTEL::blackhole_render{}, Extensions::KHR::blend_equation_advanced{}, Extensions::KHR::blend_equation_advanced_coherent{}, Extensions::KHR::parallel_shader_compile{}, @@ -428,6 +429,7 @@ constexpr Extension ExtensionList[]{ Extensions::EXT::texture_view{}, #endif Extensions::IMG::texture_compression_pvrtc{}, + Extensions::INTEL::blackhole_render{}, Extensions::KHR::blend_equation_advanced_coherent{}, Extensions::KHR::context_flush_control{}, Extensions::KHR::no_error{}, diff --git a/src/Magnum/GL/Extensions.h b/src/Magnum/GL/Extensions.h index 410e067fc..9de9cc8ed 100644 --- a/src/Magnum/GL/Extensions.h +++ b/src/Magnum/GL/Extensions.h @@ -245,6 +245,8 @@ namespace AMD { _extension(157,EXT,texture_sRGB_RG8, GL210, None) // #555 } namespace GREMEDY { _extension(158,GREMEDY,string_marker, GL210, None) // #311 +} namespace INTEL { + _extension(159,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 @@ -528,102 +530,104 @@ namespace ANDROID { _extension( 87,EXT,depth_clamp, GLES200, None) // #309 } namespace IMG { _extension( 88,IMG,texture_compression_pvrtc, GLES200, None) // #54 +} namespace INTEL { + _extension( 94,INTEL,blackhole_render, /*?*/ GLES200, None) // #300 } namespace KHR { - _extension( 89,KHR,texture_compression_astc_ldr,GLES200, GLES320) // #117 - _extension( 90,KHR,texture_compression_astc_hdr,GLES200, None) // #117 - _extension( 91,KHR,debug, GLES200, GLES320) // #118 - _extension( 92,KHR,blend_equation_advanced, GLES200, GLES320) // #168 - _extension( 93,KHR,blend_equation_advanced_coherent, GLES200, None) // #168 - _extension( 94,KHR,robustness, GLES200, GLES320) // #170 - _extension( 95,KHR,robust_buffer_access_behavior, GLES200, GLES320) // #189 - _extension( 96,KHR,context_flush_control, GLES200, None) // #191 - _extension( 97,KHR,no_error, GLES200, None) // #243 - _extension( 98,KHR,texture_compression_astc_sliced_3d, GLES200, None) // #249 - _extension( 99,KHR,parallel_shader_compile, GLES200, None) // #288 + _extension( 95,KHR,texture_compression_astc_ldr,GLES200, GLES320) // #117 + _extension( 96,KHR,texture_compression_astc_hdr,GLES200, None) // #117 + _extension( 97,KHR,debug, GLES200, GLES320) // #118 + _extension( 98,KHR,blend_equation_advanced, GLES200, GLES320) // #168 + _extension( 99,KHR,blend_equation_advanced_coherent, GLES200, None) // #168 + _extension(100,KHR,robustness, GLES200, GLES320) // #170 + _extension(101,KHR,robust_buffer_access_behavior, GLES200, GLES320) // #189 + _extension(102,KHR,context_flush_control, GLES200, None) // #191 + _extension(103,KHR,no_error, GLES200, None) // #243 + _extension(104,KHR,texture_compression_astc_sliced_3d, GLES200, None) // #249 + _extension(105,KHR,parallel_shader_compile, GLES200, None) // #288 } namespace NV { #ifdef MAGNUM_TARGET_GLES2 - _extension(100,NV,draw_buffers, GLES200, GLES300) // #91 - _extension(101,NV,fbo_color_attachments, GLES200, GLES300) // #92 - _extension(102,NV,read_buffer, GLES200, GLES300) // #93 - #endif - _extension(103,NV,read_buffer_front, GLES200, None) // #93 - _extension(104,NV,read_depth, GLES200, None) // #94 - _extension(105,NV,read_stencil, GLES200, None) // #94 - _extension(106,NV,read_depth_stencil, GLES200, None) // #94 + _extension(110,NV,draw_buffers, GLES200, GLES300) // #91 + _extension(111,NV,fbo_color_attachments, GLES200, GLES300) // #92 + _extension(112,NV,read_buffer, GLES200, GLES300) // #93 + #endif + _extension(113,NV,read_buffer_front, GLES200, None) // #93 + _extension(114,NV,read_depth, GLES200, None) // #94 + _extension(115,NV,read_stencil, GLES200, None) // #94 + _extension(116,NV,read_depth_stencil, GLES200, None) // #94 #ifdef MAGNUM_TARGET_GLES2 - _extension(107,NV,pack_subimage, GLES200, GLES300) // #132 - _extension(108,NV,draw_instanced, GLES200, GLES300) // #141 - _extension(109,NV,framebuffer_blit, GLES200, GLES300) // #142 - _extension(110,NV,framebuffer_multisample, GLES200, GLES300) // #143 - _extension(111,NV,instanced_arrays, GLES200, GLES300) // #145 - _extension(112,NV,shadow_samplers_array, GLES200, GLES300) // #146 - _extension(113,NV,shadow_samplers_cube, GLES200, GLES300) // #147 - #endif - _extension(114,NV,texture_border_clamp, GLES200, None) // #149 + _extension(117,NV,pack_subimage, GLES200, GLES300) // #132 + _extension(118,NV,draw_instanced, GLES200, GLES300) // #141 + _extension(119,NV,framebuffer_blit, GLES200, GLES300) // #142 + _extension(120,NV,framebuffer_multisample, GLES200, GLES300) // #143 + _extension(121,NV,instanced_arrays, GLES200, GLES300) // #145 + _extension(122,NV,shadow_samplers_array, GLES200, GLES300) // #146 + _extension(123,NV,shadow_samplers_cube, GLES200, GLES300) // #147 + #endif + _extension(124,NV,texture_border_clamp, GLES200, None) // #149 #ifndef MAGNUM_TARGET_GLES2 - _extension(115,NV,shader_noperspective_interpolation, GLES300, None) // #201 + _extension(125,NV,shader_noperspective_interpolation, GLES300, None) // #201 #endif #ifndef MAGNUM_TARGET_GLES2 - _extension(116,NV,geometry_shader_passthrough, GLES300, None) // #233 + _extension(126,NV,geometry_shader_passthrough, GLES300, None) // #233 #endif - _extension(117,NV,sample_locations, GLES200, None) // #235 - _extension(118,NV,polygon_mode, GLES200, None) // #238 + _extension(127,NV,sample_locations, GLES200, None) // #235 + _extension(128,NV,polygon_mode, GLES200, None) // #238 #ifndef MAGNUM_TARGET_GLES2 - _extension(119,NV,fragment_shader_barycentric, GLES320, None) // #316 + _extension(129,NV,fragment_shader_barycentric, GLES320, None) // #316 #endif } namespace OES { #ifdef MAGNUM_TARGET_GLES2 - _extension(120,OES,depth24, GLES200, GLES300) // #24 + _extension(130,OES,depth24, GLES200, GLES300) // #24 #endif - _extension(121,OES,depth32, GLES200, None) // #25 + _extension(131,OES,depth32, GLES200, None) // #25 #ifdef MAGNUM_TARGET_GLES2 - _extension(122,OES,element_index_uint, GLES200, GLES300) // #26 - _extension(123,OES,fbo_render_mipmap, GLES200, GLES300) // #27 + _extension(132,OES,element_index_uint, GLES200, GLES300) // #26 + _extension(133,OES,fbo_render_mipmap, GLES200, GLES300) // #27 #endif - _extension(124,OES,mapbuffer, GLES200, None) // #29 + _extension(134,OES,mapbuffer, GLES200, None) // #29 #ifdef MAGNUM_TARGET_GLES2 - _extension(125,OES,rgb8_rgba8, GLES200, GLES300) // #30 + _extension(135,OES,rgb8_rgba8, GLES200, GLES300) // #30 #endif - _extension(126,OES,stencil1, GLES200, None) // #31 - _extension(127,OES,stencil4, GLES200, None) // #32 + _extension(136,OES,stencil1, GLES200, None) // #31 + _extension(137,OES,stencil4, GLES200, None) // #32 #ifdef MAGNUM_TARGET_GLES2 - _extension(128,OES,texture_3D, GLES200, GLES300) // #34 - _extension(129,OES,texture_half_float_linear, GLES200, GLES300) // #35 + _extension(138,OES,texture_3D, GLES200, GLES300) // #34 + _extension(139,OES,texture_half_float_linear, GLES200, GLES300) // #35 #endif - _extension(130,OES,texture_float_linear, GLES200, None) // #35 + _extension(140,OES,texture_float_linear, GLES200, None) // #35 #ifdef MAGNUM_TARGET_GLES2 - _extension(131,OES,texture_half_float, GLES200, GLES300) // #36 - _extension(132,OES,texture_float, GLES200, GLES300) // #36 - _extension(133,OES,texture_npot, GLES200, GLES300) // #37 - _extension(134,OES,vertex_half_float, GLES200, GLES300) // #38 - _extension(135,OES,packed_depth_stencil, GLES200, GLES300) // #43 - _extension(136,OES,depth_texture, GLES200, GLES300) // #44 - _extension(137,OES,standard_derivatives, GLES200, GLES300) // #45 - _extension(138,OES,vertex_array_object, GLES200, GLES300) // #71 - _extension(139,OES,required_internalformat, GLES200, GLES300) // #115 - _extension(140,OES,surfaceless_context, GLES200, GLES300) // #116 + _extension(141,OES,texture_half_float, GLES200, GLES300) // #36 + _extension(142,OES,texture_float, GLES200, GLES300) // #36 + _extension(143,OES,texture_npot, GLES200, GLES300) // #37 + _extension(144,OES,vertex_half_float, GLES200, GLES300) // #38 + _extension(145,OES,packed_depth_stencil, GLES200, GLES300) // #43 + _extension(146,OES,depth_texture, GLES200, GLES300) // #44 + _extension(147,OES,standard_derivatives, GLES200, GLES300) // #45 + _extension(148,OES,vertex_array_object, GLES200, GLES300) // #71 + _extension(149,OES,required_internalformat, GLES200, GLES300) // #115 + _extension(150,OES,surfaceless_context, GLES200, GLES300) // #116 #endif #ifndef MAGNUM_TARGET_GLES2 - _extension(141,OES,texture_compression_astc, GLES300, None) // #162 - _extension(142,OES,sample_shading, GLES300, GLES320) // #169 - _extension(143,OES,sample_variables, GLES300, GLES320) // #170 - _extension(144,OES,shader_image_atomic, GLES310, GLES320) // #171 - _extension(145,OES,shader_multisample_interpolation, GLES300, GLES320) // #172 + _extension(151,OES,texture_compression_astc, GLES300, None) // #162 + _extension(152,OES,sample_shading, GLES300, GLES320) // #169 + _extension(153,OES,sample_variables, GLES300, GLES320) // #170 + _extension(154,OES,shader_image_atomic, GLES310, GLES320) // #171 + _extension(155,OES,shader_multisample_interpolation, GLES300, GLES320) // #172 #endif - _extension(146,OES,texture_stencil8, GLES200, GLES320) // #173 + _extension(156,OES,texture_stencil8, GLES200, GLES320) // #173 #ifndef MAGNUM_TARGET_GLES2 - _extension(147,OES,texture_storage_multisample_2d_array, GLES310, GLES320) // #174 - _extension(148,OES,texture_view, GLES310, None) // #218 + _extension(157,OES,texture_storage_multisample_2d_array, GLES310, GLES320) // #174 + _extension(158,OES,texture_view, GLES310, None) // #218 #endif - _extension(149,OES,draw_elements_base_vertex, GLES200, None) // #219 + _extension(159,OES,draw_elements_base_vertex, GLES200, None) // #219 } namespace OVR { #ifndef MAGNUM_TARGET_GLES2 - _extension(150,OVR,multiview, GLES300, None) // #241 - _extension(151,OVR,multiview2, GLES300, None) // #242 + _extension(160,OVR,multiview, GLES300, None) // #241 + _extension(161,OVR,multiview2, GLES300, None) // #242 #endif } namespace MAGNUM { #ifndef MAGNUM_TARGET_GLES2 - _extension(152,MAGNUM,shader_vertex_id, GLES300, GLES300) + _extension(162,MAGNUM,shader_vertex_id, GLES300, GLES300) #endif } #endif diff --git a/src/Magnum/GL/GL.h b/src/Magnum/GL/GL.h index 6f3014edf..223f23276 100644 --- a/src/Magnum/GL/GL.h +++ b/src/Magnum/GL/GL.h @@ -49,7 +49,7 @@ namespace Implementation { #ifndef MAGNUM_TARGET_GLES 192 #elif !defined(MAGNUM_TARGET_WEBGL) - 160 + 168 #else 64 #endif diff --git a/src/Magnum/GL/Renderer.h b/src/Magnum/GL/Renderer.h index b2ad89bb4..ff527f4e2 100644 --- a/src/Magnum/GL/Renderer.h +++ b/src/Magnum/GL/Renderer.h @@ -83,6 +83,20 @@ class MAGNUM_GL_EXPORT Renderer { * @m_enum_values_as_keywords */ enum class Feature: GLenum { + #ifndef MAGNUM_TARGET_WEBGL + /** + * Disable all rendering operations. + * + * @requires_extension OpenGL 3.0 and extension + * @gl_extension{INTEL,blackhole_render} + * @requires_es_extension Extension + * @gl_extension{INTEL,blackhole_render} + * @requires_gles Blackhole render is not available in WebGL. + * @m_since_latest + */ + BlackholeRender = GL_BLACKHOLE_RENDER_INTEL, + #endif + #ifndef MAGNUM_TARGET_WEBGL /** * Coherent advanced blending. Enabled by default if desktop/ES diff --git a/src/MagnumExternal/OpenGL/GL/extensions.txt b/src/MagnumExternal/OpenGL/GL/extensions.txt index 497e7bbad..1b5558716 100644 --- a/src/MagnumExternal/OpenGL/GL/extensions.txt +++ b/src/MagnumExternal/OpenGL/GL/extensions.txt @@ -36,6 +36,7 @@ extension EXT_debug_marker optional extension EXT_texture_sRGB_R8 optional extension EXT_texture_sRGB_RG8 optional extension GREMEDY_string_marker optional +extension INTEL_blackhole_render optional extension KHR_texture_compression_astc_ldr optional # extension KHR_texture_compression_astc_hdr optional extension KHR_blend_equation_advanced optional diff --git a/src/MagnumExternal/OpenGL/GL/flextGL.h b/src/MagnumExternal/OpenGL/GL/flextGL.h index b801faaf8..c4d10331a 100644 --- a/src/MagnumExternal/OpenGL/GL/flextGL.h +++ b/src/MagnumExternal/OpenGL/GL/flextGL.h @@ -1720,6 +1720,10 @@ typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum #define GL_SRG8_EXT 0x8FBE +/* GL_INTEL_blackhole_render */ + +#define GL_BLACKHOLE_RENDER_INTEL 0x83FC + /* GL_KHR_texture_compression_astc_ldr */ #define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 diff --git a/src/MagnumExternal/OpenGL/GLES2/extensions.txt b/src/MagnumExternal/OpenGL/GLES2/extensions.txt index 13c55f37a..c438bfe51 100644 --- a/src/MagnumExternal/OpenGL/GLES2/extensions.txt +++ b/src/MagnumExternal/OpenGL/GLES2/extensions.txt @@ -98,6 +98,7 @@ extension EXT_clip_control optional extension EXT_texture_mirror_clamp_to_edge optional extension EXT_depth_clamp optional extension IMG_texture_compression_pvrtc optional +extension INTEL_blackhole_render optional # extension KHR_texture_compression_astc_hdr optional extension KHR_blend_equation_advanced_coherent optional extension KHR_context_flush_control optional diff --git a/src/MagnumExternal/OpenGL/GLES2/flextGL.h b/src/MagnumExternal/OpenGL/GLES2/flextGL.h index efeb7f2a3..bdd13461f 100644 --- a/src/MagnumExternal/OpenGL/GLES2/flextGL.h +++ b/src/MagnumExternal/OpenGL/GLES2/flextGL.h @@ -1038,6 +1038,10 @@ typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLen #define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02 #define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03 +/* GL_INTEL_blackhole_render */ + +#define GL_BLACKHOLE_RENDER_INTEL 0x83FC + /* GL_KHR_blend_equation_advanced_coherent */ #define GL_BLEND_ADVANCED_COHERENT_KHR 0x9285 diff --git a/src/MagnumExternal/OpenGL/GLES2/flextGLWindowsDesktop.h b/src/MagnumExternal/OpenGL/GLES2/flextGLWindowsDesktop.h index f1f202c20..c76c5f137 100644 --- a/src/MagnumExternal/OpenGL/GLES2/flextGLWindowsDesktop.h +++ b/src/MagnumExternal/OpenGL/GLES2/flextGLWindowsDesktop.h @@ -1034,6 +1034,10 @@ typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLen #define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02 #define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03 +/* GL_INTEL_blackhole_render */ + +#define GL_BLACKHOLE_RENDER_INTEL 0x83FC + /* GL_KHR_blend_equation_advanced_coherent */ #define GL_BLEND_ADVANCED_COHERENT_KHR 0x9285 diff --git a/src/MagnumExternal/OpenGL/GLES3/extensions.txt b/src/MagnumExternal/OpenGL/GLES3/extensions.txt index d57d4e722..7fc0a853b 100644 --- a/src/MagnumExternal/OpenGL/GLES3/extensions.txt +++ b/src/MagnumExternal/OpenGL/GLES3/extensions.txt @@ -75,6 +75,7 @@ extension EXT_clip_control optional extension EXT_texture_mirror_clamp_to_edge optional extension EXT_depth_clamp optional extension IMG_texture_compression_pvrtc optional +extension INTEL_blackhole_render optional # extension KHR_texture_compression_astc_hdr optional extension KHR_blend_equation_advanced_coherent optional extension KHR_context_flush_control optional diff --git a/src/MagnumExternal/OpenGL/GLES3/flextGL.h b/src/MagnumExternal/OpenGL/GLES3/flextGL.h index 5f0eacc4e..fa14d529a 100644 --- a/src/MagnumExternal/OpenGL/GLES3/flextGL.h +++ b/src/MagnumExternal/OpenGL/GLES3/flextGL.h @@ -1675,6 +1675,10 @@ typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLen #define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02 #define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03 +/* GL_INTEL_blackhole_render */ + +#define GL_BLACKHOLE_RENDER_INTEL 0x83FC + /* GL_KHR_blend_equation_advanced_coherent */ #define GL_BLEND_ADVANCED_COHERENT_KHR 0x9285 diff --git a/src/MagnumExternal/OpenGL/GLES3/flextGLWindowsDesktop.h b/src/MagnumExternal/OpenGL/GLES3/flextGLWindowsDesktop.h index d4395a61e..c85617b5e 100644 --- a/src/MagnumExternal/OpenGL/GLES3/flextGLWindowsDesktop.h +++ b/src/MagnumExternal/OpenGL/GLES3/flextGLWindowsDesktop.h @@ -1668,6 +1668,10 @@ typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLen #define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02 #define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03 +/* GL_INTEL_blackhole_render */ + +#define GL_BLACKHOLE_RENDER_INTEL 0x83FC + /* GL_KHR_blend_equation_advanced_coherent */ #define GL_BLEND_ADVANCED_COHERENT_KHR 0x9285