1f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell/**************************************************************************
2f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell *
3f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
4f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * All Rights Reserved.
5f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell *
6f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a
7f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * copy of this software and associated documentation files (the
8f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * "Software"), to deal in the Software without restriction, including
9f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * without limitation the rights to use, copy, modify, merge, publish,
10f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * distribute, sub license, and/or sell copies of the Software, and to
11f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * permit persons to whom the Software is furnished to do so, subject to
12f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * the following conditions:
13f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell *
14f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * The above copyright notice and this permission notice (including the
15f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * next paragraph) shall be included in all copies or substantial portions
16f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * of the Software.
17f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell *
18f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell *
26f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell **************************************************************************/
27f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell
28f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell#ifndef U_DRAW_H
29f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell#define U_DRAW_H
30f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell
31f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell
32f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell#include "pipe/p_compiler.h"
33f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell#include "pipe/p_context.h"
34b812ff8f9e5c9d292c0fb9518df1d35165542556Vinson Lee#include "pipe/p_state.h"
35f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell
36f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell
373733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca#ifdef __cplusplus
383733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonsecaextern "C" {
393733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca#endif
403733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca
413733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca
42f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwellstatic INLINE void
43f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwellutil_draw_init_info(struct pipe_draw_info *info)
44f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell{
45f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   memset(info, 0, sizeof(*info));
46f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info->instance_count = 1;
47f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info->max_index = 0xffffffff;
48f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell}
49f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell
50f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell
51f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwellstatic INLINE void
52f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwellutil_draw_arrays(struct pipe_context *pipe, uint mode, uint start, uint count)
53f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell{
54f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   struct pipe_draw_info info;
55f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell
56f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   util_draw_init_info(&info);
57f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.mode = mode;
58f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.start = start;
59f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.count = count;
60f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.min_index = start;
61f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.max_index = start + count - 1;
62f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell
63f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   pipe->draw_vbo(pipe, &info);
64f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell}
65f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell
66f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwellstatic INLINE void
67f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwellutil_draw_elements(struct pipe_context *pipe, int index_bias,
68f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell                   uint mode, uint start, uint count)
69f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell{
70f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   struct pipe_draw_info info;
71f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell
72f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   util_draw_init_info(&info);
73f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.indexed = TRUE;
74f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.mode = mode;
75f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.start = start;
76f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.count = count;
77f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.index_bias = index_bias;
78f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell
79f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   pipe->draw_vbo(pipe, &info);
80f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell}
81f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell
82f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwellstatic INLINE void
83f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwellutil_draw_arrays_instanced(struct pipe_context *pipe,
84f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell                           uint mode, uint start, uint count,
85f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell                           uint start_instance,
86f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell                           uint instance_count)
87f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell{
88f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   struct pipe_draw_info info;
89f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell
90f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   util_draw_init_info(&info);
91f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.mode = mode;
92f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.start = start;
93f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.count = count;
94f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.start_instance = start_instance;
95f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.instance_count = instance_count;
96f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.min_index = start;
97f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.max_index = start + count - 1;
98f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell
99f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   pipe->draw_vbo(pipe, &info);
100f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell}
101f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell
102f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwellstatic INLINE void
103f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwellutil_draw_elements_instanced(struct pipe_context *pipe,
104f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell                             int index_bias,
105f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell                             uint mode, uint start, uint count,
106f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell                             uint start_instance,
107f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell                             uint instance_count)
108f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell{
109f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   struct pipe_draw_info info;
110f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell
111f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   util_draw_init_info(&info);
112f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.indexed = TRUE;
113f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.mode = mode;
114f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.start = start;
115f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.count = count;
116f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.index_bias = index_bias;
117f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.start_instance = start_instance;
118f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.instance_count = instance_count;
119f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell
120f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   pipe->draw_vbo(pipe, &info);
121f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell}
122f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell
123f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwellstatic INLINE void
124f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwellutil_draw_range_elements(struct pipe_context *pipe,
125f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell                         int index_bias,
126f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell                         uint min_index,
127f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell                         uint max_index,
128f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell                         uint mode, uint start, uint count)
129f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell{
130f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   struct pipe_draw_info info;
131f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell
132f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   util_draw_init_info(&info);
133f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.indexed = TRUE;
134f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.mode = mode;
135f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.start = start;
136f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.count = count;
137f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.index_bias = index_bias;
138f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.min_index = min_index;
139f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   info.max_index = max_index;
140f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell
141f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell   pipe->draw_vbo(pipe, &info);
142f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell}
143f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell
1443733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca
1453733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonsecaunsigned
1463733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonsecautil_draw_max_index(
1473733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca      const struct pipe_vertex_buffer *vertex_buffers,
1483733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca      const struct pipe_vertex_element *vertex_elements,
1493733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca      unsigned nr_vertex_elements,
1503733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca      const struct pipe_draw_info *info);
1513733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca
1523733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca
1533733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca#ifdef __cplusplus
1543733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca}
155f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell#endif
1563733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca
1573733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca#endif /* !U_DRAW_H */
158