Always allow user to override swapInterval (vsync) but force vsync on with swapbuffer interval set to 0x0 when triple buffering is enabled.
This commit is contained in:
@@ -19,6 +19,9 @@
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
** Revision 1.1.1.1.8.1 2004/02/16 07:42:15 dborca
|
||||
** grSetNumPendingBuffers visible with grGetProcAddress
|
||||
**
|
||||
** Revision 1.1.1.1 1999/12/07 21:42:32 joseph
|
||||
** Initial checkin into SourceForge.
|
||||
**
|
||||
@@ -970,9 +973,13 @@ GR_ENTRY(grBufferSwap, void, (FxU32 swapInterval))
|
||||
* any better. If, however, the user has not chosen, but the app
|
||||
* wants something other than 0 then we need to honor their choice.
|
||||
*/
|
||||
swapInterval = ((_GlideRoot.environment.swapInterval >= 0)
|
||||
/*swapInterval = ((_GlideRoot.environment.swapInterval >= 0)
|
||||
? _GlideRoot.environment.swapInterval
|
||||
: (gc->scanline_interleaved ? MAX(swapInterval, 1) : swapInterval));
|
||||
: (gc->scanline_interleaved ? MAX(swapInterval, 1) : swapInterval));*/
|
||||
/* always allow user override */
|
||||
if (_GlideRoot.environment.swapInterval >= 0) {
|
||||
swapInterval = _GlideRoot.environment.swapInterval;
|
||||
}
|
||||
|
||||
GR_CHECK_F(myName,
|
||||
(swapInterval > 255) || (swapInterval < 0),
|
||||
@@ -989,6 +996,12 @@ GR_ENTRY(grBufferSwap, void, (FxU32 swapInterval))
|
||||
/* if the interval is non-zero turn on VSYNC waiting */
|
||||
vSync = (swapInterval > 0);
|
||||
|
||||
/* when triple buffering, vsync must be enabled and swapbuffer interval must be 0 */
|
||||
if (gc->grColBuf >= 3) {
|
||||
vSync = FXTRUE;
|
||||
swapInterval = 0;
|
||||
}
|
||||
|
||||
if (swapInterval > 0) swapInterval--;
|
||||
|
||||
/* NOTE: we need a PCI read before and after the swap command */
|
||||
@@ -1728,21 +1741,21 @@ GR_STATE_ENTRY(grDitherMode, void, (GrDitherMode_t mode))
|
||||
GDBG_INFO_MORE(gc->myLevel, "(%d)\n", mode);
|
||||
|
||||
fbzMode = gc->state.fbi_config.fbzMode;
|
||||
if (_GlideRoot.environment.disableDitherSub == FXTRUE)
|
||||
fbzMode &= ~(SST_ENDITHER | SST_DITHER2x2);
|
||||
else
|
||||
fbzMode &= ~(SST_ENDITHER | SST_DITHER2x2 | SST_ENDITHERSUBTRACT);
|
||||
fbzMode &= ~(SST_ENDITHER | SST_DITHER2x2 | SST_ENDITHERSUBTRACT);
|
||||
|
||||
switch (mode) {
|
||||
case GR_DITHER_DISABLE:
|
||||
break;
|
||||
|
||||
case GR_DITHER_2x2:
|
||||
fbzMode |= (SST_ENDITHER | SST_DITHER2x2);
|
||||
/* alpha dither subtract should be disabled */
|
||||
break;
|
||||
|
||||
case GR_DITHER_2x2:
|
||||
case GR_DITHER_4x4:
|
||||
fbzMode |= (SST_ENDITHER | SST_ENDITHERSUBTRACT);
|
||||
/* always force 2x2 dither because it looks better */
|
||||
fbzMode |= (SST_ENDITHER | SST_DITHER2x2 | SST_ENDITHERSUBTRACT);
|
||||
|
||||
/* disable alpha blending dither subtraction according to user request */
|
||||
if (_GlideRoot.environment.disableDitherSub == FXTRUE)
|
||||
fbzMode &= ~(SST_ENDITHERSUBTRACT);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,9 @@
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
** Revision 1.1.1.1.8.1 2004/02/16 07:42:15 dborca
|
||||
** grSetNumPendingBuffers visible with grGetProcAddress
|
||||
**
|
||||
** Revision 1.1.1.1 1999/12/07 21:42:33 joseph
|
||||
** Initial checkin into SourceForge.
|
||||
**
|
||||
@@ -277,6 +280,22 @@ static GrTexDownloadProc _texDownloadProcs[][2][4] =
|
||||
},
|
||||
}
|
||||
#endif /* GL_AMD3D */
|
||||
#if GL_MMX
|
||||
,{
|
||||
{
|
||||
_grTexDownload_Default_8_1,
|
||||
_grTexDownload_Default_8_2,
|
||||
_grTexDownload_Default_8_4,
|
||||
_grTexDownload_MMX,
|
||||
},
|
||||
{
|
||||
_grTexDownload_Default_16_1,
|
||||
_grTexDownload_Default_16_2,
|
||||
_grTexDownload_MMX,
|
||||
_grTexDownload_MMX,
|
||||
},
|
||||
}
|
||||
#endif /* GL_MMX */
|
||||
};
|
||||
#endif /* GLIDE_DISPATCH_DOWNLOAD */
|
||||
|
||||
@@ -577,8 +596,24 @@ _GlideInitEnvironment(void)
|
||||
|
||||
/* Setup the basic proc tables based on the cpu type. */
|
||||
{
|
||||
_GlideRoot.CPUType = _cpu_detect_asm();
|
||||
if (GETENV("FX_CPU")) _GlideRoot.CPUType = atoi(GETENV("FX_CPU"));
|
||||
/* Get CPU Info */
|
||||
_cpuid (&_GlideRoot.CPUType);
|
||||
|
||||
/* Check for vendor specific optimization cases */
|
||||
GDBG_INFO( 0," CPU Vendor: %s\n", _GlideRoot.CPUType.v_name);
|
||||
GDBG_INFO(80," MMX Support: %c\n", _GlideRoot.CPUType.os_support&_CPU_FEATURE_MMX ? 'Y' : 'N');
|
||||
GDBG_INFO(80," SSE Support: %c\n", _GlideRoot.CPUType.os_support&_CPU_FEATURE_SSE ? 'Y' : 'N');
|
||||
GDBG_INFO(80," SSE2 Support: %c\n", _GlideRoot.CPUType.os_support&_CPU_FEATURE_SSE2 ? 'Y' : 'N');
|
||||
GDBG_INFO(80," 3DNow Support: %c\n", _GlideRoot.CPUType.os_support&_CPU_FEATURE_3DNOW ? 'Y' : 'N');
|
||||
GDBG_INFO(80," MMX+ Support: %c\n", _GlideRoot.CPUType.os_support&_CPU_FEATURE_MMXPLUS ? 'Y' : 'N');
|
||||
GDBG_INFO(80,"3DNow+ Support: %c\n", _GlideRoot.CPUType.os_support&_CPU_FEATURE_3DNOWPLUS ? 'Y' : 'N');
|
||||
|
||||
/* No CPU Extensions Allowed */
|
||||
if (GETENV("FX_GLIDE_NO_CPU_EXTENSIONS"))
|
||||
{
|
||||
_GlideRoot.CPUType.feature = _GlideRoot.CPUType.os_support = 0;
|
||||
GDBG_INFO(0,"CPU Extensions disabled\n");
|
||||
}
|
||||
|
||||
/* Default case */
|
||||
#if GLIDE_DISPATCH_SETUP || GLIDE_DISPATCH_DOWNLOAD
|
||||
@@ -593,33 +628,26 @@ _GlideInitEnvironment(void)
|
||||
#endif /* GLIDE_DISPATCH_DOWNLOAD */
|
||||
|
||||
/* Check for vendor specific optimization cases */
|
||||
switch((_GlideRoot.CPUType & 0xFFFF0000UL) >> 16UL) {
|
||||
case kCPUVendorIntel:
|
||||
break;
|
||||
|
||||
case kCPUVendorAMD:
|
||||
if ((_GlideRoot.CPUType & 0xFFFFUL) == 0x02UL) {
|
||||
#if GLIDE_DISPATCH_SETUP
|
||||
_GlideRoot.deviceArchProcs.curTriProcs = _triSetupProcs + 0;
|
||||
#ifdef GL_MMX
|
||||
if (_GlideRoot.CPUType.os_support & _CPU_FEATURE_MMX) {
|
||||
#if GLIDE_DISPATCH_DOWNLOAD
|
||||
_GlideRoot.deviceArchProcs.curTexProcs = _texDownloadProcs + 2;
|
||||
#endif /* GLIDE_DISPATCH_DOWNLOAD */
|
||||
}
|
||||
#endif /* GL_MMX */
|
||||
#ifdef GL_AMD3D
|
||||
_GlideRoot.deviceArchProcs.curDrawTrisProc = _grDrawTriangles_3DNow;
|
||||
_GlideRoot.deviceArchProcs.curLineProc = _grDrawTextureLine_3DNow;
|
||||
#else
|
||||
_GlideRoot.deviceArchProcs.curDrawTrisProc = _grDrawTriangles_Default;
|
||||
_GlideRoot.deviceArchProcs.curLineProc = _grDrawTextureLine_Default;
|
||||
#endif
|
||||
_GlideRoot.deviceArchProcs.curVertexListProcs = _vertexListProcs[0];
|
||||
if (_GlideRoot.CPUType.os_support & _CPU_FEATURE_3DNOW) {
|
||||
#if GLIDE_DISPATCH_SETUP
|
||||
_GlideRoot.deviceArchProcs.curTriProcs = _triSetupProcs + 1;
|
||||
_GlideRoot.deviceArchProcs.curDrawTrisProc = _grDrawTriangles_3DNow;
|
||||
_GlideRoot.deviceArchProcs.curVertexListProcs = _vertexListProcs[1];
|
||||
_GlideRoot.deviceArchProcs.curLineProc = _grDrawTextureLine_3DNow;
|
||||
#endif /* GLIDE_DISPATCH_SETUP */
|
||||
#if GLIDE_DISPATCH_DOWNLOAD
|
||||
_GlideRoot.deviceArchProcs.curTexProcs = _texDownloadProcs + 0;
|
||||
_GlideRoot.deviceArchProcs.curTexProcs = _texDownloadProcs + 1;
|
||||
#endif /* GLIDE_DISPATCH_DOWNLOAD */
|
||||
}
|
||||
break;
|
||||
|
||||
case kCPUVendorUnknown:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
#endif /* GL_AMD3D */
|
||||
#endif /* GLIDE_DISPATCH_SETUP || GLIDE_DISPATCH_DOWNLOAD */
|
||||
}
|
||||
|
||||
@@ -634,7 +662,6 @@ _GlideInitEnvironment(void)
|
||||
_GlideRoot.environment.noSplash = (GETENV("FX_GLIDE_NO_SPLASH") != NULL);
|
||||
_GlideRoot.environment.shamelessPlug = (GETENV("FX_GLIDE_SHAMELESS_PLUG") != NULL);
|
||||
_GlideRoot.environment.ignoreReopen = (GETENV("FX_GLIDE_IGNORE_REOPEN") != NULL);
|
||||
_GlideRoot.environment.disableDitherSub = (GETENV("FX_GLIDE_NO_DITHER_SUB") != NULL);
|
||||
_GlideRoot.environment.texLodDither = ((GETENV("FX_GLIDE_LOD_DITHER") == NULL)
|
||||
? 0x00UL
|
||||
: SST_TLODDITHER);
|
||||
@@ -651,17 +678,29 @@ _GlideInitEnvironment(void)
|
||||
/* wait until there's 6 or fewer buffer swaps pending */
|
||||
/* the hardware counter is only 3 bits so we don't want it to overflow */
|
||||
/* also the latency gets too long */
|
||||
_GlideRoot.environment.swapPendingCount = 4;
|
||||
/*_GlideRoot.environment.swapPendingCount = 4;*/
|
||||
_GlideRoot.environment.swapPendingCount = GLIDE_GETENV("FX_GLIDE_SWAPPENDINGCOUNT", 1L);
|
||||
if (_GlideRoot.environment.swapPendingCount > 6)
|
||||
_GlideRoot.environment.swapPendingCount = 6;
|
||||
if (_GlideRoot.environment.swapPendingCount < 0)
|
||||
_GlideRoot.environment.swapPendingCount = 0;
|
||||
|
||||
_GlideRoot.environment.snapshot = GLIDE_GETENV("FX_SNAPSHOT", 0);
|
||||
|
||||
|
||||
/* set default to disable alpha dither subtraction */
|
||||
if ((envStr = GETENV("FX_GLIDE_NO_DITHER_SUB")) == NULL) {
|
||||
_GlideRoot.environment.disableDitherSub = FXTRUE;
|
||||
} else {
|
||||
_GlideRoot.environment.disableDitherSub = (atol(envStr) != 0);
|
||||
}
|
||||
|
||||
GDBG_INFO(80," triBoundsCheck: %d\n",_GlideRoot.environment.triBoundsCheck);
|
||||
GDBG_INFO(80," swapInterval: %d\n",_GlideRoot.environment.swapInterval);
|
||||
GDBG_INFO(80," noSplash: %d\n",_GlideRoot.environment.noSplash);
|
||||
GDBG_INFO(80," shamelessPlug: %d\n",_GlideRoot.environment.shamelessPlug);
|
||||
GDBG_INFO(80," cpu: %d\n",_GlideRoot.CPUType);
|
||||
GDBG_INFO(80," snapshot: %d\n",_GlideRoot.environment.snapshot);
|
||||
GDBG_INFO(80," disableDitherSub: %d\n",_GlideRoot.environment.disableDitherSub);
|
||||
GDBG_INFO(80," swapPendingCount : %d\n",_GlideRoot.environment.swapPendingCount);
|
||||
}
|
||||
|
||||
/* constant pool */
|
||||
|
||||
Reference in New Issue
Block a user