| SKIP: FAILED |
| |
| <dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Tables = struct @align(4) { |
| edges:array<u32, 256> @offset(0) |
| tris:array<i32, 4096> @offset(1024) |
| } |
| |
| IsosurfaceVolume = struct @align(16) { |
| min:vec3<f32> @offset(0) |
| max:vec3<f32> @offset(16) |
| step:vec3<f32> @offset(32) |
| size:vec3<u32> @offset(48) |
| threshold:f32 @offset(60) |
| values:array<f32> @offset(64) |
| } |
| |
| PositionBuffer = struct @align(4) { |
| values:array<f32> @offset(0) |
| } |
| |
| NormalBuffer = struct @align(4) { |
| values:array<f32> @offset(0) |
| } |
| |
| IndexBuffer = struct @align(4) { |
| tris:array<u32> @offset(0) |
| } |
| |
| DrawIndirectArgs = struct @align(4) { |
| vc:u32 @offset(0) |
| vertexCount:atomic<u32> @offset(4) |
| firstVertex:u32 @offset(8) |
| firstInstance:u32 @offset(12) |
| indexCount:atomic<u32> @offset(16) |
| indexedInstanceCount:u32 @offset(20) |
| indexedFirstIndex:u32 @offset(24) |
| indexedBaseVertex:u32 @offset(28) |
| indexedFirstInstance:u32 @offset(32) |
| } |
| |
| %b1 = block { # root |
| %tables:ptr<storage, Tables, read> = var @binding_point(0, 0) |
| %volume:ptr<storage, IsosurfaceVolume, read_write> = var @binding_point(0, 1) |
| %positionsOut:ptr<storage, PositionBuffer, read_write> = var @binding_point(0, 2) |
| %normalsOut:ptr<storage, NormalBuffer, read_write> = var @binding_point(0, 3) |
| %indicesOut:ptr<storage, IndexBuffer, read_write> = var @binding_point(0, 4) |
| %drawOut:ptr<storage, DrawIndirectArgs, read_write> = var @binding_point(0, 5) |
| %positions:ptr<private, array<vec3<f32>, 12>, read_write> = var |
| %normals:ptr<private, array<vec3<f32>, 12>, read_write> = var |
| %indices:ptr<private, array<u32, 12>, read_write> = var |
| %cubeVerts:ptr<private, u32, read_write> = var, 0u |
| } |
| |
| %valueAt = func(%index:vec3<u32>):f32 -> %b2 { |
| %b2 = block { |
| %13:ptr<storage, vec3<u32>, read_write> = access %volume, 3u |
| %14:vec3<u32> = load %13 |
| %15:vec3<bool> = gte %index, %14 |
| %16:bool = any %15 |
| if %16 [t: %b3] { # if_1 |
| %b3 = block { # true |
| ret 0.0f |
| } |
| } |
| %17:u32 = access %index, 0u |
| %18:u32 = access %index, 1u |
| %19:ptr<storage, vec3<u32>, read_write> = access %volume, 3u |
| %20:u32 = load_vector_element %19, 0u |
| %21:u32 = mul %18, %20 |
| %22:u32 = add %17, %21 |
| %23:u32 = access %index, 2u |
| %24:ptr<storage, vec3<u32>, read_write> = access %volume, 3u |
| %25:u32 = load_vector_element %24, 0u |
| %26:u32 = mul %23, %25 |
| %27:ptr<storage, vec3<u32>, read_write> = access %volume, 3u |
| %28:u32 = load_vector_element %27, 1u |
| %29:u32 = mul %26, %28 |
| %valueIndex:u32 = add %22, %29 |
| %31:ptr<storage, f32, read_write> = access %volume, 5u, %valueIndex |
| %32:f32 = load %31 |
| ret %32 |
| } |
| } |
| %positionAt = func(%index_1:vec3<u32>):vec3<f32> -> %b4 { # %index_1: 'index' |
| %b4 = block { |
| %35:ptr<storage, vec3<f32>, read_write> = access %volume, 0u |
| %36:vec3<f32> = load %35 |
| %37:ptr<storage, vec3<f32>, read_write> = access %volume, 2u |
| %38:vec3<f32> = load %37 |
| %39:vec3<u32> = swizzle %index_1, xyz |
| %40:vec3<f32> = convert %39 |
| %41:vec3<f32> = mul %38, %40 |
| %42:vec3<f32> = add %36, %41 |
| ret %42 |
| } |
| } |
| %normalAt = func(%index_2:vec3<u32>):vec3<f32> -> %b5 { # %index_2: 'index' |
| %b5 = block { |
| %45:vec3<u32> = sub %index_2, vec3<u32>(1u, 0u, 0u) |
| %46:f32 = call %valueAt, %45 |
| %47:vec3<u32> = add %index_2, vec3<u32>(1u, 0u, 0u) |
| %48:f32 = call %valueAt, %47 |
| %49:f32 = sub %46, %48 |
| %50:vec3<u32> = sub %index_2, vec3<u32>(0u, 1u, 0u) |
| %51:f32 = call %valueAt, %50 |
| %52:vec3<u32> = add %index_2, vec3<u32>(0u, 1u, 0u) |
| %53:f32 = call %valueAt, %52 |
| %54:f32 = sub %51, %53 |
| %55:vec3<u32> = sub %index_2, vec3<u32>(0u, 0u, 1u) |
| %56:f32 = call %valueAt, %55 |
| %57:vec3<u32> = add %index_2, vec3<u32>(0u, 0u, 1u) |
| %58:f32 = call %valueAt, %57 |
| %59:f32 = sub %56, %58 |
| %60:vec3<f32> = construct %49, %54, %59 |
| ret %60 |
| } |
| } |
| %interpX = func(%index_3:u32, %i:vec3<u32>, %va:f32, %vb:f32):void -> %b6 { # %index_3: 'index' |
| %b6 = block { |
| %66:ptr<storage, f32, read_write> = access %volume, 4u |
| %67:f32 = load %66 |
| %68:f32 = sub %67, %va |
| %69:f32 = sub %vb, %va |
| %mu:f32 = div %68, %69 |
| %71:u32 = load %cubeVerts |
| %72:ptr<private, vec3<f32>, read_write> = access %positions, %71 |
| %73:vec3<f32> = call %positionAt, %i |
| %74:ptr<storage, vec3<f32>, read_write> = access %volume, 2u |
| %75:f32 = load_vector_element %74, 0u |
| %76:f32 = mul %75, %mu |
| %77:vec3<f32> = construct %76, 0.0f, 0.0f |
| %78:vec3<f32> = add %73, %77 |
| store %72, %78 |
| %na:vec3<f32> = call %normalAt, %i |
| %80:vec3<u32> = add %i, vec3<u32>(1u, 0u, 0u) |
| %nb:vec3<f32> = call %normalAt, %80 |
| %82:u32 = load %cubeVerts |
| %83:ptr<private, vec3<f32>, read_write> = access %normals, %82 |
| %84:vec3<f32> = construct %mu, %mu, %mu |
| %85:vec3<f32> = mix %na, %nb, %84 |
| store %83, %85 |
| %86:ptr<private, u32, read_write> = access %indices, %index_3 |
| %87:u32 = load %cubeVerts |
| store %86, %87 |
| %88:u32 = load %cubeVerts |
| %89:u32 = add %88, 1u |
| store %cubeVerts, %89 |
| ret |
| } |
| } |
| %interpY = func(%index_4:u32, %i_1:vec3<u32>, %va_1:f32, %vb_1:f32):void -> %b7 { # %index_4: 'index', %i_1: 'i', %va_1: 'va', %vb_1: 'vb' |
| %b7 = block { |
| %95:ptr<storage, f32, read_write> = access %volume, 4u |
| %96:f32 = load %95 |
| %97:f32 = sub %96, %va_1 |
| %98:f32 = sub %vb_1, %va_1 |
| %mu_1:f32 = div %97, %98 # %mu_1: 'mu' |
| %100:u32 = load %cubeVerts |
| %101:ptr<private, vec3<f32>, read_write> = access %positions, %100 |
| %102:vec3<f32> = call %positionAt, %i_1 |
| %103:ptr<storage, vec3<f32>, read_write> = access %volume, 2u |
| %104:f32 = load_vector_element %103, 1u |
| %105:f32 = mul %104, %mu_1 |
| %106:vec3<f32> = construct 0.0f, %105, 0.0f |
| %107:vec3<f32> = add %102, %106 |
| store %101, %107 |
| %na_1:vec3<f32> = call %normalAt, %i_1 # %na_1: 'na' |
| %109:vec3<u32> = add %i_1, vec3<u32>(0u, 1u, 0u) |
| %nb_1:vec3<f32> = call %normalAt, %109 # %nb_1: 'nb' |
| %111:u32 = load %cubeVerts |
| %112:ptr<private, vec3<f32>, read_write> = access %normals, %111 |
| %113:vec3<f32> = construct %mu_1, %mu_1, %mu_1 |
| %114:vec3<f32> = mix %na_1, %nb_1, %113 |
| store %112, %114 |
| %115:ptr<private, u32, read_write> = access %indices, %index_4 |
| %116:u32 = load %cubeVerts |
| store %115, %116 |
| %117:u32 = load %cubeVerts |
| %118:u32 = add %117, 1u |
| store %cubeVerts, %118 |
| ret |
| } |
| } |
| %interpZ = func(%index_5:u32, %i_2:vec3<u32>, %va_2:f32, %vb_2:f32):void -> %b8 { # %index_5: 'index', %i_2: 'i', %va_2: 'va', %vb_2: 'vb' |
| %b8 = block { |
| %124:ptr<storage, f32, read_write> = access %volume, 4u |
| %125:f32 = load %124 |
| %126:f32 = sub %125, %va_2 |
| %127:f32 = sub %vb_2, %va_2 |
| %mu_2:f32 = div %126, %127 # %mu_2: 'mu' |
| %129:u32 = load %cubeVerts |
| %130:ptr<private, vec3<f32>, read_write> = access %positions, %129 |
| %131:vec3<f32> = call %positionAt, %i_2 |
| %132:ptr<storage, vec3<f32>, read_write> = access %volume, 2u |
| %133:f32 = load_vector_element %132, 2u |
| %134:f32 = mul %133, %mu_2 |
| %135:vec3<f32> = construct 0.0f, 0.0f, %134 |
| %136:vec3<f32> = add %131, %135 |
| store %130, %136 |
| %na_2:vec3<f32> = call %normalAt, %i_2 # %na_2: 'na' |
| %138:vec3<u32> = add %i_2, vec3<u32>(0u, 0u, 1u) |
| %nb_2:vec3<f32> = call %normalAt, %138 # %nb_2: 'nb' |
| %140:u32 = load %cubeVerts |
| %141:ptr<private, vec3<f32>, read_write> = access %normals, %140 |
| %142:vec3<f32> = construct %mu_2, %mu_2, %mu_2 |
| %143:vec3<f32> = mix %na_2, %nb_2, %142 |
| store %141, %143 |
| %144:ptr<private, u32, read_write> = access %indices, %index_5 |
| %145:u32 = load %cubeVerts |
| store %144, %145 |
| %146:u32 = load %cubeVerts |
| %147:u32 = add %146, 1u |
| store %cubeVerts, %147 |
| ret |
| } |
| } |
| %computeMain = @compute @workgroup_size(4, 4, 4) func(%global_id:vec3<u32> [@global_invocation_id]):void -> %b9 { |
| %b9 = block { |
| %i0:vec3<u32> = let %global_id |
| %i1:vec3<u32> = add %global_id, vec3<u32>(1u, 0u, 0u) |
| %i2:vec3<u32> = add %global_id, vec3<u32>(1u, 1u, 0u) |
| %i3:vec3<u32> = add %global_id, vec3<u32>(0u, 1u, 0u) |
| %i4:vec3<u32> = add %global_id, vec3<u32>(0u, 0u, 1u) |
| %i5:vec3<u32> = add %global_id, vec3<u32>(1u, 0u, 1u) |
| %i6:vec3<u32> = add %global_id, vec3<u32>(1u) |
| %i7:vec3<u32> = add %global_id, vec3<u32>(0u, 1u, 1u) |
| %v0:f32 = call %valueAt, %i0 |
| %v1:f32 = call %valueAt, %i1 |
| %v2:f32 = call %valueAt, %i2 |
| %v3:f32 = call %valueAt, %i3 |
| %v4:f32 = call %valueAt, %i4 |
| %v5:f32 = call %valueAt, %i5 |
| %v6:f32 = call %valueAt, %i6 |
| %v7:f32 = call %valueAt, %i7 |
| %cubeIndex:ptr<function, u32, read_write> = var, 0u |
| %167:ptr<storage, f32, read_write> = access %volume, 4u |
| %168:f32 = load %167 |
| %169:bool = lt %v0, %168 |
| if %169 [t: %b10] { # if_2 |
| %b10 = block { # true |
| %170:u32 = load %cubeIndex |
| %171:u32 = or %170, 1u |
| store %cubeIndex, %171 |
| exit_if # if_2 |
| } |
| } |
| %172:ptr<storage, f32, read_write> = access %volume, 4u |
| %173:f32 = load %172 |
| %174:bool = lt %v1, %173 |
| if %174 [t: %b11] { # if_3 |
| %b11 = block { # true |
| %175:u32 = load %cubeIndex |
| %176:u32 = or %175, 2u |
| store %cubeIndex, %176 |
| exit_if # if_3 |
| } |
| } |
| %177:ptr<storage, f32, read_write> = access %volume, 4u |
| %178:f32 = load %177 |
| %179:bool = lt %v2, %178 |
| if %179 [t: %b12] { # if_4 |
| %b12 = block { # true |
| %180:u32 = load %cubeIndex |
| %181:u32 = or %180, 4u |
| store %cubeIndex, %181 |
| exit_if # if_4 |
| } |
| } |
| %182:ptr<storage, f32, read_write> = access %volume, 4u |
| %183:f32 = load %182 |
| %184:bool = lt %v3, %183 |
| if %184 [t: %b13] { # if_5 |
| %b13 = block { # true |
| %185:u32 = load %cubeIndex |
| %186:u32 = or %185, 8u |
| store %cubeIndex, %186 |
| exit_if # if_5 |
| } |
| } |
| %187:ptr<storage, f32, read_write> = access %volume, 4u |
| %188:f32 = load %187 |
| %189:bool = lt %v4, %188 |
| if %189 [t: %b14] { # if_6 |
| %b14 = block { # true |
| %190:u32 = load %cubeIndex |
| %191:u32 = or %190, 16u |
| store %cubeIndex, %191 |
| exit_if # if_6 |
| } |
| } |
| %192:ptr<storage, f32, read_write> = access %volume, 4u |
| %193:f32 = load %192 |
| %194:bool = lt %v5, %193 |
| if %194 [t: %b15] { # if_7 |
| %b15 = block { # true |
| %195:u32 = load %cubeIndex |
| %196:u32 = or %195, 32u |
| store %cubeIndex, %196 |
| exit_if # if_7 |
| } |
| } |
| %197:ptr<storage, f32, read_write> = access %volume, 4u |
| %198:f32 = load %197 |
| %199:bool = lt %v6, %198 |
| if %199 [t: %b16] { # if_8 |
| %b16 = block { # true |
| %200:u32 = load %cubeIndex |
| %201:u32 = or %200, 64u |
| store %cubeIndex, %201 |
| exit_if # if_8 |
| } |
| } |
| %202:ptr<storage, f32, read_write> = access %volume, 4u |
| %203:f32 = load %202 |
| %204:bool = lt %v7, %203 |
| if %204 [t: %b17] { # if_9 |
| %b17 = block { # true |
| %205:u32 = load %cubeIndex |
| %206:u32 = or %205, 128u |
| store %cubeIndex, %206 |
| exit_if # if_9 |
| } |
| } |
| %207:u32 = load %cubeIndex |
| %208:ptr<storage, u32, read> = access %tables, 0u, %207 |
| %edges:u32 = load %208 |
| %210:u32 = and %edges, 1u |
| %211:bool = neq %210, 0u |
| if %211 [t: %b18] { # if_10 |
| %b18 = block { # true |
| %212:void = call %interpX, 0u, %i0, %v0, %v1 |
| exit_if # if_10 |
| } |
| } |
| %213:u32 = and %edges, 2u |
| %214:bool = neq %213, 0u |
| if %214 [t: %b19] { # if_11 |
| %b19 = block { # true |
| %215:void = call %interpY, 1u, %i1, %v1, %v2 |
| exit_if # if_11 |
| } |
| } |
| %216:u32 = and %edges, 4u |
| %217:bool = neq %216, 0u |
| if %217 [t: %b20] { # if_12 |
| %b20 = block { # true |
| %218:void = call %interpX, 2u, %i3, %v3, %v2 |
| exit_if # if_12 |
| } |
| } |
| %219:u32 = and %edges, 8u |
| %220:bool = neq %219, 0u |
| if %220 [t: %b21] { # if_13 |
| %b21 = block { # true |
| %221:void = call %interpY, 3u, %i0, %v0, %v3 |
| exit_if # if_13 |
| } |
| } |
| %222:u32 = and %edges, 16u |
| %223:bool = neq %222, 0u |
| if %223 [t: %b22] { # if_14 |
| %b22 = block { # true |
| %224:void = call %interpX, 4u, %i4, %v4, %v5 |
| exit_if # if_14 |
| } |
| } |
| %225:u32 = and %edges, 32u |
| %226:bool = neq %225, 0u |
| if %226 [t: %b23] { # if_15 |
| %b23 = block { # true |
| %227:void = call %interpY, 5u, %i5, %v5, %v6 |
| exit_if # if_15 |
| } |
| } |
| %228:u32 = and %edges, 64u |
| %229:bool = neq %228, 0u |
| if %229 [t: %b24] { # if_16 |
| %b24 = block { # true |
| %230:void = call %interpX, 6u, %i7, %v7, %v6 |
| exit_if # if_16 |
| } |
| } |
| %231:u32 = and %edges, 128u |
| %232:bool = neq %231, 0u |
| if %232 [t: %b25] { # if_17 |
| %b25 = block { # true |
| %233:void = call %interpY, 7u, %i4, %v4, %v7 |
| exit_if # if_17 |
| } |
| } |
| %234:u32 = and %edges, 256u |
| %235:bool = neq %234, 0u |
| if %235 [t: %b26] { # if_18 |
| %b26 = block { # true |
| %236:void = call %interpZ, 8u, %i0, %v0, %v4 |
| exit_if # if_18 |
| } |
| } |
| %237:u32 = and %edges, 512u |
| %238:bool = neq %237, 0u |
| if %238 [t: %b27] { # if_19 |
| %b27 = block { # true |
| %239:void = call %interpZ, 9u, %i1, %v1, %v5 |
| exit_if # if_19 |
| } |
| } |
| %240:u32 = and %edges, 1024u |
| %241:bool = neq %240, 0u |
| if %241 [t: %b28] { # if_20 |
| %b28 = block { # true |
| %242:void = call %interpZ, 10u, %i2, %v2, %v6 |
| exit_if # if_20 |
| } |
| } |
| %243:u32 = and %edges, 2048u |
| %244:bool = neq %243, 0u |
| if %244 [t: %b29] { # if_21 |
| %b29 = block { # true |
| %245:void = call %interpZ, 11u, %i3, %v3, %v7 |
| exit_if # if_21 |
| } |
| } |
| %246:u32 = load %cubeIndex |
| %247:u32 = shiftl %246, 4u |
| %triTableOffset:u32 = add %247, 1u |
| %249:u32 = sub %triTableOffset, 1u |
| %250:ptr<storage, i32, read> = access %tables, 1u, %249 |
| %251:i32 = load %250 |
| %indexCount:u32 = convert %251 |
| %253:ptr<storage, atomic<u32>, read_write> = access %drawOut, 1u |
| %254:u32 = load %cubeVerts |
| %255:u32 = atomicAdd %253, %254 |
| %firstVertex:ptr<function, u32, read_write> = var, %255 |
| %257:u32 = access %global_id, 0u |
| %258:u32 = access %global_id, 1u |
| %259:ptr<storage, vec3<u32>, read_write> = access %volume, 3u |
| %260:u32 = load_vector_element %259, 0u |
| %261:u32 = mul %258, %260 |
| %262:u32 = add %257, %261 |
| %263:u32 = access %global_id, 2u |
| %264:ptr<storage, vec3<u32>, read_write> = access %volume, 3u |
| %265:u32 = load_vector_element %264, 0u |
| %266:u32 = mul %263, %265 |
| %267:ptr<storage, vec3<u32>, read_write> = access %volume, 3u |
| %268:u32 = load_vector_element %267, 1u |
| %269:u32 = mul %266, %268 |
| %bufferOffset:u32 = add %262, %269 |
| %firstIndex:u32 = mul %bufferOffset, 15u |
| loop [i: %b30, b: %b31, c: %b32] { # loop_1 |
| %b30 = block { # initializer |
| %i_3:ptr<function, u32, read_write> = var, 0u # %i_3: 'i' |
| next_iteration %b31 |
| } |
| %b31 = block { # body |
| %273:u32 = load %i_3 |
| %274:u32 = load %cubeVerts |
| %275:bool = lt %273, %274 |
| if %275 [t: %b33, f: %b34] { # if_22 |
| %b33 = block { # true |
| exit_if # if_22 |
| } |
| %b34 = block { # false |
| exit_loop # loop_1 |
| } |
| } |
| %276:u32 = load %firstVertex |
| %277:u32 = mul %276, 3u |
| %278:u32 = load %i_3 |
| %279:u32 = mul %278, 3u |
| %280:u32 = add %277, %279 |
| %281:ptr<storage, f32, read_write> = access %positionsOut, 0u, %280 |
| %282:u32 = load %i_3 |
| %283:ptr<private, vec3<f32>, read_write> = access %positions, %282 |
| %284:f32 = load_vector_element %283, 0u |
| store %281, %284 |
| %285:u32 = load %firstVertex |
| %286:u32 = mul %285, 3u |
| %287:u32 = load %i_3 |
| %288:u32 = mul %287, 3u |
| %289:u32 = add %286, %288 |
| %290:u32 = add %289, 1u |
| %291:ptr<storage, f32, read_write> = access %positionsOut, 0u, %290 |
| %292:u32 = load %i_3 |
| %293:ptr<private, vec3<f32>, read_write> = access %positions, %292 |
| %294:f32 = load_vector_element %293, 1u |
| store %291, %294 |
| %295:u32 = load %firstVertex |
| %296:u32 = mul %295, 3u |
| %297:u32 = load %i_3 |
| %298:u32 = mul %297, 3u |
| %299:u32 = add %296, %298 |
| %300:u32 = add %299, 2u |
| %301:ptr<storage, f32, read_write> = access %positionsOut, 0u, %300 |
| %302:u32 = load %i_3 |
| %303:ptr<private, vec3<f32>, read_write> = access %positions, %302 |
| %304:f32 = load_vector_element %303, 2u |
| store %301, %304 |
| %305:u32 = load %firstVertex |
| %306:u32 = mul %305, 3u |
| %307:u32 = load %i_3 |
| %308:u32 = mul %307, 3u |
| %309:u32 = add %306, %308 |
| %310:ptr<storage, f32, read_write> = access %normalsOut, 0u, %309 |
| %311:u32 = load %i_3 |
| %312:ptr<private, vec3<f32>, read_write> = access %normals, %311 |
| %313:f32 = load_vector_element %312, 0u |
| store %310, %313 |
| %314:u32 = load %firstVertex |
| %315:u32 = mul %314, 3u |
| %316:u32 = load %i_3 |
| %317:u32 = mul %316, 3u |
| %318:u32 = add %315, %317 |
| %319:u32 = add %318, 1u |
| %320:ptr<storage, f32, read_write> = access %normalsOut, 0u, %319 |
| %321:u32 = load %i_3 |
| %322:ptr<private, vec3<f32>, read_write> = access %normals, %321 |
| %323:f32 = load_vector_element %322, 1u |
| store %320, %323 |
| %324:u32 = load %firstVertex |
| %325:u32 = mul %324, 3u |
| %326:u32 = load %i_3 |
| %327:u32 = mul %326, 3u |
| %328:u32 = add %325, %327 |
| %329:u32 = add %328, 2u |
| %330:ptr<storage, f32, read_write> = access %normalsOut, 0u, %329 |
| %331:u32 = load %i_3 |
| %332:ptr<private, vec3<f32>, read_write> = access %normals, %331 |
| %333:f32 = load_vector_element %332, 2u |
| store %330, %333 |
| continue %b32 |
| } |
| %b32 = block { # continuing |
| %334:u32 = load %i_3 |
| %335:u32 = add %334, 1u |
| store %i_3, %335 |
| next_iteration %b31 |
| } |
| } |
| loop [i: %b35, b: %b36, c: %b37] { # loop_2 |
| %b35 = block { # initializer |
| %i_4:ptr<function, u32, read_write> = var, 0u # %i_4: 'i' |
| next_iteration %b36 |
| } |
| %b36 = block { # body |
| %337:u32 = load %i_4 |
| %338:bool = lt %337, %indexCount |
| if %338 [t: %b38, f: %b39] { # if_23 |
| %b38 = block { # true |
| exit_if # if_23 |
| } |
| %b39 = block { # false |
| exit_loop # loop_2 |
| } |
| } |
| %339:u32 = load %i_4 |
| %340:u32 = add %triTableOffset, %339 |
| %341:ptr<storage, i32, read> = access %tables, 1u, %340 |
| %index_6:i32 = load %341 # %index_6: 'index' |
| %343:u32 = load %i_4 |
| %344:u32 = add %firstIndex, %343 |
| %345:ptr<storage, u32, read_write> = access %indicesOut, 0u, %344 |
| %346:u32 = load %firstVertex |
| %347:ptr<private, u32, read_write> = access %indices, %index_6 |
| %348:u32 = load %347 |
| %349:u32 = add %346, %348 |
| store %345, %349 |
| continue %b37 |
| } |
| %b37 = block { # continuing |
| %350:u32 = load %i_4 |
| %351:u32 = add %350, 1u |
| store %i_4, %351 |
| next_iteration %b36 |
| } |
| } |
| loop [i: %b40, b: %b41, c: %b42] { # loop_3 |
| %b40 = block { # initializer |
| %i_5:ptr<function, u32, read_write> = var, %indexCount # %i_5: 'i' |
| next_iteration %b41 |
| } |
| %b41 = block { # body |
| %353:u32 = load %i_5 |
| %354:bool = lt %353, 15u |
| if %354 [t: %b43, f: %b44] { # if_24 |
| %b43 = block { # true |
| exit_if # if_24 |
| } |
| %b44 = block { # false |
| exit_loop # loop_3 |
| } |
| } |
| %355:u32 = load %i_5 |
| %356:u32 = add %firstIndex, %355 |
| %357:ptr<storage, u32, read_write> = access %indicesOut, 0u, %356 |
| %358:u32 = load %firstVertex |
| store %357, %358 |
| continue %b42 |
| } |
| %b42 = block { # continuing |
| %359:u32 = load %i_5 |
| %360:u32 = add %359, 1u |
| store %i_5, %360 |
| next_iteration %b41 |
| } |
| } |
| ret |
| } |
| } |
| |
| unhandled variable address space |
| ******************************************************************** |
| * The tint shader compiler has encountered an unexpected error. * |
| * * |
| * Please help us fix this issue by submitting a bug report at * |
| * crbug.com/tint with the source program that triggered the bug. * |
| ******************************************************************** |