[Piglit] [PATCH] interpolate-at-sample-position: test center and centroid at the same time

Marek Olšák maraeo at gmail.com
Mon Sep 28 09:42:29 PDT 2015


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

This covers more cases.
---
 .../execution/interpolate-at-sample-position.cpp   | 54 +++++++++++++++-------
 1 file changed, 38 insertions(+), 16 deletions(-)

diff --git a/tests/spec/arb_sample_shading/execution/interpolate-at-sample-position.cpp b/tests/spec/arb_sample_shading/execution/interpolate-at-sample-position.cpp
index fd09bbc..dba99c0 100644
--- a/tests/spec/arb_sample_shading/execution/interpolate-at-sample-position.cpp
+++ b/tests/spec/arb_sample_shading/execution/interpolate-at-sample-position.cpp
@@ -24,9 +24,9 @@
 /**
  * @file interpolate-at-sample-position.cpp
  *
- * Tests that 'in' variables in fragment shader are interpolated at sample
- * positions when using per sample shading.
- *
+ * Tests that 'in' and 'centroid in" variables used at the same time
+ * in a fragment shader are interpolated at sample positions when using
+ * per sample shading.
  */
 #include "piglit-util-gl.h"
 #include "piglit-fbo.h"
@@ -38,7 +38,7 @@ PIGLIT_GL_TEST_CONFIG_BEGIN
 	config.supports_gl_compat_version = 21;
 	config.supports_gl_core_version = 31;
         config.window_width = 2 * pattern_width;
-        config.window_height = pattern_height;
+        config.window_height = 2 * pattern_height;
 	config.window_visual = PIGLIT_GL_VISUAL_DOUBLE | PIGLIT_GL_VISUAL_RGBA;
 
 PIGLIT_GL_TEST_CONFIG_END
@@ -52,8 +52,10 @@ piglit_display(void)
 {
 	float pos[2];
 	bool result = true, pass = true;
+	GLenum buffers[2] = {GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1};
 
 	glBindFramebuffer(GL_DRAW_FRAMEBUFFER, multisampled_fbo.handle);
+	glDrawBuffers(2, buffers);
 	glClear(GL_COLOR_BUFFER_BIT);
 
 	/* Draw test image in to left half of multisample fbo*/
@@ -68,6 +70,7 @@ piglit_display(void)
 		/* Draw reference image in to right half of multisample fbo */
 		glUseProgram(draw_prog_right);
 		glBindFramebuffer(GL_DRAW_FRAMEBUFFER, multisampled_fbo.handle);
+		glDrawBuffers(2, buffers);
 		glGetMultisamplefv(GL_SAMPLE_POSITION, i, pos);
 		glUniform2fv(sample_pos_loc, 1, pos);
 		glEnable(GL_SCISSOR_TEST);
@@ -77,12 +80,21 @@ piglit_display(void)
 		piglit_draw_rect(-1, -1, 2, 2);
 		glDisable(GL_SCISSOR_TEST);
 
-		/* Draw sample color from multisample texture in to winsys fbo */
+		/* Draw sample color from multisample texture in to winsys fbo.
+		 * The first color attachment should be in the upper half of
+		 * the screen and the second one should be in the lower half.
+		 */
 		glUseProgram(test_prog);
 		glUniform1i(sample_id_loc, i);
-		glViewport(0, 0, 2 * pattern_width, pattern_height);
+		glActiveTexture(GL_TEXTURE0);
+		glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, multisampled_fbo.color_tex[0]);
+		glActiveTexture(GL_TEXTURE1);
+		glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, multisampled_fbo.color_tex[1]);
+
 		glBindFramebuffer(GL_DRAW_FRAMEBUFFER, piglit_winsys_fbo);
+		glDrawBuffer(GL_BACK);
 		glClear(GL_COLOR_BUFFER_BIT);
+		glViewport(0, 0, 2 * pattern_width, 2 * pattern_height);
 		piglit_draw_rect(-1, -1, 2, 2);
 
 		result = piglit_probe_rect_halves_equal_rgba(0, 0,
@@ -127,7 +139,8 @@ piglit_init(int argc, char**argv)
 
 	FboConfig msConfig(num_samples, piglit_width, piglit_height);
 	msConfig.num_rb_attachments = 0;
-	msConfig.num_tex_attachments = 1;
+	msConfig.num_tex_attachments = 2;
+	msConfig.tex_attachment[1] = GL_COLOR_ATTACHMENT1;
 	multisampled_fbo.setup(msConfig);
 
 	/* Reduced tolerence for stricter color matching */
@@ -136,17 +149,21 @@ piglit_init(int argc, char**argv)
 		"#version 130\n"
 		"#extension GL_ARB_sample_shading: require\n"
 		"in vec4 piglit_vertex;\n"
-		"out vec2 test;\n"
+		"out vec2 test_center;\n"
+		"centroid out vec2 test_centroid;\n"
 		"void main() {\n"
 		"	gl_Position = piglit_vertex;\n"
-		"	test = piglit_vertex.xy;\n"
+		"	test_center = piglit_vertex.xy;\n"
+		"	test_centroid = piglit_vertex.xy;\n"
 		"}\n",
 
 		"#version 130\n"
 		"#extension GL_ARB_sample_shading: require\n"
-		"in vec2 test;\n"
+		"in vec2 test_center;\n"
+		"centroid in vec2 test_centroid;\n"
 		"void main() {\n"
-		"	gl_FragColor = vec4(abs(test), 0, 1);\n"
+		"	gl_FragData[0] = vec4(abs(test_center), 0, 1);\n"
+		"	gl_FragData[1] = vec4(abs(test_centroid), 0, 1);\n"
 		"}\n");
 
 	draw_prog_right = piglit_build_simple_program(
@@ -168,7 +185,8 @@ piglit_init(int argc, char**argv)
 		"#version 130\n"
 		"in vec2 ref;\n"
 		"void main() {\n"
-		"	gl_FragColor = vec4(abs(ref), 0, 1);\n"
+		"	gl_FragData[0] = vec4(abs(ref), 0, 1);\n"
+		"	gl_FragData[1] = vec4(abs(ref), 0, 1);\n"
 		"}\n");
 	sample_pos_loc = glGetUniformLocation(draw_prog_right, "sample_pos");
 
@@ -182,13 +200,17 @@ piglit_init(int argc, char**argv)
 		"#version 130\n"
 		"#extension GL_ARB_texture_multisample: require\n"
 		"uniform int sample_id;\n"
-		"uniform sampler2DMS tex;\n"
+		"uniform sampler2DMS tex_center;\n"
+		"uniform sampler2DMS tex_centroid;\n"
 		"void main() {\n"
-		"	gl_FragColor =  texelFetch(tex, ivec2(gl_FragCoord.xy),\n"
-		"				   sample_id);\n"
+		"       ivec2 coord = ivec2(gl_FragCoord.xy);\n"
+		"	gl_FragColor = coord.y < 128 ? \n"
+		"		texelFetch(tex_center, coord, sample_id) :\n"
+		"		texelFetch(tex_centroid, coord - ivec2(0, 128), sample_id);\n"
 		"}\n");
 
 	glUseProgram(test_prog);
-	glUniform1i(glGetUniformLocation(test_prog, "tex"), 0);
+	glUniform1i(glGetUniformLocation(test_prog, "tex_center"), 0);
+	glUniform1i(glGetUniformLocation(test_prog, "tex_centroid"), 1);
 	sample_id_loc = glGetUniformLocation(test_prog, "sample_id");
 }
-- 
2.1.4



More information about the Piglit mailing list