Commit graph

167022 commits

Author SHA1 Message Date
Faith Ekstrand
2387dfdf6b nak: Implement nir_op_ixor
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
6ab0d7ee23 Revert "HACK: nak: Lower iadd64 again"
This reverts commit 88b14e4ab9e272bfb33bea4057aacbdd5a16ae5b.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
6e5c960434 nak: Implement nir_op[iu]mul_2x32_64
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
392d3791a8 nak: Much more believable try_find_unused_reg_range()
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
f3e1379bdf nak: Add a use tracker to RA
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
10deb1d62b nak: Legalize vector sources
It is possible for a single scalar to show up in any number of vector
components, including twice in the same vector.  Add a bit to the
legalization pass to deal with this possibility.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
9ef47c8921 nak: Rework vector handling
Previously, we handled vectors by giving each SSAValue a number of
components which we assume matches in all uses.  To deal with swizzles
and component selection, we had OpVec and OpSplit instructions to
convert vectors to/from scalars as-needed.  This is fine as an SSA
representation but it leads to a lot of redundant values when it comes
time for assigning registers.  There are strategies for dealing with
this such as ensuring that splits always kill the whole vector and then
re-combining into a new vector for later uses.  It's possible by doing
this to ensure that each component only ever exists exactly once at the
cost of a LOT of vec/split instructions.

Another possible solution is to naievely emit vec/split but teach
liveness analysis and RA bout the duplicated values.  Instead of RA
working on individual SSA values, it can work on equivalence classes of
components.

This takes a different (and currently novel to Mesa) approach of making
each SSAValue a single component but having an SSARef type which can
reference up to 4 SSAValues as a vector.  Register allocation then works
on individual components and only ensures that the components of a
vector are contiguous when it's used as a vector.  This isn't very
different from how it worked before.  If anything, it's a bit more
straightforward now because the component/vector split uses the same
types as the rest of the IR and the SSAComp is gone.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
a9e79994a7 nak: Add a debug flag to assign worst-case instruction deps
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
e3222b2227 nvk: Pass NAK flags through to shader cache UUIDs
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
a41ab7535e nvk: Drop printing of NAK shaders
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
9daa595ee3 nak: Add a NAK_DEBUG environment variable
Also, hide printing behind it and clean up the print code a bit.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
4c81f87670 HACK: spirv: Add a MESA_SPIRV_DUMP_PATH environment variable
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
145f43a9a1 nak: Simplify the (Srcs|Dsts)AsSlice proc macro
Instead of building a token stream for the size, just parse it as a
usize.  This is way simpler.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Daniel Almeida
09216cd9f4 nak: make Instr::new() generic
The previous signature for Instr::new() was too restrictive in that it
would create a new Instr from Op, but not from T: Into<Op>.

Fix that by introducing a generic version instead.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
b448151925 nak: Simplify the FromVariants proc macro
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Daniel Almeida
fc3ef0a251 nak: derive From<OpFoo> for Op through a proc macro
Derive From<OpFoo> for Op through a proc macro. This is much less
verbose than adding a manual impl From {..} for all Ops in the
NAK IR.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
a70423944b nak: Wire up texture ops
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
9d7e1d515f nak: Use more core NIR texture lowering
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
ad01fbdda0 nak: Add a NIR texture lowering pass
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
31ecffa3a3 nak: Enable nir_lower_idiv
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
c21550e596 nak: Implement nir_op_[iu]mul[_high]
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
1825f54d79 nak: Implement right-shifts
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
90a05b5591 nak: Add more legalization
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
b6596b0a53 nak: Wire up ffma
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
c2f72a5782 nak: Implement f2[iu]32
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
0943da1a37 nak: Implement OpFSOut with an OpParCopy
This prevents ordering issues among the sources.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
d6912622f5 nak: Use immediage offsets for load/store_global
In order to facilitate this, we add a little helper in C which uses
nir_ssa_scalar chasing to find an iadd of a thing and an immediate.
This should be reliable as long as we're not lowering iadd64.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
871bd62fe5 nak: Handle multiple vector destinations in RA
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
8c358ce105 nak: Implement input interpolation
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
6595abc1e0 nak: Move nak_sysval_attr_addr/sysval_idx higher in the file
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
88f7056d09 nak: Implement MuFu and a bunch of float unops
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
f9f9399773 nak: Implement nir_op_vecN
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:09 +00:00
Faith Ekstrand
0c23df7da2 nak: Implement nir_op_u2f
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:08 +00:00
Faith Ekstrand
3acb1f80b8 nak: Implement nir_op_(fmin|fmax)
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:08 +00:00
Faith Ekstrand
d86e75e507 nak: Implement nir_op_fmul
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:08 +00:00
Faith Ekstrand
f2a7cda75a nak: Implement nir_op_[iu](min|max)
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:08 +00:00
Faith Ekstrand
63dcc7c75a nak: Predicates default to true
The one exception to this is IADD3 where the carry bit default to false
when the default reg (P7) is provided.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:08 +00:00
Faith Ekstrand
0cbab15de5 nak: Fold [P]Lop3 sources
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:08 +00:00
Faith Ekstrand
ed42571e83 nak: Implement nir_op_i(eq|ne) for booleans
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:08 +00:00
Faith Ekstrand
3fd47a68a1 nak: Handle token re-use in dep tracking
When we run out of tokens, instead of panicing, grab the oldest token
and re-use it, adding it to the wait list for the instruction.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:08 +00:00
Faith Ekstrand
991fa18f6e nak: Improve the dependency tracker
Break the bar/dep allocator out into a helper struct for better
encapsulation.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:08 +00:00
Faith Ekstrand
af752f73dc nak: Add a non-trivial register allocator
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:08 +00:00
Faith Ekstrand
40fbf6bed2 nak: Add a liveness analysis pass
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:08 +00:00
Faith Ekstrand
3b39778fdd nak: Add a space to the end of vec and split arg lists
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:08 +00:00
Faith Ekstrand
8004416e38 nak: Rework phis
Have a single phi src/dest instruction per block which handles all the
phis at one go.  This makes phis very similar to parallel copies.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:08 +00:00
Faith Ekstrand
15a4b620b9 nak: Rework dead-code
It can now handle loops and parallel copies are handled one copy at a
time instead of being handled as a whole instruction.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:08 +00:00
Faith Ekstrand
ef45379bfa nak: Add an SSAComp struct
This is useful in RA for referring to a single component of an SSA
value.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:08 +00:00
Faith Ekstrand
552faf2864 nak: Add a BitSet struct
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:08 +00:00
Faith Ekstrand
d10ff2bdcd nak: Rename BitSetView to BitView
We're about to add a BitSet struct which is like a HashSet and it's an
entirely different concept.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:08 +00:00
Faith Ekstrand
e1be53e266 nak: Get rid of the BitSet and BitSetMut traits
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
2023-11-14 00:48:08 +00:00