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

_______________________________________________
Piglit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to