Mesa (9.0): mesa: bump MAX_VARYING to 32

Marek Olšák mareko at kemper.freedesktop.org
Fri Nov 23 01:01:35 UTC 2012


Module: Mesa
Branch: 9.0
Commit: 8ff8c91893cee8b1893de91e145c8496a12ab9ca
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=8ff8c91893cee8b1893de91e145c8496a12ab9ca

Author: Marek Olšák <maraeo at gmail.com>
Date:   Fri Oct 26 17:37:07 2012 +0200

mesa: bump MAX_VARYING to 32

We're starting to get apps utilizing more than 16 varyings and
most current hardware supports 32 anyway.

Tested with r600g.
swrast, softpipe and llvmpipe still advertise 16 varyings.

This fixes a WebGL crash after launching this demo:
https://developer.mozilla.org/en-US/demos/detail/falling-cubes

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=54402

NOTE: This is a candidate for the stable branches.

Acked-by: Kenneth Graunke <kenneth at whitecape.org>
(cherry picked from commit b3921e1f53833420e0a0fd581f741744e7957a05)

Conflicts:
	src/mesa/main/context.c

---

 src/gallium/auxiliary/tgsi/tgsi_ureg.c |    2 +-
 src/gallium/include/pipe/p_state.h     |    4 +-
 src/mesa/main/config.h                 |    2 +-
 src/mesa/main/context.c                |    2 +-
 src/mesa/program/prog_print.c          |   36 ++++++++++++++++++++++++++++++-
 5 files changed, 39 insertions(+), 7 deletions(-)

diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.c b/src/gallium/auxiliary/tgsi/tgsi_ureg.c
index 3fe78e0..3c2a923 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_ureg.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.c
@@ -73,7 +73,7 @@ struct ureg_tokens {
 
 #define UREG_MAX_INPUT PIPE_MAX_ATTRIBS
 #define UREG_MAX_SYSTEM_VALUE PIPE_MAX_ATTRIBS
-#define UREG_MAX_OUTPUT PIPE_MAX_ATTRIBS
+#define UREG_MAX_OUTPUT PIPE_MAX_SHADER_OUTPUTS
 #define UREG_MAX_CONSTANT_RANGE 32
 #define UREG_MAX_IMMEDIATE 256
 #define UREG_MAX_ADDR 2
diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h
index 9ea9c0e..a67c43e 100644
--- a/src/gallium/include/pipe/p_state.h
+++ b/src/gallium/include/pipe/p_state.h
@@ -59,7 +59,7 @@ extern "C" {
 #define PIPE_MAX_CONSTANT_BUFFERS 32
 #define PIPE_MAX_SAMPLERS         16
 #define PIPE_MAX_SHADER_INPUTS    32
-#define PIPE_MAX_SHADER_OUTPUTS   32
+#define PIPE_MAX_SHADER_OUTPUTS   48 /* 32 GENERICs + POS, PSIZE, FOG, etc. */
 #define PIPE_MAX_SHADER_SAMPLER_VIEWS 32
 #define PIPE_MAX_SHADER_RESOURCES 32
 #define PIPE_MAX_TEXTURE_LEVELS   16
@@ -145,7 +145,7 @@ struct pipe_rasterizer_state
    unsigned line_stipple_factor:8;  /**< [1..256] actually */
    unsigned line_stipple_pattern:16;
 
-   unsigned sprite_coord_enable:PIPE_MAX_SHADER_OUTPUTS;
+   unsigned sprite_coord_enable; /* bitfield referring to 32 GENERIC inputs */
 
    float line_width;
    float point_size;           /**< used when no per-vertex size */
diff --git a/src/mesa/main/config.h b/src/mesa/main/config.h
index ead1d32..3572ae8 100644
--- a/src/mesa/main/config.h
+++ b/src/mesa/main/config.h
@@ -187,7 +187,7 @@
 #define MAX_PROGRAM_CALL_DEPTH         8
 #define MAX_PROGRAM_TEMPS              256
 #define MAX_PROGRAM_ADDRESS_REGS       2
-#define MAX_VARYING                    16    /**< number of float[4] vectors */
+#define MAX_VARYING                    32    /**< number of float[4] vectors */
 #define MAX_SAMPLERS                   MAX_TEXTURE_IMAGE_UNITS
 #define MAX_PROGRAM_INPUTS             32
 #define MAX_PROGRAM_OUTPUTS            64
diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index a21ae10..de385cd 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -624,7 +624,7 @@ _mesa_init_constants(struct gl_context *ctx)
 #if FEATURE_ARB_vertex_shader
    ctx->Const.MaxVertexTextureImageUnits = MAX_VERTEX_TEXTURE_IMAGE_UNITS;
    ctx->Const.MaxCombinedTextureImageUnits = MAX_COMBINED_TEXTURE_IMAGE_UNITS;
-   ctx->Const.MaxVarying = MAX_VARYING;
+   ctx->Const.MaxVarying = 16; /* old limit not to break tnl and swrast */
 #endif
 #if FEATURE_ARB_geometry_shader4
    ctx->Const.MaxGeometryTextureImageUnits = MAX_GEOMETRY_TEXTURE_IMAGE_UNITS;
diff --git a/src/mesa/program/prog_print.c b/src/mesa/program/prog_print.c
index bc5dc58..887f020 100644
--- a/src/mesa/program/prog_print.c
+++ b/src/mesa/program/prog_print.c
@@ -164,7 +164,23 @@ arb_input_attrib_string(GLint index, GLenum progType)
       "fragment.varying[12]",
       "fragment.varying[13]",
       "fragment.varying[14]",
-      "fragment.varying[15]" /* MAX_VARYING = 16 */
+      "fragment.varying[15]",
+      "fragment.varying[16]",
+      "fragment.varying[17]",
+      "fragment.varying[18]",
+      "fragment.varying[19]",
+      "fragment.varying[20]",
+      "fragment.varying[21]",
+      "fragment.varying[22]",
+      "fragment.varying[23]",
+      "fragment.varying[24]",
+      "fragment.varying[25]",
+      "fragment.varying[26]",
+      "fragment.varying[27]",
+      "fragment.varying[28]",
+      "fragment.varying[29]",
+      "fragment.varying[30]",
+      "fragment.varying[31]", /* MAX_VARYING = 32 */
    };
 
    /* sanity checks */
@@ -268,7 +284,23 @@ arb_output_attrib_string(GLint index, GLenum progType)
       "result.varying[12]",
       "result.varying[13]",
       "result.varying[14]",
-      "result.varying[15]" /* MAX_VARYING = 16 */
+      "result.varying[15]",
+      "result.varying[16]",
+      "result.varying[17]",
+      "result.varying[18]",
+      "result.varying[19]",
+      "result.varying[20]",
+      "result.varying[21]",
+      "result.varying[22]",
+      "result.varying[23]",
+      "result.varying[24]",
+      "result.varying[25]",
+      "result.varying[26]",
+      "result.varying[27]",
+      "result.varying[28]",
+      "result.varying[29]",
+      "result.varying[30]",
+      "result.varying[31]", /* MAX_VARYING = 32 */
    };
    static const char *const fragResults[] = {
       "result.depth", /* FRAG_RESULT_DEPTH */




More information about the mesa-commit mailing list