1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef XORG_RENDERER_H
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define XORG_RENDERER_H
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_context.h"
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_state.h"
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct xorg_shaders;
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct exa_pixmap_priv;
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* max number of vertices *
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * max number of attributes per vertex *
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * max number of components per attribute
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * currently the max is 100 quads
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BUF_SIZE (100 * 4 * 3 * 4)
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct xorg_renderer {
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct pipe_context *pipe;
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct cso_context *cso;
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct xorg_shaders *shaders;
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   int fb_width;
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   int fb_height;
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct pipe_resource *vs_const_buffer;
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct pipe_resource *fs_const_buffer;
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   float buffer[BUF_SIZE];
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   int buffer_size;
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct pipe_vertex_element velems[3];
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* number of attributes per vertex for the current
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * draw operation */
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   int attrs_per_vertex;
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct xorg_renderer *renderer_create(struct pipe_context *pipe);
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid renderer_destroy(struct xorg_renderer *renderer);
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid renderer_bind_destination(struct xorg_renderer *r,
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                               struct pipe_surface *surface,
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                               int width,
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                               int height );
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid renderer_bind_framebuffer(struct xorg_renderer *r,
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                               struct exa_pixmap_priv *priv);
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid renderer_bind_viewport(struct xorg_renderer *r,
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                            struct exa_pixmap_priv *dst);
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid renderer_set_constants(struct xorg_renderer *r,
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                            int shader_type,
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                            const float *buffer,
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                            int size);
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid renderer_draw_yuv(struct xorg_renderer *r,
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       float src_x, float src_y, float src_w, float src_h,
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       int dst_x, int dst_y, int dst_w, int dst_h,
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       struct pipe_resource **textures);
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid renderer_begin_solid(struct xorg_renderer *r);
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid renderer_solid(struct xorg_renderer *r,
63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                    int x0, int y0,
64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                    int x1, int y1,
65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                    float *color);
66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid renderer_begin_textures(struct xorg_renderer *r,
68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                             int num_textures);
69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid renderer_texture(struct xorg_renderer *r,
71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                      int *pos,
72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                      int width, int height,
73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                      struct pipe_sampler_view **textures,
74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                      int num_textures,
75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                      float *src_matrix,
76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                      float *mask_matrix);
77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid renderer_draw_flush(struct xorg_renderer *r);
79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
82