u_draw.h revision f623d06c495c671f687d4a70c9281c64e5875232
1ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang/**************************************************************************
2ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang *
3ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
4ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * All Rights Reserved.
5ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang *
6ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * Permission is hereby granted, free of charge, to any person obtaining a
7ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * copy of this software and associated documentation files (the
8ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * "Software"), to deal in the Software without restriction, including
9ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * without limitation the rights to use, copy, modify, merge, publish,
10ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * distribute, sub license, and/or sell copies of the Software, and to
11ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * permit persons to whom the Software is furnished to do so, subject to
12ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * the following conditions:
13ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang *
14ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * The above copyright notice and this permission notice (including the
15ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * next paragraph) shall be included in all copies or substantial portions
16ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * of the Software.
17ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang *
18ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian *
26b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian **************************************************************************/
27b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian
28b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#ifndef U_DRAW_H
29b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#define U_DRAW_H
30ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
31ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
32ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include "pipe/p_compiler.h"
33ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include "pipe/p_context.h"
34ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
35ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
36ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangstatic INLINE void
37ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangutil_draw_init_info(struct pipe_draw_info *info)
38ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang{
39ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   memset(info, 0, sizeof(*info));
40ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   info->instance_count = 1;
41ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   info->max_index = 0xffffffff;
42ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang}
43ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
44ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
45ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangstatic INLINE void
46ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangutil_draw_arrays(struct pipe_context *pipe, uint mode, uint start, uint count)
47ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang{
48ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   struct pipe_draw_info info;
49ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
50ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   util_draw_init_info(&info);
51ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   info.mode = mode;
52ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   info.start = start;
53ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   info.count = count;
54ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   info.min_index = start;
55ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   info.max_index = start + count - 1;
56ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
57ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   pipe->draw_vbo(pipe, &info);
58ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang}
59ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
609b35249446b07f40ac5fcc3205f2c048616efacchkuangstatic INLINE void
619b35249446b07f40ac5fcc3205f2c048616efacchkuangutil_draw_elements(struct pipe_context *pipe, int index_bias,
629b35249446b07f40ac5fcc3205f2c048616efacchkuang                   uint mode, uint start, uint count)
63b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian{
649b35249446b07f40ac5fcc3205f2c048616efacchkuang   struct pipe_draw_info info;
659b35249446b07f40ac5fcc3205f2c048616efacchkuang
66ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   util_draw_init_info(&info);
67ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   info.indexed = TRUE;
68b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian   info.mode = mode;
69b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian   info.start = start;
705ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang   info.count = count;
719b35249446b07f40ac5fcc3205f2c048616efacchkuang   info.index_bias = index_bias;
72b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian
73b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian   pipe->draw_vbo(pipe, &info);
74ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang}
75ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
76ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangstatic INLINE void
775ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangutil_draw_arrays_instanced(struct pipe_context *pipe,
785ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang                           uint mode, uint start, uint count,
795ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang                           uint start_instance,
809b35249446b07f40ac5fcc3205f2c048616efacchkuang                           uint instance_count)
81ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang{
82b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian   struct pipe_draw_info info;
83b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian
84b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian   util_draw_init_info(&info);
85b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian   info.mode = mode;
86b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian   info.start = start;
875ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang   info.count = count;
8891037db265ecdd914a26e056cf69207b4f50924ehkuang   info.start_instance = start_instance;
896ac915abcdb404a00d927fe6308a47fcf09d9519hkuang   info.instance_count = instance_count;
901184aebb761cbeac9124c37189a80a1a58f04b6bhkuang   info.min_index = start;
91b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian   info.max_index = start + count - 1;
92f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang
935ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang   pipe->draw_vbo(pipe, &info);
94b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian}
955ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
96b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianstatic INLINE void
975ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangutil_draw_elements_instanced(struct pipe_context *pipe,
98b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian                             int index_bias,
999b35249446b07f40ac5fcc3205f2c048616efacchkuang                             uint mode, uint start, uint count,
1009b35249446b07f40ac5fcc3205f2c048616efacchkuang                             uint start_instance,
101b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian                             uint instance_count)
102b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian{
103b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian   struct pipe_draw_info info;
104ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
105b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian   util_draw_init_info(&info);
106ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   info.indexed = TRUE;
1079b35249446b07f40ac5fcc3205f2c048616efacchkuang   info.mode = mode;
108b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian   info.start = start;
1095ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang   info.count = count;
110b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian   info.index_bias = index_bias;
111b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian   info.start_instance = start_instance;
112b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian   info.instance_count = instance_count;
113ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   info.min_index = start;
114b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian   info.max_index = start + count - 1;
115ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
116b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian   pipe->draw_vbo(pipe, &info);
117ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang}
118b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian
119b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianstatic INLINE void
120ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangutil_draw_range_elements(struct pipe_context *pipe,
121b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian                         int index_bias,
122b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian                         uint min_index,
123b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian                         uint max_index,
124b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian                         uint mode, uint start, uint count)
125b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian{
126ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   struct pipe_draw_info info;
127ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
128ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   util_draw_init_info(&info);
129ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   info.indexed = TRUE;
130b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian   info.mode = mode;
131ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   info.start = start;
132ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   info.count = count;
133b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian   info.index_bias = index_bias;
134b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian   info.min_index = min_index;
135b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian   info.max_index = max_index;
136b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian
137b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian   pipe->draw_vbo(pipe, &info);
138ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang}
139ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
140ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#endif
141ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang