1544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin/**************************************************************************
2544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin *
3544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * Copyright 2009 VMware, Inc.  All Rights Reserved.
459309337e40106f734efc1e33f956f6f1f4301acChia-I Wu * Copyright 2010 LunarG, Inc.  All Rights Reserved.
5544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin *
6544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * Permission is hereby granted, free of charge, to any person obtaining a
7544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * copy of this software and associated documentation files (the
8544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * "Software"), to deal in the Software without restriction, including
9544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * without limitation the rights to use, copy, modify, merge, publish,
10544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * distribute, sub license, and/or sell copies of the Software, and to
11544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * permit persons to whom the Software is furnished to do so, subject to
12544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * the following conditions:
13544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin *
14544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * The above copyright notice and this permission notice (including the
15544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * next paragraph) shall be included in all copies or substantial portions
16544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * of the Software.
17544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin *
18544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
22544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin *
26544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin **************************************************************************/
27544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin
28544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin#ifndef RENDERER_H
29544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin#define RENDERER_H
30544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin
31544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin#include "VG/openvg.h"
32544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin
33544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusinstruct renderer;
34544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin
35544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusinstruct vg_context;
36b730f0fc52a208b5f2a308199724ab02aa391fecChia-I Wustruct vg_state;
37b730f0fc52a208b5f2a308199724ab02aa391fecChia-I Wustruct st_framebuffer;
38287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwellstruct pipe_resource;
39e5968a5355f0165aa7f3f8e71a27df884e5a3efbChia-I Wustruct pipe_sampler_state;
40e5f0384ad06359aa1b9dc1b4bc6f475f7a119af2Roland Scheideggerstruct pipe_sampler_view;
41544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusinstruct pipe_surface;
423b71cb6ad6dabfefc9363a35872f4e70e1125603Chia-I Wustruct pipe_vertex_element;
433b71cb6ad6dabfefc9363a35872f4e70e1125603Chia-I Wustruct pipe_vertex_buffer;
44a84a1e344f544ec4da61809d4f09853a94d93e07Chia-I Wustruct matrix;
45544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin
46544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusinstruct renderer *renderer_create(struct vg_context *owner);
47544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusinvoid renderer_destroy(struct renderer *);
48544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin
49b730f0fc52a208b5f2a308199724ab02aa391fecChia-I Wuvoid renderer_validate(struct renderer *renderer,
50b730f0fc52a208b5f2a308199724ab02aa391fecChia-I Wu                       VGbitfield dirty,
51b730f0fc52a208b5f2a308199724ab02aa391fecChia-I Wu                       const struct st_framebuffer *stfb,
52b730f0fc52a208b5f2a308199724ab02aa391fecChia-I Wu                       const struct vg_state *state);
53b730f0fc52a208b5f2a308199724ab02aa391fecChia-I Wu
54ee0f1ab923cc52b5eeacc47a749561d1c7216207Chia-I Wuvoid renderer_validate_for_shader(struct renderer *renderer,
55ee0f1ab923cc52b5eeacc47a749561d1c7216207Chia-I Wu                                  const struct pipe_sampler_state **samplers,
56ee0f1ab923cc52b5eeacc47a749561d1c7216207Chia-I Wu                                  struct pipe_sampler_view **views,
57ee0f1ab923cc52b5eeacc47a749561d1c7216207Chia-I Wu                                  VGint num_samplers,
58a84a1e344f544ec4da61809d4f09853a94d93e07Chia-I Wu                                  const struct matrix *modelview,
59ee0f1ab923cc52b5eeacc47a749561d1c7216207Chia-I Wu                                  void *fs,
60ee0f1ab923cc52b5eeacc47a749561d1c7216207Chia-I Wu                                  const void *const_buffer,
61ee0f1ab923cc52b5eeacc47a749561d1c7216207Chia-I Wu                                  VGint const_buffer_len);
62ee0f1ab923cc52b5eeacc47a749561d1c7216207Chia-I Wu
6330cab4b6cbf741e1ae727bfaed10cc3772e4dff9Chia-I Wuvoid renderer_validate_for_mask_rendering(struct renderer *renderer,
64a84a1e344f544ec4da61809d4f09853a94d93e07Chia-I Wu                                          struct pipe_surface *dst,
65a84a1e344f544ec4da61809d4f09853a94d93e07Chia-I Wu                                          const struct matrix *modelview);
6630cab4b6cbf741e1ae727bfaed10cc3772e4dff9Chia-I Wu
6759309337e40106f734efc1e33f956f6f1f4301acChia-I WuVGboolean renderer_copy_begin(struct renderer *renderer,
6859309337e40106f734efc1e33f956f6f1f4301acChia-I Wu                              struct pipe_surface *dst,
6959309337e40106f734efc1e33f956f6f1f4301acChia-I Wu                              VGboolean y0_top,
7059309337e40106f734efc1e33f956f6f1f4301acChia-I Wu                              struct pipe_sampler_view *src);
7159309337e40106f734efc1e33f956f6f1f4301acChia-I Wu
7259309337e40106f734efc1e33f956f6f1f4301acChia-I Wuvoid renderer_copy(struct renderer *renderer,
7359309337e40106f734efc1e33f956f6f1f4301acChia-I Wu                   VGint x, VGint y, VGint w, VGint h,
7459309337e40106f734efc1e33f956f6f1f4301acChia-I Wu                   VGint sx, VGint sy, VGint sw, VGint sh);
7559309337e40106f734efc1e33f956f6f1f4301acChia-I Wu
7659309337e40106f734efc1e33f956f6f1f4301acChia-I Wuvoid renderer_copy_end(struct renderer *renderer);
7759309337e40106f734efc1e33f956f6f1f4301acChia-I Wu
78e31a04ea3bc957b2a43b910b1f51807b12da18a6Chia-I WuVGboolean renderer_drawtex_begin(struct renderer *renderer,
79e31a04ea3bc957b2a43b910b1f51807b12da18a6Chia-I Wu                                 struct pipe_sampler_view *src);
80e31a04ea3bc957b2a43b910b1f51807b12da18a6Chia-I Wu
81e31a04ea3bc957b2a43b910b1f51807b12da18a6Chia-I Wuvoid renderer_drawtex(struct renderer *renderer,
82e31a04ea3bc957b2a43b910b1f51807b12da18a6Chia-I Wu                      VGint x, VGint y, VGint w, VGint h,
83e31a04ea3bc957b2a43b910b1f51807b12da18a6Chia-I Wu                      VGint sx, VGint sy, VGint sw, VGint sh);
84e31a04ea3bc957b2a43b910b1f51807b12da18a6Chia-I Wu
85e31a04ea3bc957b2a43b910b1f51807b12da18a6Chia-I Wuvoid renderer_drawtex_end(struct renderer *renderer);
86e31a04ea3bc957b2a43b910b1f51807b12da18a6Chia-I Wu
8754cb382ea55610688c97465ef048a4990b8fd4d7Chia-I WuVGboolean renderer_scissor_begin(struct renderer *renderer,
8854cb382ea55610688c97465ef048a4990b8fd4d7Chia-I Wu                                 VGboolean restore_dsa);
8954cb382ea55610688c97465ef048a4990b8fd4d7Chia-I Wu
9054cb382ea55610688c97465ef048a4990b8fd4d7Chia-I Wuvoid renderer_scissor(struct renderer *renderer,
9154cb382ea55610688c97465ef048a4990b8fd4d7Chia-I Wu                      VGint x, VGint y, VGint width, VGint height);
9254cb382ea55610688c97465ef048a4990b8fd4d7Chia-I Wu
9354cb382ea55610688c97465ef048a4990b8fd4d7Chia-I Wuvoid renderer_scissor_end(struct renderer *renderer);
9454cb382ea55610688c97465ef048a4990b8fd4d7Chia-I Wu
956b241f532a21990a7849c5a786504f7ac4124f76Chia-I WuVGboolean renderer_clear_begin(struct renderer *renderer);
966b241f532a21990a7849c5a786504f7ac4124f76Chia-I Wu
976b241f532a21990a7849c5a786504f7ac4124f76Chia-I Wuvoid renderer_clear(struct renderer *renderer,
986b241f532a21990a7849c5a786504f7ac4124f76Chia-I Wu                    VGint x, VGint y, VGint width, VGint height,
996b241f532a21990a7849c5a786504f7ac4124f76Chia-I Wu                    const VGfloat color[4]);
1006b241f532a21990a7849c5a786504f7ac4124f76Chia-I Wu
1016b241f532a21990a7849c5a786504f7ac4124f76Chia-I Wuvoid renderer_clear_end(struct renderer *renderer);
1026b241f532a21990a7849c5a786504f7ac4124f76Chia-I Wu
103e5968a5355f0165aa7f3f8e71a27df884e5a3efbChia-I WuVGboolean renderer_filter_begin(struct renderer *renderer,
104e5968a5355f0165aa7f3f8e71a27df884e5a3efbChia-I Wu                                struct pipe_resource *dst,
105e5968a5355f0165aa7f3f8e71a27df884e5a3efbChia-I Wu                                VGboolean y0_top,
106e5968a5355f0165aa7f3f8e71a27df884e5a3efbChia-I Wu                                VGbitfield channel_mask,
107e5968a5355f0165aa7f3f8e71a27df884e5a3efbChia-I Wu                                const struct pipe_sampler_state **samplers,
108e5968a5355f0165aa7f3f8e71a27df884e5a3efbChia-I Wu                                struct pipe_sampler_view **views,
109e5968a5355f0165aa7f3f8e71a27df884e5a3efbChia-I Wu                                VGint num_samplers,
110e5968a5355f0165aa7f3f8e71a27df884e5a3efbChia-I Wu                                void *fs,
111e5968a5355f0165aa7f3f8e71a27df884e5a3efbChia-I Wu                                const void *const_buffer,
112e5968a5355f0165aa7f3f8e71a27df884e5a3efbChia-I Wu                                VGint const_buffer_len);
113e5968a5355f0165aa7f3f8e71a27df884e5a3efbChia-I Wu
114e5968a5355f0165aa7f3f8e71a27df884e5a3efbChia-I Wuvoid renderer_filter(struct renderer *renderer,
115e5968a5355f0165aa7f3f8e71a27df884e5a3efbChia-I Wu                     VGint x, VGint y, VGint w, VGint h,
116e5968a5355f0165aa7f3f8e71a27df884e5a3efbChia-I Wu                     VGint sx, VGint sy, VGint sw, VGint sh);
117e5968a5355f0165aa7f3f8e71a27df884e5a3efbChia-I Wu
118e5968a5355f0165aa7f3f8e71a27df884e5a3efbChia-I Wuvoid renderer_filter_end(struct renderer *renderer);
119e5968a5355f0165aa7f3f8e71a27df884e5a3efbChia-I Wu
1203b71cb6ad6dabfefc9363a35872f4e70e1125603Chia-I WuVGboolean renderer_polygon_stencil_begin(struct renderer *renderer,
1213b71cb6ad6dabfefc9363a35872f4e70e1125603Chia-I Wu                                         struct pipe_vertex_element *velem,
1223b71cb6ad6dabfefc9363a35872f4e70e1125603Chia-I Wu                                         VGFillRule rule,
1233b71cb6ad6dabfefc9363a35872f4e70e1125603Chia-I Wu                                         VGboolean restore_dsa);
1243b71cb6ad6dabfefc9363a35872f4e70e1125603Chia-I Wu
1253b71cb6ad6dabfefc9363a35872f4e70e1125603Chia-I Wuvoid renderer_polygon_stencil(struct renderer *renderer,
1263b71cb6ad6dabfefc9363a35872f4e70e1125603Chia-I Wu                              struct pipe_vertex_buffer *vbuf,
1273b71cb6ad6dabfefc9363a35872f4e70e1125603Chia-I Wu                              VGuint mode, VGuint start, VGuint count);
1283b71cb6ad6dabfefc9363a35872f4e70e1125603Chia-I Wu
1293b71cb6ad6dabfefc9363a35872f4e70e1125603Chia-I Wuvoid renderer_polygon_stencil_end(struct renderer *renderer);
1303b71cb6ad6dabfefc9363a35872f4e70e1125603Chia-I Wu
1313b71cb6ad6dabfefc9363a35872f4e70e1125603Chia-I WuVGboolean renderer_polygon_fill_begin(struct renderer *renderer,
1323b71cb6ad6dabfefc9363a35872f4e70e1125603Chia-I Wu                                      VGboolean save_dsa);
1333b71cb6ad6dabfefc9363a35872f4e70e1125603Chia-I Wu
1343b71cb6ad6dabfefc9363a35872f4e70e1125603Chia-I Wuvoid renderer_polygon_fill(struct renderer *renderer,
1353b71cb6ad6dabfefc9363a35872f4e70e1125603Chia-I Wu                           VGfloat min_x, VGfloat min_y,
1363b71cb6ad6dabfefc9363a35872f4e70e1125603Chia-I Wu                           VGfloat max_x, VGfloat max_y);
1373b71cb6ad6dabfefc9363a35872f4e70e1125603Chia-I Wu
1383b71cb6ad6dabfefc9363a35872f4e70e1125603Chia-I Wuvoid renderer_polygon_fill_end(struct renderer *renderer);
1393b71cb6ad6dabfefc9363a35872f4e70e1125603Chia-I Wu
140544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusinvoid renderer_texture_quad(struct renderer *,
141287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell                           struct pipe_resource *texture,
142544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin                           VGfloat x1offset, VGfloat y1offset,
143544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin                           VGfloat x2offset, VGfloat y2offset,
144544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin                           VGfloat x1, VGfloat y1,
145544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin                           VGfloat x2, VGfloat y2,
146544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin                           VGfloat x3, VGfloat y3,
147544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin                           VGfloat x4, VGfloat y4);
14820ce148c305200c760f34d2098d92bc77cb6deeeChia-I Wu
149544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusinvoid renderer_copy_surface(struct renderer *r,
150544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin                           struct pipe_surface *src,
151544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin                           int sx1, int sy1,
152544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin                           int sx2, int sy2,
153544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin                           struct pipe_surface *dst,
154544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin                           int dx1, int dy1,
155544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin                           int dx2, int dy2,
156544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin                           float z, unsigned filter);
157544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin
158544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin
159544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin#endif
160