Hi
Will using textureOffset, I notice some obvious artefacts on AMD 11.1.
On AMD: http://img820.imageshack.us/i/amds.png
On nVidia: http://img138.imageshack.us/i/nvidiak.png
The shader is pretty simple:
void main()
{
vec4 Texel00 = textureOffset(Diffuse, Vert.Texcoord, ivec2(-1,-1));
vec4 Texel10 = textureOffset(Diffuse, Vert.Texcoord, ivec2( 0,-1));
vec4 Texel20 = textureOffset(Diffuse, Vert.Texcoord, ivec2( 1,-1));
vec4 Texel30 = textureOffset(Diffuse, Vert.Texcoord, ivec2( 2,-1));
vec4 Texel01 = textureOffset(Diffuse, Vert.Texcoord, ivec2(-1, 0));
vec4 Texel11 = textureOffset(Diffuse, Vert.Texcoord, ivec2( 0, 0));
vec4 Texel21 = textureOffset(Diffuse, Vert.Texcoord, ivec2( 1, 0));
vec4 Texel31 = textureOffset(Diffuse, Vert.Texcoord, ivec2( 2, 0));
vec4 Texel02 = textureOffset(Diffuse, Vert.Texcoord, ivec2(-1, 1));
vec4 Texel12 = textureOffset(Diffuse, Vert.Texcoord, ivec2( 0, 1));
vec4 Texel22 = textureOffset(Diffuse, Vert.Texcoord, ivec2( 1, 1));
vec4 Texel32 = textureOffset(Diffuse, Vert.Texcoord, ivec2( 2, 1));
vec4 Texel03 = textureOffset(Diffuse, Vert.Texcoord, ivec2(-1, 2));
vec4 Texel13 = textureOffset(Diffuse, Vert.Texcoord, ivec2( 0, 2));
vec4 Texel23 = textureOffset(Diffuse, Vert.Texcoord, ivec2( 1, 2));
vec4 Texel33 = textureOffset(Diffuse, Vert.Texcoord, ivec2( 2, 2));
vec2 TexelCoord = Vert.Texcoord * textureSize(Diffuse, 0);
vec2 SplineCoord = fract(TexelCoord);
vec4 Row0 = hermite(Texel00, Texel10, Texel20, Texel30, SplineCoord.x);
vec4 Row1 = hermite(Texel01, Texel11, Texel21, Texel31, SplineCoord.x);
vec4 Row2 = hermite(Texel02, Texel12, Texel22, Texel32, SplineCoord.x);
vec4 Row3 = hermite(Texel03, Texel13, Texel23, Texel33, SplineCoord.x);
FragColor = hermite(Row0, Row1, Row2, Row3, SplineCoord.y);
}
I replaced textureOffset by an alternative based on texelFetch but glCompileShader just crash… The code:
void main()
{
ivec2 TextureSize = textureSize(Diffuse, 0);
ivec2 TexelCoord = TextureSize * Vert.Texcoord;
vec4 Texel00 = texelOffset(Diffuse, TexelCoord, ivec2(-1,-1));
vec4 Texel10 = texelOffset(Diffuse, TexelCoord, ivec2( 0,-1));
vec4 Texel20 = texelOffset(Diffuse, TexelCoord, ivec2( 1,-1));
vec4 Texel30 = texelOffset(Diffuse, TexelCoord, ivec2( 2,-1));
vec4 Texel01 = texelOffset(Diffuse, TexelCoord, ivec2(-1, 0));
vec4 Texel11 = texelOffset(Diffuse, TexelCoord, ivec2( 0, 0));
vec4 Texel21 = texelOffset(Diffuse, TexelCoord, ivec2( 1, 0));
vec4 Texel31 = texelOffset(Diffuse, TexelCoord, ivec2( 2, 0));
vec4 Texel02 = texelOffset(Diffuse, TexelCoord, ivec2(-1, 1));
vec4 Texel12 = texelOffset(Diffuse, TexelCoord, ivec2( 0, 1));
vec4 Texel22 = texelOffset(Diffuse, TexelCoord, ivec2( 1, 1));
vec4 Texel32 = texelOffset(Diffuse, TexelCoord, ivec2( 2, 1));
vec4 Texel03 = texelOffset(Diffuse, TexelCoord, ivec2(-1, 2));
vec4 Texel13 = texelOffset(Diffuse, TexelCoord, ivec2( 0, 2));
vec4 Texel23 = texelOffset(Diffuse, TexelCoord, ivec2( 1, 2));
vec4 Texel33 = texelOffset(Diffuse, TexelCoord, ivec2( 2, 2));
vec2 SplineCoord = fract(TextureSize * Vert.Texcoord);
vec4 Row0 = hermite(Texel00, Texel10, Texel20, Texel30, SplineCoord.x);
vec4 Row1 = hermite(Texel01, Texel11, Texel21, Texel31, SplineCoord.x);
vec4 Row2 = hermite(Texel02, Texel12, Texel22, Texel32, SplineCoord.x);
vec4 Row3 = hermite(Texel03, Texel13, Texel23, Texel33, SplineCoord.x);
FragColor = hermite(Row0, Row1, Row2, Row3, SplineCoord.y);
}
PS: Yes this code is not correct but the build should not crash the software anyway and just report the errors.