1cb93a386Sopenharmony_ciuniform half4 colorGreen;
2cb93a386Sopenharmony_ci
3cb93a386Sopenharmony_cistruct S {
4cb93a386Sopenharmony_ci    float f;
5cb93a386Sopenharmony_ci    float af[5];
6cb93a386Sopenharmony_ci    half4 h4;
7cb93a386Sopenharmony_ci    half4 ah4[5];
8cb93a386Sopenharmony_ci};
9cb93a386Sopenharmony_ci
10cb93a386Sopenharmony_cihalf4 globalVar;
11cb93a386Sopenharmony_ciS globalStruct;
12cb93a386Sopenharmony_ci
13cb93a386Sopenharmony_cihalf4 main(float2 coords) {
14cb93a386Sopenharmony_ci    /* assign to scalar */               int i; i = 0;
15cb93a386Sopenharmony_ci    /* assign to vector */               int4 i4; i4 = int4(1,2,3,4);
16cb93a386Sopenharmony_ci    /* assign to matrix */               float3x3 f3x3; f3x3 = float3x3(1,2,3,4,5,6,7,8,9);
17cb93a386Sopenharmony_ci    /* assign to swizzle */              half4 x; x.w = 0; x.yx = half2(0);
18cb93a386Sopenharmony_ci    /* assign to array of scalar */      int ai[1]; ai[0] = 0;
19cb93a386Sopenharmony_ci    /* assign to array of vector */      int4 ai4[1]; ai4[0] = int4(1,2,3,4);
20cb93a386Sopenharmony_ci    /* assign to array of matrix */      half3x3 ah2x4[1]; ah2x4[0] = half3x3(1,2,3,4,5,6,7,8,9);
21cb93a386Sopenharmony_ci    /* assign to array swizzle */        float4 af4[1]; af4[0].x = 0; af4[0].ywxz = float4(1);
22cb93a386Sopenharmony_ci
23cb93a386Sopenharmony_ci    /* assign to struct variable */      S s; s.f = 0;
24cb93a386Sopenharmony_ci    /* assign to struct array */         s.af[1] = 0;
25cb93a386Sopenharmony_ci    /* assign to struct swizzle */       s.h4.zxy = half3(9);
26cb93a386Sopenharmony_ci    /* assign to struct array swizzle */ s.ah4[2].yw = half2(5);
27cb93a386Sopenharmony_ci
28cb93a386Sopenharmony_ci    /* assign to global var */           globalVar = half4(0);
29cb93a386Sopenharmony_ci    /* assign to global struct */        globalStruct.f = 0;
30cb93a386Sopenharmony_ci
31cb93a386Sopenharmony_ci// Not allowed in ES2
32cb93a386Sopenharmony_ci//  /* assign to array idx by lookup */  ai[0] = 0; ai[ai[0]] = 0;
33cb93a386Sopenharmony_ci
34cb93a386Sopenharmony_ci// Not allowed natively in GLSL, but SkSL will turn these into valid GLSL expressions.
35cb93a386Sopenharmony_ci    /* assign to folded ternary */       half l, r; (true ? l : r) = 0;
36cb93a386Sopenharmony_ci    /* assign to unary plus */           +ai[0] += +ai4[0][0];
37cb93a386Sopenharmony_ci    /* assign to struct unary plus */    +s.f = 1; +s.af[0] = 2;
38cb93a386Sopenharmony_ci                                         +s.h4 = half4(1); +s.ah4[0] = half4(2);
39cb93a386Sopenharmony_ci
40cb93a386Sopenharmony_ci    // Keep these variables alive
41cb93a386Sopenharmony_ci    af4[0] *= float(ah2x4[0][0][0]);
42cb93a386Sopenharmony_ci    i4.y *= i;
43cb93a386Sopenharmony_ci    x.y *= l;
44cb93a386Sopenharmony_ci    s.f *= l;
45cb93a386Sopenharmony_ci
46cb93a386Sopenharmony_ci    return colorGreen;
47cb93a386Sopenharmony_ci}
48