Merge branch 'nouveau-import'
[mesa.git] / src / mesa / drivers / dri / i965 / brw_draw.h
1 /**************************************************************************
2 *
3 * Copyright 2005 Tungsten Graphics, Inc., Cedar Park, Texas.
4 * All Rights Reserved.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the
8 * "Software"), to deal in the Software without restriction, including
9 * without limitation the rights to use, copy, modify, merge, publish,
10 * distribute, sub license, and/or sell copies of the Software, and to
11 * permit persons to whom the Software is furnished to do so, subject to
12 * the following conditions:
13 *
14 * The above copyright notice and this permission notice (including the
15 * next paragraph) shall be included in all copies or substantial portions
16 * of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21 * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 *
26 **************************************************************************/
27
28 #ifndef BRW_DRAW_H
29 #define BRW_DRAW_H
30
31 #include "mtypes.h" /* for GLcontext... */
32 #include "brw_attrib.h"
33
34 struct brw_context;
35
36 struct brw_draw_prim {
37 GLuint mode:8;
38 GLuint indexed:1;
39 GLuint begin:1;
40 GLuint end:1;
41 GLuint weak:1;
42 GLuint pad:20;
43
44 GLuint start;
45 GLuint count;
46 };
47
48 struct brw_draw_index_buffer {
49 GLuint count;
50 GLenum type;
51 struct gl_buffer_object *obj;
52 const void *ptr;
53 GLuint rebase;
54 };
55
56
57 #define BRW_DRAW_SORTED 0x1
58 #define BRW_DRAW_ALL_INTERLEAVED 0x2
59 #define BRW_DRAW_NON_INTERLEAVED 0x4
60 #define BRW_DRAW_LOCKED 0x8
61
62 GLboolean brw_draw_prims( GLcontext *ctx,
63 const struct gl_client_array *arrays[],
64 const struct brw_draw_prim *prims,
65 GLuint nr_prims,
66 const struct brw_draw_index_buffer *ib,
67 GLuint min_index,
68 GLuint max_index,
69 GLuint flags );
70
71 void brw_draw_init( struct brw_context *brw );
72 void brw_draw_destroy( struct brw_context *brw );
73
74 /* brw_draw_current.c
75 */
76 void brw_init_current_values(GLcontext *ctx,
77 struct gl_client_array *arrays);
78
79
80 /* brw_draw_upload.c
81 */
82 void brw_upload_indices( struct brw_context *brw,
83 const struct brw_draw_index_buffer *index_buffer);
84
85 GLboolean brw_upload_vertices( struct brw_context *brw,
86 GLuint min_index,
87 GLuint max_index );
88
89
90 /* Helpers for save, exec. Should probably have their own file:
91 */
92 struct brw_exec_context;
93 struct brw_save_context;
94
95 struct brw_exec_save {
96 struct brw_exec_context *exec;
97 struct brw_save_context *save;
98 };
99
100 /* Doesn't really belong here:
101 */
102 #define IMM_CONTEXT(ctx) ((struct brw_exec_save *)((ctx)->swtnl_im))
103
104 #endif