diff --git a/Test/300.frag b/Test/300.frag index 7419379d..1e16a145 100644 --- a/Test/300.frag +++ b/Test/300.frag @@ -48,6 +48,8 @@ in S2 s2; out vec3 sc; out float sf; +uniform sampler2D arrayedSampler[5]; + void main() { float f; @@ -57,13 +59,14 @@ void main() v = textureLod(s2DArray, c3D, 1.2); f = textureOffset(s2DShadow, c3D, ic2D, c1D); v = texelFetch(s3D, ic3D, ic1D); - v = texelFetchOffset(s2D, ic2D, 4, ic2D); + v = texelFetchOffset(arrayedSampler[2], ic2D, 4, ic2D); f = textureLodOffset(s2DShadow, c3D, c1D, ic2D); v = textureProjLodOffset(s2D, c3D, c1D, ic2D); v = textureGrad(sCube, c3D, c3D, c3D); f = textureGradOffset(s2DArrayShadow, c4D, c2D, c2D, ic2D); v = textureProjGrad(s3D, c4D, c3D, c3D); v = textureProjGradOffset(s2D, c3D, c2D, c2D, ic2D); + v = texture(arrayedSampler[ic1D], c2D); // ERROR ivec4 iv; iv = texture(is2D, c2D); diff --git a/Test/400.frag b/Test/400.frag new file mode 100644 index 00000000..f4288ab1 --- /dev/null +++ b/Test/400.frag @@ -0,0 +1,12 @@ +#version 330 core + +in vec2 c2D; +flat in int i; + +uniform sampler2D arrayedSampler[5]; + +void main() +{ + vec4 v; + v = texture(arrayedSampler[i], c2D); +} diff --git a/Test/testlist b/Test/testlist index e6707898..f2df38d9 100644 --- a/Test/testlist +++ b/Test/testlist @@ -39,5 +39,6 @@ uint.frag switch.frag tokenLength.vert 300scope.vert +400.frag 420.vert 430scope.vert diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y index 3cd084e2..3164ced0 100644 --- a/glslang/MachineIndependent/glslang.y +++ b/glslang/MachineIndependent/glslang.y @@ -309,6 +309,10 @@ postfix_expression parseContext.error($2.line, "", "[", "array must be redeclared with a size before being indexed with a variable"); if ($1->getBasicType() == EbtBlock) parseContext.requireProfile($1->getLine(), static_cast(~EEsProfileMask), "variable indexing block array"); + if ($1->getBasicType() == EbtSampler) { + parseContext.requireProfile($1->getLine(), static_cast(ECoreProfileMask | ECompatibilityProfileMask), "variable indexing sampler array"); + parseContext.profileRequires($1->getLine(), ECoreProfile, 400, 0, "variable indexing sampler array"); + } $$ = parseContext.intermediate.addIndex(EOpIndexIndirect, $1, $3, $2.line); }