1group trivial "Trivial expressions" 2 3 case float 4 values { output float out0 = 5.0; } 5 both "" 6 7 precision highp float; 8 ${DECLARATIONS} 9 10 void main() 11 { 12 const float a = 5.0; 13 out0 = a; 14 ${OUTPUT} 15 } 16 "" 17 end 18 19 case int 20 values { output int out0 = 5; } 21 both "" 22 precision highp float; 23 ${DECLARATIONS} 24 25 void main() 26 { 27 const int a = 5; 28 out0 = a; 29 ${OUTPUT} 30 } 31 "" 32 end 33 34 case bool 35 values { output bool out0 = true; } 36 both "" 37 precision highp float; 38 ${DECLARATIONS} 39 40 void main() 41 { 42 const bool a = true; 43 out0 = a; 44 ${OUTPUT} 45 } 46 "" 47 end 48 49 case cast 50 values { output float out0 = 1.0; } 51 both "" 52 precision highp float; 53 ${DECLARATIONS} 54 55 void main() 56 { 57 const float a = float(int(bool(true))); 58 out0 = a; 59 ${OUTPUT} 60 } 61 "" 62 end 63 64end # trivial 65 66group operators "Operators" 67 68 case math_float 69 values { output float out0 = 2.19; } 70 both "" 71 precision highp float; 72 ${DECLARATIONS} 73 74 void main() 75 { 76 const float a = 6.0/3.5 + 1.8*2.6 - 4.2; 77 out0 = a; 78 ${OUTPUT} 79 } 80 "" 81 end 82 83 case math_vec 84 values { output float out0 = 15.0; } 85 both "" 86 precision highp float; 87 ${DECLARATIONS} 88 89 void main() 90 { 91 const vec3 a = (vec4(1.0, 2.0, 3.0, 4.0).zyx * vec3(1.0, 1.5, 3.0).xyz).xzy + (vec2(5.0)/vec2(2.5)).xxy; 92 out0 = a.x + a.y + a.z; 93 ${OUTPUT} 94 } 95 "" 96 end 97 98 case math_int 99 values { output int out0 = 7; } 100 both "" 101 precision highp int; 102 ${DECLARATIONS} 103 104 void main() 105 { 106 const int a = 5-1 + 2*3 - 9/3; 107 out0 = a; 108 ${OUTPUT} 109 } 110 "" 111 end 112 113 case math_ivec 114 values { output int out0 = 21; } 115 both "" 116 precision highp int; 117 ${DECLARATIONS} 118 119 void main() 120 { 121 const ivec3 a = ivec2(5-1, 4).xxy + ivec4(1*3, 9/3, 1+2, 8/4).xyz; 122 out0 = a.x + a.y + a.z; 123 ${OUTPUT} 124 } 125 "" 126 end 127 128 case math_mat 129 values { output float out0 = 8.0; } 130 both "" 131 precision highp float; 132 ${DECLARATIONS} 133 134 void main() 135 { 136 const mat3 a = mat3(3.0) * mat3(4.0); 137 const mat4 b = mat4(a[1][1])*2.0; 138 const mat2 c = mat2(b[0][0]) / 3.0; 139 out0 = c[0][0]+c[1][0]; 140 ${OUTPUT} 141 } 142 "" 143 end 144 145 case logical 146 values { output bool out0 = true; } 147 both "" 148 precision highp int; 149 ${DECLARATIONS} 150 151 void main() 152 { 153 const bool a = (!false || false) && (true ^^ false); 154 out0 = a; 155 ${OUTPUT} 156 } 157 "" 158 end 159 160 case compare 161 values { output bool out0 = true; } 162 both "" 163 precision highp int; 164 ${DECLARATIONS} 165 166 void main() 167 { 168 const bool a = (false == false) && (true != false) && (1 < 2) && (3 <= 3) && ((1 > 1) != (1 >= 1)); 169 out0 = a; 170 ${OUTPUT} 171 } 172 "" 173 end 174 175 case selection 176 values { output float out0 = 5.3; } 177 both "" 178 precision highp float; 179 ${DECLARATIONS} 180 181 void main() 182 { 183 const float a = false ? 0.0 : (true ? 5.3 : 1.0); 184 out0 = a; 185 ${OUTPUT} 186 } 187 "" 188 end 189 190end # operators 191 192group complex_types "Arrays, structs & nested calls" 193 194 case struct 195 values { output float out0 = 260.922; } 196 both "" 197 precision highp float; 198 ${DECLARATIONS} 199 200 struct S 201 { 202 vec4 a; 203 int b; 204 }; 205 206 void main() 207 { 208 const S s = S(vec4(1.5), 123); 209 out0 = length(s.a.xy)*float(s.b); 210 ${OUTPUT} 211 } 212 "" 213 end 214 215 case nested_struct 216 values { output float out0 = 965.9; } 217 both "" 218 precision highp float; 219 ${DECLARATIONS} 220 221 struct S 222 { 223 vec4 v; 224 int i; 225 }; 226 227 struct T 228 { 229 S s; 230 bool b; 231 int i; 232 }; 233 234 struct U 235 { 236 S s; 237 T t; 238 }; 239 240 void main() 241 { 242 const S s = S(vec4(1.5), 123); 243 const T t = T(s, false, 3); 244 const U u = U(s, t); 245 const U v = U(S(vec4(1.3), 4), T(S(vec4(2.0), 5), true, 6)); 246 out0 = float(u.s.i*v.t.i + v.t.s.i)*v.s.v.x; // float(123*6 + 5)*1.3 247 ${OUTPUT} 248 } 249 "" 250 end 251 252 case array 253 values 254 { 255 input float in0 = [ 0.0 | 1.0]; 256 output float out0 = [0.0 | 1.0]; 257 } 258 both "" 259 precision highp float; 260 ${DECLARATIONS} 261 262 void main() 263 { 264 float a[int(max(-1.0, 2.0))]; 265 a[0] = -1.0; 266 a[1] = in0; 267 out0 = a[int(min(1.0, 2.0))]; 268 ${OUTPUT} 269 } 270 "" 271 end 272 273 case nested_builtin_funcs 274 values { output float out0 = 3.05; } 275 both "" 276 precision highp float; 277 ${DECLARATIONS} 278 279 void main() 280 { 281 const float a = sqrt( atan(sin(1.5)/cos(1.5)) /*1.5*/ * log2(exp2(log(exp(6.2) + 0.1)) + 0.1) /*~6.2*/); 282 out0 = a; 283 ${OUTPUT} 284 } 285 "" 286 end 287 288end # complex_types 289