nir: Add nir_lower_robust_access pass
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>
Tue, 27 Jun 2023 20:29:55 +0000 (16:29 -0400)
committerMarge Bot <emma+marge@anholt.net>
Thu, 29 Jun 2023 22:36:50 +0000 (22:36 +0000)
commitf0fb8d05e30c51e070155c957f3b71cf31c4b784
tree5fcdfe6237c8a0c3ddc9acb8cacad0e2f1503400
parentbafbfc57ea836716a76a286c93f53641b315e274
nir: Add nir_lower_robust_access pass

Add a pass for bounds checking UBOs, SSBOs, and images to implement robustness.
This pass is based on v3d_nir_lower_robust_access.c, with significant
modifications to be appropriate for common code. Notably:

* v3d-isms are removed.
* Stop generating invalid imageSize() instructions for cube maps, this
  blows up nir_validate with asahi's lowerings.
* Logic to wrap an intrinsic in an if-statement is extracted in anticipation of
  future robustness2 support that will reuse that code path for buffers.
* Misc cleanups to follow modern NIR best practice. This pass is noticeably
  shorter than the original v3d version.

For future support of robustness2, I envision the booleans turning into tristate
enums.

There's a few more knobs added for Asahi's benefit. Apple hardware can do
imageLoad and imageStore to non-buffer images (only).  There is no support for
image atomics. To handle, Asahi implements software lowering for buffer images
and for image atomics. While the hardware is robust, the software paths are not.
So we would like to use this pass to lower robustness for the software paths but
not the hardware paths.

Or maybe we want a filter callback?

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23895>
src/compiler/nir/meson.build
src/compiler/nir/nir.h
src/compiler/nir/nir_lower_robust_access.c [new file with mode: 0644]