summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mesa/state_tracker/st_extensions.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index 2dbda83ca10..d2660099fc1 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -223,8 +223,13 @@ void st_init_limits(struct pipe_screen *screen,
pc->MaxUniformComponents = MIN2(pc->MaxUniformComponents,
MAX_UNIFORMS * 4);
+ /* For ARB programs, prog_src_register::Index is a signed 13-bit number.
+ * This gives us a limit of 4096 values - but we may need to generate
+ * internal values in addition to what the source program uses. So, we
+ * drop the limit one step lower, to 2048, to be safe.
+ */
pc->MaxParameters =
- pc->MaxNativeParameters = pc->MaxUniformComponents / 4;
+ pc->MaxNativeParameters = MIN2(pc->MaxUniformComponents / 4, 2048);
pc->MaxInputComponents =
screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_INPUTS) * 4;
pc->MaxOutputComponents =