1// Copyright 2020-2023 The Khronos Group Inc.
2//
3// SPDX-License-Identifier: CC-BY-4.0
4
5// Common Valid Usage
6// Common to structs taking VkPipelineStageFlags2 and VkAccessFlags2 parameters to define scopes
7// Set "stageMaskName" and "accessMaskName" attribute to the name of the stage and access mask to validate
8  * [[VUID-{refpage}-{accessMaskName}-03900]]
9    If pname:{accessMaskName} includes
10    ename:VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT, pname:{stageMaskName} must:
11    include ename:VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT,
12ifdef::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
13    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,
14endif::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
15    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
16    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
17  * [[VUID-{refpage}-{accessMaskName}-03901]]
18    If pname:{accessMaskName} includes ename:VK_ACCESS_2_INDEX_READ_BIT,
19    pname:{stageMaskName} must: include
20    ename:VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT,
21    ename:VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT,
22    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
23    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
24  * [[VUID-{refpage}-{accessMaskName}-03902]]
25    If pname:{accessMaskName} includes
26    ename:VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT, pname:{stageMaskName} must:
27    include ename:VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT,
28    ename:VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT,
29    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
30    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
31  * [[VUID-{refpage}-{accessMaskName}-03903]]
32    If pname:{accessMaskName} includes
33    ename:VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT, pname:{stageMaskName} must:
34    include ename:VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT,
35    ename:VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI,
36    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
37    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
38  * [[VUID-{refpage}-{accessMaskName}-03904]]
39    If pname:{accessMaskName} includes ename:VK_ACCESS_2_UNIFORM_READ_BIT,
40    pname:{stageMaskName} must: include
41    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT,
42    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the
43    etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
44  * [[VUID-{refpage}-{accessMaskName}-03905]]
45    If pname:{accessMaskName} includes
46    ename:VK_ACCESS_2_SHADER_SAMPLED_READ_BIT, pname:{stageMaskName} must:
47    include ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT,
48    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the
49    etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
50  * [[VUID-{refpage}-{accessMaskName}-03906]]
51    If pname:{accessMaskName} includes
52    ename:VK_ACCESS_2_SHADER_STORAGE_READ_BIT, pname:{stageMaskName} must:
53    include ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT,
54    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the
55    etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
56  * [[VUID-{refpage}-{accessMaskName}-03907]]
57    If pname:{accessMaskName} includes
58    ename:VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT, pname:{stageMaskName} must:
59    include ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT,
60    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the
61    etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
62  * [[VUID-{refpage}-{accessMaskName}-07454]]
63    If pname:{accessMaskName} includes ename:VK_ACCESS_2_SHADER_READ_BIT,
64    pname:{stageMaskName} must: include
65    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT,
66    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
67ifdef::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
68    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,
69endif::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
70ifdef::VK_EXT_opacity_micromap[]
71    ename:VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT,
72endif::VK_EXT_opacity_micromap[]
73    or one of the etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
74  * [[VUID-{refpage}-{accessMaskName}-03909]]
75    If pname:{accessMaskName} includes ename:VK_ACCESS_2_SHADER_WRITE_BIT,
76    pname:{stageMaskName} must: include
77    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT,
78    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the
79    etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
80  * [[VUID-{refpage}-{accessMaskName}-03910]]
81    If pname:{accessMaskName} includes
82    ename:VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT, pname:{stageMaskName} must:
83    include ename:VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT
84    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
85    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
86  * [[VUID-{refpage}-{accessMaskName}-03911]]
87    If pname:{accessMaskName} includes
88    ename:VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT, pname:{stageMaskName}
89    must: include ename:VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT
90    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
91    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
92  * [[VUID-{refpage}-{accessMaskName}-03912]]
93    If pname:{accessMaskName} includes
94    ename:VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT,
95    pname:{stageMaskName} must: include
96    ename:VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT,
97    ename:VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT,
98    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
99    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
100  * [[VUID-{refpage}-{accessMaskName}-03913]]
101    If pname:{accessMaskName} includes
102    ename:VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
103    pname:{stageMaskName} must: include
104    ename:VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT,
105    ename:VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT,
106    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
107    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
108  * [[VUID-{refpage}-{accessMaskName}-03914]]
109    If pname:{accessMaskName} includes ename:VK_ACCESS_2_TRANSFER_READ_BIT,
110    pname:{stageMaskName} must: include ename:VK_PIPELINE_STAGE_2_COPY_BIT,
111    ename:VK_PIPELINE_STAGE_2_BLIT_BIT,
112    ename:VK_PIPELINE_STAGE_2_RESOLVE_BIT,
113    ename:VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT,
114ifdef::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
115    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,
116endif::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
117ifdef::VK_KHR_ray_tracing_maintenance1[]
118    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR,
119endif::VK_KHR_ray_tracing_maintenance1[]
120    or ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
121  * [[VUID-{refpage}-{accessMaskName}-03915]]
122    If pname:{accessMaskName} includes ename:VK_ACCESS_2_TRANSFER_WRITE_BIT,
123    pname:{stageMaskName} must: include ename:VK_PIPELINE_STAGE_2_COPY_BIT,
124    ename:VK_PIPELINE_STAGE_2_BLIT_BIT,
125    ename:VK_PIPELINE_STAGE_2_RESOLVE_BIT,
126    ename:VK_PIPELINE_STAGE_2_CLEAR_BIT,
127    ename:VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT,
128ifdef::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
129    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,
130endif::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
131ifdef::VK_KHR_ray_tracing_maintenance1[]
132    or ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR,
133endif::VK_KHR_ray_tracing_maintenance1[]
134    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
135  * [[VUID-{refpage}-{accessMaskName}-03916]]
136    If pname:{accessMaskName} includes ename:VK_ACCESS_2_HOST_READ_BIT,
137    pname:{stageMaskName} must: include ename:VK_PIPELINE_STAGE_2_HOST_BIT
138  * [[VUID-{refpage}-{accessMaskName}-03917]]
139    If pname:{accessMaskName} includes ename:VK_ACCESS_2_HOST_WRITE_BIT,
140    pname:{stageMaskName} must: include ename:VK_PIPELINE_STAGE_2_HOST_BIT
141ifdef::VK_EXT_conditional_rendering[]
142  * [[VUID-{refpage}-{accessMaskName}-03918]]
143    If pname:{accessMaskName} includes
144    ename:VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT,
145    pname:{stageMaskName} must: include
146    ename:VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT,
147    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
148    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
149endif::VK_EXT_conditional_rendering[]
150ifdef::VK_EXT_fragment_density_map[]
151  * [[VUID-{refpage}-{accessMaskName}-03919]]
152    If pname:{accessMaskName} includes
153    ename:VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT,
154    pname:{stageMaskName} must: include
155    ename:VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT,
156    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
157    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
158endif::VK_EXT_fragment_density_map[]
159ifdef::VK_EXT_transform_feedback[]
160  * [[VUID-{refpage}-{accessMaskName}-03920]]
161    If pname:{accessMaskName} includes
162    ename:VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT,
163    pname:{stageMaskName} must: include
164    ename:VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT,
165    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
166    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
167  * [[VUID-{refpage}-{accessMaskName}-04747]]
168    If pname:{accessMaskName} includes
169    ename:VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT,
170    pname:{stageMaskName} must: include
171    ename:VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT,
172    ename:VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT,
173    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
174    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
175  * [[VUID-{refpage}-{accessMaskName}-03922]]
176    If pname:{accessMaskName} includes
177    ename:VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT,
178    pname:{stageMaskName} must: include
179    ename:VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT,
180    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
181    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
182endif::VK_EXT_transform_feedback[]
183ifdef::VK_NV_shading_rate_image[]
184  * [[VUID-{refpage}-{accessMaskName}-03923]]
185    If pname:{accessMaskName} includes
186    ename:VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV, pname:{stageMaskName}
187    must: include ename:VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV,
188    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
189    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
190endif::VK_NV_shading_rate_image[]
191ifdef::VK_HUAWEI_invocation_mask[]
192  * [[VUID-{refpage}-{accessMaskName}-04994]]
193    If pname:{accessMaskName} includes
194    ename:VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI, pname:{stageMaskName}
195    must: include ename:VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI
196endif::VK_HUAWEI_invocation_mask[]
197ifdef::VK_NV_device_generated_commands[]
198  * [[VUID-{refpage}-{accessMaskName}-03924]]
199    If pname:{accessMaskName} includes
200    ename:VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV, pname:{stageMaskName}
201    must: include ename:VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV or
202    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
203  * [[VUID-{refpage}-{accessMaskName}-03925]]
204    If pname:{accessMaskName} includes
205    ename:VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV, pname:{stageMaskName}
206    must: include ename:VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV or
207    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
208endif::VK_NV_device_generated_commands[]
209ifdef::VK_EXT_blend_operation_advanced[]
210  * [[VUID-{refpage}-{accessMaskName}-03926]]
211    If pname:{accessMaskName} includes
212    ename:VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT,
213    pname:{stageMaskName} must: include
214    ename:VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT
215    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
216    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
217endif::VK_EXT_blend_operation_advanced[]
218ifdef::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
219  * [[VUID-{refpage}-{accessMaskName}-03927]]
220    If pname:{accessMaskName} includes
221    ename:VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR,
222    pname:{stageMaskName} must: include
223    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,
224    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR,
225    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the
226    etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
227  * [[VUID-{refpage}-{accessMaskName}-03928]]
228    If pname:{accessMaskName} includes
229    ename:VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR,
230    pname:{stageMaskName} must: include
231    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR,
232    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR or
233    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
234  * [[VUID-{refpage}-{accessMaskName}-06256]]
235    If
236ifdef::VK_KHR_ray_query[]
237    the <<features-rayQuery, pname:rayQuery>> feature is not enabled and
238endif::VK_KHR_ray_query[]
239    pname:{accessMaskName} includes
240    ename:VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR,
241    pname:{stageMaskName} must: not include any of the
242    etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
243ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
244    except ename:VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR
245endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
246ifdef::VK_KHR_ray_tracing_maintenance1[]
247  * [[VUID-{refpage}-{accessMaskName}-07272]]
248    If pname:{accessMaskName} includes
249    ename:VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR,
250    pname:{stageMaskName} must: include
251    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT or
252    ename:VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR
253endif::VK_KHR_ray_tracing_maintenance1[]
254endif::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
255ifdef::VK_KHR_video_decode_queue[]
256  * [[VUID-{refpage}-{accessMaskName}-04858]]
257    If pname:{accessMaskName} includes
258    ename:VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR, pname:{stageMaskName} must:
259    include ename:VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR
260  * [[VUID-{refpage}-{accessMaskName}-04859]]
261    If pname:{accessMaskName} includes
262    ename:VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR, pname:{stageMaskName}
263    must: include ename:VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR
264endif::VK_KHR_video_decode_queue[]
265ifdef::VK_KHR_video_encode_queue[]
266  * [[VUID-{refpage}-{accessMaskName}-04860]]
267    If pname:{accessMaskName} includes
268    ename:VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR, pname:{stageMaskName} must:
269    include ename:VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR
270  * [[VUID-{refpage}-{accessMaskName}-04861]]
271    If pname:{accessMaskName} includes
272    ename:VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR, pname:{stageMaskName}
273    must: include ename:VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR
274endif::VK_KHR_video_encode_queue[]
275ifdef::VK_NV_optical_flow[]
276  * [[VUID-{refpage}-{accessMaskName}-07455]]
277    If pname:{accessMaskName} includes
278    ename:VK_ACCESS_2_OPTICAL_FLOW_READ_BIT_NV, pname:{stageMaskName} must:
279    include ename:VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV
280  * [[VUID-{refpage}-{accessMaskName}-07456]]
281    If pname:{accessMaskName} includes
282    ename:VK_ACCESS_2_OPTICAL_FLOW_WRITE_BIT_NV, pname:{stageMaskName} must:
283    include ename:VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV
284endif::VK_NV_optical_flow[]
285ifdef::VK_EXT_opacity_micromap[]
286  * [[VUID-{refpage}-{accessMaskName}-07457]]
287    If pname:{accessMaskName} includes
288    ename:VK_ACCESS_2_MICROMAP_WRITE_BIT_EXT, pname:{stageMaskName} must:
289    include ename:VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT
290  * [[VUID-{refpage}-{accessMaskName}-07458]]
291    If pname:{accessMaskName} includes
292    ename:VK_ACCESS_2_MICROMAP_READ_BIT_EXT, pname:{stageMaskName} must:
293    include ename:VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT or
294    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
295endif::VK_EXT_opacity_micromap[]
296ifdef::VK_EXT_descriptor_buffer[]
297  * [[VUID-{refpage}-{accessMaskName}-08118]]
298    If pname:{accessMaskName} includes
299    ename:VK_ACCESS_2_DESCRIPTOR_BUFFER_READ_BIT_EXT, pname:{stageMaskName}
300    must: include ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT,
301    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of
302    etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
303endif::VK_EXT_descriptor_buffer[]
304// Common Valid Usage
305