need for userspace clients to add HOSTDATA0 commands to blit buffers
every 16 dwords. However, it requires using BM_HOSTDATA rather than
BM_ADDR as the target register in the DMA descriptors for the blit
data. The first descriptor for a blit buffer sets up the state using
BM_ADDR. Both types of descriptor work with SRC_BM_OP_SYSTEM_TO_REG in
SRC_CNTL.
the ring as they are sent by the client (enabled with
MACH64_NO_BATCH_DISPATCH). For the "no batch dispatch" path:
- The DMA end of list flag is moved in the COMMIT_RING macro.
- The flush function only starts a new pass if the card has gone idle and
there are descriptors on the ring still unprocessed. This could be
better optimized to flush only when there is a large enough queue on
the card, but we'll always need to flush if we run out of freeable
buffers.
- This path is working up to a point, but lockups still occur. There is a
small performance improvement.
registers for aging
- Disabled frame aging in the drm
- Disable save/restore pattern registers on context switch with DDX
- Move wait for DMA idle from EnterServer to XAA Sync.
- Clean up locking/sync macros in DDX
- Group scissor registers with UPLOAD_MISC in sarea to avoid confusion with
cliprects (mach64 doesn't have hardware cliprects, just the single
scissor).
done with the pattern registers which is not ideal, but works. There
are still lots of places where optimizing is needed. We need to do the
minimum required to sync with the X server on context switches, since
right now things slow down whenever the mouse is moved.
mach64-0-0-3-dma-branch)
- I've partly filled in the dma_dispatch implementation from the vertex
dispatch code. We still need to deal with adding a register reset
buffer to the end of the dma pass. The freelist and blits are also
still to be filled in.
- I've added XF86Config options for the driver: ForcePCIMode - Don't use
AGP for buffers/textures, even if agpgart is present PseudoDMAMode -
Dispatch DMA buffers with MMIO, one register at a time. AgpMode - 1 or
2 AgpSize - Size of AGP aperture to use for allocations BufferSize -
Size of vertex buffers in MB (1 or 2)
still be forced at compile time by setting MACH64_USE_DMA to 0.
DMA test now uses already allocated pci pool memory for descriptor table
and allocates a temporary dma buffer from the pool. This should
probabaly be changed to use one of our mapped vertex/dma buffers.
Also, return error code if _dispatch_vertex causes a lockup, either with
DMA (wait for idle fails) or MMIO (wait for fifo times out).
functional for both PCI and AGP). 16 KB descriptor table is created by
the drm and the handles stored in the device private structure.
Finish setup of AGP -- AGP registers are now initialized.
Fix up MMIO for PCI.
register writes.
Register addresses in command/vertex buffer now specified by memory-mapped
address, which is needed for real DMA.
Fix multi-reg write increment in pseudo-DMA flush (byte address needs +4
incr.).
Restore DMAGETPTR grouping of state register writes.
mapped in the DDX driver and Mesa client. DRI and Mesa screen
structures updated to add agp texture region data. The AGP card heap is
not setup in the Mesa driver screen init yet, so about all this does
right now is print AGP mode info in the renderer string and the texture
region should show up in the X log and /proc/dri
Implementation of several functions to support the handling of DMA
buffers. The DMA emulation code is disabled because it segfaults when
trying to read the DMA buffer.
to the context struct to hold origin of drawable in draw buffer. The
viewport is adjusted using these fields.
Enabled scissor test, drm now uses scissor values from the sarea context.
Also enabled color masking, drm uses mask from sarea context
(untested).
The viewport calcs seem to be working, but cliprects still have problems
for single buffer contexts and overlapping GL windows. Needs more
testing and debugging. I'm committing now so we can continue with
testing.