#ifndef __R128_CONTEXT_H__
#define __R128_CONTEXT_H__
#ifdef GLX_DIRECT_RENDERING
#include "dri_util.h"
#include "xf86drm.h"
#include "r128_common.h"
#include "mtypes.h"
#include "r128_reg.h"
#include "texmem.h"
struct r128_context;
typedef struct r128_context r128ContextRec;
typedef struct r128_context *r128ContextPtr;
#include "r128_lock.h"
#include "r128_texobj.h"
#include "r128_screen.h"
#define R128_NEW_ALPHA 0x0001
#define R128_NEW_DEPTH 0x0002
#define R128_NEW_FOG 0x0004
#define R128_NEW_CLIP 0x0008
#define R128_NEW_CULL 0x0010
#define R128_NEW_MASKS 0x0020
#define R128_NEW_RENDER_NOT 0x0040
#define R128_NEW_WINDOW 0x0080
#define R128_NEW_CONTEXT 0x0100
#define R128_NEW_ALL 0x01ff
#define R128_FALLBACK_TEXTURE 0x0001
#define R128_FALLBACK_DRAW_BUFFER 0x0002
#define R128_FALLBACK_READ_BUFFER 0x0004
#define R128_FALLBACK_STENCIL 0x0008
#define R128_FALLBACK_RENDER_MODE 0x0010
#define R128_FALLBACK_MULTIDRAW 0x0020
#define R128_FALLBACK_LOGICOP 0x0040
#define R128_FALLBACK_SEP_SPECULAR 0x0080
#define R128_FALLBACK_BLEND_EQ 0x0100
#define R128_FALLBACK_BLEND_FUNC 0x0200
#define TAG(x) r128##x
#include "tnl_dd/t_dd_vertex.h"
#undef TAG
#define R128_BLEND_ENV_COLOR 0x1
#define R128_BLEND_MULTITEX 0x2
#define SUBPIXEL_X (0.0F)
#define SUBPIXEL_Y (0.125F)
typedef void (*r128_tri_func)( r128ContextPtr,
r128Vertex *,
r128Vertex *,
r128Vertex * );
typedef void (*r128_line_func)( r128ContextPtr,
r128Vertex *,
r128Vertex * );
typedef void (*r128_point_func)( r128ContextPtr,
r128Vertex * );
struct r128_context {
GLcontext *glCtx;
GLuint new_state;
GLuint dirty;
r128_context_regs_t setup;
struct gl_client_array UbyteColor;
struct gl_client_array UbyteSecondaryColor;
GLuint NewGLState;
GLuint Fallback;
GLuint SetupIndex;
GLuint SetupNewInputs;
GLuint RenderIndex;
GLfloat hw_viewport[16];
GLfloat depth_scale;
GLuint vertex_size;
GLuint vertex_stride_shift;
GLuint vertex_format;
GLuint num_verts;
GLubyte *verts;
CARD32 ClearColor;
CARD32 ClearDepth;
CARD32 ClearStencil;
GLint multitex;
GLint tmu_source[2];
GLuint tex_combine[2];
GLuint blend_flags;
GLuint env_color;
unsigned nr_heaps;
driTexHeap * texture_heaps[ R128_NR_TEX_HEAPS ];
driTextureObject swapped;
r128TexObjPtr CurrentTexObj[2];
r128_point_func draw_point;
r128_line_func draw_line;
r128_tri_func draw_tri;
drmBufPtr vert_buf;
GLuint hw_primitive;
GLenum render_primitive;
GLuint doPageFlip;
GLuint do_irqs;
GLint drawOffset, drawPitch;
GLint readOffset, readPitch;
GLuint numClipRects;
XF86DRIClipRectPtr pClipRects;
GLuint scissor;
XF86DRIClipRectRec ScissorRect;
__DRIcontextPrivate *driContext;
__DRIscreenPrivate *driScreen;
__DRIdrawablePrivate *driDrawable;
unsigned int lastStamp;
drmContext hHWContext;
drmLock *driHwLock;
int driFd;
r128ScreenPtr r128Screen;
R128SAREAPrivPtr sarea;
GLuint boxes;
GLuint hardwareWentIdle;
GLuint c_clears;
GLuint c_drawWaits;
GLuint c_textureSwaps;
GLuint c_textureBytes;
GLuint c_vertexBuffers;
GLuint vbl_seq;
GLuint vblank_flags;
};
#define R128_CONTEXT(ctx) ((r128ContextPtr)(ctx->DriverCtx))
#define R128_IS_PLAIN( rmesa ) \
(rmesa->r128Screen->chipset == R128_CARD_TYPE_R128)
#define R128_IS_PRO( rmesa ) \
(rmesa->r128Screen->chipset == R128_CARD_TYPE_R128_PRO)
#define R128_IS_MOBILITY( rmesa ) \
(rmesa->r128Screen->chipset == R128_CARD_TYPE_R128_MOBILITY)
extern GLboolean r128CreateContext( const __GLcontextModes *glVisual,
__DRIcontextPrivate *driContextPriv,
void *sharedContextPrivate );
extern void r128DestroyContext( __DRIcontextPrivate * );
extern GLboolean r128MakeCurrent( __DRIcontextPrivate *driContextPriv,
__DRIdrawablePrivate *driDrawPriv,
__DRIdrawablePrivate *driReadPriv );
extern GLboolean r128UnbindContext( __DRIcontextPrivate *driContextPriv );
#define DO_DEBUG 0
#define ENABLE_PERF_BOXES 0
#if DO_DEBUG
extern int R128_DEBUG;
#else
#define R128_DEBUG 0
#endif
#define DEBUG_ALWAYS_SYNC 0x01
#define DEBUG_VERBOSE_API 0x02
#define DEBUG_VERBOSE_MSG 0x04
#define DEBUG_VERBOSE_LRU 0x08
#define DEBUG_VERBOSE_DRI 0x10
#define DEBUG_VERBOSE_IOCTL 0x20
#define DEBUG_VERBOSE_2D 0x40
#endif
#endif