From: Keith Whitwell Date: Tue, 1 Nov 2005 06:28:39 +0000 (+0000) Subject: standalone tests for vp instructions X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d9f362a66733cf016a54bae0a97805223d930062;p=mesa.git standalone tests for vp instructions --- 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 +#include +#include +#include +#include +#define GL_GLEXT_PROTOTYPES +#include + +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 +