SPIRV-Cross/shaders-msl/comp
Chip Davis 9d9415754b MSL: Add support for subgroup operations.
Some support for subgroups is present starting in Metal 2.0 on both iOS
and macOS. macOS gains more complete support in 10.14 (Metal 2.1).

Some restrictions are present. On iOS and on macOS 10.13, the
implementation of `OpGroupNonUniformElect` is incorrect: if thread 0 has
already terminated or is not executing a conditional branch, the first
thread that *is* will falsely believe itself not to be. Unfortunately,
this operation is part of the "basic" feature set; without it, subgroups
cannot be supported at all.

The `SubgroupSize` and `SubgroupLocalInvocationId` builtins are only
available in compute shaders (and, by extension, tessellation control
shaders), despite SPIR-V making them available in all stages. This
limits the usefulness of some of the subgroup operations in fragment
shaders.

Although Metal on macOS supports some clustered, inclusive, and
exclusive operations, it does not support them all. In particular,
inclusive and exclusive min, max, and, or, and xor; as well as cluster
sizes other than 4 are not supported. If this becomes a problem, they
could be emulated, but at a significant performance cost due to the need
for non-uniform operations.
2019-05-15 17:40:04 -05:00
..
access-private-workgroup-in-function.comp Deal with scoping for Private variables. 2018-05-16 10:49:30 +02:00
argument-buffers-discrete.msl2.argument.discrete.comp Rename "push descriptor set" to "discrete descriptor set". 2019-03-15 21:53:21 +01:00
argument-buffers-image-load-store.msl2.argument.comp MSL: Implement Metal 2.0 indirect argument buffers. 2019-03-15 11:01:27 +01:00
atomic.comp Fix atomic_compare_exchange_weak_explicit. 2018-05-15 16:04:21 +02:00
barriers.comp MSL: Add support for subgroup operations. 2019-05-15 17:40:04 -05:00
basic.comp Enhancements to MSL compute and entry point naming. 2017-11-05 21:34:42 -05:00
bitcast-16bit-1.invalid.comp Support bitcasts of 16-bit types. 2018-11-05 14:56:36 -06:00
bitcast-16bit-2.invalid.comp Support bitcasts of 16-bit types. 2018-11-05 14:56:36 -06:00
builtins.comp Add WorkGroupID/NumWorkGroups to MSL. Fix block name alias. 2017-09-29 12:16:53 +02:00
cfg-preserve-parameter.comp Enhancements to MSL compute and entry point naming. 2017-11-05 21:34:42 -05:00
coherent-block.comp Enhancements to MSL compute and entry point naming. 2017-11-05 21:34:42 -05:00
coherent-image.comp Enhancements to MSL compute and entry point naming. 2017-11-05 21:34:42 -05:00
composite-array-initialization.comp Add test shader for composite array initialization. 2018-09-10 10:05:00 +02:00
composite-construct.comp Reduce test case ... MSL can't deal with certain unusual cases yet. 2018-05-02 10:01:08 +02:00
copy-array-of-arrays.comp MSL: Support array-of-arrays composite construction. 2018-09-12 10:25:51 +02:00
culling.comp Enhancements to MSL compute and entry point naming. 2017-11-05 21:34:42 -05:00
defer-parens.comp Enhance MSL testing and add numerous MSL test cases. 2017-01-30 22:55:21 -05:00
dowhile.comp Enhancements to MSL compute and entry point naming. 2017-11-05 21:34:42 -05:00
force-recompile-hooks.swizzle.comp MSL: Hoist fixup hooks in entry_point_args() out of the compile loop. 2019-01-17 10:18:38 -06:00
functions.comp CompilerMSL declare threadgroup variables accessed in called functions. 2018-01-24 15:38:17 -05:00
global-invocation-id-writable-ssbo-in-function.comp Add SSBO and gl_GlobalInvocationID MSL tests 2017-01-26 20:12:00 -05:00
global-invocation-id.comp Add SSBO and gl_GlobalInvocationID MSL tests 2017-01-26 20:12:00 -05:00
image-cube-array-load-store.comp Fix image load/store on cube arrays in MSL. 2018-05-25 12:43:25 +02:00
image.comp Enhancements to MSL compute and entry point naming. 2017-11-05 21:34:42 -05:00
insert.comp Enhancements to MSL compute and entry point naming. 2017-11-05 21:34:42 -05:00
inverse.comp Fix multiple declaration of spvDet2x2 on MSL. 2018-02-23 16:52:11 +01:00
local-invocation-id.comp msl: Add support for gl_LocalInvocationID and gl_LocalInvocationIndex 2017-01-26 20:22:31 -05:00
local-invocation-index.comp msl: Add support for gl_LocalInvocationID and gl_LocalInvocationIndex 2017-01-26 20:22:31 -05:00
mat3.comp Enhancements to MSL compute and entry point naming. 2017-11-05 21:34:42 -05:00
mod.comp Enhancements to MSL compute and entry point naming. 2017-11-05 21:34:42 -05:00
modf.comp Enhancements to MSL compute and entry point naming. 2017-11-05 21:34:42 -05:00
packing-test-1.comp Add some more MSL test shaders. 2018-03-05 16:42:38 +01:00
packing-test-2.comp Add some more MSL test shaders. 2018-03-05 16:42:38 +01:00
read-write-only.comp Enhance MSL testing and add numerous MSL test cases. 2017-01-30 22:55:21 -05:00
rmw-matrix.comp Do not use RMW rewrite for matrices. 2018-05-04 10:35:56 +02:00
rmw-opt.comp Enhancements to MSL compute and entry point naming. 2017-11-05 21:34:42 -05:00
shared-array-of-arrays.comp Fix passing arrays of arrays to functions in MSL. 2018-01-29 10:57:52 +01:00
shared.comp Enhancements to MSL compute and entry point naming. 2017-11-05 21:34:42 -05:00
spec-constant-op-member-array.comp Deal with OpSpecConstantOp used as array size. 2018-11-01 14:58:02 +01:00
spec-constant-work-group-size.comp Add test case for local_size_x_id and some complex cases. 2018-11-01 11:23:48 +01:00
storage-buffer-std140-vector-array.comp Add basic test for std140 small vector arrays. 2019-01-17 11:29:09 +01:00
struct-layout.comp Enhancements to MSL compute and entry point naming. 2017-11-05 21:34:42 -05:00
struct-nested.comp CompilerMSL remove incorrect packing of non-interface type-aliased structs. 2018-02-21 17:52:03 -05:00
struct-packing.comp CompilerMSL support smaller offsets for 3-row row-major matrices. 2018-02-11 16:52:57 -05:00
torture-loop.comp Enhancements to MSL compute and entry point naming. 2017-11-05 21:34:42 -05:00
type-alias.comp Enhancements to MSL compute and entry point naming. 2017-11-05 21:34:42 -05:00
udiv.comp Use declared binding in SPIR-V as a fallback for explicit MSL binds. 2018-04-04 12:25:11 +02:00
writable-ssbo.comp Add SSBO and gl_GlobalInvocationID MSL tests 2017-01-26 20:12:00 -05:00