⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s3v_context.h

📁 Mesa is an open-source implementation of the OpenGL specification - a system for rendering interacti
💻 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 + -