mesa: Track per-stage shader input and output limits independently

In OpenGL 3.2 these are independently queryable.  In addition, the spec
has different minimum-maximums for various values.
GL_MAX_VERTEX_OUTPUT_COMPONENTS is 64, but
GL_MAX_GEOMETRY_OUTPUT_COMPONENTS (and GL_MAX_FRAGMENT_INPUT_COMPONENTS)
is 128.

In OpenGL ES 3.0 these are also independently queryable.  The spec has
different minimum-maximums for various values.
GL_MAX_VERTEX_OUTPUT_VECTORS is 16, but GL_MAX_FRAGMENT_INTPUT_VECTORS
is 15.

None of these values are used yet.  I have just added space to the
structures.  Future patches will add users and eventually remove some
old fields.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
Cc: Zack Rusin <zackr@vmware.com>
This commit is contained in:
Ian Romanick
2013-09-10 09:21:56 -05:00
parent d38765f3c8
commit a384238c3d
+24
View File
@@ -2832,6 +2832,30 @@ struct gl_program_constants
GLuint MaxNativeParameters;
/* For shaders */
GLuint MaxUniformComponents; /**< Usually == MaxParameters * 4 */
/**
* \name Per-stage input / output limits
*
* Previous to OpenGL 3.2, the intrastage data limits were advertised with
* a single value: GL_MAX_VARYING_COMPONENTS (GL_MAX_VARYING_VECTORS in
* ES). This is stored as \c gl_constants::MaxVarying.
*
* Starting with OpenGL 3.2, the limits are advertised with per-stage
* variables. Each stage as a certain number of outputs that it can feed
* to the next stage and a certain number inputs that it can consume from
* the previous stage.
*
* Vertex shader inputs do not participate this in this accounting.
* These are tracked exclusively by \c gl_program_constants::MaxAttribs.
*
* Fragment shader outputs do not participate this in this accounting.
* These are tracked exclusively by \c gl_constants::MaxDrawBuffers.
*/
/*@{*/
GLuint MaxInputComponents;
GLuint MaxOutputComponents;
/*@}*/
/* ES 2.0 and GL_ARB_ES2_compatibility */
struct gl_precision LowFloat, MediumFloat, HighFloat;
struct gl_precision LowInt, MediumInt, HighInt;