summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Olšák <marek.olsak@amd.com>2014-01-13 14:13:01 +0100
committerIan Romanick <ian.d.romanick@intel.com>2014-02-24 10:36:42 -0800
commit5437d38fac832862f99f60943f19a8d9667db8c7 (patch)
tree0c397d4ecf9fc72f3dadf4eaee85b526e4982567
parentfcb4eabb5fc31f8902a6e917a4a008aaa90819c6 (diff)
vdpau: flush the context before exporting the surface v2
Bugzilla (bug needs XBMC changes as well): 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@amd.com> Tested-by: StrangeNoises (rachel@strangenoises.org) (cherry picked from commit 3f98053fc94a964930c73c43154daddfd7824e7c)
-rw-r--r--src/gallium/state_trackers/vdpau/output.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/gallium/state_trackers/vdpau/output.c b/src/gallium/state_trackers/vdpau/output.c
index aa7e997b591..1d5fb92389a 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;