/************************************************************************** *************************************************************************** * * Copyright (c) 1997, Cirrus Logic, Inc. * All Rights Reserved * * FILE: l3system.h * * DESCRIPTION: 546X 3D engine defines and structures * * AUTHOR: Goran Devic, Mark Einkauf * * REVISION HISTORY: * * $Log: W:/log/laguna/ddraw/inc/l3system.h $ * * Rev 1.4 01 Jul 1997 09:58:18 einkauf * * add dither x,y offsets, to fix bexact.c OpenGL conformance test * * Rev 1.3 08 Apr 1997 12:42:14 einkauf * cleanup TSystem struct; misc to complete MCD code * * Rev 1.2 05 Mar 1997 02:32:02 KENTL * * Attempted to merge Rev 1.0 with Rev 1.1. The most recent check-in was * severely incompatible with the Win95 build of DirectDraw. For some reason, * only a tiny section of this file is used or even compatible with the * Win95 build. Revision 1.0 had vast sections of the file commented out. * Apparently, those sections are required for the WinNT build. I wrapped * those sections in a couple of huge #ifdef WINNT_VER40, but I haven't * tested this in an NT build. It seems to work for Win95, though. * * Rev 1.0 25 Nov 1996 15:00:40 RUSSL * Initial revision. * **************************************************************************** ***************************************************************************/ #ifndef _L3SYSTEM_H_ #define _L3SYSTEM_H_ #ifdef WINNT_VER40 #define OPENGL_MCD /********************************************************************* * Include types and debug info **********************************************************************/ #ifndef OPENGL_MCD // LL3D's type.h redundant with basic type definitions in other DDK/msdev headers #include "type.h" #endif // ndef OPENGL_MCD #include "l3d.h" #define TRUE 1 #define FALSE 0 /********************************************************************* * Local Variables and defines **********************************************************************/ #define KB 1024 // Defines a kilobyte #define MAX_DL_SIZE (512 * KB) // Maximum size of display list #define NUM_DL 2 // Number of display lists #define NUM_BUFFERS 32 // Number of allocation buffers; // video, system memory and user #define NUM_TEXTURES 512 // Number of textures #define NUM_TEX_MEM 4 // Number of system texture memory // chunks (each chunk is 4Mb) #define EXTRA_FRACT 4 // Texture params functions may use // some extra bit for precision // MCD_TEMP - support for temporary dlist of 2K only #define SIZE_TEMP_DL 2048 #define DL_START_OFFSET 20 /********************************************************************* * Buffer flags in LL_State structure (dont change!) **********************************************************************/ #define BUFFER_IN_RDRAM 0 #define BUFFER_IN_SYSTEM 1 #define Z_BUFFER 2 #define BUFFER_USER 4 #define BUFFER_FREE 0x80000000 /********************************************************************* * Textures flags in LL_State structure (dont change!) **********************************************************************/ #define TEX_FREE 0x80000000 // Free slot for the texture #define TEX_NOT_LOADED 0x40000000 // Texture just registered #define TEX_IN_SYSTEM 0x20000000 // Currently located in system mem #define TEX_TILED 0x10000000 // Texture is in tiled form #define TEX_LOCKED 0x08000000 // Texture is locked #define TEX_MAX_PRIORITY 0xfffffffe // Priority level #define TEX_DEFAULT_PRIORITY 1 // Default texture priority level /********************************************************************* * * Registers in the form suitable for adding to a pointer to a * double word. * **********************************************************************/ /////////////////////////////////////////////////////// // 3D Rendering Registers // /////////////////////////////////////////////////////// #define X_3D (0x4000/4) #define Y_3D (0x4004/4) #define R_3D (0x4008/4) #define G_3D (0x400C/4) #define B_3D (0x4010/4) #define DX_MAIN_3D (0x4014/4) #define Y_COUNT_3D (0x4018/4) #define WIDTH1_3D (0x401C/4) #define WIDTH2_3D (0x4020/4) #define DWIDTH1_3D (0x4024/4) #define DWIDTH2_3D (0x4028/4) #define DR_MAIN_3D (0x402C/4) #define DG_MAIN_3D (0x4030/4) #define DB_MAIN_3D (0x4034/4) #define DR_ORTHO_3D (0x4038/4) #define DG_ORTHO_3D (0x403C/4) #define DB_ORTHO_3D (0x4040/4) #define Z_3D (0x4044/4) #define DZ_MAIN_3D (0x4048/4) #define DZ_ORTHO_3D (0x404C/4) #define V_3D (0x4050/4) #define U_3D (0x4054/4) #define DV_MAIN_3D (0x4058/4) #define DU_MAIN_3D (0x405C/4) #define DV_ORTHO_3D (0x4060/4) #define DU_ORTHO_3D (0x4064/4) #define D2V_MAIN_3D (0x4068/4) #define D2U_MAIN_3D (0x406C/4) #define D2V_ORTHO_3D (0x4070/4) #define D2U_ORTHO_3D (0x4074/4) #define DV_ORTHO_ADD_3D (0x4078/4) #define DU_ORTHO_ADD_3D (0x407C/4) #define A_3D (0x40C0/4) #define DA_MAIN_3D (0x40C4/4) #define DA_ORTHO_3D (0x40C8/4) /////////////////////////////////////////////////////// // 3D Control registers // /////////////////////////////////////////////////////// #define CONTROL_MASK_3D (0x4100/4) #define CONTROL0_3D (0x4104/4) #define COLOR_MIN_BOUNDS_3D (0x4108/4) #define COLOR_MAX_BOUNDS_3D (0x410C/4) #define CONTROL1_3D (0x4110/4) #define BASE0_ADDR_3D (0x4114/4) #define BASE1_ADDR_3D (0x4118/4) #define TX_CTL0_3D (0x4120/4) #define TX_XYBASE_3D (0x4124/4) #define TX_CTL1_3D (0x4128/4) #define TX_CTL2_3D (0x412C/4) #define COLOR0_3D (0x4130/4) #define COLOR1_3D (0x4134/4) #define Z_COLLIDE_3D (0x4138/4) #define STATUS0_3D (0x413C/4) #define PATTERN_RAM_0_3D (0x4140/4) #define PATTERN_RAM_1_3D (0x4144/4) #define PATTERN_RAM_2_3D (0x4148/4) #define PATTERN_RAM_3_3D (0x414C/4) #define PATTERN_RAM_4_3D (0x4150/4) #define PATTERN_RAM_5_3D (0x4154/4) #define PATTERN_RAM_6_3D (0x4158/4) #define PATTERN_RAM_7_3D (0x415C/4) #define X_CLIP_3D (0x4160/4) #define Y_CLIP_3D (0x4164/4) #define TEX_SRAM_CTRL_3D (0x4168/4) /////////////////////////////////////////////////////// // HostXY Unit Registers - Must use WRITE_DEV_REGS // /////////////////////////////////////////////////////// #define HXY_BASE0_ADDRESS_PTR_3D (0x4200/4) #define HXY_BASE0_START_XY_3D (0x4204/4) #define HXY_BASE0_EXTENT_XY_3D (0x4208/4) #define HXY_BASE1_ADDRESS_PTR_3D (0x4210/4) #define HXY_BASE1_OFFSET0_3D (0x4214/4) #define HXY_BASE1_OFFSET1_3D (0x4218/4) #define HXY_BASE1_LENGTH_3D (0x421C/4) #define HXY_HOST_CTRL_3D (0x4240/4) #define MAILBOX0_3D (0x4260/4) #define MAILBOX1_3D (0x4264/4) #define MAILBOX2_3D (0x4268/4) #define MAILBOX3_3D (0x426C/4) /////////////////////////////////////////////////////// // The 3D Prefetch Unit Registers // /////////////////////////////////////////////////////// #define PF_BASE_ADDR_3D (0x4400/4) #define PF_CTRL_3D (0x4404/4) #define PF_DEST_ADDR_3D (0x4408/4) #define PF_FB_SEG_3D (0x440C/4) #define PF_INST_ADDR_3D (0x4420/4) #define PF_STATUS_3D (0x4424/4) #define HOST_MASTER_CTRL_3D (0x4440/4) #define PF_INST_3D (0x4480/4) #define HOST_3D_DATA_PORT (0x4800/4) /********************************************************************* * * Device select for the WRITE_DEV_REGS instruction * **********************************************************************/ #define VGAMEM (0x00000000 << 21) #define VGAFB (0x00000001 << 21) #define VPORT (0x00000002 << 21) #define LPB (0x00000003 << 21) #define MISC (0x00000004 << 21) #define ENG2D (0x00000005 << 21) #define HD (0x00000006 << 21) #define FB (0x00000007 << 21) #define ROM (0x00000008 << 21) #define ENG3D (0x00000009 << 21) #define HOST_XY (0x0000000A << 21) #define HDATA_3D (0x0000000B << 21) #endif // WINNT_VER40 /********************************************************************* * * Laguna 3D Micro Instruction Set * **********************************************************************/ #define OPCODE_MASK 0xF8000000 #define POINT 0x00000000 #define LINE 0x08000000 #define POLY 0x10000000 #define WRITE_REGISTER 0x18000000 #define READ_REGISTER 0x20000000 #define WRITE_DEV_REGS 0x28000000 #define READ_DEV_REGS 0x30000000 #define BRANCH 0x38000000 #define C_BRANCH 0x40000000 #define NC_BRANCH 0x48000000 #define CALL 0x50000000 #define WRITE_DEST_ADDR 0x58000000 #define IDLE 0x68000000 #define CLEAR 0x69400000 #define WAIT 0x72000000 #define WAIT_AND 0x72000000 #define NWAIT_AND 0x73000000 #define WAIT_OR 0x70000000 #define NWAIT_OR 0x71000000 #define CLEAR_INT 0x78000000 #define SET_INT 0x7A000000 #define TEST 0x80000000 #define TEST_AND 0x82000000 #define NTEST_AND 0x83000000 #define TEST_OR 0x80000000 #define NTEST_OR 0x81000000 #define WRITE_PREFETCH_CONTROL 0x88000000 #ifdef WINNT_VER40 // Not WINNT_VER40 /********************************************************************* * * Prefetch status flags (Almost the same as events) * **********************************************************************/ #define ST_VBLANK 0x00000001 #define ST_EVSYNC 0x00000002 #define ST_LINE_COMPARE 0x00000004 #define ST_BUFFER_SWITCH 0x00000008 #define ST_Z_BUFFER_COMPARE 0x00000010 #define ST_POLY_ENG_BUSY 0x00000020 #define ST_EXEC_ENG_3D_BUSY 0x00000040 #define ST_XY_ENG_BUSY 0x00000080 #define ST_BLT_ENG_BUSY 0x00000100 #define ST_BLT_WF_EMPTY 0x00000200 #define ST_DL_READY_STATUS 0x00000400 /********************************************************************* * * Defines for pixel modes (Control0 register) * **********************************************************************/ #define PIXEL_MODE_INDEXED 0 #define PIXEL_MODE_332 1 #define PIXEL_MODE_565 2 #define PIXEL_MODE_555 3 #define PIXEL_MODE_A888 4 #define PIXEL_MODE_Z888 5 /********************************************************************* * * Macros for building the instruction opcodes * **********************************************************************/ //#define make_point( imodif, count ) (POINT | imodif | count) #define mk_reg( reg ) (((reg)-0x1000) << 6) #define mk_dev_reg( reg ) ((((reg)-0x1080)*4) << 6) #define write_register( reg, count ) \ ( WRITE_REGISTER | mk_reg(reg) | count ) #define write_dev_register( device, reg, count ) \ ( WRITE_DEV_REGS | device | mk_dev_reg(reg) | count ) // Set the register and the cache in LL_State to a specific value #define SETREG(Offset,Reg,Value) \ *(ppdev->LL_State.pRegs + (Offset)) = ppdev->LL_State.Reg = (Value); /*inp(0x80); inp(0x80)*/ // setreg, no cache: do not cache state for this register #define SETREG_NC(reg, value) \ (*(ppdev->LL_State.pRegs + reg) = value); /*inp(0x80); inp(0x80)*/ // Clears the range of registers #define CLEAR_RANGE( StartReg, EndReg ) \ memset( (void *)(ppdev->LL_State.pRegs + (StartReg)), 0, ((EndReg) - (StartReg)+1)*4 ) #ifndef OPENGL_MCD // The polling for the 3d engine busy bit is done inline to avoid Watcom // optimization of accessing a byte instead of a dword of that register. // #pragma aux Poll3DEngineBusy = \ "lp: test dword ptr [eax], 2" \ " jnz lp" \ parm caller [eax]; #endif // ndef OPENGL_MCD // Instruction modifier set // #define STALL 0x04000000 #define GOURAUD 0x00001000 #define Z_ON 0x00002000 #define SAME_COLOR 0x00008000 #define TEXTURE_LINEAR 0x00020000 #define TEXTURE_PERSPECTIVE 0x00030000 #define LIGHTING 0x00040000 #define STIPPLE 0x00080000 #define PATTERN 0x00100000 #define DITHER 0x00200000 #define ALPHA 0x00400000 #define FETCH_COLOR 0x00800000 #define WARP_MODE 0x01000000 #define MODIFIER_EXPANSION 0x02000000 /********************************************************************* * * Speed / Quality decision values * **********************************************************************/ #define LLQ_POLY_SUBPIXEL 192 // When poly param will use fp / subpixels #define LLQ_POLY_FLOAT 64 // Polys start to use fp #define LLQ_LINE_SUBPIXEL 128 // When lines will consider subpixel addressing /********************************************************************* * * Control0_3d register bitfields * **********************************************************************/ typedef struct { DWORD Pixel_Mode : 3; // Color frame buffer drawing mode DWORD Res1 : 1; // Reserved DWORD Pixel_Mask_Enable : 1; // Enables pixel masking DWORD Pixel_Mask_Polarity : 1; // Polarity of the pixel masks DWORD Color_Saturate_En : 1; // Enables saturation in indexed mode DWORD Red_Color_Compare_En : 1; // Enables compare to bounds for red DWORD Green_Color_Compare_En: 1; // Enables compare to bounds for green DWORD Blue_Color_Compare_En : 1; // Enables compare to bounds for blue DWORD Color_Compare_Mode : 1; // Mask inclusive/exclusive to bounds DWORD Alpha_Mode : 2; // Selects alpha blending mode DWORD Alpha_Dest_Color_Sel : 2; // Selects the DEST_RGB input to alpha DWORD Alpha_Blending_Enable : 1; // Enables alpha blending DWORD Z_Stride_Control : 1; // 16/8 bit Z depth DWORD Frame_Scaling_Enable : 1; // Enables frame scaling (multiply src*dest) DWORD Res2 : 2; // Reserved DWORD Z_Compare_Mode : 4; // Different Z compare function DWORD Z_Collision_Detect_En : 1; // Enables Z collision detection DWORD Light_Src_Sel : 2; // Selects the lighting source input DWORD Res3 : 1; // Reserved DWORD Z_Mode : 3; // Controls Z and color update method DWORD Res4 : 1; // Reserved } TControl0Reg; /********************************************************************* * * Base0_addr_3d register bitfields * **********************************************************************/ typedef struct { DWORD Res1 : 6; // Reserved DWORD Color_Buffer_X_Offset : 7; // Offset to color buffer X address DWORD Color_Buffer_Location : 1; // For drawing: 0-rdram, 1-host DWORD Z_Buffer_Location : 1; // For drawing: 0-rdram, 1-host DWORD Texture_Location : 1; // For drawing: 0-rdram, 1-host DWORD Pattern_Y_Offset : 4; // Pattern lookup offset for y address DWORD Res2 : 4; // Reserved DWORD Pattern_X_Offset : 4; // Pattern lookup offset for x address DWORD Res3 : 4; // Reserved } TBase0Reg; /********************************************************************* * * Base1_addr_3d register bitfields * **********************************************************************/ typedef struct { DWORD Res1 : 5; // Reserved DWORD Color_Buffer_Y_Offset : 8; // Y offset from the color space Y base DWORD Res2 : 8; // Reserved DWORD Z_Buffer_Y_Offset : 8; // Y offset from the color space Y base DWORD Res3 : 3; // Reserved } TBase1Reg; /********************************************************************* * * Tx_Ctl0_3d register bitfields * **********************************************************************/ #define TX_CTL0_MASK (~0x0C08F000)// All the reserved bits typedef struct { DWORD Tex_U_Address_Mask : 3; // Texture width (U space) DWORD Tex_U_Ovf_Sat_En : 1; // Texture saturation enable for U DWORD Tex_V_Address_Mask : 3; // Texture height (V space) DWORD Tex_V_Ovf_Sat_En : 1; // Texture saturation enable for V DWORD Texel_Mode : 4; // Texture type DWORD Res1 : 4; // Reserved DWORD Texel_Lookup_En : 1; // Use texel data as lookup index DWORD Tex_As_Src : 1; // Specifies texture as source DWORD Fil_Tex_En : 1; // Enables filtering DWORD Res2 : 1; // Reserved DWORD Tex_Mask_Polarity : 1; // Polarity of the masking bit DWORD Tex_Mask_Enable : 1; // Enables texture masking DWORD Tex_Mask_Function : 1; // Texture masking function DWORD UV_Precision : 1; // UV_Precision 8.24 DWORD Address_Mux : 2; // Texel UV Mux Select DWORD Res4 : 2; // Reserved DWORD CLUT_Offset : 4; // Color Lookup Table offset for 4, 8 bpp } TTxCtl0Reg; /********************************************************************* * * Tx_Ctl1_3d register bitfields * **********************************************************************/ typedef struct { DWORD Tex_Min_Blue_Color : 8; DWORD Tex_Min_Green_Color : 8; DWORD Tex_Min_Red_Color : 8; DWORD Tex_Red_Color_Compare : 1; DWORD Tex_Green_Color_Compare : 1; DWORD Tex_Blue_Color_Compare : 1; DWORD Tex_Color_Compare_Mode : 1; DWORD Res : 4; } TTxCtl1Reg; /********************************************************************* * * Tx_Ctl2_3d register bitfields * **********************************************************************/ typedef struct { DWORD Tex_Max_Blue_Color : 8; DWORD Tex_Max_Green_Color : 8; DWORD Tex_Max_Red_Color : 8; DWORD Tex_Fraction_Mask : 3; DWORD En_Cont_Bilinear : 1; DWORD En_Step_Bilinear : 1; DWORD Mask_Threshold : 3; } TTxCtl2Reg; /********************************************************************* * * Tx_XYBase_3d register bitfields * **********************************************************************/ typedef struct { WORD Tex_X_Base_Addr; // Texture base X coordinate WORD Tex_Y_Base_Addr; // Texture base Y coordinate } TTxXYBaseReg; /********************************************************************* * * HXY_Host_Ctrl_3d register bitfields * **********************************************************************/ typedef struct { DWORD HostXYEnable : 1; // Host XY enable bit DWORD Res1 : 7; // Reserved DWORD HostYPitch : 6; // Host Y Pitch of the system DWORD Res2 : 18; // Reserved } THXYHostCtrlReg; /********************************************************************* * * TMem structure defines a memory block * **********************************************************************/ typedef struct { DWORD hMem; // Memory handle DWORD *dwAddress; // Linear address DWORD dwSize; // Size of the buffer DWORD dwPhyPtr; // Physical / page table address } TMem; /********************************************************************* * * Buffer information structure (buffers A, B, Z, ...) * **********************************************************************/ typedef struct { DWORD dwFlags; // Buffer flags DWORD dwAddress; // Buffer start byte address (absolute linear) DWORD dwPhyAdr; // Buffer physical address (system) DWORD dwPitchCode; // Pitch code of a buffer (system) DWORD dwPitchBytes; // Pitch of a buffer in bytes DWORD hMem; // Internal memory handle (system) LL_Rect Extent; // Buffer location offsets (video) } TBuffer; /********************************************************************* * * TDisplayList structure defines a display list. * **********************************************************************/ typedef struct { // pdwNext points to the next available location within this // display list to fill in the Laguna instruction. // It is used for parametarization routines that postincrement // this variable. // DWORD *pdwNext; // Memory handle for this display list as optained from the // internal memory allocation function // DWORD hMem; // Linear address of the display list // DWORD *pdwLinPtr; // Linear address of the display list // DWORD *pdwStartOutPtr; //ME - next word to be output // Physical address for a display list is next; it may also // be the address to the page table. This address has the // appropriate format to be stored in the BASE* class registers // DWORD dwPhyPtr; // The length of a display list in bytes // DWORD dwLen; // Safety margin for building the display list // DWORD dwMargin; } TDisplayList; /********************************************************************* * * TTextureState structure defines a texture state * **********************************************************************/ typedef struct { LL_Texture Tex[ NUM_TEXTURES ]; // Array of texture information TMem Mem[ NUM_TEX_MEM ]; // Allocated memory information DWORD dwMemBlocks; // Number of Mem entries used LL_Texture *pLastTexture; // Used to cache textures } TTextureState; /********************************************************************* * * TTextureRegs structure defines a texture registers * **********************************************************************/ typedef struct { DWORD dv_main; DWORD du_main; DWORD dv_ortho; DWORD du_ortho; DWORD d2v_main; DWORD d2u_main; DWORD d2v_ortho; DWORD d2u_ortho; DWORD dv_ortho_add; DWORD du_ortho_add; } TTextureRegs; /********************************************************************* * * System State Structure * **********************************************************************/ typedef struct { DWORD rColor_Min_Bounds; // Color compare min bounds DWORD rColor_Max_Bounds; // Color compare max bounds DWORD AlphaConstSource; // Constant source alpha (9:16) DWORD AlphaConstDest; // Constant destination alpha (9:16) // Display lists management TDisplayList DL[ NUM_DL ]; // Array of d-list segments TDisplayList *pDL; // Current display list to build DWORD dwCdl; // Index of the current d-list // Information from the init / current graphics mode DWORD *pRegs; // Register apperture BYTE *pFrame; // Frame apperture unsigned int pattern_ram_state; LL_Pattern dither_array; WORD dither_x_offset; WORD dither_y_offset; } TSystem; typedef struct // MOUSE header structure { WORD wX_Position; WORD wY_Position; WORD wStatus; //assigned to NEED_MOUSE_UPDATE or MOUSE_IS_UPDATED } TMouseInfo; extern void _TriFillTex( int right2left, int hiprecision_2ndorder, TTextureRegs * r, TEXTURE_VERTEX *vmin, TEXTURE_VERTEX *vmid, TEXTURE_VERTEX *vmax, float frecip_vm_y, float frecip_del_x_mid ); void _RunLaguna( ); #ifndef OPENGL_MCD // from here down, structs are more specific to LL3D /********************************************************************* * Global Variables **********************************************************************/ extern TSystem LL_State; extern TMouseInfo LL_MouseInfo; /********************************************************************* * External Functions **********************************************************************/ extern BYTE * GetLagunaApperture( int base ); /********************************************************************* * From PAGETBL.C: **********************************************************************/ extern DWORD AllocSystemMemory( DWORD dwSize ); extern void FreeSystemMemory( DWORD hHandle ); extern DWORD GetLinearAddress( DWORD hHandle ); extern DWORD GetPhysicalAddress( DWORD hHandle ); extern DWORD * GetRegisterApperture(); /********************************************************************* * Extern functions: l3d.c, control.c, points.c, lines.c, polys.c **********************************************************************/ extern DWORD * fnInvalidOp( DWORD *, LL_Batch * ); extern DWORD * fnNop( DWORD *, LL_Batch * ); extern DWORD * fnPoint( DWORD *, LL_Batch * ); extern DWORD * fnAALine( DWORD *, LL_Batch * ); extern DWORD * fnLine( DWORD *, LL_Batch * ); extern DWORD * fnPoly( DWORD *, LL_Batch * ); extern DWORD * fnNicePoly( DWORD *, LL_Batch * ); extern DWORD * fnPolyFast( DWORD *, LL_Batch * ); extern DWORD * fnSetClipRegion( DWORD *, LL_Batch * ); extern DWORD * fnSetZBuffer( DWORD *, LL_Batch * ); extern DWORD * fnSetZCompareMode( DWORD *, LL_Batch * ); extern DWORD * fnSetZMode( DWORD *, LL_Batch * ); extern DWORD * fnSetAlphaMode( DWORD *, LL_Batch * ); extern DWORD * fnSetAlphaDestColor( DWORD *, LL_Batch * ); extern DWORD * fnSetLightingSource( DWORD *, LL_Batch * ); extern DWORD * fnSetColor0( DWORD *, LL_Batch * ); extern DWORD * fnSetColor1( DWORD *, LL_Batch * ); extern DWORD * fnSetConstantAlpha( DWORD *, LL_Batch * ); extern DWORD * fnSetPattern(DWORD *dwNext, LL_Batch *pBatch); extern DWORD * fnQuality( DWORD *, LL_Batch * ); extern DWORD * fnSetTextureColorBounds( DWORD *, LL_Batch * ); extern DWORD * fnSetDestColorBounds( DWORD *, LL_Batch * ); extern void LL_ControlInit(); extern void _ShutDown( char * szMsg, ... ); /********************************************************************* * From displist.c **********************************************************************/ extern DWORD * (* fnList[256])( DWORD *, LL_Batch * ); extern DWORD * _RunLaguna( DWORD *pdwNext ); /********************************************************************* * From textures.c **********************************************************************/ extern int _InitTextures(); extern void _CloseTextures(); /********************************************************************* * From mem.c **********************************************************************/ extern void _InitKmem( BYTE *, DWORD ); extern DWORD * _kmalloc( const DWORD * pBlock, int ); extern void _kfree( const DWORD * pBlock, void * ); /********************************************************************* * From texparm.c **********************************************************************/ typedef union { float f; long i; } PTEXTURE; #define CGL_XYZ DWORD extern void _TriFillTex( int dir_flag, int dx_main, TTextureRegs * r, #ifdef B4_PERF LL_Vert * vmin, LL_Vert * vmid, LL_Vert * vmax, #else CGL_XYZ *pV1, PTEXTURE *pT1, CGL_XYZ *pV2, PTEXTURE *pT2, CGL_XYZ *pV3, PTEXTURE *pT3, #endif int recip_vm_y, int recip_vd_y, int del_x_mid ); /********************************************************************* * * Debug defines that are used to determine the specific file * for inclusion of debug information. For definition, see makefile. * **********************************************************************/ #define DEBUG_L3D 0x0001 /* Enable debug info in L3d.c */ #define DEBUG_PAGETBL 0x0002 /* Enable debug info in pagetbl.c */ #define DEBUG_CONTROL 0x0004 /* Enable debug info in control.c */ #define DEBUG_MEM 0x0008 /* Enable debug info in mem.c */ #define DEBUG_TEX 0x0010 /* Enable debug info in textures.c */ #define DEBUG_PCX 0x0020 /* Enable debug info in pcx.c */ #define DEBUG_BUFFERS 0x0040 /* Enable debug info in buffers.c */ #ifdef CGL // added for CGL DLL #define L3D_MALLOC dpmiAlloc #define L3D_FREE dpmiFree #else #define L3D_MALLOC malloc #define L3D_FREE free #endif #endif // ndef OPENGL_MCD #endif // _L3SYSTEM_H_ #endif // WINNT_VER40