Age | Commit message (Collapse) | Author |
|
|
|
If we create multiple instances of an nv50_reg referencing
them same resource, register allocation from alloc_reg has
to be done with the original nv50_reg.
|
|
Also fixes RSQ of negative sources.
|
|
This negation would only be triggered in situations
where it's incorrect.
The caller of set_immd should negate the immediate value
in the instruction itself if desired, and will also know
if it's a float or an int.
ADD TEMP[0], CONST[0], -IMMD[0] would load the immediate
into extra TEMP, negated, and set the negate flag in add
as well - double negation.
|
|
Signed-off-by: Francisco Jerez <currojerez@riseup.net>
|
|
|
|
It doesn't seem to be possible to set the egdeflag in the
vertex shader, so we need to fallback to pushing vertices
through the FIFO and use method 0x15e4 if they are used.
This only works if VP does MOV OUT[X] IN[Y] where X is the
edgeflag output, and Y is saved so we can tell the correct
input later.
The VP still writes the useless values to wasted outputs
as punishment.
|
|
The state tracker now does the correct thing, so
interpret negation normally.
|
|
Before I tried to distinguish int +0 and -0, and regs
relative to $a1 would have been considered reserved
for TGSI.
This would probably never occur, let it be fixed even so.
|
|
This is easier, we don't have to record all the BRK branches
to fill in the address at ENDLOOP - which wasn't done before
and thus made all but the last BRK branch jump to the start.
Also, we don't risk reactivting threads that already left
the loop if we join threads after a conditional with a BRK
(although it might be wiser to remove the join altogether
in such cases).
|
|
|
|
Trying to free part of nv50_pc->reg_instances[] for an
nv50_reg representing an indirect constant resulted in
a segmentation fault.
|
|
Sometimes we want non-float immediates, hacking them into
floats isn't nice.
Sorry, this should have already been committed before.
|
|
|
|
If lod or bias can be non-constant across a quad of fragments,
we need to execute TEX separately for each value.
Don't ask why.
|
|
... and don't set the 'live' flag for TEX anymore, we'd
have to know if results affect the inputs for another TEX,
and I'm not going to do that kind of analysis now.
|
|
|
|
So we can use the 'mod' member without concern
if a source is used multiple times in 1 insn.
|
|
Conflicts:
src/gallium/drivers/r300/r300_vs.c
|
|
For each FP input, don't assume that the VP output will be
at the same position, but scan the semantics instead, then
put the correct output reg indices into VP_RESULT_MAP.
Position is still assumed to be the first output/input.
See 07fafc7c9346aa260829603bf3188596481e9e62, which renders
previous assumptions incorrect.
|
|
|
|
Simplifies things since the second to last one will then
be converted in the subsequent pass that ensures alignment
automatically.
|
|
SrcRegister -> Register
SrcRegisterInd -> Indirect
SrcRegisterDim -> Dimension
SrcRegisterDimInd -> DimIndirect
|
|
DstRegister -> Register
DstRegisterInd -> Indirect
|
|
DeclarationRange -> Range
|
|
InstructionPredicate -> Predicate
InstructionLabel -> Label
InstructionTexture -> Texture
FullSrcRegisters -> Src
FullDstRegisters -> Dst
|
|
Rename Semantic.SemanticName to Semantic.Name. Similar for
SemanticIndex, and the members of the tgsi_version struct.
|
|
It would be nice if these drivers built under the linux-debug header
so that these types of interface changes can be minimally propogated
into those drivers by people without the hardware. They don't have to
generate a working driver -- though a command-dumping winsys would be
an excellent for regression checking.
|
|
|
|
|
|
|
|
Don't assume that a SET that writes to IF's argument
directly precedes the IF.
|
|
Will use AND for gl_FrontFacing, the face input
is either 0 or 0xffffffff.
|
|
Adds a more generic SIFC transfer function.
|
|
We have to indicate to the hw whether the FP exports
multiple colour results.
Method 0x121c is used to specify the number of RTs.
Also deactivate zeta explicitly if there's no zsbuf.
|
|
|
|
|
|
We should really learn to not waste so many though.
|
|
Contained some rather obvious thinking errors before,
and didn't consider offsets from TGSI ADDRESS regs.
|
|
These haven't been used by the mesa state tracker since the
conversion to tgsi_ureg, and it seems that none of the
other state trackers are using it either.
This helps simplify one of the biggest suprises when starting off with
TGSI shaders.
|
|
Allow indirect uniform access and increase the
limit on parameters from 128 to 512.
|
|
|
|
|
|
We only have a per nv50_reg negation flag, if an
nv50_reg is used more than once in a TGSI op with
different sign modes, we'd generate wrong code.
We probably can't do much better without more
invasive changes.
|
|
|
|
If you e.g. only need alpha, it ends up in the first reg,
not the last, as it would when reading rgb too.
|
|
|
|
Separated the integer rounding mode flag for cvt.
|
|
There's a good chance a loop won't execute correctly
though since our TEMP allocation assumes programs to
be executed linearly. Will fix later.
|
|
|