| SKIP: FAILED |
| |
| ../../src/tint/lang/msl/writer/printer/printer.cc:500 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: { # 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: { |
| %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: { # 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 |
| %30:u32 = add %22, %29 |
| %valueIndex:u32 = let %30 |
| %32:ptr<storage, f32, read_write> = access %volume, 5u, %valueIndex |
| %33:f32 = load %32 |
| ret %33 |
| } |
| } |
| %positionAt = func(%index_1:vec3<u32>):vec3<f32> { # %index_1: 'index' |
| $B4: { |
| %36:ptr<storage, vec3<f32>, read_write> = access %volume, 0u |
| %37:vec3<f32> = load %36 |
| %38:vec3<f32> = let %37 |
| %39:ptr<storage, vec3<f32>, read_write> = access %volume, 2u |
| %40:vec3<f32> = load %39 |
| %41:vec3<f32> = let %40 |
| %42:vec3<u32> = swizzle %index_1, xyz |
| %43:vec3<f32> = convert %42 |
| %44:vec3<f32> = mul %41, %43 |
| %45:vec3<f32> = add %38, %44 |
| ret %45 |
| } |
| } |
| %normalAt = func(%index_2:vec3<u32>):vec3<f32> { # %index_2: 'index' |
| $B5: { |
| %48:vec3<u32> = sub %index_2, vec3<u32>(1u, 0u, 0u) |
| %49:f32 = call %valueAt, %48 |
| %50:f32 = let %49 |
| %51:vec3<u32> = add %index_2, vec3<u32>(1u, 0u, 0u) |
| %52:f32 = call %valueAt, %51 |
| %53:f32 = sub %50, %52 |
| %54:f32 = let %53 |
| %55:vec3<u32> = sub %index_2, vec3<u32>(0u, 1u, 0u) |
| %56:f32 = call %valueAt, %55 |
| %57:f32 = let %56 |
| %58:vec3<u32> = add %index_2, vec3<u32>(0u, 1u, 0u) |
| %59:f32 = call %valueAt, %58 |
| %60:f32 = sub %57, %59 |
| %61:f32 = let %60 |
| %62:vec3<u32> = sub %index_2, vec3<u32>(0u, 0u, 1u) |
| %63:f32 = call %valueAt, %62 |
| %64:f32 = let %63 |
| %65:vec3<u32> = add %index_2, vec3<u32>(0u, 0u, 1u) |
| %66:f32 = call %valueAt, %65 |
| %67:f32 = sub %64, %66 |
| %68:vec3<f32> = construct %54, %61, %67 |
| ret %68 |
| } |
| } |
| %interpX = func(%index_3:u32, %i:vec3<u32>, %va:f32, %vb:f32):void { # %index_3: 'index' |
| $B6: { |
| %74:ptr<storage, f32, read_write> = access %volume, 4u |
| %75:f32 = load %74 |
| %76:f32 = sub %75, %va |
| %77:f32 = sub %vb, %va |
| %78:f32 = div %76, %77 |
| %mu:f32 = let %78 |
| %80:u32 = load %cubeVerts |
| %81:ptr<private, vec3<f32>, read_write> = access %positions, %80 |
| %82:ptr<private, vec3<f32>, read_write> = let %81 |
| %83:vec3<f32> = call %positionAt, %i |
| %84:vec3<f32> = let %83 |
| %85:ptr<storage, vec3<f32>, read_write> = access %volume, 2u |
| %86:f32 = load_vector_element %85, 0u |
| %87:f32 = mul %86, %mu |
| %88:vec3<f32> = construct %87, 0.0f, 0.0f |
| %89:vec3<f32> = add %84, %88 |
| store %82, %89 |
| %90:vec3<f32> = call %normalAt, %i |
| %na:vec3<f32> = let %90 |
| %92:vec3<u32> = add %i, vec3<u32>(1u, 0u, 0u) |
| %93:vec3<f32> = call %normalAt, %92 |
| %nb:vec3<f32> = let %93 |
| %95:u32 = load %cubeVerts |
| %96:ptr<private, vec3<f32>, read_write> = access %normals, %95 |
| %97:ptr<private, vec3<f32>, read_write> = let %96 |
| %98:vec3<f32> = construct %mu, %mu, %mu |
| %99:vec3<f32> = mix %na, %nb, %98 |
| store %97, %99 |
| %100:ptr<private, u32, read_write> = access %indices, %index_3 |
| %101:u32 = load %cubeVerts |
| store %100, %101 |
| %102:u32 = load %cubeVerts |
| %103:u32 = add %102, 1u |
| store %cubeVerts, %103 |
| ret |
| } |
| } |
| %interpY = func(%index_4:u32, %i_1:vec3<u32>, %va_1:f32, %vb_1:f32):void { # %index_4: 'index', %i_1: 'i', %va_1: 'va', %vb_1: 'vb' |
| $B7: { |
| %109:ptr<storage, f32, read_write> = access %volume, 4u |
| %110:f32 = load %109 |
| %111:f32 = sub %110, %va_1 |
| %112:f32 = sub %vb_1, %va_1 |
| %113:f32 = div %111, %112 |
| %mu_1:f32 = let %113 # %mu_1: 'mu' |
| %115:u32 = load %cubeVerts |
| %116:ptr<private, vec3<f32>, read_write> = access %positions, %115 |
| %117:ptr<private, vec3<f32>, read_write> = let %116 |
| %118:vec3<f32> = call %positionAt, %i_1 |
| %119:vec3<f32> = let %118 |
| %120:ptr<storage, vec3<f32>, read_write> = access %volume, 2u |
| %121:f32 = load_vector_element %120, 1u |
| %122:f32 = mul %121, %mu_1 |
| %123:vec3<f32> = construct 0.0f, %122, 0.0f |
| %124:vec3<f32> = add %119, %123 |
| store %117, %124 |
| %125:vec3<f32> = call %normalAt, %i_1 |
| %na_1:vec3<f32> = let %125 # %na_1: 'na' |
| %127:vec3<u32> = add %i_1, vec3<u32>(0u, 1u, 0u) |
| %128:vec3<f32> = call %normalAt, %127 |
| %nb_1:vec3<f32> = let %128 # %nb_1: 'nb' |
| %130:u32 = load %cubeVerts |
| %131:ptr<private, vec3<f32>, read_write> = access %normals, %130 |
| %132:ptr<private, vec3<f32>, read_write> = let %131 |
| %133:vec3<f32> = construct %mu_1, %mu_1, %mu_1 |
| %134:vec3<f32> = mix %na_1, %nb_1, %133 |
| store %132, %134 |
| %135:ptr<private, u32, read_write> = access %indices, %index_4 |
| %136:u32 = load %cubeVerts |
| store %135, %136 |
| %137:u32 = load %cubeVerts |
| %138:u32 = add %137, 1u |
| store %cubeVerts, %138 |
| ret |
| } |
| } |
| %interpZ = func(%index_5:u32, %i_2:vec3<u32>, %va_2:f32, %vb_2:f32):void { # %index_5: 'index', %i_2: 'i', %va_2: 'va', %vb_2: 'vb' |
| $B8: { |
| %144:ptr<storage, f32, read_write> = access %volume, 4u |
| %145:f32 = load %144 |
| %146:f32 = sub %145, %va_2 |
| %147:f32 = sub %vb_2, %va_2 |
| %148:f32 = div %146, %147 |
| %mu_2:f32 = let %148 # %mu_2: 'mu' |
| %150:u32 = load %cubeVerts |
| %151:ptr<private, vec3<f32>, read_write> = access %positions, %150 |
| %152:ptr<private, vec3<f32>, read_write> = let %151 |
| %153:vec3<f32> = call %positionAt, %i_2 |
| %154:vec3<f32> = let %153 |
| %155:ptr<storage, vec3<f32>, read_write> = access %volume, 2u |
| %156:f32 = load_vector_element %155, 2u |
| %157:f32 = mul %156, %mu_2 |
| %158:vec3<f32> = construct 0.0f, 0.0f, %157 |
| %159:vec3<f32> = add %154, %158 |
| store %152, %159 |
| %160:vec3<f32> = call %normalAt, %i_2 |
| %na_2:vec3<f32> = let %160 # %na_2: 'na' |
| %162:vec3<u32> = add %i_2, vec3<u32>(0u, 0u, 1u) |
| %163:vec3<f32> = call %normalAt, %162 |
| %nb_2:vec3<f32> = let %163 # %nb_2: 'nb' |
| %165:u32 = load %cubeVerts |
| %166:ptr<private, vec3<f32>, read_write> = access %normals, %165 |
| %167:ptr<private, vec3<f32>, read_write> = let %166 |
| %168:vec3<f32> = construct %mu_2, %mu_2, %mu_2 |
| %169:vec3<f32> = mix %na_2, %nb_2, %168 |
| store %167, %169 |
| %170:ptr<private, u32, read_write> = access %indices, %index_5 |
| %171:u32 = load %cubeVerts |
| store %170, %171 |
| %172:u32 = load %cubeVerts |
| %173:u32 = add %172, 1u |
| store %cubeVerts, %173 |
| ret |
| } |
| } |
| %computeMain = @compute @workgroup_size(4, 4, 4) func(%global_id:vec3<u32> [@global_invocation_id]):void { |
| $B9: { |
| %i0:vec3<u32> = let %global_id |
| %177:vec3<u32> = add %global_id, vec3<u32>(1u, 0u, 0u) |
| %i1:vec3<u32> = let %177 |
| %179:vec3<u32> = add %global_id, vec3<u32>(1u, 1u, 0u) |
| %i2:vec3<u32> = let %179 |
| %181:vec3<u32> = add %global_id, vec3<u32>(0u, 1u, 0u) |
| %i3:vec3<u32> = let %181 |
| %183:vec3<u32> = add %global_id, vec3<u32>(0u, 0u, 1u) |
| %i4:vec3<u32> = let %183 |
| %185:vec3<u32> = add %global_id, vec3<u32>(1u, 0u, 1u) |
| %i5:vec3<u32> = let %185 |
| %187:vec3<u32> = add %global_id, vec3<u32>(1u) |
| %i6:vec3<u32> = let %187 |
| %189:vec3<u32> = add %global_id, vec3<u32>(0u, 1u, 1u) |
| %i7:vec3<u32> = let %189 |
| %191:f32 = call %valueAt, %i0 |
| %v0:f32 = let %191 |
| %193:f32 = call %valueAt, %i1 |
| %v1:f32 = let %193 |
| %195:f32 = call %valueAt, %i2 |
| %v2:f32 = let %195 |
| %197:f32 = call %valueAt, %i3 |
| %v3:f32 = let %197 |
| %199:f32 = call %valueAt, %i4 |
| %v4:f32 = let %199 |
| %201:f32 = call %valueAt, %i5 |
| %v5:f32 = let %201 |
| %203:f32 = call %valueAt, %i6 |
| %v6:f32 = let %203 |
| %205:f32 = call %valueAt, %i7 |
| %v7:f32 = let %205 |
| %cubeIndex:ptr<function, u32, read_write> = var, 0u |
| %208:ptr<storage, f32, read_write> = access %volume, 4u |
| %209:f32 = load %208 |
| %210:bool = lt %v0, %209 |
| if %210 [t: $B10] { # if_2 |
| $B10: { # true |
| %211:u32 = load %cubeIndex |
| %212:u32 = or %211, 1u |
| store %cubeIndex, %212 |
| exit_if # if_2 |
| } |
| } |
| %213:ptr<storage, f32, read_write> = access %volume, 4u |
| %214:f32 = load %213 |
| %215:bool = lt %v1, %214 |
| if %215 [t: $B11] { # if_3 |
| $B11: { # true |
| %216:u32 = load %cubeIndex |
| %217:u32 = or %216, 2u |
| store %cubeIndex, %217 |
| exit_if # if_3 |
| } |
| } |
| %218:ptr<storage, f32, read_write> = access %volume, 4u |
| %219:f32 = load %218 |
| %220:bool = lt %v2, %219 |
| if %220 [t: $B12] { # if_4 |
| $B12: { # true |
| %221:u32 = load %cubeIndex |
| %222:u32 = or %221, 4u |
| store %cubeIndex, %222 |
| exit_if # if_4 |
| } |
| } |
| %223:ptr<storage, f32, read_write> = access %volume, 4u |
| %224:f32 = load %223 |
| %225:bool = lt %v3, %224 |
| if %225 [t: $B13] { # if_5 |
| $B13: { # true |
| %226:u32 = load %cubeIndex |
| %227:u32 = or %226, 8u |
| store %cubeIndex, %227 |
| exit_if # if_5 |
| } |
| } |
| %228:ptr<storage, f32, read_write> = access %volume, 4u |
| %229:f32 = load %228 |
| %230:bool = lt %v4, %229 |
| if %230 [t: $B14] { # if_6 |
| $B14: { # true |
| %231:u32 = load %cubeIndex |
| %232:u32 = or %231, 16u |
| store %cubeIndex, %232 |
| exit_if # if_6 |
| } |
| } |
| %233:ptr<storage, f32, read_write> = access %volume, 4u |
| %234:f32 = load %233 |
| %235:bool = lt %v5, %234 |
| if %235 [t: $B15] { # if_7 |
| $B15: { # true |
| %236:u32 = load %cubeIndex |
| %237:u32 = or %236, 32u |
| store %cubeIndex, %237 |
| exit_if # if_7 |
| } |
| } |
| %238:ptr<storage, f32, read_write> = access %volume, 4u |
| %239:f32 = load %238 |
| %240:bool = lt %v6, %239 |
| if %240 [t: $B16] { # if_8 |
| $B16: { # true |
| %241:u32 = load %cubeIndex |
| %242:u32 = or %241, 64u |
| store %cubeIndex, %242 |
| exit_if # if_8 |
| } |
| } |
| %243:ptr<storage, f32, read_write> = access %volume, 4u |
| %244:f32 = load %243 |
| %245:bool = lt %v7, %244 |
| if %245 [t: $B17] { # if_9 |
| $B17: { # true |
| %246:u32 = load %cubeIndex |
| %247:u32 = or %246, 128u |
| store %cubeIndex, %247 |
| exit_if # if_9 |
| } |
| } |
| %248:u32 = load %cubeIndex |
| %249:ptr<storage, u32, read> = access %tables, 0u, %248 |
| %250:u32 = load %249 |
| %edges:u32 = let %250 |
| %252:u32 = and %edges, 1u |
| %253:bool = neq %252, 0u |
| if %253 [t: $B18] { # if_10 |
| $B18: { # true |
| %254:void = call %interpX, 0u, %i0, %v0, %v1 |
| exit_if # if_10 |
| } |
| } |
| %255:u32 = and %edges, 2u |
| %256:bool = neq %255, 0u |
| if %256 [t: $B19] { # if_11 |
| $B19: { # true |
| %257:void = call %interpY, 1u, %i1, %v1, %v2 |
| exit_if # if_11 |
| } |
| } |
| %258:u32 = and %edges, 4u |
| %259:bool = neq %258, 0u |
| if %259 [t: $B20] { # if_12 |
| $B20: { # true |
| %260:void = call %interpX, 2u, %i3, %v3, %v2 |
| exit_if # if_12 |
| } |
| } |
| %261:u32 = and %edges, 8u |
| %262:bool = neq %261, 0u |
| if %262 [t: $B21] { # if_13 |
| $B21: { # true |
| %263:void = call %interpY, 3u, %i0, %v0, %v3 |
| exit_if # if_13 |
| } |
| } |
| %264:u32 = and %edges, 16u |
| %265:bool = neq %264, 0u |
| if %265 [t: $B22] { # if_14 |
| $B22: { # true |
| %266:void = call %interpX, 4u, %i4, %v4, %v5 |
| exit_if # if_14 |
| } |
| } |
| %267:u32 = and %edges, 32u |
| %268:bool = neq %267, 0u |
| if %268 [t: $B23] { # if_15 |
| $B23: { # true |
| %269:void = call %interpY, 5u, %i5, %v5, %v6 |
| exit_if # if_15 |
| } |
| } |
| %270:u32 = and %edges, 64u |
| %271:bool = neq %270, 0u |
| if %271 [t: $B24] { # if_16 |
| $B24: { # true |
| %272:void = call %interpX, 6u, %i7, %v7, %v6 |
| exit_if # if_16 |
| } |
| } |
| %273:u32 = and %edges, 128u |
| %274:bool = neq %273, 0u |
| if %274 [t: $B25] { # if_17 |
| $B25: { # true |
| %275:void = call %interpY, 7u, %i4, %v4, %v7 |
| exit_if # if_17 |
| } |
| } |
| %276:u32 = and %edges, 256u |
| %277:bool = neq %276, 0u |
| if %277 [t: $B26] { # if_18 |
| $B26: { # true |
| %278:void = call %interpZ, 8u, %i0, %v0, %v4 |
| exit_if # if_18 |
| } |
| } |
| %279:u32 = and %edges, 512u |
| %280:bool = neq %279, 0u |
| if %280 [t: $B27] { # if_19 |
| $B27: { # true |
| %281:void = call %interpZ, 9u, %i1, %v1, %v5 |
| exit_if # if_19 |
| } |
| } |
| %282:u32 = and %edges, 1024u |
| %283:bool = neq %282, 0u |
| if %283 [t: $B28] { # if_20 |
| $B28: { # true |
| %284:void = call %interpZ, 10u, %i2, %v2, %v6 |
| exit_if # if_20 |
| } |
| } |
| %285:u32 = and %edges, 2048u |
| %286:bool = neq %285, 0u |
| if %286 [t: $B29] { # if_21 |
| $B29: { # true |
| %287:void = call %interpZ, 11u, %i3, %v3, %v7 |
| exit_if # if_21 |
| } |
| } |
| %288:u32 = load %cubeIndex |
| %289:u32 = and 4u, 31u |
| %290:u32 = shl %288, %289 |
| %291:u32 = add %290, 1u |
| %triTableOffset:u32 = let %291 |
| %293:u32 = sub %triTableOffset, 1u |
| %294:ptr<storage, i32, read> = access %tables, 1u, %293 |
| %295:i32 = load %294 |
| %296:u32 = convert %295 |
| %indexCount:u32 = let %296 |
| %298:ptr<storage, atomic<u32>, read_write> = access %drawOut, 1u |
| %299:u32 = load %cubeVerts |
| %300:u32 = atomicAdd %298, %299 |
| %firstVertex:ptr<function, u32, read_write> = var, %300 |
| %302:u32 = access %global_id, 0u |
| %303:u32 = access %global_id, 1u |
| %304:ptr<storage, vec3<u32>, read_write> = access %volume, 3u |
| %305:u32 = load_vector_element %304, 0u |
| %306:u32 = mul %303, %305 |
| %307:u32 = add %302, %306 |
| %308:u32 = access %global_id, 2u |
| %309:ptr<storage, vec3<u32>, read_write> = access %volume, 3u |
| %310:u32 = load_vector_element %309, 0u |
| %311:u32 = mul %308, %310 |
| %312:ptr<storage, vec3<u32>, read_write> = access %volume, 3u |
| %313:u32 = load_vector_element %312, 1u |
| %314:u32 = mul %311, %313 |
| %315:u32 = add %307, %314 |
| %bufferOffset:u32 = let %315 |
| %317:u32 = mul %bufferOffset, 15u |
| %firstIndex:u32 = let %317 |
| loop [i: $B30, b: $B31, c: $B32] { # loop_1 |
| $B30: { # initializer |
| %i_3:ptr<function, u32, read_write> = var, 0u # %i_3: 'i' |
| next_iteration # -> $B31 |
| } |
| $B31: { # body |
| %320:u32 = load %i_3 |
| %321:u32 = load %cubeVerts |
| %322:bool = lt %320, %321 |
| if %322 [t: $B33, f: $B34] { # if_22 |
| $B33: { # true |
| exit_if # if_22 |
| } |
| $B34: { # false |
| exit_loop # loop_1 |
| } |
| } |
| %323:u32 = load %firstVertex |
| %324:u32 = mul %323, 3u |
| %325:u32 = load %i_3 |
| %326:u32 = mul %325, 3u |
| %327:u32 = add %324, %326 |
| %328:ptr<storage, f32, read_write> = access %positionsOut, 0u, %327 |
| %329:u32 = load %i_3 |
| %330:ptr<private, vec3<f32>, read_write> = access %positions, %329 |
| %331:f32 = load_vector_element %330, 0u |
| store %328, %331 |
| %332:u32 = load %firstVertex |
| %333:u32 = mul %332, 3u |
| %334:u32 = load %i_3 |
| %335:u32 = mul %334, 3u |
| %336:u32 = add %333, %335 |
| %337:u32 = add %336, 1u |
| %338:ptr<storage, f32, read_write> = access %positionsOut, 0u, %337 |
| %339:u32 = load %i_3 |
| %340:ptr<private, vec3<f32>, read_write> = access %positions, %339 |
| %341:f32 = load_vector_element %340, 1u |
| store %338, %341 |
| %342:u32 = load %firstVertex |
| %343:u32 = mul %342, 3u |
| %344:u32 = load %i_3 |
| %345:u32 = mul %344, 3u |
| %346:u32 = add %343, %345 |
| %347:u32 = add %346, 2u |
| %348:ptr<storage, f32, read_write> = access %positionsOut, 0u, %347 |
| %349:u32 = load %i_3 |
| %350:ptr<private, vec3<f32>, read_write> = access %positions, %349 |
| %351:f32 = load_vector_element %350, 2u |
| store %348, %351 |
| %352:u32 = load %firstVertex |
| %353:u32 = mul %352, 3u |
| %354:u32 = load %i_3 |
| %355:u32 = mul %354, 3u |
| %356:u32 = add %353, %355 |
| %357:ptr<storage, f32, read_write> = access %normalsOut, 0u, %356 |
| %358:u32 = load %i_3 |
| %359:ptr<private, vec3<f32>, read_write> = access %normals, %358 |
| %360:f32 = load_vector_element %359, 0u |
| store %357, %360 |
| %361:u32 = load %firstVertex |
| %362:u32 = mul %361, 3u |
| %363:u32 = load %i_3 |
| %364:u32 = mul %363, 3u |
| %365:u32 = add %362, %364 |
| %366:u32 = add %365, 1u |
| %367:ptr<storage, f32, read_write> = access %normalsOut, 0u, %366 |
| %368:u32 = load %i_3 |
| %369:ptr<private, vec3<f32>, read_write> = access %normals, %368 |
| %370:f32 = load_vector_element %369, 1u |
| store %367, %370 |
| %371:u32 = load %firstVertex |
| %372:u32 = mul %371, 3u |
| %373:u32 = load %i_3 |
| %374:u32 = mul %373, 3u |
| %375:u32 = add %372, %374 |
| %376:u32 = add %375, 2u |
| %377:ptr<storage, f32, read_write> = access %normalsOut, 0u, %376 |
| %378:u32 = load %i_3 |
| %379:ptr<private, vec3<f32>, read_write> = access %normals, %378 |
| %380:f32 = load_vector_element %379, 2u |
| store %377, %380 |
| continue # -> $B32 |
| } |
| $B32: { # continuing |
| %381:u32 = load %i_3 |
| %382:u32 = add %381, 1u |
| store %i_3, %382 |
| next_iteration # -> $B31 |
| } |
| } |
| loop [i: $B35, b: $B36, c: $B37] { # loop_2 |
| $B35: { # initializer |
| %i_4:ptr<function, u32, read_write> = var, 0u # %i_4: 'i' |
| next_iteration # -> $B36 |
| } |
| $B36: { # body |
| %384:u32 = load %i_4 |
| %385:bool = lt %384, %indexCount |
| if %385 [t: $B38, f: $B39] { # if_23 |
| $B38: { # true |
| exit_if # if_23 |
| } |
| $B39: { # false |
| exit_loop # loop_2 |
| } |
| } |
| %386:u32 = load %i_4 |
| %387:u32 = add %triTableOffset, %386 |
| %388:ptr<storage, i32, read> = access %tables, 1u, %387 |
| %389:i32 = load %388 |
| %index_6:i32 = let %389 # %index_6: 'index' |
| %391:u32 = load %i_4 |
| %392:u32 = add %firstIndex, %391 |
| %393:ptr<storage, u32, read_write> = access %indicesOut, 0u, %392 |
| %394:u32 = load %firstVertex |
| %395:ptr<private, u32, read_write> = access %indices, %index_6 |
| %396:u32 = load %395 |
| %397:u32 = add %394, %396 |
| store %393, %397 |
| continue # -> $B37 |
| } |
| $B37: { # continuing |
| %398:u32 = load %i_4 |
| %399:u32 = add %398, 1u |
| store %i_4, %399 |
| next_iteration # -> $B36 |
| } |
| } |
| loop [i: $B40, b: $B41, c: $B42] { # loop_3 |
| $B40: { # initializer |
| %i_5:ptr<function, u32, read_write> = var, %indexCount # %i_5: 'i' |
| next_iteration # -> $B41 |
| } |
| $B41: { # body |
| %401:u32 = load %i_5 |
| %402:bool = lt %401, 15u |
| if %402 [t: $B43, f: $B44] { # if_24 |
| $B43: { # true |
| exit_if # if_24 |
| } |
| $B44: { # false |
| exit_loop # loop_3 |
| } |
| } |
| %403:u32 = load %i_5 |
| %404:u32 = add %firstIndex, %403 |
| %405:ptr<storage, u32, read_write> = access %indicesOut, 0u, %404 |
| %406:u32 = load %firstVertex |
| store %405, %406 |
| continue # -> $B42 |
| } |
| $B42: { # continuing |
| %407:u32 = load %i_5 |
| %408:u32 = add %407, 1u |
| store %i_5, %408 |
| 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. * |
| ******************************************************************** |