d3d12: Support SSBOs

Merged Jesse Natalie requested to merge jenatali/mesa:d3d12-ssbos into main

The first couple patches fix up the DXIL emitter to work with GL NIR (as opposed to SPIR-V). The DXIL SSBO lowering patch (to ensure up-to-4 components of 32-bit values are being stored) is augmented to understand write masks and skip writing those values. This is needed because DXIL apparently doesn't support masked writes, only N-component writes with no holes.

Then some pretty straightforward patches to the D3D12 gallium driver to add the state tracking for SSBOs and hook up the compiler changes, including lighting up the new caps. The CI failures being baselined here fall into 3 categories:

  • One more "spurious window resize" failure (passes locally).
  • 6 atomics failures that I don't reproduce locally. I suspect these are WARP bugs in the older WARP being used in CI that have since been fixed.
  • One failure which seems to be a test bug, missing a caps check for sampler buffers.

The last patch is just a bugfix that removes some D3D debug layer errors we cause.

Merge request reports