1 /* -*- mode: c; c-basic-offset: 3 -*- */
3 * Copyright 2000 Gareth Hughes
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
13 * The above copyright notice and this permission notice (including the next
14 * paragraph) shall be included in all copies or substantial portions of the
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * GARETH HUGHES BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
21 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 * Gareth Hughes <gareth@valinux.com>
28 * Leif Delgass <ldelgass@retinalburn.net>
29 * José Fonseca <j_r_fonseca@yahoo.co.uk>
32 #include "main/glheader.h"
33 #include "main/mtypes.h"
34 #include "main/imports.h"
35 #include "main/macros.h"
36 #include "main/colormac.h"
38 #include "swrast_setup/swrast_setup.h"
39 #include "tnl/t_context.h"
41 #include "mach64_context.h"
42 #include "mach64_vb.h"
43 #include "mach64_ioctl.h"
44 #include "mach64_tris.h"
45 #include "mach64_state.h"
48 #define MACH64_TEX1_BIT 0x1
49 #define MACH64_TEX0_BIT 0x2
50 #define MACH64_RGBA_BIT 0x4
51 #define MACH64_SPEC_BIT 0x8
52 #define MACH64_FOG_BIT 0x10
53 #define MACH64_XYZW_BIT 0x20
54 #define MACH64_PTEX_BIT 0x40
55 #define MACH64_MAX_SETUP 0x80
58 void (*emit
)( GLcontext
*, GLuint
, GLuint
, void *, GLuint
);
59 tnl_interp_func interp
;
60 tnl_copy_pv_func copy_pv
;
61 GLboolean (*check_tex_sizes
)( GLcontext
*ctx
);
64 } setup_tab
[MACH64_MAX_SETUP
];
66 #define TINY_VERTEX_FORMAT 1
67 #define NOTEX_VERTEX_FORMAT 2
68 #define TEX0_VERTEX_FORMAT 3
69 #define TEX1_VERTEX_FORMAT 4
70 #define PROJ_TEX1_VERTEX_FORMAT 0
71 #define TEX2_VERTEX_FORMAT 0
72 #define TEX3_VERTEX_FORMAT 0
73 #define PROJ_TEX3_VERTEX_FORMAT 0
75 #define DO_XYZW (IND & MACH64_XYZW_BIT)
76 #define DO_RGBA (IND & MACH64_RGBA_BIT)
77 #define DO_SPEC (IND & MACH64_SPEC_BIT)
78 #define DO_FOG (IND & MACH64_FOG_BIT)
79 #define DO_TEX0 (IND & MACH64_TEX0_BIT)
80 #define DO_TEX1 (IND & MACH64_TEX1_BIT)
83 #define DO_PTEX (IND & MACH64_PTEX_BIT)
85 #define VERTEX mach64Vertex
86 #define LOCALVARS mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
87 #define GET_VIEWPORT_MAT() mmesa->hw_viewport
88 #define GET_TEXSOURCE(n) mmesa->tmu_source[n]
89 #define GET_VERTEX_FORMAT() mmesa->vertex_format
90 #define GET_VERTEX_STORE() mmesa->verts
91 #define GET_VERTEX_SIZE() mmesa->vertex_size * sizeof(GLuint)
93 #define HAVE_HW_VIEWPORT 0
94 #define HAVE_HW_DIVIDE 0
95 #define HAVE_RGBA_COLOR 0
96 #define HAVE_TINY_VERTICES 1
97 #define HAVE_NOTEX_VERTICES 1
98 #define HAVE_TEX0_VERTICES 1
99 #define HAVE_TEX1_VERTICES 1
100 #define HAVE_TEX2_VERTICES 0
101 #define HAVE_TEX3_VERTICES 0
102 #define HAVE_PTEX_VERTICES 0
104 #define UNVIEWPORT_VARS \
105 const GLfloat dx = - (GLfloat)mmesa->drawX - SUBPIXEL_X; \
106 const GLfloat dy = (mmesa->driDrawable->h + \
107 (GLfloat)mmesa->drawY + SUBPIXEL_Y); \
108 const GLfloat sz = 1.0 / mmesa->depth_scale
110 #if MACH64_NATIVE_VTXFMT
112 #define UNVIEWPORT_X(x) ((GLfloat)(x) / 4.0) + dx
113 #define UNVIEWPORT_Y(y) - ((GLfloat)(y) / 4.0) + dy
114 #define UNVIEWPORT_Z(z) (GLfloat)((z) >> 15) * sz
118 #define UNVIEWPORT_X(x) x + dx;
119 #define UNVIEWPORT_Y(y) - y + dy;
120 #define UNVIEWPORT_Z(z) z * sz;
124 #define PTEX_FALLBACK() FALLBACK(MACH64_CONTEXT(ctx), MACH64_FALLBACK_TEXTURE, 1)
126 #define IMPORT_FLOAT_COLORS mach64_import_float_colors
127 #define IMPORT_FLOAT_SPEC_COLORS mach64_import_float_spec_colors
129 #define INTERP_VERTEX setup_tab[mmesa->SetupIndex].interp
130 #define COPY_PV_VERTEX setup_tab[mmesa->SetupIndex].copy_pv
132 /***********************************************************************
133 * Generate pv-copying and translation functions *
134 ***********************************************************************/
136 #if MACH64_NATIVE_VTXFMT
138 #define TAG(x) mach64_##x
139 #include "mach64_native_vb.c"
143 #define TAG(x) mach64_##x
144 #include "tnl_dd/t_dd_vb.c"
148 /***********************************************************************
149 * Generate vertex emit and interp functions *
150 ***********************************************************************/
153 #if MACH64_NATIVE_VTXFMT
155 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT)
156 #define TAG(x) x##_wg
157 #include "mach64_native_vbtmp.h"
159 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_SPEC_BIT)
160 #define TAG(x) x##_wgs
161 #include "mach64_native_vbtmp.h"
163 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_TEX0_BIT)
164 #define TAG(x) x##_wgt0
165 #include "mach64_native_vbtmp.h"
167 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
168 #define TAG(x) x##_wgt0t1
169 #include "mach64_native_vbtmp.h"
171 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_TEX0_BIT|MACH64_PTEX_BIT)
172 #define TAG(x) x##_wgpt0
173 #include "mach64_native_vbtmp.h"
175 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT)
176 #define TAG(x) x##_wgst0
177 #include "mach64_native_vbtmp.h"
179 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT|\
181 #define TAG(x) x##_wgst0t1
182 #include "mach64_native_vbtmp.h"
184 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT|\
186 #define TAG(x) x##_wgspt0
187 #include "mach64_native_vbtmp.h"
189 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT)
190 #define TAG(x) x##_wgf
191 #include "mach64_native_vbtmp.h"
193 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT)
194 #define TAG(x) x##_wgfs
195 #include "mach64_native_vbtmp.h"
197 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT)
198 #define TAG(x) x##_wgft0
199 #include "mach64_native_vbtmp.h"
201 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT|\
203 #define TAG(x) x##_wgft0t1
204 #include "mach64_native_vbtmp.h"
206 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT|\
208 #define TAG(x) x##_wgfpt0
209 #include "mach64_native_vbtmp.h"
211 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|\
213 #define TAG(x) x##_wgfst0
214 #include "mach64_native_vbtmp.h"
216 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|\
217 MACH64_TEX0_BIT|MACH64_TEX1_BIT)
218 #define TAG(x) x##_wgfst0t1
219 #include "mach64_native_vbtmp.h"
221 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|\
222 MACH64_TEX0_BIT|MACH64_PTEX_BIT)
223 #define TAG(x) x##_wgfspt0
224 #include "mach64_native_vbtmp.h"
226 #define IND (MACH64_TEX0_BIT)
227 #define TAG(x) x##_t0
228 #include "mach64_native_vbtmp.h"
230 #define IND (MACH64_TEX0_BIT|MACH64_TEX1_BIT)
231 #define TAG(x) x##_t0t1
232 #include "mach64_native_vbtmp.h"
234 #define IND (MACH64_FOG_BIT)
236 #include "mach64_native_vbtmp.h"
238 #define IND (MACH64_FOG_BIT|MACH64_TEX0_BIT)
239 #define TAG(x) x##_ft0
240 #include "mach64_native_vbtmp.h"
242 #define IND (MACH64_FOG_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
243 #define TAG(x) x##_ft0t1
244 #include "mach64_native_vbtmp.h"
246 #define IND (MACH64_RGBA_BIT)
248 #include "mach64_native_vbtmp.h"
250 #define IND (MACH64_RGBA_BIT|MACH64_SPEC_BIT)
251 #define TAG(x) x##_gs
252 #include "mach64_native_vbtmp.h"
254 #define IND (MACH64_RGBA_BIT|MACH64_TEX0_BIT)
255 #define TAG(x) x##_gt0
256 #include "mach64_native_vbtmp.h"
258 #define IND (MACH64_RGBA_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
259 #define TAG(x) x##_gt0t1
260 #include "mach64_native_vbtmp.h"
262 #define IND (MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT)
263 #define TAG(x) x##_gst0
264 #include "mach64_native_vbtmp.h"
266 #define IND (MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
267 #define TAG(x) x##_gst0t1
268 #include "mach64_native_vbtmp.h"
270 #define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT)
271 #define TAG(x) x##_gf
272 #include "mach64_native_vbtmp.h"
274 #define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT)
275 #define TAG(x) x##_gfs
276 #include "mach64_native_vbtmp.h"
278 #define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT)
279 #define TAG(x) x##_gft0
280 #include "mach64_native_vbtmp.h"
282 #define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
283 #define TAG(x) x##_gft0t1
284 #include "mach64_native_vbtmp.h"
286 #define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT)
287 #define TAG(x) x##_gfst0
288 #include "mach64_native_vbtmp.h"
290 #define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT|\
292 #define TAG(x) x##_gfst0t1
293 #include "mach64_native_vbtmp.h"
297 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT)
298 #define TAG(x) x##_wg
299 #include "mach64_vbtmp.h"
301 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_SPEC_BIT)
302 #define TAG(x) x##_wgs
303 #include "mach64_vbtmp.h"
305 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_TEX0_BIT)
306 #define TAG(x) x##_wgt0
307 #include "mach64_vbtmp.h"
309 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
310 #define TAG(x) x##_wgt0t1
311 #include "mach64_vbtmp.h"
313 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_TEX0_BIT|MACH64_PTEX_BIT)
314 #define TAG(x) x##_wgpt0
315 #include "mach64_vbtmp.h"
317 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT)
318 #define TAG(x) x##_wgst0
319 #include "mach64_vbtmp.h"
321 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT|\
323 #define TAG(x) x##_wgst0t1
324 #include "mach64_vbtmp.h"
326 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT|\
328 #define TAG(x) x##_wgspt0
329 #include "mach64_vbtmp.h"
331 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT)
332 #define TAG(x) x##_wgf
333 #include "mach64_vbtmp.h"
335 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT)
336 #define TAG(x) x##_wgfs
337 #include "mach64_vbtmp.h"
339 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT)
340 #define TAG(x) x##_wgft0
341 #include "mach64_vbtmp.h"
343 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT|\
345 #define TAG(x) x##_wgft0t1
346 #include "mach64_vbtmp.h"
348 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT|\
350 #define TAG(x) x##_wgfpt0
351 #include "mach64_vbtmp.h"
353 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|\
355 #define TAG(x) x##_wgfst0
356 #include "mach64_vbtmp.h"
358 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|\
359 MACH64_TEX0_BIT|MACH64_TEX1_BIT)
360 #define TAG(x) x##_wgfst0t1
361 #include "mach64_vbtmp.h"
363 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|\
364 MACH64_TEX0_BIT|MACH64_PTEX_BIT)
365 #define TAG(x) x##_wgfspt0
366 #include "mach64_vbtmp.h"
368 #define IND (MACH64_TEX0_BIT)
369 #define TAG(x) x##_t0
370 #include "mach64_vbtmp.h"
372 #define IND (MACH64_TEX0_BIT|MACH64_TEX1_BIT)
373 #define TAG(x) x##_t0t1
374 #include "mach64_vbtmp.h"
376 #define IND (MACH64_FOG_BIT)
378 #include "mach64_vbtmp.h"
380 #define IND (MACH64_FOG_BIT|MACH64_TEX0_BIT)
381 #define TAG(x) x##_ft0
382 #include "mach64_vbtmp.h"
384 #define IND (MACH64_FOG_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
385 #define TAG(x) x##_ft0t1
386 #include "mach64_vbtmp.h"
388 #define IND (MACH64_RGBA_BIT)
390 #include "mach64_vbtmp.h"
392 #define IND (MACH64_RGBA_BIT|MACH64_SPEC_BIT)
393 #define TAG(x) x##_gs
394 #include "mach64_vbtmp.h"
396 #define IND (MACH64_RGBA_BIT|MACH64_TEX0_BIT)
397 #define TAG(x) x##_gt0
398 #include "mach64_vbtmp.h"
400 #define IND (MACH64_RGBA_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
401 #define TAG(x) x##_gt0t1
402 #include "mach64_vbtmp.h"
404 #define IND (MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT)
405 #define TAG(x) x##_gst0
406 #include "mach64_vbtmp.h"
408 #define IND (MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
409 #define TAG(x) x##_gst0t1
410 #include "mach64_vbtmp.h"
412 #define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT)
413 #define TAG(x) x##_gf
414 #include "mach64_vbtmp.h"
416 #define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT)
417 #define TAG(x) x##_gfs
418 #include "mach64_vbtmp.h"
420 #define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT)
421 #define TAG(x) x##_gft0
422 #include "mach64_vbtmp.h"
424 #define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
425 #define TAG(x) x##_gft0t1
426 #include "mach64_vbtmp.h"
428 #define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT)
429 #define TAG(x) x##_gfst0
430 #include "mach64_vbtmp.h"
432 #define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT|\
434 #define TAG(x) x##_gfst0t1
435 #include "mach64_vbtmp.h"
439 static void init_setup_tab( void )
478 void mach64PrintSetupFlags( char *msg
, GLuint flags
)
480 fprintf( stderr
, "%s: %d %s%s%s%s%s%s%s\n",
483 (flags
& MACH64_XYZW_BIT
) ? " xyzw," : "",
484 (flags
& MACH64_RGBA_BIT
) ? " rgba," : "",
485 (flags
& MACH64_SPEC_BIT
) ? " spec," : "",
486 (flags
& MACH64_FOG_BIT
) ? " fog," : "",
487 (flags
& MACH64_TEX0_BIT
) ? " tex-0," : "",
488 (flags
& MACH64_TEX1_BIT
) ? " tex-1," : "",
489 (flags
& MACH64_PTEX_BIT
) ? " ptex," : "");
495 void mach64CheckTexSizes( GLcontext
*ctx
)
497 mach64ContextPtr mmesa
= MACH64_CONTEXT( ctx
);
499 if (!setup_tab
[mmesa
->SetupIndex
].check_tex_sizes(ctx
)) {
500 TNLcontext
*tnl
= TNL_CONTEXT(ctx
);
502 /* Invalidate stored verts
504 mmesa
->SetupNewInputs
= ~0;
505 mmesa
->SetupIndex
|= MACH64_PTEX_BIT
;
507 if (!mmesa
->Fallback
&&
508 !(ctx
->_TriangleCaps
& (DD_TRI_LIGHT_TWOSIDE
|DD_TRI_UNFILLED
))) {
509 tnl
->Driver
.Render
.Interp
= setup_tab
[mmesa
->SetupIndex
].interp
;
510 tnl
->Driver
.Render
.CopyPV
= setup_tab
[mmesa
->SetupIndex
].copy_pv
;
515 void mach64BuildVertices( GLcontext
*ctx
,
520 mach64ContextPtr mmesa
= MACH64_CONTEXT( ctx
);
521 GLuint stride
= mmesa
->vertex_size
* sizeof(int);
522 GLubyte
*v
= ((GLubyte
*)mmesa
->verts
+ (start
* stride
));
524 newinputs
|= mmesa
->SetupNewInputs
;
525 mmesa
->SetupNewInputs
= 0;
530 if (newinputs
& VERT_BIT_POS
) {
531 setup_tab
[mmesa
->SetupIndex
].emit( ctx
, start
, count
, v
, stride
);
535 if (newinputs
& VERT_BIT_COLOR0
)
536 ind
|= MACH64_RGBA_BIT
;
538 if (newinputs
& VERT_BIT_COLOR1
)
539 ind
|= MACH64_SPEC_BIT
;
541 if (newinputs
& VERT_BIT_TEX0
)
542 ind
|= MACH64_TEX0_BIT
;
544 if (newinputs
& VERT_BIT_TEX1
)
545 ind
|= MACH64_TEX1_BIT
;
547 if (newinputs
& VERT_BIT_FOG
)
548 ind
|= MACH64_FOG_BIT
;
550 if (mmesa
->SetupIndex
& MACH64_PTEX_BIT
)
553 ind
&= mmesa
->SetupIndex
;
556 setup_tab
[ind
].emit( ctx
, start
, count
, v
, stride
);
561 void mach64ChooseVertexState( GLcontext
*ctx
)
563 TNLcontext
*tnl
= TNL_CONTEXT(ctx
);
564 mach64ContextPtr mmesa
= MACH64_CONTEXT( ctx
);
565 GLuint ind
= MACH64_XYZW_BIT
|MACH64_RGBA_BIT
;
567 if (ctx
->_TriangleCaps
& DD_SEPARATE_SPECULAR
)
568 ind
|= MACH64_SPEC_BIT
;
570 if (ctx
->Fog
.Enabled
)
571 ind
|= MACH64_FOG_BIT
;
573 if (ctx
->Texture
._EnabledUnits
) {
574 ind
|= MACH64_TEX0_BIT
;
575 if (ctx
->Texture
.Unit
[0]._ReallyEnabled
&&
576 ctx
->Texture
.Unit
[1]._ReallyEnabled
) {
577 ind
|= MACH64_TEX1_BIT
;
581 mmesa
->SetupIndex
= ind
;
583 if (ctx
->_TriangleCaps
& (DD_TRI_LIGHT_TWOSIDE
|DD_TRI_UNFILLED
)) {
584 tnl
->Driver
.Render
.Interp
= mach64_interp_extras
;
585 tnl
->Driver
.Render
.CopyPV
= mach64_copy_pv_extras
;
587 tnl
->Driver
.Render
.Interp
= setup_tab
[ind
].interp
;
588 tnl
->Driver
.Render
.CopyPV
= setup_tab
[ind
].copy_pv
;
592 if (MACH64_DEBUG
& DEBUG_VERBOSE_MSG
) {
593 mach64PrintSetupFlags( __FUNCTION__
, ind
);
597 if (setup_tab
[ind
].vertex_format
!= mmesa
->vertex_format
) {
599 mmesa
->vertex_format
= setup_tab
[ind
].vertex_format
;
600 mmesa
->vertex_size
= setup_tab
[ind
].vertex_size
;
606 void mach64_emit_contiguous_verts( GLcontext
*ctx
,
610 mach64ContextPtr mmesa
= MACH64_CONTEXT(ctx
);
611 GLuint vertex_size
= mmesa
->vertex_size
* 4;
612 GLuint
*dest
= mach64AllocDmaLow( mmesa
, (count
-start
) * vertex_size
);
613 setup_tab
[mmesa
->SetupIndex
].emit( ctx
, start
, count
, dest
, vertex_size
);
618 void mach64InitVB( GLcontext
*ctx
)
620 mach64ContextPtr mmesa
= MACH64_CONTEXT(ctx
);
621 GLuint size
= TNL_CONTEXT(ctx
)->vb
.Size
;
623 mmesa
->verts
= (GLubyte
*)ALIGN_MALLOC(size
* 4 * 16, 32);
626 static int firsttime
= 1;
635 void mach64FreeVB( GLcontext
*ctx
)
637 mach64ContextPtr mmesa
= MACH64_CONTEXT(ctx
);
639 ALIGN_FREE(mmesa
->verts
);