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

📄 gamma_context.h

📁 mesa-6.5-minigui源码
💻 H
字号:
/* $XFree86: xc/lib/GL/mesa/src/drv/gamma/gamma_context.h,v 1.6 2002/12/16 16:18:50 dawes Exp $ *//* * Copyright 2001 by Alan Hourihane. * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of Alan Hourihane not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission.  Alan Hourihane makes no representations * about the suitability of this software for any purpose.  It is provided * "as is" without express or implied warranty. * * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. * * Authors:  Alan Hourihane, <alanh@tungstengraphics.com> * */#ifndef _GAMMA_CONTEXT_H_#define _GAMMA_CONTEXT_H_#include "dri_util.h"#include "drm.h"#include "drm_sarea.h"#include "colormac.h"#include "gamma_regs.h"#include "gamma_macros.h"#include "gamma_screen.h"#include "macros.h"#include "mtypes.h"#include "glint_dri.h"#include "mm.h"typedef union {    unsigned int i;    float        f;} dmaBufRec, *dmaBuf;/* Flags for context */#define GAMMA_FRONT_BUFFER    0x00000001#define GAMMA_BACK_BUFFER     0x00000002#define GAMMA_DEPTH_BUFFER    0x00000004#define GAMMA_STENCIL_BUFFER  0x00000008#define GAMMA_ACCUM_BUFFER    0x00000010#define GAMMA_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	  gammaDDUpdateHWState(GLcontext *ctx);extern gammaScreenPtr	  gammaCreateScreen(__DRIscreenPrivate *sPriv);extern void	  gammaDestroyScreen(__DRIscreenPrivate *sPriv);extern GLboolean gammaCreateContext( const __GLcontextModes *glVisual,                                     __DRIcontextPrivate *driContextPriv,                                     void *sharedContextPrivate);#define GAMMA_UPLOAD_ALL	0xffffffff#define GAMMA_UPLOAD_CLIPRECTS	0x00000002#define GAMMA_UPLOAD_ALPHA	0x00000004#define GAMMA_UPLOAD_BLEND	0x00000008#define GAMMA_UPLOAD_DEPTH	0x00000010#define GAMMA_UPLOAD_VIEWPORT	0x00000020#define GAMMA_UPLOAD_SHADE	0x00000040#define GAMMA_UPLOAD_CLIP	0x00000080#define GAMMA_UPLOAD_MASKS	0x00000100#define GAMMA_UPLOAD_WINDOW	0x00000200 /* defunct */#define GAMMA_UPLOAD_GEOMETRY	0x00000400#define GAMMA_UPLOAD_POLYGON	0x00000800#define GAMMA_UPLOAD_DITHER	0x00001000#define GAMMA_UPLOAD_LOGICOP	0x00002000#define GAMMA_UPLOAD_FOG	0x00004000#define GAMMA_UPLOAD_LIGHT	0x00008000#define GAMMA_UPLOAD_CONTEXT	0x00010000#define GAMMA_UPLOAD_TEX0	0x00020000#define GAMMA_UPLOAD_STIPPLE	0x00040000#define GAMMA_UPLOAD_TRANSFORM	0x00080000#define GAMMA_UPLOAD_LINEMODE	0x00100000#define GAMMA_UPLOAD_POINTMODE	0x00200000#define GAMMA_UPLOAD_TRIMODE	0x00400000#define GAMMA_NEW_CLIP		0x00000001#define GAMMA_NEW_WINDOW	0x00000002#define GAMMA_NEW_CONTEXT	0x00000004#define GAMMA_NEW_TEXTURE	0x00000008 /* defunct */#define GAMMA_NEW_ALPHA		0x00000010#define GAMMA_NEW_DEPTH		0x00000020#define GAMMA_NEW_MASKS		0x00000040#define GAMMA_NEW_POLYGON	0x00000080#define GAMMA_NEW_CULL		0x00000100#define GAMMA_NEW_LOGICOP	0x00000200#define GAMMA_NEW_FOG		0x00000400#define GAMMA_NEW_LIGHT		0x00000800#define GAMMA_NEW_STIPPLE	0x00001000#define GAMMA_NEW_ALL		0xffffffff#define GAMMA_FALLBACK_TRI	0x00000001#define GAMMA_FALLBACK_TEXTURE	0x00000002#define FLUSH_BATCH(gmesa) do {						\	/*FLUSH_DMA_BUFFER(gmesa);*/					\} while(0)struct gamma_context;typedef struct gamma_context gammaContextRec;typedef struct gamma_context *gammaContextPtr;typedef struct gamma_texture_object_t *gammaTextureObjectPtr;#define VALID_GAMMA_TEXTURE_OBJECT(tobj)  (tobj) #define GAMMA_TEX_MAXLEVELS 12  /* 2K x 2K *//* 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 gamma_texture_object_t {   struct gamma_texture_object_t *next, *prev;   GLuint age;      struct gl_texture_object *globj;        int Pitch;   int Height;   int texelBytes;   int totalSize;   int bound;   struct mem_block *MemBlock;      char * BufAddr;      GLuint min_level;   GLuint max_level;   GLuint dirty_images;   GLint firstLevel, lastLevel;  /* upload tObj->Image[0][first .. lastLevel] */   struct {       const struct gl_texture_image *image;      int offset;		/* into BufAddr */      int height;      int internalFormat;   } image[GAMMA_TEX_MAXLEVELS];   u_int32_t TextureBaseAddr[GAMMA_TEX_MAXLEVELS];   u_int32_t TextureAddressMode;   u_int32_t TextureColorMode;   u_int32_t TextureFilterMode;   u_int32_t TextureFormat;   u_int32_t TextureReadMode;   u_int32_t TextureBorderColor;};		#define GAMMA_NO_PALETTE        0x0#define GAMMA_USE_PALETTE       0x1#define GAMMA_UPDATE_PALETTE    0x2#define GAMMA_FALLBACK_PALETTE  0x4void gammaUpdateTextureState( GLcontext *ctx );void gammaDestroyTexObj( gammaContextPtr gmesa, gammaTextureObjectPtr t );void gammaSwapOutTexObj( gammaContextPtr gmesa, gammaTextureObjectPtr t );void gammaUploadTexImages( gammaContextPtr gmesa, gammaTextureObjectPtr t );void gammaResetGlobalLRU( gammaContextPtr gmesa );void gammaUpdateTexLRU( gammaContextPtr gmesa, gammaTextureObjectPtr t );void gammaTexturesGone( gammaContextPtr gmesa, 		       GLuint start, GLuint end, 		       GLuint in_use ); void gammaEmitHwState( gammaContextPtr gmesa );void gammaDDInitExtensions( GLcontext *ctx );void gammaDDInitDriverFuncs( GLcontext *ctx );void gammaDDInitSpanFuncs( GLcontext *ctx );void gammaDDInitState( gammaContextPtr gmesa );void gammaInitHW( gammaContextPtr gmesa );void gammaDDInitStateFuncs( GLcontext *ctx );void gammaDDInitTextureFuncs( struct dd_function_table *table );void gammaInitTextureObjects( GLcontext *ctx );void gammaDDInitTriFuncs( GLcontext *ctx );void gammaUpdateWindow( GLcontext *ctx );void gammaUpdateViewportOffset( GLcontext *ctx );void gammaPrintLocalLRU( gammaContextPtr gmesa );void gammaPrintGlobalLRU( gammaContextPtr gmesa );extern void gammaFallback( gammaContextPtr gmesa, GLuint bit, GLboolean mode );#define FALLBACK( imesa, bit, mode ) gammaFallback( imesa, bit, mode )/* Use the templated vertex formats.  Only one of these is used in gamma. */#define TAG(x) gamma##x#include "tnl_dd/t_dd_vertex.h"#undef TAGtypedef void (*gamma_quad_func)( gammaContextPtr, 				 const gammaVertex *, 				 const gammaVertex *,				 const gammaVertex *,				 const gammaVertex * );typedef void (*gamma_tri_func)( gammaContextPtr, 				const gammaVertex *, 				const gammaVertex *,				const gammaVertex * );typedef void (*gamma_line_func)( gammaContextPtr, 				 const gammaVertex *, 				 const gammaVertex * );typedef void (*gamma_point_func)( gammaContextPtr, 				  const gammaVertex * );struct gamma_context {	GLcontext 		*glCtx;		/* Mesa context */	__DRIcontextPrivate	*driContext;	__DRIscreenPrivate	*driScreen;	__DRIdrawablePrivate	*driDrawable;	GLuint 			new_gl_state;	GLuint 			new_state;	GLuint 			dirty;  	GLINTSAREADRIPtr        sarea;    	/* Mirrors of some DRI state    	 */   	drm_context_t hHWContext;   	drm_hw_lock_t *driHwLock;   	int driFd;   	GLuint numClipRects;		   /* Cliprects for the draw buffer */   	drm_clip_rect_t *pClipRects;    	dmaBuf              buf;           /* DMA buffer for regular cmds */    	int                 bufIndex;    	int                 bufSize;    	int                 bufCount;    	dmaBuf              WCbuf;         /* DMA buffer for window changed cmds */    	int                 WCbufIndex;    	int                 WCbufSize;    	int                 WCbufCount;   	gammaScreenPtr gammaScreen;		/* Screen private DRI data */	int			drawOffset;	int			readOffset;   	gamma_point_func    draw_point;   	gamma_line_func     draw_line;   	gamma_tri_func      draw_tri;   	gamma_quad_func     draw_quad;   	GLuint Fallback;	GLuint RenderIndex;	GLuint SetupNewInputs;	GLuint SetupIndex;	GLuint vertex_format;	GLuint vertex_size;	GLuint vertex_stride_shift;	GLubyte *verts;	GLfloat hw_viewport[16];	GLuint hw_primitive;	GLenum render_primitive;	GLfloat	depth_scale;   	gammaTextureObjectPtr CurrentTexObj[2];   	struct gamma_texture_object_t TexObjList;   	struct gamma_texture_object_t SwappedOut; 	GLenum TexEnvImageFmt[2];	struct mem_block *texHeap;   	unsigned int lastSwap;   	int texAge;   	int ctxAge;   	int dirtyAge;   	unsigned int lastStamp;       	u_int32_t 		ClearColor;	u_int32_t		Color;	u_int32_t		DitherMode;    	u_int32_t		ClearDepth;	u_int32_t		FogMode;	u_int32_t		AreaStippleMode;	u_int32_t		LBReadFormat;	u_int32_t		LBWriteFormat;	u_int32_t		LineMode;	u_int32_t		PointMode;	u_int32_t		TriangleMode;	u_int32_t		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;};static __inline GLuint gammaPackColor( GLuint cpp,					GLubyte r, GLubyte g,					GLubyte b, GLubyte a ){   switch ( cpp ) {   case 2:      return PACK_COLOR_565( r, g, b );   case 4:      return PACK_COLOR_8888( a, r, g, b );   default:      return 0;   }}#define GAMMA_CONTEXT(ctx)		((gammaContextPtr)(ctx->DriverCtx))#endif /* _GAMMA_CONTEXT_H_ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -