[Mesa-dev] [PATCH 2/2] st/va: flush pipeline after post processing

Christian König deathsimple at vodafone.de
Tue Nov 29 14:12:28 UTC 2016


Am 29.11.2016 um 15:06 schrieb Nicolai Hähnle:
> On 29.11.2016 14:50, Christian König wrote:
>> Am 29.11.2016 um 14:46 schrieb Nicolai Hähnle:
>>> On 28.11.2016 15:51, Christian König wrote:
>>>> From: sguttula <suresh.guttula at amd.com>
>>>>
>>>> This will flush the pipeline,which will allow to share dma-buf based
>>>> buffers.
>>>>
>>>> Signed-off-by: Suresh Guttula <Suresh.Guttula at amd.com>
>>>> Reviewed-by: Christian König <christian.koenig at amd.com>
>>>
>>> Why is there no fence? Relying on the correctness of doing a flush
>>> without a fence seems very likely to be wrong... it might seemingly
>>> fix a sharing issue, but once the timing changes, the other side of a
>>> buffer sharing might still see wrong results if it isn't properly
>>> synchronized.
>>
>> Well there is no facility to share a fence with another side, so the
>> kernel must make sure that the correct order is kept when the DMA-buf is
>> used by multiple processes that everything executes in the right order.
>
> Ah right, the kernel does most of the job. Still, because of 
> multi-threaded submit, returning from pipe->flush doesn't actually 
> guarantee that the work has even been submitted by the kernel.
>
> So unless the only guarantee you want here is that progress happens 
> eventually, you'll still need a fence.
>
> I don't think we have an interface that guarantees that work has 
> reached the kernel without also waiting for job completion.

I'm pretty sure that this isn't correct, otherwise VDPAU interop won't 
work either.

When pipe->flush() is called it must be guaranteed that all work is 
submitted to the kernel.

Regards,
Christian.

>
> Cheers,
> Nicolai
>
>> Regards,
>> Christian.
>>
>>>
>>> Cheers,
>>> Nicolai
>>>
>>>> ---
>>>>  src/gallium/state_trackers/va/postproc.c | 1 +
>>>>  1 file changed, 1 insertion(+)
>>>>
>>>> diff --git a/src/gallium/state_trackers/va/postproc.c
>>>> b/src/gallium/state_trackers/va/postproc.c
>>>> index d06f016..01e240f 100644
>>>> --- a/src/gallium/state_trackers/va/postproc.c
>>>> +++ b/src/gallium/state_trackers/va/postproc.c
>>>> @@ -80,6 +80,7 @@ vlVaPostProcCompositor(vlVaDriver *drv, vlVaContext
>>>> *context,
>>>>     vl_compositor_set_layer_dst_area(&drv->cstate, 0, &dst_rect);
>>>>     vl_compositor_render(&drv->cstate, &drv->compositor, surfaces[0],
>>>> NULL, false);
>>>>
>>>> +   drv->pipe->flush(drv->pipe, NULL, 0);
>>>>     return VA_STATUS_SUCCESS;
>>>>  }
>>>>
>>>>
>>



More information about the mesa-dev mailing list