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