| struct S { |
| uint3 a; |
| uint b; |
| uint3 c[4]; |
| }; |
| |
| |
| cbuffer cbuffer_ubuffer : register(b0) { |
| uint4 ubuffer[5]; |
| }; |
| RWByteAddressBuffer sbuffer : register(u1); |
| groupshared S wbuffer; |
| void v(uint offset, uint3 obj[4]) { |
| { |
| uint v_1 = 0u; |
| v_1 = 0u; |
| while(true) { |
| uint v_2 = v_1; |
| if ((v_2 >= 4u)) { |
| break; |
| } |
| sbuffer.Store3((offset + (v_2 * 16u)), obj[v_2]); |
| { |
| v_1 = (v_2 + 1u); |
| } |
| continue; |
| } |
| } |
| } |
| |
| void v_3(uint offset, S obj) { |
| sbuffer.Store3((offset + 0u), obj.a); |
| sbuffer.Store((offset + 12u), obj.b); |
| uint3 v_4[4] = obj.c; |
| v((offset + 16u), v_4); |
| } |
| |
| typedef uint3 ary_ret[4]; |
| ary_ret v_5(uint offset) { |
| uint3 a[4] = (uint3[4])0; |
| { |
| uint v_6 = 0u; |
| v_6 = 0u; |
| while(true) { |
| uint v_7 = v_6; |
| if ((v_7 >= 4u)) { |
| break; |
| } |
| a[v_7] = sbuffer.Load3((offset + (v_7 * 16u))); |
| { |
| v_6 = (v_7 + 1u); |
| } |
| continue; |
| } |
| } |
| uint3 v_8[4] = a; |
| return v_8; |
| } |
| |
| S v_9(uint offset) { |
| uint3 v_10 = sbuffer.Load3((offset + 0u)); |
| uint v_11 = sbuffer.Load((offset + 12u)); |
| uint3 v_12[4] = v_5((offset + 16u)); |
| S v_13 = {v_10, v_11, v_12}; |
| return v_13; |
| } |
| |
| typedef uint3 ary_ret_1[4]; |
| ary_ret_1 v_14(uint start_byte_offset) { |
| uint3 a[4] = (uint3[4])0; |
| { |
| uint v_15 = 0u; |
| v_15 = 0u; |
| while(true) { |
| uint v_16 = v_15; |
| if ((v_16 >= 4u)) { |
| break; |
| } |
| a[v_16] = ubuffer[((start_byte_offset + (v_16 * 16u)) / 16u)].xyz; |
| { |
| v_15 = (v_16 + 1u); |
| } |
| continue; |
| } |
| } |
| uint3 v_17[4] = a; |
| return v_17; |
| } |
| |
| S v_18(uint start_byte_offset) { |
| uint3 v_19 = ubuffer[(start_byte_offset / 16u)].xyz; |
| uint v_20 = ubuffer[((12u + start_byte_offset) / 16u)][(((12u + start_byte_offset) % 16u) / 4u)]; |
| uint3 v_21[4] = v_14((16u + start_byte_offset)); |
| S v_22 = {v_19, v_20, v_21}; |
| return v_22; |
| } |
| |
| void foo() { |
| S u = v_18(0u); |
| S s = v_9(0u); |
| S w = v_9(0u); |
| S v_23 = (S)0; |
| v_3(0u, v_23); |
| S v_24 = (S)0; |
| wbuffer = v_24; |
| } |
| |
| [numthreads(1, 1, 1)] |
| void unused_entry_point() { |
| } |
| |