2022-06-03 14:47:01 +00:00
|
|
|
#version 310 es
|
|
|
|
|
|
|
|
struct atomic_compare_exchange_resultu32 {
|
|
|
|
uint old_value;
|
|
|
|
bool exchanged;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct atomic_compare_exchange_resulti32 {
|
|
|
|
int old_value;
|
|
|
|
bool exchanged;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2022-09-02 19:19:10 +00:00
|
|
|
layout(binding = 0, std430) buffer a_u32_block_ssbo {
|
2022-06-03 14:47:01 +00:00
|
|
|
uint inner;
|
|
|
|
} a_u32;
|
|
|
|
|
2022-09-02 19:19:10 +00:00
|
|
|
layout(binding = 1, std430) buffer a_i32_block_ssbo {
|
2022-06-03 14:47:01 +00:00
|
|
|
int inner;
|
|
|
|
} a_i32;
|
2022-09-02 19:19:10 +00:00
|
|
|
|
2022-06-03 14:47:01 +00:00
|
|
|
shared uint b_u32;
|
|
|
|
shared int b_i32;
|
|
|
|
void tint_symbol(uint local_invocation_index) {
|
|
|
|
if ((local_invocation_index < 1u)) {
|
|
|
|
atomicExchange(b_u32, 0u);
|
|
|
|
atomicExchange(b_i32, 0);
|
|
|
|
}
|
|
|
|
barrier();
|
|
|
|
{
|
|
|
|
uint value = 42u;
|
|
|
|
atomic_compare_exchange_resultu32 atomic_compare_result;
|
|
|
|
atomic_compare_result.old_value = atomicCompSwap(a_u32.inner, 0u, value);
|
|
|
|
atomic_compare_result.exchanged = atomic_compare_result.old_value == 0u;
|
|
|
|
atomic_compare_exchange_resultu32 r1 = atomic_compare_result;
|
|
|
|
atomic_compare_exchange_resultu32 atomic_compare_result_1;
|
|
|
|
atomic_compare_result_1.old_value = atomicCompSwap(a_u32.inner, 0u, value);
|
|
|
|
atomic_compare_result_1.exchanged = atomic_compare_result_1.old_value == 0u;
|
|
|
|
atomic_compare_exchange_resultu32 r2 = atomic_compare_result_1;
|
|
|
|
atomic_compare_exchange_resultu32 atomic_compare_result_2;
|
|
|
|
atomic_compare_result_2.old_value = atomicCompSwap(a_u32.inner, 0u, value);
|
|
|
|
atomic_compare_result_2.exchanged = atomic_compare_result_2.old_value == 0u;
|
|
|
|
atomic_compare_exchange_resultu32 r3 = atomic_compare_result_2;
|
|
|
|
}
|
|
|
|
{
|
|
|
|
int value = 42;
|
|
|
|
atomic_compare_exchange_resulti32 atomic_compare_result_3;
|
|
|
|
atomic_compare_result_3.old_value = atomicCompSwap(a_i32.inner, 0, value);
|
|
|
|
atomic_compare_result_3.exchanged = atomic_compare_result_3.old_value == 0;
|
|
|
|
atomic_compare_exchange_resulti32 r1 = atomic_compare_result_3;
|
|
|
|
atomic_compare_exchange_resulti32 atomic_compare_result_4;
|
|
|
|
atomic_compare_result_4.old_value = atomicCompSwap(a_i32.inner, 0, value);
|
|
|
|
atomic_compare_result_4.exchanged = atomic_compare_result_4.old_value == 0;
|
|
|
|
atomic_compare_exchange_resulti32 r2 = atomic_compare_result_4;
|
|
|
|
atomic_compare_exchange_resulti32 atomic_compare_result_5;
|
|
|
|
atomic_compare_result_5.old_value = atomicCompSwap(a_i32.inner, 0, value);
|
|
|
|
atomic_compare_result_5.exchanged = atomic_compare_result_5.old_value == 0;
|
|
|
|
atomic_compare_exchange_resulti32 r3 = atomic_compare_result_5;
|
|
|
|
}
|
|
|
|
{
|
|
|
|
uint value = 42u;
|
|
|
|
atomic_compare_exchange_resultu32 atomic_compare_result_6;
|
|
|
|
atomic_compare_result_6.old_value = atomicCompSwap(b_u32, 0u, value);
|
|
|
|
atomic_compare_result_6.exchanged = atomic_compare_result_6.old_value == 0u;
|
|
|
|
atomic_compare_exchange_resultu32 r1 = atomic_compare_result_6;
|
|
|
|
atomic_compare_exchange_resultu32 atomic_compare_result_7;
|
|
|
|
atomic_compare_result_7.old_value = atomicCompSwap(b_u32, 0u, value);
|
|
|
|
atomic_compare_result_7.exchanged = atomic_compare_result_7.old_value == 0u;
|
|
|
|
atomic_compare_exchange_resultu32 r2 = atomic_compare_result_7;
|
|
|
|
atomic_compare_exchange_resultu32 atomic_compare_result_8;
|
|
|
|
atomic_compare_result_8.old_value = atomicCompSwap(b_u32, 0u, value);
|
|
|
|
atomic_compare_result_8.exchanged = atomic_compare_result_8.old_value == 0u;
|
|
|
|
atomic_compare_exchange_resultu32 r3 = atomic_compare_result_8;
|
|
|
|
}
|
|
|
|
{
|
|
|
|
int value = 42;
|
|
|
|
atomic_compare_exchange_resulti32 atomic_compare_result_9;
|
|
|
|
atomic_compare_result_9.old_value = atomicCompSwap(b_i32, 0, value);
|
|
|
|
atomic_compare_result_9.exchanged = atomic_compare_result_9.old_value == 0;
|
|
|
|
atomic_compare_exchange_resulti32 r1 = atomic_compare_result_9;
|
|
|
|
atomic_compare_exchange_resulti32 atomic_compare_result_10;
|
|
|
|
atomic_compare_result_10.old_value = atomicCompSwap(b_i32, 0, value);
|
|
|
|
atomic_compare_result_10.exchanged = atomic_compare_result_10.old_value == 0;
|
|
|
|
atomic_compare_exchange_resulti32 r2 = atomic_compare_result_10;
|
|
|
|
atomic_compare_exchange_resulti32 atomic_compare_result_11;
|
|
|
|
atomic_compare_result_11.old_value = atomicCompSwap(b_i32, 0, value);
|
|
|
|
atomic_compare_result_11.exchanged = atomic_compare_result_11.old_value == 0;
|
|
|
|
atomic_compare_exchange_resulti32 r3 = atomic_compare_result_11;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
layout(local_size_x = 16, local_size_y = 1, local_size_z = 1) in;
|
|
|
|
void main() {
|
|
|
|
tint_symbol(gl_LocalInvocationIndex);
|
|
|
|
return;
|
|
|
|
}
|