[Piglit] [PATCH 11/16] namespace-pollution: Add framebuffer as an object to test

Ilia Mirkin imirkin at alum.mit.edu
Wed Jan 6 19:43:36 PST 2016


Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>

On Wed, Jan 6, 2016 at 7:53 PM, Ian Romanick <idr at freedesktop.org> wrote:
> From: Ian Romanick <ian.d.romanick at intel.com>
>
> NOTE: The following tests fail on i965 (and presumably other drivers
> that use meta) on Mesa master and 11.1:
>
>     framebuffer with glgeneratemipmap
>
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92363
> ---
>  tests/all.py                               |  2 +-
>  tests/general/object-namespace-pollution.c | 89 ++++++++++++++++++++++++++++++
>  2 files changed, 90 insertions(+), 1 deletion(-)
>
> diff --git a/tests/all.py b/tests/all.py
> index 129c2f7..9e7f324 100644
> --- a/tests/all.py
> +++ b/tests/all.py
> @@ -4608,7 +4608,7 @@ with profile.group_manager(
>  with profile.group_manager(
>          PiglitGLTest,
>          grouptools.join('object namespace pollution')) as g:
> -    for object_type in ("buffer", "texture"):
> +    for object_type in ("buffer", "framebuffer", "texture"):
>          for operation in ("glBitmap", "glBlitFramebuffer", "glClear", "glClearTexSubImage", "glCopyImageSubData", "glCopyPixels", "glCopyTexSubImage2D", "glDrawPixels", "glGenerateMipmap", "glGetTexImage", "glTexSubImage2D"):
>              g(['object-namespace-pollution', operation, object_type],
>                '{} with {}'.format(object_type, operation))
> diff --git a/tests/general/object-namespace-pollution.c b/tests/general/object-namespace-pollution.c
> index f8ca49d..6ec9b08 100644
> --- a/tests/general/object-namespace-pollution.c
> +++ b/tests/general/object-namespace-pollution.c
> @@ -284,6 +284,75 @@ validate_buffer(unsigned name)
>  }
>  /*@}*/
>
> +/** \name Methods for operating on framebuffer objects */
> +/*@{*/
> +static bool
> +create_framebuffer(unsigned name, bool silent_skip)
> +{
> +       if (!piglit_is_extension_supported("GL_EXT_framebuffer_object")) {
> +               if (silent_skip)
> +                       return true;
> +
> +               printf("%s requires GL_EXT_framebuffer_object.\n", __func__);
> +               piglit_report_result(PIGLIT_SKIP);
> +       }
> +
> +       if (glIsFramebufferEXT(name)) {
> +               printf("\t%s,%d: %u is already a framebuffer\n",
> +                      __func__, __LINE__, name);
> +               return false;
> +       }
> +
> +       glBindFramebufferEXT(GL_FRAMEBUFFER, name);
> +       glBindFramebufferEXT(GL_FRAMEBUFFER, piglit_winsys_fbo);
> +
> +       return piglit_check_gl_error(GL_NO_ERROR);
> +}
> +
> +static bool
> +validate_framebuffer(unsigned name)
> +{
> +       static const struct enum_value_pair test_vectors[] = {
> +               { GL_COLOR_ATTACHMENT0, 0 },
> +               { GL_DEPTH_ATTACHMENT, 0 },
> +               { GL_STENCIL_ATTACHMENT, 0 },
> +       };
> +       bool pass = true;
> +
> +       if (!piglit_is_extension_supported("GL_EXT_framebuffer_object"))
> +               return true;
> +
> +       if (!glIsFramebufferEXT(name)) {
> +               printf("\t%s,%d: %u is not a framebuffer\n",
> +                      __func__, __LINE__, name);
> +               return false;
> +       }
> +
> +       glBindFramebufferEXT(GL_FRAMEBUFFER, name);
> +
> +       for (unsigned i = 0; i < ARRAY_SIZE(test_vectors); i++) {
> +               GLint got;
> +
> +               glGetFramebufferAttachmentParameterivEXT(GL_FRAMEBUFFER,
> +                                                        test_vectors[i].value,
> +                                                        GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
> +                                                        &got);
> +
> +               if (got != test_vectors[i].expected) {
> +                       printf("\t%s,%d: %s of %u: got 0x%x, expected 0x%x\n",
> +                              __func__, __LINE__,
> +                              piglit_get_gl_enum_name(test_vectors[i].value),
> +                              name, got, test_vectors[i].expected);
> +                       pass = false;
> +               }
> +       }
> +
> +       glBindFramebufferEXT(GL_FRAMEBUFFER, piglit_winsys_fbo);
> +
> +       return piglit_check_gl_error(GL_NO_ERROR) && pass;
> +}
> +/*@}*/
> +
>  /** \name Methods for operating on texture objects */
>  /*@{*/
>  #define TEXTURE_DATA_SIZE (16 * 16 * sizeof(GLuint))
> @@ -836,6 +905,7 @@ static const struct {
>         bool (*validate)(unsigned name);
>  } object_types[] = {
>         { "buffer", create_buffer, validate_buffer },
> +       { "framebuffer", create_framebuffer, validate_framebuffer },
>         { "texture", create_texture, validate_texture },
>  };
>
> @@ -871,6 +941,7 @@ piglit_init(int argc, char **argv)
>         unsigned last_operation = ARRAY_SIZE(operations) - 1;
>         bool silent = true;
>         unsigned first_unused_texture;
> +       unsigned first_unused_framebuffer;
>
>         /* The test is either invoked with no command line parameters (in
>          * which case all test combinations are run) or with an operation name
> @@ -930,6 +1001,16 @@ piglit_init(int argc, char **argv)
>         if (first_unused_texture >= 16)
>                 piglit_report_result(PIGLIT_FAIL);
>
> +       for (first_unused_framebuffer = 1;
> +            first_unused_framebuffer < 16;
> +            first_unused_framebuffer++) {
> +               if (!glIsFramebufferEXT(first_unused_framebuffer))
> +                       break;
> +       }
> +
> +       if (first_unused_framebuffer >= 16)
> +               piglit_report_result(PIGLIT_FAIL);
> +
>         for (i = first_operation; i <= last_operation; i++)
>                 pass = operations[i].func(silent) && pass;
>
> @@ -941,6 +1022,10 @@ piglit_init(int argc, char **argv)
>                             name < first_unused_texture)
>                                 continue;
>
> +                       if (strcmp("framebuffer", object_types[i].name) == 0 &&
> +                           name < first_unused_framebuffer)
> +                               continue;
> +
>                         pass = object_types[i].create(name, silent) && pass;
>                 }
>         }
> @@ -958,6 +1043,10 @@ piglit_init(int argc, char **argv)
>                             name < first_unused_texture)
>                                 continue;
>
> +                       if (strcmp("framebuffer", object_types[i].name) == 0 &&
> +                           name < first_unused_framebuffer)
> +                               continue;
> +
>                         pass = object_types[i].validate(name) && pass;
>                 }
>         }
> --
> 2.5.0
>
> _______________________________________________
> Piglit mailing list
> Piglit at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/piglit


More information about the Piglit mailing list