| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
| |
Before we were asuming that a deref would either be something in a block or
something that we could pass off to NIR directly. However, it is possible
that someone would choose to load/store/copy a split structure all in one
go. We need to be able to handle that.
|
|
|
|
| |
This makes dealing with single-component derefs easier
|
|
|
|
|
| |
This makes them much easier to construct because you can also just specify
a literal number and it doesn't have to be a valid SPIR-V id.
|
|
|
|
| |
This is similar to what we did for block loads/stores.
|
|
|
|
|
| |
This allows us, among other things, to do structure splitting on-the-fly to
more correctly handle input/output structs.
|
|
|
|
| |
It's 1300 lines all by itself and it will only grow.
|
|
|
|
|
|
|
| |
Previously, we were creating nir_deref's immediately. Now, instead, we
have an intermediate vtn_access_chain structure. While a little more
awkward initially, this will allow us to more easily do structure splitting
on-the-fly.
|
| |
|
|
|
|
|
| |
Jason left these stray code fragments in
22804de110b97dce1415318fd02c1003e16ef14a.
|
|
|
|
| |
This is needed for SKL as well.
|
|
|
|
|
|
|
| |
If we're continuing a render pass, make sure we don't emit the depth and
stencil buffer addresses before we set the state base addresses.
Fixes crucible func.cmd-buffer.small-secondaries
|
|
|
|
|
|
|
| |
This currently sets the base and size of all push constants to the
entire push constant block. The idea is that we'll use the base and size
to eventually optimize the amount we actually push, but for now we don't
do that.
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Unfortunately, this also means that we need to use a slightly different
algorithm for assign_constant_locations. The old algorithm worked based on
the assumption that each read of a uniform value read exactly one float.
If it encountered a MOV_INDIRECT, it would immediately bail and push the
whole thing. Since we can now read ranges using MOV_INDIRECT, we need to
be able to push a series of floats without breaking them up. To do this,
we use an algorithm similar to the on in split_virtual_grfs.
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This commit moves us to an instruction based model rather than a
register-based model for indirects. This is more accurate anyway as we
have to emit instructions to resolve the reladdr. It's also a lot simpler
because it gets rid of the recursive reladdr problem by design.
One side-effect of this is that we need a whole new algorithm in
move_uniform_array_access_to_pull_constants. This new algorithm is much
more straightforward than the old one and is fairly similar to what we're
already doing in the FS backend.
|
| |
| |
| |
| | |
It's not really doing enough anymore to justify a helper function.
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Now that we have MOV_INDIRECT opcodes, we have all of the size information
we need directly in the opcode. With a little restructuring of the
algorithm used in assign_constant_locations we don't need param_size
anymore. The big thing to watch out for now, however, is that you can have
two ranges overlap where neither contains the other. In order to deal with
this, we make the first pass just flag what needs pulling and handle
assigning pull constant locations until later.
|
| |
| |
| |
| | |
We aren't using it anymore.
|
| |
| |
| |
| |
| |
| |
| |
| | |
Instead of using reladdr, this commit changes the FS backend to emit a
MOV_INDIRECT whenever we need an indirect uniform load. We also have to
rework some of the other bits of the backend to handle this new form of
uniform load. The obvious change is that demote_pull_constants now acts
more like a lowering pass when it hits a MOV_INDIRECT.
|
| | |
|
| | |
|
| |
| |
| |
| |
| |
| |
| | |
While we're at it, we also add support for the possibility that the
indirect is, in fact, a constant. This shouldn't happen in the common case
(if it does, that means NIR failed to constant-fold something), but it's
possible so we should handle it.
|
| |
| |
| |
| | |
The subnr field is in bytes so we don't need to multiply by type_sz.
|
| |
| |
| |
| | |
It should work fine without it and the visitor can set it if it wants.
|
| | |
|
| |
| |
| |
| | |
Signed-off-by: Jordan Justen <[email protected]>
|
| |
| |
| |
| | |
Signed-off-by: Jordan Justen <[email protected]>
|
| |
| |
| |
| | |
Signed-off-by: Jordan Justen <[email protected]>
|
| |
| |
| |
| |
| |
| | |
Port 044acb9256046bebec890cac7e42043754459fc2 to anv.
Signed-off-by: Jordan Justen <[email protected]>
|
| |
| |
| |
| | |
Signed-off-by: Jordan Justen <[email protected]>
|
| |
| |
| |
| | |
Signed-off-by: Jordan Justen <[email protected]>
|
| |
| |
| |
| | |
Signed-off-by: Jordan Justen <[email protected]>
|
| |
| |
| |
| | |
Signed-off-by: Jordan Justen <[email protected]>
|
| |
| |
| |
| | |
Signed-off-by: Jordan Justen <[email protected]>
|
| |
| |
| |
| |
| |
| |
| |
| | |
This allows us to first generate atomic operations for shared
variables using these opcodes, and then later we can lower those to
the shared atomics intrinsics with nir_lower_io.
Signed-off-by: Jordan Justen <[email protected]>
|
| |
| |
| |
| |
| |
| |
| |
| | |
Previously we were receiving shared variable accesses via a lowered
intrinsic function from glsl. This change allows us to send in
variables instead. For example, when converting from SPIR-V.
Signed-off-by: Jordan Justen <[email protected]>
|
| |
| |
| |
| | |
Signed-off-by: Jordan Justen <[email protected]>
|
| |
| |
| |
| | |
Signed-off-by: Jordan Justen <[email protected]>
|
| | |
|
| |
| |
| |
| | |
Most of the file-level comment in isl.h is moved to the README.
|
| |
| |
| |
| | |
We can't allocate 4 billion samplers. Let's go with 64k.
|
| | |
|
| | |
|
| |
| |
| |
| | |
This was just wrong.
|
| | |
|
| | |
|