Visible to Intel only — GUID: GUID-9E97BC59-5BE4-41DD-BCF4-0A1EE30D1BF0
Visible to Intel only — GUID: GUID-9E97BC59-5BE4-41DD-BCF4-0A1EE30D1BF0
SYCL-Blur Example
For a working oneVPL example which ties several of these concepts together (currently only for a single stream), see sycl-blur. This sample shows memory interoperation between video APIs and oneVPL as the frame is input, manipulated and output using the following steps.
Set up SYCL
Set up a oneVPL session
Initialize oneVPL VPP
Loop through frames
Read the frame from a file
Run VPP resize/colorspace conversion on the GPU
Get access to the GPU surface, convert to USM
Run SYCL kernel (blur) on the GPU
Output the frame to a file
Find this sample here:
https://github.com/oneapi-src/oneVPL/tree/master/examples/interop/dpcpp-blur
In this example, you can see that the interaction between oneVPL and SYCL is at a frame level. oneVPL provides a frame then the SYCL kernel processes it. For the OS environment where zero-copy capabilities are enabled in L0 (Linux), the libva frame data is made available to SYCL as USM. Instead of copying the libva raw frame to a new USM surface, it is possible for the app to work with the frame on the GPU as a libva surface then start working with the same memory as if it were USM.
To keep this example simple there are many design simplifications which currently limit its ability to fully showcase the benefits of zero copy.
Raw frames are read from disk and written to disk - this sets the overall frame rate
VPP data is read in as system memory and converted to video memory
The pipeline is synchronized at each frame
However, zero copy is the core concept which can be built into a high performance application.