Yes.
The problem is that D3D11 is a "safe" API (i.e. compared to D3D12 and Vulkan where you can do whatever and if it's not safe of race conditions, it's your problem) and UAVs imply write.
To put it into context, D3D11 implicitly issues a full barrier between each compute dispatch.
In the context of Graphics (ie., not Compute), traditionally the only Write operations were to the Colour, Depth and Stencil targets. Everything else was read only.
D3D11 needs to perform various checks. For example feedback loops are forbidden: All bound textures must not be equal to the currently bound Colour, Depth or Stencil targets. Depth target has an exception if depth writes are disabled and the depth buffer was bound with D3D11_DSV_READ_ONLY_DEPTH (the same for Stencil).
When UAVs were introduced to Graphics, an arbitrary amount of textures would be in the same situation as regular colour targets: UAVs can't be bound at the same time as a Colour Target, and no texture can be bound for sampling at the same time as an UAV. The same goes for buffers not being bound as SRV.
This also means that if you want to switch the UAV to read only, it must be unbound as UAV, and bound to read/sample. That will force D3D11 to issue a barrier.
When put from a perspective of hazard tracking, it makes sense Microsoft decided to put UAV binding together with OMSetRenderTargets; since they are so similar that all the hazard tracking from RenderTargets can be reused for UAVs.
But it also meant D3D11's interface for binding UAVs is clunky and quite expensive due to all the hazard tracking and validation.
The truth is that even if we move to D3D12/Vulkan, that awkwardness from D3D11 is gone but only because the responsability was shifted to us. However from our perspective, we're met with the exact same problems D3D11 had. It gets worse if mobile/TBDR are considered (render passes must be closed to issue the barrier; which is problematic if the pass has load + store actions that aren't Load and Store respectively), which is why iOS for a long time didn't support binding UAVs to graphics, and in our Vulkan backend IIRC we don't support all types of UAV bindings for Graphics.
This is why OIT algorithms like per-pixel linked lists are still uncommon in modern day rasterizers: It's a PITA to setup the UAV: we have to correctly guess the space beforehand (and risk glitching if we run out of space, or go the extra mile at engine design to support adding more UAVs mid render).
The general belief is that operations that require UAVs are best rewritten as compute shaders when possible.
Due to all these hurdles, I didn't focus too much on improving UAV in Graphics. There's possibly better approaches (and maybe even unknown solutions?) than what we're doing right now. I just gave up due to difficulty + lack of demand.
If you're wondering what's the difference with Compute, I explained it recently in a Reddit post that graphics follows a set of ordering rules that Compute does not have to follow.
It's also easier to remap the discrepancies between OpenGL and D3D11 in HlmsComputeJob (see next block).
In OpenGL it is definitely possible using SSBO. Is D3D11 limited here?
Another issue I forgot to mention is that OpenGL and D3D11 vastly differed in how UAVs are bound, OpenGL being a lot more flexible (OpenGL will happily let you glitch the render if you cause a feedback loop). But the problem is that the slots don't even match.
D3D11 puts both buffers and textures as slots prefixed with u, so u0 and u1 could be a buffer followed by a texture. While OpenGL used separate binding points for buffers, but UAV textures share binding slots with regular textures. This discrepancy between APIs is incredibly infuriating.
Nowadays I created the concept of RootLayouts for Vulkan, and RootLayouts would easily solve those discrepancies if we used RootLayouts on D3D11 and OpenGL as well; but that class did not exist when our Graphics UAV binding model was written (which begrudgingly ended up using the Compositor).
RootLayouts would solve the problem because it creates fake/virtual binding points that are later remapped to the HW slots.