xref: /aosp_15_r20/external/skia/resources/sksl/shared/Assignment.sksl (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Workeruniform half4 colorGreen;
2*c8dee2aaSAndroid Build Coastguard Worker
3*c8dee2aaSAndroid Build Coastguard Workerstruct S {
4*c8dee2aaSAndroid Build Coastguard Worker    float f;
5*c8dee2aaSAndroid Build Coastguard Worker    float af[5];
6*c8dee2aaSAndroid Build Coastguard Worker    half4 h4;
7*c8dee2aaSAndroid Build Coastguard Worker    half4 ah4[5];
8*c8dee2aaSAndroid Build Coastguard Worker};
9*c8dee2aaSAndroid Build Coastguard Worker
10*c8dee2aaSAndroid Build Coastguard Workerhalf4 globalVar;
11*c8dee2aaSAndroid Build Coastguard WorkerS globalStruct;
12*c8dee2aaSAndroid Build Coastguard Worker
13*c8dee2aaSAndroid Build Coastguard Workernoinline void keepAlive(inout half h) {}
14*c8dee2aaSAndroid Build Coastguard Workernoinline void keepAlive(inout float f) {}
15*c8dee2aaSAndroid Build Coastguard Workernoinline void keepAlive(inout int i) {}
16*c8dee2aaSAndroid Build Coastguard Worker
17*c8dee2aaSAndroid Build Coastguard Workervoid assignToFunctionParameter(int x, inout float y) {
18*c8dee2aaSAndroid Build Coastguard Worker    x = 1;
19*c8dee2aaSAndroid Build Coastguard Worker    y = 1;
20*c8dee2aaSAndroid Build Coastguard Worker}
21*c8dee2aaSAndroid Build Coastguard Worker
22*c8dee2aaSAndroid Build Coastguard Workerhalf4 main(float2 coords) {
23*c8dee2aaSAndroid Build Coastguard Worker    /* assign to scalar */               int i; i = 0;
24*c8dee2aaSAndroid Build Coastguard Worker    /* assign to vector */               int4 i4; i4 = int4(1,2,3,4);
25*c8dee2aaSAndroid Build Coastguard Worker    /* assign to matrix */               float3x3 f3x3; f3x3 = float3x3(1,2,3,4,5,6,7,8,9);
26*c8dee2aaSAndroid Build Coastguard Worker    /* assign to swizzle */              half4 x; x.w = 0; x.yx = half2(0);
27*c8dee2aaSAndroid Build Coastguard Worker    /* assign to array of scalar */      int ai[1]; ai[0] = 0;
28*c8dee2aaSAndroid Build Coastguard Worker    /* assign to array of vector */      int4 ai4[1]; ai4[0] = int4(1,2,3,4);
29*c8dee2aaSAndroid Build Coastguard Worker    /* assign to array of matrix */      half3x3 ah3x3[1]; ah3x3[0] = half3x3(1,2,3,4,5,6,7,8,9);
30*c8dee2aaSAndroid Build Coastguard Worker    /* assign to array swizzle */        float4 af4[1]; af4[0].x = 0; af4[0].ywxz = float4(1);
31*c8dee2aaSAndroid Build Coastguard Worker
32*c8dee2aaSAndroid Build Coastguard Worker    /* assign to struct variable */      S s; s.f = 0;
33*c8dee2aaSAndroid Build Coastguard Worker    /* assign to struct array */         s.af[1] = 0;
34*c8dee2aaSAndroid Build Coastguard Worker    /* assign to struct swizzle */       s.h4.zxy = half3(9);
35*c8dee2aaSAndroid Build Coastguard Worker    /* assign to struct array swizzle */ s.ah4[2].yw = half2(5);
36*c8dee2aaSAndroid Build Coastguard Worker
37*c8dee2aaSAndroid Build Coastguard Worker    /* assign to global var */           globalVar = half4(0);
38*c8dee2aaSAndroid Build Coastguard Worker    /* assign to global struct */        globalStruct.f = 0;
39*c8dee2aaSAndroid Build Coastguard Worker
40*c8dee2aaSAndroid Build Coastguard Worker    /* assign to function parameter */   assignToFunctionParameter(0, f3x3[0][0]);
41*c8dee2aaSAndroid Build Coastguard Worker
42*c8dee2aaSAndroid Build Coastguard Worker// Not allowed in ES2
43*c8dee2aaSAndroid Build Coastguard Worker//  /* assign to array idx by lookup */  ai[0] = 0; ai[ai[0]] = 0;
44*c8dee2aaSAndroid Build Coastguard Worker
45*c8dee2aaSAndroid Build Coastguard Worker// Not allowed natively in GLSL, but SkSL will turn these into valid GLSL expressions.
46*c8dee2aaSAndroid Build Coastguard Worker    /* assign to folded ternary */       half l, r; (true ? l : r) = 0;
47*c8dee2aaSAndroid Build Coastguard Worker    /* assign to unary plus */           +ai[0] += +ai4[0][0];
48*c8dee2aaSAndroid Build Coastguard Worker    /* assign to struct unary plus */    +s.f = 1; +s.af[0] = 2;
49*c8dee2aaSAndroid Build Coastguard Worker                                         +s.h4 = half4(1); +s.ah4[0] = half4(2);
50*c8dee2aaSAndroid Build Coastguard Worker
51*c8dee2aaSAndroid Build Coastguard Worker    /* repeat assignment */              float repeat; repeat = repeat = 1.0;
52*c8dee2aaSAndroid Build Coastguard Worker
53*c8dee2aaSAndroid Build Coastguard Worker    keepAlive(af4[0][0]);
54*c8dee2aaSAndroid Build Coastguard Worker    keepAlive(ah3x3[0][0][0]);
55*c8dee2aaSAndroid Build Coastguard Worker    keepAlive(i);
56*c8dee2aaSAndroid Build Coastguard Worker    keepAlive(i4.y);
57*c8dee2aaSAndroid Build Coastguard Worker    keepAlive(ai[0]);
58*c8dee2aaSAndroid Build Coastguard Worker    keepAlive(ai4[0][0]);
59*c8dee2aaSAndroid Build Coastguard Worker    keepAlive(x.y);
60*c8dee2aaSAndroid Build Coastguard Worker    keepAlive(s.f);
61*c8dee2aaSAndroid Build Coastguard Worker    keepAlive(l);
62*c8dee2aaSAndroid Build Coastguard Worker    keepAlive(f3x3[0][0]);
63*c8dee2aaSAndroid Build Coastguard Worker    keepAlive(repeat);
64*c8dee2aaSAndroid Build Coastguard Worker
65*c8dee2aaSAndroid Build Coastguard Worker    return colorGreen;
66*c8dee2aaSAndroid Build Coastguard Worker}
67