Hi Maarten,

On 12.12.2011 13:25, Maarten Lankhorst wrote:
The problem is destination rectangle can be different for video and subpictures, this breaks mplayer OSD if you handle it incorrectly. ftp://download.nvidia.com/XFree86/vdpau/doxygen/html/group___vdp_video_mixer.html#ga62bf3bf8c5f01322a03b07065c5ea3db has info on how it works. destination video rectangle is relative to target image, not source.
Yeah, but that is what the destination rectangle in the render call is good for. So you actually don't need to change anything here you just need to another parameter and everything starts to work fine.

Get mplayer to play any video fullscreen with -vo vdpau, if things work 
correctly black borders should appear when aspect ratio of fullscreen doesn't 
match aspect ratio of video. The onscreen display should also be centered and 
scaled to the entire screen.
Ah, well I see the problem now. Let's split the discussion here a bit. and I'm also CCing Andy, Younes and the mailing list.

Please take a look at the attached patches, they should fix the mentioned problems, but without breaking XvMC or anything else (at least I hope so).

@Andy: Could you please confirm that they are also working? (They should apply ontop of current master).

Thanks,
Christian.
>From d074aab1602c88ca18bb9472c6ab2afd99f2b53d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Christian=20K=C3=B6nig?= <deathsim...@vodafone.de>
Date: Mon, 12 Dec 2011 15:27:34 +0100
Subject: [PATCH 1/3] g3dvl/compositor: improve dirty area handling
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Take viewport and scissors into account and make
the dirty area a parameter instead of a member.

Signed-off-by: Christian König <deathsim...@vodafone.de>
---
 src/gallium/auxiliary/vl/vl_compositor.c           |  104 ++++++++++++--------
 src/gallium/auxiliary/vl/vl_compositor.h           |    8 +-
 src/gallium/state_trackers/vdpau/mixer.c           |    2 +-
 src/gallium/state_trackers/vdpau/output.c          |    2 +-
 src/gallium/state_trackers/vdpau/presentation.c    |    4 +-
 src/gallium/state_trackers/vdpau/vdpau_private.h   |    2 +
 src/gallium/state_trackers/xorg/xvmc/surface.c     |    4 +-
 .../state_trackers/xorg/xvmc/xvmc_private.h        |    2 +
 8 files changed, 81 insertions(+), 47 deletions(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor.c b/src/gallium/auxiliary/vl/vl_compositor.c
index 322ef8e..98cb616 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -40,6 +40,9 @@
 #include "vl_types.h"
 #include "vl_compositor.h"
 
+#define MIN_DIRTY (0)
+#define MAX_DIRTY (1 << 15)
+
 typedef float csc_matrix[16];
 
 static void *
@@ -470,8 +473,27 @@ gen_rect_verts(struct vertex4f *vb, struct vl_compositor_layer *layer)
    vb[3].w = layer->src.br.y;
 }
 
+static INLINE struct u_rect
+calc_drawn_area(struct vl_compositor *c, struct vl_compositor_layer *layer)
+{
+   struct u_rect result;
+
+   // scale
+   result.x0 = layer->dst.tl.x * c->viewport.scale[0] + c->viewport.translate[0];
+   result.y0 = layer->dst.tl.y * c->viewport.scale[1] + c->viewport.translate[1];
+   result.x1 = layer->dst.br.x * c->viewport.scale[0] + c->viewport.translate[0];
+   result.y1 = layer->dst.br.y * c->viewport.scale[1] + c->viewport.translate[1];
+
+   // and clip
+   result.x0 = MAX2(result.x0, c->scissor.minx);
+   result.y0 = MAX2(result.y0, c->scissor.miny);
+   result.x1 = MIN2(result.x1, c->scissor.maxx);
+   result.y1 = MIN2(result.y1, c->scissor.maxy);
+   return result;
+}
+
 static void
-gen_vertex_data(struct vl_compositor *c)
+gen_vertex_data(struct vl_compositor *c, struct u_rect *dirty)
 {
    struct vertex4f *vb;
    struct pipe_transfer *buf_transfer;
@@ -497,15 +519,18 @@ gen_vertex_data(struct vl_compositor *c)
          gen_rect_verts(vb, layer);
          vb += 4;
 
-         if (layer->clearing &&
-             c->dirty_tl.x >= layer->dst.tl.x &&
-             c->dirty_tl.y >= layer->dst.tl.y &&
-             c->dirty_br.x <= layer->dst.br.x &&
-             c->dirty_br.y <= layer->dst.br.y) {
-
-            // We clear the dirty area anyway, no need for clear_render_target
-            c->dirty_tl.x = c->dirty_tl.y = 1.0f;
-            c->dirty_br.x = c->dirty_br.y = 0.0f;
+         if (dirty && layer->clearing) {
+            struct u_rect drawn = calc_drawn_area(c, layer);
+            if (
+             dirty->x0 >= drawn.x0 &&
+             dirty->y0 >= drawn.y0 &&
+             dirty->x1 <= drawn.x1 &&
+             dirty->y1 <= drawn.y1) {
+
+               // We clear the dirty area anyway, no need for clear_render_target
+               dirty->x0 = dirty->y0 = MAX_DIRTY;
+               dirty->x1 = dirty->y1 = MIN_DIRTY;
+            }
          }
       }
    }
@@ -514,7 +539,7 @@ gen_vertex_data(struct vl_compositor *c)
 }
 
 static void
-draw_layers(struct vl_compositor *c)
+draw_layers(struct vl_compositor *c, struct u_rect *dirty)
 {
    unsigned vb_index, i;
 
@@ -533,22 +558,25 @@ draw_layers(struct vl_compositor *c)
          util_draw_arrays(c->pipe, PIPE_PRIM_QUADS, vb_index * 4, 4);
          vb_index++;
 
-         // Remember the currently drawn area as dirty for the next draw command
-         c->dirty_tl.x = MIN2(layer->dst.tl.x, c->dirty_tl.x);
-         c->dirty_tl.y = MIN2(layer->dst.tl.y, c->dirty_tl.y);
-         c->dirty_br.x = MAX2(layer->dst.br.x, c->dirty_br.x);
-         c->dirty_br.y = MAX2(layer->dst.br.y, c->dirty_br.y);
+         if (dirty) {
+            // Remember the currently drawn area as dirty for the next draw command
+            struct u_rect drawn = calc_drawn_area(c, layer);
+            dirty->x0 = MIN2(drawn.x0, dirty->x0);
+            dirty->y0 = MIN2(drawn.y0, dirty->y0);
+            dirty->x1 = MAX2(drawn.x1, dirty->x1);
+            dirty->y1 = MAX2(drawn.y1, dirty->y1);
+         }
       }
    }
 }
 
 void
-vl_compositor_reset_dirty_area(struct vl_compositor *c)
+vl_compositor_reset_dirty_area(struct u_rect *dirty)
 {
-   assert(c);
+   assert(dirty);
 
-   c->dirty_tl.x = c->dirty_tl.y = 0.0f;
-   c->dirty_br.x = c->dirty_br.y = 1.0f;
+   dirty->x0 = dirty->y0 = MIN_DIRTY;
+   dirty->x1 = dirty->y1 = MAX_DIRTY;
 }
 
 void
@@ -715,10 +743,8 @@ vl_compositor_render(struct vl_compositor   *c,
                      struct pipe_surface    *dst_surface,
                      struct pipe_video_rect *dst_area,
                      struct pipe_video_rect *dst_clip,
-                     bool clear_dirty_area)
+                     struct u_rect          *dirty_area)
 {
-   struct pipe_scissor_state scissor;
-
    assert(c);
    assert(dst_surface);
 
@@ -739,28 +765,29 @@ vl_compositor_render(struct vl_compositor   *c,
    }
 
    if (dst_clip) {
-      scissor.minx = dst_clip->x;
-      scissor.miny = dst_clip->y;
-      scissor.maxx = dst_clip->x + dst_clip->w;
-      scissor.maxy = dst_clip->y + dst_clip->h;
+      c->scissor.minx = dst_clip->x;
+      c->scissor.miny = dst_clip->y;
+      c->scissor.maxx = dst_clip->x + dst_clip->w;
+      c->scissor.maxy = dst_clip->y + dst_clip->h;
    } else {
-      scissor.minx = 0;
-      scissor.miny = 0;
-      scissor.maxx = dst_surface->width;
-      scissor.maxy = dst_surface->height;
+      c->scissor.minx = 0;
+      c->scissor.miny = 0;
+      c->scissor.maxx = dst_surface->width;
+      c->scissor.maxy = dst_surface->height;
    }
 
-   gen_vertex_data(c);
+   gen_vertex_data(c, dirty_area);
+
+   if (dirty_area && (dirty_area->x0 < dirty_area->x1 ||
+                      dirty_area->y0 < dirty_area->y1)) {
 
-   if (clear_dirty_area && (c->dirty_tl.x < c->dirty_br.x ||
-                            c->dirty_tl.y < c->dirty_br.y)) {
       util_clear_render_target(c->pipe, dst_surface, &c->clear_color,
                                0, 0, dst_surface->width, dst_surface->height);
-      c->dirty_tl.x = c->dirty_tl.y = 1.0f;
-      c->dirty_br.x = c->dirty_br.y = 0.0f;
+      dirty_area->x0 = dirty_area->y0 = MAX_DIRTY;
+      dirty_area->x0 = dirty_area->y1 = MIN_DIRTY;
    }
 
-   c->pipe->set_scissor_state(c->pipe, &scissor);
+   c->pipe->set_scissor_state(c->pipe, &c->scissor);
    c->pipe->set_framebuffer_state(c->pipe, &c->fb_state);
    c->pipe->set_viewport_state(c->pipe, &c->viewport);
    c->pipe->bind_vs_state(c->pipe, c->vs);
@@ -769,7 +796,7 @@ vl_compositor_render(struct vl_compositor   *c,
    c->pipe->set_constant_buffer(c->pipe, PIPE_SHADER_FRAGMENT, 0, c->csc_matrix);
    c->pipe->bind_rasterizer_state(c->pipe, c->rast);
 
-   draw_layers(c);
+   draw_layers(c, dirty_area);
 }
 
 bool
@@ -800,7 +827,6 @@ vl_compositor_init(struct vl_compositor *c, struct pipe_context *pipe)
 
    c->clear_color.f[0] = c->clear_color.f[1] = 0.0f;
    c->clear_color.f[2] = c->clear_color.f[3] = 0.0f;
-   vl_compositor_reset_dirty_area(c);
 
    return true;
 }
diff --git a/src/gallium/auxiliary/vl/vl_compositor.h b/src/gallium/auxiliary/vl/vl_compositor.h
index f60f7da..0548203 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.h
+++ b/src/gallium/auxiliary/vl/vl_compositor.h
@@ -32,6 +32,8 @@
 #include "pipe/p_video_decoder.h"
 #include "pipe/p_video_state.h"
 
+#include "util/u_rect.h"
+
 #include "vl_types.h"
 
 struct pipe_context;
@@ -62,6 +64,7 @@ struct vl_compositor
 
    struct pipe_framebuffer_state fb_state;
    struct pipe_viewport_state viewport;
+   struct pipe_scissor_state scissor;
    struct pipe_vertex_buffer vertex_buf;
    struct pipe_resource *csc_matrix;
 
@@ -82,7 +85,6 @@ struct vl_compositor
    } fs_palette;
 
    union pipe_color_union clear_color;
-   struct vertex2f dirty_tl, dirty_br;
 
    unsigned used_layers:VL_COMPOSITOR_MAX_LAYERS;
    struct vl_compositor_layer layers[VL_COMPOSITOR_MAX_LAYERS];
@@ -104,7 +106,7 @@ vl_compositor_set_csc_matrix(struct vl_compositor *compositor, const float mat[1
  * reset dirty area, so it's cleared with the clear colour
  */
 void
-vl_compositor_reset_dirty_area(struct vl_compositor *compositor);
+vl_compositor_reset_dirty_area(struct u_rect *dirty);
 
 /**
  * set the clear color
@@ -178,7 +180,7 @@ vl_compositor_render(struct vl_compositor   *compositor,
                      struct pipe_surface    *dst_surface,
                      struct pipe_video_rect *dst_area,
                      struct pipe_video_rect *dst_clip,
-                     bool clear_dirty_area);
+                     struct u_rect          *dirty_area);
 
 /**
  * destroy this compositor
diff --git a/src/gallium/state_trackers/vdpau/mixer.c b/src/gallium/state_trackers/vdpau/mixer.c
index ed5a646..5657e7c 100644
--- a/src/gallium/state_trackers/vdpau/mixer.c
+++ b/src/gallium/state_trackers/vdpau/mixer.c
@@ -173,7 +173,7 @@ VdpStatus vlVdpVideoMixerRender(VdpVideoMixer mixer,
    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_render(&vmixer->compositor, dst->surface, NULL, NULL, NULL);
 
    return VDP_STATUS_OK;
 }
diff --git a/src/gallium/state_trackers/vdpau/output.c b/src/gallium/state_trackers/vdpau/output.c
index 0d2f35a..d83831e 100644
--- a/src/gallium/state_trackers/vdpau/output.c
+++ b/src/gallium/state_trackers/vdpau/output.c
@@ -312,7 +312,7 @@ vlVdpOutputSurfacePutBitsIndexed(VdpOutputSurface surface,
    vl_compositor_clear_layers(compositor);
    vl_compositor_set_palette_layer(compositor, 0, sv_idx, sv_tbl, NULL, NULL, false);
    vl_compositor_render(compositor, vlsurface->surface,
-                        RectToPipe(destination_rect, &dst_rect), NULL, false);
+                        RectToPipe(destination_rect, &dst_rect), NULL, NULL);
 
    pipe_sampler_view_reference(&sv_idx, NULL);
    pipe_sampler_view_reference(&sv_tbl, NULL);
diff --git a/src/gallium/state_trackers/vdpau/presentation.c b/src/gallium/state_trackers/vdpau/presentation.c
index 888cf31..df38f63 100644
--- a/src/gallium/state_trackers/vdpau/presentation.c
+++ b/src/gallium/state_trackers/vdpau/presentation.c
@@ -75,6 +75,8 @@ vlVdpPresentationQueueCreate(VdpDevice device,
       goto no_compositor;
    }
 
+   vl_compositor_reset_dirty_area(&pq->dirty_area);
+
    *presentation_queue = vlAddDataHTAB(pq);
    if (*presentation_queue == 0) {
       ret = VDP_STATUS_ERROR;
@@ -234,7 +236,7 @@ vlVdpPresentationQueueDisplay(VdpPresentationQueue presentation_queue,
 
    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_render(&pq->compositor, drawable_surface, NULL, &vo_rect, &pq->dirty_area);
 
    pipe = pq->device->context->pipe;
 
diff --git a/src/gallium/state_trackers/vdpau/vdpau_private.h b/src/gallium/state_trackers/vdpau/vdpau_private.h
index aae6f78..eba9e2f 100644
--- a/src/gallium/state_trackers/vdpau/vdpau_private.h
+++ b/src/gallium/state_trackers/vdpau/vdpau_private.h
@@ -37,6 +37,7 @@
 #include "pipe/p_video_decoder.h"
 
 #include "util/u_debug.h"
+#include "util/u_rect.h"
 #include "vl/vl_compositor.h"
 
 #include "vl_winsys.h"
@@ -298,6 +299,7 @@ typedef struct
    vlVdpDevice *device;
    Drawable drawable;
    struct vl_compositor compositor;
+   struct u_rect dirty_area;
 } vlVdpPresentationQueue;
 
 typedef struct
diff --git a/src/gallium/state_trackers/xorg/xvmc/surface.c b/src/gallium/state_trackers/xorg/xvmc/surface.c
index e6c5a89..bb7ba1e 100644
--- a/src/gallium/state_trackers/xorg/xvmc/surface.c
+++ b/src/gallium/state_trackers/xorg/xvmc/surface.c
@@ -381,7 +381,7 @@ Status XvMCPutSurface(Display *dpy, XvMCSurface *surface, Drawable drawable,
       pipe_surface_reference(&context_priv->drawable_surface, NULL);
       context_priv->drawable_surface = vl_drawable_surface_get(context_priv->vctx, drawable);
       context_priv->dst_rect = dst_rect;
-      vl_compositor_reset_dirty_area(compositor);
+      vl_compositor_reset_dirty_area(&context_priv->dirty_area);
    }
 
    if (!context_priv->drawable_surface)
@@ -425,7 +425,7 @@ Status XvMCPutSurface(Display *dpy, XvMCSurface *surface, Drawable drawable,
    // Workaround for r600g, there seems to be a bug in the fence refcounting code
    pipe->screen->fence_reference(pipe->screen, &surface_priv->fence, NULL);
 
-   vl_compositor_render(compositor, context_priv->drawable_surface, &dst_rect, NULL, true);
+   vl_compositor_render(compositor, context_priv->drawable_surface, &dst_rect, NULL, &context_priv->dirty_area);
                         
    pipe->flush(pipe, &surface_priv->fence);
 
diff --git a/src/gallium/state_trackers/xorg/xvmc/xvmc_private.h b/src/gallium/state_trackers/xorg/xvmc/xvmc_private.h
index 305e51f..5656c65 100644
--- a/src/gallium/state_trackers/xorg/xvmc/xvmc_private.h
+++ b/src/gallium/state_trackers/xorg/xvmc/xvmc_private.h
@@ -35,6 +35,7 @@
 
 #include "util/u_debug.h"
 #include "util/u_math.h"
+#include "util/u_rect.h"
 
 #include "vl/vl_csc.h"
 #include "vl/vl_compositor.h"
@@ -64,6 +65,7 @@ typedef struct
 
    struct pipe_video_rect dst_rect;
    struct pipe_surface *drawable_surface;
+   struct u_rect dirty_area;
 
 } XvMCContextPrivate;
 
-- 
1.7.5.4

>From 3dde3dd16353c424a169a0ba9e893d7e778f249e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Christian=20K=C3=B6nig?= <deathsim...@vodafone.de>
Date: Mon, 12 Dec 2011 16:28:24 +0100
Subject: [PATCH 2/3] st/vdpau: some mixer fixes
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Correctly use destination_rect and destination_video_rect
in the mixer, and also use a dirty area tracking for output surfaces.

Signed-off-by: Christian König <deathsim...@vodafone.de>
---
 src/gallium/state_trackers/vdpau/mixer.c         |    7 +++++--
 src/gallium/state_trackers/vdpau/output.c        |    2 ++
 src/gallium/state_trackers/vdpau/vdpau_private.h |    1 +
 3 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/gallium/state_trackers/vdpau/mixer.c b/src/gallium/state_trackers/vdpau/mixer.c
index 5657e7c..1588744 100644
--- a/src/gallium/state_trackers/vdpau/mixer.c
+++ b/src/gallium/state_trackers/vdpau/mixer.c
@@ -152,7 +152,7 @@ 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, dst_clip;
 
    vlVdpVideoMixer *vmixer;
    vlVdpSurface *surf;
@@ -173,7 +173,10 @@ VdpStatus vlVdpVideoMixerRender(VdpVideoMixer mixer,
    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, NULL);
+   vl_compositor_render(&vmixer->compositor, dst->surface,
+                        RectToPipe(destination_video_rect, &dst_rect),
+                        RectToPipe(destination_rect, &dst_clip),
+                        &dst->dirty_area);
 
    return VDP_STATUS_OK;
 }
diff --git a/src/gallium/state_trackers/vdpau/output.c b/src/gallium/state_trackers/vdpau/output.c
index d83831e..cca69c4 100644
--- a/src/gallium/state_trackers/vdpau/output.c
+++ b/src/gallium/state_trackers/vdpau/output.c
@@ -114,6 +114,8 @@ vlVdpOutputSurfaceCreate(VdpDevice device,
    
    pipe_resource_reference(&res, NULL);
 
+   vl_compositor_reset_dirty_area(&vlsurface->dirty_area);
+
    return VDP_STATUS_OK;
 }
 
diff --git a/src/gallium/state_trackers/vdpau/vdpau_private.h b/src/gallium/state_trackers/vdpau/vdpau_private.h
index eba9e2f..1922b70 100644
--- a/src/gallium/state_trackers/vdpau/vdpau_private.h
+++ b/src/gallium/state_trackers/vdpau/vdpau_private.h
@@ -323,6 +323,7 @@ typedef struct
    struct pipe_surface *surface;
    struct pipe_sampler_view *sampler_view;
    struct pipe_fence_handle *fence;
+   struct u_rect dirty_area;
 } vlVdpOutputSurface;
 
 typedef struct
-- 
1.7.5.4

>From d1a90399d4f4a1041128c98bad1875ee22e67459 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Christian=20K=C3=B6nig?= <deathsim...@vodafone.de>
Date: Mon, 12 Dec 2011 16:51:12 +0100
Subject: [PATCH 3/3] st/vdpau: fix unwanted output scaling
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

vlVdpPresentationQueueDisplay shouldn't scale, so
use size of destination surface as source rectangle.

Signed-off-by: Christian König <deathsim...@vodafone.de>
---
 src/gallium/state_trackers/vdpau/presentation.c |   19 ++++++++++++-------
 1 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/src/gallium/state_trackers/vdpau/presentation.c b/src/gallium/state_trackers/vdpau/presentation.c
index df38f63..0e086fc 100644
--- a/src/gallium/state_trackers/vdpau/presentation.c
+++ b/src/gallium/state_trackers/vdpau/presentation.c
@@ -213,7 +213,7 @@ vlVdpPresentationQueueDisplay(VdpPresentationQueue presentation_queue,
 
    struct pipe_context *pipe;
    struct pipe_surface *drawable_surface;
-   struct pipe_video_rect vo_rect;
+   struct pipe_video_rect src_rect, dst_clip;
 
    pq = vlGetDataHTAB(presentation_queue);
    if (!pq)
@@ -229,14 +229,19 @@ vlVdpPresentationQueueDisplay(VdpPresentationQueue presentation_queue,
 
    surf->timestamp = (vlVdpTime)earliest_presentation_time;
 
-   vo_rect.x = 0;
-   vo_rect.y = 0;
-   vo_rect.w = clip_width;
-   vo_rect.h = clip_height;
+   src_rect.x = 0;
+   src_rect.y = 0;
+   src_rect.w = drawable_surface->width;
+   src_rect.h = drawable_surface->height;
+
+   dst_clip.x = 0;
+   dst_clip.y = 0;
+   dst_clip.w = clip_width;
+   dst_clip.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, &pq->dirty_area);
+   vl_compositor_set_rgba_layer(&pq->compositor, 0, surf->sampler_view, &src_rect, NULL);
+   vl_compositor_render(&pq->compositor, drawable_surface, NULL, &dst_clip, &pq->dirty_area);
 
    pipe = pq->device->context->pipe;
 
-- 
1.7.5.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to