04011b0bc3
The user/specs docs now have external references support. Developers doc are not installed so they do not participate. However, using a similar makefile shared amongst developers document reduces maintenance and is forward looking. Man pages being out of here, reorg developers docs under the same roof. Drop the obsolete sgml subdir. Reviewed-by Jeremy Huddleston <jeremyhu@apple.com> Signed-off-by: Gaetan Nadon <memsize@videotron.ca> Signed-off-by: Keith Packard <keithp@keithp.com>
95 lines
3.3 KiB
Plaintext
95 lines
3.3 KiB
Plaintext
Adding EXA support to your X.Org video driver
|
|
---------------------------------------------
|
|
EXA (for EXcellent Architecture or Ex-kaa aXeleration Architecture or
|
|
whatever) aims to extend the life of the venerable XFree86 video drivers by
|
|
introducing a new set of acceleration hooks that efficiently accelerate the X
|
|
Render extension, including solid fills, blits within screen memory and to and
|
|
from system memory, and Porter-Duff compositing and transform operations.
|
|
|
|
Configuration
|
|
-------------
|
|
A new config file option, AccelMethod, should be added to your driver, to allow
|
|
the user to select between the EXA and XAA acceleration APIs.
|
|
|
|
Some drivers implement a per-instance useEXA flag to track whether EXA is
|
|
active or not. It can be helpful to also conditionalize XAA support with an
|
|
ifdef so that it can easily be turned off/removed in the future.
|
|
|
|
Setting the flag and checking for AccelMethod can be done in the driver's
|
|
Options parsing routine.
|
|
|
|
Loading EXA
|
|
------------
|
|
EXA drivers in the XFree86 DDX should use the loadable module loader to load
|
|
the EXA core. Careful versioning allows the EXA API to be extended without
|
|
breaking the ABI for older versions of drivers. Example code for loading EXA:
|
|
|
|
static const char *exaSymbols[] = {
|
|
"exaDriverAlloc",
|
|
"exaDriverInit",
|
|
"exaDriverFini",
|
|
"exaOffscreenAlloc",
|
|
"exaOffscreenFree",
|
|
"exaGetPixmapOffset",
|
|
"exaGetPixmapPitch",
|
|
"exaGetPixmapSize",
|
|
"exaMarkSync",
|
|
"exaWaitSync",
|
|
NULL
|
|
};
|
|
|
|
if (info->useEXA) {
|
|
info->exaReq.majorversion = 2;
|
|
info->exaReq.minorversion = 0;
|
|
|
|
if (!LoadSubModule(pScrn->module, "exa", NULL, NULL, NULL,
|
|
&info->exaReq, &errmaj, &errmin)) {
|
|
LoaderErrorMsg(NULL, "exa", errmaj, errmin);
|
|
return FALSE;
|
|
}
|
|
xf86LoaderReqSymLists(exaSymbols, NULL);
|
|
}
|
|
|
|
EXA is then initialized using exaDriverAlloc and exaDriverInit. See doxygen
|
|
documentation for getting started there.
|
|
|
|
Further documentation
|
|
------------
|
|
The EXA driver interface and public API is documented using doxygen in
|
|
xserver/xorg/exa/. To build the documentation, run:
|
|
doxygen -g
|
|
doxygen Doxyfile
|
|
The resulting documentation will appear an html/index.html under the current
|
|
directory.
|
|
|
|
EXA initialization
|
|
------------------
|
|
Your driver's AccelInit routine must initialize an ExaDriverRec structure if
|
|
EXA support is enabled, with appropriate error handling (i.e. NoAccel and
|
|
NoXvideo should be set to true if EXA fails to initialize for whatever
|
|
reason).
|
|
|
|
The AccelInit routine also needs to make sure that there's enough offscreen
|
|
memory for certain operations to function, like Xvideo, which should advertise
|
|
a maximum size no larger than can be dealt with given the amount of offscreen
|
|
memory available.
|
|
|
|
EXA and Xv
|
|
----------
|
|
Video support becomes easier with EXA since AllocateFBMemory can use
|
|
exaOffscreenAlloc directly, freeing a previous area if necessary and
|
|
allocating a new one. Likewise, FreeFBMemory can call exaOffscreenFree.
|
|
|
|
EXA teardown
|
|
------------
|
|
At screen close time, EXA drivers should call exaDriverFini with their screen
|
|
pointer, free their EXADriver structure, and do any other necessary teardown.
|
|
|
|
EXA misc.
|
|
---------
|
|
In many drivers, DGA support will need to be changed to be aware of the new
|
|
EXA support.
|
|
|
|
Send updates and corrections to Jesse Barnes <jbarnes@virtuousgeek.org> or
|
|
just check them in if you have permission.
|