blob: a2b6bbbb80cb25976ffc3ea864d566fa72fe7fcd [file] [log] [blame]
# -------------------------------------------------
# drawElements Quality Program OpenGL ES 3.2 Module
# -------------------------------------------------
#
# Copyright 2016 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
case mismatch_number_of_declarations
version 450
desc "Shader storage block mismatch: different number of declarations"
require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0
expect link_fail
vertex ""
#version 450
${VERTEX_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable1;
};
out mediump float vtx_val;
void main()
{
vtx_val = variable1;
${VERTEX_OUTPUT}
}
""
fragment ""
#version 450
precision mediump float;
${FRAGMENT_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable1;
mediump float variable2;
};
in mediump float vtx_val;
void main()
{
${FRAG_COLOR} = vec4(vtx_val + variable1 + variable2);
}
""
end
case mismatch_order
version 450
desc "Shader storage block mismatch: different number of declarations"
require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0
expect link_fail
vertex ""
#version 450
${VERTEX_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable1;
mediump float variable2;
};
out mediump float vtx_val;
void main()
{
vtx_val = variable1 + variable2;
${VERTEX_OUTPUT}
}
""
fragment ""
#version 450
precision mediump float;
${FRAGMENT_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable2;
mediump float variable1;
};
in mediump float vtx_val;
void main()
{
${FRAG_COLOR} = vec4(vtx_val + variable1 + variable2);
}
""
end
case mismatch_type
version 450
desc "Shader storage block mismatch: different number of declarations"
require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0
expect link_fail
vertex ""
#version 450
${VERTEX_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump vec2 variable;
};
out mediump float vtx_val;
void main()
{
vtx_val = variable.y;
${VERTEX_OUTPUT}
}
""
fragment ""
#version 450
precision mediump float;
${FRAGMENT_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable;
};
in mediump float vtx_val;
void main()
{
${FRAG_COLOR} = vec4(vtx_val + variable);
}
""
end
case mismatch_member_name
version 450
desc "Shader storage block mismatch: different number of declarations"
require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0
expect link_fail
vertex ""
#version 450
${VERTEX_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable1;
};
out mediump float vtx_val;
void main()
{
vtx_val = variable1;
${VERTEX_OUTPUT}
}
""
fragment ""
#version 450
precision mediump float;
${FRAGMENT_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable2;
};
in mediump float vtx_val;
void main()
{
${FRAG_COLOR} = vec4(vtx_val + variable2);
}
""
end
case mismatch_member_unsized_sized_array
version 450
desc "Shader storage block mismatch: different number of declarations"
require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0
expect link_fail
vertex ""
#version 450
${VERTEX_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable[];
};
out mediump float vtx_val;
void main()
{
vtx_val = variable[0];
${VERTEX_OUTPUT}
}
""
fragment ""
#version 450
precision mediump float;
${FRAGMENT_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable[1];
};
in mediump float vtx_val;
void main()
{
${FRAG_COLOR} = vec4(vtx_val + variable[0]);
}
""
end
case mismatch_member_array_size
version 450
desc "Shader storage block mismatch: different number of declarations"
require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0
expect link_fail
vertex ""
#version 450
${VERTEX_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable[1];
};
out mediump float vtx_val;
void main()
{
vtx_val = variable[0];
${VERTEX_OUTPUT}
}
""
fragment ""
#version 450
precision mediump float;
${FRAGMENT_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable[2];
};
in mediump float vtx_val;
void main()
{
${FRAG_COLOR} = vec4(vtx_val + variable[0]);
}
""
end
case mismatch_with_and_without_instance_name
version 450
desc "Shader storage block mismatch: different number of declarations"
require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0
expect link_fail
vertex ""
#version 450
${VERTEX_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable;
} instanceName;
out mediump float vtx_val;
void main()
{
vtx_val = instanceName.variable;
${VERTEX_OUTPUT}
}
""
fragment ""
#version 450
precision mediump float;
${FRAGMENT_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable;
};
in mediump float vtx_val;
void main()
{
${FRAG_COLOR} = vec4(vtx_val + variable);
}
""
end
case mismatch_block_array_size
version 450
desc "Shader storage block mismatch: different number of declarations"
require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0
expect link_fail
vertex ""
#version 450
${VERTEX_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable;
} instanceName[1];
out mediump float vtx_val;
void main()
{
vtx_val = instanceName[0].variable;
${VERTEX_OUTPUT}
}
""
fragment ""
#version 450
precision mediump float;
${FRAGMENT_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable;
} instanceName[2];
in mediump float vtx_val;
void main()
{
${FRAG_COLOR} = vec4(vtx_val + instanceName[0].variable + instanceName[1].variable);
}
""
end
case ambiguous_variable_name_1
version 450
desc "Unnamed shader storage block variable and global variable with identical names"
require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
expect compile_or_link_fail
vertex ""
#version 450
${VERTEX_DECLARATIONS}
float variable;
layout(binding=0) buffer BufferBlockName
{
mediump float variable;
};
out mediump float vtx_val;
void main()
{
vtx_val = variable;
${VERTEX_OUTPUT}
}
""
fragment ""
#version 450
precision mediump float;
${FRAGMENT_DECLARATIONS}
in mediump float vtx_val;
void main()
{
${FRAG_COLOR} = vec4(vtx_val);
}
""
end
case ambiguous_variable_name_2
version 450
desc "Two unnamed shader storage blocks with variables with identical names"
require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 1
expect compile_or_link_fail
vertex ""
#version 450
${VERTEX_DECLARATIONS}
layout(binding=0) buffer BufferBlockNameA
{
mediump float variable;
};
layout(binding=1) buffer BufferBlockNameB
{
mediump float variable;
};
out mediump float vtx_val;
void main()
{
vtx_val = variable;
${VERTEX_OUTPUT}
}
""
fragment ""
#version 450
precision mediump float;
${FRAGMENT_DECLARATIONS}
in mediump float vtx_val;
void main()
{
${FRAG_COLOR} = vec4(vtx_val);
}
""
end
case ambiguous_variable_name_3
version 450
desc "Two unnamed shader storage blocks in different stages with variables with identical names"
require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0
# language to make link error explicitly defined. ("Within an interface, ...")
expect link_fail
vertex ""
#version 450
${VERTEX_DECLARATIONS}
layout(binding=0) buffer BufferBlockNameA
{
mediump float variable;
};
out mediump float vtx_val;
void main()
{
vtx_val = variable;
${VERTEX_OUTPUT}
}
""
fragment ""
#version 450
precision mediump float;
${FRAGMENT_DECLARATIONS}
layout(binding=1) buffer BufferBlockNameB
{
mediump float variable;
};
in mediump float vtx_val;
void main()
{
${FRAG_COLOR} = vec4(vtx_val + variable);
}
""
end