Commit eebed6f6 by John Kessenich

Disallow variable indexing into sampler array for ES and desktop before version 400.

parent 01fc0645
...@@ -48,6 +48,8 @@ in S2 s2; ...@@ -48,6 +48,8 @@ in S2 s2;
out vec3 sc; out vec3 sc;
out float sf; out float sf;
uniform sampler2D arrayedSampler[5];
void main() void main()
{ {
float f; float f;
...@@ -57,13 +59,14 @@ void main() ...@@ -57,13 +59,14 @@ void main()
v = textureLod(s2DArray, c3D, 1.2); v = textureLod(s2DArray, c3D, 1.2);
f = textureOffset(s2DShadow, c3D, ic2D, c1D); f = textureOffset(s2DShadow, c3D, ic2D, c1D);
v = texelFetch(s3D, ic3D, ic1D); v = texelFetch(s3D, ic3D, ic1D);
v = texelFetchOffset(s2D, ic2D, 4, ic2D); v = texelFetchOffset(arrayedSampler[2], ic2D, 4, ic2D);
f = textureLodOffset(s2DShadow, c3D, c1D, ic2D); f = textureLodOffset(s2DShadow, c3D, c1D, ic2D);
v = textureProjLodOffset(s2D, c3D, c1D, ic2D); v = textureProjLodOffset(s2D, c3D, c1D, ic2D);
v = textureGrad(sCube, c3D, c3D, c3D); v = textureGrad(sCube, c3D, c3D, c3D);
f = textureGradOffset(s2DArrayShadow, c4D, c2D, c2D, ic2D); f = textureGradOffset(s2DArrayShadow, c4D, c2D, c2D, ic2D);
v = textureProjGrad(s3D, c4D, c3D, c3D); v = textureProjGrad(s3D, c4D, c3D, c3D);
v = textureProjGradOffset(s2D, c3D, c2D, c2D, ic2D); v = textureProjGradOffset(s2D, c3D, c2D, c2D, ic2D);
v = texture(arrayedSampler[ic1D], c2D); // ERROR
ivec4 iv; ivec4 iv;
iv = texture(is2D, c2D); iv = texture(is2D, c2D);
......
#version 330 core
in vec2 c2D;
flat in int i;
uniform sampler2D arrayedSampler[5];
void main()
{
vec4 v;
v = texture(arrayedSampler[i], c2D);
}
...@@ -39,5 +39,6 @@ uint.frag ...@@ -39,5 +39,6 @@ uint.frag
switch.frag switch.frag
tokenLength.vert tokenLength.vert
300scope.vert 300scope.vert
400.frag
420.vert 420.vert
430scope.vert 430scope.vert
...@@ -309,6 +309,10 @@ postfix_expression ...@@ -309,6 +309,10 @@ postfix_expression
parseContext.error($2.line, "", "[", "array must be redeclared with a size before being indexed with a variable"); parseContext.error($2.line, "", "[", "array must be redeclared with a size before being indexed with a variable");
if ($1->getBasicType() == EbtBlock) if ($1->getBasicType() == EbtBlock)
parseContext.requireProfile($1->getLine(), static_cast<EProfileMask>(~EEsProfileMask), "variable indexing block array"); parseContext.requireProfile($1->getLine(), static_cast<EProfileMask>(~EEsProfileMask), "variable indexing block array");
if ($1->getBasicType() == EbtSampler) {
parseContext.requireProfile($1->getLine(), static_cast<EProfileMask>(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); $$ = parseContext.intermediate.addIndex(EOpIndexIndirect, $1, $3, $2.line);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment