[Mesa-dev] [PATCH 14/25] st/vdpau: implement OutputSurfaceRenderBitmapSurface

Christian König deathsimple at vodafone.de
Mon Feb 27 08:25:42 PST 2012


Signed-off-by: Christian König <deathsimple at vodafone.de>
---
 src/gallium/state_trackers/vdpau/output.c |   41 ++++++++++++++++++++++++++++-
 1 files changed, 40 insertions(+), 1 deletions(-)

diff --git a/src/gallium/state_trackers/vdpau/output.c b/src/gallium/state_trackers/vdpau/output.c
index 887ca2a..fc56803 100644
--- a/src/gallium/state_trackers/vdpau/output.c
+++ b/src/gallium/state_trackers/vdpau/output.c
@@ -500,5 +500,44 @@ vlVdpOutputSurfaceRenderBitmapSurface(VdpOutputSurface destination_surface,
                                       VdpOutputSurfaceRenderBlendState const *blend_state,
                                       uint32_t flags)
 {
-   return VDP_STATUS_NO_IMPLEMENTATION;
+   vlVdpOutputSurface *dst_vlsurface;
+   vlVdpBitmapSurface *src_vlsurface;
+
+   struct pipe_context *context;
+   struct vl_compositor *compositor;
+   struct vl_compositor_state *cstate;
+
+   struct u_rect src_rect, dst_rect;
+
+   void *blend;
+
+   dst_vlsurface = vlGetDataHTAB(destination_surface);
+   if (!dst_vlsurface)
+      return VDP_STATUS_INVALID_HANDLE;
+
+   src_vlsurface = vlGetDataHTAB(source_surface);
+   if (!src_vlsurface)
+      return VDP_STATUS_INVALID_HANDLE;
+
+   if (dst_vlsurface->device != src_vlsurface->device)
+      return VDP_STATUS_HANDLE_DEVICE_MISMATCH;
+
+   vlVdpResolveDelayedRendering(dst_vlsurface->device, NULL, NULL);
+
+   context = dst_vlsurface->device->context;
+   compositor = &dst_vlsurface->device->compositor;
+   cstate = &dst_vlsurface->cstate;
+
+   blend = BlenderToPipe(context, blend_state);
+
+   vl_compositor_clear_layers(cstate);
+   vl_compositor_set_layer_blend(cstate, 0, blend, false);
+   vl_compositor_set_rgba_layer(cstate, compositor, 0, src_vlsurface->sampler_view,
+                                RectToPipe(source_rect, &src_rect), NULL);
+   vl_compositor_set_dst_area(cstate, RectToPipe(destination_rect, &dst_rect));
+   vl_compositor_render(cstate, compositor, dst_vlsurface->surface, NULL);
+
+   context->delete_blend_state(context, blend);
+
+   return VDP_STATUS_OK;
 }
-- 
1.7.5.4



More information about the mesa-dev mailing list