[Piglit] [PATCH 15/16] namespace-pollution: Add fragment program as an object to test

Ian Romanick idr at freedesktop.org
Wed Jan 6 16:53:15 PST 2016


From: Ian Romanick <ian.d.romanick at intel.com>

Now the program object tests can run on (hypothetical?) implementations
that support GL_ARB_fragment_program without also supporting
GL_ARB_vertex_program.

Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92363
---
 tests/general/object-namespace-pollution.c | 62 ++++++++++++++++++++++++++++--
 1 file changed, 59 insertions(+), 3 deletions(-)

diff --git a/tests/general/object-namespace-pollution.c b/tests/general/object-namespace-pollution.c
index f99328a..0fc10bc 100644
--- a/tests/general/object-namespace-pollution.c
+++ b/tests/general/object-namespace-pollution.c
@@ -441,6 +441,57 @@ generate_program_source(GLenum target, unsigned key)
 			 position,
 			 normal,
 			 other);
+	} else if (target == GL_FRAGMENT_PROGRAM_ARB) {
+		const char *tex;
+		const char *half_dir;
+		const char *light_dir;
+
+		if ((key & 2) != 0) {
+			tex = "TEX   r0, t, texture[0], 2D;";
+		} else {
+			tex = "TEX   r0, t, texture[0], 1D;";
+		}
+
+		if ((key & 4) != 0) {
+			light_dir = "program.env[0]";
+		} else {
+			light_dir = "state.light[0].position";
+		}
+
+		if ((key & 4) != 0) {
+			half_dir = "program.env[1]";
+		} else {
+			half_dir = "state.light[0].half";
+		}
+
+		asprintf(&source,
+			 "!!ARBfp1.0\n"
+			 "# Program key 0x%04x\n"
+			 "ATTRIB n = fragment.texcoord[0];\n"
+			 "ATTRIB t = fragment.texcoord[1];\n"
+			 "PARAM light_dir = %s;\n"
+			 "PARAM half_dir = %s;\n"
+			 "OUTPUT c = result.color;\n"
+			 "TEMP r0, r1;\n"
+			 "\n"
+			 "# Sample the texture\n"
+			 "%s"
+			 "\n"
+			 "# Compute lighting\n"
+			 "DP3   r1.x, n, light_dir;\n"
+			 "DP3   r1.y, n, half_dir;\n"
+			 "MOV   r1.w, 126.2;\n"
+			 "LIT   r1, r1;\n"
+			 "\n"
+			 "# Combine lighting and texture\n"
+			 "MUL   r0, r1.y, r0;\n"
+			 "ADD   c.xyz, r1.z, r0;\n"
+			 "MOV   c.w, 1.0;\n"
+			 "END",
+			 key,
+			 light_dir,
+			 half_dir,
+			 tex);
 	} else {
 		printf("Unknown program target %s (0x%04x) in %s.\n",
 		       piglit_get_gl_enum_name(target), target,
@@ -459,12 +510,15 @@ select_program_target(unsigned key)
 {
 	GLenum target = 0;
 
-	(void) key;
-
 	if (piglit_is_extension_supported("GL_ARB_vertex_program")) {
 		target = GL_VERTEX_PROGRAM_ARB;
 	}
 
+	if (piglit_is_extension_supported("GL_ARB_fragment_program")) {
+		if (target == 0 || (key & 1) == 0)
+			target = GL_FRAGMENT_PROGRAM_ARB;
+	}
+
 	return target;
 }
 
@@ -478,7 +532,9 @@ create_program(unsigned name, bool silent_skip)
 		if (silent_skip)
 			return true;
 
-		printf("%s requires GL_ARB_vertex_program.\n", __func__);
+		printf("%s requires GL_ARB_vertex_program or "
+		       "GL_ARB_fragment_program.\n",
+		       __func__);
 		piglit_report_result(PIGLIT_SKIP);
 	}
 
-- 
2.5.0



More information about the Piglit mailing list