CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!
CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!
Path: blob/master/GPU/ge_constants.h
Views: 1401
// Copyright (c) 2012- PPSSPP Project.12// This program is free software: you can redistribute it and/or modify3// it under the terms of the GNU General Public License as published by4// the Free Software Foundation, version 2.0 or later versions.56// This program is distributed in the hope that it will be useful,7// but WITHOUT ANY WARRANTY; without even the implied warranty of8// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the9// GNU General Public License 2.0 for more details.1011// A copy of the GPL 2.0 should have been included with the program.12// If not, see http://www.gnu.org/licenses/1314// Official git repository and contact information can be found at15// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.1617#pragma once1819#include <cstdint>2021enum GECommand {22GE_CMD_NOP = 0,23GE_CMD_VADDR = 0x1,24GE_CMD_IADDR = 0x2,25GE_CMD_PRIM = 0x4,26GE_CMD_BEZIER = 0x5,27GE_CMD_SPLINE = 0x6,28GE_CMD_BOUNDINGBOX = 0x7,29GE_CMD_JUMP = 0x8,30GE_CMD_BJUMP = 0x9,31GE_CMD_CALL = 0xA,32GE_CMD_RET = 0xB,33GE_CMD_END = 0xC,34GE_CMD_SIGNAL = 0xE,35GE_CMD_FINISH = 0xF,36GE_CMD_BASE = 0x10,37GE_CMD_VERTEXTYPE = 0x12,38GE_CMD_OFFSETADDR = 0x13,39GE_CMD_ORIGIN = 0x14,40GE_CMD_REGION1 = 0x15,41GE_CMD_REGION2 = 0x16,42GE_CMD_LIGHTINGENABLE = 0x17,43GE_CMD_LIGHTENABLE0 = 0x18,44GE_CMD_LIGHTENABLE1 = 0x19,45GE_CMD_LIGHTENABLE2 = 0x1A,46GE_CMD_LIGHTENABLE3 = 0x1B,47GE_CMD_DEPTHCLAMPENABLE = 0x1C,48GE_CMD_CULLFACEENABLE = 0x1D,49GE_CMD_TEXTUREMAPENABLE = 0x1E,50GE_CMD_FOGENABLE = 0x1F,51GE_CMD_DITHERENABLE = 0x20,52GE_CMD_ALPHABLENDENABLE = 0x21,53GE_CMD_ALPHATESTENABLE = 0x22,54GE_CMD_ZTESTENABLE = 0x23,55GE_CMD_STENCILTESTENABLE = 0x24,56GE_CMD_ANTIALIASENABLE = 0x25,57GE_CMD_PATCHCULLENABLE = 0x26,58GE_CMD_COLORTESTENABLE = 0x27,59GE_CMD_LOGICOPENABLE = 0x28,60GE_CMD_BONEMATRIXNUMBER = 0x2A,61GE_CMD_BONEMATRIXDATA = 0x2B,62GE_CMD_MORPHWEIGHT0 = 0x2C,63GE_CMD_MORPHWEIGHT1 = 0x2D,64GE_CMD_MORPHWEIGHT2 = 0x2E,65GE_CMD_MORPHWEIGHT3 = 0x2F,66GE_CMD_MORPHWEIGHT4 = 0x30,67GE_CMD_MORPHWEIGHT5 = 0x31,68GE_CMD_MORPHWEIGHT6 = 0x32,69GE_CMD_MORPHWEIGHT7 = 0x33,70GE_CMD_PATCHDIVISION = 0x36,71GE_CMD_PATCHPRIMITIVE = 0x37,72GE_CMD_PATCHFACING = 0x38,73GE_CMD_WORLDMATRIXNUMBER = 0x3A,74GE_CMD_WORLDMATRIXDATA = 0x3B,75GE_CMD_VIEWMATRIXNUMBER = 0x3C,76GE_CMD_VIEWMATRIXDATA = 0x3D,77GE_CMD_PROJMATRIXNUMBER = 0x3E,78GE_CMD_PROJMATRIXDATA = 0x3F,79GE_CMD_TGENMATRIXNUMBER = 0x40,80GE_CMD_TGENMATRIXDATA = 0x41,81GE_CMD_VIEWPORTXSCALE = 0x42,82GE_CMD_VIEWPORTYSCALE = 0x43,83GE_CMD_VIEWPORTZSCALE = 0x44,84GE_CMD_VIEWPORTXCENTER = 0x45,85GE_CMD_VIEWPORTYCENTER = 0x46,86GE_CMD_VIEWPORTZCENTER = 0x47,87GE_CMD_TEXSCALEU = 0x48,88GE_CMD_TEXSCALEV = 0x49,89GE_CMD_TEXOFFSETU = 0x4A,90GE_CMD_TEXOFFSETV = 0x4B,91GE_CMD_OFFSETX = 0x4C,92GE_CMD_OFFSETY = 0x4D,93GE_CMD_SHADEMODE = 0x50, // flat or gouraud94GE_CMD_REVERSENORMAL = 0x51,95GE_CMD_MATERIALUPDATE = 0x53,96GE_CMD_MATERIALEMISSIVE = 0x54, //not sure about these but this makes sense97GE_CMD_MATERIALAMBIENT = 0x55, //gotta try enabling lighting and check :)98GE_CMD_MATERIALDIFFUSE = 0x56,99GE_CMD_MATERIALSPECULAR = 0x57,100GE_CMD_MATERIALALPHA = 0x58,101GE_CMD_MATERIALSPECULARCOEF = 0x5B,102GE_CMD_AMBIENTCOLOR = 0x5C,103GE_CMD_AMBIENTALPHA = 0x5D,104GE_CMD_LIGHTMODE = 0x5E,105GE_CMD_LIGHTTYPE0 = 0x5F,106GE_CMD_LIGHTTYPE1 = 0x60,107GE_CMD_LIGHTTYPE2 = 0x61,108GE_CMD_LIGHTTYPE3 = 0x62,109GE_CMD_LX0 = 0x63,110GE_CMD_LY0,111GE_CMD_LZ0,112GE_CMD_LX1,113GE_CMD_LY1,114GE_CMD_LZ1,115GE_CMD_LX2,116GE_CMD_LY2,117GE_CMD_LZ2,118GE_CMD_LX3,119GE_CMD_LY3,120GE_CMD_LZ3,121GE_CMD_LDX0 = 0x6F,122GE_CMD_LDY0,123GE_CMD_LDZ0,124GE_CMD_LDX1,125GE_CMD_LDY1,126GE_CMD_LDZ1,127GE_CMD_LDX2,128GE_CMD_LDY2,129GE_CMD_LDZ2,130GE_CMD_LDX3,131GE_CMD_LDY3,132GE_CMD_LDZ3,133GE_CMD_LKA0 = 0x7B,134GE_CMD_LKB0,135GE_CMD_LKC0,136GE_CMD_LKA1,137GE_CMD_LKB1,138GE_CMD_LKC1,139GE_CMD_LKA2,140GE_CMD_LKB2,141GE_CMD_LKC2,142GE_CMD_LKA3,143GE_CMD_LKB3,144GE_CMD_LKC3,145GE_CMD_LKS0 = 0x87,146GE_CMD_LKS1,147GE_CMD_LKS2,148GE_CMD_LKS3,149GE_CMD_LKO0 = 0x8b,150GE_CMD_LKO1,151GE_CMD_LKO2,152GE_CMD_LKO3,153GE_CMD_LAC0 = 0x8F,154GE_CMD_LDC0,155GE_CMD_LSC0,156GE_CMD_LAC1,157GE_CMD_LDC1,158GE_CMD_LSC1,159GE_CMD_LAC2,160GE_CMD_LDC2,161GE_CMD_LSC2,162GE_CMD_LAC3,163GE_CMD_LDC3,164GE_CMD_LSC3,165GE_CMD_CULL = 0x9B,166GE_CMD_FRAMEBUFPTR = 0x9C,167GE_CMD_FRAMEBUFWIDTH = 0x9D,168GE_CMD_ZBUFPTR = 0x9E,169GE_CMD_ZBUFWIDTH = 0x9F,170GE_CMD_TEXADDR0 = 0xA0,171GE_CMD_TEXADDR1,172GE_CMD_TEXADDR2,173GE_CMD_TEXADDR3,174GE_CMD_TEXADDR4,175GE_CMD_TEXADDR5,176GE_CMD_TEXADDR6,177GE_CMD_TEXADDR7,178GE_CMD_TEXBUFWIDTH0 = 0xA8,179GE_CMD_TEXBUFWIDTH1,180GE_CMD_TEXBUFWIDTH2,181GE_CMD_TEXBUFWIDTH3,182GE_CMD_TEXBUFWIDTH4,183GE_CMD_TEXBUFWIDTH5,184GE_CMD_TEXBUFWIDTH6,185GE_CMD_TEXBUFWIDTH7,186GE_CMD_CLUTADDR = 0xB0,187GE_CMD_CLUTADDRUPPER = 0xB1,188GE_CMD_TRANSFERSRC,189GE_CMD_TRANSFERSRCW,190GE_CMD_TRANSFERDST,191GE_CMD_TRANSFERDSTW,192GE_CMD_TEXSIZE0=0xB8,193GE_CMD_TEXSIZE1,194GE_CMD_TEXSIZE2,195GE_CMD_TEXSIZE3,196GE_CMD_TEXSIZE4,197GE_CMD_TEXSIZE5,198GE_CMD_TEXSIZE6,199GE_CMD_TEXSIZE7,200GE_CMD_TEXMAPMODE = 0xC0,201GE_CMD_TEXSHADELS = 0xC1,202GE_CMD_TEXMODE = 0xC2,203GE_CMD_TEXFORMAT = 0xC3,204GE_CMD_LOADCLUT = 0xC4,205GE_CMD_CLUTFORMAT = 0xC5,206GE_CMD_TEXFILTER = 0xC6,207GE_CMD_TEXWRAP = 0xC7,208GE_CMD_TEXLEVEL = 0xC8,209GE_CMD_TEXFUNC = 0xC9,210GE_CMD_TEXENVCOLOR = 0xCA,211GE_CMD_TEXFLUSH = 0xCB,212GE_CMD_TEXSYNC = 0xCC,213GE_CMD_FOG1 = 0xCD,214GE_CMD_FOG2 = 0xCE,215GE_CMD_FOGCOLOR = 0xCF,216GE_CMD_TEXLODSLOPE = 0xD0,217GE_CMD_FRAMEBUFPIXFORMAT = 0xD2,218GE_CMD_CLEARMODE = 0xD3,219GE_CMD_SCISSOR1 = 0xD4,220GE_CMD_SCISSOR2 = 0xD5,221GE_CMD_MINZ = 0xD6,222GE_CMD_MAXZ = 0xD7,223GE_CMD_COLORTEST = 0xD8,224GE_CMD_COLORREF = 0xD9,225GE_CMD_COLORTESTMASK = 0xDA,226GE_CMD_ALPHATEST = 0xDB,227GE_CMD_STENCILTEST = 0xDC,228GE_CMD_STENCILOP = 0xDD,229GE_CMD_ZTEST = 0xDE,230GE_CMD_BLENDMODE = 0xDF,231GE_CMD_BLENDFIXEDA = 0xE0,232GE_CMD_BLENDFIXEDB = 0xE1,233GE_CMD_DITH0 = 0xE2,234GE_CMD_DITH1,235GE_CMD_DITH2,236GE_CMD_DITH3,237GE_CMD_LOGICOP = 0xE6,238GE_CMD_ZWRITEDISABLE = 0xE7,239GE_CMD_MASKRGB = 0xE8,240GE_CMD_MASKALPHA = 0xE9,241GE_CMD_TRANSFERSTART = 0xEA,242GE_CMD_TRANSFERSRCPOS = 0xEB,243GE_CMD_TRANSFERDSTPOS = 0xEC,244GE_CMD_TRANSFERSIZE = 0xEE,245GE_CMD_VSCX = 0xF0,246GE_CMD_VSCY = 0xF1,247GE_CMD_VSCZ = 0xF2,248GE_CMD_VTCS = 0xF3,249GE_CMD_VTCT = 0xF4,250GE_CMD_VTCQ = 0xF5,251GE_CMD_VCV = 0xF6,252GE_CMD_VAP = 0xF7,253GE_CMD_VFC = 0xF8,254GE_CMD_VSCV = 0xF9,255GE_CMD_UNKNOWN_03 = 0x03,256GE_CMD_UNKNOWN_0D = 0x0D,257GE_CMD_UNKNOWN_11 = 0x11,258GE_CMD_UNKNOWN_29 = 0x29,259GE_CMD_UNKNOWN_34 = 0x34,260GE_CMD_UNKNOWN_35 = 0x35,261GE_CMD_UNKNOWN_39 = 0x39,262GE_CMD_UNKNOWN_4E = 0x4E,263GE_CMD_UNKNOWN_4F = 0x4F,264GE_CMD_UNKNOWN_52 = 0x52,265GE_CMD_UNKNOWN_59 = 0x59,266GE_CMD_UNKNOWN_5A = 0x5A,267GE_CMD_UNKNOWN_B6 = 0xB6,268GE_CMD_UNKNOWN_B7 = 0xB7,269GE_CMD_UNKNOWN_D1 = 0xD1,270GE_CMD_UNKNOWN_ED = 0xED,271GE_CMD_UNKNOWN_EF = 0xEF,272GE_CMD_UNKNOWN_FA = 0xFA,273GE_CMD_UNKNOWN_FB = 0xFB,274GE_CMD_UNKNOWN_FC = 0xFC,275GE_CMD_UNKNOWN_FD = 0xFD,276GE_CMD_UNKNOWN_FE = 0xFE,277GE_CMD_NOP_FF = 0xFF,278};279280#define GE_VTYPE_TRANSFORM (0<<23)281#define GE_VTYPE_THROUGH (1<<23)282#define GE_VTYPE_THROUGH_MASK (1<<23)283284#define GE_VTYPE_TC_NONE (0<<0)285#define GE_VTYPE_TC_8BIT (1<<0)286#define GE_VTYPE_TC_16BIT (2<<0)287#define GE_VTYPE_TC_FLOAT (3<<0)288#define GE_VTYPE_TC_MASK (3<<0)289#define GE_VTYPE_TC_SHIFT 0290291#define GE_VTYPE_COL_NONE (0<<2)292#define GE_VTYPE_COL_565 (4<<2)293#define GE_VTYPE_COL_5551 (5<<2)294#define GE_VTYPE_COL_4444 (6<<2)295#define GE_VTYPE_COL_8888 (7<<2)296#define GE_VTYPE_COL_MASK (7<<2)297#define GE_VTYPE_COL_SHIFT 2298299#define GE_VTYPE_NRM_NONE (0<<5)300#define GE_VTYPE_NRM_8BIT (1<<5)301#define GE_VTYPE_NRM_16BIT (2<<5)302#define GE_VTYPE_NRM_FLOAT (3<<5)303#define GE_VTYPE_NRM_MASK (3<<5)304#define GE_VTYPE_NRM_SHIFT 5305306//#define GE_VTYPE_POSITION_NONE (0<<5)307#define GE_VTYPE_POS_8BIT (1<<7)308#define GE_VTYPE_POS_16BIT (2<<7)309#define GE_VTYPE_POS_FLOAT (3<<7)310#define GE_VTYPE_POS_MASK (3<<7)311#define GE_VTYPE_POS_SHIFT 7312313#define GE_VTYPE_WEIGHT_NONE (0<<9)314#define GE_VTYPE_WEIGHT_8BIT (1<<9)315#define GE_VTYPE_WEIGHT_16BIT (2<<9)316#define GE_VTYPE_WEIGHT_FLOAT (3<<9)317#define GE_VTYPE_WEIGHT_MASK (3<<9)318#define GE_VTYPE_WEIGHT_SHIFT 9319320#define GE_VTYPE_WEIGHTCOUNT_MASK (7<<14)321#define GE_VTYPE_WEIGHTCOUNT_SHIFT 14322323#define GE_VTYPE_MORPHCOUNT_MASK (7<<18)324#define GE_VTYPE_MORPHCOUNT_SHIFT 18325326#define GE_VTYPE_IDX_NONE (0<<11)327#define GE_VTYPE_IDX_8BIT (1<<11)328#define GE_VTYPE_IDX_16BIT (2<<11)329#define GE_VTYPE_IDX_32BIT (3<<11)330#define GE_VTYPE_IDX_MASK (3<<11)331#define GE_VTYPE_IDX_SHIFT 11332333#define GE_CLEARMODE_COLOR (1<<8)334#define GE_CLEARMODE_ALPHA (1<<9) //or stencil?335#define GE_CLEARMODE_Z (1<<10)336#define GE_CLEARMODE_ALL (GE_CLEARMODE_COLOR|GE_CLEARMODE_ALPHA|GE_CLEARMODE_Z)337338#define GE_IMM_ANTIALIAS 0x00000800339#define GE_IMM_CLIPMASK 0x0003F000340#define GE_IMM_SHADING 0x00040000341#define GE_IMM_CULLENABLE 0x00080000342#define GE_IMM_CULLFACE 0x00100000343#define GE_IMM_TEXTURE 0x00200000344#define GE_IMM_FOG 0x00400000345#define GE_IMM_DITHER 0x00800000346347enum GEMatrixType {348GE_MTX_BONE0 = 0,349GE_MTX_BONE1,350GE_MTX_BONE2,351GE_MTX_BONE3,352GE_MTX_BONE4,353GE_MTX_BONE5,354GE_MTX_BONE6,355GE_MTX_BONE7,356GE_MTX_WORLD,357GE_MTX_VIEW,358GE_MTX_PROJECTION,359GE_MTX_TEXGEN,360};361362enum GEComparison : uint8_t {363GE_COMP_NEVER = 0,364GE_COMP_ALWAYS = 1,365GE_COMP_EQUAL = 2,366GE_COMP_NOTEQUAL = 3,367GE_COMP_LESS = 4,368GE_COMP_LEQUAL = 5,369GE_COMP_GREATER = 6,370GE_COMP_GEQUAL = 7,371};372373enum GEShadeMode374{375GE_SHADE_FLAT = 0,376GE_SHADE_GOURAUD = 1,377};378379enum GELightType380{381GE_LIGHTTYPE_DIRECTIONAL = 0,382GE_LIGHTTYPE_POINT = 1,383GE_LIGHTTYPE_SPOT = 2,384GE_LIGHTTYPE_UNKNOWN = 3,385};386387enum GELightColorSetting388{389GE_LIGHTCOLOR_AMBIENT = 0,390GE_LIGHTCOLOR_DIFFUSE = 1,391GE_LIGHTCOLOR_SPECULAR = 2,392};393394enum GELightComputation395{396GE_LIGHTCOMP_ONLYDIFFUSE = 0,397GE_LIGHTCOMP_BOTH = 1,398GE_LIGHTCOMP_ONLYPOWDIFFUSE = 2,399};400401// TODO: Consolidate the below three to one enum? The first four are the same in all,402// and we sometimes need to interpret back and forth between them.403404enum GETextureFormat : uint8_t {405GE_TFMT_5650 = 0,406GE_TFMT_5551 = 1,407GE_TFMT_4444 = 2,408GE_TFMT_8888 = 3,409GE_TFMT_CLUT4 = 4,410GE_TFMT_CLUT8 = 5,411GE_TFMT_CLUT16 = 6,412GE_TFMT_CLUT32 = 7,413GE_TFMT_DXT1 = 8,414GE_TFMT_DXT3 = 9,415GE_TFMT_DXT5 = 10,416};417418enum GEBufferFormat : uint8_t {419GE_FORMAT_565 = 0,420GE_FORMAT_5551 = 1,421GE_FORMAT_4444 = 2,422GE_FORMAT_8888 = 3,423GE_FORMAT_DEPTH16 = 4, // Virtual format, just used to pass into Depal424GE_FORMAT_CLUT8 = 5, // Virtual format, for pre-decoded static textures with dynamic CLUT425GE_FORMAT_INVALID = 0xFF,426};427428enum GEPaletteFormat : uint8_t {429GE_CMODE_16BIT_BGR5650,430GE_CMODE_16BIT_ABGR5551,431GE_CMODE_16BIT_ABGR4444,432GE_CMODE_32BIT_ABGR8888,433};434435const char *GEPaletteFormatToString(GEPaletteFormat pfmt);436const char *GeTextureFormatToString(GETextureFormat tfmt);437const char *GeTextureFormatToString(GETextureFormat tfmt, GEPaletteFormat pfmt);438439const char *GeBufferFormatToString(GEBufferFormat fmt);440inline bool IsGeBufferFormat16BitColor(GEBufferFormat fmt) {441return (int)fmt < 3;442}443444inline bool IsClutFormat(GETextureFormat tfmt) {445return tfmt == GE_TFMT_CLUT4 || tfmt == GE_TFMT_CLUT8 || tfmt == GE_TFMT_CLUT16 || tfmt == GE_TFMT_CLUT32;446}447inline bool IsDXTFormat(GETextureFormat tfmt) {448return tfmt == GE_TFMT_DXT1 || tfmt == GE_TFMT_DXT3 || tfmt == GE_TFMT_DXT5;449}450inline bool IsTextureFormatBufferCompatible(GETextureFormat tfmt) {451return (int)tfmt < 4;452}453inline bool IsBufferFormat16Bit(GEBufferFormat bfmt) {454return (int)bfmt < 3;455}456inline bool IsTextureFormat16Bit(GETextureFormat tfmt) {457return (int)tfmt < 3;458}459460inline int BufferFormatBytesPerPixel(GEBufferFormat format) {461switch (format) {462case GE_FORMAT_8888: return 4;463case GE_FORMAT_CLUT8: return 1;464default:465return 2; // works for depth as well as the 16-bit color formats.466}467}468469inline bool TextureFormatMatchesBufferFormat(GETextureFormat fmt, GEBufferFormat bfmt) {470// First four matches perfectly.471if ((int)fmt < 4) {472return (int)fmt == (int)bfmt;473} else {474return false;475}476}477// only applicable if IsTextureFormatBufferCompatible(fmt)478inline GEBufferFormat TextureFormatToBufferFormat(GETextureFormat bfmt) {479return (GEBufferFormat)(int)bfmt;480}481482enum GETexLevelMode {483GE_TEXLEVEL_MODE_AUTO = 0,484GE_TEXLEVEL_MODE_CONST = 1,485GE_TEXLEVEL_MODE_SLOPE = 2,486GE_TEXLEVEL_MODE_UNKNOWN = 3, // Behaves like CONST.487};488489enum GEMaterialColorSetting490{491GE_MATERIALCOLOR_EMISSIVE = 0,492GE_MATERIALCOLOR_AMBIENT = 1,493GE_MATERIALCOLOR_DIFFUSE = 2,494GE_MATERIALCOLOR_SPECULAR = 3,495};496497enum GEBlendMode498{499GE_BLENDMODE_MUL_AND_ADD = 0,500GE_BLENDMODE_MUL_AND_SUBTRACT = 1,501GE_BLENDMODE_MUL_AND_SUBTRACT_REVERSE = 2,502GE_BLENDMODE_MIN = 3,503GE_BLENDMODE_MAX = 4,504GE_BLENDMODE_ABSDIFF = 5,505};506507enum GEBlendSrcFactor508{509GE_SRCBLEND_DSTCOLOR,510GE_SRCBLEND_INVDSTCOLOR,511GE_SRCBLEND_SRCALPHA,512GE_SRCBLEND_INVSRCALPHA,513GE_SRCBLEND_DSTALPHA,514GE_SRCBLEND_INVDSTALPHA,515GE_SRCBLEND_DOUBLESRCALPHA,516GE_SRCBLEND_DOUBLEINVSRCALPHA,517GE_SRCBLEND_DOUBLEDSTALPHA,518GE_SRCBLEND_DOUBLEINVDSTALPHA,519GE_SRCBLEND_FIXA,520};521522enum GEBlendDstFactor523{524GE_DSTBLEND_SRCCOLOR,525GE_DSTBLEND_INVSRCCOLOR,526GE_DSTBLEND_SRCALPHA,527GE_DSTBLEND_INVSRCALPHA,528GE_DSTBLEND_DSTALPHA,529GE_DSTBLEND_INVDSTALPHA,530GE_DSTBLEND_DOUBLESRCALPHA,531GE_DSTBLEND_DOUBLEINVSRCALPHA,532GE_DSTBLEND_DOUBLEDSTALPHA,533GE_DSTBLEND_DOUBLEINVDSTALPHA,534GE_DSTBLEND_FIXB,535};536537enum GETexFunc538{539GE_TEXFUNC_MODULATE = 0,540GE_TEXFUNC_DECAL = 1,541GE_TEXFUNC_BLEND = 2,542GE_TEXFUNC_REPLACE = 3,543GE_TEXFUNC_ADD = 4,544GE_TEXFUNC_UNKNOWN1 = 5,545GE_TEXFUNC_UNKNOWN2 = 6,546GE_TEXFUNC_UNKNOWN3 = 7,547};548549enum GEStencilOp550{551GE_STENCILOP_KEEP = 0,552GE_STENCILOP_ZERO = 1,553GE_STENCILOP_REPLACE = 2,554GE_STENCILOP_INVERT = 3,555GE_STENCILOP_INCR = 4,556GE_STENCILOP_DECR = 5,557};558559enum GETextureFiltering560{561GE_TFILT_NEAREST = 0,562GE_TFILT_LINEAR = 1,563GE_TFILT_NEAREST_MIPMAP_NEAREST = 4,564GE_TFILT_LINEAR_MIPMAP_NEAREST = 5,565GE_TFILT_NEAREST_MIPMAP_LINEAR = 6,566GE_TFILT_LINEAR_MIPMAP_LINEAR = 7,567};568569enum GETexMapMode570{571GE_TEXMAP_TEXTURE_COORDS = 0,572GE_TEXMAP_TEXTURE_MATRIX = 1,573GE_TEXMAP_ENVIRONMENT_MAP = 2,574GE_TEXMAP_UNKNOWN = 3,575};576577enum GETexProjMapMode578{579GE_PROJMAP_POSITION = 0,580GE_PROJMAP_UV = 1,581GE_PROJMAP_NORMALIZED_NORMAL = 2,582GE_PROJMAP_NORMAL = 3,583};584585enum GEPrimitiveType : int8_t {586GE_PRIM_POINTS = 0,587GE_PRIM_LINES = 1,588GE_PRIM_LINE_STRIP = 2,589GE_PRIM_TRIANGLES = 3,590GE_PRIM_TRIANGLE_STRIP = 4,591GE_PRIM_TRIANGLE_FAN = 5,592GE_PRIM_RECTANGLES = 6,593GE_PRIM_KEEP_PREVIOUS = 7,594GE_PRIM_INVALID = -1,595};596597enum GELogicOp : uint8_t {598GE_LOGIC_CLEAR = 0,599GE_LOGIC_AND = 1,600GE_LOGIC_AND_REVERSE = 2,601GE_LOGIC_COPY = 3,602GE_LOGIC_AND_INVERTED = 4,603GE_LOGIC_NOOP = 5,604GE_LOGIC_XOR = 6,605GE_LOGIC_OR = 7,606GE_LOGIC_NOR = 8,607GE_LOGIC_EQUIV = 9,608GE_LOGIC_INVERTED = 10,609GE_LOGIC_OR_REVERSE = 11,610GE_LOGIC_COPY_INVERTED = 12,611GE_LOGIC_OR_INVERTED = 13,612GE_LOGIC_NAND = 14,613GE_LOGIC_SET = 15,614};615616enum GEPatchPrimType617{618GE_PATCHPRIM_TRIANGLES = 0,619GE_PATCHPRIM_LINES = 1,620GE_PATCHPRIM_POINTS = 2,621// Treated as points.622GE_PATCHPRIM_UNKNOWN = 3,623};624625inline GEPrimitiveType PatchPrimToPrim(GEPatchPrimType type) {626switch (type) {627case GE_PATCHPRIM_TRIANGLES: return GE_PRIM_TRIANGLES;628case GE_PATCHPRIM_LINES: return GE_PRIM_LINES;629case GE_PATCHPRIM_POINTS: return GE_PRIM_POINTS;630case GE_PATCHPRIM_UNKNOWN: default: return GE_PRIM_POINTS; // Treated as points.631}632}633634635