El 17/6/24 a las 12:29, Pierre Ossman escribió:

So if you want to do some rendering with OpenGL and then see the result in a buffer memory mapping the correct sequence would be the following:

1. Issue OpenGL rendering commands.
2. Call glFlush() to make sure the hw actually starts working on the rendering. 3. Call select() on the DMA-buf file descriptor to wait for the rendering to complete.
4. Use DMA_BUF_IOCTL_SYNC to make the rendering result CPU visible.


What I want to do is implement the X server side of DRI3 in just CPU. It works for every application I've tested except gnome-shell.

You can have a look at the Open MR we created two years ago for Xserver [1] "modesetting: Add DRI3 support to modesetting driver with glamor disabled". We are using it downstream for Raspberry Pi OS to enable on RPi1-3 GPU accelerated client applications, while the Xserver is using software composition with pixman.

[1] https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/945

We recently identified that it has an issue[2] with synchronization on the server side when after glFlush() in the client side the command list takes too much (several seconds) to finish the rendering.

[2] https://gitlab.freedesktop.org/mesa/mesa/-/issues/11228


I would assume that 1. and 2. are supposed to be done by the X client, i.e. gnome-shell?

What I need to be able to do is access the result of that, once the X client tries to draw using that GBM backed pixmap (e.g. using PresentPixmap).

So far, we've only tested Intel GPUs, but we are setting up Nvidia and AMD GPUs at the moment. It will be interesting to see if the issue remains on those or not.

Regards,

Chema Casanova

Reply via email to