Hi,
Do you have some local branch to review all at once (it is a bit hard to
follow with the patches) ?
From a quick looks, it seems you inspired from the loader dri3 code.
There is also another implementation you can inspire from:
https://github.com/iXit/wine/blob/master/dlls/d3d9-nine/dri3.c
Probably not much more you can get from it.
I haven't checked the code yet, so I don't know if that applies,
something I have noticed on my tonga with games, is that (non-vsynced)
apps that get around 45 fps fell like 15 fps (above 50 or below 35 is fine).
I guess this is due to the fact the screen buffer swap waits the buffer
has finished rendering to execute the swap, and some bad timing when
hitting 45 fps.
In fact for this specific case with gallium nine, I noticed the problem
disappear when using thread_submit=true.
thread_submit is an option that was designed for DRI_PRIME case in mind:
the driver spawns a thread that will wait the buffers we want to present
are finished rendering before sending them. That solves all the sync
issues a DRI_PRIME configuration can have.
I think in the case of the problem described, sending buffers that are
finished rendering prevents the screen buffer swap to have to wait
another vblank the buffer is rendered.
I guess for video, you really don't want to hit the bad scenario
described. I'm not sure if you can possibly have the issue or not, but
that may be something to consider. In all cases, that seems a good thing
to look at if wanting to implement a good DRI_PRIME support, granting it
is possible: I don't know the user API, but if the user has guarantee
for example the updated content will be copied to some pixmap after some
call, you cannot delay the presentation for that case.
Axel
On 11/05/2016 17:06, Leo Liu wrote :
This series implement DRI3 supports for VA-API and VDPAU. It implements
supports for DRI3 Open, PixmapFromBuffer, BufferFromPixmap, and for
PRESENT including PresentPixmap, PresentNotifyMSC, PresentIdleNotify,
PresentConfigureNotify and PresentCompleteNotify.
It has been tested with player mpv and vlc with various clips from
480p to 4K with framerate from 24 to 60. Also includes window mode
and fullscreen w/wo compositing manager. The test also includes VA-API
glx extension.
There's still some future work like DRI_PRIME different GPU support
to be added.
Leo Liu (14):
vl: add DRI3 support infrastructure
vl/dri3: implement dri3 screen create and destroy
vl/dri3: set drawable geometry
vl/dri3: register present events
vl/dri3: implement flushing for queued events
vl/dri3: add back buffers support
vl/dri3: implement function for flush frontbuffer
vl/dri3: implement funciton for get dirty area
vl/dri3: add support for resizing
vl/dri3: implement DRI3 BufferFromPixmap
st/va: add dri3 support
vl/dri3: handle PresentCompleteNotify event
vl/dri3: implement functions for get and set timestamp
st/vdpau: add dri3 support
configure.ac | 7 +-
src/gallium/auxiliary/Makefile.sources | 5 +
src/gallium/auxiliary/vl/vl_winsys.h | 5 +
src/gallium/auxiliary/vl/vl_winsys_dri3.c | 703 ++++++++++++++++++++++++++++++
src/gallium/state_trackers/va/context.c | 6 +-
src/gallium/state_trackers/vdpau/device.c | 6 +-
6 files changed, 729 insertions(+), 3 deletions(-)
create mode 100644 src/gallium/auxiliary/vl/vl_winsys_dri3.c
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev