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