diff options
Diffstat (limited to 'glew/auto/EGL-Registry/extensions/EXT/EGL_EXT_surface_compression.txt')
-rw-r--r-- | glew/auto/EGL-Registry/extensions/EXT/EGL_EXT_surface_compression.txt | 289 |
1 files changed, 289 insertions, 0 deletions
diff --git a/glew/auto/EGL-Registry/extensions/EXT/EGL_EXT_surface_compression.txt b/glew/auto/EGL-Registry/extensions/EXT/EGL_EXT_surface_compression.txt new file mode 100644 index 0000000..6610017 --- /dev/null +++ b/glew/auto/EGL-Registry/extensions/EXT/EGL_EXT_surface_compression.txt @@ -0,0 +1,289 @@ +Name + + EXT_surface_compression + +Name Strings + + EGL_EXT_surface_compression + +Contributors + + Jan-Harald Fredriksen, Arm + Lisa Wu, Arm + George Liu, Arm + Laurie Hedge, Imagination Technologies + +Contact + + Jan-Harald Fredriksen (jan-harald.fredriksen 'at' arm.com) + +IP Status + + No known IP claims. + +Status + + Complete + +Version + + Version 1 - November 15, 2021 + +Number + + EGL Extension #147 + +Dependencies + + These extensions are written against the wording of the EGL 1.5 + specification (August 27, 2014). + + This extension interacts with EGL_EXT_yuv_surface. + +Overview + + Applications may wish to take advantage of framebuffer compression. Some + platforms may support framebuffer compression at fixed bitrates. Such + compression algorithms generally produce results that are visually lossless, + but the results are typically not bit exact when compared to a non-compressed + result. + + This extension enables applications to opt-in to fixed-rate compression + for EGL window surfaces. + + Compression may not be supported for all framebuffer formats. It can still + be requested for all formats and applications can query what level of compression + was actually enabled. + +New Procedures and Functions + + EGLBoolean eglQuerySupportedCompressionRatesEXT( + EGLDisplay dpy, EGLConfig config, const EGLAttrib *attrib_list, + EGLint *rates, EGLint rate_size, EGLint *num_rates); + +New Tokens + + New attributes accepted by the <attrib_list> argument of + eglCreatePlatformWindowSurface and eglCreateWindowSurface: + EGL_SURFACE_COMPRESSION_EXT 0x34B0 + + [Only if EGL_EXT_yuv_surface is supported] + EGL_SURFACE_COMPRESSION_PLANE1_EXT 0x328E + EGL_SURFACE_COMPRESSION_PLANE2_EXT 0x328F + + Accepted as attribute values for EGL_SURFACE_COMPRESSION_EXT by + eglCreatePlatformWindowSurface and eglCreateWindowSurface: + EGL_SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT 0x34B1 + EGL_SURFACE_COMPRESSION_FIXED_RATE_DEFAULT_EXT 0x34B2 + + EGL_SURFACE_COMPRESSION_FIXED_RATE_1BPC_EXT 0x34B4 + EGL_SURFACE_COMPRESSION_FIXED_RATE_2BPC_EXT 0x34B5 + EGL_SURFACE_COMPRESSION_FIXED_RATE_3BPC_EXT 0x34B6 + EGL_SURFACE_COMPRESSION_FIXED_RATE_4BPC_EXT 0x34B7 + EGL_SURFACE_COMPRESSION_FIXED_RATE_5BPC_EXT 0x34B8 + EGL_SURFACE_COMPRESSION_FIXED_RATE_6BPC_EXT 0x34B9 + EGL_SURFACE_COMPRESSION_FIXED_RATE_7BPC_EXT 0x34BA + EGL_SURFACE_COMPRESSION_FIXED_RATE_8BPC_EXT 0x34BB + EGL_SURFACE_COMPRESSION_FIXED_RATE_9BPC_EXT 0x34BC + EGL_SURFACE_COMPRESSION_FIXED_RATE_10BPC_EXT 0x34BD + EGL_SURFACE_COMPRESSION_FIXED_RATE_11BPC_EXT 0x34BE + EGL_SURFACE_COMPRESSION_FIXED_RATE_12BPC_EXT 0x34BF + +Modifications to the EGL 1.5 Specification + + Modify section 3.5.1 "Creating On-Screen Rendering Surfaces: + + Add EGL_SURFACE_COMPRESSION_EXT to the list of attributes that can + be specified in <attrib_list> for eglCreatePlatformWindowSurface. + + Add the following paragraph: + + EGL_SURFACE_COMPRESSION_EXT specifies the fixed-rate compression that may + be enabled for rendering to the window. + If its value is EGL_SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT, then fixed-rate + compression is disabled. + If its value is EGL_SURFACE_COMPRESSION_FIXED_RATE_DEFAULT_EXT, + then the implementation may enable compression at a default, + implementation-defined, rate. + If its value is EGL_SURFACE_COMPRESSION_FIXED_RATE_1BPC_EXT, then the + implementation may enable fixed-rate compression with a bitrate of at + least 1 bit and less than 2 bits per component. + If its value is EGL_SURFACE_COMPRESSION_FIXED_RATE_2BPC_EXT, then the + implementation may enable fixed-rate compression with a bitrate of at + least 2 bits and less than 3 bits per component. + If its value is EGL_SURFACE_COMPRESSION_FIXED_RATE_3BPC_EXT, then the + implementation may enable fixed-rate compression with a bitrate of at + least 3 bits and less than 4 bits per component. + If its value is EGL_SURFACE_COMPRESSION_FIXED_RATE_4BPC_EXT, then the + implementation may enable fixed-rate compression with a bitrate of at + least 4 bits and less than 5 bits per component. + If its value is EGL_SURFACE_COMPRESSION_FIXED_RATE_5BPC_EXT, then the + implementation may enable fixed-rate compression with a bitrate of at + least 5 bits and less than 6 bits per component. + If its value is EGL_SURFACE_COMPRESSION_FIXED_RATE_6BPC_EXT, then the + implementation may enable fixed-rate compression with a bitrate of at + least 6 bits and less than 7 bits per component. + If its value is EGL_SURFACE_COMPRESSION_FIXED_RATE_7BPC_EXT, then the + implementation may enable fixed-rate compression with a bitrate of at + least 7 bits and less than 8 bits per component. + If its value is EGL_SURFACE_COMPRESSION_FIXED_RATE_8BPC_EXT, then the + implementation may enable fixed-rate compression with a bitrate of at + least 8 bits and less than 9 bits per component. + If its value is EGL_SURFACE_COMPRESSION_FIXED_RATE_9BPC_EXT, then the + implementation may enable fixed-rate compression with a bitrate of at + least 9 bits and less than 10 bits per component. + If its value is EGL_SURFACE_COMPRESSION_FIXED_RATE_10BPC_EXT, then the + implementation may enable fixed-rate compression with a bitrate of at + least 10 bits and less than 11 bits per component. + If its value is EGL_SURFACE_COMPRESSION_FIXED_RATE_11BPC_EXT, then the + implementation may enable fixed-rate compression with a bitrate of at + least 11 bits and less than 12 bits per component. + If its value is EGL_SURFACE_COMPRESSION_FIXED_RATE_12BPC_EXT, then the + implementation may enable fixed-rate compression with a bitrate of at + least 12 bits per component. + + For pixel formats with different number of bits per component, the + specified fixed-rate compression rate applies to the component with + the highest number of bits. + + The default value of EGL_SURFACE_COMPRESSION_EXT is + EGL_SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT. + + [Only if EGL_EXT_yuv_surface is supported] + + If _config_ describes a surface with multiple planes (the + value of the EGL_YUV_NUMBER_OF_PLANES_EXT attribute is larger than one), + then the fixed-rate compression rate can be specified independently for + the each plane. + In this case, EGL_SURFACE_COMPRESSION_EXT specifies the fixed-rate + compression that may be enabled for rendering to plane 0, + EGL_SURFACE_COMPRESSION_PLANE1_EXT specifies the fixed-rate + compression that may be enabled for rendering to plane 1, and + EGL_SURFACE_COMPRESSION_PLANE2_EXT specifies the fixed-rate compression + that may be enabled for rendering to plane 2. + The supported values of EGL_SURFACE_COMPRESSION_PLANE1_EXT and + EGL_SURFACE_COMPRESSION_PLANE2_EXT are the same as for + EGL_SURFACE_COMPRESSION_EXT. + + If _config_ has more than one plane and the + EGL_SURFACE_COMPRESSION_PLANE1_EXT attribute is not specified, + then the value of EGL_SURFACE_COMPRESSION_EXT is used for all planes. + If _config_ has more than two planes and the + EGL_SURFACE_COMPRESSION_PLANE2_EXT attribute is not specified, + then the value of EGL_SURFACE_COMPRESSION_PLANE1_EXT is also used + for plane 2. + + The default value of EGL_SURFACE_COMPRESSION_PLANE1_EXT and + EGL_SURFACE_COMPRESSION_PLANE2_EXT is EGL_SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT. + + Modify section 3.5.6 "Surface Attributes" + + Add entries to Table 3.5 "Queryable surface attributes and types": + + EGL_SURFACE_COMPRESSION_EXT enum Fixed-rate compression + + [Only if EGL_EXT_yuv_surface is supported] + EGL_SURFACE_COMPRESSION_PLANE1_EXT enum Fixed-rate compression for plane 1 + EGL_SURFACE_COMPRESSION_PLANE2_EXT enum Fixed-rate compression for plane 2 + + Add the following paragraph: + + Querying EGL_SURFACE_COMPRESSION_EXT returns the actual fixed-rate + compression applied to a surface. For YUV surfaces, the value applied to + the luma plane is returned. This value may be different to the one + requested when the surface was created. + For pbuffer and pixmap surfaces, the contents of <value> are not modified." + + [Only if EGL_EXT_yuv_surface is supported] + Querying EGL_SURFACE_COMPRESSION_PLANE1_EXT returns the actual + fixed-rate compression applied to plane 1 of a YUV surface. + Querying EGL_SURFACE_COMPRESSION_PLANE2_EXT returns the actual + fixed-rate compression applied to plane 2 of a YUV surface. + These values may be different to the one requested when the surface was created. + For pbuffer and pixmap surfaces, the contents of <value> are not modified." + + To get the list of all fixed-rate compression rates that are available on + a specified display and EGLConfig, call + + EGLBoolean eglQuerySupportedCompressionRatesEXT( + EGLDisplay dpy, EGLConfig config, const EGLAttrib *attrib_list, + EGLint *rates, EGLint rate_size, EGLint *num_rates); + + <attrib_list> specifies a list of attributes that will be provided when a surface is created with + this combination of display and EGLConfig. The accepted attributes are the same as for + eglCreatePlatformWindowSurface. + <rates> is a pointer to a buffer containing <rate_size> elements. On success, EGL_TRUE is + returned. The number of rates is returned in <num_rates>, and elements 0 through <num_rates>-1 of + <rates> are filled in with the available compression rates. + No more than <rate_size> compression rates will be returned even if more are available + on the specified display and config. However, if eglQuerySupportedCompressionRatesEXT is called with + <rates> = NULL, then no rates are returned, but the total number of rates available will be returned + in <num_rates>. + The possible values returned in <rates> are the attribute values accepted for + EGL_SURFACE_COMPRESSION_EXT by eglCreatePlatformWindowSurface and eglCreateWindowSurface, except + EGL_SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT and EGL_SURFACE_COMPRESSION_FIXED_RATE_DEFAULT_EXT. + +Errors + + [Only if EGL_EXT_yuv_surface is supported] + Add to the error section of eglCreatePlatformWindowSurface: + + If the EGL_SURFACE_COMPRESSION_PLANE1_EXT attribute is specified and + _config_ does not describe a surface with at least 2 planes (the + EGL_YUV_NUMBER_OF_PLANES_EXT attribute is not greater than or + equal to 2), an EGL_BAD_MATCH error is generated. + + If the EGL_SURFACE_COMPRESSION_PLANE2_EXT attribute is specified and + _config_ does not describe a surface with at least 3 planes (the + EGL_YUV_NUMBER_OF_PLANES_EXT attribute is not greater than or + equal to 3), an EGL_BAD_MATCH error is generated. + + Add to the section describing eglQuerySupportedCompressionRatesEXT: + + * On failure, EGL_FALSE is returned. + * An EGL_NOT_INITIALIZED error is generated if EGL is not initialized on <dpy>. + * An EGL_BAD_PARAMETER error is generated if <num_rates> is NULL. + +Issues + + 1. Should fixed-rate compression be supported for pixmap or pbuffer + surfaces? + + No, no use-cases have been identified for this. + + 2. What is the result of querying EGL_SURFACE_COMPRESSION_EXT if + EGL_SURFACE_COMPRESSION_FIXED_RATE_DEFAULT_EXT was requested? + + Resolved. + The result will be the specific compression ratio chosen by the + implementation, or EGL_SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT if + no fixed-rate compression was applied. + + 3. Should we expose different compressions rates per plane in this extension? + + Yes. + + 4. How can an application query the set of supported compression rates? + + Resolved. Option B. + + Two options were considered. + + Option A: + Reuse eglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value); + + This is not ideal because: + - the compression modes are currently tied to the surface, not the EGLConfig + - we don't want this to affect EGLConfig selection etc. + - this query can only return a single value, so you'd need to query each of the + 12 bit rates separately. + + Option B: + Add a new query, specifically for the compression rates. This addresses the concerns + with Option A, and is very similar to the mechanism used for the OpenGL ES API. Main + downside is that it adds additional functions to the API. + +Revision History + + Version 1, 2021/11/15 + - Internal revisions |