From f41ce4b2108619b4fcf41b6cd4e1b83e38c560df Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Thu, 14 Nov 2019 12:46:13 -0500 Subject: [PATCH] mesa: Implement and advertise GL_MESA_sampler_objects MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This is the GLES3 sampler object API trivially backported to GLES2, because it allows for simpler/better support in glamor and mutter. The only code change we need is adding these to the generated dispatch tables for ES2 contexts. The interactions with EXT_shadow_samplers, EXT_texture_filter_anisotropic and EXT_texture_sRGB_decode are already in place before this change, and OES_texture_border_clamp is always supported in Mesa. Reviewed-by: Zoltán Böszörményi Reviewed-by: Marek Olšák Signed-off-by: Adam Jackson Part-of: --- docs/_extra/specs/MESA_sampler_objects.spec | 105 ++++++++++++++++++++++++++++ src/mapi/glapi/gen/ARB_sampler_objects.xml | 20 +++--- src/mesa/main/extensions_table.h | 1 + 3 files changed, 116 insertions(+), 10 deletions(-) create mode 100644 docs/_extra/specs/MESA_sampler_objects.spec diff --git a/docs/_extra/specs/MESA_sampler_objects.spec b/docs/_extra/specs/MESA_sampler_objects.spec new file mode 100644 index 0000000..ba863e1 --- /dev/null +++ b/docs/_extra/specs/MESA_sampler_objects.spec @@ -0,0 +1,105 @@ +Name + + MESA_sampler_objects + +Name Strings + + GL_MESA_sampler_objects + +Contact + + Adam Jackson + +Contributors + + Emma Anholt + The contributors to ARB_sampler_objects and OpenGL ES 3 + +Status + + Shipping + +Version + + Last Modified Date: 14 Sep 2021 + Author Revision: 3 + +Number + + TBD + +Dependencies + + OpenGL ES 2.0 is required. + + This extension interacts with: + - EXT_shadow_samplers + - EXT_texture_filter_anisotropic + - EXT_texture_sRGB_decode + - OES_texture_border_clamp + +Overview + + This extension makes the sampler object subset of OpenGL ES 3.0 available + in OpenGL ES 2.0 contexts. As the intent is to allow access to the API + without necessarily requiring additional renderer functionality, some + sampler state that would be mandatory in GLES 3 is dependent on the + presence of additional extensions. Under GLES 3.0 or above this extension's + name string may be exposed for compatibility, but it is otherwise without + effect. + + Refer to the OpenGL ES 3.0 specification for API details not covered here. + +New Procedures and Functions + + void glGenSamplers (GLsizei count, GLuint *samplers); + void glDeleteSamplers (GLsizei count, const GLuint *samplers); + GLboolean glIsSampler (GLuint sampler); + void glBindSampler (GLuint unit, GLuint sampler); + void glSamplerParameteri (GLuint sampler, GLenum pname, GLint param); + void glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param); + void glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param); + void glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param); + void glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params); + void glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params); + + Note that these names are exactly as in ES3, with no MESA suffix. + +New Tokens + + SAMPLER_BINDING 0x8919 + +Interactions + + If EXT_shadow_samplers is not supported then TEXTURE_COMPARE_MODE and + TEXTURE_COMPARE_FUNC will generate INVALID_ENUM. + + If EXT_texture_filter_anisotropic is not supported then + TEXTURE_MAX_ANISOTROPY_EXT will generate INVALID_ENUM. + + If EXT_texture_sRGB_decode is not supported then TEXTURE_SRGB_DECODE_EXT + will generate INVALID_ENUM. + + If OES_texture_border_clamp is not supported then TEXTURE_BORDER_COLOR + will generate INVALID_ENUM. + +Issues + + 1) Why bother? + + Sampler objects, at least in Mesa, are generically supported without any + driver-dependent requirements, so enabling this is essentially free. This + simplifies application support for otherwise GLES2 hardware, and for + drivers in development that haven't yet achieved GLES3. + +Revision History + + Rev. Date Author Changes + ---- -------- -------- --------------------------------------------- + 1 2019/10/22 ajax Initial revision + 2 2019/11/14 ajax Add extension interactions: + - EXT_shadow_samplers + - EXT_texture_filter_anisotropic + - EXT_texture_sRGB_decode + - OES_texture_border_clamp + 3 2021/09/14 ajax Expand the justification and ES3 interaction diff --git a/src/mapi/glapi/gen/ARB_sampler_objects.xml b/src/mapi/glapi/gen/ARB_sampler_objects.xml index 1c0c2b5..e4dc0f6 100644 --- a/src/mapi/glapi/gen/ARB_sampler_objects.xml +++ b/src/mapi/glapi/gen/ARB_sampler_objects.xml @@ -7,45 +7,45 @@ - + - + - + - + - + - + - + - + @@ -63,13 +63,13 @@ - + - + diff --git a/src/mesa/main/extensions_table.h b/src/mesa/main/extensions_table.h index f411322..ede7a9e 100644 --- a/src/mesa/main/extensions_table.h +++ b/src/mesa/main/extensions_table.h @@ -380,6 +380,7 @@ EXT(KHR_texture_compression_astc_sliced_3d , KHR_texture_compression_astc_slice EXT(MESA_bgra , dummy_true , x , x , x , ES2, 2021) EXT(MESA_framebuffer_flip_y , MESA_framebuffer_flip_y , 43, 43, x , 30, 2018) EXT(MESA_pack_invert , MESA_pack_invert , GLL, GLC, x , x , 2002) +EXT(MESA_sampler_objects , dummy_true , x , x , x , ES2, 2019) EXT(MESA_shader_integer_functions , MESA_shader_integer_functions , GLL, GLC, x , 30, 2016) EXT(MESA_texture_signed_rgba , EXT_texture_snorm , GLL, GLC, x , x , 2009) EXT(MESA_tile_raster_order , MESA_tile_raster_order , GLL, GLC, x , ES2, 2017) -- 2.7.4