mesa: bump MAX_VARYING to 32
authorMarek Olšák <maraeo@gmail.com>
Fri, 26 Oct 2012 15:37:07 +0000 (17:37 +0200)
committerMarek Olšák <maraeo@gmail.com>
Mon, 29 Oct 2012 11:51:41 +0000 (12:51 +0100)
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@whitecape.org>
src/gallium/auxiliary/tgsi/tgsi_ureg.c
src/gallium/include/pipe/p_state.h
src/mesa/main/config.h
src/mesa/main/context.c
src/mesa/program/prog_print.c

index 3fe78e0b7f0a5955cb0df0ece30d6b104f2592b6..3c2a923181e82d050379d8a8ab5d5ba29bd77c03 100644 (file)
@@ -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
index 6d0db0f86f89d1e65028fa5811255527ef75efef..f84bfd79d6a88dc9c908bfd0db25f4bcc2a8d54d 100644 (file)
@@ -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 */
index 1b72b5449fd212d7621b582c30d5ee4d37309f45..99910d7f36fad5dde0f714c2b9efae9253635b7f 100644 (file)
 #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
index b00c64233c2d864a18d89e6de2d29e6430e44a7e..a51073843f6dbe9b72e97691f25cc5a0544c45fd 100644 (file)
@@ -614,7 +614,7 @@ _mesa_init_constants(struct gl_context *ctx)
 
    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 */
    ctx->Const.MaxGeometryTextureImageUnits = MAX_GEOMETRY_TEXTURE_IMAGE_UNITS;
    ctx->Const.MaxVertexVaryingComponents = MAX_VERTEX_VARYING_COMPONENTS;
    ctx->Const.MaxGeometryVaryingComponents = MAX_GEOMETRY_VARYING_COMPONENTS;
index a83cce4e3cd88ffb0230419296ddc5a7aaf59db8..dbaa4d01761655436b992c3f4c3ba68bf2dd982e 100644 (file)
@@ -158,7 +158,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 */
@@ -262,7 +278,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 */