⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 r200_vtxfmt.c

📁 mesa-6.5-minigui源码
💻 C
📖 第 1 页 / 共 3 页
字号:
   return GL_TRUE;}void r200VtxfmtInvalidate( GLcontext *ctx ){   r200ContextPtr rmesa = R200_CONTEXT( ctx );   rmesa->vb.recheck = GL_TRUE;   rmesa->vb.fell_back = GL_FALSE;}static void r200VtxfmtValidate( GLcontext *ctx ){   r200ContextPtr rmesa = R200_CONTEXT( ctx );   if (R200_DEBUG & DEBUG_VFMT)      fprintf(stderr, "%s\n", __FUNCTION__);   if (ctx->Driver.NeedFlush)      ctx->Driver.FlushVertices( ctx, ctx->Driver.NeedFlush );   rmesa->vb.recheck = GL_FALSE;   if (check_vtx_fmt( ctx )) {      if (!rmesa->vb.installed) {	 if (R200_DEBUG & DEBUG_VFMT)	    fprintf(stderr, "reinstall (new install)\n");	 _mesa_install_exec_vtxfmt( ctx, &rmesa->vb.vtxfmt );	 ctx->Driver.FlushVertices = r200VtxFmtFlushVertices;	 rmesa->vb.installed = GL_TRUE;      }      else if (R200_DEBUG & DEBUG_VFMT)	 fprintf(stderr, "%s: already installed", __FUNCTION__);   }    else {      if (R200_DEBUG & DEBUG_VFMT)	 fprintf(stderr, "%s: failed\n", __FUNCTION__);      if (rmesa->vb.installed) {	 if (rmesa->dma.flush)	    rmesa->dma.flush( rmesa );	 _tnl_wakeup_exec( ctx );	 ctx->Driver.FlushVertices = r200FlushVertices;	 rmesa->vb.installed = GL_FALSE;      }   }      }/* Materials: */static void r200_Materialfv( GLenum face, GLenum pname, 			       const GLfloat *params ){   GET_CURRENT_CONTEXT(ctx);   r200ContextPtr rmesa = R200_CONTEXT( ctx );   if (R200_DEBUG & DEBUG_VFMT)      fprintf(stderr, "%s\n", __FUNCTION__);   if (rmesa->vb.prim[0] != GL_POLYGON+1) {      VFMT_FALLBACK( __FUNCTION__ );      CALL_Materialfv(GET_DISPATCH(), (face, pname, params));      return;   }   _mesa_noop_Materialfv( face, pname, params );   r200UpdateMaterial( ctx );}/* Begin/End */static void r200_Begin( GLenum mode ){   GET_CURRENT_CONTEXT(ctx);   r200ContextPtr rmesa = R200_CONTEXT(ctx);   if (R200_DEBUG & DEBUG_VFMT)      fprintf(stderr, "%s( %s )\n", __FUNCTION__,	      _mesa_lookup_enum_by_nr( mode ));   if (mode > GL_POLYGON) {      _mesa_error( ctx, GL_INVALID_ENUM, "glBegin" );      return;   }   if (rmesa->vb.prim[0] != GL_POLYGON+1) {      _mesa_error( ctx, GL_INVALID_OPERATION, "glBegin" );      return;   }      if (ctx->NewState)       _mesa_update_state( ctx );   if (rmesa->NewGLState)      r200ValidateState( ctx );   if (rmesa->vb.recheck)       r200VtxfmtValidate( ctx );   if (!rmesa->vb.installed) {      CALL_Begin(GET_DISPATCH(), (mode));      return;   }   if (rmesa->dma.flush && rmesa->vb.counter < 12) {      if (R200_DEBUG & DEBUG_VFMT)	 fprintf(stderr, "%s: flush almost-empty buffers\n", __FUNCTION__);      flush_prims( rmesa );   }   /* Need to arrange to save vertices here?  Or always copy from dma (yuk)?    */   if (!rmesa->dma.flush) {      if (rmesa->dma.current.ptr + 12*rmesa->vb.vertex_size*4 > 	  rmesa->dma.current.end) {	 R200_NEWPRIM( rmesa );	 r200RefillCurrentDmaRegion( rmesa );      }      rmesa->vb.dmaptr = (int *)(rmesa->dma.current.address + rmesa->dma.current.ptr);      rmesa->vb.counter = (rmesa->dma.current.end - rmesa->dma.current.ptr) / 	 (rmesa->vb.vertex_size * 4);      rmesa->vb.counter--;      rmesa->vb.initial_counter = rmesa->vb.counter;      rmesa->vb.notify = wrap_buffer;      rmesa->dma.flush = flush_prims;      ctx->Driver.NeedFlush |= FLUSH_STORED_VERTICES;   }         rmesa->vb.prim[0] = mode;   start_prim( rmesa, mode | PRIM_BEGIN );}static void r200_End( void ){   GET_CURRENT_CONTEXT(ctx);   r200ContextPtr rmesa = R200_CONTEXT(ctx);   if (R200_DEBUG & DEBUG_VFMT)      fprintf(stderr, "%s\n", __FUNCTION__);   if (rmesa->vb.prim[0] == GL_POLYGON+1) {      _mesa_error( ctx, GL_INVALID_OPERATION, "glEnd" );      return;   }   note_last_prim( rmesa, PRIM_END );   rmesa->vb.prim[0] = GL_POLYGON+1;}/* Fallback on difficult entrypoints: */#define PRE_LOOPBACK( FUNC )			\do {						\   if (R200_DEBUG & DEBUG_VFMT) 		\      fprintf(stderr, "%s\n", __FUNCTION__);	\   VFMT_FALLBACK( __FUNCTION__ );		\} while (0)#define TAG(x) r200_fallback_##x#include "vtxfmt_tmp.h"static GLboolean r200NotifyBegin( GLcontext *ctx, GLenum p ){   r200ContextPtr rmesa = R200_CONTEXT( ctx );      if (R200_DEBUG & DEBUG_VFMT)      fprintf(stderr, "%s\n", __FUNCTION__);   assert(!rmesa->vb.installed);   if (ctx->NewState)       _mesa_update_state( ctx );   if (rmesa->NewGLState)      r200ValidateState( ctx );   if (ctx->Driver.NeedFlush)      ctx->Driver.FlushVertices( ctx, ctx->Driver.NeedFlush );   if (rmesa->vb.recheck)       r200VtxfmtValidate( ctx );   if (!rmesa->vb.installed) {      if (R200_DEBUG & DEBUG_VFMT)	 fprintf(stderr, "%s -- failed\n", __FUNCTION__);      return GL_FALSE;   }   r200_Begin( p );   return GL_TRUE;}static void r200VtxFmtFlushVertices( GLcontext *ctx, GLuint flags ){   r200ContextPtr rmesa = R200_CONTEXT( ctx );   if (R200_DEBUG & DEBUG_VFMT)      fprintf(stderr, "%s\n", __FUNCTION__);   assert(rmesa->vb.installed);   if (flags & FLUSH_UPDATE_CURRENT) {      r200_copy_to_current( ctx );      if (R200_DEBUG & DEBUG_VFMT)	 fprintf(stderr, "reinstall on update_current\n");      _mesa_install_exec_vtxfmt( ctx, &rmesa->vb.vtxfmt );      ctx->Driver.NeedFlush &= ~FLUSH_UPDATE_CURRENT;   }   if (flags & FLUSH_STORED_VERTICES) {      assert (rmesa->dma.flush == 0 ||	      rmesa->dma.flush == flush_prims);      if (rmesa->dma.flush == flush_prims)	 flush_prims( rmesa );      ctx->Driver.NeedFlush &= ~FLUSH_STORED_VERTICES;   }}/* At this point, don't expect very many versions of each function to * be generated, so not concerned about freeing them? */void r200VtxfmtInit( GLcontext *ctx, GLboolean useCodegen ){   r200ContextPtr rmesa = R200_CONTEXT( ctx );   GLvertexformat *vfmt = &(rmesa->vb.vtxfmt);   MEMSET( vfmt, 0, sizeof(GLvertexformat) );   /* Hook in chooser functions for codegen, etc:    */   r200VtxfmtInitChoosers( vfmt );   /* Handled fully in supported states, but no codegen:    */   vfmt->Materialfv = r200_Materialfv;   vfmt->ArrayElement = _ae_loopback_array_elt;	        /* generic helper */   vfmt->Rectf = _mesa_noop_Rectf;			/* generic helper */   vfmt->Begin = r200_Begin;   vfmt->End = r200_End;   /* Fallback for performance reasons:  (Fix with cva/elt path here and    * dmatmp2.h style primitive-merging)    *    * These should call NotifyBegin(), as should _tnl_EvalMesh, to allow    * a driver-hook.    */   vfmt->DrawArrays = r200_fallback_DrawArrays;   vfmt->DrawElements = r200_fallback_DrawElements;   vfmt->DrawRangeElements = r200_fallback_DrawRangeElements;    /* Not active in supported states; just keep ctx->Current uptodate:    */   vfmt->EdgeFlag = _mesa_noop_EdgeFlag;   vfmt->EdgeFlagv = _mesa_noop_EdgeFlagv;   vfmt->Indexf = _mesa_noop_Indexf;   vfmt->Indexfv = _mesa_noop_Indexfv;   /* Active but unsupported -- fallback if we receive these:    */   vfmt->CallList = r200_fallback_CallList;   vfmt->CallLists = r200_fallback_CallLists;   vfmt->EvalCoord1f = r200_fallback_EvalCoord1f;   vfmt->EvalCoord1fv = r200_fallback_EvalCoord1fv;   vfmt->EvalCoord2f = r200_fallback_EvalCoord2f;   vfmt->EvalCoord2fv = r200_fallback_EvalCoord2fv;   vfmt->EvalMesh1 = r200_fallback_EvalMesh1;   vfmt->EvalMesh2 = r200_fallback_EvalMesh2;   vfmt->EvalPoint1 = r200_fallback_EvalPoint1;   vfmt->EvalPoint2 = r200_fallback_EvalPoint2;   vfmt->TexCoord4f = r200_fallback_TexCoord4f;   vfmt->TexCoord4fv = r200_fallback_TexCoord4fv;   vfmt->MultiTexCoord4fARB = r200_fallback_MultiTexCoord4fARB;   vfmt->MultiTexCoord4fvARB = r200_fallback_MultiTexCoord4fvARB;   vfmt->Vertex4f = r200_fallback_Vertex4f;   vfmt->Vertex4fv = r200_fallback_Vertex4fv;   vfmt->VertexAttrib1fNV  = r200_fallback_VertexAttrib1fNV;   vfmt->VertexAttrib1fvNV = r200_fallback_VertexAttrib1fvNV;   vfmt->VertexAttrib2fNV  = r200_fallback_VertexAttrib2fNV;   vfmt->VertexAttrib2fvNV = r200_fallback_VertexAttrib2fvNV;   vfmt->VertexAttrib3fNV  = r200_fallback_VertexAttrib3fNV;   vfmt->VertexAttrib3fvNV = r200_fallback_VertexAttrib3fvNV;   vfmt->VertexAttrib4fNV  = r200_fallback_VertexAttrib4fNV;   vfmt->VertexAttrib4fvNV = r200_fallback_VertexAttrib4fvNV;   vfmt->FogCoordfEXT = r200_fallback_FogCoordfEXT;   vfmt->FogCoordfvEXT = r200_fallback_FogCoordfvEXT;      (void)r200_fallback_vtxfmt;   TNL_CONTEXT(ctx)->Driver.NotifyBegin = r200NotifyBegin;   rmesa->vb.enabled = 1;   rmesa->vb.prim = &ctx->Driver.CurrentExecPrimitive;   rmesa->vb.primflags = 0;   make_empty_list( &rmesa->vb.dfn_cache.Vertex2f );   make_empty_list( &rmesa->vb.dfn_cache.Vertex2fv );   make_empty_list( &rmesa->vb.dfn_cache.Vertex3f );   make_empty_list( &rmesa->vb.dfn_cache.Vertex3fv );   make_empty_list( &rmesa->vb.dfn_cache.Color4ub );   make_empty_list( &rmesa->vb.dfn_cache.Color4ubv );   make_empty_list( &rmesa->vb.dfn_cache.Color3ub );   make_empty_list( &rmesa->vb.dfn_cache.Color3ubv );   make_empty_list( &rmesa->vb.dfn_cache.Color4f );   make_empty_list( &rmesa->vb.dfn_cache.Color4fv );   make_empty_list( &rmesa->vb.dfn_cache.Color3f );   make_empty_list( &rmesa->vb.dfn_cache.Color3fv );   make_empty_list( &rmesa->vb.dfn_cache.SecondaryColor3fEXT );   make_empty_list( &rmesa->vb.dfn_cache.SecondaryColor3fvEXT );   make_empty_list( &rmesa->vb.dfn_cache.SecondaryColor3ubEXT );   make_empty_list( &rmesa->vb.dfn_cache.SecondaryColor3ubvEXT );   make_empty_list( &rmesa->vb.dfn_cache.Normal3f );   make_empty_list( &rmesa->vb.dfn_cache.Normal3fv );   make_empty_list( &rmesa->vb.dfn_cache.TexCoord3f );   make_empty_list( &rmesa->vb.dfn_cache.TexCoord3fv );   make_empty_list( &rmesa->vb.dfn_cache.TexCoord2f );   make_empty_list( &rmesa->vb.dfn_cache.TexCoord2fv );   make_empty_list( &rmesa->vb.dfn_cache.TexCoord1f );   make_empty_list( &rmesa->vb.dfn_cache.TexCoord1fv );   make_empty_list( &rmesa->vb.dfn_cache.MultiTexCoord3fARB );   make_empty_list( &rmesa->vb.dfn_cache.MultiTexCoord3fvARB );   make_empty_list( &rmesa->vb.dfn_cache.MultiTexCoord2fARB );   make_empty_list( &rmesa->vb.dfn_cache.MultiTexCoord2fvARB );   make_empty_list( &rmesa->vb.dfn_cache.MultiTexCoord1fARB );   make_empty_list( &rmesa->vb.dfn_cache.MultiTexCoord1fvARB );/*   make_empty_list( &rmesa->vb.dfn_cache.FogCoordfEXT );   make_empty_list( &rmesa->vb.dfn_cache.FogCoordfvEXT );*/   r200InitCodegen( &rmesa->vb.codegen, useCodegen );}static void free_funcs( struct dynfn *l ){   struct dynfn *f, *tmp;   foreach_s (f, tmp, l) {      remove_from_list( f );      _mesa_exec_free( f->code );      _mesa_free( f );   }}void r200VtxfmtUnbindContext( GLcontext *ctx ){}void r200VtxfmtMakeCurrent( GLcontext *ctx ){}void r200VtxfmtDestroy( GLcontext *ctx ){   r200ContextPtr rmesa = R200_CONTEXT( ctx );   count_funcs( rmesa );   free_funcs( &rmesa->vb.dfn_cache.Vertex2f );   free_funcs( &rmesa->vb.dfn_cache.Vertex2fv );   free_funcs( &rmesa->vb.dfn_cache.Vertex3f );   free_funcs( &rmesa->vb.dfn_cache.Vertex3fv );   free_funcs( &rmesa->vb.dfn_cache.Color4ub );   free_funcs( &rmesa->vb.dfn_cache.Color4ubv );   free_funcs( &rmesa->vb.dfn_cache.Color3ub );   free_funcs( &rmesa->vb.dfn_cache.Color3ubv );   free_funcs( &rmesa->vb.dfn_cache.Color4f );   free_funcs( &rmesa->vb.dfn_cache.Color4fv );   free_funcs( &rmesa->vb.dfn_cache.Color3f );   free_funcs( &rmesa->vb.dfn_cache.Color3fv );   free_funcs( &rmesa->vb.dfn_cache.SecondaryColor3ubEXT );   free_funcs( &rmesa->vb.dfn_cache.SecondaryColor3ubvEXT );   free_funcs( &rmesa->vb.dfn_cache.SecondaryColor3fEXT );   free_funcs( &rmesa->vb.dfn_cache.SecondaryColor3fvEXT );   free_funcs( &rmesa->vb.dfn_cache.Normal3f );   free_funcs( &rmesa->vb.dfn_cache.Normal3fv );   free_funcs( &rmesa->vb.dfn_cache.TexCoord3f );   free_funcs( &rmesa->vb.dfn_cache.TexCoord3fv );   free_funcs( &rmesa->vb.dfn_cache.TexCoord2f );   free_funcs( &rmesa->vb.dfn_cache.TexCoord2fv );   free_funcs( &rmesa->vb.dfn_cache.TexCoord1f );   free_funcs( &rmesa->vb.dfn_cache.TexCoord1fv );   free_funcs( &rmesa->vb.dfn_cache.MultiTexCoord3fARB );   free_funcs( &rmesa->vb.dfn_cache.MultiTexCoord3fvARB );   free_funcs( &rmesa->vb.dfn_cache.MultiTexCoord2fARB );   free_funcs( &rmesa->vb.dfn_cache.MultiTexCoord2fvARB );   free_funcs( &rmesa->vb.dfn_cache.MultiTexCoord1fARB );   free_funcs( &rmesa->vb.dfn_cache.MultiTexCoord1fvARB );/*   free_funcs( &rmesa->vb.dfn_cache.FogCoordfEXT );   free_funcs( &rmesa->vb.dfn_cache.FogCoordfvEXT );*/}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -