Merge pull request #1 from bylaws/master

Add OpGroupNonUniformElect, OpGroupNonUniformBroadcastFirst
This commit is contained in:
liamwhite 2023-01-05 15:15:34 -05:00 committed by GitHub
commit ab75463999
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 0 deletions

View file

@ -1160,6 +1160,14 @@ public:
/// TBD /// TBD
Id OpSubgroupAllEqualKHR(Id result_type, Id predicate); Id OpSubgroupAllEqualKHR(Id result_type, Id predicate);
// Result is true only in the active invocation with the lowest id in the group, otherwise
// result is false.
Id OpGroupNonUniformElect(Id result_type, Id scope);
// Result is the Value of the invocation from the active invocation with the lowest id in the
// group to all active invocations in the group.
Id OpGroupNonUniformBroadcastFirst(Id result_type, Id scope, Id value);
// Result is the Value of the invocation identified by the id Id to all active invocations in // Result is the Value of the invocation identified by the id Id to all active invocations in
// the group. // the group.
Id OpGroupNonUniformBroadcast(Id result_type, Id scope, Id value, Id id); Id OpGroupNonUniformBroadcast(Id result_type, Id scope, Id value, Id id);

View file

@ -36,6 +36,17 @@ Id Module::OpSubgroupAllEqualKHR(Id result_type, Id predicate) {
return *code << OpId{spv::Op::OpSubgroupAllEqualKHR, result_type} << predicate << EndOp{}; return *code << OpId{spv::Op::OpSubgroupAllEqualKHR, result_type} << predicate << EndOp{};
} }
Id Module::OpGroupNonUniformElect(Id result_type, Id scope) {
code->Reserve(4);
return *code << OpId{spv::Op::OpGroupNonUniformElect, result_type} << scope << EndOp{};
}
Id Module::OpGroupNonUniformBroadcastFirst(Id result_type, Id scope, Id value) {
code->Reserve(5);
return *code << OpId{spv::Op::OpGroupNonUniformBroadcastFirst, result_type} << scope << value
<< EndOp{};
}
Id Module::OpGroupNonUniformBroadcast(Id result_type, Id scope, Id value, Id id) { Id Module::OpGroupNonUniformBroadcast(Id result_type, Id scope, Id value, Id id) {
code->Reserve(6); code->Reserve(6);
return *code << OpId{spv::Op::OpGroupNonUniformBroadcast, result_type} << scope << value return *code << OpId{spv::Op::OpGroupNonUniformBroadcast, result_type} << scope << value