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

📄 fxglidew.c

📁 Mesa is an open-source implementation of the OpenGL specification - a system for rendering interacti
💻 C
字号:
/* * Mesa 3-D graphics library * Version:  4.0 * * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. *//* Authors: *    David Bucciarelli *    Brian Paul *    Daryll Strauss *    Keith Whitwell *    Daniel Borca *    Hiroshi Morii *//* fxsetup.c - 3Dfx VooDoo rendering mode setup functions */#ifdef HAVE_CONFIG_H#include "conf.h"#endif#if defined(FX)#include "fxglidew.h"#include "fxdrv.h"#include <stdlib.h>#include <string.h>FxI32FX_grGetInteger_NoLock(FxU32 pname){ FxI32 result; if (grGet(pname, 4, &result)) {    return result; } if (TDFX_DEBUG & VERBOSE_DRIVER) {    fprintf(stderr, "FX_grGetInteger_NoLock: wrong parameter (%lx)\n", pname); } return -1;}FxBoolFX_grSstControl(FxU32 code){   /* The glide 3 sources call for grEnable/grDisable to be called in exchange    * for grSstControl. */   switch (code) {   case GR_CONTROL_ACTIVATE:      grEnable(GR_PASSTHRU);      break;   case GR_CONTROL_DEACTIVATE:      grDisable(GR_PASSTHRU);      break;   }   /* Appearently GR_CONTROL_RESIZE can be ignored. */   return 1;			/* OK? */}intFX_grSstScreenWidth(){   FxI32 result[4];   BEGIN_BOARD_LOCK();   grGet(GR_VIEWPORT, sizeof(FxI32) * 4, result);   END_BOARD_LOCK();   return result[2];}intFX_grSstScreenHeight(){   FxI32 result[4];   BEGIN_BOARD_LOCK();   grGet(GR_VIEWPORT, sizeof(FxI32) * 4, result);   END_BOARD_LOCK();   return result[3];}voidFX_grSstPerfStats(GrSstPerfStats_t * st){   FxI32 n;   grGet(GR_STATS_PIXELS_IN, 4, &n);   st->pixelsIn = n;   grGet(GR_STATS_PIXELS_CHROMA_FAIL, 4, &n);   st->chromaFail = n;   grGet(GR_STATS_PIXELS_DEPTHFUNC_FAIL, 4, &n);   st->zFuncFail = n;   grGet(GR_STATS_PIXELS_AFUNC_FAIL, 4, &n);   st->aFuncFail = n;   grGet(GR_STATS_PIXELS_OUT, 4, &n);   st->pixelsOut = n;}voidFX_setupGrVertexLayout(void){   BEGIN_BOARD_LOCK();   grReset(GR_VERTEX_PARAMETER);   grCoordinateSpace(GR_WINDOW_COORDS);   grVertexLayout(GR_PARAM_XY, GR_VERTEX_X_OFFSET << 2, GR_PARAM_ENABLE);#if FX_PACKEDCOLOR   grVertexLayout(GR_PARAM_PARGB, GR_VERTEX_PARGB_OFFSET << 2, GR_PARAM_ENABLE);#else  /* !FX_PACKEDCOLOR */   grVertexLayout(GR_PARAM_RGB, GR_VERTEX_RGB_OFFSET << 2, GR_PARAM_ENABLE);   grVertexLayout(GR_PARAM_A, GR_VERTEX_A_OFFSET << 2, GR_PARAM_ENABLE);#endif /* !FX_PACKEDCOLOR */   grVertexLayout(GR_PARAM_Q, GR_VERTEX_OOW_OFFSET << 2, GR_PARAM_ENABLE);   grVertexLayout(GR_PARAM_Z, GR_VERTEX_OOZ_OFFSET << 2, GR_PARAM_ENABLE);   grVertexLayout(GR_PARAM_ST0, GR_VERTEX_SOW_TMU0_OFFSET << 2,		  GR_PARAM_ENABLE);   grVertexLayout(GR_PARAM_Q0, GR_VERTEX_OOW_TMU0_OFFSET << 2,		  GR_PARAM_DISABLE);   grVertexLayout(GR_PARAM_ST1, GR_VERTEX_SOW_TMU1_OFFSET << 2,		  GR_PARAM_DISABLE);   grVertexLayout(GR_PARAM_Q1, GR_VERTEX_OOW_TMU1_OFFSET << 2,		  GR_PARAM_DISABLE);   END_BOARD_LOCK();}voidFX_grHints_NoLock(GrHint_t hintType, FxU32 hintMask){   switch (hintType) {   case GR_HINT_STWHINT:      {	 if (hintMask & GR_STWHINT_W_DIFF_TMU0)	    grVertexLayout(GR_PARAM_Q0, GR_VERTEX_OOW_TMU0_OFFSET << 2,			   GR_PARAM_ENABLE);	 else	    grVertexLayout(GR_PARAM_Q0, GR_VERTEX_OOW_TMU0_OFFSET << 2,			   GR_PARAM_DISABLE);	 if (hintMask & GR_STWHINT_ST_DIFF_TMU1)	    grVertexLayout(GR_PARAM_ST1, GR_VERTEX_SOW_TMU1_OFFSET << 2,			   GR_PARAM_ENABLE);	 else	    grVertexLayout(GR_PARAM_ST1, GR_VERTEX_SOW_TMU1_OFFSET << 2,			   GR_PARAM_DISABLE);	 if (hintMask & GR_STWHINT_W_DIFF_TMU1)	    grVertexLayout(GR_PARAM_Q1, GR_VERTEX_OOW_TMU1_OFFSET << 2,			   GR_PARAM_ENABLE);	 else	    grVertexLayout(GR_PARAM_Q1, GR_VERTEX_OOW_TMU1_OFFSET << 2,			   GR_PARAM_DISABLE);      }   }}/* * Glide3 doesn't have the grSstQueryHardware function anymore. * Instead, we call grGet() and fill in the data structures ourselves. */intFX_grSstQueryHardware(GrHwConfiguration * config){   int i, j;   int numFB;   BEGIN_BOARD_LOCK();   grGet(GR_NUM_BOARDS, 4, (void *) &(config->num_sst));   if (config->num_sst == 0)      return 0;   for (i = 0; i < config->num_sst; i++) {      FxI32 result;      const char *extension;      grSstSelect(i);      extension = grGetString(GR_HARDWARE);      if (strstr(extension, "Rush")) {         config->SSTs[i].type = GR_SSTTYPE_SST96;      } else if (strstr(extension, "Voodoo2")) {         config->SSTs[i].type = GR_SSTTYPE_Voodoo2;      } else if (strstr(extension, "Voodoo Banshee")) {         config->SSTs[i].type = GR_SSTTYPE_Banshee;      } else if (strstr(extension, "Voodoo3")) {         config->SSTs[i].type = GR_SSTTYPE_Voodoo3;      } else if (strstr(extension, "Voodoo4")) {         config->SSTs[i].type = GR_SSTTYPE_Voodoo4;      } else if (strstr(extension, "Voodoo5")) {         config->SSTs[i].type = GR_SSTTYPE_Voodoo5;      } else {         config->SSTs[i].type = GR_SSTTYPE_VOODOO;      }      grGet(GR_MEMORY_FB, 4, &result);      config->SSTs[i].fbRam = result / (1024 * 1024);      grGet(GR_NUM_TMU, 4, &result);      config->SSTs[i].nTexelfx = result;      grGet(GR_REVISION_FB, 4, &result);      config->SSTs[i].fbiRev = result;      for (j = 0; j < config->SSTs[i].nTexelfx; j++) {	 grGet(GR_MEMORY_TMU, 4, &result);	 config->SSTs[i].tmuConfig[j].tmuRam = result / (1024 * 1024);	 grGet(GR_REVISION_TMU, 4, &result);	 config->SSTs[i].tmuConfig[j].tmuRev = result;      }      extension = grGetString(GR_EXTENSION);      config->SSTs[i].HavePalExt = (strstr(extension, " PALETTE6666 ") != NULL);      config->SSTs[i].HavePixExt = (strstr(extension, " PIXEXT ") != NULL);      config->SSTs[i].HaveTexFmt = (strstr(extension, " TEXFMT ") != NULL);      config->SSTs[i].HaveCmbExt = (strstr(extension, " COMBINE ") != NULL);      config->SSTs[i].HaveMirExt = (strstr(extension, " TEXMIRROR ") != NULL);      config->SSTs[i].HaveTexUma = (strstr(extension, " TEXUMA ") != NULL);      /* number of Voodoo chips */      grGet(GR_NUM_FB, 4, (void *) &numFB);      config->SSTs[i].numChips = numFB;   }   tdfx_hook_glide(&config->Glide, getenv("MESA_FX_POINTCAST") != NULL);   END_BOARD_LOCK();   return 1;}#else/* * Need this to provide at least one external definition. */extern int gl_fx_dummy_function_glidew(void);intgl_fx_dummy_function_glidew(void){   return 0;}#endif /* FX */

⌨️ 快捷键说明

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