[Piglit] [PATCH 17/20] msaa: Make a new Fbo::try_setup() function.

Anuj Phogat anuj.phogat at gmail.com
Wed Jun 6 16:48:16 PDT 2012


On Tue, Jun 5, 2012 at 5:03 PM, Paul Berry <stereotype441 at gmail.com> wrote:
> In contrast to the Fbo::setup() function (which terminates the test if
> the framebuffer is incomplete), Fbo::try_setup() merely returns a
> boolean indicating whether the framebuffer is complete.  This will be
> necessary to allow different color formats to be tested, since we
> won't want to terminate the test if a non-renderable color format is
> attempted.
> ---
>  tests/spec/ext_framebuffer_multisample/common.cpp |   46 ++++++++++++++-------
>  tests/spec/ext_framebuffer_multisample/common.h   |    1 +
>  2 files changed, 32 insertions(+), 15 deletions(-)
>
> diff --git a/tests/spec/ext_framebuffer_multisample/common.cpp b/tests/spec/ext_framebuffer_multisample/common.cpp
> index ce0552e..d7cbe9c 100644
> --- a/tests/spec/ext_framebuffer_multisample/common.cpp
> +++ b/tests/spec/ext_framebuffer_multisample/common.cpp
> @@ -147,11 +147,37 @@ Fbo::set_samples(int num_samples)
>
>  /**
>  * Modify the state of the framebuffer object to reflect the state in
> - * new_config.
> + * new_config.  if the resulting framebuffer is incomplete, terminate
> + * the test.
>  */
>  void
>  Fbo::setup(const FboConfig &new_config)
>  {
> +       if (!try_setup(new_config)) {
> +               printf("Framebuffer not complete\n");
> +               if (!config.combine_depth_stencil) {
> +                       /* Some implementations do not support
> +                        * separate depth and stencil attachments, so
> +                        * don't consider it an error if we fail to
> +                        * make a complete framebuffer using separate
> +                        * depth and stencil attachments.
> +                        */
> +                       piglit_report_result(PIGLIT_SKIP);
> +               } else {
> +                       piglit_report_result(PIGLIT_FAIL);
> +               }
> +       }
> +}
> +
> +
> +/**
> + * Modify the state of the framebuffer object to reflect the state in
> + * config.  Return true if the resulting framebuffer is complete,
> + * false otherwise.
> + */
> +bool
> +Fbo::try_setup(const FboConfig &new_config)
> +{
>        this->config = new_config;
>
>        if (!gl_objects_generated)
> @@ -223,22 +249,12 @@ Fbo::setup(const FboConfig &new_config)
>                                          GL_RENDERBUFFER, depth_rb);
>        }
>
> -       if (glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
> -               printf("Framebuffer not complete\n");
> -               if (!config.combine_depth_stencil) {
> -                       /* Some implementations do not support
> -                        * separate depth and stencil attachments, so
> -                        * don't consider it an error if we fail to
> -                        * make a complete framebuffer using separate
> -                        * depth and stencil attachments.
> -                        */
> -                       piglit_report_result(PIGLIT_SKIP);
> -               } else {
> -                       piglit_report_result(PIGLIT_FAIL);
> -               }
> -       }
> +       bool success = glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER)
> +               == GL_FRAMEBUFFER_COMPLETE;
>
>        glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
> +
> +       return success;
>  }
>
>
> diff --git a/tests/spec/ext_framebuffer_multisample/common.h b/tests/spec/ext_framebuffer_multisample/common.h
> index 3caf8a0..0e6913f 100644
> --- a/tests/spec/ext_framebuffer_multisample/common.h
> +++ b/tests/spec/ext_framebuffer_multisample/common.h
> @@ -86,6 +86,7 @@ public:
>
>        void set_samples(int num_samples);
>        void setup(const FboConfig &new_config);
> +       bool try_setup(const FboConfig &new_config);
>
>        void set_viewport();
>
> --
> 1.7.7.6
>

Reviewed-by: Anuj Phogat <anuj.phogat at gmail.com>


More information about the Piglit mailing list