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)( struct gl_context *, GLuint, GLuint, void *, GLuint );
58 tnl_interp_func interp;
59 tnl_copy_pv_func copy_pv;
60 GLboolean (*check_tex_sizes)( struct gl_context *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( struct gl_context *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( struct gl_context *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( struct gl_context *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( struct gl_context *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( struct gl_context *ctx )
619 mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
620 GLuint size = TNL_CONTEXT(ctx)->vb.Size;
622 mmesa->verts = (GLubyte *)_mesa_align_malloc(size * 4 * 16, 32);
625 static int firsttime = 1;
634 void mach64FreeVB( struct gl_context *ctx )
636 mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
638 _mesa_align_free(mmesa->verts);