Mesa (main): st/mesa: avoid enabling image/buffer/compute extensions for weak hardware

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Sun Jun 6 21:34:15 UTC 2021


Module: Mesa
Branch: main
Commit: 00c46fec4328c9e759cb75a45c7aa993b643bc66
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=00c46fec4328c9e759cb75a45c7aa993b643bc66

Author: Ilia Mirkin <imirkin at alum.mit.edu>
Date:   Sat May  1 17:08:14 2021 -0400

st/mesa: avoid enabling image/buffer/compute extensions for weak hardware

The requirements for ES 3.1 are lower than the requirements for desktop
GL. The thread block size can be smaller, and images/buffers/atomics
need not be supported in the fragment stage. Allow a driver to expose
ES 3.1 without flipping on the desktop GL extensions.

Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
Reviewed-by: Eric Anholt <eric at anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10569>

---

 src/mesa/state_tracker/st_extensions.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index 462861fb8bf..73cbb297c45 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -540,7 +540,7 @@ void st_init_limits(struct pipe_screen *screen,
    if (!c->MaxCombinedAtomicCounters)
       c->MaxCombinedAtomicCounters = MAX_ATOMIC_COUNTERS;
 
-   if (c->MaxCombinedAtomicBuffers > 0) {
+   if (c->Program[MESA_SHADER_FRAGMENT].MaxAtomicBuffers) {
       extensions->ARB_shader_atomic_counters = GL_TRUE;
       extensions->ARB_shader_atomic_counter_ops = GL_TRUE;
    }
@@ -568,7 +568,8 @@ void st_init_limits(struct pipe_screen *screen,
          c->MaxCombinedShaderStorageBlocks;
       c->MaxShaderStorageBlockSize =
          screen->get_param(screen, PIPE_CAP_MAX_SHADER_BUFFER_SIZE);
-      extensions->ARB_shader_storage_buffer_object = GL_TRUE;
+      if (c->Program[MESA_SHADER_FRAGMENT].MaxShaderStorageBlocks)
+         extensions->ARB_shader_storage_buffer_object = GL_TRUE;
    }
 
    c->MaxCombinedImageUniforms =
@@ -580,7 +581,7 @@ void st_init_limits(struct pipe_screen *screen,
          c->Program[MESA_SHADER_COMPUTE].MaxImageUniforms;
    c->MaxCombinedShaderOutputResources += c->MaxCombinedImageUniforms;
    c->MaxImageUnits = MAX_IMAGE_UNITS;
-   if (c->MaxCombinedImageUniforms) {
+   if (c->Program[MESA_SHADER_FRAGMENT].MaxImageUniforms) {
       extensions->ARB_shader_image_load_store = GL_TRUE;
       extensions->ARB_shader_image_size = GL_TRUE;
    }
@@ -1651,8 +1652,9 @@ void st_init_extensions(struct pipe_screen *screen,
          }
 
          extensions->ARB_compute_shader =
-                                      extensions->ARB_shader_image_load_store &&
-                                      extensions->ARB_shader_atomic_counters;
+            max_threads_per_block >= 1024 &&
+            extensions->ARB_shader_image_load_store &&
+            extensions->ARB_shader_atomic_counters;
 
          if (extensions->ARB_compute_shader) {
             uint64_t max_variable_threads_per_block = 0;



More information about the mesa-commit mailing list