[Mesa-dev] [PATCH 1/3] vbo: Reestablish VAO limit checking on imm VAOs.

Christian Gmeiner christian.gmeiner at gmail.com
Sun Jun 3 18:08:14 UTC 2018


Am Sa., 2. Juni 2018 um 08:53 Uhr schrieb <Mathias.Froehlich at gmx.net>:
>
> From: Mathias Fröhlich <mathias.froehlich at web.de>
>
> Bail out with out of memory, when the required stride exceeds the
> maximum possible stride as stored in Const.MaxVertexAttribStride.
> Etnaviv can only handle less than the OpenGL standard mandated
> minimum of 2048. For this one, at least give some 'resource
> exhaustion error' to the application.
> The virgl driver provides 0 for Const.MaxVertexAttribStride
> as it may not be able to query the relevant informatition from the
> underlying OpenGL stack. In this case we just make the assumption
> that the underlying OpenGL stack is able to cope with then commonly
> seen small strides. Note that this is the same than what applications
> had to do before the queries to GL_MAX_VERTEX_ATTRIB_STRIDE, they had to
> hope for the best that the driver and hardware can safely handle the
> used stride values.
>
> Signed-off-by: Mathias Fröhlich <Mathias.Froehlich at web.de>
> ---
>  src/mesa/vbo/vbo_exec_draw.c | 24 +++++++++++++++++++++++-
>  1 file changed, 23 insertions(+), 1 deletion(-)
>
> diff --git a/src/mesa/vbo/vbo_exec_draw.c b/src/mesa/vbo/vbo_exec_draw.c
> index 8d74725db3..0ab9a0d3ea 100644
> --- a/src/mesa/vbo/vbo_exec_draw.c
> +++ b/src/mesa/vbo/vbo_exec_draw.c
> @@ -177,6 +177,29 @@ vbo_exec_bind_arrays(struct gl_context *ctx)
>     struct gl_vertex_array_object *vao = vbo->VAO;
>     struct vbo_exec_context *exec = &vbo->exec;
>
> +   const GLuint stride = exec->vtx.vertex_size*sizeof(GLfloat);
> +
> +   /* Bail out with out of memory, when the required stride exceeds the
> +    * maximum possible stride.
> +    * Etnaviv can only handle less than the OpenGL standard mandated
> +    * minimum of 2048. For this one, at least give some 'resource
> +    * exhaustion error' to the application.
> +    * The virgl driver provides 0 for Const.MaxVertexAttribStride
> +    * as it may not be able to query the relevant informatition from the
> +    * underlying OpenGL stack. In this case we just make the assumption
> +    * that the underlying OpenGL stack is able to cope with then commonly
> +    * seen small strides. Note that this is the same than what applications
> +    * had to do before the queries to GL_MAX_VERTEX_ATTRIB_STRIDE, they had to
> +    * hope for the best that the driver and hardware can safely handle the
> +    * used stride values.
> +    */

Do we really need to duplicate the commit message text here? If the driver fetch
up e.g. by supporting other/newer GPUs with a more sane limit the patch author
needs to update this comment too.

> +   if (ctx->Const.MaxVertexAttribStride &&
> +       stride > ctx->Const.MaxVertexAttribStride) {
> +      _mesa_set_draw_vao(ctx, ctx->Array._EmptyVAO, 0);
> +      _mesa_error(ctx, GL_OUT_OF_MEMORY, "Max VAO binding stride exceeded");
> +      return;
> +   }
> +
>     GLintptr buffer_offset;
>     if (_mesa_is_bufferobj(exec->vtx.bufferobj)) {
>        assert(exec->vtx.bufferobj->Mappings[MAP_INTERNAL].Pointer);
> @@ -200,7 +223,6 @@ 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);
>     _mesa_bind_vertex_buffer(ctx, vao, 0, exec->vtx.bufferobj, buffer_offset,
>                              stride);
>
> --
> 2.17.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev



-- 
greets
--
Christian Gmeiner, MSc

https://christian-gmeiner.info


More information about the mesa-dev mailing list