vbo: Make sure the internal VAO's stay within limits.
authorMathias Fröhlich <mathias.froehlich@web.de>
Thu, 22 Mar 2018 04:34:09 +0000 (05:34 +0100)
committerMathias Fröhlich <mathias.froehlich@web.de>
Fri, 23 Mar 2018 18:59:02 +0000 (19:59 +0100)
Reviewed-by: Brian Paul <brianp@vmware.com>
Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
src/mesa/vbo/vbo_exec_draw.c
src/mesa/vbo/vbo_save_api.c

index 026b7be129e49bd6ded737ae08899f7a64287c33..31d77002257b346630fd9697f2f9b1afa5ea3b16 100644 (file)
@@ -200,8 +200,10 @@ vbo_exec_bind_arrays(struct gl_context *ctx)
    assert((~vao_enabled & vao->_Enabled) == 0);
 
    /* Bind the buffer object */
+   const GLuint stride = exec->vtx.vertex_size*sizeof(GLfloat);
+   assert(stride <= ctx->Const.MaxVertexAttribStride);
    _mesa_bind_vertex_buffer(ctx, vao, 0, exec->vtx.bufferobj, buffer_offset,
-                            exec->vtx.vertex_size*sizeof(GLfloat), false);
+                            stride, false);
 
    /* Retrieve the mapping from VBO_ATTRIB to VERT_ATTRIB space
     * Note that the position/generic0 aliasing is done in the VAO.
@@ -217,6 +219,7 @@ vbo_exec_bind_arrays(struct gl_context *ctx)
       const GLenum16 type = exec->vtx.attrtype[vbo_attr];
       const GLuint offset = (GLuint)((GLbyte *)exec->vtx.attrptr[vbo_attr] -
                                      (GLbyte *)exec->vtx.vertex);
+      assert(offset <= ctx->Const.MaxVertexAttribRelativeOffset);
 
       /* Set and enable */
       _vbo_set_attrib_format(ctx, vao, vao_attr, buffer_offset,
index 9dd9c7d7d22e3c3f971832147f290c0d09761408..a367a569c8d2781e2cafa4765c37acf5b9644add 100644 (file)
@@ -493,6 +493,7 @@ update_vao(struct gl_context *ctx,
    *vao = _mesa_new_vao(ctx, ~((GLuint)0));
 
    /* Bind the buffer object at binding point 0 */
+   assert(stride <= ctx->Const.MaxVertexAttribStride);
    _mesa_bind_vertex_buffer(ctx, *vao, 0, bo, buffer_offset, stride, false);
 
    /* Retrieve the mapping from VBO_ATTRIB to VERT_ATTRIB space
@@ -504,6 +505,7 @@ update_vao(struct gl_context *ctx,
    while (mask) {
       const int vao_attr = u_bit_scan(&mask);
       const GLubyte vbo_attr = vao_to_vbo_map[vao_attr];
+      assert(offset[vbo_attr] <= ctx->Const.MaxVertexAttribRelativeOffset);
 
       _vbo_set_attrib_format(ctx, *vao, vao_attr, buffer_offset,
                              size[vbo_attr], type[vbo_attr], offset[vbo_attr]);