1// (penguinliong) Device capability is a shared intelligence between the runtime
2// environment and the code generator. It's only about the program executed
3// on-device rather than any platform specific capability provided by some
4// graphics APIs like Vulkan or CUDA. For example, DirectX shader model, CUDA
5// compute capability and Vulkan physical device features can be listed here as
6// device capabilities, yet things like Vulkan API version and GLFW version
7// should not.
8#ifdef PER_DEVICE_CAPABILITY
9// SPIR-V Caps
10PER_DEVICE_CAPABILITY(reserved)
11PER_DEVICE_CAPABILITY(spirv_version)
12PER_DEVICE_CAPABILITY(spirv_has_int8)
13PER_DEVICE_CAPABILITY(spirv_has_int16)
14PER_DEVICE_CAPABILITY(spirv_has_int64)
15PER_DEVICE_CAPABILITY(spirv_has_float16)
16PER_DEVICE_CAPABILITY(spirv_has_float64)
17PER_DEVICE_CAPABILITY(spirv_has_atomic_int64)
18PER_DEVICE_CAPABILITY(spirv_has_atomic_float16) // load, store, exchange
19PER_DEVICE_CAPABILITY(spirv_has_atomic_float16_add)
20PER_DEVICE_CAPABILITY(spirv_has_atomic_float16_minmax)
21PER_DEVICE_CAPABILITY(spirv_has_atomic_float) // load, store, exchange
22PER_DEVICE_CAPABILITY(spirv_has_atomic_float_add)
23PER_DEVICE_CAPABILITY(spirv_has_atomic_float_minmax)
24PER_DEVICE_CAPABILITY(spirv_has_atomic_float64) // load, store, exchange
25PER_DEVICE_CAPABILITY(spirv_has_atomic_float64_add)
26PER_DEVICE_CAPABILITY(spirv_has_atomic_float64_minmax)
27PER_DEVICE_CAPABILITY(spirv_has_variable_ptr)
28PER_DEVICE_CAPABILITY(spirv_has_physical_storage_buffer)
29PER_DEVICE_CAPABILITY(spirv_has_subgroup_basic)
30PER_DEVICE_CAPABILITY(spirv_has_subgroup_vote)
31PER_DEVICE_CAPABILITY(spirv_has_subgroup_arithmetic)
32PER_DEVICE_CAPABILITY(spirv_has_subgroup_ballot)
33PER_DEVICE_CAPABILITY(spirv_has_non_semantic_info)
34PER_DEVICE_CAPABILITY(spirv_has_no_integer_wrap_decoration)
35#endif
36
37#ifdef PER_BUFFER_FORMAT
38PER_BUFFER_FORMAT(unknown)
39PER_BUFFER_FORMAT(r8)
40PER_BUFFER_FORMAT(rg8)
41PER_BUFFER_FORMAT(rgba8)
42PER_BUFFER_FORMAT(rgba8srgb)
43PER_BUFFER_FORMAT(bgra8)
44PER_BUFFER_FORMAT(bgra8srgb)
45PER_BUFFER_FORMAT(r8u)
46PER_BUFFER_FORMAT(rg8u)
47PER_BUFFER_FORMAT(rgba8u)
48PER_BUFFER_FORMAT(r8i)
49PER_BUFFER_FORMAT(rg8i)
50PER_BUFFER_FORMAT(rgba8i)
51PER_BUFFER_FORMAT(r16)
52PER_BUFFER_FORMAT(rg16)
53PER_BUFFER_FORMAT(rgb16)
54PER_BUFFER_FORMAT(rgba16)
55PER_BUFFER_FORMAT(r16u)
56PER_BUFFER_FORMAT(rg16u)
57PER_BUFFER_FORMAT(rgb16u)
58PER_BUFFER_FORMAT(rgba16u)
59PER_BUFFER_FORMAT(r16i)
60PER_BUFFER_FORMAT(rg16i)
61PER_BUFFER_FORMAT(rgb16i)
62PER_BUFFER_FORMAT(rgba16i)
63PER_BUFFER_FORMAT(r16f)
64PER_BUFFER_FORMAT(rg16f)
65PER_BUFFER_FORMAT(rgb16f)
66PER_BUFFER_FORMAT(rgba16f)
67PER_BUFFER_FORMAT(r32u)
68PER_BUFFER_FORMAT(rg32u)
69PER_BUFFER_FORMAT(rgb32u)
70PER_BUFFER_FORMAT(rgba32u)
71PER_BUFFER_FORMAT(r32i)
72PER_BUFFER_FORMAT(rg32i)
73PER_BUFFER_FORMAT(rgb32i)
74PER_BUFFER_FORMAT(rgba32i)
75PER_BUFFER_FORMAT(r32f)
76PER_BUFFER_FORMAT(rg32f)
77PER_BUFFER_FORMAT(rgb32f)
78PER_BUFFER_FORMAT(rgba32f)
79PER_BUFFER_FORMAT(depth16)
80PER_BUFFER_FORMAT(depth24stencil8)
81PER_BUFFER_FORMAT(depth32f)
82#endif
83
84#ifdef PER_IMAGE_DIMENSION
85PER_IMAGE_DIMENSION(d1D)
86PER_IMAGE_DIMENSION(d2D)
87PER_IMAGE_DIMENSION(d3D)
88#endif
89
90#ifdef PER_IMAGE_LAYOUT
91PER_IMAGE_LAYOUT(undefined)
92PER_IMAGE_LAYOUT(shader_read)
93PER_IMAGE_LAYOUT(shader_write)
94PER_IMAGE_LAYOUT(shader_read_write)
95PER_IMAGE_LAYOUT(color_attachment)
96PER_IMAGE_LAYOUT(color_attachment_read)
97PER_IMAGE_LAYOUT(depth_attachment)
98PER_IMAGE_LAYOUT(depth_attachment_read)
99PER_IMAGE_LAYOUT(transfer_dst)
100PER_IMAGE_LAYOUT(transfer_src)
101PER_IMAGE_LAYOUT(present_src)
102#endif
103