The brokenness in vlVdpVideoMixerRender was compensating for brokenness in vlVdpPresentationQueueDisplay, so fix both at the same time.
Signed-off-by: Maarten Lankhorst <m.b.lankho...@gmail.com> --- src/gallium/state_trackers/vdpau/mixer.c | 22 +++++++++++++++++----- src/gallium/state_trackers/vdpau/presentation.c | 4 ++-- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/gallium/state_trackers/vdpau/mixer.c b/src/gallium/state_trackers/vdpau/mixer.c index ed5a646..b4e07cc 100644 --- a/src/gallium/state_trackers/vdpau/mixer.c +++ b/src/gallium/state_trackers/vdpau/mixer.c @@ -152,11 +152,12 @@ VdpStatus vlVdpVideoMixerRender(VdpVideoMixer mixer, uint32_t layer_count, VdpLayer const *layers) { - struct pipe_video_rect src_rect; + struct pipe_video_rect src_rect, dst_rect; vlVdpVideoMixer *vmixer; vlVdpSurface *surf; - vlVdpOutputSurface *dst; + vlVdpOutputSurface *dst, *bg; + unsigned layer = 0; vmixer = vlGetDataHTAB(mixer); if (!vmixer) @@ -171,10 +172,21 @@ VdpStatus vlVdpVideoMixerRender(VdpVideoMixer mixer, return VDP_STATUS_INVALID_HANDLE; vl_compositor_clear_layers(&vmixer->compositor); - vl_compositor_set_buffer_layer(&vmixer->compositor, 0, surf->video_buffer, - RectToPipe(video_source_rect, &src_rect), NULL); - vl_compositor_render(&vmixer->compositor, dst->surface, NULL, NULL, false); + vl_compositor_reset_dirty_area(&vmixer->compositor); + if (background_surface != VDP_INVALID_HANDLE) { + bg = vlGetDataHTAB(background_surface); + if (!bg) + return VDP_STATUS_INVALID_HANDLE; + vl_compositor_set_rgba_layer(&vmixer->compositor, layer++, bg->sampler_view, + RectToPipe(background_source_rect, &src_rect), NULL); + } + vl_compositor_set_buffer_layer(&vmixer->compositor, layer, surf->video_buffer, + RectToPipe(video_source_rect, &src_rect), + RectToPipe(destination_video_rect, &dst_rect)); + vl_compositor_render(&vmixer->compositor, dst->surface, NULL, + RectToPipe(destination_rect, &dst_rect), !layer); + assert(!layer_count); return VDP_STATUS_OK; } diff --git a/src/gallium/state_trackers/vdpau/presentation.c b/src/gallium/state_trackers/vdpau/presentation.c index 888cf31..aba81b2 100644 --- a/src/gallium/state_trackers/vdpau/presentation.c +++ b/src/gallium/state_trackers/vdpau/presentation.c @@ -233,8 +233,8 @@ vlVdpPresentationQueueDisplay(VdpPresentationQueue presentation_queue, vo_rect.h = clip_height; vl_compositor_clear_layers(&pq->compositor); - vl_compositor_set_rgba_layer(&pq->compositor, 0, surf->sampler_view, NULL, NULL); - vl_compositor_render(&pq->compositor, drawable_surface, NULL, &vo_rect, true); + vl_compositor_set_rgba_layer(&pq->compositor, 0, surf->sampler_view, &vo_rect, NULL); + vl_compositor_render(&pq->compositor, drawable_surface, NULL, NULL, true); pipe = pq->device->context->pipe; -- 1.7.7.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev