DOS/OpenWatcom woes
This commit is contained in:
@@ -107,7 +107,10 @@ h5: Voodoo Banshee, Velocity 100/200, Voodoo3/4/5
|
||||
Req: DJGPP 2.04 (gcc 3.3.3, make 3.80)
|
||||
Build: make -f Makefile.DJ FX_GLIDE_HW=h5 [...]
|
||||
|
||||
DOS/OpenWatcom N/A
|
||||
DOS/OpenWatcom working
|
||||
Req: OpenWatcom 1.2, GNU make 3.80
|
||||
Build: cd h5/glide3/src
|
||||
make -f Makefile.wat FX_GLIDE_HW=h5 [...]
|
||||
|
||||
Linux DRI working, DGA needs testing, CINIT broken
|
||||
Req: gcc
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
*
|
||||
* $Header$
|
||||
* $Log$
|
||||
* Revision 1.1.2.9 2003/08/04 12:45:47 dborca
|
||||
* Preparing for MinGW 2.0
|
||||
*
|
||||
* Revision 1.1.2.8 2003/07/29 10:04:32 dborca
|
||||
* Shamelessness.
|
||||
* Safeguard in CPUID.
|
||||
@@ -255,6 +258,8 @@ notamd:
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef __WATCOMC__
|
||||
/* stupid watcom does not sigill... */
|
||||
if (dwFeature & _MMX_FEATURE_BIT) {
|
||||
feature |= _CPU_FEATURE_MMX;
|
||||
os_support |= has_feature(_CPU_FEATURE_MMX);
|
||||
@@ -279,6 +284,7 @@ notamd:
|
||||
feature |= _CPU_FEATURE_SSE2;
|
||||
os_support |= has_feature(_CPU_FEATURE_SSE2);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (pinfo) {
|
||||
memset(pinfo, 0, sizeof(_p_info));
|
||||
|
||||
@@ -526,7 +526,11 @@
|
||||
#include <cpuid.h>
|
||||
|
||||
/* local */
|
||||
#ifdef __WATCOMC__
|
||||
#define GR_CDECL __cdecl
|
||||
#else
|
||||
#define GR_CDECL
|
||||
#endif
|
||||
#include "g3ext.h"
|
||||
#include "fxcmd.h"
|
||||
#include "gsfc.h"
|
||||
@@ -547,15 +551,15 @@
|
||||
#define WIN32_LEANER_AND_MEANER
|
||||
#include <windows.h>
|
||||
#else
|
||||
FxBool fxSplashInit (FxU32 hWnd,
|
||||
FxU32 screenWidth, FxU32 screenHeight,
|
||||
FxU32 numColBuf, FxU32 numAuxBuf,
|
||||
GrColorFormat_t colorFormat);
|
||||
void fxSplashShutdown (void);
|
||||
void fxSplash (float x, float y, float w, float h, FxU32 frameNumber);
|
||||
const void *fxSplashPlug (FxU32* w, FxU32* h,
|
||||
FxI32* strideInBytes,
|
||||
GrLfbWriteMode_t* format);
|
||||
FxBool FX_CALL fxSplashInit (FxU32 hWnd,
|
||||
FxU32 screenWidth, FxU32 screenHeight,
|
||||
FxU32 numColBuf, FxU32 numAuxBuf,
|
||||
GrColorFormat_t colorFormat);
|
||||
void FX_CALL fxSplashShutdown (void);
|
||||
void FX_CALL fxSplash (float x, float y, float w, float h, FxU32 frameNumber);
|
||||
const void * FX_CALL fxSplashPlug (FxU32* w, FxU32* h,
|
||||
FxI32* strideInBytes,
|
||||
GrLfbWriteMode_t* format);
|
||||
#endif /* (GLIDE_PLATFORM & GLIDE_OS_WIN32) */
|
||||
|
||||
/* -----------------------------------------------------------------------
|
||||
@@ -1374,7 +1378,7 @@ void FX_CSTYLE _grDrawVertexList_SSE_Clip(FxU32 pktype, FxU32 type, FxI32 mode,
|
||||
/* Define this structure otherwise it assumes the structure only exists
|
||||
within the function */
|
||||
struct GrGC_s;
|
||||
#endif /* (GLIDE_PLATFORM & GLIDE_OS_UNIX) || defined(__DJGPP__) */
|
||||
#endif /* __GNUC__ */
|
||||
|
||||
/* _GlideRoot.curTexProcs is an array of (possibly specialized)
|
||||
* function pointers indexed by texture format size (8/16 bits for
|
||||
@@ -2187,6 +2191,13 @@ extern GrGCFuncs _curGCFuncs;
|
||||
* This is the __linux__ code.
|
||||
*/
|
||||
#define P6FENCE asm("xchg %%eax, %0" : : "m" (_GlideRoot.p6Fencer) : "eax");
|
||||
#elif defined(__WATCOMC__)
|
||||
void
|
||||
p6Fence(void);
|
||||
#pragma aux p6Fence = \
|
||||
"xchg eax, dword ptr _GlideRoot" \
|
||||
modify [eax];
|
||||
#define P6FENCE p6Fence()
|
||||
#else /* !defined ( P6FENCE ) */
|
||||
# error "P6 Fencing code needs to be added for this compiler"
|
||||
#endif /* !defined ( P6FENCE ) */
|
||||
@@ -2349,11 +2360,23 @@ _trisetup_noclip_valid(const void *va, const void *vb, const void *vc );
|
||||
#define TRISETUP \
|
||||
__asm(""::"d"(gc)); \
|
||||
(*gc->triSetupProc)
|
||||
#else /* (GLIDE_PLATFORM & GLIDE_OS_UNIX) || defined(__DJGPP__) */
|
||||
#elif defined(__WATCOMC__)
|
||||
extern void wat_trisetup (void *gc, const void *a, const void *b, const void *c);
|
||||
#pragma aux wat_trisetup = \
|
||||
"push ecx" \
|
||||
"push ebx" \
|
||||
"push eax" \
|
||||
parm [edx] [eax] [ebx] [ecx];
|
||||
#define TRISETUP(_a, _b, _c) \
|
||||
do { \
|
||||
wat_trisetup(gc, _a, _b, _c); \
|
||||
((FxI32 (*)(void))*gc->triSetupProc)(); \
|
||||
} while (0)
|
||||
#else
|
||||
#define TRISETUP \
|
||||
(*gc->triSetupProc)
|
||||
#endif
|
||||
void
|
||||
void GR_CDECL
|
||||
_grValidateState();
|
||||
|
||||
void FX_CSTYLE
|
||||
@@ -2782,10 +2805,10 @@ extern FxU32 threadValueLinux;
|
||||
#define getThreadValueFast() threadValueLinux
|
||||
#endif /* defined(GLIDE_PLATFORM & GLIDE_OS_UNIX) */
|
||||
|
||||
#ifdef __DJGPP__
|
||||
extern FxU32 threadValueDJGPP;
|
||||
#if (GLIDE_PLATFORM & GLIDE_OS_DOS32)
|
||||
extern FxU32 GR_CDECL threadValueDJGPP;
|
||||
#define getThreadValueFast() threadValueDJGPP
|
||||
#endif /* defined(__DJGPP__) */
|
||||
#endif /* DOS32 */
|
||||
|
||||
#define CUR_TRI_PROC(__checkValidP, __cullP) \
|
||||
(*gc->archDispatchProcs.coorModeTriVector)[__checkValidP][__cullP]
|
||||
|
||||
@@ -188,7 +188,7 @@ static FxU16 *fxPlugData;
|
||||
|
||||
|
||||
|
||||
void fxSplashShutdown (void)
|
||||
void FX_CALL fxSplashShutdown (void)
|
||||
{
|
||||
#if GLIDE_PLUG
|
||||
if (fxPlugData != NULL) {
|
||||
@@ -200,10 +200,10 @@ void fxSplashShutdown (void)
|
||||
|
||||
|
||||
|
||||
FxBool fxSplashInit (FxU32 hWnd,
|
||||
FxU32 screenWidth, FxU32 screenHeight,
|
||||
FxU32 numColBuf, FxU32 numAuxBuf,
|
||||
GrColorFormat_t colorFormat)
|
||||
FxBool FX_CALL fxSplashInit (FxU32 hWnd,
|
||||
FxU32 screenWidth, FxU32 screenHeight,
|
||||
FxU32 numColBuf, FxU32 numAuxBuf,
|
||||
GrColorFormat_t colorFormat)
|
||||
{
|
||||
#if GLIDE_PLUG
|
||||
if (fxPlugData == NULL) {
|
||||
@@ -397,9 +397,9 @@ FxBool fxSplashInit (FxU32 hWnd,
|
||||
|
||||
|
||||
|
||||
const void *fxSplashPlug (FxU32* w, FxU32* h,
|
||||
FxI32* strideInBytes,
|
||||
GrLfbWriteMode_t* format)
|
||||
const void * FX_CALL fxSplashPlug (FxU32* w, FxU32* h,
|
||||
FxI32* strideInBytes,
|
||||
GrLfbWriteMode_t* format)
|
||||
{
|
||||
#if GLIDE_PLUG
|
||||
*w = fxPlugWidth;
|
||||
@@ -414,7 +414,7 @@ const void *fxSplashPlug (FxU32* w, FxU32* h,
|
||||
|
||||
|
||||
|
||||
void fxSplash (float x, float y, float w, float h, FxU32 frameNumber)
|
||||
void FX_CALL fxSplash (float x, float y, float w, float h, FxU32 frameNumber)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,12 @@
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
** Revision 1.7.4.18 2004/04/28 17:40:51 koolsmoky
|
||||
** Removed registry path from GETENV.
|
||||
** Removed FX_GLIDE_AA_PIXELCENTER, FX_GLIDE_AA_JITTERDISP, FX_GLIDE_AA_GRIDROTATION, and FX_GLIDE_FORCE_SST0.
|
||||
** Removed FX_GL_LFBLOCK_HACK and FX_GLIDE_USE_HWC_AA_FOR_LFB_READ.
|
||||
** Moved _grSstDetectResources into _GlideInitEnvironment so that it will not be called everytime _grGlideInit is called.
|
||||
**
|
||||
** Revision 1.7.4.17 2003/10/14 15:04:07 dborca
|
||||
** fixed minihwc; conditioned context checking; added Texus2 to Glide3
|
||||
**
|
||||
@@ -471,8 +477,8 @@
|
||||
movl %%eax, (%%edi) \n\
|
||||
.p2align 3,,7 \n\
|
||||
5:"::"g"(src), "g"(dst), "g"(width):"%eax", "%ecx", "%esi", "%edi")
|
||||
|
||||
#else
|
||||
|
||||
#elif defined(__MSC__)
|
||||
|
||||
#define MMX_RESET() __asm { emms }
|
||||
|
||||
@@ -646,6 +652,162 @@
|
||||
__asm align 8 \
|
||||
__asm finish_mmx_dstline4: \
|
||||
}
|
||||
|
||||
#elif defined(__WATCOMC__)
|
||||
|
||||
#define MMX_RESET() __asm { emms }
|
||||
|
||||
/* Desc: copy one row of pixels
|
||||
*
|
||||
* In : length = number of bytes (pixels*bytesperpixel). Must be even (which
|
||||
* holds true, because we don't support 8bit. Also the existing
|
||||
* code assumes this, so this won't be a problem.
|
||||
* src = source buffer
|
||||
* dst = destination buffer
|
||||
*
|
||||
* Note: Aligns src (LFB) before copying. Clobbers eax, ecx, esi, edi
|
||||
*/
|
||||
extern void MMX_SRCLINE(FxU32 *src, FxU32 *dst, FxI32 length);
|
||||
#pragma aux MMX_SRCLINE = \
|
||||
"cmp ecx, 8" \
|
||||
"jb small_move" \
|
||||
"test esi, 2" \
|
||||
"jz check4" \
|
||||
"mov ax, [esi]" \
|
||||
"add esi, 2" \
|
||||
"mov [edi], ax" \
|
||||
"add edi, 2" \
|
||||
"sub ecx, 2" \
|
||||
"check4:" \
|
||||
"test esi, 4" \
|
||||
"jz aligned8" \
|
||||
"mov eax, [esi]" \
|
||||
"add esi, 4" \
|
||||
"mov [edi], eax" \
|
||||
"add edi, 4" \
|
||||
"sub ecx, 4" \
|
||||
"aligned8:" \
|
||||
"mov eax, ecx" \
|
||||
"and ecx, 7" \
|
||||
"shr eax, 3" \
|
||||
"jz small_move" \
|
||||
"big_move:" \
|
||||
"movq mm0, [esi]" \
|
||||
"add esi, 8" \
|
||||
"movq [edi], mm0" \
|
||||
"add edi, 8" \
|
||||
"dec eax" \
|
||||
"jnz big_move" \
|
||||
"small_move:" \
|
||||
"test ecx, 4" \
|
||||
"jz check2" \
|
||||
"mov eax, [esi]" \
|
||||
"add esi, 4" \
|
||||
"mov [edi], eax" \
|
||||
"add edi, 4" \
|
||||
"check2:" \
|
||||
"test ecx, 2" \
|
||||
"jz finish" \
|
||||
"mov ax, [esi]" \
|
||||
"mov [edi], ax" \
|
||||
"finish:" \
|
||||
parm [esi] [edi] [ecx] \
|
||||
modify [eax ecx esi edi];
|
||||
|
||||
/* Desc: copy one row of 16bit pixels
|
||||
*
|
||||
* In : width = number of pixels
|
||||
* src = source buffer
|
||||
* dst = destination buffer
|
||||
*
|
||||
* Note: Aligns dst (LFB) before copying. Clobbers eax, ecx, esi, edi
|
||||
*/
|
||||
extern void MMX_DSTLINE2(FxU32 *src, FxU32 *dst, FxU32 width);
|
||||
#pragma aux MMX_DSTLINE2 = \
|
||||
"cmp ecx, 4" \
|
||||
"jb small_move_mmx_dstline2"\
|
||||
"test edi, 2" \
|
||||
"jz check4_mmx_dstline2"\
|
||||
"mov ax, [esi]" \
|
||||
"add esi, 2" \
|
||||
"mov [edi], ax" \
|
||||
"add edi, 2" \
|
||||
"dec ecx" \
|
||||
"check4_mmx_dstline2:" \
|
||||
"test edi, 4" \
|
||||
"jz aligned8_mmx_dstline2"\
|
||||
"mov eax, [esi]" \
|
||||
"add esi, 4" \
|
||||
"mov [edi], eax" \
|
||||
"add edi, 4" \
|
||||
"sub ecx, 2" \
|
||||
"aligned8_mmx_dstline2:" \
|
||||
"mov eax, ecx" \
|
||||
"and ecx, 3" \
|
||||
"shr eax, 2" \
|
||||
"jz small_move_mmx_dstline2"\
|
||||
"big_move_mmx_dstline2:" \
|
||||
"movq mm0, [esi]" \
|
||||
"add esi, 8" \
|
||||
"movq [edi], mm0" \
|
||||
"add edi, 8" \
|
||||
"dec eax" \
|
||||
"jnz big_move_mmx_dstline2"\
|
||||
"small_move_mmx_dstline2:" \
|
||||
"test ecx, 2" \
|
||||
"jz check2_mmx_dstline2"\
|
||||
"mov eax, [esi]" \
|
||||
"add esi, 4" \
|
||||
"mov [edi], eax" \
|
||||
"add edi, 4" \
|
||||
"check2_mmx_dstline2:" \
|
||||
"test ecx, 1" \
|
||||
"jz finish_mmx_dstline2"\
|
||||
"mov ax, [esi]" \
|
||||
"mov [edi], ax" \
|
||||
"finish_mmx_dstline2:" \
|
||||
parm [esi] [edi] [ecx] \
|
||||
modify [eax ecx esi edi];
|
||||
|
||||
/* Desc: copy one row of 32bit pixels
|
||||
*
|
||||
* In : width = number of pixels
|
||||
* src = source buffer
|
||||
* dst = destination buffer
|
||||
*
|
||||
* Note: Aligns dst (LFB) before copying. Clobbers eax, ecx, esi, edi
|
||||
*/
|
||||
extern void MMX_DSTLINE4(FxU32 *src, FxU32 *dst, FxU32 width);
|
||||
#pragma aux MMX_DSTLINE4 = \
|
||||
"cmp ecx, 2" \
|
||||
"jb small_move_mmx_dstline4"\
|
||||
"test edi, 4" \
|
||||
"jz aligned8_mmx_dstline4"\
|
||||
"mov eax, [esi]" \
|
||||
"add esi, 4" \
|
||||
"mov [edi], eax" \
|
||||
"add edi, 4" \
|
||||
"dec ecx" \
|
||||
"aligned8_mmx_dstline4:" \
|
||||
"mov eax, ecx" \
|
||||
"and ecx, 1" \
|
||||
"shr eax, 1" \
|
||||
"jz small_move_mmx_dstline4"\
|
||||
"big_move_mmx_dstline4:" \
|
||||
"movq mm0, [esi]" \
|
||||
"add esi, 8" \
|
||||
"movq [edi], mm0" \
|
||||
"add edi, 8" \
|
||||
"dec eax" \
|
||||
"jnz big_move_mmx_dstline4" \
|
||||
"small_move_mmx_dstline4:" \
|
||||
"test ecx, 1" \
|
||||
"jz finish_mmx_dstline4"\
|
||||
"mov eax, [esi]" \
|
||||
"mov [edi], eax" \
|
||||
"finish_mmx_dstline4:" \
|
||||
parm [esi] [edi] [ecx] \
|
||||
modify [eax ecx esi edi];
|
||||
|
||||
#endif
|
||||
|
||||
@@ -796,7 +958,7 @@
|
||||
.p2align 3,,7 \n\
|
||||
5:"::"g"(src), "g"(dst), "g"(width):"%eax", "%ecx", "%esi", "%edi")
|
||||
|
||||
#else
|
||||
#elif defined(__MSC__)
|
||||
|
||||
#define FPU_SRCLINE(src, dst, length) __asm {\
|
||||
__asm mov ecx, length \
|
||||
@@ -943,6 +1105,134 @@
|
||||
__asm finish_fpu_dstline4: \
|
||||
}
|
||||
|
||||
#elif defined(__WATCOMC__)
|
||||
|
||||
extern void FPU_SRCLINE(FxU32 *src, FxU32 *dst, FxI32 length);
|
||||
#pragma aux FPU_SRCLINE = \
|
||||
"cmp ecx, 8" \
|
||||
"jb small_move_fpu_srcline"\
|
||||
"test esi, 2" \
|
||||
"jz check4_fpu_srcline"\
|
||||
"mov ax, [esi]" \
|
||||
"add esi, 2" \
|
||||
"mov [edi], ax" \
|
||||
"add edi, 2" \
|
||||
"sub ecx, 2" \
|
||||
"check4_fpu_srcline:" \
|
||||
"test esi, 4" \
|
||||
"jz aligned8_fpu_srcline"\
|
||||
"mov eax, [esi]" \
|
||||
"add esi, 4" \
|
||||
"mov [edi], eax" \
|
||||
"add edi, 4" \
|
||||
"sub ecx, 4" \
|
||||
"aligned8_fpu_srcline:" \
|
||||
"mov eax, ecx" \
|
||||
"and ecx, 7" \
|
||||
"shr eax, 3" \
|
||||
"jz small_move_fpu_srcline"\
|
||||
"big_move_fpu_srcline:" \
|
||||
"fild qword ptr [esi]"\
|
||||
"add esi, 8" \
|
||||
"fistp qword ptr [edi]"\
|
||||
"add edi, 8" \
|
||||
"dec eax" \
|
||||
"jnz big_move_fpu_srcline"\
|
||||
"small_move_fpu_srcline:" \
|
||||
"test ecx, 4" \
|
||||
"jz check2_fpu_srcline"\
|
||||
"mov eax, [esi]" \
|
||||
"add esi, 4" \
|
||||
"mov [edi], eax" \
|
||||
"add edi, 4" \
|
||||
"check2_fpu_srcline:" \
|
||||
"test ecx, 2" \
|
||||
"jz finish_fpu_srcline"\
|
||||
"mov ax, [esi]" \
|
||||
"mov [edi], ax" \
|
||||
"finish_fpu_srcline:" \
|
||||
parm [esi] [edi] [ecx] \
|
||||
modify [eax ecx esi edi];
|
||||
|
||||
extern void FPU_DSTLINE2(FxU32 *src, FxU32 *dst, FxI32 length);
|
||||
#pragma aux FPU_DSTLINE2 = \
|
||||
"cmp ecx, 4" \
|
||||
"jb small_move_fpu_dstline2"\
|
||||
"test edi, 2" \
|
||||
"jz check4_fpu_dstline2" \
|
||||
"mov ax, [esi]" \
|
||||
"add esi, 2" \
|
||||
"mov [edi], ax" \
|
||||
"add edi, 2" \
|
||||
"dec ecx" \
|
||||
"check4_fpu_dstline2:" \
|
||||
"test edi, 4" \
|
||||
"jz aligned8_fpu_dstline2"\
|
||||
"mov eax, [esi]" \
|
||||
"add esi, 4" \
|
||||
"mov [edi], eax" \
|
||||
"add edi, 4" \
|
||||
"sub ecx, 2" \
|
||||
"aligned8_fpu_dstline2:" \
|
||||
"mov eax, ecx" \
|
||||
"and ecx, 3" \
|
||||
"shr eax, 2" \
|
||||
"jz small_move_fpu_dstline2"\
|
||||
"big_move_fpu_dstline2:" \
|
||||
"fild qword ptr [esi]"\
|
||||
"add esi, 8" \
|
||||
"fistp qword ptr [edi]"\
|
||||
"add edi, 8" \
|
||||
"dec eax" \
|
||||
"jnz big_move_fpu_dstline2"\
|
||||
"small_move_fpu_dstline2:" \
|
||||
"test ecx, 2" \
|
||||
"jz check2_fpu_dstline2"\
|
||||
"mov eax, [esi]" \
|
||||
"add esi, 4" \
|
||||
"mov [edi], eax" \
|
||||
"add edi, 4" \
|
||||
"check2_fpu_dstline2:" \
|
||||
"test ecx, 1" \
|
||||
"jz finish_fpu_dstline2"\
|
||||
"mov ax, [esi]" \
|
||||
"mov [edi], ax" \
|
||||
"finish_fpu_dstline2:" \
|
||||
parm [esi] [edi] [ecx] \
|
||||
modify [eax ecx esi edi];
|
||||
|
||||
extern void FPU_DSTLINE4(FxU32 *src, FxU32 *dst, FxI32 length);
|
||||
#pragma aux FPU_DSTLINE4 = \
|
||||
"cmp ecx, 2" \
|
||||
"jb small_move_fpu_dstline4"\
|
||||
"test edi, 4" \
|
||||
"jz aligned8_fpu_dstline4"\
|
||||
"mov eax, [esi]" \
|
||||
"add esi, 4" \
|
||||
"mov [edi], eax" \
|
||||
"add edi, 4" \
|
||||
"dec ecx" \
|
||||
"aligned8_fpu_dstline4:" \
|
||||
"mov eax, ecx" \
|
||||
"and ecx, 1" \
|
||||
"shr eax, 1" \
|
||||
"jz small_move_fpu_dstline4"\
|
||||
"big_move_fpu_dstline4:" \
|
||||
"fild qword ptr [esi]"\
|
||||
"add esi, 8" \
|
||||
"fistp qword ptr [edi]"\
|
||||
"add edi, 8" \
|
||||
"dec eax" \
|
||||
"jnz big_move_fpu_dstline4"\
|
||||
"small_move_fpu_dstline4:" \
|
||||
"test ecx, 1" \
|
||||
"jz finish_fpu_dstline4"\
|
||||
"mov eax, [esi]" \
|
||||
"mov [edi], eax" \
|
||||
"finish_fpu_dstline4:" \
|
||||
parm [esi] [edi] [ecx] \
|
||||
modify [eax ecx esi edi];
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -194,7 +194,11 @@ FxBool checkResolutions (FxBool *supportedByResolution, FxU32 stride, void *hmon
|
||||
}
|
||||
|
||||
|
||||
#ifdef __WATCOMC__
|
||||
#include "h3cini~1.h"
|
||||
#else
|
||||
#include "h3cinitdd.h"
|
||||
#endif
|
||||
|
||||
#define CFG_READ(_chip, _offset) \
|
||||
hwcReadConfigRegister(bInfo, _chip, offsetof(SstPCIConfigRegs, _offset))
|
||||
|
||||
@@ -8,7 +8,13 @@
|
||||
#include <unistd.h> /*usleep*/
|
||||
|
||||
#include "minihwc.h"
|
||||
#ifdef __WATCOMC__
|
||||
#include <i86.h>
|
||||
#include "h3cini~1.h"
|
||||
#define usleep(x) delay((x) / 1000)
|
||||
#else
|
||||
#include "h3cinitdd.h"
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -869,15 +869,17 @@ typedef struct sli_aa_request {
|
||||
} SLI_AA_REQUEST, * PSLI_AA_REQUEST;
|
||||
#endif
|
||||
|
||||
#if defined(__DJGPP__) || (GLIDE_PLATFORM & GLIDE_OS_UNIX)
|
||||
#if (GLIDE_PLATFORM & GLIDE_OS_DOS32) || (GLIDE_PLATFORM & GLIDE_OS_UNIX)
|
||||
#define _aligned_malloc(a, b) malloc(a)
|
||||
#define _aligned_free free
|
||||
/* don't like macros, because of side-effects */
|
||||
#ifndef __WATCOMC__
|
||||
static __inline int min (int x, int y)
|
||||
{
|
||||
return (x > y) ? y : x;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __GNUC__
|
||||
|
||||
@@ -957,6 +959,14 @@ static __inline int min (int x, int y)
|
||||
movl %%eax, %0 \n\
|
||||
movl %%edx, %1 \n\
|
||||
":"+a"(s), "+d"(dst):"D"(src_width), "g"(stride_diff));
|
||||
#elif defined(__WATCOMC__)
|
||||
|
||||
#define MMX_RESET()
|
||||
#define MMX_SETUP2(ar, gb, ar1m, gb1m, ar2m, gb2m)
|
||||
#define MMX_LOOP2(s, dst, src_width, stride_diff)
|
||||
#define MMX_SETUP4()
|
||||
#define MMX_LOOP4(s, dst, src_width, stride_diff)
|
||||
|
||||
#else
|
||||
|
||||
#define MMX_RESET() __asm { _asm emms }
|
||||
@@ -5415,7 +5425,7 @@ hwcInitVideo(hwcBoardInfo *bInfo, FxBool tiled, FxVideoTimingInfo *vidTiming,
|
||||
HWC_IO_STORE(bInfo->regInfo, pciInit0, pciInit0);
|
||||
}
|
||||
|
||||
#if defined(__DJGPP__) || (GLIDE_PLATFORM & GLIDE_OS_UNIX)
|
||||
#if (GLIDE_PLATFORM & GLIDE_OS_DOS32) || (GLIDE_PLATFORM & GLIDE_OS_UNIX)
|
||||
HWC_IO_STORE(bInfo->regInfo, vidProcCfg, vidProcCfg | SST_VIDEO_PROCESSOR_EN);
|
||||
#endif
|
||||
|
||||
@@ -6280,6 +6290,7 @@ static void hwcReadRegion565(hwcBoardInfo *bInfo, FxU32 src, FxU32 src_x, FxU32
|
||||
0x00001080, /* a=00000000 r=10000100 */
|
||||
0x10401080 /* g=10000010 b=10000100 */
|
||||
);
|
||||
#elif defined(__WATCOMC__)
|
||||
#else
|
||||
__asm {
|
||||
emms /* mmx */
|
||||
@@ -6315,6 +6326,7 @@ static void hwcReadRegion565(hwcBoardInfo *bInfo, FxU32 src, FxU32 src_x, FxU32
|
||||
/* This chip owns this scanline. */
|
||||
#ifdef __GNUC__
|
||||
MMX_LOOP2(s, dst, src_width, stride_diff);
|
||||
#elif defined(__WATCOMC__)
|
||||
#else
|
||||
__asm {
|
||||
|
||||
@@ -6436,6 +6448,7 @@ static void hwcReadRegion1555(hwcBoardInfo *bInfo, FxU32 src, FxU32 src_x, FxU32
|
||||
0x00001080, /* a=0000000000 r=1000010000 */
|
||||
0x10801080 /* g=1000010000 b=1000010000 */
|
||||
);
|
||||
#elif defined(__WATCOMC__)
|
||||
#else
|
||||
__asm {
|
||||
emms /* mmx */
|
||||
@@ -6471,6 +6484,7 @@ static void hwcReadRegion1555(hwcBoardInfo *bInfo, FxU32 src, FxU32 src_x, FxU32
|
||||
/* This chip owns this scanline. */
|
||||
#ifdef __GNUC__
|
||||
MMX_LOOP2(s, dst, src_width, stride_diff);
|
||||
#elif defined(__WATCOMC__)
|
||||
#else
|
||||
__asm {
|
||||
|
||||
@@ -6586,6 +6600,7 @@ static void hwcReadRegion8888(hwcBoardInfo *bInfo, FxU32 src, FxU32 src_x, FxU32
|
||||
/* MMX Optimized Loop */
|
||||
#ifdef __GNUC__
|
||||
MMX_SETUP4();
|
||||
#elif defined(__WATCOMC__)
|
||||
#else
|
||||
__asm {
|
||||
emms /* mmx */
|
||||
@@ -6600,6 +6615,7 @@ static void hwcReadRegion8888(hwcBoardInfo *bInfo, FxU32 src, FxU32 src_x, FxU32
|
||||
{
|
||||
#ifdef __GNUC__
|
||||
MMX_LOOP4(s, dst, src_width, stride_diff);
|
||||
#elif defined(__WATCOMC__)
|
||||
#else
|
||||
/* This chip owns this scanline. */
|
||||
__asm {
|
||||
@@ -6975,6 +6991,7 @@ static void hwcCopyBuffer8888Flipped(hwcBoardInfo *bInfo, FxU16 *source, int w,
|
||||
:
|
||||
:"a"(src), "d"(dst), "D"(endline), "S"(end), "m"(w)
|
||||
:"%ebx", "%ecx");
|
||||
#elif defined(__WATCOMC__)
|
||||
#else
|
||||
__asm
|
||||
{
|
||||
@@ -7112,6 +7129,7 @@ static void hwcCopyBuffer8888FlippedShifted(hwcBoardInfo *bInfo, FxU16 *source,
|
||||
:
|
||||
:"a"(src), "d"(dst), "D"(endline), "S"(end), "m"(w), "m"(aaShift)
|
||||
:"%ebx", "%ecx");
|
||||
#elif defined(__WATCOMC__)
|
||||
#else
|
||||
__asm
|
||||
{
|
||||
@@ -7377,6 +7395,7 @@ static void hwcCopyBuffer8888FlippedDithered(hwcBoardInfo *bInfo, FxU16 *source,
|
||||
:
|
||||
:"a"(src), "d"(dst), "D"(endline), "S"(end), "m"(w), "m"(dither_mask), "g"(val_max), "m"(aaShift), "c"(sse_mmxplus)
|
||||
:"%ebx");
|
||||
#elif defined(__WATCOMC__)
|
||||
#else
|
||||
__asm
|
||||
{
|
||||
@@ -7859,6 +7878,7 @@ static void hwcCopyBuffer565Shifted(hwcBoardInfo *bInfo, FxU16 *src, int w, int
|
||||
:
|
||||
: "a"(src), "d"(dst), "D"(endline), "S"(end), "m"(stride_dest), "m"(stride_diff), "m"(aaShift)
|
||||
: "%ebx", "%ecx");
|
||||
#elif defined(__WATCOMC__)
|
||||
#else
|
||||
__asm
|
||||
{
|
||||
@@ -9105,7 +9125,7 @@ hwcShareContextData(hwcBoardInfo *bInfo, FxU32 **data)
|
||||
ctxRes.optData.shareContextDWORDRes.contextDWORD);
|
||||
}
|
||||
#endif
|
||||
#if HWC_GDX_INIT || defined(__DJGPP__) || (GLIDE_PLATFORM & GLIDE_OS_UNIX)
|
||||
#if HWC_GDX_INIT || (GLIDE_PLATFORM & GLIDE_OS_DOS32) || (GLIDE_PLATFORM & GLIDE_OS_UNIX)
|
||||
*data = &dummyContextDWORD;
|
||||
#endif
|
||||
return retVal;
|
||||
|
||||
Reference in New Issue
Block a user