summaryrefslogtreecommitdiffstats
path: root/progs/vp
diff options
context:
space:
mode:
authorKeith Whitwell <keith@tungstengraphics.com>2005-11-01 06:28:39 +0000
committerKeith Whitwell <keith@tungstengraphics.com>2005-11-01 06:28:39 +0000
commitd9f362a66733cf016a54bae0a97805223d930062 (patch)
tree28478ab0dd9e0c6ce5d11061ff9c4e0ae0ea407b /progs/vp
parent05051037101dfa053798cf5ad91d1975fd1aa6a7 (diff)
standalone tests for vp instructions
Diffstat (limited to 'progs/vp')
-rw-r--r--progs/vp/Makefile53
-rw-r--r--progs/vp/abs.txt7
-rw-r--r--progs/vp/add.txt6
-rw-r--r--progs/vp/dp3.txt5
-rw-r--r--progs/vp/dp4.txt5
-rw-r--r--progs/vp/dph.txt5
-rw-r--r--progs/vp/dst.txt5
-rw-r--r--progs/vp/ex2.txt6
-rw-r--r--progs/vp/flr.txt6
-rw-r--r--progs/vp/frc.txt6
-rw-r--r--progs/vp/lg2.txt6
-rw-r--r--progs/vp/lit.txt6
-rw-r--r--progs/vp/mad.txt5
-rw-r--r--progs/vp/max.txt5
-rw-r--r--progs/vp/min.txt5
-rw-r--r--progs/vp/mov.txt5
-rw-r--r--progs/vp/mul.txt5
-rw-r--r--progs/vp/pow.txt5
-rw-r--r--progs/vp/rcp.txt7
-rw-r--r--progs/vp/rsq.txt7
-rw-r--r--progs/vp/sge.txt5
-rw-r--r--progs/vp/slt.txt5
-rw-r--r--progs/vp/sub.txt5
-rw-r--r--progs/vp/swz.txt5
-rw-r--r--progs/vp/swz2.txt5
-rw-r--r--progs/vp/vp-tris.c218
-rw-r--r--progs/vp/xpd.txt5
27 files changed, 408 insertions, 0 deletions
diff --git a/progs/vp/Makefile b/progs/vp/Makefile
new file mode 100644
index 00000000000..c3faeb5b602
--- /dev/null
+++ b/progs/vp/Makefile
@@ -0,0 +1,53 @@
+# progs/tests/Makefile
+
+
+# These programs aren't intended to be included with the normal distro.
+# They're not too interesting but they're good for testing.
+
+TOP = ../..
+include $(TOP)/configs/current
+
+
+LIBS = $(APP_LIB_DEPS)
+
+SOURCES = \
+ vp-tris.c
+
+
+
+PROGS = $(SOURCES:%.c=%)
+
+INCLUDES = -I. -I$(TOP)/include -I../samples
+
+
+##### RULES #####
+
+.SUFFIXES:
+.SUFFIXES: .c
+
+.c:
+ $(CC) $(INCLUDES) $(CFLAGS) $< $(LIBS) -o $@
+
+.c.o:
+ $(CC) -c $(INCLUDES) $(CFLAGS) $(DEFINES) $< -o $@
+
+.S.o:
+ $(CC) -c $(INCLUDES) $(CFLAGS) $(DEFINES) $< -o $@
+
+
+##### TARGETS #####
+
+default: $(PROGS)
+
+clean:
+ rm -f $(PROGS)
+ rm -f *.o
+ rm -f getproclist.h
+
+
+
+
+
+# Emacs tags
+tags:
+ etags `find . -name \*.[ch]` `find ../include`
diff --git a/progs/vp/abs.txt b/progs/vp/abs.txt
new file mode 100644
index 00000000000..cd00952e349
--- /dev/null
+++ b/progs/vp/abs.txt
@@ -0,0 +1,7 @@
+!!ARBvp1.0
+TEMP R0;
+SUB R0, {0.5}.x, vertex.color;
+ABS result.color, R0;
+MOV result.position, vertex.position;
+END
+
diff --git a/progs/vp/add.txt b/progs/vp/add.txt
new file mode 100644
index 00000000000..4094cd448dc
--- /dev/null
+++ b/progs/vp/add.txt
@@ -0,0 +1,6 @@
+!!ARBvp1.0
+TEMP R0;
+ADD R0, vertex.color, vertex.color;
+ADD result.color, R0, R0;
+MOV result.position, vertex.position;
+END
diff --git a/progs/vp/dp3.txt b/progs/vp/dp3.txt
new file mode 100644
index 00000000000..8336bd3dd8e
--- /dev/null
+++ b/progs/vp/dp3.txt
@@ -0,0 +1,5 @@
+!!ARBvp1.0
+DP3 result.color, vertex.color, vertex.color;
+MOV result.position, vertex.position;
+END
+
diff --git a/progs/vp/dp4.txt b/progs/vp/dp4.txt
new file mode 100644
index 00000000000..70505a494c5
--- /dev/null
+++ b/progs/vp/dp4.txt
@@ -0,0 +1,5 @@
+!!ARBvp1.0
+DP4 result.color, vertex.color.xxxx, vertex.color;
+MOV result.position, vertex.position;
+END
+
diff --git a/progs/vp/dph.txt b/progs/vp/dph.txt
new file mode 100644
index 00000000000..c7cab1384dd
--- /dev/null
+++ b/progs/vp/dph.txt
@@ -0,0 +1,5 @@
+!!ARBvp1.0
+DPH result.color, vertex.color, vertex.color;
+MOV result.position, vertex.position;
+END
+
diff --git a/progs/vp/dst.txt b/progs/vp/dst.txt
new file mode 100644
index 00000000000..03613c0eece
--- /dev/null
+++ b/progs/vp/dst.txt
@@ -0,0 +1,5 @@
+!!ARBvp1.0
+DST result.color, vertex.color, vertex.color;
+MOV result.position, vertex.position;
+END
+
diff --git a/progs/vp/ex2.txt b/progs/vp/ex2.txt
new file mode 100644
index 00000000000..bbef67bbb8a
--- /dev/null
+++ b/progs/vp/ex2.txt
@@ -0,0 +1,6 @@
+!!ARBvp1.0
+TEMP R0;
+EX2 R0, vertex.color.x;
+SUB result.color, R0, {1.0}.x;
+MOV result.position, vertex.position;
+END
diff --git a/progs/vp/flr.txt b/progs/vp/flr.txt
new file mode 100644
index 00000000000..c33280da978
--- /dev/null
+++ b/progs/vp/flr.txt
@@ -0,0 +1,6 @@
+!!ARBvp1.0
+TEMP R0;
+ADD R0, vertex.color, {0.5}.x;
+FLR result.color, R0;
+MOV result.position, vertex.position;
+END
diff --git a/progs/vp/frc.txt b/progs/vp/frc.txt
new file mode 100644
index 00000000000..d8e72b60cc7
--- /dev/null
+++ b/progs/vp/frc.txt
@@ -0,0 +1,6 @@
+!!ARBvp1.0
+TEMP R0;
+MUL R0, vertex.color, {3.0}.x;
+FRC result.color, R0;
+MOV result.position, vertex.position;
+END
diff --git a/progs/vp/lg2.txt b/progs/vp/lg2.txt
new file mode 100644
index 00000000000..2f59b993a41
--- /dev/null
+++ b/progs/vp/lg2.txt
@@ -0,0 +1,6 @@
+!!ARBvp1.0
+TEMP R0;
+MUL R0, vertex.color, {4.0}.x;
+LG2 result.color, R0.x;
+MOV result.position, vertex.position;
+END
diff --git a/progs/vp/lit.txt b/progs/vp/lit.txt
new file mode 100644
index 00000000000..65705b41705
--- /dev/null
+++ b/progs/vp/lit.txt
@@ -0,0 +1,6 @@
+!!ARBvp1.0
+TEMP R0;
+SUB R0, {0.5}.x, vertex.color;
+LIT result.color, R0;
+MOV result.position, vertex.position;
+END
diff --git a/progs/vp/mad.txt b/progs/vp/mad.txt
new file mode 100644
index 00000000000..0c9ed6c8b7f
--- /dev/null
+++ b/progs/vp/mad.txt
@@ -0,0 +1,5 @@
+!!ARBvp1.0
+MAD result.color, vertex.color.z, {1,0,0,1}, vertex.color;
+MOV result.position, vertex.position;
+END
+
diff --git a/progs/vp/max.txt b/progs/vp/max.txt
new file mode 100644
index 00000000000..6747ca57277
--- /dev/null
+++ b/progs/vp/max.txt
@@ -0,0 +1,5 @@
+!!ARBvp1.0
+MAX result.color, {0.5}.x, vertex.color;
+MOV result.position, vertex.position;
+END
+
diff --git a/progs/vp/min.txt b/progs/vp/min.txt
new file mode 100644
index 00000000000..2adc872ed9c
--- /dev/null
+++ b/progs/vp/min.txt
@@ -0,0 +1,5 @@
+!!ARBvp1.0
+MIN result.color, {0.5}.x, vertex.color;
+MOV result.position, vertex.position;
+END
+
diff --git a/progs/vp/mov.txt b/progs/vp/mov.txt
new file mode 100644
index 00000000000..9ce1a453067
--- /dev/null
+++ b/progs/vp/mov.txt
@@ -0,0 +1,5 @@
+!!ARBvp1.0
+MOV result.color, vertex.color;
+MOV result.position, vertex.position;
+END
+
diff --git a/progs/vp/mul.txt b/progs/vp/mul.txt
new file mode 100644
index 00000000000..e479cdb8543
--- /dev/null
+++ b/progs/vp/mul.txt
@@ -0,0 +1,5 @@
+!!ARBvp1.0
+MUL result.color, vertex.color, vertex.color;
+MOV result.position, vertex.position;
+END
+
diff --git a/progs/vp/pow.txt b/progs/vp/pow.txt
new file mode 100644
index 00000000000..512412997de
--- /dev/null
+++ b/progs/vp/pow.txt
@@ -0,0 +1,5 @@
+!!ARBvp1.0
+POW result.color, vertex.color.x, vertex.color.y;
+MOV result.position, vertex.position;
+END
+
diff --git a/progs/vp/rcp.txt b/progs/vp/rcp.txt
new file mode 100644
index 00000000000..e16292bd00a
--- /dev/null
+++ b/progs/vp/rcp.txt
@@ -0,0 +1,7 @@
+!!ARBvp1.0
+TEMP R0;
+ADD R0, vertex.color.x, vertex.color.x;
+RCP result.color, R0.x;
+MOV result.position, vertex.position;
+END
+
diff --git a/progs/vp/rsq.txt b/progs/vp/rsq.txt
new file mode 100644
index 00000000000..3e3f3251ee0
--- /dev/null
+++ b/progs/vp/rsq.txt
@@ -0,0 +1,7 @@
+!!ARBvp1.0
+TEMP R0;
+MUL R0, vertex.color, {3.0}.x;
+RSQ result.color, R0.x;
+MOV result.position, vertex.position;
+END
+
diff --git a/progs/vp/sge.txt b/progs/vp/sge.txt
new file mode 100644
index 00000000000..3fa82e5d5ea
--- /dev/null
+++ b/progs/vp/sge.txt
@@ -0,0 +1,5 @@
+!!ARBvp1.0
+SGE result.color, {0.5}.x, vertex.color;
+MOV result.position, vertex.position;
+END
+
diff --git a/progs/vp/slt.txt b/progs/vp/slt.txt
new file mode 100644
index 00000000000..6bf8ffa775d
--- /dev/null
+++ b/progs/vp/slt.txt
@@ -0,0 +1,5 @@
+!!ARBvp1.0
+SLT result.color, {0.5}.x, vertex.color;
+MOV result.position, vertex.position;
+END
+
diff --git a/progs/vp/sub.txt b/progs/vp/sub.txt
new file mode 100644
index 00000000000..a58ab101bcd
--- /dev/null
+++ b/progs/vp/sub.txt
@@ -0,0 +1,5 @@
+!!ARBvp1.0
+SUB result.color, vertex.color.yzxw, vertex.color;
+MOV result.position, vertex.position;
+END
+
diff --git a/progs/vp/swz.txt b/progs/vp/swz.txt
new file mode 100644
index 00000000000..92c58089b1a
--- /dev/null
+++ b/progs/vp/swz.txt
@@ -0,0 +1,5 @@
+!!ARBvp1.0
+MOV result.color, vertex.color.xxzx;
+MOV result.position, vertex.position;
+END
+
diff --git a/progs/vp/swz2.txt b/progs/vp/swz2.txt
new file mode 100644
index 00000000000..84c78db49f6
--- /dev/null
+++ b/progs/vp/swz2.txt
@@ -0,0 +1,5 @@
+!!ARBvp1.0
+SWZ result.color, vertex.color, 1,x,y,z;
+MOV result.position, vertex.position;
+END
+
diff --git a/progs/vp/vp-tris.c b/progs/vp/vp-tris.c
new file mode 100644
index 00000000000..ff3f3f87f09
--- /dev/null
+++ b/progs/vp/vp-tris.c
@@ -0,0 +1,218 @@
+/* Test glGenProgramsNV(), glIsProgramNV(), glLoadProgramNV() */
+
+#include <assert.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#define GL_GLEXT_PROTOTYPES
+#include <GL/glut.h>
+
+static const char *filename = NULL;
+static GLuint nr_steps = 4;
+
+static void usage( char *name )
+{
+ fprintf( stderr, "usage: %s [ options ] shader_filename\n", name );
+ fprintf( stderr, "\n" );
+ fprintf( stderr, "options:\n" );
+ fprintf( stderr, " -f flat shaded\n" );
+ fprintf( stderr, " -nNr subdivision steps\n" );
+}
+
+
+static void args(int argc, char *argv[])
+{
+ GLint i;
+
+ fprintf(stderr, "%d\n", argc);
+
+ for (i = 1; i < argc; i++) {
+ if (strncmp(argv[i], "-n", 2) == 0) {
+ nr_steps = atoi((argv[i]) + 2);
+ }
+ else if (strcmp(argv[i], "-f") == 0) {
+ glShadeModel(GL_FLAT);
+ }
+ else if (i == argc - 1) {
+ filename = argv[i];
+ }
+ else {
+ usage(argv[0]);
+ exit(1);
+ }
+ }
+
+ if (!filename) {
+ usage(argv[0]);
+ exit(1);
+ }
+}
+
+
+
+static void Init( void )
+{
+ GLint errno;
+ GLuint prognum;
+ char buf[4096];
+ GLuint sz;
+ FILE *f;
+
+ if ((f = fopen(filename, "r")) == NULL) {
+ fprintf(stderr, "couldn't open %s\n", filename);
+ exit(1);
+ }
+
+ sz = fread(buf, 1, sizeof(buf), f);
+ if (!feof(f)) {
+ fprintf(stderr, "file too long\n");
+ exit(1);
+ }
+
+ fprintf(stderr, "%*s\n", sz, buf);
+
+ glGenProgramsARB(1, &prognum);
+
+ glBindProgramARB(GL_VERTEX_PROGRAM_ARB, prognum);
+ glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB,
+ sz, (const GLubyte *) buf);
+
+ assert(glIsProgramARB(prognum));
+ errno = glGetError();
+ printf("glGetError = %d\n", errno);
+ if (errno != GL_NO_ERROR)
+ {
+ GLint errorpos;
+
+ glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &errorpos);
+ printf("errorpos: %d\n", errorpos);
+ printf("%s\n", (char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB));
+ }
+}
+
+
+union vert {
+ struct {
+ GLfloat color[3];
+ GLfloat pos[3];
+ } v;
+ GLfloat f[6];
+};
+
+static void make_midpoint( union vert *out,
+ const union vert *v0,
+ const union vert *v1)
+{
+ int i;
+ for (i = 0; i < 6; i++)
+ out->f[i] = v0->f[i] + .5 * (v1->f[i] - v0->f[i]);
+}
+
+static void subdiv( union vert *v0,
+ union vert *v1,
+ union vert *v2,
+ GLuint depth )
+{
+ if (depth == 0) {
+ glColor3fv(v0->v.color);
+ glVertex3fv(v0->v.pos);
+ glColor3fv(v1->v.color);
+ glVertex3fv(v1->v.pos);
+ glColor3fv(v2->v.color);
+ glVertex3fv(v2->v.pos);
+ }
+ else {
+ union vert m[3];
+
+ make_midpoint(&m[0], v0, v1);
+ make_midpoint(&m[1], v1, v2);
+ make_midpoint(&m[2], v2, v0);
+
+ subdiv(&m[0], &m[2], v0, depth-1);
+ subdiv(&m[1], &m[0], v1, depth-1);
+ subdiv(&m[2], &m[1], v2, depth-1);
+ subdiv(&m[0], &m[1], &m[2], depth-1);
+ }
+}
+
+/** Assignment */
+#define ASSIGN_3V( V, V0, V1, V2 ) \
+do { \
+ V[0] = V0; \
+ V[1] = V1; \
+ V[2] = V2; \
+} while(0)
+
+static void Display( void )
+{
+ glClearColor(0.3, 0.3, 0.3, 1);
+ glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
+
+ glEnable(GL_VERTEX_PROGRAM_NV);
+
+ glBegin(GL_TRIANGLES);
+
+
+ {
+ union vert v[3];
+
+ ASSIGN_3V(v[0].v.color, 0,0,1);
+ ASSIGN_3V(v[0].v.pos, 0.9, -0.9, 0.0);
+ ASSIGN_3V(v[1].v.color, 0,1,0);
+ ASSIGN_3V(v[1].v.pos, 0.9, 0.9, 0.0);
+ ASSIGN_3V(v[2].v.color, 1,0,0);
+ ASSIGN_3V(v[2].v.pos, -0.9, 0, 0.0);
+
+ subdiv(&v[0], &v[1], &v[2], nr_steps);
+ }
+
+ glEnd();
+
+
+ glFlush();
+}
+
+
+static void Reshape( int width, int height )
+{
+ glViewport( 0, 0, width, height );
+ glMatrixMode( GL_PROJECTION );
+ glLoadIdentity();
+ glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0);
+ glMatrixMode( GL_MODELVIEW );
+ glLoadIdentity();
+ /*glTranslatef( 0.0, 0.0, -15.0 );*/
+}
+
+
+static void Key( unsigned char key, int x, int y )
+{
+ (void) x;
+ (void) y;
+ switch (key) {
+ case 27:
+ exit(0);
+ break;
+ }
+ glutPostRedisplay();
+}
+
+
+
+
+int main( int argc, char *argv[] )
+{
+ glutInit( &argc, argv );
+ glutInitWindowPosition( 0, 0 );
+ glutInitWindowSize( 250, 250 );
+ glutInitDisplayMode( GLUT_RGB | GLUT_SINGLE | GLUT_DEPTH );
+ glutCreateWindow(argv[0]);
+ glutReshapeFunc( Reshape );
+ glutKeyboardFunc( Key );
+ glutDisplayFunc( Display );
+ args( argc, argv );
+ Init();
+ glutMainLoop();
+ return 0;
+}
diff --git a/progs/vp/xpd.txt b/progs/vp/xpd.txt
new file mode 100644
index 00000000000..b8818ebc60e
--- /dev/null
+++ b/progs/vp/xpd.txt
@@ -0,0 +1,5 @@
+!!ARBvp1.0
+XPD result.color, vertex.color, {2,2,2,0};
+MOV result.position, vertex.position;
+END
+