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

📄 via_context.h

📁 Mesa is an open-source implementation of the OpenGL specification - a system for rendering interacti
💻 H
字号:
/* * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved. * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sub license, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the * next paragraph) shall be included in all copies or substantial portions * of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */#ifndef _VIACONTEXT_H#define _VIACONTEXT_H#include "dri_util.h"#include "mtypes.h"#include "drm.h"#include "mm.h"#include "tnl/t_vertex.h"#include "via_screen.h"#include "via_tex.h"#include "via_drm.h"struct via_context;/* Chip tags.  These are used to group the adapters into * related families. */enum VIACHIPTAGS {    VIA_UNKNOWN = 0,    VIA_CLE266,    VIA_KM400,    VIA_K8M800,    VIA_PM800,    VIA_LAST};#define VIA_FALLBACK_TEXTURE           	0x1#define VIA_FALLBACK_DRAW_BUFFER       	0x2#define VIA_FALLBACK_READ_BUFFER       	0x4#define VIA_FALLBACK_COLORMASK         	0x8#define VIA_FALLBACK_SPECULAR          	0x20#define VIA_FALLBACK_LOGICOP           	0x40#define VIA_FALLBACK_RENDERMODE        	0x80#define VIA_FALLBACK_STENCIL           	0x100#define VIA_FALLBACK_BLEND_EQ          	0x200#define VIA_FALLBACK_BLEND_FUNC        	0x400#define VIA_FALLBACK_USER_DISABLE      	0x800#define VIA_FALLBACK_PROJ_TEXTURE      	0x1000#define VIA_FALLBACK_POLY_STIPPLE	0x2000#define VIA_DMA_BUFSIZ                  4096#define VIA_DMA_HIGHWATER               (VIA_DMA_BUFSIZ - 128)#define VIA_NO_CLIPRECTS 0x1/* Use the templated vertex formats: */#define TAG(x) via##x#include "tnl_dd/t_dd_vertex.h"#undef TAGtypedef void (*via_tri_func)(struct via_context *, viaVertex *, viaVertex *,                             viaVertex *);typedef void (*via_line_func)(struct via_context *, viaVertex *, viaVertex *);typedef void (*via_point_func)(struct via_context *, viaVertex *);/** * Derived from gl_renderbuffer. */struct via_renderbuffer {   struct gl_renderbuffer Base;  /* must be first! */   drm_handle_t handle;   drmSize size;   unsigned long offset;   unsigned long index;   GLuint pitch;   GLuint bpp;   char *map;   GLuint orig;		/* The drawing origin, 			 * at (drawX,drawY) in screen space.			 */   char *origMap;   int drawX;                   /* origin of drawable in draw buffer */   int drawY;       int drawW;                     int drawH;       __DRIdrawablePrivate *dPriv;};#define VIA_MAX_TEXLEVELS	10struct via_tex_buffer {   struct via_tex_buffer *next, *prev;   struct via_texture_image *image;   unsigned long index;   unsigned long offset;   GLuint size;   GLuint memType;       unsigned char *bufAddr;   GLuint texBase;   GLuint lastUsed;};struct via_texture_image {   struct gl_texture_image image;   struct via_tex_buffer *texMem;   GLint pitchLog2;};struct via_texture_object {   struct gl_texture_object obj; /* The "parent" object */   GLuint texelBytes;   GLuint memType;   GLuint regTexFM;   GLuint regTexWidthLog2[2];   GLuint regTexHeightLog2[2];   GLuint regTexBaseH[4];   struct {      GLuint baseL;      GLuint pitchLog2;   } regTexBaseAndPitch[12];   GLint firstLevel, lastLevel;  /* upload tObj->Image[first .. lastLevel] */};              struct via_context {   GLint refcount;      GLcontext *glCtx;   GLcontext *shareCtx;   /* XXX These don't belong here.  They should be per-drawable state. */   struct via_renderbuffer front;   struct via_renderbuffer back;   struct via_renderbuffer depth;   struct via_renderbuffer stencil; /* mirrors depth */   struct via_renderbuffer breadcrumb;   GLboolean hasBack;   GLboolean hasDepth;   GLboolean hasStencil;   GLboolean hasAccum;   GLuint    depthBits;   GLuint    stencilBits;   GLboolean have_hw_stencil;   GLuint ClearDepth;   GLuint depth_clear_mask;   GLuint stencil_clear_mask;   GLfloat depth_max;   GLfloat polygon_offset_scale;   GLubyte    *dma;   viaRegion tex;       /* Bit flag to keep 0track of fallbacks.    */   GLuint Fallback;   /* State for via_tris.c.    */   GLuint newState;            /* _NEW_* flags */   GLuint newEmitState;            /* _NEW_* flags */   GLuint newRenderState;            /* _NEW_* flags */   struct tnl_attr_map vertex_attrs[VERT_ATTRIB_MAX];   GLuint vertex_attr_count;   GLuint setupIndex;   GLuint renderIndex;   GLmatrix ViewportMatrix;   GLenum renderPrimitive;   GLenum hwPrimitive;   GLenum hwShadeModel;   unsigned char *verts;   /* drmBufPtr dma_buffer;    */   GLuint dmaLow;   GLuint dmaCliprectAddr;   GLuint dmaLastPrim;   GLboolean useAgp;      /* Fallback rasterization functions     */   via_point_func drawPoint;   via_line_func drawLine;   via_tri_func drawTri;   /* Hardware register    */   GLuint regCmdA_End;   GLuint regCmdB;   GLuint regEnable;   GLuint regHFBBMSKL;   GLuint regHROP;   GLuint regHZWTMD;   GLuint regHSTREF;   GLuint regHSTMD;   GLuint regHATMD;   GLuint regHABLCsat;   GLuint regHABLCop;   GLuint regHABLAsat;   GLuint regHABLAop;   GLuint regHABLRCa;   GLuint regHABLRFCa;   GLuint regHABLRCbias;   GLuint regHABLRCb;   GLuint regHABLRFCb;   GLuint regHABLRAa;   GLuint regHABLRAb;   GLuint regHFogLF;   GLuint regHFogCL;   GLuint regHFogCH;   GLuint regHLP;   GLuint regHLPRF;      GLuint regHTXnCLOD[2];   GLuint regHTXnTB[2];   GLuint regHTXnMPMD[2];   GLuint regHTXnTBLCsat[2];   GLuint regHTXnTBLCop[2];   GLuint regHTXnTBLMPfog[2];   GLuint regHTXnTBLAsat[2];   GLuint regHTXnTBLRCb[2];   GLuint regHTXnTBLRAa[2];   GLuint regHTXnTBLRFog[2];   GLuint regHTXnTBLRCa[2];   GLuint regHTXnTBLRCc[2];   GLuint regHTXnTBLRCbias[2];   GLuint regHTXnTBC[2];   GLuint regHTXnTRAH[2];   int vertexSize;   int hwVertexSize;   GLboolean ptexHack;   int coloroffset;   int specoffset;   GLint lastStamp;   GLuint ClearColor;   GLuint ClearMask;   /* DRI stuff    */   GLboolean doPageFlip;   struct via_renderbuffer *drawBuffer;   GLuint numClipRects;         /* cliprects for that buffer */   drm_clip_rect_t *pClipRects;   GLboolean scissor;   drm_clip_rect_t drawRect;   drm_clip_rect_t scissorRect;   drm_context_t hHWContext;   drm_hw_lock_t *driHwLock;   int driFd;   /**    * DRI drawable bound to this context for drawing.    */   __DRIdrawablePrivate	*driDrawable;   /**    * DRI drawable bound to this context for reading.    */   __DRIdrawablePrivate	*driReadable;   __DRIscreenPrivate *driScreen;   viaScreenPrivate *viaScreen;   drm_via_sarea_t *sarea;   volatile GLuint* regMMIOBase;   volatile GLuint* pnGEMode;   volatile GLuint* regEngineStatus;   volatile GLuint* regTranSet;   volatile GLuint* regTranSpace;   GLuint agpBase;   GLuint drawType;   GLuint nDoneFirstFlip;   GLuint agpFullCount;   GLboolean clearTexCache;   GLboolean thrashing;   /* Configuration cache    */   driOptionCache optionCache;   int64_t swap_ust;   int64_t swap_missed_ust;   GLuint swap_count;   GLuint swap_missed_count;   GLuint pfCurrentOffset;   GLboolean allowPageFlip;   GLuint lastBreadcrumbRead;   GLuint lastBreadcrumbWrite;   GLuint lastSwap[2];   GLuint lastDma;      GLuint total_alloc[VIA_MEM_SYSTEM+1];   struct via_tex_buffer tex_image_list[VIA_MEM_SYSTEM+1];   struct via_tex_buffer freed_tex_buffers;   };#define VIA_CONTEXT(ctx)   ((struct via_context *)(ctx->DriverCtx))/* Lock the hardware and validate our state.   */#define LOCK_HARDWARE(vmesa)                                	\	do {                                                    \    	    char __ret = 0;                                     \    	    DRM_CAS(vmesa->driHwLock, vmesa->hHWContext,        \        	(DRM_LOCK_HELD|vmesa->hHWContext), __ret);      \    	    if (__ret)                                          \        	viaGetLock(vmesa, 0);                           \	} while (0)/* Release the kernel lock. */#define UNLOCK_HARDWARE(vmesa)                                  	\	DRM_UNLOCK(vmesa->driFd, vmesa->driHwLock, vmesa->hHWContext);		extern GLuint VIA_DEBUG;#define DEBUG_TEXTURE	0x1#define DEBUG_STATE	0x2#define DEBUG_IOCTL	0x4#define DEBUG_PRIMS	0x8#define DEBUG_VERTS	0x10#define DEBUG_FALLBACKS	0x20#define DEBUG_VERBOSE	0x40#define DEBUG_DRI       0x80#define DEBUG_DMA       0x100#define DEBUG_SANITY    0x200#define DEBUG_SYNC      0x400#define DEBUG_SLEEP     0x800#define DEBUG_PIXEL     0x1000#define DEBUG_2D        0x2000extern void viaGetLock(struct via_context *vmesa, GLuint flags);extern void viaLock(struct via_context *vmesa, GLuint flags);extern void viaUnLock(struct via_context *vmesa, GLuint flags);extern void viaEmitHwStateLocked(struct via_context *vmesa);extern void viaEmitScissorValues(struct via_context *vmesa, int box_nr, int emit);extern void viaXMesaSetBackClipRects(struct via_context *vmesa);extern void viaXMesaSetFrontClipRects(struct via_context *vmesa);extern void viaReAllocateBuffers(GLcontext *ctx, GLframebuffer *drawbuffer, GLuint width, GLuint height);extern void viaXMesaWindowMoved(struct via_context *vmesa);extern GLboolean viaTexCombineState(struct via_context *vmesa,				    const struct gl_tex_env_combine_state * combine, 				    unsigned unit );/* Via hw already adjusted for GL pixel centers: */#define SUBPIXEL_X 0#define SUBPIXEL_Y 0/* TODO XXX _SOLO temp defines to make code compilable */#ifndef GLX_PBUFFER_BIT#define GLX_PBUFFER_BIT        0x00000004#endif#ifndef GLX_WINDOW_BIT#define GLX_WINDOW_BIT 0x00000001#endif#ifndef VERT_BIT_CLIP#define VERT_BIT_CLIP       0x1000000#endif#endif

⌨️ 快捷键说明

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