From b695c3a3fa3f4cd48c13aa26542110de27075518 Mon Sep 17 00:00:00 2001
From: Drew Moseley <drew_moseley@mentor.com>
Date: Mon, 12 May 2014 15:22:32 -0400
Subject: [PATCH 1/9] mesa-demos: Add missing data files.

Add some data files that are present in the git repository:
   http://cgit.freedesktop.org/mesa/demos/tree/?id=mesa-demos-8.1.0
but not in the release tarball
   ftp://ftp.freedesktop.org/pub/mesa/demos/8.1.0/mesa-demos-8.1.0.tar.bz2

Upstream-Status: Backport
Signed-off-by: Drew Moseley <drew_moseley@mentor.com>
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
---
 src/fpglsl/depth-read.glsl      |   4 +
 src/fpglsl/infinite-loop.glsl   |   7 +
 src/glsl/CH11-bumpmaptex.frag   |  47 +++++++
 src/glsl/blinking-teapot.frag   |  31 +++++
 src/glsl/blinking-teapot.vert   |  16 +++
 src/glsl/convolution.frag       |  21 +++
 src/glsl/simplex-noise.glsl     | 279 ++++++++++++++++++++++++++++++++++++++++
 src/glsl/skinning.vert          |  24 ++++
 src/perf/glslstateschange1.frag |  19 +++
 src/perf/glslstateschange1.vert |  14 ++
 src/perf/glslstateschange2.frag |  17 +++
 src/perf/glslstateschange2.vert |  14 ++
 src/vpglsl/infinite-loop.glsl   |   8 ++
 13 files changed, 501 insertions(+)
 create mode 100644 src/fpglsl/depth-read.glsl
 create mode 100644 src/fpglsl/infinite-loop.glsl
 create mode 100644 src/glsl/CH11-bumpmaptex.frag
 create mode 100644 src/glsl/blinking-teapot.frag
 create mode 100644 src/glsl/blinking-teapot.vert
 create mode 100644 src/glsl/convolution.frag
 create mode 100644 src/glsl/simplex-noise.glsl
 create mode 100644 src/glsl/skinning.vert
 create mode 100644 src/perf/glslstateschange1.frag
 create mode 100644 src/perf/glslstateschange1.vert
 create mode 100644 src/perf/glslstateschange2.frag
 create mode 100644 src/perf/glslstateschange2.vert
 create mode 100644 src/vpglsl/infinite-loop.glsl

diff --git a/src/fpglsl/depth-read.glsl b/src/fpglsl/depth-read.glsl
new file mode 100644
index 0000000..86d298e
--- /dev/null
+++ b/src/fpglsl/depth-read.glsl
@@ -0,0 +1,4 @@
+void main()
+{
+   gl_FragColor = gl_FragCoord.zzzz;
+}
diff --git a/src/fpglsl/infinite-loop.glsl b/src/fpglsl/infinite-loop.glsl
new file mode 100644
index 0000000..c6dc6ee
--- /dev/null
+++ b/src/fpglsl/infinite-loop.glsl
@@ -0,0 +1,7 @@
+void main() {
+   vec4 sum = vec4(0);
+   for (int i = 1; i != 2; i += 2) {
+      sum += vec4(0.1, 0.1, 0.1, 0.1);
+   }
+   gl_FragColor = sum;
+}
diff --git a/src/glsl/CH11-bumpmaptex.frag b/src/glsl/CH11-bumpmaptex.frag
new file mode 100644
index 0000000..b5dabb4
--- /dev/null
+++ b/src/glsl/CH11-bumpmaptex.frag
@@ -0,0 +1,47 @@
+//
+// Fragment shader for procedural bumps
+//
+// Authors: John Kessenich, Randi Rost
+//
+// Copyright (c) 2002-2006 3Dlabs Inc. Ltd. 
+//
+// See 3Dlabs-License.txt for license information
+//
+// Texture mapping/modulation added by Brian Paul
+//
+
+varying vec3 LightDir;
+varying vec3 EyeDir;
+
+uniform float BumpDensity;     // = 16.0
+uniform float BumpSize;        // = 0.15
+uniform float SpecularFactor;  // = 0.5
+
+uniform sampler2D Tex;
+
+void main()
+{
+    vec3 ambient = vec3(0.25);
+    vec3 litColor;
+    vec2 c = BumpDensity * gl_TexCoord[0].st;
+    vec2 p = fract(c) - vec2(0.5);
+
+    float d, f;
+    d = p.x * p.x + p.y * p.y;
+    f = inversesqrt(d + 1.0);
+
+    if (d >= BumpSize)
+        { p = vec2(0.0); f = 1.0; }
+
+    vec3 SurfaceColor = texture2D(Tex, gl_TexCoord[0].st).xyz;
+
+    vec3 normDelta = vec3(p.x, p.y, 1.0) * f;
+    litColor = SurfaceColor * (ambient + max(dot(normDelta, LightDir), 0.0));
+    vec3 reflectDir = reflect(LightDir, normDelta);
+    
+    float spec = max(dot(EyeDir, reflectDir), 0.0);
+    spec *= SpecularFactor;
+    litColor = min(litColor + spec, vec3(1.0));
+
+    gl_FragColor = vec4(litColor, 1.0);
+}
diff --git a/src/glsl/blinking-teapot.frag b/src/glsl/blinking-teapot.frag
new file mode 100644
index 0000000..0db060b
--- /dev/null
+++ b/src/glsl/blinking-teapot.frag
@@ -0,0 +1,31 @@
+#extension GL_ARB_uniform_buffer_object : enable
+
+layout(std140) uniform colors0
+{
+    float DiffuseCool;
+    float DiffuseWarm;
+    vec3  SurfaceColor;
+    vec3  WarmColor;
+    vec3  CoolColor;
+    vec4  some[8];
+};
+
+varying float NdotL;
+varying vec3  ReflectVec;
+varying vec3  ViewVec;
+
+void main (void)
+{
+
+    vec3 kcool    = min(CoolColor + DiffuseCool * SurfaceColor, 1.0);
+    vec3 kwarm    = min(WarmColor + DiffuseWarm * SurfaceColor, 1.0);
+    vec3 kfinal   = mix(kcool, kwarm, NdotL);
+
+    vec3 nreflect = normalize(ReflectVec);
+    vec3 nview    = normalize(ViewVec);
+
+    float spec    = max(dot(nreflect, nview), 0.0);
+    spec          = pow(spec, 32.0);
+
+    gl_FragColor = vec4 (min(kfinal + spec, 1.0), 1.0);
+}
diff --git a/src/glsl/blinking-teapot.vert b/src/glsl/blinking-teapot.vert
new file mode 100644
index 0000000..397d733
--- /dev/null
+++ b/src/glsl/blinking-teapot.vert
@@ -0,0 +1,16 @@
+vec3 LightPosition = vec3(0.0, 10.0, 4.0); 
+ 
+varying float NdotL;
+varying vec3  ReflectVec;
+varying vec3  ViewVec;
+ 
+void main(void)
+{
+    vec3 ecPos      = vec3 (gl_ModelViewMatrix * gl_Vertex);
+    vec3 tnorm      = normalize(gl_NormalMatrix * gl_Normal);
+    vec3 lightVec   = normalize(LightPosition - ecPos);
+    ReflectVec      = normalize(reflect(-lightVec, tnorm));
+    ViewVec         = normalize(-ecPos);
+    NdotL           = (dot(lightVec, tnorm) + 1.0) * 0.5;
+    gl_Position     = ftransform();
+}
diff --git a/src/glsl/convolution.frag b/src/glsl/convolution.frag
new file mode 100644
index 0000000..e49b8ac
--- /dev/null
+++ b/src/glsl/convolution.frag
@@ -0,0 +1,21 @@
+
+const int KernelSize = 9;
+
+//texture offsets
+uniform vec2 Offset[KernelSize];
+//convolution kernel
+uniform vec4 KernelValue[KernelSize];
+uniform sampler2D srcTex;
+uniform vec4 ScaleFactor;
+uniform vec4 BaseColor;
+
+void main(void)
+{
+    int i;
+    vec4 sum = vec4(0.0);
+    for (i = 0; i < KernelSize; ++i) {
+        vec4 tmp = texture2D(srcTex, gl_TexCoord[0].st + Offset[i]);
+        sum += tmp * KernelValue[i];
+    }
+    gl_FragColor = sum * ScaleFactor + BaseColor;
+}
diff --git a/src/glsl/simplex-noise.glsl b/src/glsl/simplex-noise.glsl
new file mode 100644
index 0000000..b6833cb
--- /dev/null
+++ b/src/glsl/simplex-noise.glsl
@@ -0,0 +1,279 @@
+//
+// Description : Array and textureless GLSL 2D/3D/4D simplex
+// noise functions.
+// Author : Ian McEwan, Ashima Arts.
+// Maintainer : ijm
+// Lastmod : 20110223
+// License : Copyright (C) 2011 Ashima Arts. All rights reserved.
+// Distributed under the Artistic License 2.0; See LICENCE file.
+//
+
+#define NORMALIZE_GRADIENTS
+#undef USE_CIRCLE
+#define COLLAPSE_SORTNET
+
+float permute(float x0,vec3 p) {
+  float x1 = mod(x0 * p.y, p.x);
+  return floor( mod( (x1 + p.z) *x0, p.x ));
+  }
+vec2 permute(vec2 x0,vec3 p) {
+  vec2 x1 = mod(x0 * p.y, p.x);
+  return floor( mod( (x1 + p.z) *x0, p.x ));
+  }
+vec3 permute(vec3 x0,vec3 p) {
+  vec3 x1 = mod(x0 * p.y, p.x);
+  return floor( mod( (x1 + p.z) *x0, p.x ));
+  }
+vec4 permute(vec4 x0,vec3 p) {
+  vec4 x1 = mod(x0 * p.y, p.x);
+  return floor( mod( (x1 + p.z) *x0, p.x ));
+  }
+
+uniform vec4 pParam;
+// Example
+// const vec4 pParam = vec4( 17.* 17., 34., 1., 7.);
+
+float taylorInvSqrt(float r)
+  {
+  return ( 0.83666002653408 + 0.7*0.85373472095314 - 0.85373472095314 * r );
+  }
+
+float simplexNoise2(vec2 v)
+  {
+  const vec2 C = vec2(0.211324865405187134, // (3.0-sqrt(3.0))/6.;
+                      0.366025403784438597); // 0.5*(sqrt(3.0)-1.);
+  const vec3 D = vec3( 0., 0.5, 2.0) * 3.14159265358979312;
+// First corner
+  vec2 i = floor(v + dot(v, C.yy) );
+  vec2 x0 = v - i + dot(i, C.xx);
+
+// Other corners
+  vec2 i1 = (x0.x > x0.y) ? vec2(1.,0.) : vec2(0.,1.) ;
+
+   // x0 = x0 - 0. + 0. * C
+  vec2 x1 = x0 - i1 + 1. * C.xx ;
+  vec2 x2 = x0 - 1. + 2. * C.xx ;
+
+// Permutations
+  i = mod(i, pParam.x);
+  vec3 p = permute( permute(
+             i.y + vec3(0., i1.y, 1. ), pParam.xyz)
+           + i.x + vec3(0., i1.x, 1. ), pParam.xyz);
+
+#ifndef USE_CIRCLE
+// ( N points uniformly over a line, mapped onto a diamond.)
+  vec3 x = fract(p / pParam.w) ;
+  vec3 h = 0.5 - abs(x) ;
+
+  vec3 sx = vec3(lessThan(x,D.xxx)) *2. -1.;
+  vec3 sh = vec3(lessThan(h,D.xxx));
+
+  vec3 a0 = x + sx*sh;
+  vec2 p0 = vec2(a0.x,h.x);
+  vec2 p1 = vec2(a0.y,h.y);
+  vec2 p2 = vec2(a0.z,h.z);
+
+#ifdef NORMALISE_GRADIENTS
+  p0 *= taylorInvSqrt(dot(p0,p0));
+  p1 *= taylorInvSqrt(dot(p1,p1));
+  p2 *= taylorInvSqrt(dot(p2,p2));
+#endif
+
+  vec3 g = 2.0 * vec3( dot(p0, x0), dot(p1, x1), dot(p2, x2) );
+#else
+// N points around a unit circle.
+  vec3 phi = D.z * mod(p,pParam.w) /pParam.w ;
+  vec4 a0 = sin(phi.xxyy+D.xyxy);
+  vec2 a1 = sin(phi.zz +D.xy);
+  vec3 g = vec3( dot(a0.xy, x0), dot(a0.zw, x1), dot(a1.xy, x2) );
+#endif
+// mix
+  vec3 m = max(0.5 - vec3(dot(x0,x0), dot(x1,x1), dot(x2,x2)), 0.);
+  m = m*m ;
+  return 1.66666* 70.*dot(m*m, g);
+  }
+
+float simplexNoise3(vec3 v)
+  {
+  const vec2 C = vec2(1./6. , 1./3. ) ;
+  const vec4 D = vec4(0., 0.5, 1.0, 2.0);
+
+// First corner
+  vec3 i = floor(v + dot(v, C.yyy) );
+  vec3 x0 = v - i + dot(i, C.xxx) ;
+  
+// Other corners
+#ifdef COLLAPSE_SORTNET
+  vec3 g = vec3( greaterThan( x0.xyz, x0.yzx) );
+  vec3 l = vec3( lessThanEqual( x0.xyz, x0.yzx) );
+
+  vec3 i1 = g.xyz * l.zxy;
+  vec3 i2 = max( g.xyz, l.zxy);
+#else
+// Keeping this clean - let the compiler optimize.
+  vec3 q1;
+  q1.x = max(x0.x, x0.y);
+  q1.y = min(x0.x, x0.y);
+  q1.z = x0.z;
+
+  vec3 q2;
+  q2.x = max(q1.x,q1.z);
+  q2.z = min(q1.x,q1.z);
+  q2.y = q1.y;
+
+  vec3 q3;
+  q3.y = max(q2.y, q2.z);
+  q3.z = min(q2.y, q2.z);
+  q3.x = q2.x;
+
+  vec3 i1 = vec3(equal(q3.xxx, x0));
+  vec3 i2 = i1 + vec3(equal(q3.yyy, x0));
+#endif
+
+   // x0 = x0 - 0. + 0. * C
+  vec3 x1 = x0 - i1 + 1. * C.xxx;
+  vec3 x2 = x0 - i2 + 2. * C.xxx;
+  vec3 x3 = x0 - 1. + 3. * C.xxx;
+
+// Permutations
+  i = mod(i, pParam.x );
+  vec4 p = permute( permute( permute(
+             i.z + vec4(0., i1.z, i2.z, 1. ), pParam.xyz)
+           + i.y + vec4(0., i1.y, i2.y, 1. ), pParam.xyz)
+           + i.x + vec4(0., i1.x, i2.x, 1. ), pParam.xyz);
+
+// Gradients
+// ( N*N points uniformly over a square, mapped onto a octohedron.)
+  float n_ = 1.0/pParam.w ;
+  vec3 ns = n_ * D.wyz - D.xzx ;
+
+  vec4 j = p - pParam.w*pParam.w*floor(p * ns.z *ns.z); // mod(p,N*N)
+
+  vec4 x_ = floor(j * ns.z) ;
+  vec4 y_ = floor(j - pParam.w * x_ ) ; // mod(j,N)
+
+  vec4 x = x_ *ns.x + ns.yyyy;
+  vec4 y = y_ *ns.x + ns.yyyy;
+  vec4 h = 1. - abs(x) - abs(y);
+
+  vec4 b0 = vec4( x.xy, y.xy );
+  vec4 b1 = vec4( x.zw, y.zw );
+
+  vec4 s0 = vec4(lessThan(b0,D.xxxx)) *2. -1.;
+  vec4 s1 = vec4(lessThan(b1,D.xxxx)) *2. -1.;
+  vec4 sh = vec4(lessThan(h, D.xxxx));
+
+  vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;
+  vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;
+
+  vec3 p0 = vec3(a0.xy,h.x);
+  vec3 p1 = vec3(a0.zw,h.y);
+  vec3 p2 = vec3(a1.xy,h.z);
+  vec3 p3 = vec3(a1.zw,h.w);
+
+#ifdef NORMALISE_GRADIENTS
+  p0 *= taylorInvSqrt(dot(p0,p0));
+  p1 *= taylorInvSqrt(dot(p1,p1));
+  p2 *= taylorInvSqrt(dot(p2,p2));
+  p3 *= taylorInvSqrt(dot(p3,p3));
+#endif
+
+// Mix
+  vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.);
+  m = m * m;
+//used to be 64.
+  return 48.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1),
+                                dot(p2,x2), dot(p3,x3) ) );
+  }
+
+vec4 grad4(float j, vec4 ip)
+  {
+  const vec4 ones = vec4(1.,1.,1.,-1.);
+  vec4 p,s;
+
+  p.xyz = floor( fract (vec3(j) * ip.xyz) *pParam.w) * ip.z -1.0;
+  p.w = 1.5 - dot(abs(p.xyz), ones.xyz);
+  s = vec4(lessThan(p,vec4(0.)));
+  p.xyz = p.xyz + (s.xyz*2.-1.) * s.www;
+
+  return p;
+  }
+
+float simplexNoise4(vec4 v)
+  {
+  const vec2 C = vec2( 0.138196601125010504, // (5 - sqrt(5))/20 G4
+                        0.309016994374947451); // (sqrt(5) - 1)/4 F4
+// First corner
+  vec4 i = floor(v + dot(v, C.yyyy) );
+  vec4 x0 = v - i + dot(i, C.xxxx);
+
+// Other corners
+
+// Force existance of strict total ordering in sort.
+  vec4 q0 = floor(x0 * 1024.0) + vec4( 0., 1./4., 2./4. , 3./4.);
+  vec4 q1;
+  q1.xy = max(q0.xy,q0.zw); // x:z y:w
+  q1.zw = min(q0.xy,q0.zw);
+
+  vec4 q2;
+  q2.xz = max(q1.xz,q1.yw); // x:y z:w
+  q2.yw = min(q1.xz,q1.yw);
+  
+  vec4 q3;
+  q3.y = max(q2.y,q2.z); // y:z
+  q3.z = min(q2.y,q2.z);
+  q3.xw = q2.xw;
+
+  vec4 i1 = vec4(lessThanEqual(q3.xxxx, q0));
+  vec4 i2 = vec4(lessThanEqual(q3.yyyy, q0));
+  vec4 i3 = vec4(lessThanEqual(q3.zzzz, q0));
+
+   // x0 = x0 - 0. + 0. * C
+  vec4 x1 = x0 - i1 + 1. * C.xxxx;
+  vec4 x2 = x0 - i2 + 2. * C.xxxx;
+  vec4 x3 = x0 - i3 + 3. * C.xxxx;
+  vec4 x4 = x0 - 1. + 4. * C.xxxx;
+
+// Permutations
+  i = mod(i, pParam.x );
+  float j0 = permute( permute( permute( permute (
+              i.w, pParam.xyz) + i.z, pParam.xyz)
+            + i.y, pParam.xyz) + i.x, pParam.xyz);
+  vec4 j1 = permute( permute( permute( permute (
+             i.w + vec4(i1.w, i2.w, i3.w, 1. ), pParam.xyz)
+           + i.z + vec4(i1.z, i2.z, i3.z, 1. ), pParam.xyz)
+           + i.y + vec4(i1.y, i2.y, i3.y, 1. ), pParam.xyz)
+           + i.x + vec4(i1.x, i2.x, i3.x, 1. ), pParam.xyz);
+// Gradients
+// ( N*N*N points uniformly over a cube, mapped onto a 4-octohedron.)
+  vec4 ip = pParam ;
+  ip.xy *= pParam.w ;
+  ip.x *= pParam.w ;
+  ip = vec4(1.,1.,1.,2.) / ip ;
+
+  vec4 p0 = grad4(j0, ip);
+  vec4 p1 = grad4(j1.x, ip);
+  vec4 p2 = grad4(j1.y, ip);
+  vec4 p3 = grad4(j1.z, ip);
+  vec4 p4 = grad4(j1.w, ip);
+
+#ifdef NORMALISE_GRADIENTS
+  p0 *= taylorInvSqrt(dot(p0,p0));
+  p1 *= taylorInvSqrt(dot(p1,p1));
+  p2 *= taylorInvSqrt(dot(p2,p2));
+  p3 *= taylorInvSqrt(dot(p3,p3));
+  p4 *= taylorInvSqrt(dot(p4,p4));
+#endif
+
+// Mix
+  vec3 m0 = max(0.6 - vec3(dot(x0,x0), dot(x1,x1), dot(x2,x2)), 0.);
+  vec2 m1 = max(0.6 - vec2(dot(x3,x3), dot(x4,x4) ), 0.);
+  m0 = m0 * m0;
+  m1 = m1 * m1;
+  return 32. * ( dot(m0*m0, vec3( dot( p0, x0 ), dot( p1, x1 ), dot( p2, x2 )))
+               + dot(m1*m1, vec2( dot( p3, x3 ), dot( p4, x4 ) ) ) ) ;
+
+  }
+
+
+
diff --git a/src/glsl/skinning.vert b/src/glsl/skinning.vert
new file mode 100644
index 0000000..28970ee
--- /dev/null
+++ b/src/glsl/skinning.vert
@@ -0,0 +1,24 @@
+// Vertex weighting/blendin shader
+// Brian Paul
+// 4 Nov 2008
+
+uniform mat4 mat0, mat1;
+attribute float weight;
+
+void main() 
+{
+   // simple diffuse shading
+   // Note that we should really transform the normal vector along with
+   // the postion below... someday.
+   vec3 lightVec = vec3(0, 0, 1);
+   vec3 norm = gl_NormalMatrix * gl_Normal;
+   float dot = 0.2 + max(0.0, dot(norm, lightVec));
+   gl_FrontColor = vec4(dot);
+
+   // compute sum of weighted transformations
+   vec4 pos0 = mat0 * gl_Vertex;
+   vec4 pos1 = mat1 * gl_Vertex;
+   vec4 pos = mix(pos0, pos1, weight);
+
+   gl_Position = gl_ModelViewProjectionMatrix * pos;
+}
diff --git a/src/perf/glslstateschange1.frag b/src/perf/glslstateschange1.frag
new file mode 100644
index 0000000..0839436
--- /dev/null
+++ b/src/perf/glslstateschange1.frag
@@ -0,0 +1,19 @@
+// Multi-texture fragment shader
+// Brian Paul
+
+// Composite second texture over first.
+// We're assuming the 2nd texture has a meaningful alpha channel.
+
+uniform sampler2D tex1;
+uniform sampler2D tex2;
+uniform vec4 UniV1;
+uniform vec4 UniV2;
+
+void main()
+{
+   vec4 t3;
+   vec4 t1 = texture2D(tex1, gl_TexCoord[0].xy);
+   vec4 t2 = texture2D(tex2, gl_TexCoord[1].xy);
+   t3 = mix(t1, t2, t2.w);
+   gl_FragColor = t3 + UniV1 + UniV2;
+}
diff --git a/src/perf/glslstateschange1.vert b/src/perf/glslstateschange1.vert
new file mode 100644
index 0000000..cef50db
--- /dev/null
+++ b/src/perf/glslstateschange1.vert
@@ -0,0 +1,14 @@
+// Multi-texture vertex shader
+// Brian Paul
+
+
+attribute vec4 TexCoord0, TexCoord1;
+attribute vec4 VertCoord;
+
+void main()
+{
+   gl_TexCoord[0] = TexCoord0;
+   gl_TexCoord[1] = TexCoord1;
+   // note: may use gl_Vertex or VertCoord here for testing:
+   gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
+}
diff --git a/src/perf/glslstateschange2.frag b/src/perf/glslstateschange2.frag
new file mode 100644
index 0000000..0df0319
--- /dev/null
+++ b/src/perf/glslstateschange2.frag
@@ -0,0 +1,17 @@
+// Multi-texture fragment shader
+// Brian Paul
+
+// Composite second texture over first.
+// We're assuming the 2nd texture has a meaningful alpha channel.
+
+uniform sampler2D tex1;
+uniform sampler2D tex2;
+uniform vec4 UniV1;
+uniform vec4 UniV2;
+
+void main()
+{
+   vec4 t1 = texture2D(tex1, gl_TexCoord[0].xy);
+   vec4 t2 = texture2D(tex2, gl_TexCoord[1].xy);
+   gl_FragColor = t1 + t2 + UniV1 + UniV2;
+}
diff --git a/src/perf/glslstateschange2.vert b/src/perf/glslstateschange2.vert
new file mode 100644
index 0000000..cef50db
--- /dev/null
+++ b/src/perf/glslstateschange2.vert
@@ -0,0 +1,14 @@
+// Multi-texture vertex shader
+// Brian Paul
+
+
+attribute vec4 TexCoord0, TexCoord1;
+attribute vec4 VertCoord;
+
+void main()
+{
+   gl_TexCoord[0] = TexCoord0;
+   gl_TexCoord[1] = TexCoord1;
+   // note: may use gl_Vertex or VertCoord here for testing:
+   gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
+}
diff --git a/src/vpglsl/infinite-loop.glsl b/src/vpglsl/infinite-loop.glsl
new file mode 100644
index 0000000..bc7ae4b
--- /dev/null
+++ b/src/vpglsl/infinite-loop.glsl
@@ -0,0 +1,8 @@
+void main() {
+   gl_Position = gl_Vertex;
+   vec4 sum = vec4(0);
+   for (int i = 1; i != 2; i += 2) {
+      sum += vec4(0.1, 0.1, 0.1, 0.1);
+   }
+   gl_FrontColor = sum;
+}
-- 
2.0.0

