[Mesa-dev] [PATCH 1/2] vl: Add rotation

Kusanagi Kouichi slash at ac.auone-net.jp
Thu Mar 6 00:20:23 PST 2014


Signed-off-by: Kusanagi Kouichi <slash at ac.auone-net.jp>
---
 src/gallium/auxiliary/vl/vl_compositor.c | 52 +++++++++++++++++++++++++++++---
 src/gallium/auxiliary/vl/vl_compositor.h | 13 +++++++-
 2 files changed, 60 insertions(+), 5 deletions(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor.c b/src/gallium/auxiliary/vl/vl_compositor.c
index 3cea044..031efb3 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -570,6 +570,10 @@ calc_src_and_dst(struct vl_compositor_layer *layer, unsigned width, unsigned hei
    layer->src.br = calc_bottomright(size, src);
    layer->dst.tl = calc_topleft(size, dst);
    layer->dst.br = calc_bottomright(size, dst);
+   layer->dst.tr.x = layer->dst.br.x;
+   layer->dst.tr.y = layer->dst.tl.y;
+   layer->dst.bl.x = layer->dst.tl.x;
+   layer->dst.bl.y = layer->dst.br.y;
    layer->zw.x = 0.0f;
    layer->zw.y = size.y;
 }
@@ -589,8 +593,8 @@ gen_rect_verts(struct vertex2f *vb, struct vl_compositor_layer *layer)
    vb[ 4].x = layer->colors[0].z;
    vb[ 4].y = layer->colors[0].w;
 
-   vb[ 5].x = layer->dst.br.x;
-   vb[ 5].y = layer->dst.tl.y;
+   vb[ 5].x = layer->dst.tr.x;
+   vb[ 5].y = layer->dst.tr.y;
    vb[ 6].x = layer->src.br.x;
    vb[ 6].y = layer->src.tl.y;
    vb[ 7] = layer->zw;
@@ -609,8 +613,8 @@ gen_rect_verts(struct vertex2f *vb, struct vl_compositor_layer *layer)
    vb[14].x = layer->colors[2].z;
    vb[14].y = layer->colors[2].w;
 
-   vb[15].x = layer->dst.tl.x;
-   vb[15].y = layer->dst.br.y;
+   vb[15].x = layer->dst.bl.x;
+   vb[15].y = layer->dst.bl.y;
    vb[16].x = layer->src.tl.x;
    vb[16].y = layer->src.br.y;
    vb[17] = layer->zw;
@@ -964,6 +968,46 @@ vl_compositor_set_rgba_layer(struct vl_compositor_state *s,
 }
 
 void
+vl_compositor_rotate_layer(struct vl_compositor_state *s,
+                           unsigned layer,
+                           int rotate)
+{
+   struct vl_compositor_layer *l;
+   struct vertex2f v;
+
+   assert(s);
+   assert(layer < VL_COMPOSITOR_MAX_LAYERS);
+
+   l = &s->layers[layer];
+   switch (rotate) {
+   case 1:
+      v = l->dst.tl;
+      l->dst.tl = l->dst.tr;
+      l->dst.tr = l->dst.br;
+      l->dst.br = l->dst.bl;
+      l->dst.bl = v;
+      break;
+   case 2:
+      v = l->dst.tl;
+      l->dst.tl = l->dst.br;
+      l->dst.br = v;
+      v = l->dst.tr;
+      l->dst.tr = l->dst.bl;
+      l->dst.bl = v;
+      break;
+   case 3:
+      v = l->dst.bl;
+      l->dst.bl = l->dst.br;
+      l->dst.br = l->dst.tr;
+      l->dst.tr = l->dst.tl;
+      l->dst.tl = v;
+      break;
+   default:
+      break;
+   }
+}
+
+void
 vl_compositor_render(struct vl_compositor_state *s,
                      struct vl_compositor       *c,
                      struct pipe_surface        *dst_surface,
diff --git a/src/gallium/auxiliary/vl/vl_compositor.h b/src/gallium/auxiliary/vl/vl_compositor.h
index 97cbef0..38383d8 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.h
+++ b/src/gallium/auxiliary/vl/vl_compositor.h
@@ -67,7 +67,10 @@ struct vl_compositor_layer
    struct pipe_sampler_view *sampler_views[3];
    struct {
       struct vertex2f tl, br;
-   } src, dst;
+   } src;
+   struct {
+      struct vertex2f tl, tr, br, bl;
+   } dst;
    struct vertex2f zw;
    struct vertex4f colors[4];
 };
@@ -216,6 +219,14 @@ vl_compositor_set_rgba_layer(struct vl_compositor_state *state,
                              struct u_rect *dst_rect,
                              struct vertex4f *colors);
 
+/**
+ * rotate a layer
+ */
+void
+vl_compositor_rotate_layer(struct vl_compositor_state *state,
+                           unsigned layer,
+                           int rotate);
+
 /*@}*/
 
 /**
-- 
1.9.0



More information about the mesa-dev mailing list