[Piglit] [PATCH 06/16] util: Use a VAO and VBO for generic attributes in piglit_draw_rect_from_arrays
Paul Berry
stereotype441 at gmail.com
Tue Aug 27 07:50:38 PDT 2013
On 26 August 2013 11:37, Ian Romanick <idr at freedesktop.org> wrote:
> From: Ian Romanick <ian.d.romanick at intel.com>
>
> This will allow users of piglit_draw_rect_from_arrays to function in
> desktop OpenGL core profile.
>
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> Cc: Matt Turner <mattst88 at gmail.com>
> Cc: Paul Berry <stereoytpe441 at gmail.com>
> ---
> tests/util/piglit-util-gl-common.c | 53
> ++++++++++++++++++++++++++++++++++++--
> 1 file changed, 51 insertions(+), 2 deletions(-)
>
> diff --git a/tests/util/piglit-util-gl-common.c
> b/tests/util/piglit-util-gl-common.c
> index d95eeac..79edd76 100644
> --- a/tests/util/piglit-util-gl-common.c
> +++ b/tests/util/piglit-util-gl-common.c
> @@ -24,6 +24,7 @@
> #include "piglit-util-gl-common.h"
> #include <ctype.h>
>
> +#define BUFFER_OFFSET(i) ((char *)NULL + (i))
>
> /**
> * An array of pointers to extension strings.
> @@ -642,15 +643,55 @@ piglit_draw_rect_from_arrays(const void *verts,
> const void *tex,
> #if defined(PIGLIT_USE_OPENGL_ES2) || defined(PIGLIT_USE_OPENGL_ES3) \
> || defined(PIGLIT_USE_OPENGL)
> if (!USE_FF(fixed_function_attributes)) {
> + GLuint buf = 0;
> + GLuint old_buf = 0;
> + GLuint vao = 0;
> + GLuint old_vao = 0;
> +
> + /* Vertex array objects were added in both OpenGL 3.0 and
> + * OpenGL ES 3.0. The use of VAOs is required in desktop
> + * OpenGL 3.1 (without GL_ARB_compatibility) and all
> desktop
> + * OpenGL core profiles. If the functionality is
> supported,
> + * just use it.
> + */
> + if (piglit_get_gl_version() >= 30
> + ||
> piglit_is_extension_supported("GL_OES_vertex_array_object")
> + ||
> piglit_is_extension_supported("GL_ARB_vertex_array_object")) {
> + glGetIntegerv(GL_VERTEX_ARRAY_BINDING,
> + (GLint *) &old_vao);
> + glGenVertexArrays(1, &vao);
> + glBindVertexArray(vao);
> + }
> +
> + glGetIntegerv(GL_ARRAY_BUFFER_BINDING,
> + (GLint *) &old_buf);
> + glGenBuffers(1, &buf);
> + glBindBuffer(GL_ARRAY_BUFFER, buf);
> + glBufferData(GL_ARRAY_BUFFER,
> + (sizeof(GLfloat) * 4 * 4)
> + + (sizeof(GLfloat) * 4 * 2),
> + NULL,
> + GL_STATIC_DRAW);
>
Shouldn't we also condition this code on the presence of
ARB_vertex_buffer_object? Or has that extension been around long enough
that we don't care to test systems that don't support it?
> +
> if (verts) {
> + glBufferSubData(GL_ARRAY_BUFFER,
> + 0,
> + sizeof(GLfloat) * 4 * 4,
> + verts);
> glVertexAttribPointer(PIGLIT_ATTRIB_POS, 4,
> GL_FLOAT,
> - GL_FALSE, 0, verts);
> + GL_FALSE, 0,
> + BUFFER_OFFSET(0));
> glEnableVertexAttribArray(PIGLIT_ATTRIB_POS);
> }
>
> if (tex) {
> + glBufferSubData(GL_ARRAY_BUFFER,
> + sizeof(GLfloat) * 4 * 4,
> + sizeof(GLfloat) * 4 * 2,
> + tex);
> glVertexAttribPointer(PIGLIT_ATTRIB_TEX, 2,
> GL_FLOAT,
> - GL_FALSE, 0, tex);
> + GL_FALSE, 0,
> +
> BUFFER_OFFSET(sizeof(GLfloat) * 4 * 4));
> glEnableVertexAttribArray(PIGLIT_ATTRIB_TEX);
> }
>
> @@ -660,6 +701,14 @@ piglit_draw_rect_from_arrays(const void *verts, const
> void *tex,
> glDisableVertexAttribArray(PIGLIT_ATTRIB_POS);
> if (tex)
> glDisableVertexAttribArray(PIGLIT_ATTRIB_TEX);
> +
> + glBindBuffer(GL_ARRAY_BUFFER, old_buf);
> + glDeleteBuffers(1, &buf);
> +
> + if (vao != 0) {
> + glBindVertexArray(old_vao);
> + glDeleteVertexArrays(1, &vao);
> + }
>
I don't think this does what you want in the case where the implementation
supports vao's, but there was no vao bound before the call to
piglit_draw_rect_from_arrays(). (What it does is: generate a vao, bind it,
use it, and then leave it bound. What I think you want is: generate a vao,
bind it, use it, unbind it, and delete it).
I think you need to do something like this instead:
bool use_vaos = piglit_get_gl_version() >= 30 || ...;
if (use_vaos) {
glGetIntegerv(GL_VERTEX_ARRAY_BINDING...);
...
}
...
if (use_vaos) {
glBindVertexArray(old_vao);
glDeleteVertexArrays(1, &vao);
}
With that fixed, this patch is:
Reviewed-by: Paul Berry <stereotype441 at gmail.com>
> }
> #endif
> }
> --
> 1.8.1.4
>
> _______________________________________________
> Piglit mailing list
> Piglit at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/piglit
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/piglit/attachments/20130827/6bda84a7/attachment-0001.html>
More information about the Piglit
mailing list