Only try to build Linux support on Linux. We should probably disable all
OS-dependent DDXes if we don't have a workable OS (and only build
Xephyr/Xfake), but that's future work.
Move the bell into an OS function, and use that if it's declared; else,
fall back to using the driver's function.
Remove the Linux keyboard bell function; just move it into the OS layer.
Use named initialisers when converting the old structures, and eliminate
unused functions.
Add KdOsAddInputDrivers, which adds all relevant input drivers.
Could possibly be refactored to KdAddInputDrivers, which called through
OsFuncs to a new function, if it existed.
Move the keymap copying to event processing time (in
ProcessInputEvents), instead of being at event enqueuing time.
Break SetCore{Pointer,Keyboard} out into separate functions.
Change mieqEnqueue to take a device pointer, that asks for the
_original_ device associated with this event.
Don't allocate events on every GKE/GKVE/GPE call, just have the DDX manage
it instead. Introduce GetMaximumEventsNum(), which is the maximum number
of events these functions will ever produce.
Add the 'ephyr' mouse and keyboard drivers to the driver list so we can
re-add devices.
Set the names properly in Ephyr{Keyboard,Mouse}Init, not in InitInput.
Do a linear n -> n initialisation on the map up until KD_MAX_BUTTON in
KdNewPointer, moving it out of both KdParsePointer, and KdPointerProc.
Also remove dead pointer acceleration code.
Initialise our axes properly in the DIX, and make sure we don't
unnecessarily clip maxval when it's not set.
Fix keymap copying in Xephyr (to some degree: it's still broken),
and set nAxes and nButtons properly.
Convert KDrive to GPE/GKE interface.
Add first-class drivers and enumerate every device separately through
Xi, instead of lamely attempting to aggregate them.
Add XKB support to the Linux keyboard driver.
Add 'thumb button' support to the tslib driver.
Rejig InitInput, so each DDX has to add a list of drivers it supports.
Support NewInputDeviceRequest, et al.
Add #include <sys/file.h> on Solaris for FNONBLOCK/FASYNC definitions
hw/kdriver/linux/Makefile.am Move agp.c & agp.h to KDRIVE_HW_SOURCES since
they're not needed for Xephyr-only builds
Add -lrt to XEPHYR_LIBS if needed to get nanosleep().
down into an OutReverse and an Add. Turn off the fallback to software
glyphs when component alpha, now that we expect all (new) drivers to be
able to support it. Also, make Xephyr fall back in the CA Over case to
exercise this code. This speeds up my rgb24text and ls -lR in
gnome-terminal by a factor of 5.
lack of a better name. This one behaves somewhat between Greedy and
Always. It moves in if we can accelerate, unless the destination is
clean and shouldn't be kept in framebuffer according to the score, in
which case we migrate out (and force-migrate anything where migration
is free). This should help fix lack of acceleration for drivers without
UTS since removing exaAsyncPixmapGCOps, and has removed one performance
trap with Radeon I'd noticed. It is the new default.
devPrivate.ptr when pointing at offscreen memory, outside of
exaPrepare/FinishAccess(). This was used with fakexa to find (by NULL
dereference) many instances of un-Prepared CPU access to the
framebuffer:
- GC tiles used in several ops when fillStyle == FillTiled were never
Prepared.
- Migration could lead to un-Prepared access to mask data in render's
Trapezoids and Triangles
- PutImage's UploadToScreen failure fallback failed to Prepare.
acceleration, and set the migration scheme to Always on init (since
this is all for testing, and Always should make migration happen more
frequently than Greedy).
same width/height for front-buffer drawing. The fakexa code then uses
this extra space for offscreen pixmaps. Note that this tones down the
absurdity of fakexa's offscreen pixmap alignment requirements (odd
alignment is too weird, so stick with "24", which is still strange but
exists out there). It also fixes a couple of bugs in the fakexa
implementation revealed by using offscreen pixmaps.
when extending the driver interface. The card and accel structures are
merged into the ExaDriverRec, which is to be allocated using
exaDriverAlloc(). The driver structure also grows exa_major and
exa_minor, which drivers fill in and have checked by EXA
(double-checking that the driver really did check that the EXA version
was correct). Removes exaInitCard(), which is replaced by the driver
filling in the rec by hand, and the exaGetVersion() and related
EXA_*VERSION which are replaced by always using the XFree86 loadable
module versioning.
implementation that calls fb to get its work done. The purpose is to
have a trusted EXA driver for use with testing changes to the core of
EXA. However, fakexa has not received much testing yet, lacks offscreen
pixmaps support, and doesn't reliably provide garbage when EXA doesn't
get its syncing right. All of these should be fixed soon.
Attempt to build xeglmodule.c, not xglxmodule.c.
Add xf86Sbus.h to EXTRA_DIST, as _HEADERS doesn't appear to get the same
treatment as _SOURCES in terms of automatically DISTing.
Changed the semantics of the Convolution filter a bit. It now doesn't try
to normalize the filter values but leaves this to the client. This
gives more reasonable behaviour in the limit where the filter
parameters sum up to 0.
implementation. Includes cache flushing to prevent bad first reads of
the framebuffer, fixing blending of many formats, falling back on many
unsupported operations, and falling back early to prevent migration.
Passes all of rendercheck except some of the blend (!) tests.
in the kaa structure: markSync and waitMarker. The first, if set,
returns a hardware-dependent marker number which can then be waited for
with waitMarker. If markSync is absent (which is the case on all
drivers currently), waitMarker must wait for idle on any given marker
number. The intention is to allow for more parallelism when we get
downloading from framebuffer, or more fine-grained idling.
- Replace the KdMarkSync/KdCheckSync functions with kaaMarkSync and
kaaWaitSync. These will need to be refined when KAA starts being smart
about using them. Merge kpict.c into kasync.c since kasyn.c has all the
rest of these fallback funcs.
- Restructure all drivers to initialize a KaaInfo structure by hand rather
than statically in dubious order.
- Whack the i810 driver into shape in hopes that it'll work after this
change (it certainly wouldn't have before this). Doesn't support my
i845 though.
- Make a new KXV helper to avoid duplicated code to fill the region with
the necessary color key. Use it in i810 and mach64 (tested).
When COMPOSITE is enabled, call CopyWindow even when the pixels "don't
move" on screen.
Don't reject modes that are not supported by the unused monitor.
but includes debugging to ensure that the reg being submitted is the
one that follows in the packet. Convert most uses of OUT_RING to it,
and convert a couple of OUT_REG sets to DMA_PACKET0/OUT_RING_REG. Also,
add checking to see if more registers are submitted to a DMA_PACKET0
than should be, to avoid hangs during stupid mistakes (checking for
less isn't done).
reading a register/attempting DMA. Now it'll wait for a certain number
of seconds rather than a certain number of times through the loop
before deciding that it's timed out and resetting the hardware. Also,
add more timeout handling, and reset the draw state after resetting the
engine.
are always emitted. Fix the real problem, which was not enough regs
being initialized in ati_draw.c. Fix a typo that was resulting in alpha
coming out as 0 * src or 0 * broken instead of src * 1 or src * mask.
Assign the blending results to R0, as appears to be necessary. Unbreak
the dst-alpha-blend-with-no-dst-alpha code. Yow. And set the right DMA
count for the r200 traps code.
non-mask rendering. Reenable it. Also, R200TexFormats was used instead
of R100 in one place. Harmless so far, because the formats were in the
same order.
troubles.
- Move the RemoveBlockAndWakeupHandlers to match
RegisterBlockAndWakeupHandlers.
- Enable R100 trapezoid "acceleration" when DRI is working, so that it can
be exposed and worked on.
instead of ErrorFs for things that are really bad, and put limits on
some loops. Now, sometimes instead of hanging the entire system, we
(mostly-) cleanly drop to console when the card has hung.
not doing an add of 1 per triangle like I hoped, and instead seems to
be saturating all the pixels or something. The R100 acceleration
renders pretty well, with some gaps. Note that both are slower than
software due to lack of DMA to submit vertices.
- Mostly fix R128 and Radeon transform support, including supporting
bilinear filtering on R128. Subpixel offsets are still probably an
issue (reported by rendercheck), but I want to make 100% sure about my
understanding of the protocol before changing everybody, including fb.
- Add support for dst formats without alpha to R128 Composite.
- Remove the R128 Blend code, which has long outlived its usefulness. (I
kept it around for one reason: It could be useful for the w/h > 1024
case with no mask and a non-src op. That seems pretty infrequent and
not worth the trouble).
might be able to do Precise in hardware, so leave it up to the driver.
- Add a helper function for computing a set of offsets for smooth trapezoid
rasterizing using many sharp trapezoids.
RasterizeTrapezoid screen function. These hooks will be called for
imprecise, non-sharp trapezoids with A8 destinations.
Note that the current main consumer of trapezoids, cairo, is requesting
precise, sharp trapezoids by not changing the default Picture
attributes, but gets non-sharp effects in software because fb bases its
choice of sharp/non-sharp on the mask format being A8 vs A1, and cairo
asks for A8. Follow fb's (poor?) example by ignoring the sharp setting
and basing the choice off of the mask being A8.
heuristic, delay the decision until the first
kaaPixmapUse{Screen|Memory}, and put it in framebuffer if UseScreen was
called. Provides a significant improvement in cairo speeds (100%
speedup in cairogears here) and is likely to improve text performance
as well.
rate selection necessary for Mac fbdev
Don't know about fb changes to pixmaps, so can't track dirt.
Add Mac specific 1280x854 mode. Warn when requested mode isn't found.
Add ability to soft-boot video cards.
Add region expand request. FIXME: need test cases
- On R128, don't refer to an old Composite's mask transform when the
current Composite doesn't have a mask.
- Staticize some global variables in r128_composite.c.
header include. I don't know how this happened, but I'm going to blame
a "few" fscks having happened between testing the code and committing
(due to other driver changes that made me not blame dirty for the
failures I saw) for disappearance of kasync.c changes. Fixes a lot of
corruption.
offscreen pixmap area, and set it when any rendering occurs. When
moving a pixmap out of offscreen, don't read data back if it wasn't
dirtied (compared to the system memory copy).
out when allocation can't find a free area of the requested size. When
offscreen pixmaps get used, the offscreen area's score is increased by
a constant value. Every certain number of increases, all offscreen area
scores get decreased by a fraction. When choosing a set of areas to
remove for a new allocation, the set of areas with the smallest total
score is chosen for removal. While this is not the smartest system, it
prevents things like always removing the first offscreen area in memory
(likely the most recent) to be kicked out when doing replacing.
solid-fill-based composite acceleration.
- Use a real pixmap when doing an UploadToScratch (For pDrawable->type ==
DRAWABLE_WINDOW, you need to get the backing pixmap).
- Pass back the x/y offsets from kaaGetOffscreenPixmap unconditionally,
because they'll be used in the scratch case.
- Turn on the Render acceleration for Rage 128 and Radeon 100-series at
last!
Fix a few allocation bugs with alternate visual ids Allow for non-8/8/8
alternate visuals
Turn off any existing shadow before enabling it again (avoids
re-registering existing damage)
Add some validation code to catch re-registered damages
addition to the ARGB32 one. This allows 'glitz' to run on top of any X
server using mesa.
Switch to using 32bpp for depth 24 pixmaps (even when the frame buffer is
not depth 24).
KdCheckSync -- the boolean used in the latter won't be set yet.
Oops. == instead of =.
Must sync hardware before rasterizing trapezoids in case the mask is in
off-screen memory and has just been erased. Yes, it is silly to place
masks in off-screen memory. That's a separate issue.
Off-screen reallocation could have used a stale pointer.
Separate framebuffer mapping computation from actual frame buffer mapping.
Now map the frame buffer from vesaEnable so that VT switch shares the
same mapping code. This makes sure any shadow framebuffer is allocated
again.
- Add monochrome hardware cursor support.
- Try to auto-detect AGP support for DRI on Radeons. And fail. Detect it
properly on R128.
- Set up card for pseudo-DMA if possible. Convert 2D rendering code to
prepare DMA packets only. Use generic code to decode DMA packets to
MMIO if PDMA is unavailable. Add WIP code to support "real" DMA without
DRM support.
- Dispatch pending DMA commands when the server sleeps. Otherwise some
things, such as typing in an xterm, wouldn't show up for a time.
- Fix Radeon Composite acceleration in many ways, and add Rage 128
Composite acceleration. Disable them both due to still-not-understood
issues they have. They fail with In, Out, AtopReverse, and Xor, and
text rendering is strange.
- Add textured XV support for R100 and Rage 128. No brightness/sat
controls, but it does support multiple ports, and cooperates with
Composite.
- Add WIP code for hostdata uploads.
- Many cleanups and fixes.
ati driver, cascading between VESA and FBDEV. We only have init
functions done so far; need to add all of the others. Fixed some
compiler warnings. Whitespace and formatting cleanups (using 4 spaces,
no tabs)
Get rid of all references to SCO.
Change SDK include dir to $(includedir)/xizzle. Add SDK libs where
necessary.
Reformat to be nicer and easier to shuffle around; also, fix lib ordering
so we get so much closer to the elusive final link. Shuffle
common/xf86Init.c into libxizzle.a.
Fix a couple of early snafus - s/BUILDXI/XINPUT/, et al; make the SDK stuff
conditional as needed; fix the SBus includes.
Name library os-support/libxizzleos.a, not os-support/foo/libxizzlefoo.a.
Clean up ARCH_SOURCES so it's always initialised to something.
Move linked libraries to _LIBADD, which somehow escaped my attention. Make
inclusion of drm/libxizzlelinuxdrm.a dependent on DRI.
s/VERSION/VBE_VERSION/;
Axe this redundant dir.
All Xizzle-specific: axe hw/xizzle/Xi, shuffle link order, fix list of
required modules to be vaguely sane, add some pertinent libs/incs.
anyone uses this in production, a big scary monster will eat them. hrm,
perhaps i should make it have a --i-know-what-i'm-doing param that it
doens't start without, heh
- Reserve areas for back/depth/span when USING_DRI && GLXEXT. This would be
better in a TransitionTo3d, but we'd need to work with the offscreen
memory manager for that.
- Misc. fixes to ati_dri.c for DRI+GLX. Needs more work still.
pixmap into temporary offscreen storage. Subsequent UploadToScratch may
clobber the data of previous ones. This allows hardware acceleration of
composite operations on glyphs.
- Add a new UploadToScreen kaa hook for doing the actual moving of data to
framebuffer. This would allow us to do things like hostdata blits or
memcpy to agp and then blit.
- Add an UploadToScreen on ATI which is just memcpy, but which will be
replaced with a hostdata blit soon.
- Add UploadToScratch on ATI and reserve 64k of scratch space. This
provided a 3x speedup of rgb24text on my Radeon.
emitting as a tri fan rather than a tri list. A rect list would save an
additional vertex (out of 4) per rectangle, but there's no measurable
speed difference and the tri fan may be useful when transforms come
into play.
accel. I don't 100% trust that the math works for Saturate, but I can't
tell from existing information.
- Fix texture pitch fallback checks.
- Fallback when src or mask have transforms.
- Disable Radeon Composite accel until the offset thing is fixed.
- Set offscreenPitch to 64 on Radeon thanks to new information and a kaa
fix. Fixes acceleration at width!=1024.
functions. Along with making things more readable, it fixes a problem
where the coordinates would get messed up if acceleration failed due to
things like pixmaps being in the wrong locations.
pixmaps are offscreen and don't have alpha maps. It is the last case
checked before going to software fallback
- Use the new Composite hook in the ati driver to implement acceleration of
most Composites that get done in an xcompmgr environment on r100 series
cards. It is only available when using the DRM. There are still some
corruption issues, but the DRI is still non-default and I need to get
this into version control.
- Add libdrm and libdri. Portions of the DRI extension are stubbed out.
- Use the DRM in the ATI driver when available. This provides a minor
performance improvement in x11perf, and opens the possibility of using
the 3d hardware for acceleration in the future.
- Implement solid fill acceleration for Composite in KAA.
- Implement Blend hook for Composite and use it on r128.
- Fix a bug of mine that resulted in overuse of offscreen memory.
- Fix many miscellaneous bugs in ATI driver and add PCI IDs.
the ATI driver. It suffers from hw/sw synchronization problems, it
looks like, but may be good enough to work on Render acceleration
experiments. Committing it as-is so I don't lose it again.
Check window reorigin in PositionWindow and bump pixmap serial numbers to
revalidate GCs.
Fix picture clip region origin in automatic update
Initialize client private 'critical' value
Clean up pixmap bounds checking code to only affect contents allocated by
fb.
Oops. Call SourceValidate for Composite operations.
Add Xchips server (vesa based)
available, with fbdev being used by default.
- Use depth 16 by default when vesa backend is used.
- Add MMIO defines for PowerPC (should be in a common location).
Many thanks for Michel Daenzer for much of this code.
- Remove usleeps from idle and waitavail code, recommended by keithp.
- Add a workaround for apparent broken acceleration with Rage 128 and
offset alignment with 8-bit acceleration (24-hack and plain 8-bit).
- Minor cleanup of setup code.
- Disable acceleration with 24bpp due to apparent broken acceleration.
Accel at 24bpp was the cause of the crashes when people tried to use
any depth over 16. XFree86 doesn't support 24 either.
- Disable at < 8bpp, too.
- Add the other Rage 128 PCI IDs.
- Remove unnecessary setting of scissor registers (only default scissor
gets used).
help with ati, and future DRM drivers.
- Add new "ati" kdrive driver. It has ancestry in the r128 driver from
andersca, but took a detour through being the WIP SiS 300 driver on the
way. It supports Radeons (tested on QD VIVO and 7500) and Rage 128.
Current limitations include that it requires depth 16 and that the
other Rage 128 PCI IDs aren't included yet.
change, just cleaning up a bit)
Reset the screen->memory_base value when frame buffer is remapped. This
makes sure new off-screen allocations point at the newly mapped region
rather than the old (now unmapped) region.
Sufficient, but not always necessary.
Add borderClip to damage on creation so that clients needn't guess.
Fix API to FbDots functions to make PolyPoint work with screen_x/screen_y
offsets
Add debugging code to make sure no pictures are left pointing at freed
pixmaps. "Can't" happen, but it did once.
Change KdOffscreenArea structure to eliminate separate private structure,
eliminate the ScreenPtr, change from doubly linked to singly linked
list.
Don't damage BackgroundNone windows on PW_BACKGROUND. Re-clip damage to
borderClip in DamageSubtract.
have redirected subwindows in manual mode. Those clients are marked
Critical and given a significant scheduling boost whenever they receive
a damage notify event. This dramatically improves update frequency.
If the kernel reported a large number of keys, readKernelMapping would walk
off the end of the kdKeysym array.
Fix usage of _IOWR; the 'size' argument is actually a datatype.
drawable pixmap rather than directly into the frame buffer. Rewrite
logic in kdoffscreen to make space for new allocations, now deals
correctly with locked areas.
the server seems to act as before. With RedirectSubwindows (root,
automatic), the server looks just like a regular X server. Now to go
rewrite the (currently lame) compositing manager to get some real
action on the screen.
Some of the fixes here are to make valgrind quiet with various ioctls used
by kdrive/linux.
Also fixed a bug where fbdev initialization was out of order in fbdev.c and
smi.c
unwrapping pixmap operations. This makes sure the accelerated code gets
invoked for pixmaps
Add pixmap migration support to kaa. Can't quite automatically migrate
pixmaps off-screen, but soon we will. Can kick objects out of video
memory. Move per-screen linked list pointers to pixmap private. Wrap
Composite in preparation for migrating pixmaps. Have kasync ignore
drawable type so that pixmaps trigger sync Add KdOffscreenFini to
cleanup on server reset. Switch off screen area to have only a 'save'
function; moving objects to off screen memory is done by saving then
freeing the area.