xorg_renderer.h revision 031fbb9681d6ddc3b515768a914496b2b550cfce
1#ifndef XORG_RENDERER_H
2#define XORG_RENDERER_H
3
4#include "pipe/p_context.h"
5#include "pipe/p_state.h"
6
7struct xorg_shaders;
8struct exa_pixmap_priv;
9
10/* max number of vertices *
11 * max number of attributes per vertex *
12 * max number of components per attribute
13 *
14 * currently the max is 100 quads
15 */
16#define BUF_SIZE (100 * 4 * 3 * 4)
17
18struct xorg_renderer {
19   struct pipe_context *pipe;
20
21   struct cso_context *cso;
22   struct xorg_shaders *shaders;
23
24   struct pipe_constant_buffer vs_const_buffer;
25   struct pipe_constant_buffer fs_const_buffer;
26
27   float vertices[BUF_SIZE];
28   int num_vertices;
29
30   int num_attributes;
31};
32
33struct xorg_renderer *renderer_create(struct pipe_context *pipe);
34void renderer_destroy(struct xorg_renderer *renderer);
35
36void renderer_bind_framebuffer(struct xorg_renderer *r,
37                               struct exa_pixmap_priv *priv);
38void renderer_bind_viewport(struct xorg_renderer *r,
39                            struct exa_pixmap_priv *dst);
40void renderer_bind_rasterizer(struct xorg_renderer *r);
41void renderer_set_constants(struct xorg_renderer *r,
42                            int shader_type,
43                            const float *buffer,
44                            int size);
45void renderer_copy_pixmap(struct xorg_renderer *r,
46                          struct exa_pixmap_priv *dst_priv, int dx, int dy,
47                          struct exa_pixmap_priv *src_priv, int sx, int sy,
48                          int width, int height);
49
50
51void renderer_draw_yuv(struct xorg_renderer *r,
52                       int src_x, int src_y, int src_w, int src_h,
53                       int dst_x, int dst_y, int dst_w, int dst_h,
54                       struct pipe_texture **textures);
55
56void renderer_begin_solid(struct xorg_renderer *r);
57void renderer_solid(struct xorg_renderer *r,
58                    int x0, int y0,
59                    int x1, int y1,
60                    float *color);
61
62void renderer_begin_textures(struct xorg_renderer *r,
63                             struct pipe_texture **textures,
64                             int num_textures);
65void renderer_texture(struct xorg_renderer *r,
66                      int *pos,
67                      int width, int height,
68                      struct pipe_texture **textures,
69                      int num_textures,
70                      float *src_matrix,
71                      float *mask_matrix);
72
73void renderer_draw_flush(struct xorg_renderer *r);
74
75
76#endif
77