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

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