| struct S { |
| int before; |
| matrix<float16_t, 2, 3> m; |
| int after; |
| }; |
| |
| |
| cbuffer cbuffer_u : register(b0) { |
| uint4 u[32]; |
| }; |
| RWByteAddressBuffer s : register(u1); |
| vector<float16_t, 4> tint_bitcast_to_f16(uint4 src) { |
| uint4 v = src; |
| uint4 mask = (65535u).xxxx; |
| uint4 shift = (16u).xxxx; |
| float4 t_low = f16tof32((v & mask)); |
| float4 t_high = f16tof32(((v >> shift) & mask)); |
| float16_t v_1 = float16_t(t_low.x); |
| float16_t v_2 = float16_t(t_high.x); |
| float16_t v_3 = float16_t(t_low.y); |
| return vector<float16_t, 4>(v_1, v_2, v_3, float16_t(t_high.y)); |
| } |
| |
| void v_4(uint offset, matrix<float16_t, 2, 3> obj) { |
| s.Store<vector<float16_t, 3> >((offset + 0u), obj[0u]); |
| s.Store<vector<float16_t, 3> >((offset + 8u), obj[1u]); |
| } |
| |
| matrix<float16_t, 2, 3> v_5(uint start_byte_offset) { |
| vector<float16_t, 3> v_6 = tint_bitcast_to_f16(u[(start_byte_offset / 16u)]).xyz; |
| return matrix<float16_t, 2, 3>(v_6, tint_bitcast_to_f16(u[((8u + start_byte_offset) / 16u)]).xyz); |
| } |
| |
| void v_7(uint offset, S obj) { |
| s.Store((offset + 0u), asuint(obj.before)); |
| v_4((offset + 8u), obj.m); |
| s.Store((offset + 64u), asuint(obj.after)); |
| } |
| |
| S v_8(uint start_byte_offset) { |
| int v_9 = asint(u[(start_byte_offset / 16u)][((start_byte_offset % 16u) / 4u)]); |
| matrix<float16_t, 2, 3> v_10 = v_5((8u + start_byte_offset)); |
| S v_11 = {v_9, v_10, asint(u[((64u + start_byte_offset) / 16u)][(((64u + start_byte_offset) % 16u) / 4u)])}; |
| return v_11; |
| } |
| |
| void v_12(uint offset, S obj[4]) { |
| { |
| uint v_13 = 0u; |
| v_13 = 0u; |
| while(true) { |
| uint v_14 = v_13; |
| if ((v_14 >= 4u)) { |
| break; |
| } |
| S v_15 = obj[v_14]; |
| v_7((offset + (v_14 * 128u)), v_15); |
| { |
| v_13 = (v_14 + 1u); |
| } |
| continue; |
| } |
| } |
| } |
| |
| typedef S ary_ret[4]; |
| ary_ret v_16(uint start_byte_offset) { |
| S a[4] = (S[4])0; |
| { |
| uint v_17 = 0u; |
| v_17 = 0u; |
| while(true) { |
| uint v_18 = v_17; |
| if ((v_18 >= 4u)) { |
| break; |
| } |
| S v_19 = v_8((start_byte_offset + (v_18 * 128u))); |
| a[v_18] = v_19; |
| { |
| v_17 = (v_18 + 1u); |
| } |
| continue; |
| } |
| } |
| S v_20[4] = a; |
| return v_20; |
| } |
| |
| [numthreads(1, 1, 1)] |
| void f() { |
| S v_21[4] = v_16(0u); |
| v_12(0u, v_21); |
| S v_22 = v_8(256u); |
| v_7(128u, v_22); |
| v_4(392u, v_5(264u)); |
| s.Store<vector<float16_t, 3> >(136u, tint_bitcast_to_f16(u[1u]).xyz.zxy); |
| } |
| |