<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/125698>125698</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[HLSL][SPIRV] Handle atomic operations on RWBuffers
</td>
</tr>
<tr>
<th>Labels</th>
<td>
HLSL,
backend:SPIR-V
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
s-perron
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
s-perron
</td>
</tr>
</table>
<pre>
In HLSL, RWBuffer can be used in atomic operations. The existing code can handle only direct loads and stores.
See https://godbolt.org/z/9s3sfen4h for an example. The HLSL source is:
```
RWBuffer<int> b : register(u0);
[numthreads(1,1,1)]
void main()
{
int a;
InterlockedAdd(b[0], 1, a);
}
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJxkkkFr6zgQxz_N-DIkKGMrtg8-OMmGFnpY2qV7lqVJrK0iBUku7X76hxP39fEeSAgG_r-ZET-Vkj175g7kDojS6soxBg9EIA-FmvIYYvdVLYZgPrtHjw9PL09Ae3z-dzedThxRK48D45TYoPWocrhYjeHKUWUbfFrjPyMjf9iUrT-jDoZvmVF54xiDd59obGSd0QVlEipvMOUQOa1B9CD6F2Ycc74mKHugI9DxHMwQXF6HeAY6_g90bFOZTuyrEU8hovLIH-pydXzvPg-NKUxRM9ob5gaGrViO6L_2gXJvfYbyLxwQyh4jn23KHIGaSQC1UO6WsNz56ZLHyMokoGYDtF9uC_IAon8P1uBFWQ_UzEXRQz2HERGtz6juLHz0maML-o1NbwxQM4DciZlBe5yRqL4b14dfBy9MV5q2bFXB3aYum21DTS2LsdNDrbWRTT2UJ7VhrrZ1RdS0otUnapUobEeCpCBRbSTVslpzTcyb6qS0kbqRLVSCL8q6tXPvl_mnC5vSxN2G5LZtCqcGdmlx5y4FAe2BaFD6jb2Bsn_5-_F59boIFbsZtBqmc4JKOJty-kZnm91NxBtJHkDu5vAryAM-3EX5QywM_qeFqZii636TxOZxGtY6XICOc6flWV1j-I91BjreNkpAx2Wp945-BAAA__-i6u9w">