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