Merge "GLES2/3: error on declarations with unspecified precision" am: efe17a0a13 am: a9c0393428
am: 1fd2148761

Change-Id: Ia38b23eb3c4eef084b1c74d55f5c7d50f5d4bc33
diff --git a/android/cts/master/gles2-master.txt b/android/cts/master/gles2-master.txt
index f5b29ed..e007b1b 100644
--- a/android/cts/master/gles2-master.txt
+++ b/android/cts/master/gles2-master.txt
@@ -1115,6 +1115,11 @@
 dEQP-GLES2.functional.shaders.declarations.invalid_declarations.uniform_in_fragment_main
 dEQP-GLES2.functional.shaders.declarations.invalid_declarations.varying_in_vertex_main
 dEQP-GLES2.functional.shaders.declarations.invalid_declarations.varying_in_fragment_main
+dEQP-GLES2.functional.shaders.declarations.unspecified_precision.float_partially_specified_fragment
+dEQP-GLES2.functional.shaders.declarations.unspecified_precision.float_fragment
+dEQP-GLES2.functional.shaders.declarations.unspecified_precision.vec2_fragment
+dEQP-GLES2.functional.shaders.declarations.unspecified_precision.vec3_fragment
+dEQP-GLES2.functional.shaders.declarations.unspecified_precision.vec4_fragment
 dEQP-GLES2.functional.shaders.swizzles.vector_swizzles.mediump_vec2_x_vertex
 dEQP-GLES2.functional.shaders.swizzles.vector_swizzles.mediump_vec2_x_fragment
 dEQP-GLES2.functional.shaders.swizzles.vector_swizzles.mediump_vec2_xx_vertex
diff --git a/android/cts/master/gles3-master.txt b/android/cts/master/gles3-master.txt
index 6854ecf..2ce0ce6 100644
--- a/android/cts/master/gles3-master.txt
+++ b/android/cts/master/gles3-master.txt
@@ -2832,6 +2832,37 @@
 dEQP-GLES3.functional.shaders.declarations.invalid_declarations.uniform_block_array_without_instance_name_2_fragment
 dEQP-GLES3.functional.shaders.declarations.invalid_declarations.uniform_block_in_vertex
 dEQP-GLES3.functional.shaders.declarations.invalid_declarations.uniform_block_in_fragment
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.float_partially_specified_fragment
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.float_fragment
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.vec2_fragment
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.vec3_fragment
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.vec4_fragment
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.sampler3D_vertex
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.sampler3D_fragment
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.samplerCubeShadow_vertex
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.samplerCubeShadow_fragment
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.sampler2DShadow_vertex
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.sampler2DShadow_fragment
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.sampler2DArray_vertex
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.sampler2DArray_fragment
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.sampler2DArrayShadow_vertex
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.sampler2DArrayShadow_fragment
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.isampler2D_vertex
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.isampler2D_fragment
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.isampler3D_vertex
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.isampler3D_fragment
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.isamplerCube_vertex
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.isamplerCube_fragment
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.isampler2DArray_vertex
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.isampler2DArray_fragment
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.usampler2D_vertex
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.usampler2D_fragment
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.usampler3D_vertex
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.usampler3D_fragment
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.usamplerCube_vertex
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.usamplerCube_fragment
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.usampler2DArray_vertex
+dEQP-GLES3.functional.shaders.declarations.unspecified_precision.usampler2DArray_fragment
 dEQP-GLES3.functional.shaders.swizzles.vector_swizzles.mediump_vec2_x_vertex
 dEQP-GLES3.functional.shaders.swizzles.vector_swizzles.mediump_vec2_x_fragment
 dEQP-GLES3.functional.shaders.swizzles.vector_swizzles.mediump_vec2_xx_vertex
diff --git a/data/gles2/shaders/declarations.test b/data/gles2/shaders/declarations.test
index 4dfb0a4..80c513f 100644
--- a/data/gles2/shaders/declarations.test
+++ b/data/gles2/shaders/declarations.test
@@ -138,3 +138,63 @@
 	end
 
 end # invalid_declarations
+
+group unspecified_precision "Invalid declarations with unspecified precision"
+
+	case float_partially_specified_fragment
+		expect compile_fail
+		vertex ""
+			${VERTEX_DECLARATIONS}
+			void main() {}
+		""
+		fragment ""
+			// no global precision qualifier (e.g. precision mediump float)
+			void main() {
+				mediump float x = 1.0;
+				vec3 y = vec3(x);
+				mediump vec4 z = vec4(y, x);
+			}
+		""
+	end
+
+	case float_fragment
+		expect compile_fail
+		vertex ""
+			void main() {}
+		""
+		fragment ""
+			void main() { float v; }
+		""
+	end
+
+	case vec2_fragment
+		expect compile_fail
+		vertex ""
+			void main() {}
+		""
+		fragment ""
+			void main() { vec2 v; }
+		""
+	end
+
+	case vec3_fragment
+		expect compile_fail
+		vertex ""
+			void main() {}
+		""
+		fragment ""
+			void main() { vec3 v; }
+		""
+	end
+
+	case vec4_fragment
+		expect compile_fail
+		vertex ""
+			void main() {}
+		""
+		fragment ""
+			void main() { vec4 v; }
+		""
+	end
+
+end # unspecified_precision
diff --git a/data/gles3/shaders/declarations.test b/data/gles3/shaders/declarations.test
index 86f98d9..22945c8 100644
--- a/data/gles3/shaders/declarations.test
+++ b/data/gles3/shaders/declarations.test
@@ -589,3 +589,208 @@
 	end
 
 end # invalid_declarations
+
+group unspecified_precision "Invalid declarations with unspecified precision"
+
+	case float_partially_specified_fragment
+		version 300 es
+		expect compile_fail
+		vertex ""
+			#version 300 es
+			${VERTEX_DECLARATIONS}
+			void main() {}
+		""
+		fragment ""
+			#version 300 es
+			// no global precision qualifier (e.g. precision mediump float)
+			void main() {
+				mediump float x = 1.0;
+				vec3 y = vec3(x);
+				mediump vec4 z = vec4(y, x);
+			}
+		""
+	end
+
+	case float_fragment
+		version 300 es
+		expect compile_fail
+		vertex ""
+			#version 300 es
+			void main() {}
+		""
+		fragment ""
+			#version 300 es
+			void main() { float v; }
+		""
+	end
+
+	case vec2_fragment
+		version 300 es
+		expect compile_fail
+		vertex ""
+			#version 300 es
+			void main() {}
+		""
+		fragment ""
+			#version 300 es
+			void main() { vec2 v; }
+		""
+	end
+
+	case vec3_fragment
+		version 300 es
+		expect compile_fail
+		vertex ""
+			#version 300 es
+			void main() {}
+		""
+		fragment ""
+			#version 300 es
+			void main() { vec3 v; }
+		""
+	end
+
+	case vec4_fragment
+		version 300 es
+		expect compile_fail
+		vertex ""
+			#version 300 es
+			void main() {}
+		""
+		fragment ""
+			#version 300 es
+			void main() { vec4 v; }
+		""
+	end
+
+	case sampler3D
+		version 300 es
+		expect compile_fail
+		both ""
+			#version 300 es
+			uniform sampler3D samp;
+			void main() {}
+		""
+	end
+
+	case samplerCubeShadow
+		version 300 es
+		expect compile_fail
+		both ""
+			#version 300 es
+			uniform samplerCubeShadow samp;
+			void main() {}
+		""
+	end
+
+	case sampler2DShadow
+		version 300 es
+		expect compile_fail
+		both ""
+			#version 300 es
+			uniform sampler2DShadow samp;
+			void main() {}
+		""
+	end
+
+	case sampler2DArray
+		version 300 es
+		expect compile_fail
+		both ""
+			#version 300 es
+			uniform sampler2DArray samp;
+			void main() {}
+		""
+	end
+
+	case sampler2DArrayShadow
+		version 300 es
+		expect compile_fail
+		both ""
+			#version 300 es
+			uniform sampler2DArrayShadow samp;
+			void main() {}
+		""
+	end
+
+	case isampler2D
+		version 300 es
+		expect compile_fail
+		both ""
+			#version 300 es
+			uniform isampler2D samp;
+			void main() {}
+		""
+	end
+
+	case isampler3D
+		version 300 es
+		expect compile_fail
+		both ""
+			#version 300 es
+			uniform isampler3D samp;
+			void main() {}
+		""
+	end
+
+	case isamplerCube
+		version 300 es
+		expect compile_fail
+		both ""
+			#version 300 es
+			uniform isamplerCube samp;
+			void main() {}
+		""
+	end
+
+	case isampler2DArray
+		version 300 es
+		expect compile_fail
+		both ""
+			#version 300 es
+			uniform isampler2DArray samp;
+			void main() {}
+		""
+	end
+
+	case usampler2D
+		version 300 es
+		expect compile_fail
+		both ""
+			#version 300 es
+			uniform usampler2D samp;
+			void main() {}
+		""
+	end
+
+	case usampler3D
+		version 300 es
+		expect compile_fail
+		both ""
+			#version 300 es
+			uniform usampler3D samp;
+			void main() {}
+		""
+	end
+
+	case usamplerCube
+		version 300 es
+		expect compile_fail
+		both ""
+			#version 300 es
+			uniform usamplerCube samp;
+			void main() {}
+		""
+	end
+
+	case usampler2DArray
+		version 300 es
+		expect compile_fail
+		both ""
+			#version 300 es
+			uniform usampler2DArray samp;
+			void main() {}
+		""
+	end
+
+end # unspecified_precision