summaryrefslogtreecommitdiff
path: root/src/gallium/state_trackers/xorg/xorg_renderer.c
diff options
context:
space:
mode:
authorZack Rusin <zackr@vmware.com>2009-10-26 07:43:49 -0400
committerZack Rusin <zackr@vmware.com>2009-10-29 15:13:17 -0400
commita7fa56a64b8963e74e93f3bac8ac80813f4a9778 (patch)
tree1b2367f1f9f81122aa0a86632ea9979a1d413012 /src/gallium/state_trackers/xorg/xorg_renderer.c
parentf8f40b53a6a4551630e25bfd7f6e12334bb0f3f8 (diff)
st/xorg: fix scaling ov xv data, plus some cleanups
Diffstat (limited to 'src/gallium/state_trackers/xorg/xorg_renderer.c')
-rw-r--r--src/gallium/state_trackers/xorg/xorg_renderer.c47
1 files changed, 32 insertions, 15 deletions
diff --git a/src/gallium/state_trackers/xorg/xorg_renderer.c b/src/gallium/state_trackers/xorg/xorg_renderer.c
index a740e862b7..ac2c4935a5 100644
--- a/src/gallium/state_trackers/xorg/xorg_renderer.c
+++ b/src/gallium/state_trackers/xorg/xorg_renderer.c
@@ -226,9 +226,8 @@ setup_vertex_data2(struct xorg_renderer *r,
static struct pipe_buffer *
setup_vertex_data_yuv(struct xorg_renderer *r,
- float srcX, float srcY,
- float dstX, float dstY,
- float width, float height,
+ float srcX, float srcY, float srcW, float srcH,
+ float dstX, float dstY, float dstW, float dstH,
struct pipe_texture **tex)
{
float s0, t0, s1, t1;
@@ -236,8 +235,8 @@ setup_vertex_data_yuv(struct xorg_renderer *r,
spt0[0] = srcX;
spt0[1] = srcY;
- spt1[0] = srcX + width;
- spt1[1] = srcY + height;
+ spt1[0] = srcX + srcW;
+ spt1[1] = srcY + srcH;
s0 = spt0[0] / tex[0]->width[0];
t0 = spt0[1] / tex[0]->height[0];
@@ -247,13 +246,13 @@ setup_vertex_data_yuv(struct xorg_renderer *r,
/* 1st vertex */
setup_vertex1(r->vertices2[0], dstX, dstY, s0, t0);
/* 2nd vertex */
- setup_vertex1(r->vertices2[1], dstX + width, dstY,
+ setup_vertex1(r->vertices2[1], dstX + dstW, dstY,
s1, t0);
/* 3rd vertex */
- setup_vertex1(r->vertices2[2], dstX + width, dstY + height,
+ setup_vertex1(r->vertices2[2], dstX + dstW, dstY + dstH,
s1, t1);
/* 4th vertex */
- setup_vertex1(r->vertices2[3], dstX, dstY + height,
+ setup_vertex1(r->vertices2[3], dstX, dstY + dstH,
s0, t1);
@@ -864,13 +863,6 @@ void renderer_draw_textures(struct xorg_renderer *r,
src_matrix, mask_matrix);
break;
case 3:
- buf = setup_vertex_data_yuv(r,
- pos[0], pos[1],
- pos[2], pos[3],
- width, height,
- textures);
- num_textures = 1;
- break;
default:
debug_assert(!"Unsupported number of textures");
break;
@@ -888,3 +880,28 @@ void renderer_draw_textures(struct xorg_renderer *r,
pipe_buffer_reference(&buf, NULL);
}
}
+
+void renderer_draw_yuv(struct xorg_renderer *r,
+ int src_x, int src_y, int src_w, int src_h,
+ int dst_x, int dst_y, int dst_w, int dst_h,
+ struct pipe_texture **textures)
+{
+ struct pipe_context *pipe = r->pipe;
+ struct pipe_buffer *buf = 0;
+
+ buf = setup_vertex_data_yuv(r,
+ src_x, src_y, src_w, src_h,
+ dst_x, dst_y, dst_w, dst_h,
+ textures);
+
+ if (buf) {
+ const int num_attribs = 2; /*pos + tex coord*/
+
+ util_draw_vertex_buffer(pipe, buf, 0,
+ PIPE_PRIM_TRIANGLE_FAN,
+ 4, /* verts */
+ num_attribs); /* attribs/vert */
+
+ pipe_buffer_reference(&buf, NULL);
+ }
+}