[Mesa-dev] [PATCH 2/2] st/va: flush pipeline after post processing
Nicolai Hähnle
nhaehnle at gmail.com
Tue Nov 29 14:06:50 UTC 2016
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.
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