If the PrepareAccess hook fails, use the DownloadFromScreen hook to retrieve driver pixmap contents to a system RAM copy, perform software rendering on that and copy the results back using the UploadToScreen hook. Use the classic migration logic to minimize transfers (which as a bonus allows slightly cleaning up some of the existing mixed pixmap code). This enables things that weren't possible before with driver-allocated pixmap storage: If some (or all) GPU pixmap storage can't be mapped directly by the CPU, this can be handled between the PrepareAccess and DownloadFrom/UploadToScreen hooks, e.g.: * Radeon KMS on big endian machines can fail PrepareAccess if the pixmap requires byte-swapping and swap bytes in DownloadFrom/UploadToScreen. * Environments where GPU and CPU don't have a shared address space at all. Here the driver PrepareAccess hook will always fail and leave all transfers between GPU / CPU storage to the Download/From/UploadToScreen hooks. Drivers which can handle all pixmaps in the PrepareAccess hook should notice little if any difference. |
||
---|---|---|
.. | ||
Makefile.am | ||
exa.c | ||
exa.h | ||
exa_accel.c | ||
exa_classic.c | ||
exa_driver.c | ||
exa_glyphs.c | ||
exa_migration_classic.c | ||
exa_migration_mixed.c | ||
exa_mixed.c | ||
exa_offscreen.c | ||
exa_priv.h | ||
exa_render.c | ||
exa_unaccel.c |