[Mesa-dev] GBM, KMS/DRM, triple buffering

Daniel Stone daniel at fooishbar.org
Fri Feb 9 16:05:25 UTC 2018


Hi Carlos,

On 9 February 2018 at 08:33, Carlos Rafael Giani <dv at pseudoterminal.org> wrote:
> I want to implement triple buffering instead of double buffering for a
> program that uses EGL on GBM on a KMS-enabled platform. So far, I used
> kmscube as an example.
>
> However, I do not see where I can specify that I want to have 3 buffers
> allocated instead of 2. From what I saw, I could try to call
> gbm_dri_surface_lock_front_buffer() to produce 3 BOs over time, but there's
> a chance that gbm_dri_surface_has_free_buffers() will return 0 after getting
> 2 BOs already.

You're correct that there is no explicit control available. On the
other hand, having three buffers is pretty much guaranteed for GBM:
since your last buffer won't be released until after vblank, only
having double buffering is likely to give you very badly reduced
performance. (In practice, Mesa makes four buffers available.)

> And, does gbm_dri_surface_lock_front_buffer() internally allocate the buffer
> itself too (not just the BO structure)? Or are the flippable pages
> preallocated by the implementation?

This is an implementation detail. Usually buffer allocation is
deferred to the first draw call of a frame: if there are no buffers
available, then the implementation will allocate a new one.

Cheers,
Daniel


More information about the mesa-dev mailing list