📄 s3v_context.h
字号:
/* * Author: Max Lingua <sunmax@libero.it> */#ifndef _S3V_CONTEXT_H_#define _S3V_CONTEXT_H_#include "dri_util.h"#include "s3v_dri.h"#include "s3v_regs.h"#include "s3v_macros.h"#include "s3v_screen.h"#include "colormac.h"#include "macros.h"#include "mtypes.h"#include "drm.h"#include "mm.h"#include "drirenderbuffer.h"/* Flags for context */#define S3V_FRONT_BUFFER 0x00000001#define S3V_BACK_BUFFER 0x00000002#define S3V_DEPTH_BUFFER 0x00000004 /* FIXME: check */#define S3V_MAX_TEXTURE_SIZE 2048/* These are the minimum requirements and should probably be increased */#define MAX_MODELVIEW_STACK 16#define MAX_PROJECTION_STACK 2#define MAX_TEXTURE_STACK 2extern void s3vDDUpdateHWState(GLcontext *ctx);extern s3vScreenPtr s3vCreateScreen(__DRIscreenPrivate *sPriv);extern void s3vDestroyScreen(__DRIscreenPrivate *sPriv);extern GLboolean s3vCreateContext(const __GLcontextModes *glVisual, __DRIcontextPrivate *driContextPriv, void *sharedContextPrivate);#define S3V_UPLOAD_ALL 0xffffffff/* #define S3V_UPLOAD_CLIPRECTS 0x00000002 */#define S3V_UPLOAD_ALPHA 0x00000004#define S3V_UPLOAD_BLEND 0x00000008#define S3V_UPLOAD_DEPTH 0x00000010#define S3V_UPLOAD_VIEWPORT 0x00000020#define S3V_UPLOAD_SHADE 0x00000040#define S3V_UPLOAD_CLIP 0x00000080#define S3V_UPLOAD_MASKS 0x00000100#define S3V_UPLOAD_WINDOW 0x00000200 /* defunct */#define S3V_UPLOAD_GEOMETRY 0x00000400#define S3V_UPLOAD_POLYGON 0x00000800#define S3V_UPLOAD_DITHER 0x00001000#define S3V_UPLOAD_LOGICOP 0x00002000#define S3V_UPLOAD_FOG 0x00004000#define S3V_UPLOAD_LIGHT 0x00008000#define S3V_UPLOAD_CONTEXT 0x00010000#define S3V_UPLOAD_TEX0 0x00020000#define S3V_UPLOAD_STIPPLE 0x00040000#define S3V_UPLOAD_TRANSFORM 0x00080000#define S3V_UPLOAD_LINEMODE 0x00100000#define S3V_UPLOAD_POINTMODE 0x00200000#define S3V_UPLOAD_TRIMODE 0x00400000#define S3V_NEW_CLIP 0x00000001#define S3V_NEW_WINDOW 0x00000002#define S3V_NEW_CONTEXT 0x00000004#define S3V_NEW_TEXTURE 0x00000008 /* defunct */#define S3V_NEW_ALPHA 0x00000010#define S3V_NEW_DEPTH 0x00000020#define S3V_NEW_MASKS 0x00000040#define S3V_NEW_POLYGON 0x00000080#define S3V_NEW_CULL 0x00000100#define S3V_NEW_LOGICOP 0x00000200#define S3V_NEW_FOG 0x00000400#define S3V_NEW_LIGHT 0x00000800#define S3V_NEW_STIPPLE 0x00001000#define S3V_NEW_ALL 0xffffffff#define S3V_FALLBACK_TRI 0x00000001#define S3V_FALLBACK_TEXTURE 0x00000002struct s3v_context;typedef struct s3v_context s3vContextRec;typedef struct s3v_context *s3vContextPtr;typedef struct s3v_texture_object_t *s3vTextureObjectPtr;#define VALID_S3V_TEXTURE_OBJECT(tobj) (tobj) #define S3V_TEX_MAXLEVELS 12/* For shared texture space managment, these texture objects may also * be used as proxies for regions of texture memory containing other * client's textures. Such proxy textures (not to be confused with GL * proxy textures) are subject to the same LRU aging we use for our * own private textures, and thus we have a mechanism where we can * fairly decide between kicking out our own textures and those of * other clients. * * Non-local texture objects have a valid MemBlock to describe the * region managed by the other client, and can be identified by * 't->globj == 0' */struct s3v_texture_object_t { struct s3v_texture_object_t *next, *prev; GLuint age; struct gl_texture_object *globj; int Pitch; int Height; int WidthLog2; int texelBytes; int totalSize; int bound; struct mem_block *MemBlock; GLuint BufAddr; GLuint min_level; GLuint max_level; GLuint dirty_images; GLint firstLevel, lastLevel; /* upload tObj->Image[first .. lastLevel] */ struct { const struct gl_texture_image *image; int offset; /* into BufAddr */ int height; int internalFormat; } image[S3V_TEX_MAXLEVELS]; GLuint TextureCMD; GLuint TextureColorMode; GLuint TextureFilterMode; GLuint TextureBorderColor; GLuint TextureWrap; GLuint TextureMipSize; GLuint TextureBaseAddr[S3V_TEX_MAXLEVELS]; GLuint TextureFormat; GLuint TextureReadMode;}; #define S3V_NO_PALETTE 0x0#define S3V_USE_PALETTE 0x1#define S3V_UPDATE_PALETTE 0x2#define S3V_FALLBACK_PALETTE 0x4void s3vUpdateTextureState( GLcontext *ctx );void s3vDestroyTexObj( s3vContextPtr vmesa, s3vTextureObjectPtr t);void s3vUploadTexImages( s3vContextPtr vmesa, s3vTextureObjectPtr t );void s3vResetGlobalLRU( s3vContextPtr vmesa );void s3vTexturesGone( s3vContextPtr vmesa, GLuint start, GLuint end, GLuint in_use ); void s3vEmitHwState( s3vContextPtr vmesa );void s3vGetLock( s3vContextPtr vmesa, GLuint flags );void s3vInitExtensions( GLcontext *ctx );void s3vInitDriverFuncs( GLcontext *ctx );void s3vSetSpanFunctions(driRenderbuffer *rb, const GLvisual *vis);void s3vInitState( s3vContextPtr vmesa );void s3vInitHW( s3vContextPtr vmesa );void s3vInitStateFuncs( GLcontext *ctx );void s3vInitTextureFuncs( GLcontext *ctx );void s3vInitTriFuncs( GLcontext *ctx );void s3vUpdateWindow( GLcontext *ctx );void s3vUpdateViewportOffset( GLcontext *ctx );void s3vPrintLocalLRU( s3vContextPtr vmesa );void s3vPrintGlobalLRU( s3vContextPtr vmesa );extern void s3vFallback( s3vContextPtr vmesa, GLuint bit, GLboolean mode );#define FALLBACK( imesa, bit, mode ) s3vFallback( imesa, bit, mode )/* Use the templated vertex formats. Only one of these is used in s3v. */#define TAG(x) s3v##x#include "tnl_dd/t_dd_vertex.h"#undef TAGtypedef void (*s3v_quad_func)( s3vContextPtr, const s3vVertex *, const s3vVertex *, const s3vVertex *, const s3vVertex * );typedef void (*s3v_tri_func)( s3vContextPtr, const s3vVertex *, const s3vVertex *, const s3vVertex * );typedef void (*s3v_line_func)( s3vContextPtr, const s3vVertex *, const s3vVertex * );typedef void (*s3v_point_func)( s3vContextPtr, const s3vVertex * );/* static void s3v_lines_emit(GLcontext *ctx, GLuint start, GLuint end); */typedef void (*emit_func)( GLcontext *, GLuint, GLuint);struct s3v_context { GLcontext *glCtx; /* Mesa context */ __DRIcontextPrivate *driContext; __DRIscreenPrivate *driScreen; __DRIdrawablePrivate *driDrawable; GLuint new_gl_state; GLuint new_state; GLuint dirty; S3VSAREAPtr sarea; /* Temporaries for translating away float colors */ struct gl_client_array UbyteColor; struct gl_client_array UbyteSecondaryColor; /* Mirrors of some DRI state */ drm_context_t hHWContext; drmLock *driHwLock; int driFd; GLuint numClipRects; /* Cliprects for the draw buffer */ drm_clip_rect_t *pClipRects; GLuint* buf; /* FIXME */ GLuint* _buf[2]; int _bufNum; int bufIndex[2]; int bufSize; int bufCount; s3vScreenPtr s3vScreen; /* Screen private DRI data */ int drawOffset; int readOffset; s3v_point_func draw_point; s3v_line_func draw_line; s3v_tri_func draw_tri; s3v_quad_func draw_quad; GLuint Fallback; GLuint RenderIndex; GLuint SetupNewInputs; GLuint SetupIndex; GLuint vertex_format; GLuint vertex_size; GLuint vertex_stride_shift; char *verts; GLfloat hw_viewport[16]; GLuint hw_primitive; GLenum render_primitive; GLfloat depth_scale; s3vTextureObjectPtr CurrentTexObj[2]; struct s3v_texture_object_t TexObjList; struct s3v_texture_object_t SwappedOut; GLenum TexEnvImageFmt[2]; struct mem_block *texHeap; int lastSwap; int texAge; int ctxAge; int dirtyAge; int lastStamp; /* max was here: don't touch */ unsigned int S3V_REG[S3V_REGS_NUM]; GLuint texMode; GLuint alphaMode; GLuint lightMode; GLuint SrcBase; GLuint DestBase; GLuint DestBlit; GLuint ScissorLR; GLuint ScissorTB; GLuint ScissorWH; /* SubScissorWH */ /* RectWH */ GLuint FrontStride; GLuint BackStride; GLuint SrcStride; GLuint DestStride; GLuint SrcXY; GLuint DestXY; GLuint ClearColor; GLuint Color; GLuint DitherMode; GLuint ClearDepth; GLuint TextureBorderColor; GLuint TexOffset; GLuint TexStride; GLuint CMD; GLuint prim_cmd; GLuint _tri[2]; /* 0 = gouraud; 1 = tex (lit or unlit) */ GLuint alpha_cmd; /* actual alpha cmd */ GLuint _alpha[2]; GLuint _alpha_tex; /* tex alpha type */ /* (3d_mode) 0 = 3d line/gourad tri; 1 = 3d tex tri */ GLuint _3d_mode; GLfloat backface_sign; GLfloat cull_zero; int restore_primitive;/* *** 2check *** */ GLuint FogMode; GLuint AreaStippleMode; GLuint LBReadFormat; GLuint LBWriteFormat; GLuint LineMode; GLuint PointMode; GLuint TriangleMode; GLuint AntialiasMode; GLfloat ViewportScaleX; GLfloat ViewportScaleY; GLfloat ViewportScaleZ; GLfloat ViewportOffsetX; GLfloat ViewportOffsetY; GLfloat ViewportOffsetZ; int MatrixMode; int DepthMode; int TransformMode; int LBReadMode; int FBReadMode; int FBWindowBase; int LBWindowBase; int ColorDDAMode; int GeometryMode; int AlphaTestMode; int AlphaBlendMode; int AB_FBReadMode; int AB_FBReadMode_Save; int DeltaMode; int ColorMaterialMode; int FBHardwareWriteMask; int MaterialMode; int NormalizeMode; int LightingMode; int Light0Mode; int Light1Mode; int Light2Mode; int Light3Mode; int Light4Mode; int Light5Mode; int Light6Mode; int Light7Mode; int Light8Mode; int Light9Mode; int Light10Mode; int Light11Mode; int Light12Mode; int Light13Mode; int Light14Mode; int Light15Mode; int LogicalOpMode; int ScissorMode; int ScissorMaxXY; int ScissorMinXY; int Window; /* GID part probably should be in draw priv */ int WindowOrigin; int x, y, w, h; /* Probably should be in drawable priv */ int FrameCount; /* Probably should be in drawable priv */ int NotClipped; /* Probably should be in drawable priv */ int WindowChanged; /* Probably should be in drawabl... */ int Flags; int EnabledFlags; int DepthSize; int Begin; GLenum ErrorValue; int Texture1DEnabled; int Texture2DEnabled; float ModelView[16]; float Proj[16]; float ModelViewProj[16]; float Texture[16]; float ModelViewStack[(MAX_MODELVIEW_STACK-1)*16]; int ModelViewCount; float ProjStack[(MAX_PROJECTION_STACK-1)*16]; int ProjCount; float TextureStack[(MAX_TEXTURE_STACK-1)*16]; int TextureCount;};#define S3VIRGEPACKCOLOR555( r, g, b, a ) \ ((((r) & 0xf8) << 7) | (((g) & 0xf8) << 2) | (((b) & 0xf8) >> 3) | \ ((a) ? 0x8000 : 0))#define S3VIRGEPACKCOLOR565( r, g, b ) \ ((((r) & 0xf8) << 8) | (((g) & 0xfc) << 3) | (((b) & 0xf8) >> 3))#define S3VIRGEPACKCOLOR888( r, g, b ) \ (((r) << 16) | ((g) << 8) | (b))#define S3VIRGEPACKCOLOR8888( r, g, b, a ) \ (((a) << 24) | ((r) << 16) | ((g) << 8) | (b))#define S3VIRGEPACKCOLOR4444( r, g, b, a ) \ ((((a) & 0xf0) << 8) | (((r) & 0xf0) << 4) | ((g) & 0xf0) | ((b) >> 4))static INLINE GLuint s3vPackColor( GLuint cpp, GLubyte r, GLubyte g, GLubyte b, GLubyte a ){ unsigned int ret; DEBUG(("cpp = %i, r=0x%x, g=0x%x, b=0x%x, a=0x%x\n", cpp, r, g, b, a)); switch ( cpp ) { case 2: ret = S3VIRGEPACKCOLOR555( r, g, b, a ); DEBUG(("ret = 0x%x\n", ret)); return ret; case 4: return PACK_COLOR_8888( a, r, g, b ); default: return 0; }}#define S3V_CONTEXT(ctx) ((s3vContextPtr)(ctx->DriverCtx))#endif /* _S3V_CONTEXT_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -