[Mesa-dev] [PATCH 1/3] mesa: implement GL_MAX_VERTEX_ATTRIB_STRIDE

Timothy Arceri t_arceri at yahoo.com.au
Fri Aug 15 06:45:42 PDT 2014


Hi Marek,

I've created a new patch which allows drivers to set the limit. I'll
leave the r600g patch up to someone who knows gallium better than me and
can actually test it.

Tim

On Fri, 2014-08-15 at 00:57 +0200, Marek Olšák wrote:
> Hi Timothy,
> 
> The maximum stride is 2047 with r600g and 2048 with radeonsi. It would
> be better if there was a way for drivers to set this limit.
> 
> Marek
> 
> On Fri, Aug 15, 2014 at 12:10 AM, Timothy Arceri <t_arceri at yahoo.com.au> wrote:
> > Signed-off-by: Timothy Arceri <t_arceri at 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 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.
> >
> >  Piglit tests:
> >  http://lists.freedesktop.org/archives/piglit/2014-August/012149.html
> >
> >  src/mapi/glapi/gen/ARB_vertex_attrib_binding.xml |  1 +
> >  src/mesa/main/config.h                           |  5 ++++
> >  src/mesa/main/get_hash_params.py                 |  1 +
> >  src/mesa/main/varray.c                           | 29 ++++++++++++++++++++++++
> >  4 files changed, 36 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/config.h b/src/mesa/main/config.h
> > index 4ec4b75..9513ed5 100644
> > --- a/src/mesa/main/config.h
> > +++ b/src/mesa/main/config.h
> > @@ -204,6 +204,11 @@
> >  #define MAX_PROGRAM_OUTPUTS            64
> >  /*@}*/
> >
> > +/** For GL 4.4 */
> > +/*@{*/
> > +#define MAX_VERTEX_ATTRIB_STRIDE 2048
> > +/*@}*/
> > +
> >  /** For GL_ARB_vertex_program */
> >  /*@{*/
> >  #define MAX_VERTEX_PROGRAM_ADDRESS_REGS 1
> > diff --git a/src/mesa/main/get_hash_params.py b/src/mesa/main/get_hash_params.py
> > index ff85820..2de9ef0 100644
> > --- a/src/mesa/main/get_hash_params.py
> > +++ b/src/mesa/main/get_hash_params.py
> > @@ -763,6 +763,7 @@ descriptor=[
> >  # GL_ARB_vertex_attrib_binding
> >    [ "MAX_VERTEX_ATTRIB_RELATIVE_OFFSET", "CONTEXT_ENUM(Const.MaxVertexAttribRelativeOffset), NO_EXTRA" ],
> >    [ "MAX_VERTEX_ATTRIB_BINDINGS", "CONTEXT_ENUM(Const.MaxVertexAttribBindings), NO_EXTRA" ],
> > +  [ "MAX_VERTEX_ATTRIB_STRIDE", "CONST(MAX_VERTEX_ATTRIB_STRIDE), NO_EXTRA" ],
> >
> >  # GL_ARB_shader_image_load_store
> >    [ "MAX_IMAGE_UNITS", "CONTEXT_INT(Const.MaxImageUnits), extra_ARB_shader_image_load_store"],
> > diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c
> > index 230fb30..6b43260 100644
> > --- a/src/mesa/main/varray.c
> > +++ b/src/mesa/main/varray.c
> > @@ -655,6 +655,13 @@ _mesa_VertexAttribPointer(GLuint index, GLint size, GLenum type,
> >        return;
> >     }
> >
> > +   if (ctx->API == API_OPENGL_CORE && ctx->Version >= 44 &&
> > +       stride > MAX_VERTEX_ATTRIB_STRIDE) {
> > +      _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointer(stride=%d > "
> > +                  "GL_MAX_VERTEX_ATTRIB_STRIDE)", stride);
> > +      return;
> > +   }
> > +
> >     update_array(ctx, "glVertexAttribPointer", VERT_ATTRIB_GENERIC(index),
> >                  legalTypes, 1, BGRA_OR_4,
> >                  size, type, stride, normalized, GL_FALSE, ptr);
> > @@ -683,6 +690,13 @@ _mesa_VertexAttribIPointer(GLuint index, GLint size, GLenum type,
> >        return;
> >     }
> >
> > +   if (ctx->API == API_OPENGL_CORE && ctx->Version >= 44 &&
> > +       stride > MAX_VERTEX_ATTRIB_STRIDE) {
> > +      _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribIPointer(stride=%d > "
> > +                  "GL_MAX_VERTEX_ATTRIB_STRIDE)", stride);
> > +      return;
> > +   }
> > +
> >     update_array(ctx, "glVertexAttribIPointer", VERT_ATTRIB_GENERIC(index),
> >                  legalTypes, 1, 4,
> >                  size, type, stride, normalized, integer, ptr);
> > @@ -1437,6 +1451,13 @@ _mesa_BindVertexBuffer(GLuint bindingIndex, GLuint buffer, GLintptr offset,
> >        return;
> >     }
> >
> > +   if (ctx->API == API_OPENGL_CORE && ctx->Version >= 44 &&
> > +       stride > MAX_VERTEX_ATTRIB_STRIDE) {
> > +      _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 +1586,14 @@ _mesa_BindVertexBuffers(GLuint first, GLsizei count, const GLuint *buffers,
> >           continue;
> >        }
> >
> > +      if (ctx->API == API_OPENGL_CORE && ctx->Version >= 44 &&
> > +          strides[i] > MAX_VERTEX_ATTRIB_STRIDE) {
> > +         _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)];
> > --
> > 1.9.3
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/mesa-dev




More information about the mesa-dev mailing list