From f4092abdf94af6a99aff944d6264bc1284e8bdd4 Mon Sep 17 00:00:00 2001 From: Reinhard Tartler Date: Mon, 10 Oct 2011 17:43:39 +0200 Subject: Imported nx-X11-3.1.0-1.tar.gz Summary: Imported nx-X11-3.1.0-1.tar.gz Keywords: Imported nx-X11-3.1.0-1.tar.gz into Git repository --- .../Mesa/src/mesa/drivers/dri/s3v/s3v_render.c | 203 +++++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100644 nx-X11/extras/Mesa/src/mesa/drivers/dri/s3v/s3v_render.c (limited to 'nx-X11/extras/Mesa/src/mesa/drivers/dri/s3v/s3v_render.c') diff --git a/nx-X11/extras/Mesa/src/mesa/drivers/dri/s3v/s3v_render.c b/nx-X11/extras/Mesa/src/mesa/drivers/dri/s3v/s3v_render.c new file mode 100644 index 000000000..6aaa94976 --- /dev/null +++ b/nx-X11/extras/Mesa/src/mesa/drivers/dri/s3v/s3v_render.c @@ -0,0 +1,203 @@ +/* + * Author: Max Lingua + */ + +#include "glheader.h" +#include "context.h" +#include "macros.h" +#include "mtypes.h" + +#include "tnl/t_context.h" + +#include "s3v_context.h" +#include "s3v_tris.h" +#include "s3v_vb.h" + + +#define HAVE_POINTS 0 +#define HAVE_LINES 0 +#define HAVE_LINE_STRIPS 0 +#define HAVE_TRIANGLES 0 +#define HAVE_TRI_STRIPS 0 +#define HAVE_TRI_STRIP_1 0 +#define HAVE_TRI_FANS 0 +#define HAVE_QUADS 0 +#define HAVE_QUAD_STRIPS 0 +#define HAVE_POLYGONS 0 + +#define HAVE_ELTS 0 + +#if 0 +static void VERT_FALLBACK( GLcontext *ctx, + GLuint start, + GLuint count, + GLuint flags ) +{ + TNLcontext *tnl = TNL_CONTEXT(ctx); +/* s3vContextPtr vmesa = S3V_CONTEXT(ctx); */ + int _flags; + + DEBUG(("VERT_FALLBACK: flags & PRIM_MODE_MASK = %i\n", + flags & PRIM_MODE_MASK)); + DEBUG(("VERT_FALLBACK: flags=%i PRIM_MODE_MASK=%i\n", + flags, PRIM_MODE_MASK)); +#if 0 + tnl->Driver.Render.PrimitiveNotify( ctx, flags & PRIM_MODE_MASK ); +#endif + tnl->Driver.Render.BuildVertices( ctx, start, count, ~0 ); + + _flags = flags & PRIM_MODE_MASK; + + tnl->Driver.Render.PrimTabVerts[_flags]( ctx, start, count, flags ); + S3V_CONTEXT(ctx)->SetupNewInputs = VERT_BIT_POS; +} +#endif + +static const GLuint hw_prim[GL_POLYGON+1] = { + PrimType_Points, + PrimType_Lines, + PrimType_LineLoop, + PrimType_LineStrip, + PrimType_Triangles, + PrimType_TriangleStrip, + PrimType_TriangleFan, + PrimType_Quads, + PrimType_QuadStrip, + PrimType_Polygon +}; + +static __inline void s3vStartPrimitive( s3vContextPtr vmesa, GLenum prim ) +{ + __DRIdrawablePrivate *dPriv = vmesa->driDrawable; + + int _hw_prim = hw_prim[prim]; + + DEBUG(("s3vStartPrimitive (new #%i) ", prim)); + + if (_hw_prim != vmesa->restore_primitive) { + + if (prim == 4) { /* TRI */ + DEBUG(("switching to tri\n")); + vmesa->prim_cmd = vmesa->_tri[vmesa->_3d_mode]; + vmesa->alpha_cmd = vmesa->_alpha[vmesa->_3d_mode]; + DMAOUT_CHECK(3DTRI_Z_BASE, 12); + } else if (prim == 1) { /* LINE */ + DEBUG(("switching to line\n")); + vmesa->prim_cmd = DO_3D_LINE; + vmesa->alpha_cmd = vmesa->_alpha[0]; + DMAOUT_CHECK(3DLINE_Z_BASE, 12); + } else { + DEBUG(("Never mind the bollocks!\n")); + } + + DMAOUT(vmesa->s3vScreen->depthOffset & 0x003FFFF8); + DMAOUT(vmesa->DestBase); + /* DMAOUT(vmesa->ScissorLR); */ + /* DMAOUT(vmesa->ScissorTB); */ + DMAOUT( (0 << 16) | (dPriv->w-1) ); + DMAOUT( (0 << 16) | (dPriv->h-1) ); + DMAOUT( (vmesa->SrcStride << 16) | vmesa->TexStride ); + DMAOUT(vmesa->SrcStride); + DMAOUT(vmesa->TexOffset); + DMAOUT(vmesa->TextureBorderColor); + DMAOUT(0); /* FOG */ + DMAOUT(0); + DMAOUT(0); + DMAOUT(vmesa->CMD | vmesa->prim_cmd | vmesa->alpha_cmd); + DMAFINISH(); + } + + vmesa->restore_primitive = _hw_prim; +} + +static __inline void s3vEndPrimitive( s3vContextPtr vmesa ) +{ +/* GLcontext *ctx = vmesa->glCtx; */ + DEBUG(("s3vEndPrimitive\n")); +} + +#define LOCAL_VARS s3vContextPtr vmesa = S3V_CONTEXT(ctx) +#define INIT( prim ) s3vStartPrimitive( vmesa, prim ) +#define FINISH s3vEndPrimitive( vmesa ) +#define NEW_PRIMITIVE() (void) vmesa +#define NEW_BUFFER() (void) vmesa +#define FIRE_VERTICES() (void) vmesa +#define GET_CURRENT_VB_MAX_VERTS() \ + (vmesa->bufSize - vmesa->bufCount) / 2 +#define GET_SUBSEQUENT_VB_MAX_VERTS() \ + S3V_DMA_BUF_SZ / 2 +/* XXX */ +#define ALLOC_VERTS(nr) NULL +#define EMIT_VERTS(ctx, start, count, buf) NULL +#define FLUSH() s3vEndPrimitive( vmesa ) + +#define TAG(x) s3v_##x + +#include "tnl_dd/t_dd_dmatmp.h" + +/**********************************************************************/ +/* Render pipeline stage */ +/**********************************************************************/ + + +static GLboolean s3v_run_render( GLcontext *ctx, + struct tnl_pipeline_stage *stage ) +{ + s3vContextPtr vmesa = S3V_CONTEXT(ctx); + TNLcontext *tnl = TNL_CONTEXT(ctx); + struct vertex_buffer *VB = &tnl->vb; + GLuint i; + tnl_render_func *tab; + + DEBUG(("s3v_run_render\n")); + + /* FIXME: hw clip */ + if (VB->ClipOrMask || vmesa->RenderIndex != 0) { + DEBUG(("*** CLIPPED in render ***\n")); +#if 1 + return GL_TRUE; /* don't handle clipping here */ +#endif + } + + + /* We don't do elts */ + if (VB->Elts) + return GL_TRUE; + + tab = TAG(render_tab_verts); + + tnl->Driver.Render.Start( ctx ); + + for (i = 0 ; i < VB->PrimitiveCount ; i++ ) + { + GLuint prim = VB->Primitive[i].mode; + GLuint start = VB->Primitive[i].start; + GLuint length = VB->Primitive[i].count; + + DEBUG(("s3v_run_render (loop=%i) (lenght=%i)\n", i, length)); + + if (length) { + tnl->Driver.Render.BuildVertices( ctx, start, + start+length, ~0 /*stage->inputs*/); /* XXX */ + tnl->Driver.Render.PrimTabVerts[prim & PRIM_MODE_MASK] + ( ctx, start, start + length, prim ); + vmesa->SetupNewInputs = VERT_BIT_POS; + } + } + + tnl->Driver.Render.Finish( ctx ); + + return GL_FALSE; /* finished the pipe */ +} + + + +const struct tnl_pipeline_stage _s3v_render_stage = +{ + "s3v render", + NULL, + NULL, + NULL, + NULL, + s3v_run_render /* run */ +}; -- cgit v1.2.3