# -------------------------------------------------
# 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
