Commit graph

180823 commits

Author SHA1 Message Date
Faith Ekstrand
8781acba18 nak: Allow 1-component image load/store
We get these when we get an atomic image load/store

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:15 +00:00
Faith Ekstrand
ee11b473b5 nak: Implement read_invocation and shuffle_*
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:15 +00:00
Faith Ekstrand
edf015eb7f nak: Fix the encoding of OpShfl
We weren't handling Zero.  Also, we need to mask immediates or else the
encoder blows up.  The hardware automatically masks them when they come
in as sources but when we get immediates, they're not guaranteed to fit
in the bitfield.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:15 +00:00
Faith Ekstrand
5dd7a76c8b nak: Implement vote and ballot
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:15 +00:00
Faith Ekstrand
3df9065296 nak/nir: Zero-pad subgroup masks
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:15 +00:00
Faith Ekstrand
37de14e2e2 nak/nir: Allow boolean vote_ieq
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:15 +00:00
Faith Ekstrand
143d88dcc3 nak: Lower subgroup_id and num_subgroups
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:15 +00:00
Faith Ekstrand
42a305416a nak: Use nir_shader_intrinsics_pass for system values
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:15 +00:00
Faith Ekstrand
ce40d81d46 nak: Call nir_lower_subgroups()
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:15 +00:00
Faith Ekstrand
bf8642e984 nak: Remove unnecessary control barriers
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:15 +00:00
Faith Ekstrand
3468f70ca1 nak: Use barriers for re-convergence
Now that we're getting total re-convergence through barriers, we can
drop our OpWarpSyncs in front of barriers and derivatives

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:15 +00:00
Faith Ekstrand
22468439ff nak: Handle control-flow barriers
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:15 +00:00
Faith Ekstrand
95f368a105 nak: Add OpBreak
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:15 +00:00
Faith Ekstrand
3957124492 nak/nir: Add a pass for adding convergence barriers
This should give us maximum re-convergence

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Faith Ekstrand
eb0d9a1b88 nir: Add nvidia barrier intrinsics
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Faith Ekstrand
4ec66f3e5c nak: Don't print a range for one register
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Faith Ekstrand
f29b714ec9 nak: Drop the final calc_max_live() after GPR spilling
It's dead code.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Faith Ekstrand
ea27d57882 nak: Get rid of warnings in nak_sph.rs
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Faith Ekstrand
bf04914315 nak: Get rid of dead code warnings in RegFileSet
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Faith Ekstrand
9166b3354c nak: Drop some unused helpers
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Faith Ekstrand
d0b724aaac nak: Add some #[allow(dead_code)]
All this is either enums where we want all of them for the sake of
documentation or where I'm pretty sure we want them in the future.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Faith Ekstrand
eb8f907855 nak: Upgrade to more modern meson
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Mary Guillemard
f757508d65 nak: Move nir_lower_int64 after I/O lowering
Signed-off-by: Mary Guillemard <mary.guillemard@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Mary Guillemard
09d3871267 nak: Implement VK_KHR_shader_terminate_invocation
Signed-off-by: Mary Guillemard <mary.guillemard@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Faith Ekstrand
c32b73fdf2 nak: A quick rustfmt fix
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Faith Ekstrand
2b4621b9d8 nak: Use Src::From<u32> and Src::From<bool>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Faith Ekstrand
0616003de9 nak: Rename lower_vec_split() to lower_ineg()
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Faith Ekstrand
a43e6addca nak: Fix fneg to do fadd(-0, x)
Thanks to floating point sillyness, fadd(0, x) isn't a no-op but
fadd(-0, x) is.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Faith Ekstrand
2c1cc06d03 nak: Support encoding -Zero
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Mary Guillemard
a0b517ba3f nak: Ensure we allocate one barrier when using BAR.SYNC
Fix "Illegal Instruction Parameter" when using barrier() on compute
shaders.

Signed-off-by: Mary Guillemard <mary.guillemard@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Faith Ekstrand
29804bfd26 nak/nir: Don't lower 1-bit phis
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Faith Ekstrand
8d802553a2 nak: Fix to_cssa()
I somehow got the dominance check backwards so it's not actually
inserting parallel copies most of the places it should.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Faith Ekstrand
ed187b6e51 nak: Fix parallel copy handling in spilling
Only consider copies with the right file.  Otherwise, the spill chooser
will blow up looking for the next use.  Also, we were marking
destinations as spilled when I ment to mark them as being in W.  This
was a right mess.  God thing to_cssa() was also broken so it wasn't
inserting nearly as many parallel copies as it was supposed to. 🙃

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Faith Ekstrand
2ff6a36e2a nak: Fix repair_ssa() for back-edges
In the presence of nested loops, there is no guarantee that we can
handle back-edges in a single pass.  Instead, use a bitset as a worlist
and repair until we're out of missing sources.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Faith Ekstrand
5839be3c4d nak/sph: Round tls_size up to a multiple of 16
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Faith Ekstrand
009ae6e7f5 nak/bitset: Fix next_set()
It was resetting mask to 0 instead of u32::MAX.  This is a copy+paste
error from when I copied it from next_unset() and tweaked it to find set
bits.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Faith Ekstrand
2cc51639ab nak/bitset: Add an is_empty() helepr
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Faith Ekstrand
0f6d8640e1 nak/bitset: Improve set_words()
Only set the bits requested and don't clobber other bits.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Faith Ekstrand
5b355ff25a nak: Fix opt_out
It was converting instructions to/from Op which throws away predicates.
This meant that any instruction immediately after an OUT.EMIT would
loose its predicate (if any).  If an OUT.EMIT comes right before a BRA,
this results in the branch always getting taken.

While reworking things, I also totally reformatted the pass to make it
more readable IMO.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Mary Guillemard
950db58132 nak: Add geometry shader support
Tested on SM75 and SM86.

Signed-off-by: Mary Guillemard <mary.guillemard@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Faith Ekstrand
c87693a700 nak: Fix a bunch of warnings
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
M Henning
09d78e8572 nak: Memory order/scope encodings for Ampere
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
M Henning
ad0743c948 nak: Remove MemScope::Cluster
because
 * ptxas refuses inputs with .cluster before sm90
 * on sm90 ptxas encodes .cluster as .gpu
 * nvdisasm calls this encoding on sm75 .SM
so I don't think we have an actual .cluster on any released gpus

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
M Henning
93f83a948f nak: Fix a warn(unused_must_use) by calling drop
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Daniel Almeida
590133b28d nak: add support for atomic cmpxcgh on images
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Faith Ekstrand
f85069ed57 nak: Use nak_nir_lower_vtg_io
This massively simplifies nak_from_nir.rs because it lets us do all the
annoying NIR fiddling in NIR and not in the back-end.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Faith Ekstrand
7ece220f96 nak/nir: Lower systm values before lowering I/O
This way I/O lowering can lower the stuff we generate in
lower_system_values().

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Faith Ekstrand
abe9c1fea2 nak: Add NIR lowering for attribute I/O
This adds 4 NIR intrinsics for attribute I/O which match the Turing
hardware instructions as well as a lowering pass to lower
load/store[_per_vertex]_input/output to thewe intrinsics.  This greatly
simplifies nak_to_nir.rs.  Also, this pass is able to handle a bunch of
cases that the current code in nak_from_nir.rs can't:

 - Misaligned access (i.e., a vec3 load at 0x0f4)

 - Write masks on store[_per_vertex]_output

 - Indirect load/store where we need to use AL2P to get physical
   addresses, including scalarizing those cases

It also handles the casses where we need to use ISBERD on vertex indices
in the same pass.  When we switch to this, we'll rip out the dedicated
per_vertex lowering pass.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Faith Ekstrand
c1ffdb3ee9 nak/nir: Use count_vec4_slots instead of count_attribute_slots
This will give us the correct behavior in for doubles when the time
comes.  The count_attribute_slots() helper is for GL attributes where a
dvec4 countes as one slot.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00
Faith Ekstrand
498afcdb88 HACK: Only emit OpBar in compute shaders
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:14 +00:00