Natalie Chouinard | 6ee6330 | 2024-06-25 20:45:30 +0000 | [diff] [blame] | 1 | RWByteAddressBuffer prevent_dce : register(u0); |
| 2 | |
Natalie Chouinard | e902718 | 2024-06-13 18:50:19 +0000 | [diff] [blame] | 3 | RWByteAddressBuffer sb_rw : register(u1); |
Antonio Maiorano | 08f4b55 | 2022-05-31 13:20:28 +0000 | [diff] [blame] | 4 | |
Ben Clayton | 1a1b527 | 2023-02-24 17:16:55 +0000 | [diff] [blame] | 5 | uint sb_rwatomicAnd(uint offset, uint value) { |
Ben Clayton | e027e81 | 2021-07-09 16:50:14 +0000 | [diff] [blame] | 6 | uint original_value = 0; |
Ben Clayton | 1a1b527 | 2023-02-24 17:16:55 +0000 | [diff] [blame] | 7 | sb_rw.InterlockedAnd(offset, value, original_value); |
Ben Clayton | e027e81 | 2021-07-09 16:50:14 +0000 | [diff] [blame] | 8 | return original_value; |
| 9 | } |
| 10 | |
Ben Clayton | 6a77236 | 2021-06-18 18:56:13 +0000 | [diff] [blame] | 11 | |
Natalie Chouinard | e902718 | 2024-06-13 18:50:19 +0000 | [diff] [blame] | 12 | uint atomicAnd_85a8d9() { |
Ben Clayton | 1a1b527 | 2023-02-24 17:16:55 +0000 | [diff] [blame] | 13 | uint res = sb_rwatomicAnd(0u, 1u); |
Natalie Chouinard | e902718 | 2024-06-13 18:50:19 +0000 | [diff] [blame] | 14 | return res; |
Ben Clayton | e6d171a | 2021-06-18 18:56:13 +0000 | [diff] [blame] | 15 | } |
Ben Clayton | 6a77236 | 2021-06-18 18:56:13 +0000 | [diff] [blame] | 16 | |
Ben Clayton | e6d171a | 2021-06-18 18:56:13 +0000 | [diff] [blame] | 17 | void fragment_main() { |
Natalie Chouinard | e902718 | 2024-06-13 18:50:19 +0000 | [diff] [blame] | 18 | prevent_dce.Store(0u, asuint(atomicAnd_85a8d9())); |
Ben Clayton | e6d171a | 2021-06-18 18:56:13 +0000 | [diff] [blame] | 19 | return; |
| 20 | } |
| 21 | |
| 22 | [numthreads(1, 1, 1)] |
| 23 | void compute_main() { |
Natalie Chouinard | e902718 | 2024-06-13 18:50:19 +0000 | [diff] [blame] | 24 | prevent_dce.Store(0u, asuint(atomicAnd_85a8d9())); |
Ben Clayton | e6d171a | 2021-06-18 18:56:13 +0000 | [diff] [blame] | 25 | return; |
| 26 | } |