MacGLide/MacGLide/OpenGLide/sdk2_glide.h

1516 lines
46 KiB
C

/*
** Copyright (c) 1995, 3Dfx Interactive, Inc.
** All Rights Reserved.
**
** This is UNPUBLISHED PROPRIETARY SOURCE CODE of 3Dfx Interactive, Inc.;
** the contents of this file may not be disclosed to third parties, copied or
** duplicated in any form, in whole or in part, without the prior written
** permission of 3Dfx Interactive, Inc.
**
** RESTRICTED RIGHTS LEGEND:
** Use, duplication or disclosure by the Government is subject to restrictions
** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
** and Computer Software clause at DFARS 252.227-7013, and/or in similar or
** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
** rights reserved under the Copyright Laws of the United States.
*/
/*
** GLIDE.H
**
** The following #defines are relevant when using Glide:
**
** One of the following "platform constants" must be defined during
** compilation:
**
** __DOS__ Defined for 32-bit DOS applications
** __WIN32__ Defined for 32-bit Windows applications
** __sparc__ Defined for Sun Solaris/SunOS
** __linux__ Defined for Linux applications
** __IRIX__ Defined for SGI Irix applications
**
*/
#ifndef __GLIDE_H__
#define __GLIDE_H__
#include "sdk2_3dfx.h"
#include "sdk2_glidesys.h"
#include "sdk2_sst1vid.h"
#ifdef __cplusplus
extern "C" {
#endif
/*
** -----------------------------------------------------------------------
** TYPE DEFINITIONS
** -----------------------------------------------------------------------
*/
typedef FxU32 GrColor_t;
typedef FxU8 GrAlpha_t;
typedef FxU32 GrMipMapId_t;
typedef FxU8 GrFog_t;
typedef void (FX_CALL *GrProc)();
/*
** -----------------------------------------------------------------------
** CONSTANTS AND TYPES
** -----------------------------------------------------------------------
*/
#define MAX_NUM_SST 4
#define MAX_MIPMAPS_PER_SST 1024
#ifndef GLIDE_LIB
#if defined(GLIDE3) && defined(GLIDE3_ALPHA)
#define GR_FOG_TABLE_SIZE 128
#else /* !(defined(GLIDE3) && defined(GLIDE3_ALPHA)) */
#define GR_FOG_TABLE_SIZE 64
#endif /* !(defined(GLIDE3) && defined(GLIDE3_ALPHA)) */
#endif /* GLIDE_LIB */
#define GR_NULL_MIPMAP_HANDLE ((GrMipMapId_t) -1)
#define GR_ZDEPTHVALUE_NEAREST 0xFFFF
#define GR_ZDEPTHVALUE_FARTHEST 0x0000
#define GR_WDEPTHVALUE_NEAREST 0x0000
#define GR_WDEPTHVALUE_FARTHEST 0xFFFF
#define GR_MIPMAPLEVELMASK_EVEN FXBIT(0)
#define GR_MIPMAPLEVELMASK_ODD FXBIT(1)
#define GR_MIPMAPLEVELMASK_BOTH (GR_MIPMAPLEVELMASK_EVEN | GR_MIPMAPLEVELMASK_ODD )
#define GR_LODBIAS_BILINEAR 0.5
#define GR_LODBIAS_TRILINEAR 0.0
typedef FxI32 GrChipID_t;
#define GR_TMU0 0x0
#define GR_TMU1 0x1
#define GR_TMU2 0x2
#define GR_FBI 0x3
typedef FxI32 GrCombineFunction_t;
#define GR_COMBINE_FUNCTION_ZERO 0x0
#define GR_COMBINE_FUNCTION_NONE GR_COMBINE_FUNCTION_ZERO
#define GR_COMBINE_FUNCTION_LOCAL 0x1
#define GR_COMBINE_FUNCTION_LOCAL_ALPHA 0x2
#define GR_COMBINE_FUNCTION_SCALE_OTHER 0x3
#define GR_COMBINE_FUNCTION_BLEND_OTHER GR_COMBINE_FUNCTION_SCALE_OTHER
#define GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL 0x4
#define GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA 0x5
#define GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL 0x6
#define GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL 0x7
#define GR_COMBINE_FUNCTION_BLEND GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL
#define GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA 0x8
#define GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL 0x9
#define GR_COMBINE_FUNCTION_BLEND_LOCAL GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL
#define GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA 0x10
typedef FxI32 GrCombineFactor_t;
#define GR_COMBINE_FACTOR_ZERO 0x0
#define GR_COMBINE_FACTOR_NONE GR_COMBINE_FACTOR_ZERO
#define GR_COMBINE_FACTOR_LOCAL 0x1
#define GR_COMBINE_FACTOR_OTHER_ALPHA 0x2
#define GR_COMBINE_FACTOR_LOCAL_ALPHA 0x3
#define GR_COMBINE_FACTOR_TEXTURE_ALPHA 0x4
#define GR_COMBINE_FACTOR_TEXTURE_RGB 0x5
#define GR_COMBINE_FACTOR_DETAIL_FACTOR GR_COMBINE_FACTOR_TEXTURE_ALPHA
#define GR_COMBINE_FACTOR_LOD_FRACTION 0x5
#define GR_COMBINE_FACTOR_ONE 0x8
#define GR_COMBINE_FACTOR_ONE_MINUS_LOCAL 0x9
#define GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA 0xa
#define GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA 0xb
#define GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA 0xc
#define GR_COMBINE_FACTOR_ONE_MINUS_DETAIL_FACTOR GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA
#define GR_COMBINE_FACTOR_ONE_MINUS_LOD_FRACTION 0xd
typedef FxI32 GrCombineLocal_t;
#define GR_COMBINE_LOCAL_ITERATED 0x0
#define GR_COMBINE_LOCAL_CONSTANT 0x1
#define GR_COMBINE_LOCAL_NONE GR_COMBINE_LOCAL_CONSTANT
#define GR_COMBINE_LOCAL_DEPTH 0x2
typedef FxI32 GrCombineOther_t;
#define GR_COMBINE_OTHER_ITERATED 0x0
#define GR_COMBINE_OTHER_TEXTURE 0x1
#define GR_COMBINE_OTHER_CONSTANT 0x2
#define GR_COMBINE_OTHER_NONE GR_COMBINE_OTHER_CONSTANT
typedef FxI32 GrAlphaSource_t;
#define GR_ALPHASOURCE_CC_ALPHA 0x0
#define GR_ALPHASOURCE_ITERATED_ALPHA 0x1
#define GR_ALPHASOURCE_TEXTURE_ALPHA 0x2
#define GR_ALPHASOURCE_TEXTURE_ALPHA_TIMES_ITERATED_ALPHA 0x3
typedef FxI32 GrColorCombineFnc_t;
#define GR_COLORCOMBINE_ZERO 0x0
#define GR_COLORCOMBINE_CCRGB 0x1
#define GR_COLORCOMBINE_ITRGB 0x2
#define GR_COLORCOMBINE_ITRGB_DELTA0 0x3
#define GR_COLORCOMBINE_DECAL_TEXTURE 0x4
#define GR_COLORCOMBINE_TEXTURE_TIMES_CCRGB 0x5
#define GR_COLORCOMBINE_TEXTURE_TIMES_ITRGB 0x6
#define GR_COLORCOMBINE_TEXTURE_TIMES_ITRGB_DELTA0 0x7
#define GR_COLORCOMBINE_TEXTURE_TIMES_ITRGB_ADD_ALPHA 0x8
#define GR_COLORCOMBINE_TEXTURE_TIMES_ALPHA 0x9
#define GR_COLORCOMBINE_TEXTURE_TIMES_ALPHA_ADD_ITRGB 0xa
#define GR_COLORCOMBINE_TEXTURE_ADD_ITRGB 0xb
#define GR_COLORCOMBINE_TEXTURE_SUB_ITRGB 0xc
#define GR_COLORCOMBINE_CCRGB_BLEND_ITRGB_ON_TEXALPHA 0xd
#define GR_COLORCOMBINE_DIFF_SPEC_A 0xe
#define GR_COLORCOMBINE_DIFF_SPEC_B 0xf
#define GR_COLORCOMBINE_ONE 0x10
typedef FxI32 GrAlphaBlendFnc_t;
#define GR_BLEND_ZERO 0x0
#define GR_BLEND_SRC_ALPHA 0x1
#define GR_BLEND_SRC_COLOR 0x2
#define GR_BLEND_DST_COLOR GR_BLEND_SRC_COLOR
#define GR_BLEND_DST_ALPHA 0x3
#define GR_BLEND_ONE 0x4
#define GR_BLEND_ONE_MINUS_SRC_ALPHA 0x5
#define GR_BLEND_ONE_MINUS_SRC_COLOR 0x6
#define GR_BLEND_ONE_MINUS_DST_COLOR GR_BLEND_ONE_MINUS_SRC_COLOR
#define GR_BLEND_ONE_MINUS_DST_ALPHA 0x7
#define GR_BLEND_RESERVED_8 0x8
#define GR_BLEND_RESERVED_9 0x9
#define GR_BLEND_RESERVED_A 0xa
#define GR_BLEND_RESERVED_B 0xb
#define GR_BLEND_RESERVED_C 0xc
#define GR_BLEND_RESERVED_D 0xd
#define GR_BLEND_RESERVED_E 0xe
#define GR_BLEND_ALPHA_SATURATE 0xf
#define GR_BLEND_PREFOG_COLOR GR_BLEND_ALPHA_SATURATE
typedef FxI32 GrAspectRatio_t;
#if defined(GLIDE3) && defined(GLIDE3_ALPHA)
//#define GLIDE3_DEBUG
#ifdef GLIDE3_DEBUG
#define GR_ASPECT_8x1 0x0 /* 8W x 1H */
#define GR_ASPECT_4x1 0x1 /* 4W x 1H */
#define GR_ASPECT_2x1 0x2 /* 2W x 1H */
#define GR_ASPECT_1x1 0x3 /* 1W x 1H */
#define GR_ASPECT_1x2 0x4 /* 1W x 2H */
#define GR_ASPECT_1x4 0x5 /* 1W x 4H */
#define GR_ASPECT_1x8 0x6 /* 1W x 8H */
#else
#define GR_ASPECT_8x1 3 /* 8W x 1H */
#define GR_ASPECT_4x1 2 /* 4W x 1H */
#define GR_ASPECT_2x1 1 /* 2W x 1H */
#define GR_ASPECT_1x1 0 /* 1W x 1H */
#define GR_ASPECT_1x2 -1 /* 1W x 2H */
#define GR_ASPECT_1x4 -2 /* 1W x 4H */
#define GR_ASPECT_1x8 -3 /* 1W x 8H */
#endif /* GLIDE3_DEBUG */
#else
#define GR_ASPECT_8x1 0x0 /* 8W x 1H */
#define GR_ASPECT_4x1 0x1 /* 4W x 1H */
#define GR_ASPECT_2x1 0x2 /* 2W x 1H */
#define GR_ASPECT_1x1 0x3 /* 1W x 1H */
#define GR_ASPECT_1x2 0x4 /* 1W x 2H */
#define GR_ASPECT_1x4 0x5 /* 1W x 4H */
#define GR_ASPECT_1x8 0x6 /* 1W x 8H */
#endif
typedef FxI32 GrBuffer_t;
#define GR_BUFFER_FRONTBUFFER 0x0
#define GR_BUFFER_BACKBUFFER 0x1
#define GR_BUFFER_AUXBUFFER 0x2
#define GR_BUFFER_DEPTHBUFFER 0x3
#define GR_BUFFER_ALPHABUFFER 0x4
#define GR_BUFFER_TRIPLEBUFFER 0x5
typedef FxI32 GrChromakeyMode_t;
#define GR_CHROMAKEY_DISABLE 0x0
#define GR_CHROMAKEY_ENABLE 0x1
#if defined(GLIDE3) && defined(GLIDE3_ALPHA)
typedef FxI32 GrChromaRangeMode_t;
#define GR_CHROMARANGE_RGB_ANY 0x0
#define GR_CHROMARANGE_RGb_ANY 0x1
#define GR_CHROMARANGE_RgB_ANY 0x2
#define GR_CHROMARANGE_Rgb_ANY 0x3
#define GR_CHROMARANGE_rGB_ANY 0x4
#define GR_CHROMARANGE_rGb_ANY 0x5
#define GR_CHROMARANGE_rgB_ANY 0x6
#define GR_CHROMARANGE_rgb_ANY 0x7
#define GR_CHROMARANGE_RGB_ALL 0x8
#define GR_CHROMARANGE_RGb_ALL 0x9
#define GR_CHROMARANGE_RgB_ALL 0xa
#define GR_CHROMARANGE_Rgb_ALL 0xb
#define GR_CHROMARANGE_rGB_ALL 0xc
#define GR_CHROMARANGE_rGb_ALL 0xd
#define GR_CHROMARANGE_rgB_ALL 0xe
#define GR_CHROMARANGE_rgb_ALL 0xf
#endif
typedef FxI32 GrCmpFnc_t;
#define GR_CMP_NEVER 0x0
#define GR_CMP_LESS 0x1
#define GR_CMP_EQUAL 0x2
#define GR_CMP_LEQUAL 0x3
#define GR_CMP_GREATER 0x4
#define GR_CMP_NOTEQUAL 0x5
#define GR_CMP_GEQUAL 0x6
#define GR_CMP_ALWAYS 0x7
typedef FxI32 GrColorFormat_t;
#define GR_COLORFORMAT_ARGB 0x0
#define GR_COLORFORMAT_ABGR 0x1
#define GR_COLORFORMAT_RGBA 0x2
#define GR_COLORFORMAT_BGRA 0x3
typedef FxI32 GrCullMode_t;
#define GR_CULL_DISABLE 0x0
#define GR_CULL_NEGATIVE 0x1
#define GR_CULL_POSITIVE 0x2
typedef FxI32 GrDepthBufferMode_t;
#define GR_DEPTHBUFFER_DISABLE 0x0
#define GR_DEPTHBUFFER_ZBUFFER 0x1
#define GR_DEPTHBUFFER_WBUFFER 0x2
#define GR_DEPTHBUFFER_ZBUFFER_COMPARE_TO_BIAS 0x3
#define GR_DEPTHBUFFER_WBUFFER_COMPARE_TO_BIAS 0x4
typedef FxI32 GrDitherMode_t;
#define GR_DITHER_DISABLE 0x0
#define GR_DITHER_2x2 0x1
#define GR_DITHER_4x4 0x2
typedef FxI32 GrFogMode_t;
#define GR_FOG_DISABLE 0x0
#define GR_FOG_WITH_ITERATED_ALPHA 0x1
#define GR_FOG_WITH_TABLE 0x2
#define GR_FOG_WITH_ITERATED_Z 0x3 /* Bug 735 */
#define GR_FOG_MULT2 0x100
#define GR_FOG_ADD2 0x200
typedef FxU32 GrLock_t;
#define GR_LFB_READ_ONLY 0x00
#define GR_LFB_WRITE_ONLY 0x01
#define GR_LFB_IDLE 0x00
#define GR_LFB_NOIDLE 0x10
typedef FxI32 GrLfbBypassMode_t;
#define GR_LFBBYPASS_DISABLE 0x0
#define GR_LFBBYPASS_ENABLE 0x1
typedef FxI32 GrLfbWriteMode_t;
#define GR_LFBWRITEMODE_565 0x0 /* RGB:RGB */
#define GR_LFBWRITEMODE_555 0x1 /* RGB:RGB */
#define GR_LFBWRITEMODE_1555 0x2 /* ARGB:ARGB */
#define GR_LFBWRITEMODE_RESERVED1 0x3
#define GR_LFBWRITEMODE_888 0x4 /* RGB */
#define GR_LFBWRITEMODE_8888 0x5 /* ARGB */
#define GR_LFBWRITEMODE_RESERVED2 0x6
#define GR_LFBWRITEMODE_RESERVED3 0x7
#define GR_LFBWRITEMODE_RESERVED4 0x8
#define GR_LFBWRITEMODE_RESERVED5 0x9
#define GR_LFBWRITEMODE_RESERVED6 0xa
#define GR_LFBWRITEMODE_RESERVED7 0xb
#define GR_LFBWRITEMODE_565_DEPTH 0xc /* RGB:DEPTH */
#define GR_LFBWRITEMODE_555_DEPTH 0xd /* RGB:DEPTH */
#define GR_LFBWRITEMODE_1555_DEPTH 0xe /* ARGB:DEPTH */
#define GR_LFBWRITEMODE_ZA16 0xf /* DEPTH:DEPTH */
#define GR_LFBWRITEMODE_ANY 0xFF
typedef FxI32 GrOriginLocation_t;
#define GR_ORIGIN_UPPER_LEFT 0x0
#define GR_ORIGIN_LOWER_LEFT 0x1
#define GR_ORIGIN_ANY 0xFF
typedef struct {
int size;
void *lfbPtr;
FxU32 strideInBytes;
GrLfbWriteMode_t writeMode;
GrOriginLocation_t origin;
} GrLfbInfo_t;
typedef FxI32 GrLOD_t;
#if defined(GLIDE3) && defined(GLIDE3_ALPHA)
#ifdef GLIDE3_DEBUG
#define GR_LOD_256 0x0
#define GR_LOD_128 0x1
#define GR_LOD_64 0x2
#define GR_LOD_32 0x3
#define GR_LOD_16 0x4
#define GR_LOD_8 0x5
#define GR_LOD_4 0x6
#define GR_LOD_2 0x7
#define GR_LOD_1 0x8
#else
#define GR_LOD_256 0x8
#define GR_LOD_128 0x7
#define GR_LOD_64 0x6
#define GR_LOD_32 0x5
#define GR_LOD_16 0x4
#define GR_LOD_8 0x3
#define GR_LOD_4 0x2
#define GR_LOD_2 0x1
#define GR_LOD_1 0x0
#endif /* GLIDE3_DEBUG */
#else
#define GR_LOD_256 0x0
#define GR_LOD_128 0x1
#define GR_LOD_64 0x2
#define GR_LOD_32 0x3
#define GR_LOD_16 0x4
#define GR_LOD_8 0x5
#define GR_LOD_4 0x6
#define GR_LOD_2 0x7
#define GR_LOD_1 0x8
#endif
typedef FxI32 GrMipMapMode_t;
#define GR_MIPMAP_DISABLE 0x0 /* no mip mapping */
#define GR_MIPMAP_NEAREST 0x1 /* use nearest mipmap */
#define GR_MIPMAP_NEAREST_DITHER 0x2 /* GR_MIPMAP_NEAREST + LOD dith */
typedef FxI32 GrSmoothingMode_t;
#define GR_SMOOTHING_DISABLE 0x0
#define GR_SMOOTHING_ENABLE 0x1
typedef FxI32 GrTextureClampMode_t;
#define GR_TEXTURECLAMP_WRAP 0x0
#define GR_TEXTURECLAMP_CLAMP 0x1
typedef FxI32 GrTextureCombineFnc_t;
#define GR_TEXTURECOMBINE_ZERO 0x0 /* texout = 0 */
#define GR_TEXTURECOMBINE_DECAL 0x1 /* texout = texthis */
#define GR_TEXTURECOMBINE_OTHER 0x2 /* this TMU in passthru mode */
#define GR_TEXTURECOMBINE_ADD 0x3 /* tout = tthis + t(this+1) */
#define GR_TEXTURECOMBINE_MULTIPLY 0x4 /* texout = tthis * t(this+1) */
#define GR_TEXTURECOMBINE_SUBTRACT 0x5 /* Sutract from upstream TMU */
#define GR_TEXTURECOMBINE_DETAIL 0x6 /* detail--detail on tthis */
#define GR_TEXTURECOMBINE_DETAIL_OTHER 0x7 /* detail--detail on tthis+1 */
#define GR_TEXTURECOMBINE_TRILINEAR_ODD 0x8 /* trilinear--odd levels tthis*/
#define GR_TEXTURECOMBINE_TRILINEAR_EVEN 0x9 /*trilinear--even levels tthis*/
#define GR_TEXTURECOMBINE_ONE 0xa /* texout = 0xFFFFFFFF */
typedef FxI32 GrTextureFilterMode_t;
#define GR_TEXTUREFILTER_POINT_SAMPLED 0x0
#define GR_TEXTUREFILTER_BILINEAR 0x1
typedef FxI32 GrTextureFormat_t;
#define GR_TEXFMT_8BIT 0x0
#define GR_TEXFMT_RGB_332 GR_TEXFMT_8BIT
#define GR_TEXFMT_YIQ_422 0x1
#define GR_TEXFMT_ALPHA_8 0x2 /* (0..0xFF) alpha */
#define GR_TEXFMT_INTENSITY_8 0x3 /* (0..0xFF) intensity */
#define GR_TEXFMT_ALPHA_INTENSITY_44 0x4
#define GR_TEXFMT_P_8 0x5 /* 8-bit palette */
#define GR_TEXFMT_RSVD0 0x6
#define GR_TEXFMT_RSVD1 0x7
#define GR_TEXFMT_16BIT 0x8
#define GR_TEXFMT_ARGB_8332 GR_TEXFMT_16BIT
#define GR_TEXFMT_AYIQ_8422 0x9
#define GR_TEXFMT_RGB_565 0xa
#define GR_TEXFMT_ARGB_1555 0xb
#define GR_TEXFMT_ARGB_4444 0xc
#define GR_TEXFMT_ALPHA_INTENSITY_88 0xd
#define GR_TEXFMT_AP_88 0xe /* 8-bit alpha 8-bit palette */
#define GR_TEXFMT_RSVD2 0xf
typedef FxU32 GrTexTable_t;
#define GR_TEXTABLE_NCC0 0x0
#define GR_TEXTABLE_NCC1 0x1
#define GR_TEXTABLE_PALETTE 0x2
typedef FxU32 GrNCCTable_t;
#define GR_NCCTABLE_NCC0 0x0
#define GR_NCCTABLE_NCC1 0x1
typedef FxU32 GrTexBaseRange_t;
#define GR_TEXBASE_256 0x0
#define GR_TEXBASE_128 0x1
#define GR_TEXBASE_64 0x2
#define GR_TEXBASE_32_TO_1 0x3
#ifdef GLIDE3
#define GLIDE3_VERTEX_LAYOUT 1
typedef FxU32 GrEnableMode_t;
#define GR_MODE_DISABLE 0x0
#define GR_MODE_ENABLE 0x1
#define GR_AA_ORDERED 0x01
#define GR_ALLOW_MIPMAP_DITHER 0x02
#define GR_SHAMELESS_PLUG 0x03
#define GR_VIDEO_SMOOTHING 0x04
typedef FxU32 GrCoordinateSpaceMode_t;
#define GR_WINDOW_COORDS 0x00
#define GR_CLIP_COORDS 0x01
#endif
#ifdef GLIDE3
#ifdef GLIDE3_ALPHA
#define GLIDE3_EXTRA_STATE 392
#else
#define GLIDE3_EXTRA_STATE 216
#endif
#else
#define GLIDE3_EXTRA_STATE 0
#endif
#define GLIDE_STATE_PAD_SIZE 312 + GLIDE3_EXTRA_STATE
#ifdef GLIDE_LIB
typedef struct _GrState_s GrState;
#else
typedef struct _GrState_s {
char pad[GLIDE_STATE_PAD_SIZE];
} GrState;
#endif
#ifdef GLIDE3
/* Types of data in strips */
#define GR_FLOAT 0
#define GR_U8 1
/* Parameters for strips */
#define GR_PARAM_XY 0x01
#define GR_PARAM_Z 0x02
#define GR_PARAM_W 0x03
#define GR_PARAM_Q 0x04
#define GR_PARAM_A 0x10
#define GR_PARAM_A0 GR_PARAM_A
#define GR_PARAM_A1 GR_PARAM_A+1
#define GR_PARAM_A2 GR_PARAM_A+2
#define GR_PARAM_A3 GR_PARAM_A+3
#define GR_PARAM_A4 GR_PARAM_A+4
#define GR_PARAM_A5 GR_PARAM_A+5
#define GR_PARAM_A6 GR_PARAM_A+6
#define GR_PARAM_A7 GR_PARAM_A+7
#define GR_PARAM_RGB 0x20
#define GR_PARAM_RGB0 GR_PARAM_RGB
#define GR_PARAM_RGB1 GR_PARAM_RGB+1
#define GR_PARAM_RGB2 GR_PARAM_RGB+2
#define GR_PARAM_RGB3 GR_PARAM_RGB+3
#define GR_PARAM_RGB4 GR_PARAM_RGB+4
#define GR_PARAM_RGB5 GR_PARAM_RGB+5
#define GR_PARAM_RGB6 GR_PARAM_RGB+6
#define GR_PARAM_RGB7 GR_PARAM_RGB+7
#define GR_PARAM_PARGB 0x30
#define GR_PARAM_PARGB0 GR_PARAM_PARGB
#define GR_PARAM_PARGB1 GR_PARAM_PARGB+1
#define GR_PARAM_PARGB2 GR_PARAM_PARGB+2
#define GR_PARAM_PARGB3 GR_PARAM_PARGB+3
#define GR_PARAM_PARGB4 GR_PARAM_PARGB+4
#define GR_PARAM_PARGB5 GR_PARAM_PARGB+5
#define GR_PARAM_PARGB6 GR_PARAM_PARGB+6
#define GR_PARAM_PARGB7 GR_PARAM_PARGB+7
#define GR_PARAM_ST0 0x40
#define GR_PARAM_ST1 GR_PARAM_ST0+1
#define GR_PARAM_ST2 GR_PARAM_ST0+2
#define GR_PARAM_ST3 GR_PARAM_ST0+3
#define GR_PARAM_ST4 GR_PARAM_ST0+4
#define GR_PARAM_ST5 GR_PARAM_ST0+5
#define GR_PARAM_ST6 GR_PARAM_ST0+6
#define GR_PARAM_ST7 GR_PARAM_ST0+7
#define GR_PARAM_Q0 0x50
#define GR_PARAM_Q1 GR_PARAM_Q0+1
#define GR_PARAM_Q2 GR_PARAM_Q0+2
#define GR_PARAM_Q3 GR_PARAM_Q0+3
#define GR_PARAM_Q4 GR_PARAM_Q0+4
#define GR_PARAM_Q5 GR_PARAM_Q0+5
#define GR_PARAM_Q6 GR_PARAM_Q0+6
#define GR_PARAM_Q7 GR_PARAM_Q0+7
#define GR_PARAM_DISABLE 0x00
#define GR_PARAM_ENABLE 0x01
/* Componenets for strips */
/* vertex */
#define GR_VERTEX_XYZ 3
#define GR_VERTEX_XYZW 4
/* Color */
#define GR_COLOR_RGB 3
#define GR_COLOR_RGBA 4
/* Texture */
#define GR_TEX_NONE 0
#define GR_TEX_ST 2
#define GR_TEX_STW 3
/* grDrawVertexArray primitive type */
#define GR_POINTS 0
#define GR_LINE_STRIP 1
#define GR_LINES 2
#define GR_POLYGON 3
#define GR_TRIANGLE_STRIP 4
#define GR_TRIANGLE_FAN 5
#define GR_TRIANGLES 6
/* Stuff for grGet/grReset */
#define GR_BITS_DEPTH 0x01
#define GR_BITS_RGBA 0x02
#define GR_FIFO_FULLNESS 0x03
#define GR_FOG_TABLE_ENTRIES 0x04
#define GR_GAMMA_TABLE_ENTRIES 0x05
#define GR_IS_BUSY 0x06
#define GR_LFB_PIXEL_PIPE 0x07
#define GR_MAX_TEXTURE_SIZE 0x08
#define GR_MAX_TEXTURE_ASPECT_RATIO 0x09
#define GR_MEMORY_FB 0x0a
#define GR_MEMORY_TMU 0x0b
#define GR_MEMORY_UMA 0x0c
#define GR_NUM_BOARDS 0x0d
#define GR_NUM_POWER_OF_TWO_TEXTURES 0x0e
#define GR_NUM_FB 0x0f
#define GR_NUM_TMU 0x10
#define GR_PENDING_BUFFERSWAPS 0x11
#define GR_REVISION_FB 0x12
#define GR_REVISION_TMU 0x13
#define GR_STATS_LINES 0x14 /* grSet/grReset */
#define GR_STATS_PIXELS_AFUNC_FAIL 0x15
#define GR_STATS_PIXELS_CHROMA_FAIL 0x16
#define GR_STATS_PIXELS_DEPTHFUNC_FAIL 0x17
#define GR_STATS_PIXELS_IN 0x18
#define GR_STATS_PIXELS_OUT 0x19
#define GR_STATS_PIXELS 0x1a /* grReset */
#define GR_STATS_POINTS 0x1b /* grSet/grReset */
#define GR_STATS_TRIANGLES_IN 0x1c
#define GR_STATS_TRIANGLES_OUT 0x1d
#define GR_STATS_TRIANGLES 0x1e /* grReset */
#define GR_SWAP_HISTORY 0x1f
#define GR_TEXTURE_ALIGN 0x20
#define GR_VIDEO_POSITION 0x21
#define GR_VIEWPORT 0x22
#define GR_WDEPTH_MIN_MAX 0x23
#define GR_ZDEPTH_MIN_MAX 0x24
/* stuff for grGetString */
#define GR_EXTENSION 0xa0
#define GR_HARDWARE 0xa1
#define GR_RENDERER 0xa2
#define GR_VENDOR 0xa3
#define GR_VERSION 0xa4
#endif
/*
** -----------------------------------------------------------------------
** STRUCTURES
** -----------------------------------------------------------------------
*/
#if defined(GLIDE3) && defined(GLIDE3_ALPHA)
#ifdef GLIDE3_DEBUG
typedef struct {
GrLOD_t smallLod;
GrLOD_t largeLod;
GrAspectRatio_t aspectRatio;
GrTextureFormat_t format;
void *data;
} GrTexInfo;
#else
typedef struct {
GrLOD_t smallLodLog2;
GrLOD_t largeLodLog2;
GrAspectRatio_t aspectRatioLog2;
GrTextureFormat_t format;
void *data;
} GrTexInfo;
#endif /* GLIDE3_DEBUG */
#else
typedef struct {
GrLOD_t smallLod;
GrLOD_t largeLod;
GrAspectRatio_t aspectRatio;
GrTextureFormat_t format;
void *data;
} GrTexInfo;
#endif
#ifndef GLIDE3_ALPHA
/*
** 3DF texture file structs
*/
typedef struct
{
FxU32 width, height;
int small_lod, large_lod;
GrAspectRatio_t aspect_ratio;
GrTextureFormat_t format;
} Gu3dfHeader;
typedef struct
{
FxU8 yRGB[16];
FxI16 iRGB[4][3];
FxI16 qRGB[4][3];
FxU32 packed_data[12];
} GuNccTable;
typedef struct {
FxU32 data[256];
} GuTexPalette;
typedef union {
GuNccTable nccTable;
GuTexPalette palette;
} GuTexTable;
typedef struct
{
Gu3dfHeader header;
GuTexTable table;
void *data;
FxU32 mem_required; /* memory required for mip map in bytes. */
} Gu3dfInfo;
typedef struct
{
int sst; /* SST where this texture map was stored */
FxBool valid; /* set when this table entry is allocated*/
int width, height;
GrAspectRatio_t aspect_ratio; /* aspect ratio of the mip map. */
void *data; /* actual texture data */
GrTextureFormat_t format; /* format of the texture table */
GrMipMapMode_t mipmap_mode; /* mip map mode for this texture */
GrTextureFilterMode_t magfilter_mode; /* filtering to be used when magnified */
GrTextureFilterMode_t minfilter_mode; /* filtering to be used with minified */
GrTextureClampMode_t s_clamp_mode; /* how this texture should be clamped in s */
GrTextureClampMode_t t_clamp_mode; /* how this texture should be clamped in t */
FxU32 tLOD; /* Register value for tLOD register */
FxU32 tTextureMode; /* Register value for tTextureMode register
not including non-texture specific bits */
FxU32 lod_bias; /* LOD bias of the mip map in preshifted 4.2*/
GrLOD_t lod_min, lod_max; /* largest and smallest levels of detail */
int tmu; /* tmu on which this texture resides */
FxU32 odd_even_mask; /* mask specifying levels on this tmu */
FxU32 tmu_base_address; /* base addr (in TMU mem) of this texture */
FxBool trilinear; /* should we blend by lod? */
GuNccTable ncc_table; /* NCC compression table (optional) */
} GrMipMapInfo;
#endif
typedef int GrSstType;
#define GR_SSTTYPE_VOODOO 0
#define GR_SSTTYPE_SST96 1
#define GR_SSTTYPE_AT3D 2
#define GR_SSTTYPE_Voodoo2 3
typedef struct GrTMUConfig_St {
int tmuRev; /* Rev of Texelfx chip */
int tmuRam; /* 1, 2, or 4 MB */
} GrTMUConfig_t;
typedef struct GrVoodooConfig_St {
int fbRam; /* 1, 2, or 4 MB */
int fbiRev; /* Rev of Pixelfx chip */
int nTexelfx; /* How many texelFX chips are there? */
FxBool sliDetect; /* Is it a scan-line interleaved board? */
GrTMUConfig_t tmuConfig[GLIDE_NUM_TMU]; /* Configuration of the Texelfx chips */
} GrVoodooConfig_t;
typedef struct GrSst96Config_St {
int fbRam; /* How much? */
int nTexelfx;
GrTMUConfig_t tmuConfig;
} GrSst96Config_t;
typedef GrVoodooConfig_t GrVoodoo2Config_t;
typedef struct GrAT3DConfig_St {
int rev;
} GrAT3DConfig_t;
typedef struct {
int num_sst; /* # of HW units in the system */
struct {
GrSstType type; /* Which hardware is it? */
union SstBoard_u {
GrVoodooConfig_t VoodooConfig;
GrSst96Config_t SST96Config;
GrAT3DConfig_t AT3DConfig;
GrVoodoo2Config_t Voodoo2Config;
} sstBoard;
} SSTs[MAX_NUM_SST]; /* configuration for each board */
} GrHwConfiguration;
typedef struct GrSstPerfStats_s {
FxU32 pixelsIn; /* # pixels processed (minus buffer clears) */
FxU32 chromaFail; /* # pixels not drawn due to chroma key */
FxU32 zFuncFail; /* # pixels not drawn due to Z comparison */
FxU32 aFuncFail; /* # pixels not drawn due to alpha comparison */
FxU32 pixelsOut; /* # pixels drawn (including buffer clears) */
} GrSstPerfStats_t;
typedef struct {
float sow; /* s texture ordinate (s over w) */
float tow; /* t texture ordinate (t over w) */
float oow; /* 1/w (used mipmapping - really 0xfff/w) */
} GrTmuVertex;
/*
** GrVertex
** If these are changed the C & assembly language trisetup routines MUST
** be changed, for they will no longer work.
*/
#if !GLIDE3_VERTEX_LAYOUT
typedef struct
{
float x, y, z; /* X, Y, and Z of scrn space -- Z is ignored */
float r, g, b; /* R, G, B, ([0..255.0]) */
float ooz; /* 65535/Z (used for Z-buffering) */
float a; /* Alpha [0..255.0] */
float oow; /* 1/W (used for W-buffering, texturing) */
GrTmuVertex tmuvtx[GLIDE_NUM_TMU];
} GrVertex;
#define GR_VERTEX_X_OFFSET 0
#define GR_VERTEX_Y_OFFSET 1
#define GR_VERTEX_Z_OFFSET 2
#define GR_VERTEX_R_OFFSET 3
#define GR_VERTEX_G_OFFSET 4
#define GR_VERTEX_B_OFFSET 5
#define GR_VERTEX_OOZ_OFFSET 6
#define GR_VERTEX_A_OFFSET 7
#define GR_VERTEX_OOW_OFFSET 8
#else /* GLIDE3_VERTEX_LAYOUT */
typedef struct
{
float x, y; /* X and Y in screen space */
float ooz; /* 65535/Z (used for Z-buffering) */
float oow; /* 1/W (used for W-buffering, texturing) */
float r, g, b, a; /* R, G, B, A [0..255.0] */
float z; /* Z is ignored */
GrTmuVertex tmuvtx[GLIDE_NUM_TMU];
} GrVertex;
#define GR_VERTEX_X_OFFSET 0
#define GR_VERTEX_Y_OFFSET 1
#define GR_VERTEX_OOZ_OFFSET 2
#define GR_VERTEX_OOW_OFFSET 3
#define GR_VERTEX_R_OFFSET 4
#define GR_VERTEX_G_OFFSET 5
#define GR_VERTEX_B_OFFSET 6
#define GR_VERTEX_A_OFFSET 7
#define GR_VERTEX_Z_OFFSET 8
#endif /* GLIDE3_VERTEX_LAYOUT */
#define GR_VERTEX_SOW_TMU0_OFFSET 9
#define GR_VERTEX_TOW_TMU0_OFFSET 10
#define GR_VERTEX_OOW_TMU0_OFFSET 11
#define GR_VERTEX_SOW_TMU1_OFFSET 12
#define GR_VERTEX_TOW_TMU1_OFFSET 13
#define GR_VERTEX_OOW_TMU1_OFFSET 14
#if (GLIDE_NUM_TMU > 2)
#define GR_VERTEX_SOW_TMU2_OFFSET 15
#define GR_VERTEX_TOW_TMU2_OFFSET 16
#define GR_VERTEX_OOW_TMU2_OFFSET 17
#endif
typedef FxU32 GrLfbSrcFmt_t;
#define GR_LFB_SRC_FMT_565 0x00
#define GR_LFB_SRC_FMT_555 0x01
#define GR_LFB_SRC_FMT_1555 0x02
#define GR_LFB_SRC_FMT_888 0x04
#define GR_LFB_SRC_FMT_8888 0x05
#define GR_LFB_SRC_FMT_565_DEPTH 0x0c
#define GR_LFB_SRC_FMT_555_DEPTH 0x0d
#define GR_LFB_SRC_FMT_1555_DEPTH 0x0e
#define GR_LFB_SRC_FMT_ZA16 0x0f
#define GR_LFB_SRC_FMT_RLE16 0x80
typedef FxI32 GrPassthruMode_t;
#define GR_PASSTHRU_SHOW_VGA 0x0
#define GR_PASSTHRU_SHOW_SST1 0x1
typedef FxU32 GrHint_t;
#define GR_HINTTYPE_MIN 0
#define GR_HINT_STWHINT 0
#define GR_HINT_FIFOCHECKHINT 1
#define GR_HINT_FPUPRECISION 2
#define GR_HINT_ALLOW_MIPMAP_DITHER 3
#define GR_HINT_LFB_WRITE 4
#define GR_HINT_LFB_PROTECT 5
#define GR_HINT_LFB_RESET 6
#define GR_HINTTYPE_MAX GR_HINT_LFB_RESET
#ifdef H3D
#define GR_HINT_H3DENABLE GR_HINTTYPE_MAX
#undef GR_HINTTYPE_MAX
#define GR_HINTTYPE_MAX GR_HIT_H3DENABLE
#endif
typedef FxU32 GrSTWHint_t;
#define GR_STWHINT_W_DIFF_FBI FXBIT(0)
#define GR_STWHINT_W_DIFF_TMU0 FXBIT(1)
#define GR_STWHINT_ST_DIFF_TMU0 FXBIT(2)
#define GR_STWHINT_W_DIFF_TMU1 FXBIT(3)
#define GR_STWHINT_ST_DIFF_TMU1 FXBIT(4)
#define GR_STWHINT_W_DIFF_TMU2 FXBIT(5)
#define GR_STWHINT_ST_DIFF_TMU2 FXBIT(6)
typedef FxU32 GrControl_t;
#define GR_CONTROL_ACTIVATE 0x1
#define GR_CONTROL_DEACTIVATE 0x2
#define GR_CONTROL_RESIZE 0x3
#define GR_CONTROL_MOVE 0x4
#define GR_GENERATE_FIFOCHECK_HINT_MASK(swHWM, swLWM) \
(((swHWM & 0xffff) << 16) | (swLWM & 0xffff))
/*
** -----------------------------------------------------------------------
** FUNCTION PROTOTYPES
** -----------------------------------------------------------------------
*/
#ifndef FX_GLIDE_NO_FUNC_PROTO
/*
** rendering functions
*/
#ifndef GLIDE3_ALPHA
FX_ENTRY void FX_CALL
grDrawPlanarPolygon( int nverts, const int ilist[], const GrVertex vlist[] );
FX_ENTRY void FX_CALL
grDrawPlanarPolygonVertexList( int nverts, const GrVertex vlist[] );
FX_ENTRY void FX_CALL
grDrawPolygon( int nverts, const int ilist[], const GrVertex vlist[] );
FX_ENTRY void FX_CALL
grDrawPolygonVertexList( int nverts, const GrVertex vlist[] );
#endif /* !GLIDE3_ALPHA */
#ifdef GLIDE3
FX_ENTRY void FX_CALL
grDrawPoint( void *pt );
FX_ENTRY void FX_CALL
grDrawLine( void *v1, void *v2 );
FX_ENTRY void FX_CALL
grDrawTriangle( void *a, void *b, void *c );
#else
FX_ENTRY void FX_CALL
grDrawPoint( const GrVertex *pt );
FX_ENTRY void FX_CALL
grDrawLine( const GrVertex *v1, const GrVertex *v2 );
FX_ENTRY void FX_CALL
grDrawTriangle( const GrVertex *a, const GrVertex *b, const GrVertex *c );
#endif
/*
** buffer management
*/
FX_ENTRY void FX_CALL
grBufferClear( GrColor_t color, GrAlpha_t alpha, FxU16 depth );
#ifndef GLIDE3_ALPHA
FX_ENTRY int FX_CALL
grBufferNumPending( void );
#endif /* !GLIDE3_ALPHA */
FX_ENTRY void FX_CALL
grBufferSwap( int swap_interval );
FX_ENTRY void FX_CALL
grRenderBuffer( GrBuffer_t buffer );
/*
** error management
*/
typedef void (*GrErrorCallbackFnc_t)( const char *string, FxBool fatal );
FX_ENTRY void FX_CALL
grErrorSetCallback( GrErrorCallbackFnc_t fnc );
/*
** SST routines
*/
#ifdef GLIDE3
FX_ENTRY void FX_CALL
grFinish(void);
#endif
#if defined(GLIDE3) && defined(GLIDE3_ALPHA)
FX_ENTRY void FX_CALL
grFlush(void);
#endif
#ifndef GLIDE3_ALPHA
FX_ENTRY void FX_CALL
grSstIdle(void);
FX_ENTRY FxU32 FX_CALL
grSstVideoLine( void );
FX_ENTRY FxBool FX_CALL
grSstVRetraceOn( void );
FX_ENTRY FxBool FX_CALL
grSstIsBusy( void );
#endif /* !GLIDE3_ALPHA */
FX_ENTRY FxBool FX_CALL
grSstWinOpen(
FxU32 hWnd,
GrScreenResolution_t screen_resolution,
GrScreenRefresh_t refresh_rate,
GrColorFormat_t color_format,
GrOriginLocation_t origin_location,
int nColBuffers,
int nAuxBuffers);
FX_ENTRY void FX_CALL
grSstWinClose( void );
FX_ENTRY FxBool FX_CALL
grSstControl( FxU32 code );
#ifndef GLIDE3_ALPHA
FX_ENTRY FxBool FX_CALL
grSstQueryHardware( GrHwConfiguration *hwconfig );
FX_ENTRY FxBool FX_CALL
grSstQueryBoards( GrHwConfiguration *hwconfig );
#endif /* !GLIDE3_ALPHA */
FX_ENTRY void FX_CALL
grSstOrigin(GrOriginLocation_t origin);
FX_ENTRY void FX_CALL
grSstSelect( int which_sst );
#ifndef GLIDE3_ALPHA
FX_ENTRY FxU32 FX_CALL
grSstScreenHeight( void );
FX_ENTRY FxU32 FX_CALL
grSstScreenWidth( void );
FX_ENTRY FxU32 FX_CALL
grSstStatus( void );
#endif /* !GLIDE3_ALPHA */
/*
** Drawing Statistics
*/
#ifndef GLIDE3_ALPHA
FX_ENTRY void FX_CALL
grSstPerfStats(GrSstPerfStats_t *pStats);
FX_ENTRY void FX_CALL
grSstResetPerfStats(void);
#endif /* !GLIDE3_ALPHA */
FX_ENTRY void FX_CALL
grResetTriStats();
FX_ENTRY void FX_CALL
grTriStats(FxU32 *trisProcessed, FxU32 *trisDrawn);
/*
** Glide configuration and special effect maintenance functions
*/
FX_ENTRY void FX_CALL
grAlphaBlendFunction(
GrAlphaBlendFnc_t rgb_sf, GrAlphaBlendFnc_t rgb_df,
GrAlphaBlendFnc_t alpha_sf, GrAlphaBlendFnc_t alpha_df
);
FX_ENTRY void FX_CALL
grAlphaCombine(
GrCombineFunction_t function, GrCombineFactor_t factor,
GrCombineLocal_t local, GrCombineOther_t other,
FxBool invert
);
FX_ENTRY void FX_CALL
grAlphaControlsITRGBLighting( FxBool enable );
FX_ENTRY void FX_CALL
grAlphaTestFunction( GrCmpFnc_t function );
FX_ENTRY void FX_CALL
grAlphaTestReferenceValue( GrAlpha_t value );
FX_ENTRY void FX_CALL
grChromakeyMode( GrChromakeyMode_t mode );
FX_ENTRY void FX_CALL
grChromakeyValue( GrColor_t value );
FX_ENTRY void FX_CALL
grClipWindow( FxU32 minx, FxU32 miny, FxU32 maxx, FxU32 maxy );
FX_ENTRY void FX_CALL
grColorCombine(
GrCombineFunction_t function, GrCombineFactor_t factor,
GrCombineLocal_t local, GrCombineOther_t other,
FxBool invert );
FX_ENTRY void FX_CALL
grColorMask( FxBool rgb, FxBool a );
FX_ENTRY void FX_CALL
grCullMode( GrCullMode_t mode );
FX_ENTRY void FX_CALL
grConstantColorValue( GrColor_t value );
FX_ENTRY void FX_CALL
grConstantColorValue4( float a, float r, float g, float b );
FX_ENTRY void FX_CALL
grDepthBiasLevel( FxI16 level );
FX_ENTRY void FX_CALL
grDepthBufferFunction( GrCmpFnc_t function );
FX_ENTRY void FX_CALL
grDepthBufferMode( GrDepthBufferMode_t mode );
FX_ENTRY void FX_CALL
grDepthMask( FxBool mask );
FX_ENTRY void FX_CALL
grDisableAllEffects( void );
FX_ENTRY void FX_CALL
grDitherMode( GrDitherMode_t mode );
FX_ENTRY void FX_CALL
grFogColorValue( GrColor_t fogcolor );
FX_ENTRY void FX_CALL
grFogMode( GrFogMode_t mode );
FX_ENTRY void FX_CALL
grFogTable( const GrFog_t ft[] );
FX_ENTRY void FX_CALL
grGammaCorrectionValue( float value );
#if defined(GLIDE3) && defined(GLIDE3_ALPHA)
FX_ENTRY void FX_CALL
grLoadGammaTable( FxU32 nentries, FxU32 *red, FxU32 *green, FxU32 *blue);
#endif
FX_ENTRY void FX_CALL
grSplash(float x, float y, float width, float height, FxU32 frame);
#ifdef GLIDE3
FX_ENTRY FxBool FX_CALL
grGet( FxU32 pname, FxU32 plength, FxI32 *params );
FX_ENTRY const char * FX_CALL
grGetString( FxU32 pname );
FX_ENTRY FxBool FX_CALL
grReset( FxU32 what );
FX_ENTRY GrProc FX_CALL
grGetProcAddress( char *procName );
FX_ENTRY void FX_CALL
grEnable( GrEnableMode_t mode );
FX_ENTRY void FX_CALL
grDisable( GrEnableMode_t mode );
FX_ENTRY void FX_CALL
grCoordinateSpace( GrCoordinateSpaceMode_t mode );
FX_ENTRY void FX_CALL
grDepthRange( FxFloat n, FxFloat f );
FX_ENTRY void FX_CALL
grViewport( FxI32 x, FxI32 y, FxI32 width, FxI32 height );
#endif
/*
** texture mapping control functions
*/
FX_ENTRY FxU32 FX_CALL
grTexCalcMemRequired(
GrLOD_t lodmin, GrLOD_t lodmax,
GrAspectRatio_t aspect, GrTextureFormat_t fmt);
FX_ENTRY FxU32 FX_CALL
grTexTextureMemRequired( FxU32 evenOdd,
GrTexInfo *info );
FX_ENTRY FxU32 FX_CALL
grTexMinAddress( GrChipID_t tmu );
FX_ENTRY FxU32 FX_CALL
grTexMaxAddress( GrChipID_t tmu );
#if defined(GLIDE3) && defined(GLIDE3_ALPHA)
FX_ENTRY void FX_CALL
grTexNCCTable( GrNCCTable_t table );
#else
FX_ENTRY void FX_CALL
grTexNCCTable( GrChipID_t tmu, GrNCCTable_t table );
#endif
FX_ENTRY void FX_CALL
grTexSource( GrChipID_t tmu,
FxU32 startAddress,
FxU32 evenOdd,
GrTexInfo *info );
FX_ENTRY void FX_CALL
grTexClampMode(
GrChipID_t tmu,
GrTextureClampMode_t s_clampmode,
GrTextureClampMode_t t_clampmode
);
FX_ENTRY void FX_CALL
grTexCombine(
GrChipID_t tmu,
GrCombineFunction_t rgb_function,
GrCombineFactor_t rgb_factor,
GrCombineFunction_t alpha_function,
GrCombineFactor_t alpha_factor,
FxBool rgb_invert,
FxBool alpha_invert
);
#ifndef GLIDE3_ALPHA
FX_ENTRY void FX_CALL
grTexCombineFunction(
GrChipID_t tmu,
GrTextureCombineFnc_t fnc
);
#endif
FX_ENTRY void FX_CALL
grTexDetailControl(
GrChipID_t tmu,
int lod_bias,
FxU8 detail_scale,
float detail_max
);
FX_ENTRY void FX_CALL
grTexFilterMode(
GrChipID_t tmu,
GrTextureFilterMode_t minfilter_mode,
GrTextureFilterMode_t magfilter_mode
);
FX_ENTRY void FX_CALL
grTexLodBiasValue(GrChipID_t tmu, float bias );
FX_ENTRY void FX_CALL
grTexDownloadMipMap( GrChipID_t tmu,
FxU32 startAddress,
FxU32 evenOdd,
GrTexInfo *info );
FX_ENTRY void FX_CALL
grTexDownloadMipMapLevel( GrChipID_t tmu,
FxU32 startAddress,
GrLOD_t thisLod,
GrLOD_t largeLod,
GrAspectRatio_t aspectRatio,
GrTextureFormat_t format,
FxU32 evenOdd,
void *data );
FX_ENTRY void FX_CALL
grTexDownloadMipMapLevelPartial( GrChipID_t tmu,
FxU32 startAddress,
GrLOD_t thisLod,
GrLOD_t largeLod,
GrAspectRatio_t aspectRatio,
GrTextureFormat_t format,
FxU32 evenOdd,
void *data,
int start,
int end );
FX_ENTRY void FX_CALL
ConvertAndDownloadRle( GrChipID_t tmu,
FxU32 startAddress,
GrLOD_t thisLod,
GrLOD_t largeLod,
GrAspectRatio_t aspectRatio,
GrTextureFormat_t format,
FxU32 evenOdd,
FxU8 *bm_data,
long bm_h,
FxU32 u0,
FxU32 v0,
FxU32 width,
FxU32 height,
FxU32 dest_width,
FxU32 dest_height,
FxU16 *tlut);
FX_ENTRY void FX_CALL
grCheckForRoom(FxI32 n);
#if defined(GLIDE3) && defined(GLIDE3_ALPHA)
FX_ENTRY void FX_CALL
grTexDownloadTable( GrTexTable_t type,
void *data );
FX_ENTRY void FX_CALL
grTexDownloadTablePartial( GrTexTable_t type,
void *data,
int start,
int end );
#else
FX_ENTRY void FX_CALL
grTexDownloadTable( GrChipID_t tmu,
GrTexTable_t type,
void *data );
FX_ENTRY void FX_CALL
grTexDownloadTablePartial( GrChipID_t tmu,
GrTexTable_t type,
void *data,
int start,
int end );
#endif
FX_ENTRY void FX_CALL
grTexMipMapMode( GrChipID_t tmu,
GrMipMapMode_t mode,
FxBool lodBlend );
FX_ENTRY void FX_CALL
grTexMultibase( GrChipID_t tmu,
FxBool enable );
FX_ENTRY void FX_CALL
grTexMultibaseAddress( GrChipID_t tmu,
GrTexBaseRange_t range,
FxU32 startAddress,
FxU32 evenOdd,
GrTexInfo *info );
/*
** utility texture functions
*/
#ifndef GLIDE3_ALPHA
FX_ENTRY GrMipMapId_t FX_CALL
guTexAllocateMemory(
GrChipID_t tmu,
FxU8 odd_even_mask,
int width, int height,
GrTextureFormat_t fmt,
GrMipMapMode_t mm_mode,
GrLOD_t smallest_lod, GrLOD_t largest_lod,
GrAspectRatio_t aspect,
GrTextureClampMode_t s_clamp_mode,
GrTextureClampMode_t t_clamp_mode,
GrTextureFilterMode_t minfilter_mode,
GrTextureFilterMode_t magfilter_mode,
float lod_bias,
FxBool trilinear
);
FX_ENTRY FxBool FX_CALL
guTexChangeAttributes(
GrMipMapId_t mmid,
int width, int height,
GrTextureFormat_t fmt,
GrMipMapMode_t mm_mode,
GrLOD_t smallest_lod, GrLOD_t largest_lod,
GrAspectRatio_t aspect,
GrTextureClampMode_t s_clamp_mode,
GrTextureClampMode_t t_clamp_mode,
GrTextureFilterMode_t minFilterMode,
GrTextureFilterMode_t magFilterMode
);
FX_ENTRY void FX_CALL
guTexCombineFunction(
GrChipID_t tmu,
GrTextureCombineFnc_t fnc
);
FX_ENTRY GrMipMapId_t FX_CALL
guTexGetCurrentMipMap( GrChipID_t tmu );
FX_ENTRY GrMipMapInfo * FX_CALL
guTexGetMipMapInfo( GrMipMapId_t mmid );
FX_ENTRY FxU32 FX_CALL
guTexMemQueryAvail( GrChipID_t tmu );
FX_ENTRY void FX_CALL
guTexMemReset( void );
FX_ENTRY void FX_CALL
guTexDownloadMipMap(
GrMipMapId_t mmid,
const void *src,
const GuNccTable *table
);
FX_ENTRY void FX_CALL
guTexDownloadMipMapLevel(
GrMipMapId_t mmid,
GrLOD_t lod,
const void **src
);
FX_ENTRY void FX_CALL
guTexSource( GrMipMapId_t id );
#endif /* !GLIDE3_ALPHA */
/*
** linear frame buffer functions
*/
FX_ENTRY FxBool FX_CALL
grLfbLock( GrLock_t type, GrBuffer_t buffer, GrLfbWriteMode_t writeMode,
GrOriginLocation_t origin, FxBool pixelPipeline,
GrLfbInfo_t *info );
FX_ENTRY FxBool FX_CALL
grLfbUnlock( GrLock_t type, GrBuffer_t buffer );
FX_ENTRY void FX_CALL
grLfbConstantAlpha( GrAlpha_t alpha );
FX_ENTRY void FX_CALL
grLfbConstantDepth( FxU16 depth );
FX_ENTRY void FX_CALL
grLfbWriteColorSwizzle(FxBool swizzleBytes, FxBool swapWords);
FX_ENTRY void FX_CALL
grLfbWriteColorFormat(GrColorFormat_t colorFormat);
#if defined(GLIDE3) && defined(GLIDE3_ALPHA)
FX_ENTRY FxBool FX_CALL
grLfbWriteRegion( GrBuffer_t dst_buffer,
FxU32 dst_x, FxU32 dst_y,
GrLfbSrcFmt_t src_format,
FxU32 src_width, FxU32 src_height,
FxBool pixelPipeline,
FxI32 src_stride, void *src_data );
#else
FX_ENTRY FxBool FX_CALL
grLfbWriteRegion( GrBuffer_t dst_buffer,
FxU32 dst_x, FxU32 dst_y,
GrLfbSrcFmt_t src_format,
FxU32 src_width, FxU32 src_height,
FxI32 src_stride, void *src_data );
#endif
FX_ENTRY FxBool FX_CALL
grLfbReadRegion( GrBuffer_t src_buffer,
FxU32 src_x, FxU32 src_y,
FxU32 src_width, FxU32 src_height,
FxU32 dst_stride, void *dst_data );
/*
** Antialiasing Functions
*/
#ifndef GLIDE3_ALPHA
FX_ENTRY void FX_CALL
grAADrawLine(const GrVertex *v1, const GrVertex *v2);
FX_ENTRY void FX_CALL
grAADrawPoint(const GrVertex *pt );
FX_ENTRY void FX_CALL
grAADrawPolygon(const int nverts, const int ilist[], const GrVertex vlist[]);
FX_ENTRY void FX_CALL
grAADrawPolygonVertexList(const int nverts, const GrVertex vlist[]);
#endif /* !GLIDE3_ALPHA */
FX_ENTRY void FX_CALL
grAADrawTriangle(
const GrVertex *a, const GrVertex *b, const GrVertex *c,
FxBool ab_antialias, FxBool bc_antialias, FxBool ca_antialias
);
/*
** glide management functions
*/
FX_ENTRY void FX_CALL
grGlideInit( void );
FX_ENTRY void FX_CALL
grGlideShutdown( void );
#ifndef GLIDE3_ALPHA
FX_ENTRY void FX_CALL
grGlideGetVersion( char version[80] );
#endif /* !GLIDE3_ALPHA */
FX_ENTRY void FX_CALL
grGlideGetState( GrState *state );
FX_ENTRY void FX_CALL
grGlideSetState( const GrState *state );
#ifndef GLIDE3_ALPHA
FX_ENTRY void FX_CALL
grGlideShamelessPlug(const FxBool on);
FX_ENTRY void FX_CALL
grHints(GrHint_t hintType, FxU32 hintMask);
#endif /* !GLIDE3_ALPHA */
#ifdef GLIDE3
FX_ENTRY void FX_CALL
grVertexLayout(FxU32 param, FxI32 offset, FxU32 mode);
FX_ENTRY void FX_CALL
grDrawVertexArray(FxU32 mode, FxU32 Count, void *pointers);
FX_ENTRY void FX_CALL
grDrawVertexArrayLinear(FxU32 mode, FxU32 Count, void *pointers, FxU32 stride);
FX_ENTRY void FX_CALL
grDrawVertexArrayLinear(FxU32 mode, FxU32 Count, void *pointers, FxU32 stride);
#endif
#endif /* FX_GLIDE_NO_FUNC_PROTO */
#ifdef __cplusplus
}
#endif
#include "sdk2_glideutl.h"
#endif /* __GLIDE_H__ */