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"
47 #define MACH64_TEX1_BIT 0x1
48 #define MACH64_TEX0_BIT 0x2
49 #define MACH64_RGBA_BIT 0x4
50 #define MACH64_SPEC_BIT 0x8
51 #define MACH64_FOG_BIT 0x10
52 #define MACH64_XYZW_BIT 0x20
53 #define MACH64_PTEX_BIT 0x40
54 #define MACH64_MAX_SETUP 0x80
57 void (*emit
)( GLcontext
*, GLuint
, GLuint
, void *, GLuint
);
58 tnl_interp_func interp
;
59 tnl_copy_pv_func copy_pv
;
60 GLboolean (*check_tex_sizes
)( GLcontext
*ctx
);
63 } setup_tab
[MACH64_MAX_SETUP
];
65 #define TINY_VERTEX_FORMAT 1
66 #define NOTEX_VERTEX_FORMAT 2
67 #define TEX0_VERTEX_FORMAT 3
68 #define TEX1_VERTEX_FORMAT 4
69 #define PROJ_TEX1_VERTEX_FORMAT 0
70 #define TEX2_VERTEX_FORMAT 0
71 #define TEX3_VERTEX_FORMAT 0
72 #define PROJ_TEX3_VERTEX_FORMAT 0
74 #define DO_XYZW (IND & MACH64_XYZW_BIT)
75 #define DO_RGBA (IND & MACH64_RGBA_BIT)
76 #define DO_SPEC (IND & MACH64_SPEC_BIT)
77 #define DO_FOG (IND & MACH64_FOG_BIT)
78 #define DO_TEX0 (IND & MACH64_TEX0_BIT)
79 #define DO_TEX1 (IND & MACH64_TEX1_BIT)
82 #define DO_PTEX (IND & MACH64_PTEX_BIT)
84 #define VERTEX mach64Vertex
85 #define LOCALVARS mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
86 #define GET_VIEWPORT_MAT() mmesa->hw_viewport
87 #define GET_TEXSOURCE(n) mmesa->tmu_source[n]
88 #define GET_VERTEX_FORMAT() mmesa->vertex_format
89 #define GET_VERTEX_STORE() mmesa->verts
90 #define GET_VERTEX_SIZE() mmesa->vertex_size * sizeof(GLuint)
92 #define HAVE_HW_VIEWPORT 0
93 #define HAVE_HW_DIVIDE 0
94 #define HAVE_RGBA_COLOR 0
95 #define HAVE_TINY_VERTICES 1
96 #define HAVE_NOTEX_VERTICES 1
97 #define HAVE_TEX0_VERTICES 1
98 #define HAVE_TEX1_VERTICES 1
99 #define HAVE_TEX2_VERTICES 0
100 #define HAVE_TEX3_VERTICES 0
101 #define HAVE_PTEX_VERTICES 0
103 #define UNVIEWPORT_VARS \
104 const GLfloat dx = - (GLfloat)mmesa->drawX - SUBPIXEL_X; \
105 const GLfloat dy = (mmesa->driDrawable->h + \
106 (GLfloat)mmesa->drawY + SUBPIXEL_Y); \
107 const GLfloat sz = 1.0 / mmesa->depth_scale
109 #if MACH64_NATIVE_VTXFMT
111 #define UNVIEWPORT_X(x) ((GLfloat)(x) / 4.0) + dx
112 #define UNVIEWPORT_Y(y) - ((GLfloat)(y) / 4.0) + dy
113 #define UNVIEWPORT_Z(z) (GLfloat)((z) >> 15) * sz
117 #define UNVIEWPORT_X(x) x + dx;
118 #define UNVIEWPORT_Y(y) - y + dy;
119 #define UNVIEWPORT_Z(z) z * sz;
123 #define PTEX_FALLBACK() FALLBACK(MACH64_CONTEXT(ctx), MACH64_FALLBACK_TEXTURE, 1)
125 #define IMPORT_FLOAT_COLORS mach64_import_float_colors
126 #define IMPORT_FLOAT_SPEC_COLORS mach64_import_float_spec_colors
128 #define INTERP_VERTEX setup_tab[mmesa->SetupIndex].interp
129 #define COPY_PV_VERTEX setup_tab[mmesa->SetupIndex].copy_pv
131 /***********************************************************************
132 * Generate pv-copying and translation functions *
133 ***********************************************************************/
135 #if MACH64_NATIVE_VTXFMT
137 #define TAG(x) mach64_##x
138 #include "mach64_native_vb.c"
142 #define TAG(x) mach64_##x
143 #include "tnl_dd/t_dd_vb.c"
147 /***********************************************************************
148 * Generate vertex emit and interp functions *
149 ***********************************************************************/
152 #if MACH64_NATIVE_VTXFMT
154 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT)
155 #define TAG(x) x##_wg
156 #include "mach64_native_vbtmp.h"
158 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_SPEC_BIT)
159 #define TAG(x) x##_wgs
160 #include "mach64_native_vbtmp.h"
162 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_TEX0_BIT)
163 #define TAG(x) x##_wgt0
164 #include "mach64_native_vbtmp.h"
166 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
167 #define TAG(x) x##_wgt0t1
168 #include "mach64_native_vbtmp.h"
170 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_TEX0_BIT|MACH64_PTEX_BIT)
171 #define TAG(x) x##_wgpt0
172 #include "mach64_native_vbtmp.h"
174 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT)
175 #define TAG(x) x##_wgst0
176 #include "mach64_native_vbtmp.h"
178 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT|\
180 #define TAG(x) x##_wgst0t1
181 #include "mach64_native_vbtmp.h"
183 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT|\
185 #define TAG(x) x##_wgspt0
186 #include "mach64_native_vbtmp.h"
188 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT)
189 #define TAG(x) x##_wgf
190 #include "mach64_native_vbtmp.h"
192 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT)
193 #define TAG(x) x##_wgfs
194 #include "mach64_native_vbtmp.h"
196 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT)
197 #define TAG(x) x##_wgft0
198 #include "mach64_native_vbtmp.h"
200 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT|\
202 #define TAG(x) x##_wgft0t1
203 #include "mach64_native_vbtmp.h"
205 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT|\
207 #define TAG(x) x##_wgfpt0
208 #include "mach64_native_vbtmp.h"
210 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|\
212 #define TAG(x) x##_wgfst0
213 #include "mach64_native_vbtmp.h"
215 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|\
216 MACH64_TEX0_BIT|MACH64_TEX1_BIT)
217 #define TAG(x) x##_wgfst0t1
218 #include "mach64_native_vbtmp.h"
220 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|\
221 MACH64_TEX0_BIT|MACH64_PTEX_BIT)
222 #define TAG(x) x##_wgfspt0
223 #include "mach64_native_vbtmp.h"
225 #define IND (MACH64_TEX0_BIT)
226 #define TAG(x) x##_t0
227 #include "mach64_native_vbtmp.h"
229 #define IND (MACH64_TEX0_BIT|MACH64_TEX1_BIT)
230 #define TAG(x) x##_t0t1
231 #include "mach64_native_vbtmp.h"
233 #define IND (MACH64_FOG_BIT)
235 #include "mach64_native_vbtmp.h"
237 #define IND (MACH64_FOG_BIT|MACH64_TEX0_BIT)
238 #define TAG(x) x##_ft0
239 #include "mach64_native_vbtmp.h"
241 #define IND (MACH64_FOG_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
242 #define TAG(x) x##_ft0t1
243 #include "mach64_native_vbtmp.h"
245 #define IND (MACH64_RGBA_BIT)
247 #include "mach64_native_vbtmp.h"
249 #define IND (MACH64_RGBA_BIT|MACH64_SPEC_BIT)
250 #define TAG(x) x##_gs
251 #include "mach64_native_vbtmp.h"
253 #define IND (MACH64_RGBA_BIT|MACH64_TEX0_BIT)
254 #define TAG(x) x##_gt0
255 #include "mach64_native_vbtmp.h"
257 #define IND (MACH64_RGBA_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
258 #define TAG(x) x##_gt0t1
259 #include "mach64_native_vbtmp.h"
261 #define IND (MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT)
262 #define TAG(x) x##_gst0
263 #include "mach64_native_vbtmp.h"
265 #define IND (MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
266 #define TAG(x) x##_gst0t1
267 #include "mach64_native_vbtmp.h"
269 #define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT)
270 #define TAG(x) x##_gf
271 #include "mach64_native_vbtmp.h"
273 #define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT)
274 #define TAG(x) x##_gfs
275 #include "mach64_native_vbtmp.h"
277 #define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT)
278 #define TAG(x) x##_gft0
279 #include "mach64_native_vbtmp.h"
281 #define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
282 #define TAG(x) x##_gft0t1
283 #include "mach64_native_vbtmp.h"
285 #define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT)
286 #define TAG(x) x##_gfst0
287 #include "mach64_native_vbtmp.h"
289 #define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT|\
291 #define TAG(x) x##_gfst0t1
292 #include "mach64_native_vbtmp.h"
296 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT)
297 #define TAG(x) x##_wg
298 #include "mach64_vbtmp.h"
300 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_SPEC_BIT)
301 #define TAG(x) x##_wgs
302 #include "mach64_vbtmp.h"
304 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_TEX0_BIT)
305 #define TAG(x) x##_wgt0
306 #include "mach64_vbtmp.h"
308 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
309 #define TAG(x) x##_wgt0t1
310 #include "mach64_vbtmp.h"
312 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_TEX0_BIT|MACH64_PTEX_BIT)
313 #define TAG(x) x##_wgpt0
314 #include "mach64_vbtmp.h"
316 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT)
317 #define TAG(x) x##_wgst0
318 #include "mach64_vbtmp.h"
320 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT|\
322 #define TAG(x) x##_wgst0t1
323 #include "mach64_vbtmp.h"
325 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT|\
327 #define TAG(x) x##_wgspt0
328 #include "mach64_vbtmp.h"
330 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT)
331 #define TAG(x) x##_wgf
332 #include "mach64_vbtmp.h"
334 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT)
335 #define TAG(x) x##_wgfs
336 #include "mach64_vbtmp.h"
338 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT)
339 #define TAG(x) x##_wgft0
340 #include "mach64_vbtmp.h"
342 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT|\
344 #define TAG(x) x##_wgft0t1
345 #include "mach64_vbtmp.h"
347 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT|\
349 #define TAG(x) x##_wgfpt0
350 #include "mach64_vbtmp.h"
352 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|\
354 #define TAG(x) x##_wgfst0
355 #include "mach64_vbtmp.h"
357 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|\
358 MACH64_TEX0_BIT|MACH64_TEX1_BIT)
359 #define TAG(x) x##_wgfst0t1
360 #include "mach64_vbtmp.h"
362 #define IND (MACH64_XYZW_BIT|MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|\
363 MACH64_TEX0_BIT|MACH64_PTEX_BIT)
364 #define TAG(x) x##_wgfspt0
365 #include "mach64_vbtmp.h"
367 #define IND (MACH64_TEX0_BIT)
368 #define TAG(x) x##_t0
369 #include "mach64_vbtmp.h"
371 #define IND (MACH64_TEX0_BIT|MACH64_TEX1_BIT)
372 #define TAG(x) x##_t0t1
373 #include "mach64_vbtmp.h"
375 #define IND (MACH64_FOG_BIT)
377 #include "mach64_vbtmp.h"
379 #define IND (MACH64_FOG_BIT|MACH64_TEX0_BIT)
380 #define TAG(x) x##_ft0
381 #include "mach64_vbtmp.h"
383 #define IND (MACH64_FOG_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
384 #define TAG(x) x##_ft0t1
385 #include "mach64_vbtmp.h"
387 #define IND (MACH64_RGBA_BIT)
389 #include "mach64_vbtmp.h"
391 #define IND (MACH64_RGBA_BIT|MACH64_SPEC_BIT)
392 #define TAG(x) x##_gs
393 #include "mach64_vbtmp.h"
395 #define IND (MACH64_RGBA_BIT|MACH64_TEX0_BIT)
396 #define TAG(x) x##_gt0
397 #include "mach64_vbtmp.h"
399 #define IND (MACH64_RGBA_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
400 #define TAG(x) x##_gt0t1
401 #include "mach64_vbtmp.h"
403 #define IND (MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT)
404 #define TAG(x) x##_gst0
405 #include "mach64_vbtmp.h"
407 #define IND (MACH64_RGBA_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
408 #define TAG(x) x##_gst0t1
409 #include "mach64_vbtmp.h"
411 #define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT)
412 #define TAG(x) x##_gf
413 #include "mach64_vbtmp.h"
415 #define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT)
416 #define TAG(x) x##_gfs
417 #include "mach64_vbtmp.h"
419 #define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT)
420 #define TAG(x) x##_gft0
421 #include "mach64_vbtmp.h"
423 #define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_TEX0_BIT|MACH64_TEX1_BIT)
424 #define TAG(x) x##_gft0t1
425 #include "mach64_vbtmp.h"
427 #define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT)
428 #define TAG(x) x##_gfst0
429 #include "mach64_vbtmp.h"
431 #define IND (MACH64_RGBA_BIT|MACH64_FOG_BIT|MACH64_SPEC_BIT|MACH64_TEX0_BIT|\
433 #define TAG(x) x##_gfst0t1
434 #include "mach64_vbtmp.h"
438 static void init_setup_tab( void )
477 void mach64PrintSetupFlags( char *msg
, GLuint flags
)
479 fprintf( stderr
, "%s: %d %s%s%s%s%s%s%s\n",
482 (flags
& MACH64_XYZW_BIT
) ? " xyzw," : "",
483 (flags
& MACH64_RGBA_BIT
) ? " rgba," : "",
484 (flags
& MACH64_SPEC_BIT
) ? " spec," : "",
485 (flags
& MACH64_FOG_BIT
) ? " fog," : "",
486 (flags
& MACH64_TEX0_BIT
) ? " tex-0," : "",
487 (flags
& MACH64_TEX1_BIT
) ? " tex-1," : "",
488 (flags
& MACH64_PTEX_BIT
) ? " ptex," : "");
494 void mach64CheckTexSizes( GLcontext
*ctx
)
496 mach64ContextPtr mmesa
= MACH64_CONTEXT( ctx
);
498 if (!setup_tab
[mmesa
->SetupIndex
].check_tex_sizes(ctx
)) {
499 TNLcontext
*tnl
= TNL_CONTEXT(ctx
);
501 /* Invalidate stored verts
503 mmesa
->SetupNewInputs
= ~0;
504 mmesa
->SetupIndex
|= MACH64_PTEX_BIT
;
506 if (!mmesa
->Fallback
&&
507 !(ctx
->_TriangleCaps
& (DD_TRI_LIGHT_TWOSIDE
|DD_TRI_UNFILLED
))) {
508 tnl
->Driver
.Render
.Interp
= setup_tab
[mmesa
->SetupIndex
].interp
;
509 tnl
->Driver
.Render
.CopyPV
= setup_tab
[mmesa
->SetupIndex
].copy_pv
;
514 void mach64BuildVertices( GLcontext
*ctx
,
519 mach64ContextPtr mmesa
= MACH64_CONTEXT( ctx
);
520 GLuint stride
= mmesa
->vertex_size
* sizeof(int);
521 GLubyte
*v
= ((GLubyte
*)mmesa
->verts
+ (start
* stride
));
523 newinputs
|= mmesa
->SetupNewInputs
;
524 mmesa
->SetupNewInputs
= 0;
529 if (newinputs
& VERT_BIT_POS
) {
530 setup_tab
[mmesa
->SetupIndex
].emit( ctx
, start
, count
, v
, stride
);
534 if (newinputs
& VERT_BIT_COLOR0
)
535 ind
|= MACH64_RGBA_BIT
;
537 if (newinputs
& VERT_BIT_COLOR1
)
538 ind
|= MACH64_SPEC_BIT
;
540 if (newinputs
& VERT_BIT_TEX0
)
541 ind
|= MACH64_TEX0_BIT
;
543 if (newinputs
& VERT_BIT_TEX1
)
544 ind
|= MACH64_TEX1_BIT
;
546 if (newinputs
& VERT_BIT_FOG
)
547 ind
|= MACH64_FOG_BIT
;
549 if (mmesa
->SetupIndex
& MACH64_PTEX_BIT
)
552 ind
&= mmesa
->SetupIndex
;
555 setup_tab
[ind
].emit( ctx
, start
, count
, v
, stride
);
560 void mach64ChooseVertexState( GLcontext
*ctx
)
562 TNLcontext
*tnl
= TNL_CONTEXT(ctx
);
563 mach64ContextPtr mmesa
= MACH64_CONTEXT( ctx
);
564 GLuint ind
= MACH64_XYZW_BIT
|MACH64_RGBA_BIT
;
566 if (ctx
->_TriangleCaps
& DD_SEPARATE_SPECULAR
)
567 ind
|= MACH64_SPEC_BIT
;
569 if (ctx
->Fog
.Enabled
)
570 ind
|= MACH64_FOG_BIT
;
572 if (ctx
->Texture
._EnabledUnits
) {
573 ind
|= MACH64_TEX0_BIT
;
574 if (ctx
->Texture
.Unit
[0]._ReallyEnabled
&&
575 ctx
->Texture
.Unit
[1]._ReallyEnabled
) {
576 ind
|= MACH64_TEX1_BIT
;
580 mmesa
->SetupIndex
= ind
;
582 if (ctx
->_TriangleCaps
& (DD_TRI_LIGHT_TWOSIDE
|DD_TRI_UNFILLED
)) {
583 tnl
->Driver
.Render
.Interp
= mach64_interp_extras
;
584 tnl
->Driver
.Render
.CopyPV
= mach64_copy_pv_extras
;
586 tnl
->Driver
.Render
.Interp
= setup_tab
[ind
].interp
;
587 tnl
->Driver
.Render
.CopyPV
= setup_tab
[ind
].copy_pv
;
591 if (MACH64_DEBUG
& DEBUG_VERBOSE_MSG
) {
592 mach64PrintSetupFlags( __FUNCTION__
, ind
);
596 if (setup_tab
[ind
].vertex_format
!= mmesa
->vertex_format
) {
598 mmesa
->vertex_format
= setup_tab
[ind
].vertex_format
;
599 mmesa
->vertex_size
= setup_tab
[ind
].vertex_size
;
605 void mach64_emit_contiguous_verts( GLcontext
*ctx
,
609 mach64ContextPtr mmesa
= MACH64_CONTEXT(ctx
);
610 GLuint vertex_size
= mmesa
->vertex_size
* 4;
611 GLuint
*dest
= mach64AllocDmaLow( mmesa
, (count
-start
) * vertex_size
);
612 setup_tab
[mmesa
->SetupIndex
].emit( ctx
, start
, count
, dest
, vertex_size
);
617 void mach64InitVB( GLcontext
*ctx
)
619 mach64ContextPtr mmesa
= MACH64_CONTEXT(ctx
);
620 GLuint size
= TNL_CONTEXT(ctx
)->vb
.Size
;
622 mmesa
->verts
= (GLubyte
*)ALIGN_MALLOC(size
* 4 * 16, 32);
625 static int firsttime
= 1;
634 void mach64FreeVB( GLcontext
*ctx
)
636 mach64ContextPtr mmesa
= MACH64_CONTEXT(ctx
);
638 ALIGN_FREE(mmesa
->verts
);