[Piglit] [PATCH 05/15] ext_framebuffer_multisample-interpolation: fix single-sample centroid-edges

Marek Olšák maraeo at gmail.com
Mon Mar 26 23:32:45 UTC 2018


From: Nicolai Hähnle <nicolai.haehnle at amd.com>

When num_samples == 0, the centroid qualifier is ignored.
---
 tests/spec/ext_framebuffer_multisample/interpolation.cpp | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/tests/spec/ext_framebuffer_multisample/interpolation.cpp b/tests/spec/ext_framebuffer_multisample/interpolation.cpp
index 3f18307c1..e57113ea5 100644
--- a/tests/spec/ext_framebuffer_multisample/interpolation.cpp
+++ b/tests/spec/ext_framebuffer_multisample/interpolation.cpp
@@ -65,21 +65,22 @@
  *   that sets the red, green, and blue channels to the barycentric
  *   coordinates within each triangle.
  *
  * - centroid-edges: verify that centroid interpolation occurs at
  *   points that lie within the extents of the triangle, even for
  *   pixels on triangle edges, where the center of the pixel might lie
  *   outside the extents of the triangle.  The test uses a fragment
  *   shader that sets the blue channel to 1.0 (so that the triangles
  *   can be seen) and the red and green channels to 1.0 if any of the
  *   centroid-interpolated barycentric coordinates is outside the
- *   range [0, 1].
+ *   range [0, 1]; except when num_samples == 0, in which case
+ *   it behaves like centroid-disabled.
  *
  * - non-centroid-deriv: verify that the numeric derivative of a
  *   varying using non-centroid interpolation is correct, even at
  *   triangle edges.  This ensures that the implementation properly
  *   handles a subtle corner case: since numeric derivatives are
  *   usually computed using finite differences between adjacent
  *   pixels, it's possible that the value of a varying at a completely
  *   uncovered pixel might be used.  In effect, this tests that the
  *   values of varyings are correct on completely uncovered pixels, if
  *   those values are needed for derivatives.  This test may also be
@@ -331,22 +332,27 @@ piglit_init(int argc, char **argv)
 	const char *ref_frag; /* Fragment shader for the reference image */
 	if (strcmp(argv[2], "non-centroid-disabled") == 0) {
 		frag = frag_non_centroid_barycentric;
 		ref_frag = frag_non_centroid_barycentric;
 		disable_msaa_during_test_image = true;
 	} else if (strcmp(argv[2], "centroid-disabled") == 0) {
 		frag = frag_centroid_barycentric;
 		ref_frag = frag_non_centroid_barycentric;
 		disable_msaa_during_test_image = true;
 	} else if (strcmp(argv[2], "centroid-edges") == 0) {
-		frag = frag_centroid_range_check;
-		ref_frag = frag_blue;
+		if (num_samples == 0) {
+			frag = frag_centroid_barycentric;
+			ref_frag = frag_non_centroid_barycentric;
+		} else {
+			frag = frag_centroid_range_check;
+			ref_frag = frag_blue;
+		}
 	} else if (strcmp(argv[2], "non-centroid-deriv") == 0) {
 		frag = frag_non_centroid_deriv;
 	        ref_frag = frag_rg_0_5;
 	} else if (strcmp(argv[2], "non-centroid-deriv-disabled") == 0) {
 		frag = frag_non_centroid_deriv;
 	        ref_frag = frag_rg_0_5;
 		disable_msaa_during_test_image = true;
 	} else if (strcmp(argv[2], "centroid-deriv") == 0) {
 		if (num_samples == 0) {
 			frag = frag_centroid_deriv;
-- 
2.15.1



More information about the Piglit mailing list