LINUX.ORG.RU

История изменений

Исправление Zubok, (текущая версия) :

Только я не понял, это аналог XShmPutImage или Shared Memory Pixmaps?

Это XShmPutImage. Для Pixmap не нужно Put и Get. Он же уже Pixmap (drawable).

И чем плох этот Shared Memory Pixmaps?

Они плохи тем, что делает невозможной миграцию Pixmap в память GPU. Они из-за shm «прибиты» к системной памяти. Соответственно, затрудняется аппаратное ускорение.

https://www.x.org/releases/X11R7.7/doc/xextproto/shm.html

Shared memory pixmaps can only be supported when the X server can use regular virtual memory for pixmap data; if the pixmaps are stored in some magic graphics hardware, your application will not be able to share them with the server.

Но зато в Shared Memory Pixmaps можно рисовать иксовыми функциями рисования и тут же получать результат напрямую в приложение попискельно, тут же по месту обрабатывать и забрасывать назад без посредников. В XImage нельзя иксовыми функциями рисовать.

В некоторых драйверах по умолчанию эти Shared Pixmaps отключены и их надо опцией включать. Просто раньше некоторые старые приложения, которые, возможно, еще существуют, могли использовать этот механизм (я знаю, что в Java 2D можно включить этот механизм, например). Для них и оставили опцию, если они не смогут работать:

http://us.download.nvidia.com/XFree86/Linux-x86/325.15/README/xconfigoptions....

Option «AllowSHMPixmaps» «boolean»

This option controls whether applications can use the MIT-SHM X extension to create pixmaps whose contents are shared between the X server and the client. These pixmaps prevent the NVIDIA driver from performing a number of optimizations and degrade performance in many circumstances.

Disabling this option disables only shared memory pixmaps. Applications can still use the MIT-SHM extension to transfer data to the X server through shared memory using XShmPutImage.

Default: off (shared memory pixmaps are not allowed).

Но вроде не у всех это отключено.

Исходная версия Zubok, :

Только я не понял, это аналог XShmPutImage или Shared Memory Pixmaps?

Это XShmPutImage. Для Pixmap не нужно Put и Get. Он же уже Pixmap (drawable).

И чем плох этот Shared Memory Pixmaps?

Они плохи тем, что делает невозможной миграцию Pixmap в память GPU. Они из-за shm «прибиты» к системной памяти. Соответственно, затрудняется аппаратное ускорение.

https://www.x.org/releases/X11R7.7/doc/xextproto/shm.html

Shared memory pixmaps can only be supported when the X server can use regular virtual memory for pixmap data; if the pixmaps are stored in some magic graphics hardware, your application will not be able to share them with the server.

Но зато в Shared Memory Pixmaps можно рисовать иксовыми функциями рисования и тут же получать результат напрямую в приложение попискельно, тут же по месту обрабатывать и забрасывать назад. В XImage нельзя иксовыми функциями рисовать.

В некоторых драйверах по умолчанию эти Shared Pixmaps отключены и их надо опцией включать. Просто раньше некоторые старые приложения, которые, возможно, еще существуют, могли использовать этот механизм (я знаю, что в Java 2D можно включить этот механизм, например). Для них и оставили опцию, если они не смогут работать:

http://us.download.nvidia.com/XFree86/Linux-x86/325.15/README/xconfigoptions....

Option «AllowSHMPixmaps» «boolean»

This option controls whether applications can use the MIT-SHM X extension to create pixmaps whose contents are shared between the X server and the client. These pixmaps prevent the NVIDIA driver from performing a number of optimizations and degrade performance in many circumstances.

Disabling this option disables only shared memory pixmaps. Applications can still use the MIT-SHM extension to transfer data to the X server through shared memory using XShmPutImage.

Default: off (shared memory pixmaps are not allowed).

Но вроде не у всех это отключено.