[Piglit] [PATCH 1/3] msaa: Add the ability to run msaa tests without color/depth/stencil buffers.

Paul Berry stereotype441 at gmail.com
Thu Jul 12 17:53:11 PDT 2012


This patch modifies the common code for MSAA tests, so that we can
easily configure framebuffers that lack a color, depth, and/or stencil
buffer.
---
 tests/spec/ext_framebuffer_multisample/common.cpp |  104 +++++++++++---------
 tests/spec/ext_framebuffer_multisample/common.h   |   21 ++++-
 2 files changed, 76 insertions(+), 49 deletions(-)

diff --git a/tests/spec/ext_framebuffer_multisample/common.cpp b/tests/spec/ext_framebuffer_multisample/common.cpp
index e1f6127..12c9c82 100644
--- a/tests/spec/ext_framebuffer_multisample/common.cpp
+++ b/tests/spec/ext_framebuffer_multisample/common.cpp
@@ -116,7 +116,9 @@ FboConfig::FboConfig(int num_samples, int width, int height)
 	  height(height),
 	  combine_depth_stencil(true),
 	  attach_texture(false),
-	  color_internalformat(GL_RGBA)
+	  color_internalformat(GL_RGBA),
+	  depth_internalformat(GL_DEPTH_COMPONENT24),
+	  stencil_internalformat(GL_STENCIL_INDEX8)
 {
 }
 
@@ -186,36 +188,38 @@ Fbo::try_setup(const FboConfig &new_config)
 	glBindFramebuffer(GL_DRAW_FRAMEBUFFER, handle);
 
 	/* Color buffer */
-	if (!config.attach_texture) {
-		glBindRenderbuffer(GL_RENDERBUFFER, color_rb);
-		glRenderbufferStorageMultisample(GL_RENDERBUFFER,
-						 config.num_samples,
-						 config.color_internalformat,
-						 config.width,
-						 config.height);
-		glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER,
-					  GL_COLOR_ATTACHMENT0,
-					  GL_RENDERBUFFER, color_rb);
-	} else {
-		glBindTexture(GL_TEXTURE_2D, color_tex);
-		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
-				GL_NEAREST);
-		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
-				GL_NEAREST);
-		glTexImage2D(GL_TEXTURE_2D,
-			     0 /* level */,
-			     config.color_internalformat,
-			     config.width,
-			     config.height,
-			     0 /* border */,
-			     GL_RGBA /* format */,
-			     GL_BYTE /* type */,
-			     NULL /* data */);
-		glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER,
-				       GL_COLOR_ATTACHMENT0,
-				       GL_TEXTURE_2D,
-				       color_tex,
-				       0 /* level */);
+	if (config.color_internalformat != GL_NONE) {
+		if (!config.attach_texture) {
+			glBindRenderbuffer(GL_RENDERBUFFER, color_rb);
+			glRenderbufferStorageMultisample(GL_RENDERBUFFER,
+							 config.num_samples,
+							 config.color_internalformat,
+							 config.width,
+							 config.height);
+			glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER,
+						  GL_COLOR_ATTACHMENT0,
+						  GL_RENDERBUFFER, color_rb);
+		} else {
+			glBindTexture(GL_TEXTURE_2D, color_tex);
+			glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
+					GL_NEAREST);
+			glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
+					GL_NEAREST);
+			glTexImage2D(GL_TEXTURE_2D,
+				     0 /* level */,
+				     config.color_internalformat,
+				     config.width,
+				     config.height,
+				     0 /* border */,
+				     GL_RGBA /* format */,
+				     GL_BYTE /* type */,
+				     NULL /* data */);
+			glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER,
+					       GL_COLOR_ATTACHMENT0,
+					       GL_TEXTURE_2D,
+					       color_tex,
+					       0 /* level */);
+		}
 	}
 
 	/* Depth/stencil buffer(s) */
@@ -230,23 +234,29 @@ Fbo::try_setup(const FboConfig &new_config)
 					  GL_DEPTH_STENCIL_ATTACHMENT,
 					  GL_RENDERBUFFER, depth_rb);
 	} else {
-		glBindRenderbuffer(GL_RENDERBUFFER, stencil_rb);
-		glRenderbufferStorageMultisample(GL_RENDERBUFFER,
-						 config.num_samples,
-						 GL_STENCIL_INDEX8,
-						 config.width, config.height);
-		glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER,
-					  GL_STENCIL_ATTACHMENT,
-					  GL_RENDERBUFFER, stencil_rb);
+		if (config.stencil_internalformat != GL_NONE) {
+			glBindRenderbuffer(GL_RENDERBUFFER, stencil_rb);
+			glRenderbufferStorageMultisample(GL_RENDERBUFFER,
+							 config.num_samples,
+							 config.stencil_internalformat,
+							 config.width,
+							 config.height);
+			glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER,
+						  GL_STENCIL_ATTACHMENT,
+						  GL_RENDERBUFFER, stencil_rb);
+		}
 
-		glBindRenderbuffer(GL_RENDERBUFFER, depth_rb);
-		glRenderbufferStorageMultisample(GL_RENDERBUFFER,
-						 config.num_samples,
-						 GL_DEPTH_COMPONENT24,
-						 config.width, config.height);
-		glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER,
-					  GL_DEPTH_ATTACHMENT,
-					  GL_RENDERBUFFER, depth_rb);
+		if (config.depth_internalformat != GL_NONE) {
+			glBindRenderbuffer(GL_RENDERBUFFER, depth_rb);
+			glRenderbufferStorageMultisample(GL_RENDERBUFFER,
+							 config.num_samples,
+							 config.depth_internalformat,
+							 config.width,
+							 config.height);
+			glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER,
+						  GL_DEPTH_ATTACHMENT,
+						  GL_RENDERBUFFER, depth_rb);
+		}
 	}
 
 	bool success = glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER)
diff --git a/tests/spec/ext_framebuffer_multisample/common.h b/tests/spec/ext_framebuffer_multisample/common.h
index d941e96..3caccaa 100644
--- a/tests/spec/ext_framebuffer_multisample/common.h
+++ b/tests/spec/ext_framebuffer_multisample/common.h
@@ -66,10 +66,27 @@ public:
 	bool attach_texture;
 
 	/**
-	 * Internalformat that should be used for the color buffer.
-	 * Defaults to GL_RGBA.
+	 * Internalformat that should be used for the color buffer, or
+	 * GL_NONE if no color buffer should be used.  Defaults to
+	 * GL_RGBA.
 	 */
 	GLenum color_internalformat;
+
+	/**
+	 * Internalformat that should be used for the depth buffer, or
+	 * GL_NONE if no depth buffer should be used.  Ignored if
+	 * combine_depth_stencil is true.  Defaults to
+	 * GL_DEPTH_COMPONENT24.
+	 */
+	GLenum depth_internalformat;
+
+	/**
+	 * Internalformat that should be used for the stencil buffer,
+	 * or GL_NONE if no stencil buffer should be used.  Ignored if
+	 * combine_depth_stencil is true.  Defaults to
+	 * GL_STENCIL_INDEX8.
+	 */
+	GLenum stencil_internalformat;
 };
 
 /**
-- 
1.7.7.6



More information about the Piglit mailing list