[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