From a384238c3dbcc89f7acc51027b123e50d2d3ae60 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Tue, 10 Sep 2013 09:21:56 -0500 Subject: [PATCH] mesa: Track per-stage shader input and output limits independently MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Brian Paul Reviewed-by: Marek Olšák Reviewed-by: Paul Berry Cc: Zack Rusin --- src/mesa/main/mtypes.h | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 6d700ece89e..9f921c4d9fa 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -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; -- 2.30.2