-/* $XFree86$ */ /* -*- mode: c; c-basic-offset: 3 -*- */
+/* -*- mode: c; c-basic-offset: 3 -*- */
/*
* Copyright 2000 Gareth Hughes
* All Rights Reserved.
#include "mach64_vb.h"
#include "mach64_tex.h"
-#include "context.h"
-#include "enums.h"
-#include "colormac.h"
+#include "main/enums.h"
+#include "main/colormac.h"
#include "swrast/swrast.h"
-#include "array_cache/acache.h"
+#include "vbo/vbo.h"
#include "tnl/tnl.h"
#include "swrast_setup/swrast_setup.h"
-#include "tnl/t_pipeline.h"
-
/* =============================================================
* Alpha blending
*/
-static void mach64UpdateAlphaMode( GLcontext *ctx )
+static void mach64UpdateAlphaMode( struct gl_context *ctx )
{
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
GLuint a = mmesa->setup.alpha_tst_cntl;
MACH64_ALPHA_BLEND_DST_MASK |
MACH64_ALPHA_BLEND_SAT);
- switch ( ctx->Color.BlendSrcRGB ) {
+ switch ( ctx->Color.Blend[0].SrcRGB ) {
case GL_ZERO:
s |= MACH64_ALPHA_BLEND_SRC_ZERO;
break;
FALLBACK( mmesa, MACH64_FALLBACK_BLEND_FUNC, GL_TRUE );
}
- switch ( ctx->Color.BlendDstRGB ) {
+ switch ( ctx->Color.Blend[0].DstRGB ) {
case GL_ZERO:
s |= MACH64_ALPHA_BLEND_DST_ZERO;
break;
}
}
-static void mach64DDAlphaFunc( GLcontext *ctx, GLenum func, GLfloat ref )
+static void mach64DDAlphaFunc( struct gl_context *ctx, GLenum func, GLfloat ref )
{
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
mmesa->new_state |= MACH64_NEW_ALPHA;
}
-static void mach64DDBlendEquationSeparate( GLcontext *ctx,
+static void mach64DDBlendEquationSeparate( struct gl_context *ctx,
GLenum modeRGB, GLenum modeA )
{
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
mmesa->new_state |= MACH64_NEW_ALPHA;
}
-static void mach64DDBlendFuncSeparate( GLcontext *ctx,
+static void mach64DDBlendFuncSeparate( struct gl_context *ctx,
GLenum sfactorRGB, GLenum dfactorRGB,
GLenum sfactorA, GLenum dfactorA )
{
* Depth testing
*/
-static void mach64UpdateZMode( GLcontext *ctx )
+static void mach64UpdateZMode( struct gl_context *ctx )
{
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
GLuint z = mmesa->setup.z_cntl;
}
}
-static void mach64DDDepthFunc( GLcontext *ctx, GLenum func )
+static void mach64DDDepthFunc( struct gl_context *ctx, GLenum func )
{
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
mmesa->new_state |= MACH64_NEW_DEPTH;
}
-static void mach64DDDepthMask( GLcontext *ctx, GLboolean flag )
+static void mach64DDDepthMask( struct gl_context *ctx, GLboolean flag )
{
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
mmesa->new_state |= MACH64_NEW_DEPTH;
}
-static void mach64DDClearDepth( GLcontext *ctx, GLclampd d )
+static void mach64DDClearDepth( struct gl_context *ctx, GLclampd d )
{
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
* Fog
*/
-static void mach64UpdateFogAttrib( GLcontext *ctx )
+static void mach64UpdateFogAttrib( struct gl_context *ctx )
{
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
}
-static void mach64DDFogfv( GLcontext *ctx, GLenum pname, const GLfloat *param )
+static void mach64DDFogfv( struct gl_context *ctx, GLenum pname, const GLfloat *param )
{
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
* Clipping
*/
-static void mach64UpdateClipping( GLcontext *ctx )
+static void mach64UpdateClipping( struct gl_context *ctx )
{
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
mach64ScreenPtr mach64Screen = mmesa->mach64Screen;
if ( mmesa->driDrawable ) {
- __DRIdrawablePrivate *drawable = mmesa->driDrawable;
+ __DRIdrawable *drawable = mmesa->driDrawable;
int x1 = 0;
int y1 = 0;
int x2 = drawable->w - 1;
}
}
-static void mach64DDScissor( GLcontext *ctx,
+static void mach64DDScissor( struct gl_context *ctx,
GLint x, GLint y, GLsizei w, GLsizei h )
{
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
* Culling
*/
-static void mach64UpdateCull( GLcontext *ctx )
+static void mach64UpdateCull( struct gl_context *ctx )
{
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
GLfloat backface_sign = 1;
}
-static void mach64DDCullFace( GLcontext *ctx, GLenum mode )
+static void mach64DDCullFace( struct gl_context *ctx, GLenum mode )
{
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
mmesa->new_state |= MACH64_NEW_CULL;
}
-static void mach64DDFrontFace( GLcontext *ctx, GLenum mode )
+static void mach64DDFrontFace( struct gl_context *ctx, GLenum mode )
{
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
* Masks
*/
-static void mach64UpdateMasks( GLcontext *ctx )
+static void mach64UpdateMasks( struct gl_context *ctx )
{
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
GLuint mask = 0xffffffff;
/* mach64 can't color mask with alpha blending enabled */
if ( !ctx->Color.BlendEnabled ) {
mask = mach64PackColor( mmesa->mach64Screen->cpp,
- ctx->Color.ColorMask[RCOMP],
- ctx->Color.ColorMask[GCOMP],
- ctx->Color.ColorMask[BCOMP],
- ctx->Color.ColorMask[ACOMP] );
+ ctx->Color.ColorMask[0][RCOMP],
+ ctx->Color.ColorMask[0][GCOMP],
+ ctx->Color.ColorMask[0][BCOMP],
+ ctx->Color.ColorMask[0][ACOMP] );
}
if ( mmesa->setup.dp_write_mask != mask ) {
}
}
-static void mach64DDColorMask( GLcontext *ctx,
+static void mach64DDColorMask( struct gl_context *ctx,
GLboolean r, GLboolean g,
GLboolean b, GLboolean a )
{
* sense to break them out of the core texture state update routines.
*/
-static void mach64UpdateSpecularLighting( GLcontext *ctx )
+static void mach64UpdateSpecularLighting( struct gl_context *ctx )
{
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
GLuint a = mmesa->setup.alpha_tst_cntl;
}
}
-static void mach64DDLightModelfv( GLcontext *ctx, GLenum pname,
+static void mach64DDLightModelfv( struct gl_context *ctx, GLenum pname,
const GLfloat *param )
{
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
}
}
-static void mach64DDShadeModel( GLcontext *ctx, GLenum mode )
+static void mach64DDShadeModel( struct gl_context *ctx, GLenum mode )
{
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
GLuint s = mmesa->setup.setup_cntl;
*/
-void mach64CalcViewport( GLcontext *ctx )
+void mach64CalcViewport( struct gl_context *ctx )
{
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
const GLfloat *v = ctx->Viewport._WindowMap.m;
mmesa->SetupNewInputs = ~0;
}
-static void mach64Viewport( GLcontext *ctx,
+static void mach64Viewport( struct gl_context *ctx,
GLint x, GLint y,
GLsizei width, GLsizei height )
{
mach64CalcViewport( ctx );
}
-static void mach64DepthRange( GLcontext *ctx,
+static void mach64DepthRange( struct gl_context *ctx,
GLclampd nearval, GLclampd farval )
{
mach64CalcViewport( ctx );
* Miscellaneous
*/
-static void mach64DDClearColor( GLcontext *ctx,
+static void mach64DDClearColor( struct gl_context *ctx,
const GLfloat color[4] )
{
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
c[0], c[1], c[2], c[3] );
}
-static void mach64DDLogicOpCode( GLcontext *ctx, GLenum opcode )
+static void mach64DDLogicOpCode( struct gl_context *ctx, GLenum opcode )
{
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
}
}
-void mach64SetCliprects( GLcontext *ctx, GLenum mode )
+void mach64SetCliprects( struct gl_context *ctx, GLenum mode )
{
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
- __DRIdrawablePrivate *dPriv = mmesa->driDrawable;
+ __DRIdrawable *dPriv = mmesa->driDrawable;
switch ( mode ) {
case GL_FRONT_LEFT:
mmesa->dirty |= MACH64_UPLOAD_CLIPRECTS;
}
-static void mach64DDDrawBuffer( GLcontext *ctx, GLenum mode )
+static void mach64DDDrawBuffer( struct gl_context *ctx, GLenum mode )
{
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
FLUSH_BATCH( mmesa );
- /*
- * _DrawDestMask is easier to cope with than <mode>.
- */
- switch ( ctx->Color._DrawDestMask ) {
- case DD_FRONT_LEFT_BIT:
+ if (ctx->DrawBuffer->_NumColorDrawBuffers != 1) {
+ /* GL_NONE or GL_FRONT_AND_BACK or stereo left&right, etc */
+ FALLBACK( mmesa, MACH64_FALLBACK_DRAW_BUFFER, GL_TRUE );
+ return;
+ }
+
+ switch ( ctx->DrawBuffer->_ColorDrawBufferIndexes[0] ) {
+ case BUFFER_FRONT_LEFT:
FALLBACK( mmesa, MACH64_FALLBACK_DRAW_BUFFER, GL_FALSE );
mach64SetCliprects( ctx, GL_FRONT_LEFT );
if (MACH64_DEBUG & DEBUG_VERBOSE_MSG)
- fprintf(stderr,"%s: DD_FRONT_LEFT_BIT\n", __FUNCTION__);
+ fprintf(stderr,"%s: BUFFER_BIT_FRONT_LEFT\n", __FUNCTION__);
break;
- case DD_BACK_LEFT_BIT:
+ case BUFFER_BACK_LEFT:
FALLBACK( mmesa, MACH64_FALLBACK_DRAW_BUFFER, GL_FALSE );
mach64SetCliprects( ctx, GL_BACK_LEFT );
if (MACH64_DEBUG & DEBUG_VERBOSE_MSG)
- fprintf(stderr,"%s: DD_BACK_LEFT_BIT\n", __FUNCTION__);
+ fprintf(stderr,"%s: BUFFER_BIT_BACK_LEFT\n", __FUNCTION__);
break;
default:
- /* GL_NONE or GL_FRONT_AND_BACK or stereo left&right, etc */
FALLBACK( mmesa, MACH64_FALLBACK_DRAW_BUFFER, GL_TRUE );
if (MACH64_DEBUG & DEBUG_VERBOSE_MSG)
fprintf(stderr,"%s: fallback (mode=%d)\n", __FUNCTION__, mode);
break;
}
- /* We want to update the s/w rast state too so that mach64SetBuffer()
- * gets called.
- */
- _swrast_DrawBuffer(ctx, mode);
-
mmesa->setup.dst_off_pitch = (((mmesa->drawPitch/8) << 22) |
(mmesa->drawOffset >> 3));
mmesa->dirty |= MACH64_UPLOAD_DST_OFF_PITCH;
}
-static void mach64DDReadBuffer( GLcontext *ctx, GLenum mode )
+static void mach64DDReadBuffer( struct gl_context *ctx, GLenum mode )
{
/* nothing, until we implement h/w glRead/CopyPixels or CopyTexImage */
}
* State enable/disable
*/
-static void mach64DDEnable( GLcontext *ctx, GLenum cap, GLboolean state )
+static void mach64DDEnable( struct gl_context *ctx, GLenum cap, GLboolean state )
{
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
* Render mode
*/
-static void mach64DDRenderMode( GLcontext *ctx, GLenum mode )
+static void mach64DDRenderMode( struct gl_context *ctx, GLenum mode )
{
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
FALLBACK( mmesa, MACH64_FALLBACK_RENDER_MODE, (mode != GL_RENDER) );
}
/* Update the hardware state */
-void mach64DDUpdateHWState( GLcontext *ctx )
+void mach64DDUpdateHWState( struct gl_context *ctx )
{
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
int new_state = mmesa->new_state;
}
-static void mach64DDInvalidateState( GLcontext *ctx, GLuint new_state )
+static void mach64DDInvalidateState( struct gl_context *ctx, GLuint new_state )
{
_swrast_InvalidateState( ctx, new_state );
_swsetup_InvalidateState( ctx, new_state );
- _ac_InvalidateState( ctx, new_state );
+ _vbo_InvalidateState( ctx, new_state );
_tnl_InvalidateState( ctx, new_state );
MACH64_CONTEXT(ctx)->NewGLState |= new_state;
}
/* Initialize the driver's state functions.
*/
-void mach64DDInitStateFuncs( GLcontext *ctx )
+void mach64DDInitStateFuncs( struct gl_context *ctx )
{
ctx->Driver.UpdateState = mach64DDInvalidateState;
- ctx->Driver.ClearIndex = NULL;
ctx->Driver.ClearColor = mach64DDClearColor;
ctx->Driver.DrawBuffer = mach64DDDrawBuffer;
ctx->Driver.ReadBuffer = mach64DDReadBuffer;
- ctx->Driver.IndexMask = NULL;
ctx->Driver.ColorMask = mach64DDColorMask;
ctx->Driver.AlphaFunc = mach64DDAlphaFunc;
ctx->Driver.BlendEquationSeparate = mach64DDBlendEquationSeparate;
ctx->Driver.RenderMode = mach64DDRenderMode;
ctx->Driver.Scissor = mach64DDScissor;
ctx->Driver.ShadeModel = mach64DDShadeModel;
- ctx->Driver.ClearStencil = NULL;
- ctx->Driver.StencilFunc = NULL;
- ctx->Driver.StencilMask = NULL;
- ctx->Driver.StencilOp = NULL;
ctx->Driver.DepthRange = mach64DepthRange;
ctx->Driver.Viewport = mach64Viewport;
-
- /* Pixel path fallbacks.
- */
- ctx->Driver.Accum = _swrast_Accum;
- ctx->Driver.Bitmap = _swrast_Bitmap;
- ctx->Driver.CopyPixels = _swrast_CopyPixels;
- ctx->Driver.DrawPixels = _swrast_DrawPixels;
- ctx->Driver.ReadPixels = _swrast_ReadPixels;
-
- /* Swrast hooks for imaging extensions:
- */
- ctx->Driver.CopyColorTable = _swrast_CopyColorTable;
- ctx->Driver.CopyColorSubTable = _swrast_CopyColorSubTable;
- ctx->Driver.CopyConvolutionFilter1D = _swrast_CopyConvolutionFilter1D;
- ctx->Driver.CopyConvolutionFilter2D = _swrast_CopyConvolutionFilter2D;
}