/* $XFree86$ */ /* -*- mode: c; c-basic-offset: 3 -*- */
/*
 * Copyright 2000 Gareth Hughes
 * 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, sublicense,
 * 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 NONINFRINGEMENT.  IN NO EVENT SHALL
 * GARETH HUGHES 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.
 */

/*
 * Authors:
 *	Gareth Hughes <gareth@valinux.com>
 *	Leif Delgass <ldelgass@retinalburn.net>
 *	Jos�Fonseca <j_r_fonseca@yahoo.co.uk>
 */

#ifndef __MACH64_CONTEXT_H__
#define __MACH64_CONTEXT_H__

#include "dri_util.h"
#include "drm.h"
#include "mach64_drm.h"

#include "mtypes.h"

#include "mach64_reg.h"

#include "texmem.h"

struct mach64_context;
typedef struct mach64_context mach64ContextRec;
typedef struct mach64_context *mach64ContextPtr;

#include "mach64_lock.h"
#include "mach64_screen.h"

/* Experimental driver options */
#define MACH64_CLIENT_STATE_EMITS       0

/* Performace monitoring */
#define ENABLE_PERF_BOXES               1

/* Native vertex format */
#define MACH64_NATIVE_VTXFMT		1

/* Flags for what context state needs to be updated:
 */
#define MACH64_NEW_ALPHA		0x0001
#define MACH64_NEW_DEPTH		0x0002
#define MACH64_NEW_FOG			0x0004
#define MACH64_NEW_CLIP			0x0008
#define MACH64_NEW_CULL			0x0010
#define MACH64_NEW_MASKS		0x0020
#define MACH64_NEW_RENDER_UNUSED	0x0040
#define MACH64_NEW_WINDOW		0x0080
#define MACH64_NEW_TEXTURE		0x0100
#define MACH64_NEW_CONTEXT		0x0200
#define MACH64_NEW_ALL			0x03ff

/* Flags for software fallback cases:
 */
#define MACH64_FALLBACK_TEXTURE		0x0001
#define MACH64_FALLBACK_DRAW_BUFFER	0x0002
#define MACH64_FALLBACK_READ_BUFFER	0x0004
#define MACH64_FALLBACK_STENCIL		0x0008
#define MACH64_FALLBACK_RENDER_MODE	0x0010
#define MACH64_FALLBACK_LOGICOP		0x0020
#define MACH64_FALLBACK_SEP_SPECULAR	0x0040
#define MACH64_FALLBACK_BLEND_EQ	0x0080
#define MACH64_FALLBACK_BLEND_FUNC	0x0100
#define MACH64_FALLBACK_DISABLE		0x0200

#define CARD32 GLuint		/* KW: For building in mesa tree */

#if MACH64_NATIVE_VTXFMT

/* The vertex structures.
 */

/* The size of this union is not of relevence:
 */
union mach64_vertex_t {
   GLfloat f[16];
   GLuint ui[16];
   GLushort us2[16][2];
   GLubyte ub4[16][4];
};

typedef union mach64_vertex_t mach64Vertex, *mach64VertexPtr;

#else

/* Use the templated vertex format:
 */
#define TAG(x) mach64##x
#include "tnl_dd/t_dd_vertex.h"
#undef TAG

#endif /* MACH64_NATIVE_VTXFMT */

/* Subpixel offsets for window coordinates:
 * These are enough to fix most glean tests except polygonOffset.
 * There are also still some gaps that show in e.g. the tunnel Mesa demo
 * or the lament xscreensaver hack.
 */
#define SUBPIXEL_X	(0.0125F)
#define SUBPIXEL_Y	(0.15F)


typedef void (*mach64_tri_func)( mach64ContextPtr,
				   mach64Vertex *,
				   mach64Vertex *,
				   mach64Vertex * );

typedef void (*mach64_line_func)( mach64ContextPtr,
				    mach64Vertex *,
				    mach64Vertex * );

typedef void (*mach64_point_func)( mach64ContextPtr,
				     mach64Vertex * );

struct mach64_texture_object {
   driTextureObject   base;

   GLuint bufAddr;

   GLint heap; /* same as base.heap->heapId */

   /* For communicating values from mach64AllocTexObj(), mach64SetTexImages()
    * to mach64UpdateTextureUnit(). Alternately, we can use the tObj values or
    * set the context registers directly.
    */
   GLint widthLog2;
   GLint heightLog2;
   GLint maxLog2;

   GLint hasAlpha;
   GLint textureFormat;

   GLboolean BilinearMin;
   GLboolean BilinearMag;
   GLboolean ClampS;
   GLboolean ClampT;
};

typedef struct mach64_texture_object mach64TexObj, *mach64TexObjPtr;

struct mach64_context {
   GLcontext *glCtx;

   /* Driver and hardware state management
    */
   GLuint new_state;
   GLuint dirty;			/* Hardware state to be updated */
   drm_mach64_context_regs_t setup;

   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 Color;			/* Current draw color */
   CARD32 ClearColor;			/* Color used to clear color buffer */
   CARD32 ClearDepth;			/* Value used to clear depth buffer */

   /* Map GL texture units onto hardware
    */
   GLint multitex;
   GLint tmu_source[2];
   GLint tex_dest[2];

   /* Texture object bookkeeping
    */
   mach64TexObjPtr CurrentTexObj[2];

   GLint firstTexHeap, lastTexHeap;
   driTexHeap *texture_heaps[MACH64_NR_TEX_HEAPS];
   driTextureObject swapped;

   /* Fallback rasterization functions
    */
   mach64_point_func draw_point;
   mach64_line_func draw_line;
   mach64_tri_func draw_tri;

   /* Culling */
   GLfloat backface_sign;

   /* DMA buffers
    */
   void *vert_buf;
   size_t vert_total;
   unsigned vert_used;

   GLuint hw_primitive;
   GLenum render_primitive;

   /* Visual, drawable, cliprect and scissor information
    */
   GLint drawOffset, drawPitch;
   GLint drawX, drawY;                  /* origin of drawable in draw buffer */
   GLint readOffset, readPitch;

   GLuint numClipRects;			/* Cliprects for the draw buffer */
   drm_clip_rect_t *pClipRects;

   GLint scissor;
   drm_clip_rect_t ScissorRect;	/* Current software scissor */

   /* Mirrors of some DRI state
    */
   __DRIcontextPrivate	*driContext;	/* DRI context */
   __DRIscreenPrivate	*driScreen;	/* DRI screen */
   __DRIdrawablePrivate	*driDrawable;	/* DRI drawable bound to this ctx */

   unsigned int lastStamp;		/* mirror driDrawable->lastStamp */

   drm_context_t hHWContext;
   drm_hw_lock_t *driHwLock;
   int driFd;

   mach64ScreenPtr mach64Screen;	/* Screen private DRI data */
   drm_mach64_sarea_t *sarea;		/* Private SAREA data */

   GLuint hardwareWentIdle;

#if ENABLE_PERF_BOXES
   /* Performance counters
    */
   GLuint boxes;			/* Draw performance boxes */
   GLuint c_clears;
   GLuint c_drawWaits;
   GLuint c_textureSwaps;
   GLuint c_textureBytes;
   GLuint c_agpTextureBytes;
   GLuint c_texsrc_agp;
   GLuint c_texsrc_card;
   GLuint c_vertexBuffers;
#endif

   /* VBI
    */
   GLuint do_irqs;

   /* Configuration cache
    */
   driOptionCache optionCache;
};

#define MACH64_CONTEXT(ctx)		((mach64ContextPtr)(ctx->DriverCtx))


extern GLboolean mach64CreateContext( const __GLcontextModes *glVisual,
				      __DRIcontextPrivate *driContextPriv,
                                      void *sharedContextPrivate );

extern void mach64DestroyContext( __DRIcontextPrivate * );

extern GLboolean mach64MakeCurrent( __DRIcontextPrivate *driContextPriv,
                                    __DRIdrawablePrivate *driDrawPriv,
                                    __DRIdrawablePrivate *driReadPriv );

extern GLboolean mach64UnbindContext( __DRIcontextPrivate *driContextPriv );

/* ================================================================
 * Byte ordering
 */
#if MESA_LITTLE_ENDIAN == 1
#define LE32_IN( x )		( *(GLuint *)(x) )
#define LE32_IN_FLOAT( x )	( *(GLfloat *)(x) )
#define LE32_OUT( x, y )	do { *(GLuint *)(x) = (y); } while (0)
#define LE32_OUT_FLOAT( x, y )	do { *(GLfloat *)(x) = (y); } while (0)
#else
#include <byteswap.h>
#define LE32_IN( x )		bswap_32( *(GLuint *)(x) )
#define LE32_IN_FLOAT( x )						\
({									\
   GLuint __tmp = bswap_32( *(GLuint *)(x) );				\
   *(GLfloat *)&__tmp;							\
})
#define LE32_OUT( x, y )	do { *(GLuint *)(x) = bswap_32( y ); } while (0)
#define LE32_OUT_FLOAT( x, y )						\
do {									\
   GLuint __tmp;							\
   *(GLfloat *)&__tmp = (y);						\
   *(GLuint *)(x) = bswap_32( __tmp );					\
} while (0)
#endif

/* ================================================================
 * DMA buffers
 */

#define DMALOCALS       CARD32 *buf=NULL; int requested=0; int outcount=0

/* called while locked for interleaved client-side state emits */
#define DMAGETPTR( dwords )					\
do {								\
   requested = (dwords);					\
   buf = (CARD32 *)mach64AllocDmaLocked( mmesa, ((dwords)*4) );	\
   outcount = 0;						\
} while(0)

#define DMAOUTREG( reg, val )				\
do {							\
   LE32_OUT( &buf[outcount++], ADRINDEX( reg ) );	\
   LE32_OUT( &buf[outcount++], ( val ) );		\
} while(0)

#define DMAADVANCE()						\
do {								\
   if (outcount < requested) {					\
      mmesa->vert_used -= (requested - outcount) * 4;	\
   }								\
} while(0)

/* ================================================================
 * Debugging:
 */

#define DO_DEBUG		1

#if DO_DEBUG
extern int MACH64_DEBUG;
#else
#define MACH64_DEBUG		0
#endif

#define DEBUG_ALWAYS_SYNC	0x001
#define DEBUG_VERBOSE_API	0x002
#define DEBUG_VERBOSE_MSG	0x004
#define DEBUG_VERBOSE_LRU	0x008
#define DEBUG_VERBOSE_DRI	0x010
#define DEBUG_VERBOSE_IOCTL	0x020
#define DEBUG_VERBOSE_PRIMS	0x040
#define DEBUG_VERBOSE_COUNT	0x080
#define DEBUG_NOWAIT		0x100
#define DEBUG_VERBOSE_FALLBACK	0x200
#endif /* __MACH64_CONTEXT_H__ */
