| author | |
| committer | |
| log | 700dee34d5c7bdedc678032689c761e3a417fa03 |
| tree | 3ddf95feb67fe929ab3f9ebd1fc716699af226f5 |
| parent | 0c2526b18ec21d8155b070022d3b3b9069303744 |
| signature |
Previously they were strong aliases, but as these types are used quite
intermittendly it resulted in a lot of toRef() calls. Removing them
improves readability a bit.6 files changed, 73 insertions(+), 95 deletions(-)
src/codegen/spirv.zig+43-43| ... | ... | @@ -227,7 +227,7 @@ pub const DeclGen = struct { |
| 227 | 227 | /// keep track of the previous block. |
| 228 | 228 | fn beginSpvBlock(self: *DeclGen, label_id: IdResult) !void { |
| 229 | 229 | try self.func.body.emit(self.spv.gpa, .OpLabel, .{ .id_result = label_id }); |
| 230 | self.current_block_label_id = label_id.toRef(); | |
| 230 | self.current_block_label_id = label_id; | |
| 231 | 231 | } |
| 232 | 232 | |
| 233 | 233 | /// SPIR-V requires enabling specific integer sizes through capabilities, and so if they are not enabled, we need |
| ... | ... | @@ -340,7 +340,7 @@ pub const DeclGen = struct { |
| 340 | 340 | }; |
| 341 | 341 | const decl = self.module.declPtr(fn_decl_index); |
| 342 | 342 | self.module.markDeclAlive(decl); |
| 343 | return self.ids.get(fn_decl_index).?.toRef(); | |
| 343 | return self.ids.get(fn_decl_index).?; | |
| 344 | 344 | } |
| 345 | 345 | |
| 346 | 346 | const target = self.getTarget(); |
| ... | ... | @@ -350,7 +350,7 @@ pub const DeclGen = struct { |
| 350 | 350 | |
| 351 | 351 | if (val.isUndef()) { |
| 352 | 352 | try section.emit(self.spv.gpa, .OpUndef, .{ .id_result_type = result_type_id, .id_result = result_id }); |
| 353 | return result_id.toRef(); | |
| 353 | return result_id; | |
| 354 | 354 | } |
| 355 | 355 | |
| 356 | 356 | switch (ty.zigTypeTag()) { |
| ... | ... | @@ -538,7 +538,7 @@ pub const DeclGen = struct { |
| 538 | 538 | else => return self.todo("constant generation of type {s}: {}", .{ @tagName(ty.zigTypeTag()), ty.fmtDebug() }), |
| 539 | 539 | } |
| 540 | 540 | |
| 541 | return result_id.toRef(); | |
| 541 | return result_id; | |
| 542 | 542 | } |
| 543 | 543 | |
| 544 | 544 | /// Turn a Zig type into a SPIR-V Type, and return its type result-id. |
| ... | ... | @@ -766,7 +766,7 @@ pub const DeclGen = struct { |
| 766 | 766 | .id_result_type = try self.resolveTypeId(decl.ty.fnReturnType()), |
| 767 | 767 | .id_result = result_id, |
| 768 | 768 | .function_control = .{}, // TODO: We can set inline here if the type requires it. |
| 769 | .function_type = prototype_id.toRef(), | |
| 769 | .function_type = prototype_id, | |
| 770 | 770 | }); |
| 771 | 771 | |
| 772 | 772 | const params = decl.ty.fnParamLen(); |
| ... | ... | @@ -780,7 +780,7 @@ pub const DeclGen = struct { |
| 780 | 780 | .id_result_type = param_type_id, |
| 781 | 781 | .id_result = arg_result_id, |
| 782 | 782 | }); |
| 783 | self.args.appendAssumeCapacity(arg_result_id.toRef()); | |
| 783 | self.args.appendAssumeCapacity(arg_result_id); | |
| 784 | 784 | } |
| 785 | 785 | |
| 786 | 786 | // TODO: This could probably be done in a better way... |
| ... | ... | @@ -791,7 +791,7 @@ pub const DeclGen = struct { |
| 791 | 791 | try self.func.prologue.emit(self.spv.gpa, .OpLabel, .{ |
| 792 | 792 | .id_result = root_block_id, |
| 793 | 793 | }); |
| 794 | self.current_block_label_id = root_block_id.toRef(); | |
| 794 | self.current_block_label_id = root_block_id; | |
| 795 | 795 | |
| 796 | 796 | const main_body = self.air.getMainBody(); |
| 797 | 797 | try self.genBody(main_body); |
| ... | ... | @@ -804,7 +804,7 @@ pub const DeclGen = struct { |
| 804 | 804 | defer self.module.gpa.free(fqn); |
| 805 | 805 | |
| 806 | 806 | try self.spv.sections.debug_names.emit(self.gpa, .OpName, .{ |
| 807 | .target = result_id.toRef(), | |
| 807 | .target = result_id, | |
| 808 | 808 | .name = fqn, |
| 809 | 809 | }); |
| 810 | 810 | } else { |
| ... | ... | @@ -928,7 +928,7 @@ pub const DeclGen = struct { |
| 928 | 928 | .operand_1 = lhs_id, |
| 929 | 929 | .operand_2 = rhs_id, |
| 930 | 930 | }); |
| 931 | return result_id.toRef(); | |
| 931 | return result_id; | |
| 932 | 932 | } |
| 933 | 933 | |
| 934 | 934 | fn airShift(self: *DeclGen, inst: Air.Inst.Index, comptime opcode: Opcode) !?IdRef { |
| ... | ... | @@ -951,9 +951,9 @@ pub const DeclGen = struct { |
| 951 | 951 | .id_result_type = result_type_id, |
| 952 | 952 | .id_result = result_id, |
| 953 | 953 | .base = lhs_id, |
| 954 | .shift = shift_id.toRef(), | |
| 954 | .shift = shift_id, | |
| 955 | 955 | }); |
| 956 | return result_id.toRef(); | |
| 956 | return result_id; | |
| 957 | 957 | } |
| 958 | 958 | |
| 959 | 959 | fn maskStrangeInt(self: *DeclGen, ty_id: IdResultType, int_id: IdRef, bits: u16) !IdRef { |
| ... | ... | @@ -976,9 +976,9 @@ pub const DeclGen = struct { |
| 976 | 976 | .id_result_type = ty_id, |
| 977 | 977 | .id_result = result_id, |
| 978 | 978 | .operand_1 = int_id, |
| 979 | .operand_2 = mask_id.toRef(), | |
| 979 | .operand_2 = mask_id, | |
| 980 | 980 | }); |
| 981 | return result_id.toRef(); | |
| 981 | return result_id; | |
| 982 | 982 | } |
| 983 | 983 | |
| 984 | 984 | fn airArithOp( |
| ... | ... | @@ -1046,7 +1046,7 @@ pub const DeclGen = struct { |
| 1046 | 1046 | // TODO: Trap on overflow? Probably going to be annoying. |
| 1047 | 1047 | // TODO: Look into SPV_KHR_no_integer_wrap_decoration which provides NoSignedWrap/NoUnsignedWrap. |
| 1048 | 1048 | |
| 1049 | return result_id.toRef(); | |
| 1049 | return result_id; | |
| 1050 | 1050 | } |
| 1051 | 1051 | |
| 1052 | 1052 | fn airOverflowArithOp(self: *DeclGen, inst: Air.Inst.Index) !?IdRef { |
| ... | ... | @@ -1089,7 +1089,7 @@ pub const DeclGen = struct { |
| 1089 | 1089 | .operand_1 = lhs, |
| 1090 | 1090 | .operand_2 = rhs, |
| 1091 | 1091 | }); |
| 1092 | break :blk result_id.toRef(); | |
| 1092 | break :blk result_id; | |
| 1093 | 1093 | }; |
| 1094 | 1094 | |
| 1095 | 1095 | // Now convert the SPIR-V flavor result into a Zig-flavor result. |
| ... | ... | @@ -1111,7 +1111,7 @@ pub const DeclGen = struct { |
| 1111 | 1111 | .id_result = result_id, |
| 1112 | 1112 | .unsigned_value = overflow, |
| 1113 | 1113 | }); |
| 1114 | break :blk result_id.toRef(); | |
| 1114 | break :blk result_id; | |
| 1115 | 1115 | }; |
| 1116 | 1116 | |
| 1117 | 1117 | // TODO: If copying this function for borrow, make sure to convert -1 to 1 as appropriate. |
| ... | ... | @@ -1127,7 +1127,7 @@ pub const DeclGen = struct { |
| 1127 | 1127 | casted_overflow, |
| 1128 | 1128 | }, |
| 1129 | 1129 | }); |
| 1130 | return result_id.toRef(); | |
| 1130 | return result_id; | |
| 1131 | 1131 | } |
| 1132 | 1132 | |
| 1133 | 1133 | fn airShuffle(self: *DeclGen, inst: Air.Inst.Index) !?IdRef { |
| ... | ... | @@ -1163,7 +1163,7 @@ pub const DeclGen = struct { |
| 1163 | 1163 | self.func.body.writeOperand(spec.LiteralInteger, unsigned); |
| 1164 | 1164 | } |
| 1165 | 1165 | } |
| 1166 | return result_id.toRef(); | |
| 1166 | return result_id; | |
| 1167 | 1167 | } |
| 1168 | 1168 | |
| 1169 | 1169 | fn airCmp(self: *DeclGen, inst: Air.Inst.Index, comptime fop: Opcode, comptime sop: Opcode, comptime uop: Opcode) !?IdRef { |
| ... | ... | @@ -1215,7 +1215,7 @@ pub const DeclGen = struct { |
| 1215 | 1215 | else => unreachable, |
| 1216 | 1216 | } |
| 1217 | 1217 | |
| 1218 | return result_id.toRef(); | |
| 1218 | return result_id; | |
| 1219 | 1219 | } |
| 1220 | 1220 | |
| 1221 | 1221 | fn bitcast(self: *DeclGen, target_type_id: IdResultType, value_id: IdRef) !IdRef { |
| ... | ... | @@ -1225,7 +1225,7 @@ pub const DeclGen = struct { |
| 1225 | 1225 | .id_result = result_id, |
| 1226 | 1226 | .operand = value_id, |
| 1227 | 1227 | }); |
| 1228 | return result_id.toRef(); | |
| 1228 | return result_id; | |
| 1229 | 1229 | } |
| 1230 | 1230 | |
| 1231 | 1231 | fn airBitcast(self: *DeclGen, inst: Air.Inst.Index) !?IdRef { |
| ... | ... | @@ -1258,7 +1258,7 @@ pub const DeclGen = struct { |
| 1258 | 1258 | .unsigned_value = operand_id, |
| 1259 | 1259 | }), |
| 1260 | 1260 | } |
| 1261 | return result_id.toRef(); | |
| 1261 | return result_id; | |
| 1262 | 1262 | } |
| 1263 | 1263 | |
| 1264 | 1264 | fn airNot(self: *DeclGen, inst: Air.Inst.Index) !?IdRef { |
| ... | ... | @@ -1272,7 +1272,7 @@ pub const DeclGen = struct { |
| 1272 | 1272 | .id_result = result_id, |
| 1273 | 1273 | .operand = operand_id, |
| 1274 | 1274 | }); |
| 1275 | return result_id.toRef(); | |
| 1275 | return result_id; | |
| 1276 | 1276 | } |
| 1277 | 1277 | |
| 1278 | 1278 | fn extractField(self: *DeclGen, result_ty: IdResultType, object: IdRef, field: u32) !IdRef { |
| ... | ... | @@ -1283,7 +1283,7 @@ pub const DeclGen = struct { |
| 1283 | 1283 | .composite = object, |
| 1284 | 1284 | .indexes = &.{field}, |
| 1285 | 1285 | }); |
| 1286 | return result_id.toRef(); | |
| 1286 | return result_id; | |
| 1287 | 1287 | } |
| 1288 | 1288 | |
| 1289 | 1289 | fn airSliceField(self: *DeclGen, inst: Air.Inst.Index, field: u32) !?IdRef { |
| ... | ... | @@ -1314,7 +1314,7 @@ pub const DeclGen = struct { |
| 1314 | 1314 | .composite = slice, |
| 1315 | 1315 | .indexes = &.{0}, |
| 1316 | 1316 | }); |
| 1317 | break :blk result_id.toRef(); | |
| 1317 | break :blk result_id; | |
| 1318 | 1318 | }; |
| 1319 | 1319 | |
| 1320 | 1320 | const result_id = self.spv.allocId(); |
| ... | ... | @@ -1324,7 +1324,7 @@ pub const DeclGen = struct { |
| 1324 | 1324 | .base = slice_ptr, |
| 1325 | 1325 | .indexes = &.{index}, |
| 1326 | 1326 | }); |
| 1327 | return result_id.toRef(); | |
| 1327 | return result_id; | |
| 1328 | 1328 | } |
| 1329 | 1329 | |
| 1330 | 1330 | fn airSliceElemVal(self: *DeclGen, inst: Air.Inst.Index) !?IdRef { |
| ... | ... | @@ -1347,7 +1347,7 @@ pub const DeclGen = struct { |
| 1347 | 1347 | .composite = slice, |
| 1348 | 1348 | .indexes = &.{0}, |
| 1349 | 1349 | }); |
| 1350 | break :blk result_id.toRef(); | |
| 1350 | break :blk result_id; | |
| 1351 | 1351 | }; |
| 1352 | 1352 | |
| 1353 | 1353 | const elem_ptr = blk: { |
| ... | ... | @@ -1358,7 +1358,7 @@ pub const DeclGen = struct { |
| 1358 | 1358 | .base = slice_ptr, |
| 1359 | 1359 | .indexes = &.{index}, |
| 1360 | 1360 | }); |
| 1361 | break :blk result_id.toRef(); | |
| 1361 | break :blk result_id; | |
| 1362 | 1362 | }; |
| 1363 | 1363 | |
| 1364 | 1364 | const result_id = self.spv.allocId(); |
| ... | ... | @@ -1367,7 +1367,7 @@ pub const DeclGen = struct { |
| 1367 | 1367 | .id_result = result_id, |
| 1368 | 1368 | .pointer = elem_ptr, |
| 1369 | 1369 | }); |
| 1370 | return result_id.toRef(); | |
| 1370 | return result_id; | |
| 1371 | 1371 | } |
| 1372 | 1372 | |
| 1373 | 1373 | fn airPtrElemPtr(self: *DeclGen, inst: Air.Inst.Index) !?IdRef { |
| ... | ... | @@ -1392,7 +1392,7 @@ pub const DeclGen = struct { |
| 1392 | 1392 | .base = base_ptr, |
| 1393 | 1393 | .indexes = &.{rhs}, |
| 1394 | 1394 | }); |
| 1395 | return result_id.toRef(); | |
| 1395 | return result_id; | |
| 1396 | 1396 | } |
| 1397 | 1397 | |
| 1398 | 1398 | fn airStructFieldVal(self: *DeclGen, inst: Air.Inst.Index) !?IdRef { |
| ... | ... | @@ -1418,7 +1418,7 @@ pub const DeclGen = struct { |
| 1418 | 1418 | .composite = object, |
| 1419 | 1419 | .indexes = &.{field_index}, |
| 1420 | 1420 | }); |
| 1421 | return result_id.toRef(); | |
| 1421 | return result_id; | |
| 1422 | 1422 | } |
| 1423 | 1423 | |
| 1424 | 1424 | fn structFieldPtr( |
| ... | ... | @@ -1446,9 +1446,9 @@ pub const DeclGen = struct { |
| 1446 | 1446 | .id_result_type = result_type_id, |
| 1447 | 1447 | .id_result = result_id, |
| 1448 | 1448 | .base = object_ptr, |
| 1449 | .indexes = &.{field_index_id.toRef()}, | |
| 1449 | .indexes = &.{field_index_id}, | |
| 1450 | 1450 | }); |
| 1451 | return result_id.toRef(); | |
| 1451 | return result_id; | |
| 1452 | 1452 | }, |
| 1453 | 1453 | }, |
| 1454 | 1454 | else => unreachable, // TODO |
| ... | ... | @@ -1483,7 +1483,7 @@ pub const DeclGen = struct { |
| 1483 | 1483 | .id_result = result_id, |
| 1484 | 1484 | .storage_class = storage_class, |
| 1485 | 1485 | }); |
| 1486 | return result_id.toRef(); | |
| 1486 | return result_id; | |
| 1487 | 1487 | } |
| 1488 | 1488 | |
| 1489 | 1489 | fn airArg(self: *DeclGen) IdRef { |
| ... | ... | @@ -1503,7 +1503,7 @@ pub const DeclGen = struct { |
| 1503 | 1503 | var incoming_blocks = try std.ArrayListUnmanaged(IncomingBlock).initCapacity(self.gpa, 4); |
| 1504 | 1504 | |
| 1505 | 1505 | try self.blocks.putNoClobber(self.gpa, inst, .{ |
| 1506 | .label_id = label_id.toRef(), | |
| 1506 | .label_id = label_id, | |
| 1507 | 1507 | .incoming_blocks = &incoming_blocks, |
| 1508 | 1508 | }); |
| 1509 | 1509 | defer { |
| ... | ... | @@ -1538,7 +1538,7 @@ pub const DeclGen = struct { |
| 1538 | 1538 | self.func.body.writeOperand(spec.PairIdRefIdRef, .{ incoming.break_value_id, incoming.src_label_id }); |
| 1539 | 1539 | } |
| 1540 | 1540 | |
| 1541 | return result_id.toRef(); | |
| 1541 | return result_id; | |
| 1542 | 1542 | } |
| 1543 | 1543 | |
| 1544 | 1544 | fn airBr(self: *DeclGen, inst: Air.Inst.Index) !void { |
| ... | ... | @@ -1571,8 +1571,8 @@ pub const DeclGen = struct { |
| 1571 | 1571 | |
| 1572 | 1572 | try self.func.body.emit(self.spv.gpa, .OpBranchConditional, .{ |
| 1573 | 1573 | .condition = condition_id, |
| 1574 | .true_label = then_label_id.toRef(), | |
| 1575 | .false_label = else_label_id.toRef(), | |
| 1574 | .true_label = then_label_id, | |
| 1575 | .false_label = else_label_id, | |
| 1576 | 1576 | }); |
| 1577 | 1577 | |
| 1578 | 1578 | try self.beginSpvBlock(then_label_id); |
| ... | ... | @@ -1610,7 +1610,7 @@ pub const DeclGen = struct { |
| 1610 | 1610 | .memory_access = access, |
| 1611 | 1611 | }); |
| 1612 | 1612 | |
| 1613 | return result_id.toRef(); | |
| 1613 | return result_id; | |
| 1614 | 1614 | } |
| 1615 | 1615 | |
| 1616 | 1616 | fn airLoop(self: *DeclGen, inst: Air.Inst.Index) !void { |
| ... | ... | @@ -1620,13 +1620,13 @@ pub const DeclGen = struct { |
| 1620 | 1620 | const loop_label_id = self.spv.allocId(); |
| 1621 | 1621 | |
| 1622 | 1622 | // Jump to the loop entry point |
| 1623 | try self.func.body.emit(self.spv.gpa, .OpBranch, .{ .target_label = loop_label_id.toRef() }); | |
| 1623 | try self.func.body.emit(self.spv.gpa, .OpBranch, .{ .target_label = loop_label_id }); | |
| 1624 | 1624 | |
| 1625 | 1625 | // TODO: Look into OpLoopMerge. |
| 1626 | 1626 | try self.beginSpvBlock(loop_label_id); |
| 1627 | 1627 | try self.genBody(body); |
| 1628 | 1628 | |
| 1629 | try self.func.body.emit(self.spv.gpa, .OpBranch, .{ .target_label = loop_label_id.toRef() }); | |
| 1629 | try self.func.body.emit(self.spv.gpa, .OpBranch, .{ .target_label = loop_label_id }); | |
| 1630 | 1630 | } |
| 1631 | 1631 | |
| 1632 | 1632 | fn airRet(self: *DeclGen, inst: Air.Inst.Index) !void { |
| ... | ... | @@ -1658,7 +1658,7 @@ pub const DeclGen = struct { |
| 1658 | 1658 | .id_result = result_id, |
| 1659 | 1659 | .pointer = ptr, |
| 1660 | 1660 | }); |
| 1661 | try self.func.body.emit(self.spv.gpa, .OpReturnValue, .{ .value = result_id.toRef() }); | |
| 1661 | try self.func.body.emit(self.spv.gpa, .OpReturnValue, .{ .value = result_id }); | |
| 1662 | 1662 | } |
| 1663 | 1663 | |
| 1664 | 1664 | fn airStore(self: *DeclGen, inst: Air.Inst.Index) !void { |
| ... | ... | @@ -1730,7 +1730,7 @@ pub const DeclGen = struct { |
| 1730 | 1730 | // Emit the instruction before generating the blocks. |
| 1731 | 1731 | try self.func.body.emitRaw(self.spv.gpa, .OpSwitch, 2 + (cond_words + 1) * num_conditions); |
| 1732 | 1732 | self.func.body.writeOperand(IdRef, cond); |
| 1733 | self.func.body.writeOperand(IdRef, default.toRef()); | |
| 1733 | self.func.body.writeOperand(IdRef, default); | |
| 1734 | 1734 | |
| 1735 | 1735 | // Emit each of the cases |
| 1736 | 1736 | { |
| ... | ... | @@ -1965,6 +1965,6 @@ pub const DeclGen = struct { |
| 1965 | 1965 | return null; |
| 1966 | 1966 | } |
| 1967 | 1967 | |
| 1968 | return result_id.toRef(); | |
| 1968 | return result_id; | |
| 1969 | 1969 | } |
| 1970 | 1970 | }; |
src/codegen/spirv/Assembler.zig+2-2| ... | ... | @@ -135,7 +135,7 @@ const AsmValue = union(enum) { |
| 135 | 135 | return switch (self) { |
| 136 | 136 | .just_declared, .unresolved_forward_reference => unreachable, |
| 137 | 137 | .value => |result| result, |
| 138 | .ty => |ref| spv.typeResultId(ref).toRef(), | |
| 138 | .ty => |ref| spv.typeResultId(ref), | |
| 139 | 139 | }; |
| 140 | 140 | } |
| 141 | 141 | }; |
| ... | ... | @@ -486,7 +486,7 @@ fn processGenericInstruction(self: *Assembler) !?AsmValue { |
| 486 | 486 | section.instructions.items[first_word] |= @as(u32, @intCast(u16, actual_word_count)) << 16 | @enumToInt(self.inst.opcode); |
| 487 | 487 | |
| 488 | 488 | if (maybe_result_id) |result| { |
| 489 | return AsmValue{ .value = result.toRef() }; | |
| 489 | return AsmValue{ .value = result }; | |
| 490 | 490 | } |
| 491 | 491 | return null; |
| 492 | 492 | } |
src/codegen/spirv/Module.zig+20-20| ... | ... | @@ -196,7 +196,7 @@ pub fn resolveSourceFileName(self: *Module, decl: *ZigDecl) !IdRef { |
| 196 | 196 | const result = try self.source_file_names.getOrPut(self.gpa, path); |
| 197 | 197 | if (!result.found_existing) { |
| 198 | 198 | const file_result_id = self.allocId(); |
| 199 | result.value_ptr.* = file_result_id.toRef(); | |
| 199 | result.value_ptr.* = file_result_id; | |
| 200 | 200 | try self.sections.debug_strings.emit(self.gpa, .OpString, .{ |
| 201 | 201 | .id_result = file_result_id, |
| 202 | 202 | .string = path, |
| ... | ... | @@ -205,7 +205,7 @@ pub fn resolveSourceFileName(self: *Module, decl: *ZigDecl) !IdRef { |
| 205 | 205 | try self.sections.debug_strings.emit(self.gpa, .OpSource, .{ |
| 206 | 206 | .source_language = .Unknown, // TODO: Register Zig source language. |
| 207 | 207 | .version = 0, // TODO: Zig version as u32? |
| 208 | .file = file_result_id.toRef(), | |
| 208 | .file = file_result_id, | |
| 209 | 209 | .source = null, // TODO: Store actual source also? |
| 210 | 210 | }); |
| 211 | 211 | } |
| ... | ... | @@ -239,7 +239,7 @@ pub fn typeResultId(self: Module, type_ref: Type.Ref) IdResultType { |
| 239 | 239 | |
| 240 | 240 | /// Get the result-id of a particular type as IdRef, by Type.Ref. Asserts type_ref is valid. |
| 241 | 241 | pub fn typeRefId(self: Module, type_ref: Type.Ref) IdRef { |
| 242 | return self.type_cache.values()[@enumToInt(type_ref)].toRef(); | |
| 242 | return self.type_cache.values()[@enumToInt(type_ref)]; | |
| 243 | 243 | } |
| 244 | 244 | |
| 245 | 245 | /// Unconditionally emit a spir-v type into the appropriate section. |
| ... | ... | @@ -250,7 +250,7 @@ pub fn typeRefId(self: Module, type_ref: Type.Ref) IdRef { |
| 250 | 250 | /// be emitted at this point. |
| 251 | 251 | pub fn emitType(self: *Module, ty: Type) error{OutOfMemory}!IdResultType { |
| 252 | 252 | const result_id = self.allocId(); |
| 253 | const ref_id = result_id.toRef(); | |
| 253 | const ref_id = result_id; | |
| 254 | 254 | const types = &self.sections.types_globals_constants; |
| 255 | 255 | const debug_names = &self.sections.debug_names; |
| 256 | 256 | const annotations = &self.sections.annotations; |
| ... | ... | @@ -260,14 +260,14 @@ pub fn emitType(self: *Module, ty: Type) error{OutOfMemory}!IdResultType { |
| 260 | 260 | .void => { |
| 261 | 261 | try types.emit(self.gpa, .OpTypeVoid, result_id_operand); |
| 262 | 262 | try debug_names.emit(self.gpa, .OpName, .{ |
| 263 | .target = result_id.toRef(), | |
| 263 | .target = result_id, | |
| 264 | 264 | .name = "void", |
| 265 | 265 | }); |
| 266 | 266 | }, |
| 267 | 267 | .bool => { |
| 268 | 268 | try types.emit(self.gpa, .OpTypeBool, result_id_operand); |
| 269 | 269 | try debug_names.emit(self.gpa, .OpName, .{ |
| 270 | .target = result_id.toRef(), | |
| 270 | .target = result_id, | |
| 271 | 271 | .name = "bool", |
| 272 | 272 | }); |
| 273 | 273 | }, |
| ... | ... | @@ -302,7 +302,7 @@ pub fn emitType(self: *Module, ty: Type) error{OutOfMemory}!IdResultType { |
| 302 | 302 | defer self.gpa.free(name); |
| 303 | 303 | |
| 304 | 304 | try debug_names.emit(self.gpa, .OpName, .{ |
| 305 | .target = result_id.toRef(), | |
| 305 | .target = result_id, | |
| 306 | 306 | .name = name, |
| 307 | 307 | }); |
| 308 | 308 | }, |
| ... | ... | @@ -316,25 +316,25 @@ pub fn emitType(self: *Module, ty: Type) error{OutOfMemory}!IdResultType { |
| 316 | 316 | const name = try std.fmt.allocPrint(self.gpa, "f{}", .{bits}); |
| 317 | 317 | defer self.gpa.free(name); |
| 318 | 318 | try debug_names.emit(self.gpa, .OpName, .{ |
| 319 | .target = result_id.toRef(), | |
| 319 | .target = result_id, | |
| 320 | 320 | .name = name, |
| 321 | 321 | }); |
| 322 | 322 | }, |
| 323 | 323 | .vector => try types.emit(self.gpa, .OpTypeVector, .{ |
| 324 | 324 | .id_result = result_id, |
| 325 | .component_type = self.typeResultId(ty.childType()).toRef(), | |
| 325 | .component_type = self.typeResultId(ty.childType()), | |
| 326 | 326 | .component_count = ty.payload(.vector).component_count, |
| 327 | 327 | }), |
| 328 | 328 | .matrix => try types.emit(self.gpa, .OpTypeMatrix, .{ |
| 329 | 329 | .id_result = result_id, |
| 330 | .column_type = self.typeResultId(ty.childType()).toRef(), | |
| 330 | .column_type = self.typeResultId(ty.childType()), | |
| 331 | 331 | .column_count = ty.payload(.matrix).column_count, |
| 332 | 332 | }), |
| 333 | 333 | .image => { |
| 334 | 334 | const info = ty.payload(.image); |
| 335 | 335 | try types.emit(self.gpa, .OpTypeImage, .{ |
| 336 | 336 | .id_result = result_id, |
| 337 | .sampled_type = self.typeResultId(ty.childType()).toRef(), | |
| 337 | .sampled_type = self.typeResultId(ty.childType()), | |
| 338 | 338 | .dim = info.dim, |
| 339 | 339 | .depth = @enumToInt(info.depth), |
| 340 | 340 | .arrayed = @boolToInt(info.arrayed), |
| ... | ... | @@ -347,7 +347,7 @@ pub fn emitType(self: *Module, ty: Type) error{OutOfMemory}!IdResultType { |
| 347 | 347 | .sampler => try types.emit(self.gpa, .OpTypeSampler, result_id_operand), |
| 348 | 348 | .sampled_image => try types.emit(self.gpa, .OpTypeSampledImage, .{ |
| 349 | 349 | .id_result = result_id, |
| 350 | .image_type = self.typeResultId(ty.childType()).toRef(), | |
| 350 | .image_type = self.typeResultId(ty.childType()), | |
| 351 | 351 | }), |
| 352 | 352 | .array => { |
| 353 | 353 | const info = ty.payload(.array); |
| ... | ... | @@ -365,8 +365,8 @@ pub fn emitType(self: *Module, ty: Type) error{OutOfMemory}!IdResultType { |
| 365 | 365 | |
| 366 | 366 | try types.emit(self.gpa, .OpTypeArray, .{ |
| 367 | 367 | .id_result = result_id, |
| 368 | .element_type = self.typeResultId(ty.childType()).toRef(), | |
| 369 | .length = length_id.toRef(), | |
| 368 | .element_type = self.typeResultId(ty.childType()), | |
| 369 | .length = length_id, | |
| 370 | 370 | }); |
| 371 | 371 | if (info.array_stride != 0) { |
| 372 | 372 | try annotations.decorate(self.gpa, ref_id, .{ .ArrayStride = .{ .array_stride = info.array_stride } }); |
| ... | ... | @@ -376,7 +376,7 @@ pub fn emitType(self: *Module, ty: Type) error{OutOfMemory}!IdResultType { |
| 376 | 376 | const info = ty.payload(.runtime_array); |
| 377 | 377 | try types.emit(self.gpa, .OpTypeRuntimeArray, .{ |
| 378 | 378 | .id_result = result_id, |
| 379 | .element_type = self.typeResultId(ty.childType()).toRef(), | |
| 379 | .element_type = self.typeResultId(ty.childType()), | |
| 380 | 380 | }); |
| 381 | 381 | if (info.array_stride != 0) { |
| 382 | 382 | try annotations.decorate(self.gpa, ref_id, .{ .ArrayStride = .{ .array_stride = info.array_stride } }); |
| ... | ... | @@ -387,7 +387,7 @@ pub fn emitType(self: *Module, ty: Type) error{OutOfMemory}!IdResultType { |
| 387 | 387 | try types.emitRaw(self.gpa, .OpTypeStruct, 1 + info.members.len); |
| 388 | 388 | types.writeOperand(IdResult, result_id); |
| 389 | 389 | for (info.members) |member| { |
| 390 | types.writeOperand(IdRef, self.typeResultId(member.ty).toRef()); | |
| 390 | types.writeOperand(IdRef, self.typeResultId(member.ty)); | |
| 391 | 391 | } |
| 392 | 392 | try self.decorateStruct(ref_id, info); |
| 393 | 393 | }, |
| ... | ... | @@ -400,7 +400,7 @@ pub fn emitType(self: *Module, ty: Type) error{OutOfMemory}!IdResultType { |
| 400 | 400 | try types.emit(self.gpa, .OpTypePointer, .{ |
| 401 | 401 | .id_result = result_id, |
| 402 | 402 | .storage_class = info.storage_class, |
| 403 | .type = self.typeResultId(ty.childType()).toRef(), | |
| 403 | .type = self.typeResultId(ty.childType()), | |
| 404 | 404 | }); |
| 405 | 405 | if (info.array_stride != 0) { |
| 406 | 406 | try annotations.decorate(self.gpa, ref_id, .{ .ArrayStride = .{ .array_stride = info.array_stride } }); |
| ... | ... | @@ -416,9 +416,9 @@ pub fn emitType(self: *Module, ty: Type) error{OutOfMemory}!IdResultType { |
| 416 | 416 | const info = ty.payload(.function); |
| 417 | 417 | try types.emitRaw(self.gpa, .OpTypeFunction, 2 + info.parameters.len); |
| 418 | 418 | types.writeOperand(IdResult, result_id); |
| 419 | types.writeOperand(IdRef, self.typeResultId(info.return_type).toRef()); | |
| 419 | types.writeOperand(IdRef, self.typeResultId(info.return_type)); | |
| 420 | 420 | for (info.parameters) |parameter_type| { |
| 421 | types.writeOperand(IdRef, self.typeResultId(parameter_type).toRef()); | |
| 421 | types.writeOperand(IdRef, self.typeResultId(parameter_type)); | |
| 422 | 422 | } |
| 423 | 423 | }, |
| 424 | 424 | .event => try types.emit(self.gpa, .OpTypeEvent, result_id_operand), |
| ... | ... | @@ -433,7 +433,7 @@ pub fn emitType(self: *Module, ty: Type) error{OutOfMemory}!IdResultType { |
| 433 | 433 | .named_barrier => try types.emit(self.gpa, .OpTypeNamedBarrier, result_id_operand), |
| 434 | 434 | } |
| 435 | 435 | |
| 436 | return result_id.toResultType(); | |
| 436 | return result_id; | |
| 437 | 437 | } |
| 438 | 438 | |
| 439 | 439 | fn decorateStruct(self: *Module, target: IdRef, info: *const Type.Payload.Struct) !void { |
src/codegen/spirv/Section.zig+4-4| ... | ... | @@ -122,7 +122,7 @@ fn writeOperands(section: *Section, comptime Operands: type, operands: Operands) |
| 122 | 122 | |
| 123 | 123 | pub fn writeOperand(section: *Section, comptime Operand: type, operand: Operand) void { |
| 124 | 124 | switch (Operand) { |
| 125 | spec.IdResultType, spec.IdResult, spec.IdRef => section.writeWord(operand.id), | |
| 125 | spec.IdResult => section.writeWord(operand.id), | |
| 126 | 126 | |
| 127 | 127 | spec.LiteralInteger => section.writeWord(operand), |
| 128 | 128 | |
| ... | ... | @@ -258,9 +258,7 @@ fn operandsSize(comptime Operands: type, operands: Operands) usize { |
| 258 | 258 | |
| 259 | 259 | fn operandSize(comptime Operand: type, operand: Operand) usize { |
| 260 | 260 | return switch (Operand) { |
| 261 | spec.IdResultType, | |
| 262 | 261 | spec.IdResult, |
| 263 | spec.IdRef, | |
| 264 | 262 | spec.LiteralInteger, |
| 265 | 263 | spec.LiteralExtInstInteger, |
| 266 | 264 | => 1, |
| ... | ... | @@ -382,7 +380,9 @@ test "SPIR-V Section emit() - string" { |
| 382 | 380 | }, section.instructions.items); |
| 383 | 381 | } |
| 384 | 382 | |
| 385 | test "SPIR-V Section emit()- extended mask" { | |
| 383 | test "SPIR-V Section emit() - extended mask" { | |
| 384 | if (@import("builtin").zig_backend == .stage1) return error.SkipZigTest; | |
| 385 | ||
| 386 | 386 | var section = Section{}; |
| 387 | 387 | defer section.deinit(std.testing.allocator); |
| 388 | 388 |
src/codegen/spirv/spec.zig+2-13| ... | ... | @@ -3,22 +3,11 @@ |
| 3 | 3 | const Version = @import("std").builtin.Version; |
| 4 | 4 | |
| 5 | 5 | pub const Word = u32; |
| 6 | pub const IdResultType = struct { | |
| 7 | id: Word, | |
| 8 | pub fn toRef(self: IdResultType) IdRef { | |
| 9 | return .{ .id = self.id }; | |
| 10 | } | |
| 11 | }; | |
| 12 | 6 | pub const IdResult = struct { |
| 13 | 7 | id: Word, |
| 14 | pub fn toRef(self: IdResult) IdRef { | |
| 15 | return .{ .id = self.id }; | |
| 16 | } | |
| 17 | pub fn toResultType(self: IdResult) IdResultType { | |
| 18 | return .{ .id = self.id }; | |
| 19 | } | |
| 20 | 8 | }; |
| 21 | pub const IdRef = struct { id: Word }; | |
| 9 | pub const IdResultType = IdResult; | |
| 10 | pub const IdRef = IdResult; | |
| 22 | 11 | |
| 23 | 12 | pub const IdMemorySemantics = IdRef; |
| 24 | 13 | pub const IdScope = IdRef; |
tools/gen_spirv_spec.zig+2-13| ... | ... | @@ -80,22 +80,11 @@ fn render(writer: anytype, allocator: Allocator, registry: g.CoreRegistry) !void |
| 80 | 80 | \\const Version = @import("std").builtin.Version; |
| 81 | 81 | \\ |
| 82 | 82 | \\pub const Word = u32; |
| 83 | \\pub const IdResultType = struct{ | |
| 84 | \\ id: Word, | |
| 85 | \\ pub fn toRef(self: IdResultType) IdRef { | |
| 86 | \\ return .{.id = self.id}; | |
| 87 | \\ } | |
| 88 | \\}; | |
| 89 | 83 | \\pub const IdResult = struct{ |
| 90 | 84 | \\ id: Word, |
| 91 | \\ pub fn toRef(self: IdResult) IdRef { | |
| 92 | \\ return .{.id = self.id}; | |
| 93 | \\ } | |
| 94 | \\ pub fn toResultType(self: IdResult) IdResultType { | |
| 95 | \\ return .{.id = self.id}; | |
| 96 | \\ } | |
| 97 | 85 | \\}; |
| 98 | \\pub const IdRef = struct{ id: Word }; | |
| 86 | \\pub const IdResultType = IdResult; | |
| 87 | \\pub const IdRef = IdResult; | |
| 99 | 88 | \\ |
| 100 | 89 | \\pub const IdMemorySemantics = IdRef; |
| 101 | 90 | \\pub const IdScope = IdRef; |