[Mesa-dev] [PATCH] vdpau: flush the context before exporting the surface v2

Christian König deathsimple at vodafone.de
Mon Jan 13 06:29:09 PST 2014


Yeah, probably because XBMC still (incorrectly) calls the map function 
only once.

Putting the flush into vlVdpResolveDelayedRendering solves the problem 
because it's called the next time somebody starts rendering, but it's 
way to late at this point.

Need to sync up with the XBMC devs on this.

Christian.

Am 13.01.2014 15:20, schrieb Marek Olšák:
> This patch doesn't fix the bug. :(
>
> Marek
>
> On Mon, Jan 13, 2014 at 2:55 PM, Christian König
> <deathsimple at vodafone.de> wrote:
>> From: Marek Olšák <marek.olsak at amd.com>
>>
>> Bugzilla:
>> https://bugs.freedesktop.org/show_bug.cgi?id=73191
>>
>> When VL uploads vertex buffers, it uses PIPE_TRANSFER_DONTBLOCK, which always
>> flushes the context in the winsys if the buffer being mapped is busy. Since
>> I added handling of DISCARD_RANGE, DONTBLOCK has had no effect when combined
>> with DISCARD_RANGE and I think the context isn't flushed anywhere else,
>> so no commands are submitted to the GPU until the IB is full, which takes
>> a lot of frames.
>>
>> Using DISCARD_RANGE is not the only way to trigger this bug. The other way
>> is to reallocate the vertex buffer before every upload.
>>
>> BTW, I'm not sure if this is the right place for flushing, but it does fix
>> the bug.
>>
>> v2 (chk): move the flush to the right place.
>>
>> Signed-off-by: Christian König <christian.koenig at amd.com>
>> ---
>>   src/gallium/state_trackers/vdpau/output.c | 1 +
>>   1 file changed, 1 insertion(+)
>>
>> diff --git a/src/gallium/state_trackers/vdpau/output.c b/src/gallium/state_trackers/vdpau/output.c
>> index e4e1433..7ff4196 100644
>> --- a/src/gallium/state_trackers/vdpau/output.c
>> +++ b/src/gallium/state_trackers/vdpau/output.c
>> @@ -736,6 +736,7 @@ struct pipe_resource *vlVdpOutputSurfaceGallium(VdpOutputSurface surface)
>>
>>      pipe_mutex_lock(vlsurface->device->mutex);
>>      vlVdpResolveDelayedRendering(vlsurface->device, NULL, NULL);
>> +   vlsurface->device->context->flush(vlsurface->device->context, NULL, 0);
>>      pipe_mutex_unlock(vlsurface->device->mutex);
>>
>>      return vlsurface->surface->texture;
>> --
>> 1.8.1.2
>>



More information about the mesa-dev mailing list