@@ -6,45 +6,46 @@ OpenGL compatibility is not listed here, because OpenGL isn't an officially supp
66Items with a + means that the feature is anticipated to be added in the future.
77Items with ^ means there is some discussion about support later in the document for this target.
88
9- | Feature | D3D11 | D3D12 | VK | CUDA | Metal | CPU |
10- | ---------------------------------------------------- | ----- | --------- | ------- | -------------- | ----- | --------- |
11- | [ Half Type] ( #half ) | No | Yes ^ | Yes | Yes ^ | Yes | No + |
12- | Double Type | Yes | Yes | Yes | Yes | No | Yes |
13- | Double Intrinsics | No | Limited + | Limited | Most | No | Yes |
14- | [ u/int8_t Type] ( #int8_t ) | No | No | Yes ^ | Yes | Yes | Yes |
15- | [ u/int16_t Type] ( #int16_t ) | No | Yes ^ | Yes ^ | Yes | Yes | Yes |
16- | [ u/int64_t Type] ( #int64_t ) | No | Yes ^ | Yes | Yes | Yes | Yes |
17- | u/int64_t Intrinsics | No | No | Yes | Yes | Yes | Yes |
18- | [ int matrix] ( #int-matrix ) | Yes | Yes | No + | Yes | No | Yes |
19- | [ tex.GetDimensions] ( #tex-get-dimensions ) | Yes | Yes | Yes | No | Yes | Yes |
20- | [ SM6.0 Wave Intrinsics] ( #sm6-wave ) | No | Yes | Partial | Yes ^ | No | No |
21- | SM6.0 Quad Intrinsics | No | Yes | No + | No | No | No |
22- | [ SM6.5 Wave Intrinsics] ( #sm6.5-wave ) | No | Yes ^ | No + | Yes ^ | No | No |
23- | [ WaveMask Intrinsics] ( #wave-mask ) | Yes ^ | Yes ^ | Yes + | Yes | No | No |
24- | [ WaveShuffle] ( #wave-shuffle ) | No | Limited ^ | Yes | Yes | No | No |
25- | [ Tesselation] ( #tesselation ) | Yes ^ | Yes ^ | No + | No | No | No |
26- | [ Graphics Pipeline] ( #graphics-pipeline ) | Yes | Yes | Yes | No | Yes | No |
27- | [ Ray Tracing DXR 1.0] ( #ray-tracing-1.0 ) | No | Yes ^ | Yes ^ | No | No | No |
28- | Ray Tracing DXR 1.1 | No | Yes | No + | No | No | No |
29- | [ Native Bindless] ( #native-bindless ) | No | No | No | Yes | No | Yes |
30- | [ Buffer bounds] ( #buffer-bounds ) | Yes | Yes | Yes | Limited ^ | No ^ | Limited ^ |
31- | [ Resource bounds] ( #resource-bounds ) | Yes | Yes | Yes | Yes (optional) | Yes | Yes |
32- | Atomics | Yes | Yes | Yes | Yes | Yes | Yes |
33- | Group shared mem/Barriers | Yes | Yes | Yes | Yes | Yes | No + |
34- | [ TextureArray.Sample float] ( #tex-array-sample-float ) | Yes | Yes | Yes | No | Yes | Yes |
35- | [ Separate Sampler] ( #separate-sampler ) | Yes | Yes | Yes | No | Yes | Yes |
36- | [ tex.Load] ( #tex-load ) | Yes | Yes | Yes | Limited ^ | Yes | Yes |
37- | [ Full bool] ( #full-bool ) | Yes | Yes | Yes | No | Yes | Yes ^ |
38- | [ Mesh Shader] ( #mesh-shader ) | No | Yes | Yes | No | Yes | No |
39- | [ ` [unroll] ` ] (#unroll] | Yes | Yes | Yes ^ | Yes | No ^ | Limited + |
40- | Atomics | Yes | Yes | Yes | Yes | Yes | No + |
41- | [ Atomics on RWBuffer] ( #rwbuffer-atomics ) | Yes | Yes | Yes | No | Yes | No + |
42- | [ Sampler Feedback] ( #sampler-feedback ) | No | Yes | No + | No | No | Yes ^ |
43- | [ RWByteAddressBuffer Atomic] ( #byte-address-atomic ) | No | Yes ^ | Yes ^ | Yes | Yes | No + |
44- | [ Shader Execution Reordering] ( #ser ) | No | Yes ^ | Yes ^ | No | No | No |
45- | [ debugBreak] ( #debug-break ) | No | No | Yes | Yes | No | Yes |
46- | [ realtime clock] ( #realtime-clock ) | No | Yes ^ | Yes | Yes | No | No |
47- | [ Switch Fall-Through] ( #switch-fallthrough ) | No ^ | Yes | Yes | Yes | Yes | Yes |
9+ | Feature | D3D11 | D3D12 | VK | CUDA | Metal | CPU |
10+ | ------------------------------------------------------------- | ----- | --------- | ------- | -------------- | ----- | --------- |
11+ | [ Half Type] ( #half ) | No | Yes ^ | Yes | Yes ^ | Yes | No + |
12+ | Double Type | Yes | Yes | Yes | Yes | No | Yes |
13+ | Double Intrinsics | No | Limited + | Limited | Most | No | Yes |
14+ | [ u/int8_t Type] ( #int8_t ) | No | No | Yes ^ | Yes | Yes | Yes |
15+ | [ u/int16_t Type] ( #int16_t ) | No | Yes ^ | Yes ^ | Yes | Yes | Yes |
16+ | [ u/int64_t Type] ( #int64_t ) | No | Yes ^ | Yes | Yes | Yes | Yes |
17+ | u/int64_t Intrinsics | No | No | Yes | Yes | Yes | Yes |
18+ | [ int matrix] ( #int-matrix ) | Yes | Yes | No + | Yes | No | Yes |
19+ | [ tex.GetDimensions] ( #tex-get-dimensions ) | Yes | Yes | Yes | No | Yes | Yes |
20+ | [ SM6.0 Wave Intrinsics] ( #sm6-wave ) | No | Yes | Partial | Yes ^ | No | No |
21+ | SM6.0 Quad Intrinsics | No | Yes | No + | No | No | No |
22+ | [ SM6.5 Wave Intrinsics] ( #sm6.5-wave ) | No | Yes ^ | No + | Yes ^ | No | No |
23+ | [ WaveMask Intrinsics] ( #wave-mask ) | Yes ^ | Yes ^ | Yes + | Yes | No | No |
24+ | [ WaveShuffle] ( #wave-shuffle ) | No | Limited ^ | Yes | Yes | No | No |
25+ | [ Tesselation] ( #tesselation ) | Yes ^ | Yes ^ | No + | No | No | No |
26+ | [ Graphics Pipeline] ( #graphics-pipeline ) | Yes | Yes | Yes | No | Yes | No |
27+ | [ Ray Tracing DXR 1.0] ( #ray-tracing-1.0 ) | No | Yes ^ | Yes ^ | No | No | No |
28+ | Ray Tracing DXR 1.1 | No | Yes | No + | No | No | No |
29+ | [ Native Bindless] ( #native-bindless ) | No | No | No | Yes | No | Yes |
30+ | [ Buffer bounds] ( #buffer-bounds ) | Yes | Yes | Yes | Limited ^ | No ^ | Limited ^ |
31+ | [ Resource bounds] ( #resource-bounds ) | Yes | Yes | Yes | Yes (optional) | Yes | Yes |
32+ | Atomics | Yes | Yes | Yes | Yes | Yes | Yes |
33+ | Group shared mem/Barriers | Yes | Yes | Yes | Yes | Yes | No + |
34+ | [ TextureArray.Sample float] ( #tex-array-sample-float ) | Yes | Yes | Yes | No | Yes | Yes |
35+ | [ Separate Sampler] ( #separate-sampler ) | Yes | Yes | Yes | No | Yes | Yes |
36+ | [ tex.Load] ( #tex-load ) | Yes | Yes | Yes | Limited ^ | Yes | Yes |
37+ | [ Full bool] ( #full-bool ) | Yes | Yes | Yes | No | Yes | Yes ^ |
38+ | [ Mesh Shader] ( #mesh-shader ) | No | Yes | Yes | No | Yes | No |
39+ | [ ` [unroll] ` ] (#unroll] | Yes | Yes | Yes ^ | Yes | No ^ | Limited + |
40+ | Atomics | Yes | Yes | Yes | Yes | Yes | No + |
41+ | [ Atomics on RWBuffer] ( #rwbuffer-atomics ) | Yes | Yes | Yes | No | Yes | No + |
42+ | [ Sampler Feedback] ( #sampler-feedback ) | No | Yes | No + | No | No | Yes ^ |
43+ | [ RWByteAddressBuffer Atomic] ( #byte-address-atomic ) | No | Yes ^ | Yes ^ | Yes | Yes | No + |
44+ | [ ByteAddressBuffer Load/Store Alignment] ( #byte-address-align ) | Yes ^ | Yes ^ | Yes ^ | Yes | Yes | Yes |
45+ | [ Shader Execution Reordering] ( #ser ) | No | Yes ^ | Yes ^ | No | No | No |
46+ | [ debugBreak] ( #debug-break ) | No | No | Yes | Yes | No | Yes |
47+ | [ realtime clock] ( #realtime-clock ) | No | Yes ^ | Yes | Yes | No | No |
48+ | [ Switch Fall-Through] ( #switch-fallthrough ) | No ^ | Yes | Yes | Yes | Yes | Yes |
4849
4950<a id =" half " ></a >
5051
@@ -280,6 +281,22 @@ On Vulkan, for float the [`GL_EXT_shader_atomic_float`](https://www.khronos.org/
280281
281282CUDA requires SM6.0 or higher for int64 support.
282283
284+ <a id =" byte-address-align " ></a >
285+
286+ ## ByteAddressBuffer Load/Store Alignment
287+
288+ The templated ` (RW)ByteAddressBuffer ` accessors that take an explicit ` alignment ` —
289+ ` LoadAligned<T>(location, alignment) ` and the three-argument ` Store<T>(address, value, alignment) `
290+ — treat ` alignment ` as a compile-time contract that is validated up front. (The plain
291+ ` Load<T> ` /` Store<T> ` forms make no alignment promise and are unaffected.)
292+
293+ A non-zero ` alignment ` must satisfy all of the following, or a compile-time error is reported:
294+
295+ | Requirement | Diagnostic |
296+ | ------------------------------------------------------------- | ---------- |
297+ | Be a compile-time constant | 41302 |
298+ | (Constant ` location ` ) ` location ` is a multiple of ` alignment ` | 41303 |
299+
283300<a id =" mesh-shader " ></a >
284301
285302## Mesh Shader
0 commit comments