Patches 1 and 3 are Reviewed-by: Ian Romanick <ian.d.roman...@intel.com>
On 08/20/2014 01:14 AM, Timothy Arceri wrote: > V2: moved test for the VertexAttrib*Pointer() functions > to update_array(), and made constant available for drivers to set > > Signed-off-by: Timothy Arceri <t_arc...@yahoo.com.au> > --- > Although 4.4 is a while away GL_MAX_VERTEX_ATTRIB_STRIDE is used in > the ARB_direct_state_access spec so it seemed worth while adding this now. > > I've added MAX_VERTEX_ATTRIB_STRIDE to ARB_vertex_attrib_binding.xml > as it didn't seem like it was worth putting it somewhere on its own > as its really just a bug fix. Let me know if this should be moved. > > Finally I've assumed that 2048 is an ok value for i965. > > V4: add cap for all gallium drivers set to default (except r600g) > > V3: adds values for r600g and radeonsi (I'm unsable to test either of these > patches) > > src/mapi/glapi/gen/ARB_vertex_attrib_binding.xml | 1 + > src/mesa/main/context.c | 3 +++ > src/mesa/main/get_hash_params.py | 3 +++ > src/mesa/main/mtypes.h | 3 +++ > src/mesa/main/varray.c | 22 ++++++++++++++++++++++ > 5 files changed, 32 insertions(+) > > diff --git a/src/mapi/glapi/gen/ARB_vertex_attrib_binding.xml > b/src/mapi/glapi/gen/ARB_vertex_attrib_binding.xml > index 0ee6a3c..7e62688 100644 > --- a/src/mapi/glapi/gen/ARB_vertex_attrib_binding.xml > +++ b/src/mapi/glapi/gen/ARB_vertex_attrib_binding.xml > @@ -53,6 +53,7 @@ > <enum name="VERTEX_BINDING_STRIDE" value="0x82D8"/> > <enum name="MAX_VERTEX_ATTRIB_RELATIVE_OFFSET" value="0x82D9"/> > <enum name="MAX_VERTEX_ATTRIB_BINDINGS" value="0x82DA"/> > + <enum name="MAX_VERTEX_ATTRIB_STRIDE" value="0x82E5"/> > > </category> > </OpenGLAPI> > diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c > index 2320842..fbdbd68 100644 > --- a/src/mesa/main/context.c > +++ b/src/mesa/main/context.c > @@ -670,6 +670,9 @@ _mesa_init_constants(struct gl_constants *consts, gl_api > api) > ? GL_CONTEXT_CORE_PROFILE_BIT > : GL_CONTEXT_COMPATIBILITY_PROFILE_BIT; > > + /* GL 4.4 */ > + consts->MaxVertexAttribStride = 2048; > + > /** GL_EXT_gpu_shader4 */ > consts->MinProgramTexelOffset = -8; > consts->MaxProgramTexelOffset = 7; > diff --git a/src/mesa/main/get_hash_params.py > b/src/mesa/main/get_hash_params.py > index ff85820..aace8a5 100644 > --- a/src/mesa/main/get_hash_params.py > +++ b/src/mesa/main/get_hash_params.py > @@ -712,6 +712,9 @@ descriptor=[ > [ "MAX_GEOMETRY_INPUT_COMPONENTS", > "CONTEXT_INT(Const.Program[MESA_SHADER_GEOMETRY].MaxInputComponents), > extra_version_32" ], > [ "MAX_GEOMETRY_OUTPUT_COMPONENTS", > "CONTEXT_INT(Const.Program[MESA_SHADER_GEOMETRY].MaxOutputComponents), > extra_version_32" ], > > +# GL 4.4 > + [ "MAX_VERTEX_ATTRIB_STRIDE", "CONTEXT_ENUM(Const.MaxVertexAttribStride), > NO_EXTRA" ], > + > # GL_ARB_robustness > [ "RESET_NOTIFICATION_STRATEGY_ARB", "CONTEXT_ENUM(Const.ResetStrategy), > NO_EXTRA" ], > > diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h > index cb2a4df..adb6788 100644 > --- a/src/mesa/main/mtypes.h > +++ b/src/mesa/main/mtypes.h > @@ -3414,6 +3414,9 @@ struct gl_constants > /** OpenGL version 3.2 */ > GLbitfield ProfileMask; /**< Mask of CONTEXT_x_PROFILE_BIT */ > > + /** OpenGL version 4.4 */ > + GLuint MaxVertexAttribStride; > + > /** GL_EXT_transform_feedback */ > GLuint MaxTransformFeedbackBuffers; > GLuint MaxTransformFeedbackSeparateComponents; > diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c > index 5d3cc2a..7d169f9 100644 > --- a/src/mesa/main/varray.c > +++ b/src/mesa/main/varray.c > @@ -424,6 +424,13 @@ update_array(struct gl_context *ctx, > return; > } > > + if (ctx->API == API_OPENGL_CORE && ctx->Version >= 44 && > + stride > ctx->Const.MaxVertexAttribStride) { > + _mesa_error(ctx, GL_INVALID_VALUE, "%s(stride=%d > " > + "GL_MAX_VERTEX_ATTRIB_STRIDE)", func, stride); > + return; > + } > + > /* Page 29 (page 44 of the PDF) of the OpenGL 3.3 spec says: > * > * "An INVALID_OPERATION error is generated under any of the following > @@ -1437,6 +1444,13 @@ _mesa_BindVertexBuffer(GLuint bindingIndex, GLuint > buffer, GLintptr offset, > return; > } > > + if (ctx->API == API_OPENGL_CORE && ctx->Version >= 44 && > + stride > ctx->Const.MaxVertexAttribStride) { > + _mesa_error(ctx, GL_INVALID_VALUE, "glBindVertexBuffer(stride=%d > " > + "GL_MAX_VERTEX_ATTRIB_STRIDE)", stride); > + return; > + } > + > if (buffer == > vao->VertexBinding[VERT_ATTRIB_GENERIC(bindingIndex)].BufferObj->Name) { > vbo = vao->VertexBinding[VERT_ATTRIB_GENERIC(bindingIndex)].BufferObj; > } else if (buffer != 0) { > @@ -1565,6 +1579,14 @@ _mesa_BindVertexBuffers(GLuint first, GLsizei count, > const GLuint *buffers, > continue; > } > > + if (ctx->API == API_OPENGL_CORE && ctx->Version >= 44 && > + strides[i] > ctx->Const.MaxVertexAttribStride) { > + _mesa_error(ctx, GL_INVALID_VALUE, > + "glBindVertexBuffers(strides[%u]=%d > " > + "GL_MAX_VERTEX_ATTRIB_STRIDE)", i, strides[i]); > + continue; > + } > + > if (buffers[i]) { > struct gl_vertex_buffer_binding *binding = > &vao->VertexBinding[VERT_ATTRIB_GENERIC(first + i)]; > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev