From 15ac66e331abdab12e882d80a6b4f647bc905298 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sun, 18 Dec 2011 02:13:17 +0100 Subject: [PATCH] mesa: rename MaxTransformFeedbackSeparateAttribs to MaxTransformFeedbackBuffers This is a cleanup for ARB_transform_feedback3, where GL_MAX_TRANSFORM_FEEDBACK_BUFFERS is introduced for interleaved attribs and has the same meaning as GL_MAX_.._SEPARATE_ATTRIBS for separate attribs. Also, the maximum number of TFB buffers is reduced from 32 to 4, which makes this patch useful even without the extension. I don't know of any hardware which can do more than 4. Reviewed-by: Brian Paul --- src/mesa/drivers/dri/i965/brw_context.c | 2 +- src/mesa/main/bufferobj.c | 2 +- src/mesa/main/config.h | 1 + src/mesa/main/context.c | 2 +- src/mesa/main/get.c | 8 ++++---- src/mesa/main/mtypes.h | 12 ++++++------ src/mesa/main/transformfeedback.c | 8 ++++---- src/mesa/state_tracker/st_extensions.c | 3 ++- 8 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c index f7073cd57eb..6fb7dd23ef1 100644 --- a/src/mesa/drivers/dri/i965/brw_context.c +++ b/src/mesa/drivers/dri/i965/brw_context.c @@ -138,7 +138,7 @@ brwCreateContext(int api, * So we need to override the Mesa default (which is based only on software * limits). */ - ctx->Const.MaxTransformFeedbackSeparateAttribs = BRW_MAX_SOL_BUFFERS; + ctx->Const.MaxTransformFeedbackBuffers = BRW_MAX_SOL_BUFFERS; /* On Gen6, in the worst case, we use up one binding table entry per * transform feedback component (see comments above the definition of diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c index ea48af97e98..7d72092a2db 100644 --- a/src/mesa/main/bufferobj.c +++ b/src/mesa/main/bufferobj.c @@ -869,7 +869,7 @@ _mesa_DeleteBuffersARB(GLsizei n, const GLuint *ids) if (ctx->TransformFeedback.CurrentBuffer == bufObj) { _mesa_BindBufferARB( GL_TRANSFORM_FEEDBACK_BUFFER, 0 ); } - for (j = 0; j < MAX_FEEDBACK_ATTRIBS; j++) { + for (j = 0; j < MAX_FEEDBACK_BUFFERS; j++) { if (ctx->TransformFeedback.CurrentObject->Buffers[j] == bufObj) { _mesa_BindBufferBase( GL_TRANSFORM_FEEDBACK_BUFFER, j, 0 ); } diff --git a/src/mesa/main/config.h b/src/mesa/main/config.h index 1d5a0622dda..ead1d323c5e 100644 --- a/src/mesa/main/config.h +++ b/src/mesa/main/config.h @@ -249,6 +249,7 @@ #define SUPPORTED_ATI_BUMP_UNITS 0xff /** For GL_EXT_transform_feedback */ +#define MAX_FEEDBACK_BUFFERS 4 #define MAX_FEEDBACK_ATTRIBS 32 /** For GL_ARB_geometry_shader4 */ diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c index 643476b941d..7de714b818a 100644 --- a/src/mesa/main/context.c +++ b/src/mesa/main/context.c @@ -652,7 +652,7 @@ _mesa_init_constants(struct gl_context *ctx) ctx->Const.QuadsFollowProvokingVertexConvention = GL_TRUE; /* GL_EXT_transform_feedback */ - ctx->Const.MaxTransformFeedbackSeparateAttribs = MAX_FEEDBACK_ATTRIBS; + ctx->Const.MaxTransformFeedbackBuffers = MAX_FEEDBACK_BUFFERS; ctx->Const.MaxTransformFeedbackSeparateComponents = 4 * MAX_FEEDBACK_ATTRIBS; ctx->Const.MaxTransformFeedbackInterleavedComponents = 4 * MAX_FEEDBACK_ATTRIBS; diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c index 67732521c53..a83d3672121 100644 --- a/src/mesa/main/get.c +++ b/src/mesa/main/get.c @@ -1232,7 +1232,7 @@ static const struct value_desc values[] = { CONTEXT_INT(Const.MaxTransformFeedbackInterleavedComponents), extra_EXT_transform_feedback }, { GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, - CONTEXT_INT(Const.MaxTransformFeedbackSeparateAttribs), + CONTEXT_INT(Const.MaxTransformFeedbackBuffers), extra_EXT_transform_feedback }, { GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS, CONTEXT_INT(Const.MaxTransformFeedbackSeparateComponents), @@ -2544,7 +2544,7 @@ find_value_indexed(const char *func, GLenum pname, int index, union value *v) return TYPE_INT_4; case GL_TRANSFORM_FEEDBACK_BUFFER_START: - if (index >= ctx->Const.MaxTransformFeedbackSeparateAttribs) + if (index >= ctx->Const.MaxTransformFeedbackBuffers) goto invalid_value; if (!ctx->Extensions.EXT_transform_feedback) goto invalid_enum; @@ -2552,7 +2552,7 @@ find_value_indexed(const char *func, GLenum pname, int index, union value *v) return TYPE_INT64; case GL_TRANSFORM_FEEDBACK_BUFFER_SIZE: - if (index >= ctx->Const.MaxTransformFeedbackSeparateAttribs) + if (index >= ctx->Const.MaxTransformFeedbackBuffers) goto invalid_value; if (!ctx->Extensions.EXT_transform_feedback) goto invalid_enum; @@ -2560,7 +2560,7 @@ find_value_indexed(const char *func, GLenum pname, int index, union value *v) return TYPE_INT64; case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING: - if (index >= ctx->Const.MaxTransformFeedbackSeparateAttribs) + if (index >= ctx->Const.MaxTransformFeedbackBuffers) goto invalid_value; if (!ctx->Extensions.EXT_transform_feedback) goto invalid_enum; diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index d37c1f3de71..5768ed7cdd3 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -1795,7 +1795,7 @@ struct gl_transform_feedback_info * hardware back-ends to determine the correct stride when interleaving * multiple transform feedback outputs in the same buffer. */ - unsigned BufferStride[MAX_FEEDBACK_ATTRIBS]; + unsigned BufferStride[MAX_FEEDBACK_BUFFERS]; }; @@ -1812,13 +1812,13 @@ struct gl_transform_feedback_object at least once? */ /** The feedback buffers */ - GLuint BufferNames[MAX_FEEDBACK_ATTRIBS]; - struct gl_buffer_object *Buffers[MAX_FEEDBACK_ATTRIBS]; + GLuint BufferNames[MAX_FEEDBACK_BUFFERS]; + struct gl_buffer_object *Buffers[MAX_FEEDBACK_BUFFERS]; /** Start of feedback data in dest buffer */ - GLintptr Offset[MAX_FEEDBACK_ATTRIBS]; + GLintptr Offset[MAX_FEEDBACK_BUFFERS]; /** Max data to put into dest buffer (in bytes) */ - GLsizeiptr Size[MAX_FEEDBACK_ATTRIBS]; + GLsizeiptr Size[MAX_FEEDBACK_BUFFERS]; }; @@ -2834,7 +2834,7 @@ struct gl_constants GLbitfield ProfileMask; /**< Mask of CONTEXT_x_PROFILE_BIT */ /** GL_EXT_transform_feedback */ - GLuint MaxTransformFeedbackSeparateAttribs; + GLuint MaxTransformFeedbackBuffers; GLuint MaxTransformFeedbackSeparateComponents; GLuint MaxTransformFeedbackInterleavedComponents; diff --git a/src/mesa/main/transformfeedback.c b/src/mesa/main/transformfeedback.c index d02b6a056a5..6f822120105 100644 --- a/src/mesa/main/transformfeedback.c +++ b/src/mesa/main/transformfeedback.c @@ -447,7 +447,7 @@ _mesa_bind_buffer_range_transform_feedback(struct gl_context *ctx, return; } - if (index >= ctx->Const.MaxTransformFeedbackSeparateAttribs) { + if (index >= ctx->Const.MaxTransformFeedbackBuffers) { _mesa_error(ctx, GL_INVALID_VALUE, "glBindBufferRange(index=%d)", index); return; } @@ -490,7 +490,7 @@ _mesa_bind_buffer_base_transform_feedback(struct gl_context *ctx, return; } - if (index >= ctx->Const.MaxTransformFeedbackSeparateAttribs) { + if (index >= ctx->Const.MaxTransformFeedbackBuffers) { _mesa_error(ctx, GL_INVALID_VALUE, "glBindBufferBase(index=%d)", index); return; } @@ -531,7 +531,7 @@ _mesa_BindBufferOffsetEXT(GLenum target, GLuint index, GLuint buffer, return; } - if (index >= ctx->Const.MaxTransformFeedbackSeparateAttribs) { + if (index >= ctx->Const.MaxTransformFeedbackBuffers) { _mesa_error(ctx, GL_INVALID_VALUE, "glBindBufferOffsetEXT(index=%d)", index); return; @@ -590,7 +590,7 @@ _mesa_TransformFeedbackVaryings(GLuint program, GLsizei count, if (count < 0 || (bufferMode == GL_SEPARATE_ATTRIBS && - (GLuint) count > ctx->Const.MaxTransformFeedbackSeparateAttribs)) { + (GLuint) count > ctx->Const.MaxTransformFeedbackBuffers)) { _mesa_error(ctx, GL_INVALID_VALUE, "glTransformFeedbackVaryings(count=%d)", count); return; diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index dacad9bfb91..6fea1fa080d 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -236,8 +236,9 @@ void st_init_limits(struct st_context *st) c->UniformBooleanTrue = ~0; - c->MaxTransformFeedbackSeparateAttribs = + c->MaxTransformFeedbackBuffers = screen->get_param(screen, PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS); + c->MaxTransformFeedbackBuffers = MIN2(c->MaxTransformFeedbackBuffers, MAX_FEEDBACK_BUFFERS); c->MaxTransformFeedbackSeparateComponents = screen->get_param(screen, PIPE_CAP_MAX_STREAM_OUTPUT_SEPARATE_COMPONENTS); c->MaxTransformFeedbackInterleavedComponents = -- 2.30.2