refactor: use dixDestroyPixmap() instead of direct driver proc calls
As preparation for lightening up the screen proc wrapping jungle (*1), some major blockers need to be cleaned up - one of them is many sites directly calling into the raw ScreenRec's DestroyPixmap() proc vector, instead of calling the corresponding dix function: dixDestroyPixmap().
Therefore, all call sites need to be fixed to call dixDestroyPixmap() - including drivers.
*1) https://lists.x.org/archives/xorg-devel/2024-September/059319.html
The future plan is (after this issue is solved):
- decouple extension specific destruction logic from the wrapping chain
- call it only when the pixmap is really destroyed and not just unref'ed (so extensions don't need to check that anymore)
Even though, dixDestroyPixmap() historically wasn't designed specifically for that, it's already there (and exported) for decades and it's current semantics suit the job well (the extra XID parameter is ignored anyways). Thus we can easily refit drivers to use it, w/o any ABI break for both old and new Xserver versions.
Dependencies / partial work items:
- Driver Fixes:
- xorg/driver/xf86-video-vmware!11
- xorg/driver/xf86-video-vmware!11
- xorg/driver/xf86-video-qxl!20
- xorg/driver/xf86-video-omap!9
- xorg/driver/xf86-video-amdgpu!98
- xorg/driver/xf86-video-armsoc!9
- xorg/driver/xf86-video-ati!28
- xorg/driver/xf86-video-r128!15
- xorg/driver/xf86-video-nouveau!11 (merged)
- xorg/driver/xf86-video-freedreno!4
- xorg/driver/xf86-video-geode!13 (merged)
- Intel incubate branch: https://gitlab.freedesktop.org/metux/xf86-video-intel/-/commits/incubate
- Core preparations
- !1709 - NULL protection for ScreenRec->DestroyPixmap and dixDestroyPixmap()
Current status
- WIP branch: https://gitlab.freedesktop.org/metux/xserver/-/commits/wip/destroypixmap
- all call sites have been updated so far, but yet have to double-check whether there might have been some extremely slopping programming, where some pixmap's screen pointer hadn't been set correctly, causing these commits to silently changing semantics :o
Context
- parent story: #1755 - refactor: don't wrap ScreenRec procs