spirv: recognize builtin extern vars

This commit is contained in:
Ali Cheraghi 2025-05-09 18:08:23 +03:30
parent dacd70fbe4
commit 9209f4b16a

View File

@ -2972,6 +2972,46 @@ const NavGen = struct {
.storage_class = storage_class,
});
if (nav.fqn.eqlSlice("position", ip)) {
try self.spv.decorate(result_id, .{ .BuiltIn = .{ .built_in = .Position } });
} else if (nav.fqn.eqlSlice("point_size", ip)) {
try self.spv.decorate(result_id, .{ .BuiltIn = .{ .built_in = .PointSize } });
} else if (nav.fqn.eqlSlice("vertex_id", ip)) {
try self.spv.decorate(result_id, .{ .BuiltIn = .{ .built_in = .VertexId } });
} else if (nav.fqn.eqlSlice("instance_id", ip)) {
try self.spv.decorate(result_id, .{ .BuiltIn = .{ .built_in = .InstanceId } });
} else if (nav.fqn.eqlSlice("invocation_id", ip)) {
try self.spv.decorate(result_id, .{ .BuiltIn = .{ .built_in = .InvocationId } });
} else if (nav.fqn.eqlSlice("frag_coord", ip)) {
try self.spv.decorate(result_id, .{ .BuiltIn = .{ .built_in = .FragCoord } });
} else if (nav.fqn.eqlSlice("point_coord", ip)) {
try self.spv.decorate(result_id, .{ .BuiltIn = .{ .built_in = .PointCoord } });
} else if (nav.fqn.eqlSlice("front_facing", ip)) {
try self.spv.decorate(result_id, .{ .BuiltIn = .{ .built_in = .FrontFacing } });
} else if (nav.fqn.eqlSlice("sample_mask", ip)) {
try self.spv.decorate(result_id, .{ .BuiltIn = .{ .built_in = .SampleMask } });
} else if (nav.fqn.eqlSlice("sample_mask", ip)) {
try self.spv.decorate(result_id, .{ .BuiltIn = .{ .built_in = .SampleMask } });
} else if (nav.fqn.eqlSlice("frag_depth", ip)) {
try self.spv.decorate(result_id, .{ .BuiltIn = .{ .built_in = .FragDepth } });
} else if (nav.fqn.eqlSlice("num_workgroups", ip)) {
try self.spv.decorate(result_id, .{ .BuiltIn = .{ .built_in = .NumWorkgroups } });
} else if (nav.fqn.eqlSlice("workgroup_size", ip)) {
try self.spv.decorate(result_id, .{ .BuiltIn = .{ .built_in = .WorkgroupSize } });
} else if (nav.fqn.eqlSlice("workgroup_id", ip)) {
try self.spv.decorate(result_id, .{ .BuiltIn = .{ .built_in = .WorkgroupId } });
} else if (nav.fqn.eqlSlice("local_invocation_id", ip)) {
try self.spv.decorate(result_id, .{ .BuiltIn = .{ .built_in = .LocalInvocationId } });
} else if (nav.fqn.eqlSlice("global_invocation_id", ip)) {
try self.spv.decorate(result_id, .{ .BuiltIn = .{ .built_in = .GlobalInvocationId } });
} else if (nav.fqn.eqlSlice("local_invocation_index", ip)) {
try self.spv.decorate(result_id, .{ .BuiltIn = .{ .built_in = .LocalInvocationIndex } });
} else if (nav.fqn.eqlSlice("vertex_index", ip)) {
try self.spv.decorate(result_id, .{ .BuiltIn = .{ .built_in = .VertexIndex } });
} else if (nav.fqn.eqlSlice("instance_index", ip)) {
try self.spv.decorate(result_id, .{ .BuiltIn = .{ .built_in = .InstanceIndex } });
}
try self.spv.debugName(result_id, nav.fqn.toSlice(ip));
try self.spv.declareDeclDeps(spv_decl_index, &.{});
},