2
* Copyright © 2020 Valve Corporation
4
* Permission is hereby granted, free of charge, to any person obtaining a
5
* copy of this software and associated documentation files (the "Software"),
6
* to deal in the Software without restriction, including without limitation
7
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
8
* and/or sell copies of the Software, and to permit persons to whom the
9
* Software is furnished to do so, subject to the following conditions:
11
* The above copyright notice and this permission notice (including the next
12
* paragraph) shall be included in all copies or substantial portions of the
15
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
25
TEST_F(spirv_test, opload_vis)
29
OpCapability VulkanMemoryModel
30
OpCapability VulkanMemoryModelDeviceScope
31
%1 = OpExtInstImport "GLSL.std.450"
32
OpMemoryModel Logical Vulkan
33
OpEntryPoint GLCompute %4 "main" %9
34
OpExecutionMode %4 LocalSize 1 1 1
35
OpMemberDecorate %_struct_7 0 Offset 0
36
OpDecorate %_struct_7 Block
37
OpDecorate %9 DescriptorSet 0
38
OpDecorate %9 Binding 0
40
%3 = OpTypeFunction %void
41
%uint = OpTypeInt 32 0
42
%_struct_7 = OpTypeStruct %uint
43
%_ptr_StorageBuffer__struct_7 = OpTypePointer StorageBuffer %_struct_7
44
%9 = OpVariable %_ptr_StorageBuffer__struct_7 StorageBuffer
46
%int_0 = OpConstant %int 0
47
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
48
%device = OpConstant %int 1
49
%4 = OpFunction %void None %3
51
%13 = OpAccessChain %_ptr_StorageBuffer_uint %9 %int_0
52
%14 = OpLoad %uint %13 NonPrivatePointer|MakePointerVisible %device
57
static const uint32_t words[] = {
58
0x07230203, 0x00010500, 0x00070000, 0x00000010, 0x00000000, 0x00020011,
59
0x00000001, 0x00020011, 0x000014e1, 0x00020011, 0x000014e2, 0x0006000b,
60
0x00000001, 0x4c534c47, 0x6474732e, 0x3035342e, 0x00000000, 0x0003000e,
61
0x00000000, 0x00000003, 0x0006000f, 0x00000005, 0x00000002, 0x6e69616d,
62
0x00000000, 0x00000003, 0x00060010, 0x00000002, 0x00000011, 0x00000001,
63
0x00000001, 0x00000001, 0x00050048, 0x00000004, 0x00000000, 0x00000023,
64
0x00000000, 0x00030047, 0x00000004, 0x00000002, 0x00040047, 0x00000003,
65
0x00000022, 0x00000000, 0x00040047, 0x00000003, 0x00000021, 0x00000000,
66
0x00020013, 0x00000005, 0x00030021, 0x00000006, 0x00000005, 0x00040015,
67
0x00000007, 0x00000020, 0x00000000, 0x0003001e, 0x00000004, 0x00000007,
68
0x00040020, 0x00000008, 0x0000000c, 0x00000004, 0x0004003b, 0x00000008,
69
0x00000003, 0x0000000c, 0x00040015, 0x00000009, 0x00000020, 0x00000001,
70
0x0004002b, 0x00000009, 0x0000000a, 0x00000000, 0x00040020, 0x0000000b,
71
0x0000000c, 0x00000007, 0x0004002b, 0x00000009, 0x0000000c, 0x00000001,
72
0x00050036, 0x00000005, 0x00000002, 0x00000000, 0x00000006, 0x000200f8,
73
0x0000000d, 0x00050041, 0x0000000b, 0x0000000e, 0x00000003, 0x0000000a,
74
0x0006003d, 0x00000007, 0x0000000f, 0x0000000e, 0x00000030, 0x0000000c,
75
0x0003003e, 0x0000000e, 0x0000000f, 0x000100fd, 0x00010038,
78
get_nir(sizeof(words) / sizeof(words[0]), words);
80
nir_intrinsic_instr *intrinsic = find_intrinsic(nir_intrinsic_scoped_barrier, 0);
81
ASSERT_NE(intrinsic, nullptr);
83
EXPECT_EQ(nir_intrinsic_memory_semantics(intrinsic), NIR_MEMORY_MAKE_VISIBLE | NIR_MEMORY_ACQUIRE);
84
EXPECT_NE(nir_intrinsic_memory_modes(intrinsic) & nir_var_mem_ssbo, 0);
85
EXPECT_EQ(nir_intrinsic_memory_scope(intrinsic), NIR_SCOPE_DEVICE);
86
EXPECT_EQ(nir_intrinsic_execution_scope(intrinsic), NIR_SCOPE_NONE);
89
TEST_F(spirv_test, opstore_avail)
93
OpCapability VulkanMemoryModel
94
OpCapability VulkanMemoryModelDeviceScope
95
%1 = OpExtInstImport "GLSL.std.450"
96
OpMemoryModel Logical Vulkan
97
OpEntryPoint GLCompute %4 "main" %9
98
OpExecutionMode %4 LocalSize 1 1 1
99
OpMemberDecorate %_struct_7 0 Offset 0
100
OpDecorate %_struct_7 Block
101
OpDecorate %9 DescriptorSet 0
102
OpDecorate %9 Binding 0
104
%3 = OpTypeFunction %void
105
%uint = OpTypeInt 32 0
106
%_struct_7 = OpTypeStruct %uint
107
%_ptr_StorageBuffer__struct_7 = OpTypePointer StorageBuffer %_struct_7
108
%9 = OpVariable %_ptr_StorageBuffer__struct_7 StorageBuffer
109
%int = OpTypeInt 32 1
110
%int_0 = OpConstant %int 0
111
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
112
%device = OpConstant %int 1
113
%4 = OpFunction %void None %3
115
%13 = OpAccessChain %_ptr_StorageBuffer_uint %9 %int_0
116
%14 = OpLoad %uint %13
117
OpStore %13 %14 NonPrivatePointer|MakePointerAvailable %device
121
static const uint32_t words[] = {
122
0x07230203, 0x00010500, 0x00070000, 0x00000010, 0x00000000, 0x00020011,
123
0x00000001, 0x00020011, 0x000014e1, 0x00020011, 0x000014e2, 0x0006000b,
124
0x00000001, 0x4c534c47, 0x6474732e, 0x3035342e, 0x00000000, 0x0003000e,
125
0x00000000, 0x00000003, 0x0006000f, 0x00000005, 0x00000002, 0x6e69616d,
126
0x00000000, 0x00000003, 0x00060010, 0x00000002, 0x00000011, 0x00000001,
127
0x00000001, 0x00000001, 0x00050048, 0x00000004, 0x00000000, 0x00000023,
128
0x00000000, 0x00030047, 0x00000004, 0x00000002, 0x00040047, 0x00000003,
129
0x00000022, 0x00000000, 0x00040047, 0x00000003, 0x00000021, 0x00000000,
130
0x00020013, 0x00000005, 0x00030021, 0x00000006, 0x00000005, 0x00040015,
131
0x00000007, 0x00000020, 0x00000000, 0x0003001e, 0x00000004, 0x00000007,
132
0x00040020, 0x00000008, 0x0000000c, 0x00000004, 0x0004003b, 0x00000008,
133
0x00000003, 0x0000000c, 0x00040015, 0x00000009, 0x00000020, 0x00000001,
134
0x0004002b, 0x00000009, 0x0000000a, 0x00000000, 0x00040020, 0x0000000b,
135
0x0000000c, 0x00000007, 0x0004002b, 0x00000009, 0x0000000c, 0x00000001,
136
0x00050036, 0x00000005, 0x00000002, 0x00000000, 0x00000006, 0x000200f8,
137
0x0000000d, 0x00050041, 0x0000000b, 0x0000000e, 0x00000003, 0x0000000a,
138
0x0004003d, 0x00000007, 0x0000000f, 0x0000000e, 0x0005003e, 0x0000000e,
139
0x0000000f, 0x00000028, 0x0000000c, 0x000100fd, 0x00010038,
142
get_nir(sizeof(words) / sizeof(words[0]), words);
144
nir_intrinsic_instr *intrinsic = find_intrinsic(nir_intrinsic_scoped_barrier, 0);
145
ASSERT_NE(intrinsic, nullptr);
147
EXPECT_EQ(nir_intrinsic_memory_semantics(intrinsic), NIR_MEMORY_MAKE_AVAILABLE | NIR_MEMORY_RELEASE);
148
EXPECT_NE(nir_intrinsic_memory_modes(intrinsic) & nir_var_mem_ssbo, 0);
149
EXPECT_EQ(nir_intrinsic_memory_scope(intrinsic), NIR_SCOPE_DEVICE);
150
EXPECT_EQ(nir_intrinsic_execution_scope(intrinsic), NIR_SCOPE_NONE);
153
TEST_F(spirv_test, opcopymemory_visavail_both_combined)
157
OpCapability VulkanMemoryModel
158
OpCapability VulkanMemoryModelDeviceScope
159
%1 = OpExtInstImport "GLSL.std.450"
160
OpMemoryModel Logical Vulkan
161
OpEntryPoint GLCompute %4 "main" %9
162
OpExecutionMode %4 LocalSize 1 1 1
163
OpMemberDecorate %_struct_7 0 Offset 0
164
OpDecorate %_struct_7 Block
165
OpDecorate %9 DescriptorSet 0
166
OpDecorate %9 Binding 0
168
%3 = OpTypeFunction %void
169
%uint = OpTypeInt 32 0
170
%_struct_7 = OpTypeStruct %uint
171
%_ptr_StorageBuffer__struct_7 = OpTypePointer StorageBuffer %_struct_7
172
%9 = OpVariable %_ptr_StorageBuffer__struct_7 StorageBuffer
173
%int = OpTypeInt 32 1
174
%int_0 = OpConstant %int 0
175
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
176
%device = OpConstant %int 1
177
%workgroup = OpConstant %int 2
178
%4 = OpFunction %void None %3
180
%13 = OpAccessChain %_ptr_StorageBuffer_uint %9 %int_0
181
OpCopyMemory %13 %13 NonPrivatePointer|MakePointerAvailable|MakePointerVisible %device %workgroup
185
static const uint32_t words[] = {
186
0x07230203, 0x00010500, 0x00070000, 0x00000010, 0x00000000, 0x00020011,
187
0x00000001, 0x00020011, 0x000014e1, 0x00020011, 0x000014e2, 0x0006000b,
188
0x00000001, 0x4c534c47, 0x6474732e, 0x3035342e, 0x00000000, 0x0003000e,
189
0x00000000, 0x00000003, 0x0006000f, 0x00000005, 0x00000002, 0x6e69616d,
190
0x00000000, 0x00000003, 0x00060010, 0x00000002, 0x00000011, 0x00000001,
191
0x00000001, 0x00000001, 0x00050048, 0x00000004, 0x00000000, 0x00000023,
192
0x00000000, 0x00030047, 0x00000004, 0x00000002, 0x00040047, 0x00000003,
193
0x00000022, 0x00000000, 0x00040047, 0x00000003, 0x00000021, 0x00000000,
194
0x00020013, 0x00000005, 0x00030021, 0x00000006, 0x00000005, 0x00040015,
195
0x00000007, 0x00000020, 0x00000000, 0x0003001e, 0x00000004, 0x00000007,
196
0x00040020, 0x00000008, 0x0000000c, 0x00000004, 0x0004003b, 0x00000008,
197
0x00000003, 0x0000000c, 0x00040015, 0x00000009, 0x00000020, 0x00000001,
198
0x0004002b, 0x00000009, 0x0000000a, 0x00000000, 0x00040020, 0x0000000b,
199
0x0000000c, 0x00000007, 0x0004002b, 0x00000009, 0x0000000c, 0x00000001,
200
0x0004002b, 0x00000009, 0x0000000d, 0x00000002, 0x00050036, 0x00000005,
201
0x00000002, 0x00000000, 0x00000006, 0x000200f8, 0x0000000e, 0x00050041,
202
0x0000000b, 0x0000000f, 0x00000003, 0x0000000a, 0x0006003f, 0x0000000f,
203
0x0000000f, 0x00000038, 0x0000000c, 0x0000000d, 0x000100fd, 0x00010038,
206
get_nir(sizeof(words) / sizeof(words[0]), words);
208
nir_intrinsic_instr *first = find_intrinsic(nir_intrinsic_scoped_barrier, 0);
209
nir_intrinsic_instr *second = find_intrinsic(nir_intrinsic_scoped_barrier, 1);
210
ASSERT_NE(first, nullptr);
211
ASSERT_NE(second, nullptr);
213
EXPECT_EQ(nir_intrinsic_memory_semantics(first), NIR_MEMORY_MAKE_VISIBLE | NIR_MEMORY_ACQUIRE);
214
EXPECT_NE(nir_intrinsic_memory_modes(first) & nir_var_mem_ssbo, 0);
215
EXPECT_EQ(nir_intrinsic_memory_scope(first), NIR_SCOPE_WORKGROUP);
216
EXPECT_EQ(nir_intrinsic_execution_scope(first), NIR_SCOPE_NONE);
218
EXPECT_EQ(nir_intrinsic_memory_semantics(second), NIR_MEMORY_MAKE_AVAILABLE | NIR_MEMORY_RELEASE);
219
EXPECT_NE(nir_intrinsic_memory_modes(second) & nir_var_mem_ssbo, 0);
220
EXPECT_EQ(nir_intrinsic_memory_scope(second), NIR_SCOPE_DEVICE);
221
EXPECT_EQ(nir_intrinsic_execution_scope(first), NIR_SCOPE_NONE);
224
TEST_F(spirv_test, opcopymemory_visavail_both_separate)
228
OpCapability VulkanMemoryModel
229
OpCapability VulkanMemoryModelDeviceScope
230
%1 = OpExtInstImport "GLSL.std.450"
231
OpMemoryModel Logical Vulkan
232
OpEntryPoint GLCompute %4 "main" %9
233
OpExecutionMode %4 LocalSize 1 1 1
234
OpMemberDecorate %_struct_7 0 Offset 0
235
OpDecorate %_struct_7 Block
236
OpDecorate %9 DescriptorSet 0
237
OpDecorate %9 Binding 0
239
%3 = OpTypeFunction %void
240
%uint = OpTypeInt 32 0
241
%_struct_7 = OpTypeStruct %uint
242
%_ptr_StorageBuffer__struct_7 = OpTypePointer StorageBuffer %_struct_7
243
%9 = OpVariable %_ptr_StorageBuffer__struct_7 StorageBuffer
244
%int = OpTypeInt 32 1
245
%int_0 = OpConstant %int 0
246
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
247
%device = OpConstant %int 1
248
%workgroup = OpConstant %int 2
249
%4 = OpFunction %void None %3
251
%13 = OpAccessChain %_ptr_StorageBuffer_uint %9 %int_0
252
OpCopyMemory %13 %13 NonPrivatePointer|MakePointerAvailable %device NonPrivatePointer|MakePointerVisible %workgroup
256
static const uint32_t words[] = {
257
0x07230203, 0x00010500, 0x00070000, 0x00000010, 0x00000000, 0x00020011,
258
0x00000001, 0x00020011, 0x000014e1, 0x00020011, 0x000014e2, 0x0006000b,
259
0x00000001, 0x4c534c47, 0x6474732e, 0x3035342e, 0x00000000, 0x0003000e,
260
0x00000000, 0x00000003, 0x0006000f, 0x00000005, 0x00000002, 0x6e69616d,
261
0x00000000, 0x00000003, 0x00060010, 0x00000002, 0x00000011, 0x00000001,
262
0x00000001, 0x00000001, 0x00050048, 0x00000004, 0x00000000, 0x00000023,
263
0x00000000, 0x00030047, 0x00000004, 0x00000002, 0x00040047, 0x00000003,
264
0x00000022, 0x00000000, 0x00040047, 0x00000003, 0x00000021, 0x00000000,
265
0x00020013, 0x00000005, 0x00030021, 0x00000006, 0x00000005, 0x00040015,
266
0x00000007, 0x00000020, 0x00000000, 0x0003001e, 0x00000004, 0x00000007,
267
0x00040020, 0x00000008, 0x0000000c, 0x00000004, 0x0004003b, 0x00000008,
268
0x00000003, 0x0000000c, 0x00040015, 0x00000009, 0x00000020, 0x00000001,
269
0x0004002b, 0x00000009, 0x0000000a, 0x00000000, 0x00040020, 0x0000000b,
270
0x0000000c, 0x00000007, 0x0004002b, 0x00000009, 0x0000000c, 0x00000001,
271
0x0004002b, 0x00000009, 0x0000000d, 0x00000002, 0x00050036, 0x00000005,
272
0x00000002, 0x00000000, 0x00000006, 0x000200f8, 0x0000000e, 0x00050041,
273
0x0000000b, 0x0000000f, 0x00000003, 0x0000000a, 0x0007003f, 0x0000000f,
274
0x0000000f, 0x00000028, 0x0000000c, 0x00000030, 0x0000000d, 0x000100fd,
278
get_nir(sizeof(words) / sizeof(words[0]), words);
280
nir_intrinsic_instr *first = find_intrinsic(nir_intrinsic_scoped_barrier, 0);
281
nir_intrinsic_instr *second = find_intrinsic(nir_intrinsic_scoped_barrier, 1);
282
ASSERT_NE(first, nullptr);
283
ASSERT_NE(second, nullptr);
285
EXPECT_EQ(nir_intrinsic_memory_semantics(first), NIR_MEMORY_MAKE_VISIBLE | NIR_MEMORY_ACQUIRE);
286
EXPECT_NE(nir_intrinsic_memory_modes(first) & nir_var_mem_ssbo, 0);
287
EXPECT_EQ(nir_intrinsic_memory_scope(first), NIR_SCOPE_WORKGROUP);
288
EXPECT_EQ(nir_intrinsic_execution_scope(first), NIR_SCOPE_NONE);
290
EXPECT_EQ(nir_intrinsic_memory_semantics(second), NIR_MEMORY_MAKE_AVAILABLE | NIR_MEMORY_RELEASE);
291
EXPECT_NE(nir_intrinsic_memory_modes(second) & nir_var_mem_ssbo, 0);
292
EXPECT_EQ(nir_intrinsic_memory_scope(second), NIR_SCOPE_DEVICE);
293
EXPECT_EQ(nir_intrinsic_execution_scope(second), NIR_SCOPE_NONE);
296
TEST_F(spirv_test, opcopymemory_avail)
300
OpCapability VulkanMemoryModel
301
OpCapability VulkanMemoryModelDeviceScope
302
%1 = OpExtInstImport "GLSL.std.450"
303
OpMemoryModel Logical Vulkan
304
OpEntryPoint GLCompute %4 "main" %9
305
OpExecutionMode %4 LocalSize 1 1 1
306
OpMemberDecorate %_struct_7 0 Offset 0
307
OpDecorate %_struct_7 Block
308
OpDecorate %9 DescriptorSet 0
309
OpDecorate %9 Binding 0
311
%3 = OpTypeFunction %void
312
%uint = OpTypeInt 32 0
313
%_struct_7 = OpTypeStruct %uint
314
%_ptr_StorageBuffer__struct_7 = OpTypePointer StorageBuffer %_struct_7
315
%9 = OpVariable %_ptr_StorageBuffer__struct_7 StorageBuffer
316
%int = OpTypeInt 32 1
317
%int_0 = OpConstant %int 0
318
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
319
%device = OpConstant %int 1
320
%4 = OpFunction %void None %3
322
%13 = OpAccessChain %_ptr_StorageBuffer_uint %9 %int_0
323
OpCopyMemory %13 %13 NonPrivatePointer|MakePointerAvailable %device
327
static const uint32_t words[] = {
328
0x07230203, 0x00010500, 0x00070000, 0x0000000f, 0x00000000, 0x00020011,
329
0x00000001, 0x00020011, 0x000014e1, 0x00020011, 0x000014e2, 0x0006000b,
330
0x00000001, 0x4c534c47, 0x6474732e, 0x3035342e, 0x00000000, 0x0003000e,
331
0x00000000, 0x00000003, 0x0006000f, 0x00000005, 0x00000002, 0x6e69616d,
332
0x00000000, 0x00000003, 0x00060010, 0x00000002, 0x00000011, 0x00000001,
333
0x00000001, 0x00000001, 0x00050048, 0x00000004, 0x00000000, 0x00000023,
334
0x00000000, 0x00030047, 0x00000004, 0x00000002, 0x00040047, 0x00000003,
335
0x00000022, 0x00000000, 0x00040047, 0x00000003, 0x00000021, 0x00000000,
336
0x00020013, 0x00000005, 0x00030021, 0x00000006, 0x00000005, 0x00040015,
337
0x00000007, 0x00000020, 0x00000000, 0x0003001e, 0x00000004, 0x00000007,
338
0x00040020, 0x00000008, 0x0000000c, 0x00000004, 0x0004003b, 0x00000008,
339
0x00000003, 0x0000000c, 0x00040015, 0x00000009, 0x00000020, 0x00000001,
340
0x0004002b, 0x00000009, 0x0000000a, 0x00000000, 0x00040020, 0x0000000b,
341
0x0000000c, 0x00000007, 0x0004002b, 0x00000009, 0x0000000c, 0x00000001,
342
0x00050036, 0x00000005, 0x00000002, 0x00000000, 0x00000006, 0x000200f8,
343
0x0000000d, 0x00050041, 0x0000000b, 0x0000000e, 0x00000003, 0x0000000a,
344
0x0005003f, 0x0000000e, 0x0000000e, 0x00000028, 0x0000000c, 0x000100fd,
348
get_nir(sizeof(words) / sizeof(words[0]), words);
350
nir_intrinsic_instr *intrinsic = find_intrinsic(nir_intrinsic_scoped_barrier, 0);
351
ASSERT_NE(intrinsic, nullptr);
353
EXPECT_EQ(nir_intrinsic_memory_semantics(intrinsic), NIR_MEMORY_MAKE_AVAILABLE | NIR_MEMORY_RELEASE);
354
EXPECT_NE(nir_intrinsic_memory_modes(intrinsic) & nir_var_mem_ssbo, 0);
355
EXPECT_EQ(nir_intrinsic_memory_scope(intrinsic), NIR_SCOPE_DEVICE);
356
EXPECT_EQ(nir_intrinsic_execution_scope(intrinsic), NIR_SCOPE_NONE);
359
TEST_F(spirv_test, opcopymemory_vis)
363
OpCapability VulkanMemoryModel
364
OpCapability VulkanMemoryModelDeviceScope
365
%1 = OpExtInstImport "GLSL.std.450"
366
OpMemoryModel Logical Vulkan
367
OpEntryPoint GLCompute %4 "main" %9
368
OpExecutionMode %4 LocalSize 1 1 1
369
OpMemberDecorate %_struct_7 0 Offset 0
370
OpDecorate %_struct_7 Block
371
OpDecorate %9 DescriptorSet 0
372
OpDecorate %9 Binding 0
374
%3 = OpTypeFunction %void
375
%uint = OpTypeInt 32 0
376
%_struct_7 = OpTypeStruct %uint
377
%_ptr_StorageBuffer__struct_7 = OpTypePointer StorageBuffer %_struct_7
378
%9 = OpVariable %_ptr_StorageBuffer__struct_7 StorageBuffer
379
%int = OpTypeInt 32 1
380
%int_0 = OpConstant %int 0
381
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
382
%workgroup = OpConstant %int 2
383
%4 = OpFunction %void None %3
385
%13 = OpAccessChain %_ptr_StorageBuffer_uint %9 %int_0
386
OpCopyMemory %13 %13 NonPrivatePointer|MakePointerVisible %workgroup
390
static const uint32_t words[] = {
391
0x07230203, 0x00010500, 0x00070000, 0x0000000f, 0x00000000, 0x00020011,
392
0x00000001, 0x00020011, 0x000014e1, 0x00020011, 0x000014e2, 0x0006000b,
393
0x00000001, 0x4c534c47, 0x6474732e, 0x3035342e, 0x00000000, 0x0003000e,
394
0x00000000, 0x00000003, 0x0006000f, 0x00000005, 0x00000002, 0x6e69616d,
395
0x00000000, 0x00000003, 0x00060010, 0x00000002, 0x00000011, 0x00000001,
396
0x00000001, 0x00000001, 0x00050048, 0x00000004, 0x00000000, 0x00000023,
397
0x00000000, 0x00030047, 0x00000004, 0x00000002, 0x00040047, 0x00000003,
398
0x00000022, 0x00000000, 0x00040047, 0x00000003, 0x00000021, 0x00000000,
399
0x00020013, 0x00000005, 0x00030021, 0x00000006, 0x00000005, 0x00040015,
400
0x00000007, 0x00000020, 0x00000000, 0x0003001e, 0x00000004, 0x00000007,
401
0x00040020, 0x00000008, 0x0000000c, 0x00000004, 0x0004003b, 0x00000008,
402
0x00000003, 0x0000000c, 0x00040015, 0x00000009, 0x00000020, 0x00000001,
403
0x0004002b, 0x00000009, 0x0000000a, 0x00000000, 0x00040020, 0x0000000b,
404
0x0000000c, 0x00000007, 0x0004002b, 0x00000009, 0x0000000c, 0x00000002,
405
0x00050036, 0x00000005, 0x00000002, 0x00000000, 0x00000006, 0x000200f8,
406
0x0000000d, 0x00050041, 0x0000000b, 0x0000000e, 0x00000003, 0x0000000a,
407
0x0005003f, 0x0000000e, 0x0000000e, 0x00000030, 0x0000000c, 0x000100fd,
411
get_nir(sizeof(words) / sizeof(words[0]), words);
413
nir_intrinsic_instr *intrinsic = find_intrinsic(nir_intrinsic_scoped_barrier, 0);
414
ASSERT_NE(intrinsic, nullptr);
416
EXPECT_EQ(nir_intrinsic_memory_semantics(intrinsic), NIR_MEMORY_MAKE_VISIBLE | NIR_MEMORY_ACQUIRE);
417
EXPECT_NE(nir_intrinsic_memory_modes(intrinsic) & nir_var_mem_ssbo, 0);
418
EXPECT_EQ(nir_intrinsic_memory_scope(intrinsic), NIR_SCOPE_WORKGROUP);
419
EXPECT_EQ(nir_intrinsic_execution_scope(intrinsic), NIR_SCOPE_NONE);