Signed-off-by: Kusanagi Kouichi <sl...@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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev