moved OS and CPU flags from bInfo to _GlideRoot
This commit is contained in:
@@ -2020,19 +2020,14 @@ typedef struct GrGC_s
|
|||||||
** stuff near the top is accessed a lot
|
** stuff near the top is accessed a lot
|
||||||
*/
|
*/
|
||||||
struct _GlideRoot_s {
|
struct _GlideRoot_s {
|
||||||
int p6Fencer; /* xchg to here to keep this in cache!!! */
|
int p6Fencer; /* xchg to here to keep this in cache!!! */
|
||||||
FxU32
|
FxU32 tlsIndex;
|
||||||
tlsIndex,
|
FxU32 tlsOffset;
|
||||||
tlsOffset;
|
|
||||||
|
|
||||||
int current_sst;
|
int current_sst;
|
||||||
_p_info
|
FxI32 windowsInit; /* Is the fullscreen part of glide initialized? */
|
||||||
CPUType; /* Colourless's CPUID */
|
|
||||||
FxBool
|
|
||||||
OSWin95;
|
|
||||||
FxI32
|
|
||||||
windowsInit; /* Is the fullscreen part of glide initialized? */
|
|
||||||
|
|
||||||
|
_p_info CPUType; /* CPUID */
|
||||||
|
|
||||||
#if !GLIDE_HW_TRI_SETUP || !GLIDE_PACKET3_TRI_SETUP
|
#if !GLIDE_HW_TRI_SETUP || !GLIDE_PACKET3_TRI_SETUP
|
||||||
FxU32 paramCount;
|
FxU32 paramCount;
|
||||||
@@ -2041,9 +2036,9 @@ struct _GlideRoot_s {
|
|||||||
#endif /* !GLIDE_HW_TRI_SETUP || !GLIDE_PACKET3_TRI_SETUP */
|
#endif /* !GLIDE_HW_TRI_SETUP || !GLIDE_PACKET3_TRI_SETUP */
|
||||||
|
|
||||||
#if GLIDE_MULTIPLATFORM
|
#if GLIDE_MULTIPLATFORM
|
||||||
GrGCFuncs
|
GrGCFuncs curGCFuncs; /* Current dd Function pointer table */
|
||||||
curGCFuncs; /* Current dd Function pointer table */
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int initialized;
|
int initialized;
|
||||||
|
|
||||||
struct { /* constant pool (minimizes cache misses) */
|
struct { /* constant pool (minimizes cache misses) */
|
||||||
@@ -2160,6 +2155,16 @@ struct _GlideRoot_s {
|
|||||||
GrTexDownloadProcVector* nullTexProcs;
|
GrTexDownloadProcVector* nullTexProcs;
|
||||||
} deviceArchProcs;
|
} deviceArchProcs;
|
||||||
|
|
||||||
|
#if (GLIDE_PLATFORM & GLIDE_OS_WIN32)
|
||||||
|
#define OS_WIN32_95 0
|
||||||
|
#define OS_WIN32_98 1
|
||||||
|
#define OS_WIN32_ME 2
|
||||||
|
#define OS_WIN32_NT4 3
|
||||||
|
#define OS_WIN32_2K 4
|
||||||
|
#define OS_WIN32_XP 5
|
||||||
|
FxI32 OS;
|
||||||
|
#endif
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern struct _GlideRoot_s GR_CDECL _GlideRoot;
|
extern struct _GlideRoot_s GR_CDECL _GlideRoot;
|
||||||
@@ -3182,57 +3187,6 @@ _grErrorCallback(const char* const procName,
|
|||||||
va_list args);
|
va_list args);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if 0 /* we now use Colourless's CPUID */
|
|
||||||
/* Returns 16:16 pair indicating the cpu's manufacturer and its
|
|
||||||
* capabilities. Non-Intel processors should have a vendor id w/ the
|
|
||||||
* high bit set so that it appears to be a negative #. The value of
|
|
||||||
* the capability field is assumed to be a monotonically increasing
|
|
||||||
* inclusive set.
|
|
||||||
*
|
|
||||||
* Unknown:
|
|
||||||
* 0xFFFF:0xFFFF
|
|
||||||
*
|
|
||||||
* Intel: 0x0000
|
|
||||||
* 4: 486 and lower
|
|
||||||
* 5: Pentium
|
|
||||||
* 6: P6 Core or better
|
|
||||||
* 7: p6 Core w/ katmai (instructions/write buffers)
|
|
||||||
*
|
|
||||||
* AMD: 0x8001
|
|
||||||
* 1: MMX
|
|
||||||
* 2: 3DNow!(tm)
|
|
||||||
* 4: K6-type MTRRs
|
|
||||||
* 8: P2-type MTRRs
|
|
||||||
*
|
|
||||||
* Cyrix: 0x8002
|
|
||||||
* 1: MMX
|
|
||||||
* 2: 3DNow!(tm)
|
|
||||||
*
|
|
||||||
* IDT: 0x8003
|
|
||||||
* 1: MMX
|
|
||||||
* 2: 3DNow!(tm)
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
enum {
|
|
||||||
kCPUVendorIntel = 0x0000,
|
|
||||||
kCPUVendorAMD = 0x8001,
|
|
||||||
kCPUVendorCyrix = 0x8002,
|
|
||||||
kCPUVendorIDT = 0x8003,
|
|
||||||
kCPUVendorTransmeta = 0x8004,
|
|
||||||
kCPUVendorUnknown = 0xFFFF
|
|
||||||
};
|
|
||||||
|
|
||||||
extern FxI32 GR_CDECL
|
|
||||||
_cpu_detect_asm(void);
|
|
||||||
|
|
||||||
extern void GR_CDECL
|
|
||||||
single_precision_asm(void);
|
|
||||||
|
|
||||||
extern void GR_CDECL
|
|
||||||
double_precision_asm(void);
|
|
||||||
#endif /* we now use Colourless's CPUID */
|
|
||||||
|
|
||||||
/* The translation macros convert from the reasonable log2 formats to
|
/* The translation macros convert from the reasonable log2 formats to
|
||||||
* the somewhat whacked (For those of us coming back to sst1 things
|
* the somewhat whacked (For those of us coming back to sst1 things
|
||||||
* from sst2 w/ its saner lms notation) sst1 lod format. The api and
|
* from sst2 w/ its saner lms notation) sst1 lod format. The api and
|
||||||
|
|||||||
@@ -1318,17 +1318,13 @@ void
|
|||||||
_GlideInitEnvironment(int which)
|
_GlideInitEnvironment(int which)
|
||||||
{
|
{
|
||||||
#define FN_NAME "_GlideInitEnvironment"
|
#define FN_NAME "_GlideInitEnvironment"
|
||||||
/* int i; */
|
int i;
|
||||||
FxU32 ditherMode;
|
FxU32 ditherMode;
|
||||||
const char* envStr;
|
const char* envStr;
|
||||||
FxU32 ctx = which;
|
FxU32 ctx = which;
|
||||||
double pi = 3.1415926535;
|
double pi = 3.1415926535;
|
||||||
const char* envStr2;
|
const char* envStr2;
|
||||||
|
|
||||||
#if (GLIDE_PLATFORM & GLIDE_OS_WIN32)
|
|
||||||
OSVERSIONINFO ovi;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (_GlideRoot.initialized) /* only execute once */
|
if (_GlideRoot.initialized) /* only execute once */
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -1338,15 +1334,7 @@ _GlideInitEnvironment(int which)
|
|||||||
|
|
||||||
|
|
||||||
#if (GLIDE_PLATFORM & GLIDE_OS_WIN32)
|
#if (GLIDE_PLATFORM & GLIDE_OS_WIN32)
|
||||||
|
_GlideRoot.OS = hwcGetOS();
|
||||||
ovi.dwOSVersionInfoSize = sizeof ( ovi );
|
|
||||||
GetVersionEx ( &ovi );
|
|
||||||
if (ovi.dwPlatformId == VER_PLATFORM_WIN32_NT)
|
|
||||||
_GlideRoot.OSWin95 = 0;
|
|
||||||
else
|
|
||||||
_GlideRoot.OSWin95 = 1;
|
|
||||||
GDBG_INFO(80, "%s: OS = %s\n", FN_NAME, _GlideRoot.OSWin95 ? "W9X" : "WNT");
|
|
||||||
|
|
||||||
#if defined(FX_DLL_ENABLE) && (GLIDE_PLATFORM & GLIDE_OS_WIN32)
|
#if defined(FX_DLL_ENABLE) && (GLIDE_PLATFORM & GLIDE_OS_WIN32)
|
||||||
{ /* GMT: display the DLL pathname for sanity checking */
|
{ /* GMT: display the DLL pathname for sanity checking */
|
||||||
char buf[132] = "failed";
|
char buf[132] = "failed";
|
||||||
@@ -1908,130 +1896,15 @@ _GlideInitEnvironment(int which)
|
|||||||
|
|
||||||
_GlideRoot.environment.useAppGamma = GLIDE_GETENV("FX_GLIDE_USE_APP_GAMMA", GC.bInfo->RegPath, 1L);
|
_GlideRoot.environment.useAppGamma = GLIDE_GETENV("FX_GLIDE_USE_APP_GAMMA", GC.bInfo->RegPath, 1L);
|
||||||
|
|
||||||
#if 0 /* use Colourless's CPUID */
|
|
||||||
_GlideRoot.CPUType = GLIDE_GETENV("FX_CPU", GC.bInfo->RegPath, _cpu_detect_asm() );
|
|
||||||
/* The FP part of SSE introduces a new architectural state and therefore
|
|
||||||
requires support from the operating system. So even if CPUID indicates
|
|
||||||
support for SSE FP, the application might not be able to use it. If
|
|
||||||
CPUID indicates support for SSE FP, check here whether it is also
|
|
||||||
supported by the OS, and turn off the SSE FP feature bit if there
|
|
||||||
is no OS support for SSE FP.
|
|
||||||
|
|
||||||
Operating systems that do not support SSE FP return an illegal
|
|
||||||
instruction exception if execution of an SSE FP instruction is performed.
|
|
||||||
Here, a sample SSE FP instruction is executed, and is checked for an
|
|
||||||
exception using the (non-standard) __try/__except mechanism
|
|
||||||
of Microsoft Visual C.
|
|
||||||
|
|
||||||
Although CR0 can be called from ring3, CR4 must be called from ring0
|
/* Get CPU Info */
|
||||||
which prevents us from using the CR0.EM and the CR4.OSFXSR bits. The
|
|
||||||
main reason for this indirect method.
|
|
||||||
*/
|
|
||||||
if((_GlideRoot.CPUType & 0x10L) == 0x10UL) {
|
|
||||||
__try {
|
|
||||||
__asm _emit 0x0f
|
|
||||||
__asm _emit 0x56
|
|
||||||
__asm _emit 0xC0 ;; orps xmm0, xmm0
|
|
||||||
}
|
|
||||||
__except(EXCEPTION_EXECUTE_HANDLER) {
|
|
||||||
GDBG_INFO(0,"SSE is not supported by OS\n");
|
|
||||||
_GlideRoot.CPUType &= ~0x10UL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if((_GlideRoot.CPUType & 0x40L) == 0x40UL) {
|
|
||||||
__try {
|
|
||||||
__asm _emit 0x66
|
|
||||||
__asm _emit 0x0f
|
|
||||||
__asm _emit 0x57
|
|
||||||
__asm _emit 0xc0 ;; xorpd xmm0, xmm0
|
|
||||||
}
|
|
||||||
__except(EXCEPTION_EXECUTE_HANDLER) {
|
|
||||||
GDBG_INFO(0,"SSE2 is not supported by OS\n");
|
|
||||||
_GlideRoot.CPUType &= ~0x40UL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
GDBG_INFO(0," cpu: 0x%x\n",_GlideRoot.CPUType);
|
|
||||||
|
|
||||||
/* Setup the basic proc tables based on the cpu type. */
|
|
||||||
{
|
|
||||||
/* Default case - rasterization routines */
|
|
||||||
_GlideRoot.deviceArchProcs.curTriProcs = _triSetupProcs + 0;
|
|
||||||
_GlideRoot.deviceArchProcs.curDrawTrisProc = _grDrawTriangles_Default;
|
|
||||||
_GlideRoot.deviceArchProcs.curVertexListProcs = _vertexListProcs[0];
|
|
||||||
|
|
||||||
/* Default case - texture download procs */
|
|
||||||
_GlideRoot.deviceArchProcs.curTexProcs = _texDownloadProcs + 0;
|
|
||||||
|
|
||||||
/* null proc case */
|
|
||||||
#define ARRAY_LAST(__array) ((sizeof(__array) / sizeof((__array)[0])) - 1)
|
|
||||||
_GlideRoot.deviceArchProcs.nullTriProcs = _triSetupProcs + ARRAY_LAST(_triSetupProcs);
|
|
||||||
_GlideRoot.deviceArchProcs.nullDrawTrisProc = _grDrawTriangles_null;
|
|
||||||
_GlideRoot.deviceArchProcs.nullVertexListProcs = _vertexListProcs[ARRAY_LAST(_vertexListProcs)];
|
|
||||||
_GlideRoot.deviceArchProcs.nullTexProcs = _texDownloadProcs + ARRAY_LAST(_texDownloadProcs);
|
|
||||||
#undef ARRAY_LAST
|
|
||||||
|
|
||||||
/* Check for vendor specific optimization cases */
|
|
||||||
switch((_GlideRoot.CPUType & 0xFFFF0000UL) >> 16UL) {
|
|
||||||
case kCPUVendorIntel:
|
|
||||||
GDBG_INFO(0,"Intel detected\n");
|
|
||||||
break;
|
|
||||||
case kCPUVendorAMD:
|
|
||||||
GDBG_INFO(0,"AMD detected\n");
|
|
||||||
break;
|
|
||||||
case kCPUVendorCyrix:
|
|
||||||
GDBG_INFO(0,"Cyrix detected\n");
|
|
||||||
break;
|
|
||||||
case kCPUVendorIDT:
|
|
||||||
GDBG_INFO(0,"IDT detected\n");
|
|
||||||
break;
|
|
||||||
case kCPUVendorTransmeta:
|
|
||||||
GDBG_INFO(0,"Transmeta detected\n");
|
|
||||||
break;
|
|
||||||
case kCPUVendorUnknown:
|
|
||||||
default:
|
|
||||||
GDBG_INFO(0,"unknown CPU\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(((_GlideRoot.CPUType & 0xFFFF0000UL) >> 16UL) != kCPUVendorUnknown) {
|
|
||||||
#if GL_MMX
|
|
||||||
if ((_GlideRoot.CPUType & 0x1L) == 0x1UL) { /* check for MMX feature */
|
|
||||||
GDBG_INFO(0,"using MMX\n");
|
|
||||||
_GlideRoot.deviceArchProcs.curTexProcs = _texDownloadProcs + 2;
|
|
||||||
}
|
|
||||||
#endif /* GL_MMX */
|
|
||||||
#if GL_SSE
|
|
||||||
if ((_GlideRoot.CPUType & 0x10L) == 0x10UL) { /* check for SSE FP feature */
|
|
||||||
GDBG_INFO(0,"using SSE\n");
|
|
||||||
_GlideRoot.deviceArchProcs.curTriProcs = _triSetupProcs + 2;
|
|
||||||
_GlideRoot.deviceArchProcs.curDrawTrisProc = _grDrawTriangles_SSE;
|
|
||||||
_GlideRoot.deviceArchProcs.curVertexListProcs = _vertexListProcs[2];
|
|
||||||
}
|
|
||||||
#endif /* GL_SSE */
|
|
||||||
#if GL_AMD3D
|
|
||||||
if ((_GlideRoot.CPUType & 0x2L) == 0x2UL) { /* check for 3DNow! feature */
|
|
||||||
GDBG_INFO(0,"using 3DNow!\n");
|
|
||||||
_GlideRoot.deviceArchProcs.curTriProcs = _triSetupProcs + 1;
|
|
||||||
_GlideRoot.deviceArchProcs.curDrawTrisProc = _grDrawTriangles_3DNow;
|
|
||||||
_GlideRoot.deviceArchProcs.curVertexListProcs = _vertexListProcs[1];
|
|
||||||
_GlideRoot.deviceArchProcs.curTexProcs = _texDownloadProcs + 1;
|
|
||||||
}
|
|
||||||
#endif /* GL_AMD3D */
|
|
||||||
#if GL_SSE2
|
|
||||||
if ((_GlideRoot.CPUType & 0x40L) == 0x40UL) { /* check for SSE2 feature */
|
|
||||||
GDBG_INFO(0,"using SSE2\n");
|
|
||||||
_GlideRoot.deviceArchProcs.curTexProcs = _texDownloadProcs + 3;
|
|
||||||
}
|
|
||||||
#endif /* GL_SSE2*/
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
/* Get CPU type */
|
|
||||||
_cpuid (&_GlideRoot.CPUType);
|
_cpuid (&_GlideRoot.CPUType);
|
||||||
|
|
||||||
|
#ifndef __linux__
|
||||||
|
/* Pass retrieved CPU Info into minihwc */
|
||||||
|
hwcSetCPUInfo(&_GlideRoot.CPUType);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Setup the basic proc tables based on the cpu type. */
|
/* Setup the basic proc tables based on the cpu type. */
|
||||||
{
|
{
|
||||||
//int mmx_3dnow;
|
//int mmx_3dnow;
|
||||||
@@ -2053,7 +1926,7 @@ _GlideInitEnvironment(int which)
|
|||||||
|
|
||||||
/* Check for vendor specific optimization cases */
|
/* Check for vendor specific optimization cases */
|
||||||
GDBG_INFO( 0," CPU Vendor: %s\n", _GlideRoot.CPUType.v_name);
|
GDBG_INFO( 0," CPU Vendor: %s\n", _GlideRoot.CPUType.v_name);
|
||||||
GDBG_INFO( 0," CPU Model: %s\n", _GlideRoot.CPUType.model_name);
|
GDBG_INFO( 0," CPU Model : %s\n", _GlideRoot.CPUType.model_name);
|
||||||
GDBG_INFO(80," MMX Support: %c\n", _GlideRoot.CPUType.os_support&_CPU_FEATURE_MMX ? 'Y' : 'N');
|
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," 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," SSE2 Support: %c\n", _GlideRoot.CPUType.os_support&_CPU_FEATURE_SSE2 ? 'Y' : 'N');
|
||||||
@@ -2070,7 +1943,7 @@ _GlideInitEnvironment(int which)
|
|||||||
|
|
||||||
#if GL_MMX
|
#if GL_MMX
|
||||||
if (_GlideRoot.CPUType.os_support & _CPU_FEATURE_MMX) { /* check for MMX feature */
|
if (_GlideRoot.CPUType.os_support & _CPU_FEATURE_MMX) { /* check for MMX feature */
|
||||||
GDBG_INFO(80,"Using MMX Texture Download Functions\n");
|
GDBG_INFO(0,"Using MMX Texture Download Functions\n");
|
||||||
_GlideRoot.deviceArchProcs.curTexProcs = _texDownloadProcs + 2;
|
_GlideRoot.deviceArchProcs.curTexProcs = _texDownloadProcs + 2;
|
||||||
}
|
}
|
||||||
#endif /* GL_MMX */
|
#endif /* GL_MMX */
|
||||||
@@ -2084,7 +1957,7 @@ _GlideInitEnvironment(int which)
|
|||||||
#endif /* GL_SSE */
|
#endif /* GL_SSE */
|
||||||
#if GL_AMD3D
|
#if GL_AMD3D
|
||||||
if (_GlideRoot.CPUType.os_support & _CPU_FEATURE_3DNOW) { /* check for 3DNow! feature */
|
if (_GlideRoot.CPUType.os_support & _CPU_FEATURE_3DNOW) { /* check for 3DNow! feature */
|
||||||
GDBG_INFO(80,"Using 3DNow! Texture Download Functions\n");
|
GDBG_INFO(0,"Using 3DNow! Texture Download Functions\n");
|
||||||
_GlideRoot.deviceArchProcs.curTexProcs = _texDownloadProcs + 1;
|
_GlideRoot.deviceArchProcs.curTexProcs = _texDownloadProcs + 1;
|
||||||
|
|
||||||
GDBG_INFO(0,"Using 3DNow! Geometry Functions\n");
|
GDBG_INFO(0,"Using 3DNow! Geometry Functions\n");
|
||||||
@@ -2100,8 +1973,6 @@ _GlideInitEnvironment(int which)
|
|||||||
}
|
}
|
||||||
#endif /* GL_SSE2*/
|
#endif /* GL_SSE2*/
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* use Colourless's CPUID */
|
|
||||||
|
|
||||||
|
|
||||||
#if __POWERPC__ && PCI_BUMP_N_GRIND
|
#if __POWERPC__ && PCI_BUMP_N_GRIND
|
||||||
@@ -2164,13 +2035,10 @@ _GlideInitEnvironment(int which)
|
|||||||
#endif
|
#endif
|
||||||
} */
|
} */
|
||||||
|
|
||||||
|
/* display info for all sst devices */
|
||||||
/* KoolSmoky - just get the info for the requested sst
|
|
||||||
for (i = 0; i < _GlideRoot.hwConfig.num_sst; i++) {
|
for (i = 0; i < _GlideRoot.hwConfig.num_sst; i++) {
|
||||||
displayBoardInfo(i, &_GlideRoot.hwConfig);
|
displayBoardInfo(i, &_GlideRoot.hwConfig);
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
displayBoardInfo(ctx, &_GlideRoot.hwConfig);
|
|
||||||
|
|
||||||
_GlideRoot.initialized = FXTRUE; /* save this for the end */
|
_GlideRoot.initialized = FXTRUE; /* save this for the end */
|
||||||
} /* _GlideInitEnvironment */
|
} /* _GlideInitEnvironment */
|
||||||
|
|||||||
@@ -418,8 +418,10 @@ GR_EXT_ENTRY(grSurfaceReleaseContext, void , (GrContext_t ctx) )
|
|||||||
* context by yanking out the hardware mapping! %%KCD
|
* context by yanking out the hardware mapping! %%KCD
|
||||||
*/
|
*/
|
||||||
#if (GLIDE_OS & GLIDE_OS_WIN32)
|
#if (GLIDE_OS & GLIDE_OS_WIN32)
|
||||||
if ( !gc->bInfo->osNT )
|
if ((_GlideRoot.OS == OS_WIN32_95) ||
|
||||||
hwcUnmapMemory9x ( gc->bInfo );
|
(_GlideRoot.OS == OS_WIN32_98) ||
|
||||||
|
(_GlideRoot.OS == OS_WIN32_ME))
|
||||||
|
hwcUnmapMemory9x ( gc->bInfo );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Free any windowed fifo associated w/ the context */
|
/* Free any windowed fifo associated w/ the context */
|
||||||
|
|||||||
@@ -3097,15 +3097,9 @@ GR_ENTRY(grSstWinClose, FxBool, (GrContext_t context))
|
|||||||
** OpenGL fullscreen apps can run. If not, we will cause a lot
|
** OpenGL fullscreen apps can run. If not, we will cause a lot
|
||||||
** of problems.
|
** of problems.
|
||||||
*/
|
*/
|
||||||
#if 0
|
|
||||||
if (_GlideRoot.environment.is_opengl == FXTRUE) {
|
if (_GlideRoot.environment.is_opengl == FXTRUE) {
|
||||||
/* KoolSmoky- don't release Exclusive mode if we're running
|
hwcRestoreVideo(gc->bInfo);
|
||||||
* in NT5.1. This may cause probems. but, ohwell.
|
|
||||||
* Fix me! */
|
|
||||||
if( !gc->bInfo->osNT51 )
|
|
||||||
hwcRestoreVideo(gc->bInfo);
|
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __linux__
|
#ifndef __linux__
|
||||||
if (gc->lostContext) {
|
if (gc->lostContext) {
|
||||||
@@ -3222,10 +3216,13 @@ GR_ENTRY(grSstWinClose, FxBool, (GrContext_t context))
|
|||||||
|
|
||||||
#if (GLIDE_OS & GLIDE_OS_WIN32)
|
#if (GLIDE_OS & GLIDE_OS_WIN32)
|
||||||
if (_GlideRoot.environment.is_opengl != FXTRUE) {
|
if (_GlideRoot.environment.is_opengl != FXTRUE) {
|
||||||
if ( gc->bInfo->osNT )
|
if ((_GlideRoot.OS == OS_WIN32_95) ||
|
||||||
hwcUnmapMemory();
|
(_GlideRoot.OS == OS_WIN32_98) ||
|
||||||
else
|
(_GlideRoot.OS == OS_WIN32_ME)) {
|
||||||
hwcUnmapMemory9x ( gc->bInfo );
|
hwcUnmapMemory9x ( gc->bInfo );
|
||||||
|
} else {
|
||||||
|
hwcUnmapMemory();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -57,11 +57,14 @@ initThreadStorage( void )
|
|||||||
threadInit = 1;
|
threadInit = 1;
|
||||||
_GlideRoot.tlsIndex = TlsAlloc();
|
_GlideRoot.tlsIndex = TlsAlloc();
|
||||||
}
|
}
|
||||||
if (_GlideRoot.OSWin95)
|
|
||||||
_GlideRoot.tlsOffset = W95_TLS_INDEX_TO_OFFSET(_GlideRoot.tlsIndex);
|
|
||||||
else
|
|
||||||
_GlideRoot.tlsOffset = WNT_TLS_INDEX_TO_OFFSET(_GlideRoot.tlsIndex);
|
|
||||||
|
|
||||||
|
if ((_GlideRoot.OS == OS_WIN32_95) ||
|
||||||
|
(_GlideRoot.OS == OS_WIN32_98) ||
|
||||||
|
(_GlideRoot.OS == OS_WIN32_ME)) {
|
||||||
|
_GlideRoot.tlsOffset = W95_TLS_INDEX_TO_OFFSET(_GlideRoot.tlsIndex);
|
||||||
|
} else {
|
||||||
|
_GlideRoot.tlsOffset = WNT_TLS_INDEX_TO_OFFSET(_GlideRoot.tlsIndex);
|
||||||
|
}
|
||||||
} /* initThreadStorage */
|
} /* initThreadStorage */
|
||||||
|
|
||||||
void setThreadValue( FxU32 value ) {
|
void setThreadValue( FxU32 value ) {
|
||||||
|
|||||||
@@ -1026,6 +1026,7 @@ static __inline int min (int x, int y)
|
|||||||
#define HWC_RAW_LFB_STRIDE SST_RAW_LFB_ADDR_STRIDE_8K
|
#define HWC_RAW_LFB_STRIDE SST_RAW_LFB_ADDR_STRIDE_8K
|
||||||
|
|
||||||
hwcInfo hInfo;
|
hwcInfo hInfo;
|
||||||
|
_p_info *CPUInfo = NULL;
|
||||||
|
|
||||||
#define MAX_ERROR_SIZE 1024
|
#define MAX_ERROR_SIZE 1024
|
||||||
static char errorString[MAX_ERROR_SIZE];
|
static char errorString[MAX_ERROR_SIZE];
|
||||||
@@ -1190,15 +1191,6 @@ static hwcBoardInfo *curBI = NULL;
|
|||||||
|
|
||||||
#ifdef HWC_EXT_INIT
|
#ifdef HWC_EXT_INIT
|
||||||
|
|
||||||
#if 0
|
|
||||||
#if !defined(HMONITOR_DECLARED) // AJB- Make def compatible w/ vc6 headers
|
|
||||||
|
|
||||||
typedef void *HMONITOR;
|
|
||||||
//DECLARE_HANDLE(HMONITOR);
|
|
||||||
|
|
||||||
#define HMONITOR_DECLARED
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
typedef BOOL (CALLBACK* MONITORENUMPROC)(HMONITOR, HDC, LPRECT, LPARAM);
|
typedef BOOL (CALLBACK* MONITORENUMPROC)(HMONITOR, HDC, LPRECT, LPARAM);
|
||||||
typedef WINUSERAPI BOOL WINAPI
|
typedef WINUSERAPI BOOL WINAPI
|
||||||
EnumDisplayMonitors_func( HDC hdc,
|
EnumDisplayMonitors_func( HDC hdc,
|
||||||
@@ -1219,11 +1211,12 @@ static char *
|
|||||||
getRegPathEx()
|
getRegPathEx()
|
||||||
{
|
{
|
||||||
char *retVal = NULL;
|
char *retVal = NULL;
|
||||||
OSVERSIONINFO ovi;
|
FxI32 OS = hwcGetOS();
|
||||||
|
|
||||||
ovi.dwOSVersionInfoSize = sizeof ( ovi );
|
if ((OS == OS_WIN32_NT4) ||
|
||||||
GetVersionEx ( &ovi );
|
(OS == OS_WIN32_2K) ||
|
||||||
if (ovi.dwPlatformId == VER_PLATFORM_WIN32_NT) {
|
(OS == OS_WIN32_XP))
|
||||||
|
{
|
||||||
HKEY hKey;
|
HKEY hKey;
|
||||||
DWORD type ;
|
DWORD type ;
|
||||||
static char strval[255];
|
static char strval[255];
|
||||||
@@ -1328,10 +1321,6 @@ monitorEnum( HMONITOR handle, HDC dc, LPRECT rect, LPARAM param )
|
|||||||
drvName = "DISPLAY",
|
drvName = "DISPLAY",
|
||||||
devName = NULL;
|
devName = NULL;
|
||||||
|
|
||||||
OSVERSIONINFO ovi;
|
|
||||||
ovi.dwOSVersionInfoSize = sizeof ( ovi );
|
|
||||||
GetVersionEx ( &ovi );
|
|
||||||
|
|
||||||
/* If we're on a multi-mon capable system then we may have
|
/* If we're on a multi-mon capable system then we may have
|
||||||
* different display type devices so we have to get the device
|
* different display type devices so we have to get the device
|
||||||
* name explicitly for the CreateDC call.
|
* name explicitly for the CreateDC call.
|
||||||
@@ -1471,11 +1460,7 @@ hwcInit(FxU32 vID, FxU32 dID)
|
|||||||
DevEnumRec
|
DevEnumRec
|
||||||
data[HWC_MAX_BOARDS*2];
|
data[HWC_MAX_BOARDS*2];
|
||||||
int monitor;
|
int monitor;
|
||||||
_p_info CPUInfo;
|
FxI32 OS = hwcGetOS();
|
||||||
OSVERSIONINFO ovi;
|
|
||||||
|
|
||||||
ovi.dwOSVersionInfoSize = sizeof ( ovi );
|
|
||||||
GetVersionEx ( &ovi );
|
|
||||||
|
|
||||||
GDBG_INFO(80, "%s\n", FN_NAME);
|
GDBG_INFO(80, "%s\n", FN_NAME);
|
||||||
errorString[0] = '\0';
|
errorString[0] = '\0';
|
||||||
@@ -1642,25 +1627,16 @@ hwcInit(FxU32 vID, FxU32 dID)
|
|||||||
data[num_monitor].dc = hdc;
|
data[num_monitor].dc = hdc;
|
||||||
strcpy(data[num_monitor].DeviceName, DispDev.DeviceName);
|
strcpy(data[num_monitor].DeviceName, DispDev.DeviceName);
|
||||||
|
|
||||||
switch(ovi.dwPlatformId) {
|
if (OS == OS_WIN32_95) {
|
||||||
case VER_PLATFORM_WIN32_NT:
|
strcpy(data[num_monitor].RegPath, getRegPathEx());
|
||||||
{
|
} else if ( (OS == OS_WIN32_98) || (OS == OS_WIN32_ME) ) {
|
||||||
// win2k/xp
|
strcpy(data[num_monitor].RegPath, DispDev.DeviceKey);
|
||||||
|
} else {
|
||||||
char *pdest;
|
char *pdest;
|
||||||
pdest = strstr(DispDev.DeviceKey, "\\Service");
|
pdest = strstr(DispDev.DeviceKey, "\\Service");
|
||||||
strcpy(data[num_monitor].RegPath, "SYSTEM\\CurrentControlSet");
|
strcpy(data[num_monitor].RegPath, "SYSTEM\\CurrentControlSet");
|
||||||
strcat(data[num_monitor].RegPath, pdest);
|
strcat(data[num_monitor].RegPath, pdest);
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
case VER_PLATFORM_WIN32_WINDOWS:
|
|
||||||
{
|
|
||||||
if(ovi.dwMinorVersion < 10)
|
|
||||||
strcpy(data[num_monitor].RegPath, getRegPathEx()); // win95
|
|
||||||
else
|
|
||||||
strcpy(data[num_monitor].RegPath, DispDev.DeviceKey); // win98/me
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
GDBG_INFO(80, "DeviceKey: %s\n", data[num_monitor].RegPath);
|
GDBG_INFO(80, "DeviceKey: %s\n", data[num_monitor].RegPath);
|
||||||
|
|
||||||
@@ -1772,16 +1748,6 @@ hwcInit(FxU32 vID, FxU32 dID)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Colourless - Get CPUInfo */
|
|
||||||
_cpuid (&CPUInfo);
|
|
||||||
{
|
|
||||||
/* No CPU Extensions Allowed */
|
|
||||||
for (monitor = 0; monitor < num_monitor; monitor++) {
|
|
||||||
const char *no_cpu_ext = GETENV("FX_GLIDE_NO_CPU_EXTENSIONS", data[monitor].RegPath);
|
|
||||||
if (no_cpu_ext && atoi(no_cpu_ext)) CPUInfo.feature = CPUInfo.os_support = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
hInfo.nBoards = 0;
|
hInfo.nBoards = 0;
|
||||||
for (monitor = 0; monitor < num_monitor; monitor++) {
|
for (monitor = 0; monitor < num_monitor; monitor++) {
|
||||||
@@ -1810,21 +1776,6 @@ hwcInit(FxU32 vID, FxU32 dID)
|
|||||||
GDBG_INFO(80,"hInfo : [%d] DeviceName: %s\n", monitor, hInfo.boardInfo[monitor].DeviceName);
|
GDBG_INFO(80,"hInfo : [%d] DeviceName: %s\n", monitor, hInfo.boardInfo[monitor].DeviceName);
|
||||||
/* hInfo.boardInfo[monitor].extContextID = ctxRes.Ext.optData.allocContextRes.contextID; */
|
/* hInfo.boardInfo[monitor].extContextID = ctxRes.Ext.optData.allocContextRes.contextID; */
|
||||||
|
|
||||||
if (ovi.dwPlatformId == VER_PLATFORM_WIN32_NT) {
|
|
||||||
hInfo.boardInfo[monitor].osNT = FXTRUE;
|
|
||||||
if ( ovi.dwMajorVersion >= 5 && ovi.dwMinorVersion >= 1) {
|
|
||||||
hInfo.boardInfo[monitor].osNT51 = FXTRUE;
|
|
||||||
GDBG_INFO(80, FN_NAME ": OS: NT5.1\n");
|
|
||||||
} else {
|
|
||||||
hInfo.boardInfo[monitor].osNT51 = FXFALSE;
|
|
||||||
GDBG_INFO(80, FN_NAME ": OS: NT\n");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
hInfo.boardInfo[monitor].osNT = FXFALSE;
|
|
||||||
hInfo.boardInfo[monitor].osNT51 = FXFALSE;
|
|
||||||
GDBG_INFO(80, FN_NAME ": OS: 9X\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
ctxReq.which = HWCEXT_GETDEVICECONFIG;
|
ctxReq.which = HWCEXT_GETDEVICECONFIG;
|
||||||
ctxReq.optData.deviceConfigReq.dc = hdc;
|
ctxReq.optData.deviceConfigReq.dc = hdc;
|
||||||
ctxReq.optData.deviceConfigReq.devNo = boardNum;
|
ctxReq.optData.deviceConfigReq.devNo = boardNum;
|
||||||
@@ -1870,19 +1821,14 @@ hwcInit(FxU32 vID, FxU32 dID)
|
|||||||
ctxRes.optData.deviceConfigRes.isMaster;
|
ctxRes.optData.deviceConfigRes.isMaster;
|
||||||
hInfo.boardInfo[monitor].pciInfo.numChips =
|
hInfo.boardInfo[monitor].pciInfo.numChips =
|
||||||
ctxRes.optData.deviceConfigRes.numChips;
|
ctxRes.optData.deviceConfigRes.numChips;
|
||||||
if /*(*/(hInfo.boardInfo[monitor].pciInfo.numChips > 4)/* ||
|
if ((hInfo.boardInfo[monitor].pciInfo.numChips > 4) ||
|
||||||
(hInfo.boardInfo[monitor].pciInfo.numChips < 0))*//* KoolSmoky */ {
|
(hInfo.boardInfo[monitor].pciInfo.numChips < 0))
|
||||||
hInfo.boardInfo[monitor].pciInfo.numChips = 0;
|
hInfo.boardInfo[monitor].pciInfo.numChips = 0;
|
||||||
} //else {
|
/* Napalm framebuffer is unified, where the framebuffer
|
||||||
/* KoolSmoky - Napalm framebuffer is unified, where the framebuffer
|
|
||||||
** bound to each chip is effectively divided by SLI mode.
|
** bound to each chip is effectively divided by SLI mode.
|
||||||
** (framebuffer of one chip) = (total framebuffer / SLI mode)
|
** (framebuffer of one chip) = (total framebuffer / SLI mode)
|
||||||
** 2 chip device can have 1-way-SLI or 2-way-SLI
|
|
||||||
** h3Mem is the amount of video ram dedicated for one chip.
|
** h3Mem is the amount of video ram dedicated for one chip.
|
||||||
hInfo.boardInfo[monitor].h3Mem =
|
|
||||||
(ctxRes.optData.deviceConfigRes.fbRam >> 20);
|
|
||||||
*/
|
*/
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
#endif /* FX_GLIDE_NAPALM */
|
#endif /* FX_GLIDE_NAPALM */
|
||||||
|
|
||||||
@@ -1936,9 +1882,6 @@ hwcInit(FxU32 vID, FxU32 dID)
|
|||||||
(FxU32) sizeof(resolutionSupported[0][0]) / sizeof(FxBool),
|
(FxU32) sizeof(resolutionSupported[0][0]) / sizeof(FxBool),
|
||||||
(void *) hInfo.boardInfo[monitor].hMon);
|
(void *) hInfo.boardInfo[monitor].hMon);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Colourless - CPUInfo */
|
|
||||||
hInfo.boardInfo[monitor].CPUInfo = CPUInfo;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#elif defined(HWC_GDX_INIT)
|
#elif defined(HWC_GDX_INIT)
|
||||||
@@ -2153,6 +2096,7 @@ hwcInit(FxU32 vID, FxU32 dID)
|
|||||||
|
|
||||||
}
|
}
|
||||||
#endif /* HWC_EXT_INIT */
|
#endif /* HWC_EXT_INIT */
|
||||||
|
|
||||||
if (hInfo.nBoards)
|
if (hInfo.nBoards)
|
||||||
return &hInfo;
|
return &hInfo;
|
||||||
else
|
else
|
||||||
@@ -4503,6 +4447,7 @@ hwcInitVideo(hwcBoardInfo *bInfo, FxBool tiled, FxVideoTimingInfo *vidTiming,
|
|||||||
#ifdef HWC_EXT_INIT
|
#ifdef HWC_EXT_INIT
|
||||||
hwcExtRequest_t ctxReq;
|
hwcExtRequest_t ctxReq;
|
||||||
hwcExtResult_t ctxRes;
|
hwcExtResult_t ctxRes;
|
||||||
|
FxI32 OS = hwcGetOS();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -5045,7 +4990,9 @@ hwcInitVideo(hwcBoardInfo *bInfo, FxBool tiled, FxVideoTimingInfo *vidTiming,
|
|||||||
|
|
||||||
GDBG_INFO(80, FN_NAME ": HWC_MINIVDD_HACK\n");
|
GDBG_INFO(80, FN_NAME ": HWC_MINIVDD_HACK\n");
|
||||||
|
|
||||||
if (bInfo->osNT)
|
if ((OS == OS_WIN32_NT4) ||
|
||||||
|
(OS == OS_WIN32_2K) ||
|
||||||
|
(OS == OS_WIN32_XP))
|
||||||
{
|
{
|
||||||
FxU32 retVal = FXTRUE;
|
FxU32 retVal = FXTRUE;
|
||||||
ctxReq.which = HWCEXT_SLI_AA_REQUEST ;
|
ctxReq.which = HWCEXT_SLI_AA_REQUEST ;
|
||||||
@@ -5703,6 +5650,11 @@ FxBool
|
|||||||
hwcRestoreVideo(hwcBoardInfo *bInfo)
|
hwcRestoreVideo(hwcBoardInfo *bInfo)
|
||||||
{
|
{
|
||||||
#define FN_NAME "hwcRestoreVideo"
|
#define FN_NAME "hwcRestoreVideo"
|
||||||
|
|
||||||
|
#ifdef HWC_EXT_INIT
|
||||||
|
FxI32 OS = hwcGetOS();
|
||||||
|
#endif
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
hwcIdleHardwareWithTimeout(bInfo);
|
hwcIdleHardwareWithTimeout(bInfo);
|
||||||
|
|
||||||
@@ -5727,7 +5679,9 @@ hwcRestoreVideo(hwcBoardInfo *bInfo)
|
|||||||
|
|
||||||
GDBG_INFO(80, FN_NAME ": HWC_MINIVDD_HACK\n");
|
GDBG_INFO(80, FN_NAME ": HWC_MINIVDD_HACK\n");
|
||||||
|
|
||||||
if (bInfo->osNT)
|
if ((OS == OS_WIN32_NT4) ||
|
||||||
|
(OS == OS_WIN32_2K) ||
|
||||||
|
(OS == OS_WIN32_XP))
|
||||||
{
|
{
|
||||||
hwcExtRequest_t ctxReq ;
|
hwcExtRequest_t ctxReq ;
|
||||||
hwcExtResult_t ctxRes ;
|
hwcExtResult_t ctxRes ;
|
||||||
@@ -6542,7 +6496,7 @@ static void hwcReadRegion565(hwcBoardInfo *bInfo, FxU32 src, FxU32 src_x, FxU32
|
|||||||
|
|
||||||
stride_diff = strideInBytes - (src_width*2);
|
stride_diff = strideInBytes - (src_width*2);
|
||||||
|
|
||||||
if (bInfo->CPUInfo.os_support & _CPU_FEATURE_MMX)
|
if (CPUInfo && (CPUInfo->os_support & _CPU_FEATURE_MMX))
|
||||||
{
|
{
|
||||||
/* MMX Optimized Loop */
|
/* MMX Optimized Loop */
|
||||||
#ifdef __DJGPP__
|
#ifdef __DJGPP__
|
||||||
@@ -6698,7 +6652,7 @@ static void hwcReadRegion1555(hwcBoardInfo *bInfo, FxU32 src, FxU32 src_x, FxU32
|
|||||||
|
|
||||||
stride_diff = strideInBytes - (src_width*2);
|
stride_diff = strideInBytes - (src_width*2);
|
||||||
|
|
||||||
if (bInfo->CPUInfo.os_support & _CPU_FEATURE_MMX)
|
if (CPUInfo && (CPUInfo->os_support & _CPU_FEATURE_MMX))
|
||||||
{
|
{
|
||||||
/* MMX Optimized Loop */
|
/* MMX Optimized Loop */
|
||||||
#ifdef __DJGPP__
|
#ifdef __DJGPP__
|
||||||
@@ -6854,7 +6808,7 @@ static void hwcReadRegion8888(hwcBoardInfo *bInfo, FxU32 src, FxU32 src_x, FxU32
|
|||||||
|
|
||||||
stride_diff = strideInBytes - (src_width*4);
|
stride_diff = strideInBytes - (src_width*4);
|
||||||
|
|
||||||
if (bInfo->CPUInfo.os_support & _CPU_FEATURE_MMX)
|
if (CPUInfo && (CPUInfo->os_support & _CPU_FEATURE_MMX))
|
||||||
{
|
{
|
||||||
/* MMX Optimized Loop */
|
/* MMX Optimized Loop */
|
||||||
#ifdef __DJGPP__
|
#ifdef __DJGPP__
|
||||||
@@ -7188,7 +7142,7 @@ static void hwcCopyBuffer8888Flipped(hwcBoardInfo *bInfo, FxU16 *source, int w,
|
|||||||
FxU8 *endline = dst+w*4;
|
FxU8 *endline = dst+w*4;
|
||||||
w*= 4;
|
w*= 4;
|
||||||
|
|
||||||
if (bInfo->CPUInfo.os_support & _CPU_FEATURE_MMX)
|
if (CPUInfo && (CPUInfo->os_support & _CPU_FEATURE_MMX))
|
||||||
{
|
{
|
||||||
/* MMX Optimized Loop */
|
/* MMX Optimized Loop */
|
||||||
#ifdef __DJGPP__
|
#ifdef __DJGPP__
|
||||||
@@ -7323,7 +7277,7 @@ static void hwcCopyBuffer8888FlippedShifted(hwcBoardInfo *bInfo, FxU16 *source,
|
|||||||
FxU8 *endline = dst+w*4;
|
FxU8 *endline = dst+w*4;
|
||||||
w *= 4;
|
w *= 4;
|
||||||
|
|
||||||
if (bInfo->CPUInfo.os_support & _CPU_FEATURE_MMX)
|
if (CPUInfo && (CPUInfo->os_support & _CPU_FEATURE_MMX))
|
||||||
{
|
{
|
||||||
/* MMX Optimized Loop */
|
/* MMX Optimized Loop */
|
||||||
#ifdef __DJGPP__
|
#ifdef __DJGPP__
|
||||||
@@ -7471,9 +7425,9 @@ static void hwcCopyBuffer8888FlippedDithered(hwcBoardInfo *bInfo, FxU16 *source,
|
|||||||
val_max = (0xFF << aaShift);
|
val_max = (0xFF << aaShift);
|
||||||
dither_mask = ~((~0) << aaShift);
|
dither_mask = ~((~0) << aaShift);
|
||||||
|
|
||||||
if (bInfo->CPUInfo.os_support & _CPU_FEATURE_MMX)
|
if (CPUInfo && (CPUInfo->os_support & _CPU_FEATURE_MMX))
|
||||||
{
|
{
|
||||||
FxU32 sse_mmxplus = bInfo->CPUInfo.os_support & (_CPU_FEATURE_MMXPLUS|_CPU_FEATURE_SSE);
|
FxU32 sse_mmxplus = CPUInfo->os_support & (_CPU_FEATURE_MMXPLUS|_CPU_FEATURE_SSE);
|
||||||
|
|
||||||
/* MMX Optimized Loop */
|
/* MMX Optimized Loop */
|
||||||
#ifdef __DJGPP__
|
#ifdef __DJGPP__
|
||||||
@@ -8074,7 +8028,7 @@ static void hwcCopyBuffer565Shifted(hwcBoardInfo *bInfo, FxU16 *src, int w, int
|
|||||||
rshift = 8 - aaShift;
|
rshift = 8 - aaShift;
|
||||||
|
|
||||||
|
|
||||||
if (bInfo->CPUInfo.os_support & _CPU_FEATURE_MMX)
|
if (CPUInfo && (CPUInfo->os_support & _CPU_FEATURE_MMX))
|
||||||
{
|
{
|
||||||
/* MMX Optimized Loop */
|
/* MMX Optimized Loop */
|
||||||
#ifdef __DJGPP__
|
#ifdef __DJGPP__
|
||||||
@@ -8989,11 +8943,12 @@ static char *
|
|||||||
getRegPath()
|
getRegPath()
|
||||||
{
|
{
|
||||||
char *retVal = NULL;
|
char *retVal = NULL;
|
||||||
OSVERSIONINFO ovi;
|
FxI32 OS = hwcGetOS();
|
||||||
|
|
||||||
ovi.dwOSVersionInfoSize = sizeof ( ovi );
|
if ((OS == OS_WIN32_NT4) ||
|
||||||
GetVersionEx ( &ovi );
|
(OS == OS_WIN32_2K) ||
|
||||||
if (ovi.dwPlatformId == VER_PLATFORM_WIN32_NT) {
|
(OS == OS_WIN32_XP))
|
||||||
|
{
|
||||||
HKEY hKey;
|
HKEY hKey;
|
||||||
DWORD type ;
|
DWORD type ;
|
||||||
static char strval[255];
|
static char strval[255];
|
||||||
@@ -9324,6 +9279,7 @@ hwcShareContextData(hwcBoardInfo *bInfo, FxU32 **data)
|
|||||||
#if HWC_EXT_INIT
|
#if HWC_EXT_INIT
|
||||||
hwcExtRequest_t ctxReq;
|
hwcExtRequest_t ctxReq;
|
||||||
hwcExtResult_t ctxRes;
|
hwcExtResult_t ctxRes;
|
||||||
|
FxI32 OS = hwcGetOS();
|
||||||
|
|
||||||
GDBG_INFO(80, FN_NAME "\n");
|
GDBG_INFO(80, FN_NAME "\n");
|
||||||
|
|
||||||
@@ -9331,7 +9287,10 @@ hwcShareContextData(hwcBoardInfo *bInfo, FxU32 **data)
|
|||||||
|
|
||||||
if( HWCEXT_PROTOCOL( bInfo->boardNum ) )
|
if( HWCEXT_PROTOCOL( bInfo->boardNum ) )
|
||||||
{
|
{
|
||||||
if (bInfo->osNT) {
|
if ((OS == OS_WIN32_NT4) ||
|
||||||
|
(OS == OS_WIN32_2K) ||
|
||||||
|
(OS == OS_WIN32_XP))
|
||||||
|
{
|
||||||
hwcExtRequest_t
|
hwcExtRequest_t
|
||||||
ctxReq;
|
ctxReq;
|
||||||
hwcExtResult_t
|
hwcExtResult_t
|
||||||
@@ -9394,7 +9353,9 @@ hwcShareContextData(hwcBoardInfo *bInfo, FxU32 **data)
|
|||||||
* check the retVal and the pointer. This also screws with ALT-TAB.
|
* check the retVal and the pointer. This also screws with ALT-TAB.
|
||||||
*/
|
*/
|
||||||
GDBG_INFO(80, FN_NAME ": ExtEscape retVal=%d, dwordOffset=%d, contextDWORD=%d\n", retVal, ctxRes.optData.contextDwordNTRes.dwordOffset, ctxRes.optData.shareContextDWORDRes.contextDWORD);
|
GDBG_INFO(80, FN_NAME ": ExtEscape retVal=%d, dwordOffset=%d, contextDWORD=%d\n", retVal, ctxRes.optData.contextDwordNTRes.dwordOffset, ctxRes.optData.shareContextDWORDRes.contextDWORD);
|
||||||
if( (retVal <= 0) || (ctxRes.optData.contextDwordNTRes.dwordOffset == 0) || (bInfo->osNT51)) { /* make exceptions for winxp escapecalls */
|
if( (retVal <= 0) ||
|
||||||
|
(ctxRes.optData.contextDwordNTRes.dwordOffset == 0) ||
|
||||||
|
(OS == OS_WIN32_XP)) { /* make exceptions for winxp escapecalls */
|
||||||
#if (WINXP_ALT_TAB_FIX || WINXP_FASTER_ALT_TAB_FIX)
|
#if (WINXP_ALT_TAB_FIX || WINXP_FASTER_ALT_TAB_FIX)
|
||||||
cLostPointer =
|
cLostPointer =
|
||||||
#endif
|
#endif
|
||||||
@@ -9494,9 +9455,13 @@ hwcUnmapMemory()
|
|||||||
FxU32 i;
|
FxU32 i;
|
||||||
hwcExtRequest_t ctxReq;
|
hwcExtRequest_t ctxReq;
|
||||||
hwcExtResult_t ctxRes;
|
hwcExtResult_t ctxRes;
|
||||||
|
FxI32 OS = hwcGetOS();
|
||||||
|
|
||||||
if ( curBI ) {
|
if ( curBI ) {
|
||||||
if ( curBI->osNT ) {
|
if ((OS == OS_WIN32_NT4) ||
|
||||||
|
(OS == OS_WIN32_2K) ||
|
||||||
|
(OS == OS_WIN32_XP))
|
||||||
|
{
|
||||||
hwcExtRequest_t
|
hwcExtRequest_t
|
||||||
ctxReq;
|
ctxReq;
|
||||||
hwcExtResult_t
|
hwcExtResult_t
|
||||||
@@ -9508,7 +9473,7 @@ hwcUnmapMemory()
|
|||||||
*/
|
*/
|
||||||
ctxReq.optData.unmapMemoryReq.procHandle = (ULONG)GetCurrentProcessId();
|
ctxReq.optData.unmapMemoryReq.procHandle = (ULONG)GetCurrentProcessId();
|
||||||
|
|
||||||
ExtEscape((HDC)curBI->hdc, HWCEXT_ESCAPE(curBI->boardNum),
|
ExtEscape((HDC)curBI->hdc, HWCEXT_ESCAPE(curBI->boardNum),
|
||||||
sizeof(ctxReq), (LPSTR) &ctxReq,
|
sizeof(ctxReq), (LPSTR) &ctxReq,
|
||||||
sizeof(ctxRes), (LPSTR) &ctxRes);
|
sizeof(ctxRes), (LPSTR) &ctxRes);
|
||||||
curBI->isMapped = FXFALSE;
|
curBI->isMapped = FXFALSE;
|
||||||
@@ -10016,3 +9981,72 @@ static FxI32 valarray[SST_SIPROCESS_OSC_CNTR + 1]; // is this how you do an
|
|||||||
HWC_IO_STORE(bInfo->regInfo, pllCtrl1, pllCtrl1_save);
|
HWC_IO_STORE(bInfo->regInfo, pllCtrl1, pllCtrl1_save);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
hwcSetCPUInfo(_p_info *CPUInfo_)
|
||||||
|
{
|
||||||
|
CPUInfo = CPUInfo_;
|
||||||
|
} /* hwcSetCPUInfo */
|
||||||
|
|
||||||
|
#ifdef __WIN32__
|
||||||
|
FxI32
|
||||||
|
hwcGetOS()
|
||||||
|
{
|
||||||
|
static FxI32 OS = -1;
|
||||||
|
OSVERSIONINFO ovi;
|
||||||
|
|
||||||
|
if ( OS != -1 ) return OS;
|
||||||
|
|
||||||
|
ovi.dwOSVersionInfoSize = sizeof ( ovi );
|
||||||
|
GetVersionEx ( &ovi );
|
||||||
|
|
||||||
|
if (ovi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) {
|
||||||
|
if(ovi.dwMajorVersion == 4) {
|
||||||
|
if (ovi.dwMinorVersion >= 90) {
|
||||||
|
OS = OS_WIN32_ME;
|
||||||
|
} else if (ovi.dwMinorVersion >= 10) {
|
||||||
|
OS = OS_WIN32_98;
|
||||||
|
} else {
|
||||||
|
OS = OS_WIN32_95;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (ovi.dwPlatformId == VER_PLATFORM_WIN32_NT) {
|
||||||
|
if(ovi.dwMajorVersion == 4) {
|
||||||
|
OS = OS_WIN32_NT4;
|
||||||
|
} else if(ovi.dwMajorVersion >= 5) {
|
||||||
|
if (ovi.dwMinorVersion >= 1) {
|
||||||
|
OS = OS_WIN32_XP;
|
||||||
|
} else {
|
||||||
|
OS = OS_WIN32_2K;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(OS) {
|
||||||
|
case OS_WIN32_95:
|
||||||
|
GDBG_INFO(0, "hwcGetOS: OS = win95\n");
|
||||||
|
break;
|
||||||
|
case OS_WIN32_98:
|
||||||
|
GDBG_INFO(0, "hwcGetOS: OS = win98\n");
|
||||||
|
break;
|
||||||
|
case OS_WIN32_ME:
|
||||||
|
GDBG_INFO(0, "hwcGetOS: OS = winme\n");
|
||||||
|
break;
|
||||||
|
case OS_WIN32_NT4:
|
||||||
|
GDBG_INFO(0, "hwcGetOS: OS = winnt4.0\n");
|
||||||
|
break;
|
||||||
|
case OS_WIN32_2K:
|
||||||
|
GDBG_INFO(0, "hwcGetOS: OS = win2k\n");
|
||||||
|
break;
|
||||||
|
case OS_WIN32_XP:
|
||||||
|
GDBG_INFO(0, "hwcGetOS: OS = winxp\n");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
GDBG_INFO(0, "hwcGetOS: OS = unknown\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return OS;
|
||||||
|
#undef FN_NAME
|
||||||
|
} /* hwcGetOS */
|
||||||
|
#endif /* __WIN32__ */
|
||||||
@@ -501,8 +501,6 @@ typedef struct hwcBoardInfo_s {
|
|||||||
agpInfo;
|
agpInfo;
|
||||||
FxU32
|
FxU32
|
||||||
lostContextDWORD;
|
lostContextDWORD;
|
||||||
FxBool
|
|
||||||
osNT;
|
|
||||||
FxBool
|
FxBool
|
||||||
isMapped;
|
isMapped;
|
||||||
FxU32
|
FxU32
|
||||||
@@ -512,10 +510,8 @@ typedef struct hwcBoardInfo_s {
|
|||||||
FxI32 hwcProtocol;
|
FxI32 hwcProtocol;
|
||||||
FxU32 devNode ; /* AJB- DevNode from display driver for minivdd ioctls */
|
FxU32 devNode ; /* AJB- DevNode from display driver for minivdd ioctls */
|
||||||
FxI16/*FxI32*/ hwcEscape ; /* AJB- sucky: H5 TOT uses a diff't escape code than H3 */ /* KoolSmoky - new escape code for winxp *//* revert back to previous for now */
|
FxI16/*FxI32*/ hwcEscape ; /* AJB- sucky: H5 TOT uses a diff't escape code than H3 */ /* KoolSmoky - new escape code for winxp *//* revert back to previous for now */
|
||||||
FxBool osNT51; /* KoolSmoky- WinXP flag */
|
|
||||||
char RegPath[255]; /* KoolSmoky - Device registry path */
|
char RegPath[255]; /* KoolSmoky - Device registry path */
|
||||||
char DeviceName[32]; /* KoolSmoky - Device Name */
|
char DeviceName[32]; /* KoolSmoky - Device Name */
|
||||||
_p_info CPUInfo; /* Colourless - CPU info */
|
|
||||||
} hwcBoardInfo;
|
} hwcBoardInfo;
|
||||||
|
|
||||||
|
|
||||||
@@ -625,6 +621,15 @@ hwcCheckMemSize(hwcBoardInfo *bInfo, FxU32 xres, FxU32 yres, FxU32 nColBuffers,
|
|||||||
|
|
||||||
#ifdef __WIN32__
|
#ifdef __WIN32__
|
||||||
|
|
||||||
|
#define OS_WIN32_95 0
|
||||||
|
#define OS_WIN32_98 1
|
||||||
|
#define OS_WIN32_ME 2
|
||||||
|
#define OS_WIN32_NT4 3
|
||||||
|
#define OS_WIN32_2K 4
|
||||||
|
#define OS_WIN32_XP 5
|
||||||
|
FxI32
|
||||||
|
hwcGetOS();
|
||||||
|
|
||||||
FxU32
|
FxU32
|
||||||
hwcAllocWinContext(hwcBoardInfo* bInfo);
|
hwcAllocWinContext(hwcBoardInfo* bInfo);
|
||||||
|
|
||||||
@@ -769,3 +774,6 @@ extern void hwcAAReadRegion(hwcBoardInfo *bInfo, FxU32 colBufNum,
|
|||||||
void hwcCalcSipValue(hwcBoardInfo *bInfo, FxU32 chipNum, FxU32 *nandChain, FxU32 *norChain);
|
void hwcCalcSipValue(hwcBoardInfo *bInfo, FxU32 chipNum, FxU32 *nandChain, FxU32 *norChain);
|
||||||
|
|
||||||
#endif /* MINIHWC_H not defined */
|
#endif /* MINIHWC_H not defined */
|
||||||
|
|
||||||
|
void
|
||||||
|
hwcSetCPUInfo(_p_info *CPUInfo_);
|
||||||
|
|||||||
@@ -56,6 +56,7 @@
|
|||||||
#include <sst1vid.h>
|
#include <sst1vid.h>
|
||||||
#include "qmodes.h"
|
#include "qmodes.h"
|
||||||
#include "setmode.h"
|
#include "setmode.h"
|
||||||
|
#include "minihwc.h"
|
||||||
#define IS_32
|
#define IS_32
|
||||||
#define Not_VxD
|
#define Not_VxD
|
||||||
#include <minivdd.h>
|
#include <minivdd.h>
|
||||||
@@ -238,23 +239,17 @@ static char *
|
|||||||
getModesRegPath()
|
getModesRegPath()
|
||||||
{
|
{
|
||||||
char *retVal = NULL;
|
char *retVal = NULL;
|
||||||
OSVERSIONINFO ovi;
|
FxU32 OS = hwcGetOS();
|
||||||
|
|
||||||
ovi.dwOSVersionInfoSize = sizeof ( ovi );
|
if ((OS == OS_WIN32_NT4) ||
|
||||||
GetVersionEx ( &ovi );
|
(OS == OS_WIN32_2K) ||
|
||||||
if (ovi.dwPlatformId == VER_PLATFORM_WIN32_NT) {
|
(OS == OS_WIN32_XP))
|
||||||
|
{
|
||||||
HKEY hKey;
|
HKEY hKey;
|
||||||
DWORD type ;
|
DWORD type ;
|
||||||
static char strval[255];
|
static char strval[255];
|
||||||
DWORD szData = sizeof(strval) ;
|
DWORD szData = sizeof(strval) ;
|
||||||
|
|
||||||
/* GDBG_INFO(80, "OS == WNT\n"); */
|
|
||||||
if ( ovi.dwMajorVersion >= 5 && ovi.dwMinorVersion >= 1) {
|
|
||||||
GDBG_INFO(80, "REGPATH: OS == NT5.1\n");
|
|
||||||
} else {
|
|
||||||
GDBG_INFO(80, "REGPATH: OS == NT4\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Go fishing for the registry path on Win2K */
|
/* Go fishing for the registry path on Win2K */
|
||||||
if (RegOpenKey(HKEY_LOCAL_MACHINE, "HARDWARE\\DEVICEMAP\\VIDEO", &hKey) == ERROR_SUCCESS)
|
if (RegOpenKey(HKEY_LOCAL_MACHINE, "HARDWARE\\DEVICEMAP\\VIDEO", &hKey) == ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
@@ -327,7 +322,7 @@ setVideoMode( HWND hwnd, int xRes, int yRes, int h3pixelSize, int refresh, void
|
|||||||
//HRESULT ddRVal;
|
//HRESULT ddRVal;
|
||||||
//DWORD style;
|
//DWORD style;
|
||||||
#ifdef IS_ALT_TAB
|
#ifdef IS_ALT_TAB
|
||||||
OSVERSIONINFO ovi;
|
FxU32 OS = hwcGetOS();
|
||||||
|
|
||||||
/* reset fullscreen flag */
|
/* reset fullscreen flag */
|
||||||
is_fullscreen = FXFALSE;
|
is_fullscreen = FXFALSE;
|
||||||
@@ -445,12 +440,6 @@ setVideoMode( HWND hwnd, int xRes, int yRes, int h3pixelSize, int refresh, void
|
|||||||
|
|
||||||
|
|
||||||
// checkSpecialList();
|
// checkSpecialList();
|
||||||
|
|
||||||
#ifdef IS_ALT_TAB
|
|
||||||
/* get os version */
|
|
||||||
ovi.dwOSVersionInfoSize = sizeof ( ovi );
|
|
||||||
GetVersionEx ( &ovi );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (lpDD == NULL) {
|
if (lpDD == NULL) {
|
||||||
/* only create directdraw object once */
|
/* only create directdraw object once */
|
||||||
@@ -542,8 +531,8 @@ setVideoMode( HWND hwnd, int xRes, int yRes, int h3pixelSize, int refresh, void
|
|||||||
devMode.dmBitsPerPel = bpp;
|
devMode.dmBitsPerPel = bpp;
|
||||||
devMode.dmDisplayFrequency = refresh;
|
devMode.dmDisplayFrequency = refresh;
|
||||||
|
|
||||||
if(((ovi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) && (ovi.dwMinorVersion < 10)) ||
|
if ((OS == OS_WIN32_95) ||
|
||||||
((ovi.dwPlatformId == VER_PLATFORM_WIN32_NT) && (ovi.dwMajorVersion < 5)))
|
(OS == OS_WIN32_NT4))
|
||||||
{
|
{
|
||||||
// win95,nt4
|
// win95,nt4
|
||||||
if(ChangeDisplaySettings(&devMode, CDS_FULLSCREEN) == DISP_CHANGE_SUCCESSFUL)
|
if(ChangeDisplaySettings(&devMode, CDS_FULLSCREEN) == DISP_CHANGE_SUCCESSFUL)
|
||||||
@@ -800,7 +789,7 @@ resetVideo( void )
|
|||||||
#define FN_NAME "resetVideo"
|
#define FN_NAME "resetVideo"
|
||||||
|
|
||||||
#ifdef IS_ALT_TAB
|
#ifdef IS_ALT_TAB
|
||||||
OSVERSIONINFO ovi;
|
FxU32 OS = hwcGetOS();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
GDBG_INFO(80, "%s: called!\n", FN_NAME);
|
GDBG_INFO(80, "%s: called!\n", FN_NAME);
|
||||||
@@ -840,13 +829,9 @@ resetVideo( void )
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef IS_ALT_TAB
|
#ifdef IS_ALT_TAB
|
||||||
/* get os version */
|
|
||||||
ovi.dwOSVersionInfoSize = sizeof ( ovi );
|
|
||||||
GetVersionEx ( &ovi );
|
|
||||||
|
|
||||||
//ChangeDisplaySettings(NULL, 0);
|
//ChangeDisplaySettings(NULL, 0);
|
||||||
if(((ovi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) && (ovi.dwMinorVersion < 10)) ||
|
if ((OS == OS_WIN32_95) ||
|
||||||
((ovi.dwPlatformId == VER_PLATFORM_WIN32_NT) && (ovi.dwMajorVersion < 5)))
|
(OS == OS_WIN32_NT4))
|
||||||
{
|
{
|
||||||
// win95,nt4
|
// win95,nt4
|
||||||
/* KoolSmoky - ripped from quake3 */
|
/* KoolSmoky - ripped from quake3 */
|
||||||
@@ -952,14 +937,10 @@ checkResolutions( FxBool *supportedByResolution, FxU32 stride, void *hmon, int h
|
|||||||
#define FN_NAME "checkResolution"
|
#define FN_NAME "checkResolution"
|
||||||
DEVMODE chkDevMode;
|
DEVMODE chkDevMode;
|
||||||
DWORD chkRes, chkRefresh;
|
DWORD chkRes, chkRefresh;
|
||||||
OSVERSIONINFO ovi;
|
FxU32 OS = hwcGetOS();
|
||||||
|
|
||||||
GDBG_INFO(80, "%s: called!\n", FN_NAME);
|
GDBG_INFO(80, "%s: called!\n", FN_NAME);
|
||||||
|
|
||||||
/* get os version */
|
|
||||||
ovi.dwOSVersionInfoSize = sizeof ( ovi );
|
|
||||||
GetVersionEx ( &ovi );
|
|
||||||
|
|
||||||
chkDevMode.dmSize = sizeof(DEVMODE);
|
chkDevMode.dmSize = sizeof(DEVMODE);
|
||||||
chkDevMode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY;
|
chkDevMode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY;
|
||||||
|
|
||||||
@@ -980,8 +961,8 @@ checkResolutions( FxBool *supportedByResolution, FxU32 stride, void *hmon, int h
|
|||||||
chkDevMode.dmDisplayFrequency = refresh[chkRefresh];
|
chkDevMode.dmDisplayFrequency = refresh[chkRefresh];
|
||||||
|
|
||||||
//ChangeDisplaySettings(NULL, 0);
|
//ChangeDisplaySettings(NULL, 0);
|
||||||
if(((ovi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) && (ovi.dwMinorVersion < 10)) ||
|
if ((OS == OS_WIN32_95) ||
|
||||||
((ovi.dwPlatformId == VER_PLATFORM_WIN32_NT) && (ovi.dwMajorVersion < 5)))
|
(OS == OS_WIN32_NT4))
|
||||||
{
|
{
|
||||||
// win95,nt4
|
// win95,nt4
|
||||||
if(ChangeDisplaySettings(&chkDevMode, CDS_TEST) == DISP_CHANGE_SUCCESSFUL)
|
if(ChangeDisplaySettings(&chkDevMode, CDS_TEST) == DISP_CHANGE_SUCCESSFUL)
|
||||||
|
|||||||
Reference in New Issue
Block a user