[Libva] External buffers for surfaces

Gwenole Beauchesne gb.devel at gmail.com
Thu Jul 24 11:14:49 PDT 2014


Hi,

2014-07-24 19:45 GMT+02:00 Steven Toth <stoth at kernellabs.com>:
> I'd like my application to allocate buffers (not DRM_PRIME or
> KERNEL_PRIME) and use each of these for a surface, passing the
> allocation by reference during CreateSurface. I've seen various
> examples (below) of projects that demonstrate the use of
> VASurfaceAttribExternalBuffers but nothing that creates via user
> allocated pointers.
>
> Based on reading the intel driver internals, I'm starting to think my
> goal isn't currently possible.
>
> Looking at the intel-driver project, function i965_CreateSurfaces2...
>
> If you pass VA_SURFACE_ATTRIB_MEM_TYPE_VA it appears as if the i965
> driver allocates the surface memory internally via
> i965_surface_native_memory()
>
> If you pass VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME or
> VA_SURFACE_ATTRIB_MEM_TYPE_KERNEL_DRM it appears as if the i965 driver
> uses external surfaces via i965_suface_external_memory(), but not user
> pointers, only I965_SURFACE_MEM_GEM_FLINK or
> I965_SURFACE_MEM_DRM_PRIME.
>
> The only i965 driver attempt to query the
> VASurfaceAttribExternalBuffers->num_buffers/buffers member is inside
> i965_suface_external_memory().
>
> Have I missed something important, or is this simply not possible?
>
> I assume DRM_PRIME or KERNEL_PRIME handles don't permit the use of
> user allocated pointers. Correct?

Correct.

On the VA-API side, what you want is userptr support
(VA_SURFACE_ATTRIB_MEM_TYPE_USER_PTR).

However, this comes with restrictions on the driver side, and requires
additional kernel patches (vmap). What specific use-cases do you want
to support?

Regards,
Gwenole.


More information about the Libva mailing list