GLES2/3: error on declarations with unspecified precision
authorKai Ninomiya <kainino@chromium.org>
Wed, 31 Jan 2018 23:42:43 +0000 (15:42 -0800)
committerKai Ninomiya <kainino@chromium.org>
Thu, 1 Feb 2018 02:53:13 +0000 (18:53 -0800)
As specified:
  The fragment language has no default precision qualifier for floating
  point types. Hence for float, floating point vector and matrix
  variable declarations, either the declaration must include a precision
  qualifier or the default float precision must have been previously
  declared.
[GLSL ES 1.00 r17, section 4.5.3 (p36)]
[GLSL ES 3.00 r6, section 4.5.4 (p56)]
  Similarly, there is no default precision qualifier for the following
  sampler types in either the vertex or fragment language: (...)
[GLSL ES 3.00 r6, section 4.5.4 (p56)]

New tests:
  dEQP-GLES2.functional.shaders.declarations.unspecified_precision.*
  dEQP-GLES3.functional.shaders.declarations.unspecified_precision.*
Components: AOSP

Change-Id: Ic649556c73c83ba5f31125d25baf4c1c44fcf93f

android/cts/master/gles2-master.txt
android/cts/master/gles3-master.txt
data/gles2/shaders/declarations.test
data/gles3/shaders/declarations.test

index e2a1e66..7d783c9 100644 (file)
@@ -1115,6 +1115,11 @@ dEQP-GLES2.functional.shaders.declarations.invalid_declarations.uniform_in_verte
 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
index c4c4dec..903b34b 100644 (file)
@@ -2832,6 +2832,37 @@ dEQP-GLES3.functional.shaders.declarations.invalid_declarations.uniform_block_ar
 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
index 4dfb0a4..80c513f 100644 (file)
@@ -138,3 +138,63 @@ group invalid_declarations "Invalid declarations"
        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
index 86f98d9..22945c8 100644 (file)
@@ -589,3 +589,208 @@ group invalid_declarations "Invalid declarations"
        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