[Piglit] [PATCH] arb_gpu_shader_fp64: emit GS output for every vertex

Andres Gomez agomez at igalia.com
Tue Jun 14 15:53:03 UTC 2016


Because EmitVertex() will invalidate all previous output writes, we
need to set the value of the output variables for every vertex

Signed-off-by: Andres Gomez <agomez at igalia.com>
---
 .../templates/gen_conversion_fp64/shader-zero-sign.geom.mako  |  2 +-
 .../arb_gpu_shader_fp64/execution/gs-isinf-dvec.shader_test   | 11 ++++++-----
 2 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/generated_tests/templates/gen_conversion_fp64/shader-zero-sign.geom.mako b/generated_tests/templates/gen_conversion_fp64/shader-zero-sign.geom.mako
index a4f82ba..05a4cbb 100644
--- a/generated_tests/templates/gen_conversion_fp64/shader-zero-sign.geom.mako
+++ b/generated_tests/templates/gen_conversion_fp64/shader-zero-sign.geom.mako
@@ -18,9 +18,9 @@ void main()
 	${to_type} pre_converted = ${converted_from};
 	${to_type} converted = ONE / pre_converted;
 	bool match = converted == to;
-	fs_color = match ? GREEN : RED;
 
 	for (int i = 0; i < 3; i++) {
+		fs_color = match ? GREEN : RED;
 		gl_Position = vertex_to_gs[i];
 		EmitVertex();
 	}
diff --git a/tests/spec/arb_gpu_shader_fp64/execution/gs-isinf-dvec.shader_test b/tests/spec/arb_gpu_shader_fp64/execution/gs-isinf-dvec.shader_test
index c8552ea..b7a904c 100644
--- a/tests/spec/arb_gpu_shader_fp64/execution/gs-isinf-dvec.shader_test
+++ b/tests/spec/arb_gpu_shader_fp64/execution/gs-isinf-dvec.shader_test
@@ -38,29 +38,30 @@ out vec4 fs_color;
 
 void main()
 {
-	fs_color = vec4(0.0);
+	vec4 gs_color = vec4(0.0);
 
 	dvec4 r4 = multiplier*exp(exponent);
 	dvec4 bl4 = dvec4(isinf(r4));
 	if (distance(bl4, expected) > tolerance)
-		fs_color.x = 1.0;
+		gs_color.x = 1.0;
 
 	dvec3 r3 = multiplier.xyz*exp(exponent.xyz);
 	dvec3 bl3 = dvec3(isinf(r3));
 	if (distance(bl3, expected.xyz) > tolerance)
-		fs_color.y = 1.0;
+		gs_color.y = 1.0;
 
 	dvec2 r2 = multiplier.zw*exp(exponent.zw);
 	dvec2 bl2 = dvec2(isinf(r2));
 	if (distance(bl2, expected.zw) > tolerance)
-		fs_color.z = 1.0;
+		gs_color.z = 1.0;
 
 	double r1 = multiplier.x*exp(exponent.x);
 	double bl1 = double(isinf(r1));
 	if (distance(bl1, expected.x) > tolerance)
-		fs_color.w = 1.0;
+		gs_color.w = 1.0;
 
 	for (int i = 0; i < 3; i++) {
+		fs_color = gs_color;
 		gl_Position = vertex_to_gs[i];
 		EmitVertex();
 	}
-- 
2.8.1



More information about the Piglit mailing list