[Piglit] [PATCH 1/2] ext_framebuffer_multisample/formats: fix integer ALPHA format tests

Marek Olšák maraeo at gmail.com
Wed Mar 5 09:16:07 PST 2014


From: Marek Olšák <marek.olsak at amd.com>

---
 tests/spec/ext_framebuffer_multisample/formats.cpp | 35 ++++++++++++++--------
 1 file changed, 22 insertions(+), 13 deletions(-)

diff --git a/tests/spec/ext_framebuffer_multisample/formats.cpp b/tests/spec/ext_framebuffer_multisample/formats.cpp
index 3694302..8ade1dc 100644
--- a/tests/spec/ext_framebuffer_multisample/formats.cpp
+++ b/tests/spec/ext_framebuffer_multisample/formats.cpp
@@ -78,7 +78,7 @@ ColorGradientSunburst *test_pattern_uvec4;
 class PatternRenderer
 {
 public:
-	bool try_setup(GLenum internalformat);
+	enum piglit_result try_setup(GLenum internalformat);
 	void set_piglit_tolerance();
 	void set_color_clamping_mode();
 	void draw();
@@ -137,7 +137,7 @@ public:
  * MSAA format.  Return false if one or more of the framebuffers is
  * incomplete.
  */
-bool
+enum piglit_result
 PatternRenderer::try_setup(GLenum internalformat)
 {
 	FboConfig config_downsampled(0, pattern_width, pattern_height);
@@ -147,8 +147,10 @@ PatternRenderer::try_setup(GLenum internalformat)
 	config_msaa.num_samples = num_samples;
 
 	if (!(fbo_downsampled.try_setup(config_downsampled) &&
-	      fbo_msaa.try_setup(config_msaa)))
-		return false;
+	      fbo_msaa.try_setup(config_msaa))) {
+		printf("Unsupported framebuffer combination\n");
+		return PIGLIT_SKIP;
+	}
 
 	glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo_downsampled.handle);
 	glGetFramebufferAttachmentParameteriv(
@@ -168,18 +170,26 @@ PatternRenderer::try_setup(GLenum internalformat)
 		GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE,
 		(GLint *) &component_type);
 
+	int num_bits = 0;
+	for (int i = 0; i < 4 && !num_bits; i++)
+		num_bits = color_bits[i];
+	if (!num_bits) {
+		printf("Red, green, blue, and alpha sizes are all zero.\n");
+		return PIGLIT_FAIL;
+	}
+
 	color_clamping_mode = GL_FIXED_ONLY;
 	switch (component_type) {
 	case GL_INT:
 		assert(test_pattern_ivec4);
 		test_pattern = test_pattern_ivec4;
-		color_offset = 1.0 - pow(2.0, color_bits[0] - 1);
+		color_offset = 1.0 - pow(2.0, num_bits - 1);
 		color_scale = -2.0 * color_offset;
 		break;
 	case GL_UNSIGNED_INT:
 		assert(test_pattern_uvec4);
 		test_pattern = test_pattern_uvec4;
-		color_scale = pow(2.0, color_bits[0]) - 1.0;
+		color_scale = pow(2.0, num_bits) - 1.0;
 		color_offset = 0.0;
 		break;
 	case GL_UNSIGNED_NORMALIZED:
@@ -222,7 +232,7 @@ PatternRenderer::try_setup(GLenum internalformat)
 		GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING, &color_encoding);
 	is_srgb = color_encoding == GL_SRGB;
 
-	return true;
+	return PIGLIT_PASS;
 }
 
 
@@ -485,26 +495,25 @@ test_format(const struct format_desc *format)
 	 * supported, we might have received a GL error.  In either
 	 * case just skip to the next format.
 	 */
-	bool setup_success = test_renderer.try_setup(format->internalformat);
+	enum piglit_result setup_status = test_renderer.try_setup(format->internalformat);
 	if (glGetError() != GL_NO_ERROR) {
 		printf("Error setting up test renderbuffers\n");
 		return PIGLIT_SKIP;
 	}
-	if (!setup_success) {
-		printf("Unsupported framebuffer combination\n");
-		return PIGLIT_SKIP;
+	if (setup_status != PIGLIT_PASS) {
+		return setup_status;
 	}
 
 	/* Set up the framebuffers for rendering the reference image.
 	 * This shouldn't fail.
 	 */
-	setup_success = ref_renderer.try_setup(test_renderer.is_srgb ?
+	setup_status = ref_renderer.try_setup(test_renderer.is_srgb ?
 					       GL_SRGB8_ALPHA8 : GL_RGBA);
 	if (!piglit_check_gl_error(GL_NO_ERROR)) {
 		printf("Error setting up reference renderbuffers\n");
 		return PIGLIT_FAIL;
 	}
-	if (!setup_success) {
+	if (setup_status != PIGLIT_PASS) {
 		printf("Reference framebuffer combination is unsupported\n");
 		return PIGLIT_FAIL;
 	}
-- 
1.8.3.2



More information about the Piglit mailing list