Age | Commit message (Collapse) | Author |
|
Two definitive bugs in stenciling were fixed.
The first, reversed registers in the generated Select Bytes (selb)
instruction, caused the stenciling INCR and DECR operations to
fail dramatically, putting new values in where old values were
supposed to be and vice versa.
The second caused stencil tiles to not be read and written from
main memory by the SPUs. A per-spu flag, spu.read_depth, was used
to indicate whether the SPU should be reading depth tiles, and was set
only when depth was enabled. A second flag, spu.read_stencil, was
set when stenciling was enabled, but never referenced.
As stenciling and depth are in the same tiles on the Cell, and there
is no corresponding TAG_WRITE_TILE_STENCIL to complement
TAG_WRITE_TILE_COLOR and TAG_WRITE_TILE_Z, I fixed this by
eliminating the unused "spu.read_stencil", renaming "spu.read_depth"
to "spu.read_depth_stencil", and setting it if either stenciling or
depth is enabled.
I also added an optimization to the fragment ops generation code,
that avoids calculating stencil values and/or stencil writemask
when the stencil operations are all KEEP.
|
|
blocks during st_readpixels due to a flush wait not happening in order to allow any previous rendering to complete.
|
|
Scalar calls only use the X component of the src regs and smear the
result across the dest register's X/Y/Z/W.
|
|
Plus add assertions to check status, alignment, etc.
|
|
Doesn't seem to be needed and fixes compilation with SDK 3.1 beta.
|
|
|
|
allows glReadPixels to work correctly on cell now and makes conformance tests that use pixel compares useable.
|
|
|
|
If we delete a texture, we need to keep the underlying tiled data buffer
around until any rendering that references it has completed.
Keep a list of buffers referenced by a rendering batch. Unref/free them when
the associated batch's fence is executed/signalled.
|
|
|
|
|
|
|
|
Allows glDrawPixels to work for now...
|
|
|
|
|
|
|
|
|
|
Distinguish among texture targets in codegen.
progs/demos/cubemap.c runs correctly now too.
|
|
Use the spu_write_decrementer() and spu_read_decrementer() functions to
measure time. Convert to milliseconds according to the system timebase value.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Though, progs/demos/cubemap.c doesn't quite work right...
|
|
|
|
|
|
|
|
|
|
Also handles images smaller than 32x32 now.
|
|
|
|
|
|
Also, optimize register->memory stores.
|
|
The glsl/multitex demo runs now.
|
|
The ai instruction is limited to a 10-bit signed immediate value.
|
|
These are the defects found and fixed so far. Several more have
been observed; I'm working on them.
- Fixed an error in spe_load_uint() that caused incorrect values to be
loaded if the given unsigned value had the low 18 bits as 0,
and that caused inefficient code to be emitted if the given value
had the high 14 bits as 0.
- Fixed a problem in stencil code generation where optional registers
weren't tracked correctly.
- Fixed a problem that the stencil function NEVER was acting as ALWAYS.
- Fixed several problems that could occur if stenciling were enabled but
depth was disabled.
- Fixed a problem with two-sided stencil writemask handling that could
cause a stencil writemask to not be applied.
- Fixed several state permutations that were incorrectly flagged as
not requiring stencil values to be calculated.
|
|
Ensures that SPUs are initialized/ready before proceeding.
This fixes a spurious assertion failure when the SPU-side shader function info
hasn't been returned to the PPU before shader codegen.
|
|
Also, bump up frame size and fix some assertions.
|
|
|
|
|
|
With this fix, the glsl/brick demo runs.
|
|
Lots of restrictions for now (one 2D texture, no mipmaps, etc.) for now
but basic texture demos work.
TEX, TXD, TXP do the same thing for the time being.
|
|
|
|
|
|
|