diff options
| author | Robin Voetter <robin@voetter.nl> | 2025-05-25 12:36:53 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-25 12:36:53 +0200 |
| commit | dc6ffc28b57a96fd03f62bc665b6ed28b8e9e67b (patch) | |
| tree | beb8163c07c11faa90131a1df1d589016d93b231 /src/codegen/spirv/Assembler.zig | |
| parent | 35ba8d95a1afd0bebba3c32cf68990f5129fabfe (diff) | |
| parent | 4bf1e4d198abd2018bf23f9067617800a2bc0554 (diff) | |
| download | zig-dc6ffc28b57a96fd03f62bc665b6ed28b8e9e67b.tar.gz zig-dc6ffc28b57a96fd03f62bc665b6ed28b8e9e67b.zip | |
Merge pull request #23815 from alichraghi/master
spirv: unroll all vector operations
Diffstat (limited to 'src/codegen/spirv/Assembler.zig')
| -rw-r--r-- | src/codegen/spirv/Assembler.zig | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/codegen/spirv/Assembler.zig b/src/codegen/spirv/Assembler.zig index e4ad326006..2cf336b9c4 100644 --- a/src/codegen/spirv/Assembler.zig +++ b/src/codegen/spirv/Assembler.zig @@ -296,12 +296,26 @@ fn processInstruction(self: *Assembler) !void { }; break :blk .{ .value = try self.spv.importInstructionSet(set_tag) }; }, + .OpExecutionMode, .OpExecutionModeId => { + assert(try self.processGenericInstruction() == null); + const entry_point_id = try self.resolveRefId(self.inst.operands.items[0].ref_id); + const exec_mode: spec.ExecutionMode = @enumFromInt(self.inst.operands.items[1].value); + const gop = try self.spv.entry_points.getOrPut(self.gpa, entry_point_id); + if (!gop.found_existing) { + gop.value_ptr.* = .{}; + } else if (gop.value_ptr.exec_mode != null) { + return self.fail( + self.currentToken().start, + "cannot set execution mode more than once to any entry point", + .{}, + ); + } + gop.value_ptr.exec_mode = exec_mode; + return; + }, else => switch (self.inst.opcode.class()) { .TypeDeclaration => try self.processTypeInstruction(), - else => if (try self.processGenericInstruction()) |result| - result - else - return, + else => (try self.processGenericInstruction()) orelse return, }, }; |
