Implement and test num_workgroups for all backends

For HLSL, use the new NumWorkgroupsFromUniform transform, and expose
the binding point to use for the generated uniform as a backend
option.

The MSL mapping is trivial, and it was already implemented for WGSL
and SPIR-V.

Bug: tint:752
Change-Id: I4bd37b5d26181629d72b152fe064a60caf8ecdc5
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/63962
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
This commit is contained in:
James Price
2021-09-13 17:11:58 +00:00
parent 77a25c060f
commit 922fce7295
17 changed files with 122 additions and 69 deletions

View File

@@ -3,14 +3,15 @@ struct ComputeInputs {
[[builtin(local_invocation_index)]] local_invocation_index : u32;
[[builtin(global_invocation_id)]] global_invocation_id : vec3<u32>;
[[builtin(workgroup_id)]] workgroup_id : vec3<u32>;
// TODO(crbug.com/tint/752): [[builtin(num_workgroups)]] num_workgroups : vec3<u32>;
[[builtin(num_workgroups)]] num_workgroups : vec3<u32>;
};
[[stage(compute), workgroup_size(1)]]
fn main(inputs : ComputeInputs) {
let foo : u32 =
inputs.local_invocation_id.x +
inputs.local_invocation_index +
inputs.global_invocation_id.x +
inputs.workgroup_id.x;
inputs.local_invocation_index +
inputs.global_invocation_id.x +
inputs.workgroup_id.x +
inputs.num_workgroups.x;
}