📄 gamma_context.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 + -