[Piglit] [PATCH 04/13] util: Allow non-ES2 code to draw_rect with non-fixed-function arrays

Paul Berry stereotype441 at gmail.com
Fri Aug 30 11:33:33 PDT 2013


On 28 August 2013 11:49, Ian Romanick <idr at freedesktop.org> wrote:

> On 08/28/2013 10:57 AM, Paul Berry wrote:
> > On 28 August 2013 10:55, Ian Romanick <idr at freedesktop.org
> > <mailto:idr at freedesktop.org>> wrote:
> >
> >     On 08/28/2013 09:36 AM, Paul Berry wrote:
> >     > On 27 August 2013 18:45, Ian Romanick <idr at freedesktop.org
> >     <mailto:idr at freedesktop.org>
> >     > <mailto:idr at freedesktop.org <mailto:idr at freedesktop.org>>> wrote:
> >     >
> >     >     From: Ian Romanick <ian.d.romanick at intel.com
> >     <mailto:ian.d.romanick at intel.com>
> >     >     <mailto:ian.d.romanick at intel.com
> >     <mailto:ian.d.romanick at intel.com>>>
> >     >
> >     >     This will be used in future commits.
> >     >
> >     >     v2: Use current program state to determine whether to use
> >     fixed-function
> >     >     attributes.  There are two proposals in this patch.  Hopefully
> >     reviewers
> >     >     will pick one.  The first method checks whether the current
> >     program
> >     >     contains an attribute named "piglit_vertex".  If it does,
> >     fixed-function
> >     >     attributes are not used.  The other method check whether the
> >     current
> >     >     program contains an attribute whose name starts with "gl_".
> >      If it does,
> >     >     fixed-function attributes are used.
> >     >
> >     >     Signed-off-by: Ian Romanick <ian.d.romanick at intel.com
> >     <mailto:ian.d.romanick at intel.com>
> >     >     <mailto:ian.d.romanick at intel.com
> >     <mailto:ian.d.romanick at intel.com>>>
> >     >     Cc: Matt Turner <mattst88 at gmail.com
> >     <mailto:mattst88 at gmail.com> <mailto:mattst88 at gmail.com
> >     <mailto:mattst88 at gmail.com>>>
> >     >     Cc: Paul Berry <stereotype441 at gmail.com
> >     <mailto:stereotype441 at gmail.com>
> >     >     <mailto:stereotype441 at gmail.com <mailto:
> stereotype441 at gmail.com>>>
> >     >     Cc: Eric Anholt <eric at anholt.net <mailto:eric at anholt.net>
> >     <mailto:eric at anholt.net <mailto:eric at anholt.net>>>
> >     >     ---
> >     >      tests/util/piglit-util-gl-common.c | 123
> >     >     ++++++++++++++++++++++++++++---------
> >     >      1 file changed, 95 insertions(+), 28 deletions(-)
> >     >
> >     >     diff --git a/tests/util/piglit-util-gl-common.c
> >     >     b/tests/util/piglit-util-gl-common.c
> >     >     index b5e87bf..ec66a65 100644
> >     >     --- a/tests/util/piglit-util-gl-common.c
> >     >     +++ b/tests/util/piglit-util-gl-common.c
> >     >     @@ -603,42 +603,109 @@
> >     >     required_gl_version_from_glsl_version(unsigned glsl_version)
> >     >      void
> >     >      piglit_draw_rect_from_arrays(const void *verts, const void
> *tex)
> >     >      {
> >     >     -#if defined(PIGLIT_USE_OPENGL_ES1) ||
> defined(PIGLIT_USE_OPENGL)
> >     >     -       if (verts) {
> >     >     -               glVertexPointer(4, GL_FLOAT, 0, verts);
> >     >     -               glEnableClientState(GL_VERTEX_ARRAY);
> >     >     -       }
> >     >     +#if defined(PIGLIT_USE_OPENGL_ES1)
> >     >     +       static const bool use_fixed_function_attributes = true;
> >     >     +#elif defined(PIGLIT_USE_OPENGL_ES2) ||
> >     defined(PIGLIT_USE_OPENGL_ES3)
> >     >     +       static const bool use_fixed_function_attributes =
> false;
> >     >
> >     >
> >     > I realize I'm quibbling here, but using "static" on these consts
> seems
> >     > strange to me.  Since the compiler is going to optimize them away
> >     > anyhow, it seems silly to ask it to put them in the data segment.
>  In
> >     > fact, it makes me worry that it might defeat constant folding for
> some
> >     > stupid reason.
> >     >
> >     >
> >     >     +#elif defined(PIGLIT_USE_OPENGL)
> >     >     +       bool use_fixed_function_attributes = true;
> >     >     +#else
> >     >     +#error "don't know how to draw arrays"
> >     >     +#endif
> >     >
> >     >     -       if (tex) {
> >     >     -               glTexCoordPointer(2, GL_FLOAT, 0, tex);
> >     >     -               glEnableClientState(GL_TEXTURE_COORD_ARRAY);
> >     >     +#if defined(PIGLIT_USE_OPENGL)
> >     >     +       if (piglit_get_gl_version() >= 20
> >     >     +           ||
> >     piglit_is_extension_supported("GL_ARB_shader_objects")) {
> >     >     +               GLuint prog;
> >     >     +
> >     >     +               glGetIntegerv(GL_CURRENT_PROGRAM, (GLint *)
> >     &prog);
> >     >     +
> >     >     +#define PLAN_A
> >     >     +#ifdef PLAN_A
> >     >     +               /* If there is a current program and that
> >     program has an
> >     >     +                * active attribute named piglit_vertex, don't
> use
> >     >     the fixed
> >     >     +                * function inputs.
> >     >     +                */
> >     >     +               use_fixed_function_attributes = prog == 0
> >     >     +                       || glGetAttribLocation(prog,
> >     >     "piglit_vertex") == -1;
> >     >     +#elif defined PLAN_B
> >     >     +               if (prog != 0) {
> >     >     +                       GLint num_attribs;
> >     >     +                       int i;
> >     >     +                       char name[64];
> >     >     +                       GLint size;
> >     >     +                       GLenum type;
> >     >     +
> >     >     +                       /* Assume that fixed-function
> attributes
> >     >     won't be used
> >     >     +                        * until an attribute with the name
> "gl_*"
> >     >     is found.
> >     >     +                        */
> >     >     +                       use_fixed_function_attributes = false;
> >     >     +
> >     >     +                       glGetProgramiv(prog,
> >     >     +                                      GL_ACTIVE_ATTRIBUTES,
> >     >     +                                      &num_attribs);
> >     >     +
> >     >     +                       for (i = 0; i < num_attribs; i++) {
> >     >     +                               glGetActiveAttrib(prog,
> >     >     +                                                 i,
> >     >     +                                                 sizeof(name),
> >     >     +                                                 NULL,
> >     >     +                                                 &size,
> >     >     +                                                 &type,
> >     >     +                                                 name);
> >     >     +
> >     >     +                               if (strncmp("gl_", name, 3) ==
> >     0) {
> >     >     +
> >     >     use_fixed_function_attributes = true;
> >     >     +                                       break;
> >     >     +                               }
> >     >     +                       }
> >     >     +               }
> >     >     +#endif
> >     >
> >     >
> >     > I have a strong preference for plan A.  Here's my reasons:
> >     >
> >     > 1. It's simpler.
> >
> >     That is its primary advantage.  As a disadvantage, it means that we
> have
> >     to have a variable named "piglit_vertex".  I've noticed that most of
> the
> >     existing test that use 'draw arrays' name the vertex input "vertex".
> >     Plan B would correctly identify those.
> >
> >     What I wanted as a query that would tell me what name was bound to
> >     attribute 0.  I believe ARB_program_interface_query gives this
> ability,
> >     but alas.
> >
> >     > 2. I didn't have to look at the GL spec to reassure myself that it
> was
> >     > correct (with plan B, I was briefly worried that glGetActiveAttrib
> >     would
> >     > only return information about user-defined vertex inputs).
> >     >
> >     > 3. It correctly classifies shaders like this:
> >     >
> >     > in vec4 piglit_vertex;
> >     > out vec4 vertex_id;
> >     > void main()
> >     > {
> >     >    gl_Position = piglit_vertex;
> >     >    vertex_id = gl_VertexID;
> >     > }
> >
> >     Are you sure?  That seems surprising to me.  It's a vertex shader
> input,
> >     but it's not really an attribute (you can't source it's value from
> >     anywhere).  I wouldn't have thought that any of the gl_*ID variables
> >     would be returned by glGetActiveAttrib.
> >
> >
> > the GL 4.4 core spec says it does.  From section 11.1.1 (Vertex
> > Attributes), on page 343:
> >
> > For GetActiveAttrib, all active vertex shader input variables are
> > enumerated,
> > including the special built-in inputs gl_VertexID and gl_InstanceID.
>
> Well... you learn something new every day.  That's an argument against
> as least the current version of plan B.
>
> Do we have test cases for this?
>

None that I can find.  I've made a note of it in my to-do list, but I doubt
I'll get to it until geometry shaders are a lot further along.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/piglit/attachments/20130830/c8faaa52/attachment-0001.html>


More information about the Piglit mailing list