📄 savagecontext.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 SAVAGECONTEXT_INC#define SAVAGECONTEXT_INCtypedef struct savage_context_t savageContext;typedef struct savage_context_t *savageContextPtr;typedef struct savage_texture_object_t *savageTextureObjectPtr;#include <X11/Xlibint.h>#include "dri_util.h"#include "mtypes.h"#include "xf86drm.h"#include "drm.h"#include "savage_drm.h"#include "savage_init.h"#include "savage_3d_reg.h"#include "mm.h"#include "tnl/t_vertex.h"#include "texmem.h"#include "xmlconfig.h"/* Reasons to fallback on all primitives. */#define SAVAGE_FALLBACK_TEXTURE 0x1#define SAVAGE_FALLBACK_DRAW_BUFFER 0x2#define SAVAGE_FALLBACK_READ_BUFFER 0x4#define SAVAGE_FALLBACK_COLORMASK 0x8 #define SAVAGE_FALLBACK_SPECULAR 0x10 #define SAVAGE_FALLBACK_LOGICOP 0x20/*frank 2001/11/12 add the stencil fallbak*/#define SAVAGE_FALLBACK_STENCIL 0x40#define SAVAGE_FALLBACK_RENDERMODE 0x80#define SAVAGE_FALLBACK_BLEND_EQ 0x100#define SAVAGE_FALLBACK_NORAST 0x200#define SAVAGE_FALLBACK_PROJ_TEXTURE 0x400#define HW_CULL 1/* for savagectx.new_state - manage GL->driver state changes */#define SAVAGE_NEW_TEXTURE 0x1#define SAVAGE_NEW_CULL 0x2/* What needs to be changed for the current vertex dma buffer? * This will go away! */#define SAVAGE_UPLOAD_LOCAL 0x1 /* DrawLocalCtrl (S4) or DrawCtrl and ZBufCtrl (S3D) */#define SAVAGE_UPLOAD_TEX0 0x2 /* texture unit 0 */#define SAVAGE_UPLOAD_TEX1 0x4 /* texture unit 1 (S4 only) */#define SAVAGE_UPLOAD_FOGTBL 0x8 /* fog table */#define SAVAGE_UPLOAD_GLOBAL 0x10 /* most global regs */#define SAVAGE_UPLOAD_TEXGLOBAL 0x20 /* TexBlendColor (S4 only) *//*define the max numer of vertex in vertex buf*/#define SAVAGE_MAX_VERTEXS 0x10000/* Don't make it too big. We don't want to buffer up a whole frame * that would force the application to wait later. */#define SAVAGE_CMDBUF_SIZE 1024/* Use the templated vertex formats: */#define TAG(x) savage##x#include "tnl_dd/t_dd_vertex.h"#undef TAGtypedef void (*savage_tri_func)( savageContextPtr, savageVertex *, savageVertex *, savageVertex * );typedef void (*savage_line_func)( savageContextPtr, savageVertex *, savageVertex * );typedef void (*savage_point_func)( savageContextPtr, savageVertex * );/************************************************************** **************** enums for chip IDs ************************ **************************************************************/#define CHIP_S3GX3MS1NB 0x8A25#define CHIP_S3GX3MS1NBK 0x8A26#define CHIP_S3TWISTER 0x8D01#define CHIP_S3TWISTERK 0x8D02#define CHIP_S3TWISTER_P4M 0x8D04#define CHIP_S3PARAMOUNT128 0x8C22 /*SuperSavage 128/MX*/#define CHIP_S3TRISTAR128SDR 0x8C2A /*SuperSavage 128/IX*/#define CHIP_S3TRISTAR64SDRM7 0x8C2C /*SuperSavage/IX M7 Package*/#define CHIP_S3TRISTAR64SDR 0x8C2E /*SuperSavage/IX*/#define CHIP_S3TRISTAR64CDDR 0x8C2F /*SuperSavage/IXC DDR*/#define IS_SAVAGE(imesa) (imesa->savageScreen->deviceID == CHIP_S3GX3MS1NB || \ imesa->savageScreen->deviceID == CHIP_S3GX3MS1NBK || \ imesa->savageScreen->deviceID == CHIP_S3TWISTER || \ imesa->savageScreen->deviceID == CHIP_S3TWISTERK || \ imesa->savageScreen->deviceID == CHIP_S3TWISTER_P4M || \ imesa->savageScreen->deviceID == CHIP_S3PARAMOUNT128 || \ imesa->savageScreen->deviceID == CHIP_S3TRISTAR128SDR || \ imesa->savageScreen->deviceID == CHIP_S3TRISTAR64SDRM7 || \ imesa->savageScreen->deviceID == CHIP_S3TRISTAR64SDR || \ imesa->savageScreen->deviceID == CHIP_S3TRISTAR64CDDR )struct savage_vtxbuf_t { GLuint total, used, flushed; /* in 32 bit units */ GLuint idx; /* for DMA buffers */ u_int32_t *buf;};struct savage_cmdbuf_t { GLuint size; /* size in qwords */ drm_savage_cmd_header_t *base; /* initial state starts here */ drm_savage_cmd_header_t *start; /* drawing/state commands start here */ drm_savage_cmd_header_t *write; /* append stuff here */};struct savage_elt_t { GLuint n; /* number of elts currently allocated */ drm_savage_cmd_header_t *cmd; /* the indexed drawing command */};struct savage_context_t { GLint refcount; GLcontext *glCtx; int lastTexHeap; driTexHeap *textureHeaps[SAVAGE_NR_TEX_HEAPS]; driTextureObject swapped; driTextureObject *CurrentTexObj[2]; /* Hardware state */ savageRegisters regs, oldRegs, globalRegMask; /* Manage our own state */ GLuint new_state; GLuint new_gl_state; GLboolean ptexHack; /* Command buffer */ struct savage_cmdbuf_t cmdBuf; /* Elt book-keeping */ struct savage_elt_t elts; GLint firstElt; /* Vertex buffers */ struct savage_vtxbuf_t dmaVtxBuf, clientVtxBuf; struct savage_vtxbuf_t *vtxBuf; /* aperture base */ GLubyte *apertureBase[5]; GLuint aperturePitch; /* Manage hardware state */ GLuint dirty; GLboolean lostContext; GLuint bTexEn1; /* One of the few bits of hardware state that can't be calculated * completely on the fly: */ GLuint LcsCullMode; GLuint texEnvColor; /* Vertex state */ GLuint vertex_size; struct tnl_attr_map vertex_attrs[VERT_ATTRIB_MAX]; GLuint vertex_attr_count; char *verts; /* points to tnl->clipspace.vertex_buf */ /* Rasterization state */ GLuint SetupNewInputs; GLuint SetupIndex; GLuint RenderIndex; GLuint hw_primitive; GLenum raster_primitive; GLenum render_primitive; GLuint skip; GLubyte HwPrim; GLuint HwVertexSize; /* Fallback rasterization functions */ savage_point_func draw_point; savage_line_func draw_line; savage_tri_func draw_tri; /* Funny mesa mirrors */ GLuint MonoColor; GLuint ClearColor; GLfloat depth_scale; GLfloat hw_viewport[16]; /* DRI stuff */ GLuint bufferSize; GLframebuffer *glBuffer; /* Two flags to keep track of fallbacks. */ GLuint Fallback; GLuint needClip; /* These refer to the current draw (front vs. back) buffer: */ int drawX; /* origin of drawable in draw buffer */ int drawY; GLuint numClipRects; /* cliprects for that buffer */ GLint currentClip; drm_clip_rect_t *pClipRects; /* use this bit to support single/double buffer */ GLuint IsDouble; /* use this to indicate Fullscreen mode */ GLuint IsFullScreen; /* FIXME - open/close fullscreen is gone, is this needed? */ GLuint backup_frontOffset; GLuint backup_backOffset; GLuint backup_frontBitmapDesc; GLuint toggle; GLuint backup_streamFIFO; GLuint NotFirstFrame; GLboolean inSwap; GLuint lastSwap; GLuint ctxAge; GLuint dirtyAge; GLuint any_contend; /* throttle me harder */ /* Scissor state needs to be mirrored so buffered commands can be * emitted with the old scissor state when scissor state changes. */ struct { GLboolean enabled; GLint x, y; GLsizei w, h; } scissor; drm_context_t hHWContext; drm_hw_lock_t *driHwLock; GLuint driFd; __DRIdrawablePrivate *driDrawable; __DRIdrawablePrivate *driReadable; __DRIscreenPrivate *driScreen; savageScreenPrivate *savageScreen; drm_savage_sarea_t *sarea; GLboolean hw_stencil; /* Performance counters */ GLuint c_textureSwaps; /* Configuration cache */ driOptionCache optionCache; GLint texture_depth; GLboolean no_rast; GLboolean float_depth; GLboolean enable_fastpath; GLboolean enable_vdma; GLboolean sync_frames;};#define SAVAGE_CONTEXT(ctx) ((savageContextPtr)(ctx->DriverCtx))/* To remove all debugging, make sure SAVAGE_DEBUG is defined as a * preprocessor symbol, and equal to zero. */#ifndef SAVAGE_DEBUGextern int SAVAGE_DEBUG;#endif#define DEBUG_FALLBACKS 0x001#define DEBUG_VERBOSE_API 0x002#define DEBUG_VERBOSE_TEX 0x004#define DEBUG_VERBOSE_MSG 0x008#define DEBUG_DMA 0x010#define DEBUG_STATE 0x020#define TARGET_FRONT 0x0#define TARGET_BACK 0x1#define TARGET_DEPTH 0x2#define SUBPIXEL_X -0.5#define SUBPIXEL_Y -0.375#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -