Home | History | Annotate | Download | only in shaders
      1 group if "If Statements"
      2 
      3 	case single_statement
      4 		values
      5 		{
      6 			input float in0 = [ 0.0 | 1.0 | 2.0 ];
      7 			output float out0 = [ 0.0 | 1.0 | 1.0 ];
      8 		}
      9 
     10 		both ""
     11 			precision mediump float;
     12 			${DECLARATIONS}
     13 			void main()
     14 			{
     15 				out0 = 0.0;
     16 				if (in0 >= 1.0)
     17 					out0 = 1.0;
     18 				${OUTPUT}
     19 			}
     20 		""
     21 	end
     22 
     23 	case compound_statement
     24 		values
     25 		{
     26 			input float in0 = [ 0.0 | 1.0 | 2.0 ];
     27 			output float out0 = [ 0.0 | 1.0 | 1.0 ];
     28 			output float out1 = [ 1.0 | 0.0 | 0.0 ];
     29 		}
     30 
     31 		both ""
     32 			precision mediump float;
     33 			${DECLARATIONS}
     34 			void main()
     35 			{
     36 				out0 = 0.0;
     37 				out1 = 1.0;
     38 				if (in0 >= 1.0)
     39 				{
     40 					out0 = 1.0;
     41 					out1 = 0.0;
     42 				}
     43 				${OUTPUT}
     44 			}
     45 		""
     46 	end
     47 
     48 	case sequence_statements
     49 		values
     50 		{
     51 			input float in0 = [ 0.0 | 1.0 | 2.0 ];
     52 			output float out0 = [ 0.0 | 1.0 | 1.0 ];
     53 			output float out1 = [ 1.0 | 0.0 | 0.0 ];
     54 		}
     55 
     56 		both ""
     57 			precision mediump float;
     58 			${DECLARATIONS}
     59 			void main()
     60 			{
     61 				out0 = 0.0;
     62 				out1 = 1.0;
     63 				if (in0 >= 1.0)
     64 					out0 = 1.0, out1 = 0.0;
     65 				${OUTPUT}
     66 			}
     67 		""
     68 	end
     69 
     70 	case sequence_condition
     71 		values
     72 		{
     73 			input float in0 = [ 0.0 | 1.0 | 2.0 ];
     74 			output float out0 = [ 0.0 | 1.0 | 1.0 ];
     75 			output float out1 = [ 1.0 | 0.0 | 0.0 ];
     76 		}
     77 
     78 		both ""
     79 			precision mediump float;
     80 			${DECLARATIONS}
     81 			void main()
     82 			{
     83 				out0 = 0.0;
     84 				out1 = 1.0;
     85 				if (false, in0 >= 1.0)
     86 					out0 = 1.0, out1 = 0.0;
     87 				${OUTPUT}
     88 			}
     89 		""
     90 	end
     91 
     92 	case complex_condition
     93 		values
     94 		{
     95 			input float in0 = [ 0.0 | 1.0 | 2.0 ];
     96 			output float out0 = [ 0.0 | 1.0 | 1.0 ];
     97 			output float out1 = [ 1.0 | 0.0 | 0.0 ];
     98 		}
     99 
    100 		both ""
    101 			precision mediump float;
    102 			${DECLARATIONS}
    103 			void main()
    104 			{
    105 				out0 = 0.0;
    106 				out1 = 1.0;
    107 				if (false || (in0 >= 1.0) && (in0 - 2.0*in0 < 0.0))
    108 					out0 = 1.0, out1 = 0.0;
    109 				${OUTPUT}
    110 			}
    111 		""
    112 	end
    113 
    114 	case if_else
    115 		values
    116 		{
    117 			input float in0 = [ 0.0 | 1.0 | 2.0 ];
    118 			output float out0 = [ 0.0 | 1.0 | 1.0 ];
    119 		}
    120 
    121 		both ""
    122 			precision mediump float;
    123 			${DECLARATIONS}
    124 			void main()
    125 			{
    126 				if (in0 >= 1.0)
    127 					out0 = 1.0;
    128 				else
    129 					out0 = 0.0;
    130 				${OUTPUT}
    131 			}
    132 		""
    133 	end
    134 
    135 	case if_elseif
    136 		values
    137 		{
    138 			input float in0 = [ 0.0 | 1.0 | 2.0 ];
    139 			output float out0 = [ 0.0 | 1.0 | 2.0 ];
    140 		}
    141 
    142 		both ""
    143 			precision mediump float;
    144 			${DECLARATIONS}
    145 			void main()
    146 			{
    147 				out0 = 0.0;
    148 				if (in0 >= 2.0)
    149 					out0 = 2.0;
    150 				else if (in0 >= 1.0)
    151 					out0 = 1.0;
    152 				${OUTPUT}
    153 			}
    154 		""
    155 	end
    156 
    157 	case if_elseif_else
    158 		values
    159 		{
    160 			input float in0 = [ 0.0 | 1.0 | 2.0 ];
    161 			output float out0 = [ 0.0 | 1.0 | 2.0 ];
    162 		}
    163 
    164 		both ""
    165 			precision mediump float;
    166 			${DECLARATIONS}
    167 			void main()
    168 			{
    169 				if (in0 >= 2.0)
    170 					out0 = 2.0;
    171 				else if (in0 >= 1.0)
    172 					out0 = 1.0;
    173 				else
    174 					out0 = 0.0;
    175 				${OUTPUT}
    176 			}
    177 		""
    178 	end
    179 
    180 	case mixed_if_elseif_else
    181 		values
    182 		{
    183 			input float in0 = [ 0.0 | 1.0 | 2.0 ];
    184 			output float out0 = [ 0.0 | 1.0 | 2.0 ];
    185 		}
    186 
    187 		both ""
    188 			precision mediump float;
    189 			${DECLARATIONS}
    190 			void main()
    191 			{
    192 				if (in0 >= 2.0)
    193 				{
    194 					out0 = 2.0;
    195 				}
    196 				else if (in0 >= 1.0)
    197 					out0 = 2.0, out0 = 1.0;
    198 				else
    199 					out0 = 0.0;
    200 				${OUTPUT}
    201 			}
    202 		""
    203 	end
    204 
    205 end # if
    206 
    207 group invalid_if "Invalid If Conditionals"
    208 
    209 	case missing_parenthesis
    210 		expect compile_fail
    211 		both ""
    212 			precision mediump float;
    213 			void main()
    214 			{
    215 				if true
    216 					${POSITION_FRAG_COLOR} = vec4(1.0);
    217 			}
    218 		""
    219 	end
    220 
    221 	case unclosed_parenthesis
    222 		expect compile_fail
    223 		both ""
    224 			precision mediump float;
    225 			void main()
    226 			{
    227 				if (true
    228 					${POSITION_FRAG_COLOR} = vec4(1.0);
    229 			}
    230 		""
    231 	end
    232 
    233 	case int_condition
    234 		expect compile_fail
    235 		both ""
    236 			precision mediump float;
    237 			void main()
    238 			{
    239 				if (5)
    240 					${POSITION_FRAG_COLOR} = vec4(1.0);
    241 			}
    242 		""
    243 	end
    244 
    245 	case int_zero_condition
    246 		expect compile_fail
    247 		both ""
    248 			precision mediump float;
    249 			void main()
    250 			{
    251 				if (0)
    252 					${POSITION_FRAG_COLOR} = vec4(1.0);
    253 			}
    254 		""
    255 	end
    256 
    257 	case int_one_condition
    258 		expect compile_fail
    259 		both ""
    260 			precision mediump float;
    261 			void main()
    262 			{
    263 				if (1)
    264 					${POSITION_FRAG_COLOR} = vec4(1.0);
    265 			}
    266 		""
    267 	end
    268 
    269 	case int_uniform_condition
    270 		expect compile_fail
    271 
    272 		both ""
    273 			precision mediump float;
    274 			precision mediump int;
    275 			uniform int u0;
    276 			void main()
    277 			{
    278 				if (u0)
    279 					${POSITION_FRAG_COLOR} = vec4(1.0);
    280 			}
    281 		""
    282 	end
    283 
    284 	case float_condition
    285 		expect compile_fail
    286 		both ""
    287 			precision mediump float;
    288 			void main()
    289 			{
    290 				if (5.0)
    291 					${POSITION_FRAG_COLOR} = vec4(1.0);
    292 			}
    293 		""
    294 	end
    295 
    296 	case float_zero_condition
    297 		expect compile_fail
    298 		both ""
    299 			precision mediump float;
    300 			void main()
    301 			{
    302 				if (0.0)
    303 					${POSITION_FRAG_COLOR} = vec4(1.0);
    304 			}
    305 		""
    306 	end
    307 
    308 	case float_one_condition
    309 		expect compile_fail
    310 		both ""
    311 			precision mediump float;
    312 			void main()
    313 			{
    314 				if (1.0)
    315 					${POSITION_FRAG_COLOR} = vec4(1.0);
    316 			}
    317 		""
    318 	end
    319 
    320 	case sampler_condition
    321 		expect compile_fail
    322 		both ""
    323 			precision mediump float;
    324 			uniform sampler2D s0;
    325 			void main()
    326 			{
    327 				if (s0)
    328 					${POSITION_FRAG_COLOR} = vec4(1.0);
    329 			}
    330 		""
    331 	end
    332 
    333 end # invalid_if
    334