mesa: Implement and advertise GL_MESA_sampler_objects
authorAdam Jackson <ajax@redhat.com>
Thu, 14 Nov 2019 17:46:13 +0000 (12:46 -0500)
committerMarge Bot <emma+marge@anholt.net>
Tue, 1 Aug 2023 14:52:10 +0000 (14:52 +0000)
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 <zboszor@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Signed-off-by: Adam Jackson <ajax@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/2440>

docs/_extra/specs/MESA_sampler_objects.spec [new file with mode: 0644]
src/mapi/glapi/gen/ARB_sampler_objects.xml
src/mesa/main/extensions_table.h

diff --git a/docs/_extra/specs/MESA_sampler_objects.spec b/docs/_extra/specs/MESA_sampler_objects.spec
new file mode 100644 (file)
index 0000000..ba863e1
--- /dev/null
@@ -0,0 +1,105 @@
+Name
+
+    MESA_sampler_objects
+
+Name Strings
+
+    GL_MESA_sampler_objects
+
+Contact
+
+    Adam Jackson <ajax@redhat.com>
+
+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
index 1c0c2b5..e4dc0f6 100644 (file)
@@ -7,45 +7,45 @@
 
 <category name="GL_ARB_sampler_objects" number="81">
 
-    <function name="GenSamplers" es2="3.0" no_error="true">
+    <function name="GenSamplers" es2="2.0" no_error="true">
       <param name="count" type="GLsizei"/>
       <param name="samplers" type="GLuint *"/>
     </function>
 
-    <function name="DeleteSamplers" es2="3.0" no_error="true">
+    <function name="DeleteSamplers" es2="2.0" no_error="true">
       <param name="count" type="GLsizei"/>
       <param name="samplers" type="const GLuint *" count="count"/>
     </function>
 
-    <function name="IsSampler" es2="3.0">
+    <function name="IsSampler" es2="2.0">
       <param name="sampler" type="GLuint"/>
       <return type="GLboolean"/>
     </function>
 
-    <function name="BindSampler" es2="3.0" no_error="true" exec="dlist">
+    <function name="BindSampler" es2="2.0" no_error="true" exec="dlist">
       <param name="unit" type="GLuint"/>
       <param name="sampler" type="GLuint"/>
     </function>
 
-    <function name="SamplerParameteri" es2="3.0" exec="dlist">
+    <function name="SamplerParameteri" es2="2.0" exec="dlist">
       <param name="sampler" type="GLuint"/>
       <param name="pname" type="GLenum"/>
       <param name="param" type="GLint"/>
     </function>
 
-    <function name="SamplerParameterf" es2="3.0" exec="dlist">
+    <function name="SamplerParameterf" es2="2.0" exec="dlist">
       <param name="sampler" type="GLuint"/>
       <param name="pname" type="GLenum"/>
       <param name="param" type="GLfloat"/>
     </function>
 
-    <function name="SamplerParameteriv" es2="3.0" exec="dlist">
+    <function name="SamplerParameteriv" es2="2.0" exec="dlist">
       <param name="sampler" type="GLuint"/>
       <param name="pname" type="GLenum"/>
       <param name="params" type="const GLint *" count="_mesa_tex_param_enum_to_count(pname)"/>
     </function>
 
-    <function name="SamplerParameterfv" es2="3.0" exec="dlist">
+    <function name="SamplerParameterfv" es2="2.0" exec="dlist">
       <param name="sampler" type="GLuint"/>
       <param name="pname" type="GLenum"/>
       <param name="params" type="const GLfloat *" count="_mesa_tex_param_enum_to_count(pname)"/>
       <param name="params" type="const GLuint *" count="_mesa_tex_param_enum_to_count(pname)"/>
     </function>
 
-    <function name="GetSamplerParameteriv" es2="3.0">
+    <function name="GetSamplerParameteriv" es2="2.0">
       <param name="sampler" type="GLuint"/>
       <param name="pname" type="GLenum"/>
       <param name="params" type="GLint *"/>
     </function>
 
-    <function name="GetSamplerParameterfv" es2="3.0">
+    <function name="GetSamplerParameterfv" es2="2.0">
       <param name="sampler" type="GLuint"/>
       <param name="pname" type="GLenum"/>
       <param name="params" type="GLfloat *"/>
index f411322..ede7a9e 100644 (file)
@@ -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)