summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/ffb/ffb_tritmp.h
diff options
context:
space:
mode:
authorAlan Hourihane <alanh@tungstengraphics.com>2003-12-04 13:38:06 +0000
committerAlan Hourihane <alanh@tungstengraphics.com>2003-12-04 13:38:06 +0000
commit13e6a4849c6800eac454fd1010cb2320874f2ed6 (patch)
treec311173244771131a63ba18318be645b4534521c /src/mesa/drivers/dri/ffb/ffb_tritmp.h
parent15af25aca0ed6a2390fe9e0d91055cfc01134ce2 (diff)
add SPARC ffb DRI driver
Diffstat (limited to 'src/mesa/drivers/dri/ffb/ffb_tritmp.h')
-rw-r--r--src/mesa/drivers/dri/ffb/ffb_tritmp.h239
1 files changed, 239 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/ffb/ffb_tritmp.h b/src/mesa/drivers/dri/ffb/ffb_tritmp.h
new file mode 100644
index 0000000000..612ef2433f
--- /dev/null
+++ b/src/mesa/drivers/dri/ffb/ffb_tritmp.h
@@ -0,0 +1,239 @@
+/* $XFree86: xc/lib/GL/mesa/src/drv/ffb/ffb_tritmp.h,v 1.2 2002/02/22 21:32:59 dawes Exp $ */
+
+static void TAG(ffb_triangle)( GLcontext *ctx,
+ ffb_vertex *v0,
+ ffb_vertex *v1,
+ ffb_vertex *v2 )
+{
+ ffbContextPtr fmesa = FFB_CONTEXT(ctx);
+ ffb_fbcPtr ffb = fmesa->regs;
+#if (IND & FFB_TRI_FLAT_BIT)
+ GLuint const_fg;
+#endif
+ FFB_DELAYED_VIEWPORT_VARS;
+
+#ifdef TRI_DEBUG
+ fprintf(stderr, "FFB: ffb_triangle ["
+#if (IND & FFB_TRI_CULL_BIT)
+ " CULL"
+#endif
+#if (IND & FFB_TRI_FLAT_BIT)
+ " FLAT"
+#endif
+#if (IND & FFB_TRI_ALPHA_BIT)
+ " ALPHA"
+#endif
+ " ]\n");
+#endif
+
+#if (IND & FFB_TRI_CULL_BIT)
+ { /* NOTE: These are not viewport transformed yet. */
+ GLfloat ex = v1->x - v0->x;
+ GLfloat ey = v1->y - v0->y;
+ GLfloat fx = v2->x - v0->x;
+ GLfloat fy = v2->y - v0->y;
+ GLfloat c = ex*fy-ey*fx;
+
+ /* Culled... */
+ if (c * fmesa->backface_sign > fmesa->ffb_zero)
+ return;
+ }
+#endif
+
+#if (IND & FFB_TRI_FLAT_BIT)
+ const_fg = FFB_PACK_CONST_UBYTE_ARGB_COLOR( v2->color[0] );
+#ifdef TRI_DEBUG
+ fprintf(stderr, "FFB_tri: const_fg %08x (B[%f] G[%f] R[%f])\n",
+ const_fg,
+ FFB_2_30_FIXED_TO_FLOAT(v2->color[0].blue),
+ FFB_2_30_FIXED_TO_FLOAT(v2->color[0].green),
+ FFB_2_30_FIXED_TO_FLOAT(v2->color[0].red));
+#endif
+#endif
+
+
+#if (IND & FFB_TRI_FLAT_BIT)
+ FFBFifo(fmesa, 1);
+ ffb->fg = const_fg;
+#endif
+
+#if (IND & FFB_TRI_FLAT_BIT)
+ FFBFifo(fmesa, 9);
+#else
+#if (IND & FFB_TRI_ALPHA_BIT)
+ FFBFifo(fmesa, 21);
+#else
+ FFBFifo(fmesa, 18);
+#endif
+#endif
+
+ FFB_DUMP_VERTEX(v0);
+#if !(IND & FFB_TRI_FLAT_BIT)
+#if (IND & FFB_TRI_ALPHA_BIT)
+ ffb->alpha = FFB_GET_ALPHA(v0);
+#endif
+ ffb->red = FFB_GET_RED(v0);
+ ffb->green = FFB_GET_GREEN(v0);
+ ffb->blue = FFB_GET_BLUE(v0);
+#endif
+ ffb->z = FFB_GET_Z(v0);
+ ffb->ryf = FFB_GET_Y(v0);
+ ffb->rxf = FFB_GET_X(v0);
+
+ FFB_DUMP_VERTEX(v1);
+#if !(IND & FFB_TRI_FLAT_BIT)
+#if (IND & FFB_TRI_ALPHA_BIT)
+ ffb->alpha = FFB_GET_ALPHA(v1);
+#endif
+ ffb->red = FFB_GET_RED(v1);
+ ffb->green = FFB_GET_GREEN(v1);
+ ffb->blue = FFB_GET_BLUE(v1);
+#endif
+ ffb->z = FFB_GET_Z(v1);
+ ffb->y = FFB_GET_Y(v1);
+ ffb->x = FFB_GET_X(v1);
+
+ FFB_DUMP_VERTEX(v2);
+#if !(IND & FFB_TRI_FLAT_BIT)
+#if (IND & FFB_TRI_ALPHA_BIT)
+ ffb->alpha = FFB_GET_ALPHA(v2);
+#endif
+ ffb->red = FFB_GET_RED(v2);
+ ffb->green = FFB_GET_GREEN(v2);
+ ffb->blue = FFB_GET_BLUE(v2);
+#endif
+ ffb->z = FFB_GET_Z(v2);
+ ffb->y = FFB_GET_Y(v2);
+ ffb->x = FFB_GET_X(v2);
+
+ fmesa->ffbScreen->rp_active = 1;
+}
+
+
+static void TAG(ffb_quad)(GLcontext *ctx,
+ ffb_vertex *v0,
+ ffb_vertex *v1,
+ ffb_vertex *v2,
+ ffb_vertex *v3 )
+{
+ ffbContextPtr fmesa = FFB_CONTEXT(ctx);
+ ffb_fbcPtr ffb = fmesa->regs;
+#if (IND & FFB_TRI_FLAT_BIT)
+ GLuint const_fg;
+#endif
+ FFB_DELAYED_VIEWPORT_VARS;
+
+#ifdef TRI_DEBUG
+ fprintf(stderr, "FFB: ffb_quad ["
+#if (IND & FFB_TRI_CULL_BIT)
+ " CULL"
+#endif
+#if (IND & FFB_TRI_FLAT_BIT)
+ " FLAT"
+#endif
+#if (IND & FFB_TRI_ALPHA_BIT)
+ " ALPHA"
+#endif
+ " ]\n");
+#endif /* TRI_DEBUG */
+
+#if (IND & FFB_TRI_CULL_BIT)
+ { /* NOTE: These are not viewport transformed yet. */
+ GLfloat ex = v2->x - v0->x;
+ GLfloat ey = v2->y - v0->y;
+ GLfloat fx = v3->x - v1->x;
+ GLfloat fy = v3->y - v1->y;
+ GLfloat c = ex*fy-ey*fx;
+
+ /* Culled... */
+ if (c * fmesa->backface_sign > fmesa->ffb_zero)
+ return;
+ }
+#endif
+
+#if (IND & FFB_TRI_FLAT_BIT)
+ const_fg = FFB_PACK_CONST_UBYTE_ARGB_COLOR( v3->color[0] );
+#ifdef TRI_DEBUG
+ fprintf(stderr, "FFB_quad: const_fg %08x (B[%f] G[%f] R[%f])\n",
+ const_fg,
+ FFB_2_30_FIXED_TO_FLOAT(v3->color[0].blue),
+ FFB_2_30_FIXED_TO_FLOAT(v3->color[0].green),
+ FFB_2_30_FIXED_TO_FLOAT(v3->color[0].red));
+#endif
+#endif
+
+
+#if (IND & FFB_TRI_FLAT_BIT)
+ FFBFifo(fmesa, 13);
+ ffb->fg = const_fg;
+#else
+#if (IND & FFB_TRI_ALPHA_BIT)
+ FFBFifo(fmesa, 28);
+#else
+ FFBFifo(fmesa, 24);
+#endif
+#endif
+
+ FFB_DUMP_VERTEX(v0);
+#if !(IND & FFB_TRI_FLAT_BIT)
+#if (IND & FFB_TRI_ALPHA_BIT)
+ ffb->alpha = FFB_GET_ALPHA(v0);
+#endif
+ ffb->red = FFB_GET_RED(v0);
+ ffb->green = FFB_GET_GREEN(v0);
+ ffb->blue = FFB_GET_BLUE(v0);
+#endif
+ ffb->z = FFB_GET_Z(v0);
+ ffb->ryf = FFB_GET_Y(v0);
+ ffb->rxf = FFB_GET_X(v0);
+
+ FFB_DUMP_VERTEX(v1);
+#if !(IND & FFB_TRI_FLAT_BIT)
+#if (IND & FFB_TRI_ALPHA_BIT)
+ ffb->alpha = FFB_GET_ALPHA(v1);
+#endif
+ ffb->red = FFB_GET_RED(v1);
+ ffb->green = FFB_GET_GREEN(v1);
+ ffb->blue = FFB_GET_BLUE(v1);
+#endif
+ ffb->z = FFB_GET_Z(v1);
+ ffb->y = FFB_GET_Y(v1);
+ ffb->x = FFB_GET_X(v1);
+
+ FFB_DUMP_VERTEX(v2);
+#if !(IND & FFB_TRI_FLAT_BIT)
+#if (IND & FFB_TRI_ALPHA_BIT)
+ ffb->alpha = FFB_GET_ALPHA(v2);
+#endif
+ ffb->red = FFB_GET_RED(v2);
+ ffb->green = FFB_GET_GREEN(v2);
+ ffb->blue = FFB_GET_BLUE(v2);
+#endif
+ ffb->z = FFB_GET_Z(v2);
+ ffb->y = FFB_GET_Y(v2);
+ ffb->x = FFB_GET_X(v2);
+
+ FFB_DUMP_VERTEX(v3);
+#if !(IND & FFB_TRI_FLAT_BIT)
+#if (IND & FFB_TRI_ALPHA_BIT)
+ ffb->alpha = FFB_GET_ALPHA(v3);
+#endif
+ ffb->red = FFB_GET_RED(v3);
+ ffb->green = FFB_GET_GREEN(v3);
+ ffb->blue = FFB_GET_BLUE(v3);
+#endif
+ ffb->z = FFB_GET_Z(v3);
+ ffb->dmyf = FFB_GET_Y(v3);
+ ffb->dmxf = FFB_GET_X(v3);
+
+ fmesa->ffbScreen->rp_active = 1;
+}
+
+static void TAG(ffb_init)(void)
+{
+ ffb_tri_tab[IND] = TAG(ffb_triangle);
+ ffb_quad_tab[IND] = TAG(ffb_quad);
+}
+
+#undef IND
+#undef TAG