From 17dd2f0a853eebb99d7165a3ec90719fc7b023a2 Mon Sep 17 00:00:00 2001 From: rpkak Date: Sun, 15 Feb 2026 18:05:12 +0100 Subject: [PATCH] spirv: implement AIR tag struct_field_ptr --- src/codegen/spirv/CodeGen.zig | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/codegen/spirv/CodeGen.zig b/src/codegen/spirv/CodeGen.zig index f7212b6e1b1f449368872d27aa3688f12b891aa9..2222bb9a050341495a7ca97f6b5a4b9dd5b189ec 100644 --- a/src/codegen/spirv/CodeGen.zig +++ b/src/codegen/spirv/CodeGen.zig @@ -2761,6 +2761,8 @@ fn genInst(cg: *CodeGen, inst: Air.Inst.Index) Error!void { .struct_field_val => try cg.airStructFieldVal(inst), .field_parent_ptr => try cg.airFieldParentPtr(inst), + .struct_field_ptr => try cg.airStructFieldPtr(inst), + .struct_field_ptr_index_0 => try cg.airStructFieldPtrIndex(inst, 0), .struct_field_ptr_index_1 => try cg.airStructFieldPtrIndex(inst, 1), .struct_field_ptr_index_2 => try cg.airStructFieldPtrIndex(inst, 2), @@ -4806,6 +4808,15 @@ fn structFieldPtr( } } +fn airStructFieldPtr(cg: *CodeGen, inst: Air.Inst.Index) !?Id { + const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl; + const struct_field = cg.air.extraData(Air.StructField, ty_pl.payload).data; + const struct_ptr = try cg.resolve(struct_field.struct_operand); + const struct_ptr_ty = cg.typeOf(struct_field.struct_operand); + const result_ptr_ty = cg.typeOfIndex(inst); + return try cg.structFieldPtr(result_ptr_ty, struct_ptr_ty, struct_ptr, struct_field.field_index); +} + fn airStructFieldPtrIndex(cg: *CodeGen, inst: Air.Inst.Index, field_index: u32) !?Id { const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op; const struct_ptr = try cg.resolve(ty_op.operand); -- 2.54.0