Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4358 | Serge | 1 | #ifndef __NV30_CONTEXT_H__ |
2 | #define __NV30_CONTEXT_H__ |
||
3 | |||
4 | #include "pipe/p_format.h" |
||
5 | #include "util/u_blitter.h" |
||
6 | |||
7 | #include "nv30_screen.h" |
||
8 | #include "nv30_state.h" |
||
9 | |||
10 | #include "nouveau/nouveau_context.h" |
||
11 | |||
12 | #define BUFCTX_FB 0 |
||
13 | #define BUFCTX_VTXTMP 1 |
||
14 | #define BUFCTX_VTXBUF 2 |
||
15 | #define BUFCTX_IDXBUF 3 |
||
16 | #define BUFCTX_VERTTEX(n) (4 + (n)) |
||
17 | #define BUFCTX_FRAGPROG 8 |
||
18 | #define BUFCTX_FRAGTEX(n) (9 + (n)) |
||
19 | |||
20 | #define NV30_NEW_BLEND (1 << 0) |
||
21 | #define NV30_NEW_RASTERIZER (1 << 1) |
||
22 | #define NV30_NEW_ZSA (1 << 2) |
||
23 | #define NV30_NEW_VERTPROG (1 << 3) |
||
24 | #define NV30_NEW_VERTCONST (1 << 4) |
||
25 | #define NV30_NEW_FRAGPROG (1 << 5) |
||
26 | #define NV30_NEW_FRAGCONST (1 << 6) |
||
27 | #define NV30_NEW_BLEND_COLOUR (1 << 7) |
||
28 | #define NV30_NEW_STENCIL_REF (1 << 8) |
||
29 | #define NV30_NEW_CLIP (1 << 9) |
||
30 | #define NV30_NEW_SAMPLE_MASK (1 << 10) |
||
31 | #define NV30_NEW_FRAMEBUFFER (1 << 11) |
||
32 | #define NV30_NEW_STIPPLE (1 << 12) |
||
33 | #define NV30_NEW_SCISSOR (1 << 13) |
||
34 | #define NV30_NEW_VIEWPORT (1 << 14) |
||
35 | #define NV30_NEW_ARRAYS (1 << 15) |
||
36 | #define NV30_NEW_VERTEX (1 << 16) |
||
37 | #define NV30_NEW_CONSTBUF (1 << 17) |
||
38 | #define NV30_NEW_FRAGTEX (1 << 18) |
||
39 | #define NV30_NEW_VERTTEX (1 << 19) |
||
40 | #define NV30_NEW_SWTNL (1 << 31) |
||
41 | #define NV30_NEW_ALL 0x000fffff |
||
42 | |||
43 | struct nv30_context { |
||
44 | struct nouveau_context base; |
||
45 | struct nv30_screen *screen; |
||
46 | struct blitter_context *blitter; |
||
47 | |||
48 | struct nouveau_bufctx *bufctx; |
||
49 | |||
50 | struct { |
||
51 | unsigned rt_enable; |
||
52 | unsigned scissor_off; |
||
53 | unsigned num_vtxelts; |
||
54 | boolean prim_restart; |
||
55 | struct nv30_fragprog *fragprog; |
||
56 | } state; |
||
57 | |||
58 | uint32_t dirty; |
||
59 | |||
60 | struct draw_context *draw; |
||
61 | uint32_t draw_flags; |
||
62 | uint32_t draw_dirty; |
||
63 | |||
64 | struct nv30_blend_stateobj *blend; |
||
65 | struct nv30_rasterizer_stateobj *rast; |
||
66 | struct nv30_zsa_stateobj *zsa; |
||
67 | struct nv30_vertex_stateobj *vertex; |
||
68 | |||
69 | struct { |
||
70 | unsigned filter; |
||
71 | unsigned aniso; |
||
72 | } config; |
||
73 | |||
74 | struct { |
||
75 | struct nv30_vertprog *program; |
||
76 | |||
77 | struct pipe_resource *constbuf; |
||
78 | unsigned constbuf_nr; |
||
79 | |||
80 | struct pipe_sampler_view *textures[PIPE_MAX_SAMPLERS]; |
||
81 | unsigned num_textures; |
||
82 | struct nv30_sampler_state *samplers[PIPE_MAX_SAMPLERS]; |
||
83 | unsigned num_samplers; |
||
84 | unsigned dirty_samplers; |
||
85 | } vertprog; |
||
86 | |||
87 | struct { |
||
88 | struct nv30_fragprog *program; |
||
89 | |||
90 | struct pipe_resource *constbuf; |
||
91 | unsigned constbuf_nr; |
||
92 | |||
93 | struct pipe_sampler_view *textures[PIPE_MAX_SAMPLERS]; |
||
94 | unsigned num_textures; |
||
95 | struct nv30_sampler_state *samplers[PIPE_MAX_SAMPLERS]; |
||
96 | unsigned num_samplers; |
||
97 | unsigned dirty_samplers; |
||
98 | } fragprog; |
||
99 | |||
100 | struct pipe_framebuffer_state framebuffer; |
||
101 | struct pipe_blend_color blend_colour; |
||
102 | struct pipe_stencil_ref stencil_ref; |
||
103 | struct pipe_poly_stipple stipple; |
||
104 | struct pipe_scissor_state scissor; |
||
105 | struct pipe_viewport_state viewport; |
||
106 | struct pipe_clip_state clip; |
||
107 | |||
108 | unsigned sample_mask; |
||
109 | |||
110 | struct pipe_vertex_buffer vtxbuf[PIPE_MAX_ATTRIBS]; |
||
111 | unsigned num_vtxbufs; |
||
112 | struct pipe_index_buffer idxbuf; |
||
113 | uint32_t vbo_fifo; |
||
114 | uint32_t vbo_user; |
||
115 | unsigned vbo_min_index; |
||
116 | unsigned vbo_max_index; |
||
117 | boolean vbo_push_hint; |
||
118 | |||
119 | struct nouveau_heap *blit_vp; |
||
120 | struct pipe_resource *blit_fp; |
||
121 | |||
122 | /*XXX: nvfx state, DO NOT USE EVER OUTSIDE "STOLEN" NVFX code */ |
||
123 | unsigned is_nv4x; |
||
124 | unsigned use_nv4x; |
||
125 | bool hw_pointsprite_control; |
||
126 | enum { |
||
127 | HW, |
||
128 | } render_mode; |
||
129 | |||
130 | struct pipe_query *render_cond_query; |
||
131 | unsigned render_cond_mode; |
||
132 | boolean render_cond_cond; |
||
133 | }; |
||
134 | |||
135 | static INLINE struct nv30_context * |
||
136 | nv30_context(struct pipe_context *pipe) |
||
137 | { |
||
138 | return (struct nv30_context *)pipe; |
||
139 | } |
||
140 | |||
141 | struct pipe_context * |
||
142 | nv30_context_create(struct pipe_screen *pscreen, void *priv); |
||
143 | |||
144 | void |
||
145 | nv30_vbo_init(struct pipe_context *pipe); |
||
146 | |||
147 | void |
||
148 | nv30_vbo_validate(struct nv30_context *nv30); |
||
149 | |||
150 | void |
||
151 | nv30_query_init(struct pipe_context *pipe); |
||
152 | |||
153 | void |
||
154 | nv30_state_init(struct pipe_context *pipe); |
||
155 | |||
156 | void |
||
157 | nv30_clear_init(struct pipe_context *pipe); |
||
158 | |||
159 | void |
||
160 | nv30_vertprog_init(struct pipe_context *pipe); |
||
161 | |||
162 | void |
||
163 | nv30_vertprog_validate(struct nv30_context *nv30); |
||
164 | |||
165 | void |
||
166 | nv30_fragprog_init(struct pipe_context *pipe); |
||
167 | |||
168 | void |
||
169 | nv30_fragprog_validate(struct nv30_context *nv30); |
||
170 | |||
171 | void |
||
172 | nv30_texture_init(struct pipe_context *pipe); |
||
173 | |||
174 | void |
||
175 | nv30_texture_validate(struct nv30_context *nv30); |
||
176 | |||
177 | void |
||
178 | nv30_fragtex_init(struct pipe_context *pipe); |
||
179 | |||
180 | void |
||
181 | nv30_fragtex_validate(struct nv30_context *nv30); |
||
182 | |||
183 | void |
||
184 | nv40_verttex_init(struct pipe_context *pipe); |
||
185 | |||
186 | void |
||
187 | nv40_verttex_validate(struct nv30_context *nv30); |
||
188 | |||
189 | void |
||
190 | nv30_push_vbo(struct nv30_context *nv30, const struct pipe_draw_info *info); |
||
191 | |||
192 | void |
||
193 | nv30_draw_init(struct pipe_context *pipe); |
||
194 | |||
195 | void |
||
196 | nv30_render_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info); |
||
197 | |||
198 | boolean |
||
199 | nv30_state_validate(struct nv30_context *nv30, boolean hwtnl); |
||
200 | |||
201 | void |
||
202 | nv30_state_release(struct nv30_context *nv30); |
||
203 | |||
204 | //XXX: needed to make it build, clean this up! |
||
205 | void |
||
206 | _nvfx_fragprog_translate(struct nv30_context *nvfx, struct nv30_fragprog *fp, |
||
207 | boolean emulate_sprite_flipping); |
||
208 | |||
209 | boolean |
||
210 | _nvfx_vertprog_translate(struct nv30_context *nv30, struct nv30_vertprog *vp); |
||
211 | |||
212 | #ifdef NV30_3D_VERTEX_BEGIN_END |
||
213 | #define NV30_PRIM_GL_CASE(n) \ |
||
214 | case PIPE_PRIM_##n: return NV30_3D_VERTEX_BEGIN_END_##n |
||
215 | |||
216 | static INLINE unsigned |
||
217 | nv30_prim_gl(unsigned prim) |
||
218 | { |
||
219 | switch (prim) { |
||
220 | NV30_PRIM_GL_CASE(POINTS); |
||
221 | NV30_PRIM_GL_CASE(LINES); |
||
222 | NV30_PRIM_GL_CASE(LINE_LOOP); |
||
223 | NV30_PRIM_GL_CASE(LINE_STRIP); |
||
224 | NV30_PRIM_GL_CASE(TRIANGLES); |
||
225 | NV30_PRIM_GL_CASE(TRIANGLE_STRIP); |
||
226 | NV30_PRIM_GL_CASE(TRIANGLE_FAN); |
||
227 | NV30_PRIM_GL_CASE(QUADS); |
||
228 | NV30_PRIM_GL_CASE(QUAD_STRIP); |
||
229 | NV30_PRIM_GL_CASE(POLYGON); |
||
230 | default: |
||
231 | return NV30_3D_VERTEX_BEGIN_END_POINTS; |
||
232 | break; |
||
233 | } |
||
234 | } |
||
235 | #endif |
||
236 | |||
237 | #endif><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><> |