Mesa (master): gallium/st: reserve space in default uniform block for lowered constants

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Mar 18 10:32:57 UTC 2021


Module: Mesa
Branch: master
Commit: 0b090d8e6773678b61e55c2380f7372f62ba1b0a
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=0b090d8e6773678b61e55c2380f7372f62ba1b0a

Author: Erik Faye-Lund <erik.faye-lund at collabora.com>
Date:   Tue Mar 16 18:40:01 2021 +0100

gallium/st: reserve space in default uniform block for lowered constants

If we don't reserve these, we risk these lowering passes eating up more
uniforms than we have available.

This fixes a crash due to an assert in Zink, because we end up trying to
use a too large UBO after lowering.

Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9631>

---

 .../drivers/zink/ci/piglit-zink-lvp-fails.txt      |  2 --
 src/mesa/state_tracker/st_extensions.c             | 24 ++++++++++++++++++++++
 2 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/zink/ci/piglit-zink-lvp-fails.txt b/src/gallium/drivers/zink/ci/piglit-zink-lvp-fails.txt
index 716284475e3..411c231572d 100644
--- a/src/gallium/drivers/zink/ci/piglit-zink-lvp-fails.txt
+++ b/src/gallium/drivers/zink/ci/piglit-zink-lvp-fails.txt
@@ -25,8 +25,6 @@ glx at glx_ext_import_context@query context info,Fail
 shaders at glsl-bug-110796,Fail
 shaders at glsl-fs-flat-color,Fail
 shaders at glsl-fs-pointcoord,Fail
-shaders at glsl-uniform-interstage-limits@subdivide 5,Crash
-shaders at glsl-uniform-interstage-limits@subdivide 5- statechanges,Crash
 shaders at point-vertex-id divisor,Fail
 shaders at point-vertex-id gl_instanceid,Fail
 shaders at point-vertex-id gl_instanceid divisor,Fail
diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index 055de9b9479..4b684e1e654 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -221,6 +221,30 @@ void st_init_limits(struct pipe_screen *screen,
       pc->MaxUniformComponents =
          screen->get_shader_param(screen, sh,
                                   PIPE_SHADER_CAP_MAX_CONST_BUFFER_SIZE) / 4;
+
+      /* reserve space in the default-uniform for lowered state */
+      if (sh == PIPE_SHADER_VERTEX ||
+          sh == PIPE_SHADER_TESS_EVAL ||
+          sh == PIPE_SHADER_GEOMETRY) {
+
+         if (!screen->get_param(screen, PIPE_CAP_CLIP_PLANES))
+            pc->MaxUniformComponents -= 4 * MAX_CLIP_PLANES;
+
+         if (!screen->get_param(screen, PIPE_CAP_POINT_SIZE_FIXED))
+            pc->MaxUniformComponents -= 4;
+
+         if (screen->get_param(screen, PIPE_CAP_DEPTH_CLIP_DISABLE) == 2)
+            pc->MaxUniformComponents -= 4;
+
+      } else if (sh == PIPE_SHADER_FRAGMENT) {
+         if (screen->get_param(screen, PIPE_CAP_DEPTH_CLIP_DISABLE) == 2)
+            pc->MaxUniformComponents -= 4;
+
+         if (!screen->get_param(screen, PIPE_CAP_ALPHA_TEST))
+            pc->MaxUniformComponents -= 4;
+      }
+
+
       pc->MaxUniformComponents = MIN2(pc->MaxUniformComponents,
                                       MAX_UNIFORMS * 4);
 



More information about the mesa-commit mailing list