mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2026-01-06 17:50:12 +01:00
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.
(cherry picked from commit
|
||
|---|---|---|
| .. | ||
| 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 | ||
| Makefile.am | ||