aboutsummaryrefslogtreecommitdiff
path: root/src/codegen/spirv/Assembler.zig
diff options
context:
space:
mode:
authorRobin Voetter <robin@voetter.nl>2025-05-25 12:36:53 +0200
committerGitHub <noreply@github.com>2025-05-25 12:36:53 +0200
commitdc6ffc28b57a96fd03f62bc665b6ed28b8e9e67b (patch)
treebeb8163c07c11faa90131a1df1d589016d93b231 /src/codegen/spirv/Assembler.zig
parent35ba8d95a1afd0bebba3c32cf68990f5129fabfe (diff)
parent4bf1e4d198abd2018bf23f9067617800a2bc0554 (diff)
downloadzig-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.zig22
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,
},
};