Merge "GLES3: shaders.indexing.moredynamic"
diff --git a/android/cts/master/gles2-master.txt b/android/cts/master/gles2-master.txt
index 6264211..e2a1e66 100644
--- a/android/cts/master/gles2-master.txt
+++ b/android/cts/master/gles2-master.txt
@@ -6613,6 +6613,10 @@
 dEQP-GLES2.functional.shaders.struct.uniform.sampler_fragment
 dEQP-GLES2.functional.shaders.struct.uniform.sampler_nested_vertex
 dEQP-GLES2.functional.shaders.struct.uniform.sampler_nested_fragment
+dEQP-GLES2.functional.shaders.struct.uniform.sampler_in_function_arg_vertex
+dEQP-GLES2.functional.shaders.struct.uniform.sampler_in_function_arg_fragment
+dEQP-GLES2.functional.shaders.struct.uniform.sampler_in_array_function_arg_vertex
+dEQP-GLES2.functional.shaders.struct.uniform.sampler_in_array_function_arg_fragment
 dEQP-GLES2.functional.shaders.struct.uniform.equal_vertex
 dEQP-GLES2.functional.shaders.struct.uniform.equal_fragment
 dEQP-GLES2.functional.shaders.struct.uniform.not_equal_vertex
diff --git a/modules/gles2/functional/es2fShaderStructTests.cpp b/modules/gles2/functional/es2fShaderStructTests.cpp
index 555a154..21d84c5 100644
--- a/modules/gles2/functional/es2fShaderStructTests.cpp
+++ b/modules/gles2/functional/es2fShaderStructTests.cpp
@@ -111,7 +111,7 @@
 				throw tcu::NotSupportedError("Dynamic loops not supported");
 		}
 
-		if ((m_flags && FLAG_USES_TEXTURES) && m_isVertexCase)
+		if ((m_flags & FLAG_USES_TEXTURES) && m_isVertexCase)
 		{
 			int numTextures = 0;
 			m_renderCtx.getFunctions().getIntegerv(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, &numTextures);
@@ -1859,6 +1859,58 @@
 			c.color.xyz() = c.texture2D(TEXTURE_BRICK, c.coords.swizzle(0,1) * 0.25f + 0.5f).swizzle(0,1,2);
 		});
 
+	UNIFORM_STRUCT_CASE(sampler_in_function_arg, "Sampler in struct as function arg", FLAG_USES_TEXTURES,
+		LineStream()
+		<< "${DECLARATIONS}"
+		<< ""
+		<< "struct S {"
+		<< "	sampler2D		source;"
+		<< "};"
+		<< ""
+		<< "mediump vec4 fun(S s) {"
+		<< "	return texture2D(s.source, vec2(0.5));"
+		<< "}"
+		<< ""
+		<< "uniform S s;"
+		<< "void main (void)"
+		<< "{"
+		<< "	${DST} = fun(s);"
+		<< "	${ASSIGN_POS}"
+		<< "}",
+		{
+			DE_UNREF(constCoords);
+			setUniform(gl, programID, "s.source", 0);
+		},
+		{
+			c.color.xyz() = c.texture2D(TEXTURE_BRICK, tcu::Vec2(0.5f, 0.5f)).swizzle(0,1,2);
+		});
+
+	UNIFORM_STRUCT_CASE(sampler_in_array_function_arg, "Sampler in struct as function arg", FLAG_USES_TEXTURES,
+		LineStream()
+		<< "${DECLARATIONS}"
+		<< ""
+		<< "struct S {"
+		<< "	sampler2D		source;"
+		<< "};"
+		<< ""
+		<< "mediump vec4 fun(S s[2]) {"
+		<< "	return texture2D(s[0].source, vec2(0.5));"
+		<< "}"
+		<< ""
+		<< "uniform S s[2];"
+		<< "void main (void)"
+		<< "{"
+		<< "	${DST} = fun(s);"
+		<< "	${ASSIGN_POS}"
+		<< "}",
+		{
+			DE_UNREF(constCoords);
+			setUniform(gl, programID, "s[0].source", 0);
+		},
+		{
+			c.color.xyz() = c.texture2D(TEXTURE_BRICK, tcu::Vec2(0.5f, 0.5f)).swizzle(0,1,2);
+		});
+
 	UNIFORM_STRUCT_CASE(equal, "Struct equality", 0,
 		LineStream()
 		<< "${DECLARATIONS}"