[Libva] External buffers for surfaces

Steven Toth stoth at kernellabs.com
Thu Jul 24 11:26:38 PDT 2014


>> 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.

Thank you for confirming this Gwenole.

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

I did see VA_SURFACE_ATTRIB_MEM_TYPE_USER_PTR in the va headers.
However, I don't see any use of VA_SURFACE_ATTRIB_MEM_TYPE_USER_PTR in
the va-api project, or the intel-driver project other than its
definition, suggesting it's simply not implemented by the i965 driver.

In fact, a quick grep of the intel driver for VA_SURFACE_ATTRIB_MEM
returns only  TYPE_VA, _KERNEL_DRM and _DRM_PRIME

:(

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

Do you have an url to the vmap patches? and perhaps some notes on the
driver restrictions?

I have a shared memory segment between two processes, along with some
locking primitives and metadata. The segment is a series of BGRX
frames. Process A writes the pixels, Process B va-api encodes them.
I'd like to avoid Process B copying from the shared segment into the
surface for each frame, where possible.

- Steve

-- 
Steven Toth - Kernel Labs
http://www.kernellabs.com


More information about the Libva mailing list