cosmetics; translated asm routines for use with ASSYNTAX.H

This commit is contained in:
Daniel Borca 2003-10-21 08:27:21 +00:00
parent 1aa28b3fe3
commit 3f60e4f21b
3 changed files with 40 additions and 389 deletions

View file

@ -1,6 +1,6 @@
/*
* Mesa 3-D graphics library
* Version: 5.0.1
* Version: 5.1
*
* Copyright (C) 1999-2003 Brian Paul All Rights Reserved.
*
@ -1109,11 +1109,22 @@ static void clear (GLcontext *ctx, GLbitfield mask, GLboolean all,
/*
* This function is called to specify which buffer to read and write
* for software rasterization (swrast) fallbacks. This doesn't necessarily
* correspond to glDrawBuffer() or glReadBuffer() calls.
*/
static void set_buffer (GLcontext *ctx, GLframebuffer *colorBuffer, GLuint bufferBit)
{
/*
* XXX todo - examine bufferBit and set read/write pointers
*/
/* Normally, we would have
* ctx->Driver.ReadBuffer == set_read_buffer
* ctx->Driver.DrawBuffer == set_draw_buffer
* and make sure set_draw_buffer calls _swrast_DrawBuffer,
* which in turn will call this routine via dd->SetBuffer.
*/
}
@ -1138,9 +1149,6 @@ static const GLubyte* get_string (GLcontext *ctx, GLenum name)
switch (name) {
case GL_RENDERER:
return (const GLubyte *)"Mesa DJGPP"
#ifdef FX
" (FX)"
#endif
#ifdef MATROX
" (MGA)"
#endif
@ -1269,16 +1277,16 @@ static void dmesa_init_pointers (GLcontext *ctx)
tnl->Driver.RunPipeline = _tnl_run_pipeline;
#if FEATURE_ARB_vertex_buffer_object
ctx->Driver.NewBufferObject = _mesa_new_buffer_object;
ctx->Driver.DeleteBuffer = _mesa_delete_buffer_object;
ctx->Driver.BindBuffer = NULL;
ctx->Driver.BufferData = _mesa_buffer_data;
ctx->Driver.BufferSubData = _mesa_buffer_subdata;
ctx->Driver.MapBuffer = _mesa_buffer_map;
ctx->Driver.UnmapBuffer = NULL;
ctx->Driver.NewBufferObject = _mesa_new_buffer_object;
ctx->Driver.DeleteBuffer = _mesa_delete_buffer_object;
ctx->Driver.BindBuffer = NULL;
ctx->Driver.BufferData = _mesa_buffer_data;
ctx->Driver.BufferSubData = _mesa_buffer_subdata;
ctx->Driver.MapBuffer = _mesa_buffer_map;
ctx->Driver.UnmapBuffer = NULL;
#endif
dd->SetBuffer = set_buffer;
dd->SetBuffer = set_buffer;
/* Install swsetup for tnl->Driver.Render.*:
*/
@ -1322,7 +1330,7 @@ static void dmesa_init_pointers (GLcontext *ctx)
static void dmesa_update_state (GLcontext *ctx, GLuint new_state)
{
/* Propogate statechange information to swrast and swrast_setup
/* Propagate statechange information to swrast and swrast_setup
* modules. The DMesa driver has no internal GL-dependent state.
*/
_swrast_InvalidateState( ctx, new_state );

View file

@ -23,7 +23,7 @@
*/
/*
* DOS/DJGPP device driver v1.3 for Mesa -- MGA2064W triangle template
* DOS/DJGPP device driver v1.4 for Mesa -- MGA2064W triangle template
*
* Copyright (c) 2003 - Borca Daniel
* Email : dborca@yahoo.com
@ -83,7 +83,9 @@ void TAG (int cull, const MGAvertex *v1, const MGAvertex *v2, const MGAvertex *v
#endif
#if defined(INTERP_Z) || defined(INTERP_RGB)
#if !LONG_LONG
double one_area;
#endif
#ifndef INTERP_RGB
int red = v3->color[0];
int green = v3->color[1];
@ -147,7 +149,9 @@ void TAG (int cull, const MGAvertex *v1, const MGAvertex *v2, const MGAvertex *v
/* draw lower triangle */
#if defined(INTERP_Z) || defined(INTERP_RGB)
#if !LONG_LONG
one_area = (double)(1<<15) / (double)area;
#endif
mga_fifo(1);
#else
mga_fifo(2);
@ -163,8 +167,13 @@ void TAG (int cull, const MGAvertex *v1, const MGAvertex *v2, const MGAvertex *v
/* compute d?/dx and d?/dy derivatives */
eMaj_dz = z3 - z1;
eBot_dz = z2 - z1;
#if !LONG_LONG
dzdx = (eMaj_dz * eBot_dy - eMaj_dy * eBot_dz) * one_area;
dzdy = (eMaj_dx * eBot_dz - eMaj_dz * eBot_dx) * one_area;
#else
dzdx = ((long long)(eMaj_dz * eBot_dy - eMaj_dy * eBot_dz)<<15) / area;
dzdy = ((long long)(eMaj_dx * eBot_dz - eMaj_dz * eBot_dx)<<15) / area;
#endif
#ifndef INTERP_RGB
mga_fifo(11);
@ -196,12 +205,21 @@ void TAG (int cull, const MGAvertex *v1, const MGAvertex *v2, const MGAvertex *v
eBot_db = v2->color[2] - v1->color[2];
/* compute color increments */
#if !LONG_LONG
drdx = (eMaj_dr * eBot_dy - eMaj_dy * eBot_dr) * one_area;
drdy = (eMaj_dx * eBot_dr - eMaj_dr * eBot_dx) * one_area;
dgdx = (eMaj_dg * eBot_dy - eMaj_dy * eBot_dg) * one_area;
dgdy = (eMaj_dx * eBot_dg - eMaj_dg * eBot_dx) * one_area;
dbdx = (eMaj_db * eBot_dy - eMaj_dy * eBot_db) * one_area;
dbdy = (eMaj_dx * eBot_db - eMaj_db * eBot_dx) * one_area;
#else
drdx = ((long long)(eMaj_dr * eBot_dy - eMaj_dy * eBot_dr)<<15) / area;
drdy = ((long long)(eMaj_dx * eBot_dr - eMaj_dr * eBot_dx)<<15) / area;
dgdx = ((long long)(eMaj_dg * eBot_dy - eMaj_dy * eBot_dg)<<15) / area;
dgdy = ((long long)(eMaj_dx * eBot_dg - eMaj_dg * eBot_dx)<<15) / area;
dbdx = ((long long)(eMaj_db * eBot_dy - eMaj_dy * eBot_db)<<15) / area;
dbdy = ((long long)(eMaj_dx * eBot_db - eMaj_db * eBot_dx)<<15) / area;
#endif
mga_fifo(6);
mga_outl(M_DR6, drdx);

View file

@ -1,375 +0,0 @@
/*
* Mesa 3-D graphics library
* Version: 5.0
*
* Copyright (C) 1999-2002 Brian Paul 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 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
* BRIAN PAUL 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.
*/
/*
* DOS/DJGPP device driver v1.3 for Mesa -- MGA2064W triangle template
*
* Copyright (c) 2003 - Borca Daniel
* Email : dborca@yahoo.com
* Web : http://www.geocities.com/dborca
*/
/*
* Triangle Rasterizer Template
*
* This file is #include'd to generate custom triangle rasterizers.
*
* The following macros may be defined to indicate what auxillary information
* must be interplated across the triangle:
* INTERP_Z - if defined, interpolate Z values
* INTERP_RGB - if defined, interpolate RGB values
*
* TAG - function name
* CULL - enable culling for: 0=no, 1=back, -1=front
*
* SETUP_CODE - to be executed once per triangle (usually HW init)
*
* For flatshaded primitives, the provoking vertex is the final one.
* This code was designed for the origin to be in the upper-left corner.
*
* Inspired by triangle rasterizer code written by Brian Paul.
*/
#define TRI_SWAP(a, b) \
do { \
const MGAvertex *tmp = a; \
a = b; \
b = tmp; \
} while (0)
void TAG (int cull, const MGAvertex *v1, const MGAvertex *v2, const MGAvertex *v3)
{
int area;
int x1, y1, x2, y2, x3, y3;
int eMaj_dx, eMaj_dy, eBot_dx, eBot_dy, eTop_dx, eTop_dy;
#ifdef INTERP_RGB
#define FIFO_CNT_RGB 3
int eMaj_dr, eBot_dr, eMaj_dg, eBot_dg, eMaj_db, eBot_db;
int drdx, drdy, dgdx, dgdy, dbdx, dbdy;
#else
#define FIFO_CNT_RGB 0
#endif
#ifdef INTERP_Z
#define FIFO_CNT_Z 1
int dzdx, dzdy;
int eMaj_dz, eBot_dz;
int z1, z2, z3;
#else
#define FIFO_CNT_Z 0
#endif
#if defined(INTERP_Z) || defined(INTERP_RGB)
#ifndef INTERP_RGB
int red = v3->color[0];
int green = v3->color[1];
int blue = v3->color[2];
#endif
#else
unsigned long color = mga_mixrgb_full(v3->color);
#endif
int sgn = 0;
/* sort along the vertical axis */
if (v2->win[1] < v1->win[1]) {
TRI_SWAP(v1, v2);
#ifdef CULL
cull = -cull;
#endif
}
if (v3->win[1] < v1->win[1]) {
TRI_SWAP(v1, v3);
TRI_SWAP(v2, v3);
} else if (v3->win[1] < v2->win[1]) {
TRI_SWAP(v2, v3);
#ifdef CULL
cull = -cull;
#endif
}
x1 = v1->win[0];
y1 = v1->win[1];
x2 = v2->win[0];
y2 = v2->win[1];
x3 = v3->win[0];
y3 = v3->win[1];
/* compute deltas for each edge */
eMaj_dx = x3 - x1;
eMaj_dy = y3 - y1;
eBot_dx = x2 - x1;
eBot_dy = y2 - y1;
eTop_dx = x3 - x2;
eTop_dy = y3 - y2;
/* compute area */
if ((area = eMaj_dx * eBot_dy - eBot_dx * eMaj_dy) == 0) {
return;
}
#ifdef CULL
if ((area * cull) > 0) {
return;
}
#endif
mga_select();
/* set engine state */
#ifdef SETUP_CODE
SETUP_CODE
#endif
/* draw lower triangle */
#if defined(INTERP_Z) || defined(INTERP_RGB)
mga_fifo(1);
#else
mga_fifo(2);
mga_outl(M_FCOL, color);
#endif
mga_outl(M_YDST, y1);
#ifdef INTERP_Z
z1 = v1->win[2];
z2 = v2->win[2];
z3 = v3->win[2];
/* compute d?/dx and d?/dy derivatives */
eMaj_dz = z3 - z1;
eBot_dz = z2 - z1;
dzdx = ((long long)(eMaj_dz * eBot_dy - eMaj_dy * eBot_dz)<<15) / area;
dzdy = ((long long)(eMaj_dx * eBot_dz - eMaj_dz * eBot_dx)<<15) / area;
#ifndef INTERP_RGB
mga_fifo(11);
mga_outl(M_DR2, dzdx);
mga_outl(M_DR3, dzdy);
mga_outl(M_DR4, red<<15);
mga_outl(M_DR6, 0);
mga_outl(M_DR7, 0);
mga_outl(M_DR8, green<<15);
mga_outl(M_DR10, 0);
mga_outl(M_DR11, 0);
mga_outl(M_DR12, blue<<15);
mga_outl(M_DR14, 0);
mga_outl(M_DR15, 0);
#else
mga_fifo(2);
mga_outl(M_DR2, dzdx);
mga_outl(M_DR3, dzdy);
#endif
#endif
#ifdef INTERP_RGB
/* compute color deltas */
eMaj_dr = v3->color[0] - v1->color[0];
eBot_dr = v2->color[0] - v1->color[0];
eMaj_dg = v3->color[1] - v1->color[1];
eBot_dg = v2->color[1] - v1->color[1];
eMaj_db = v3->color[2] - v1->color[2];
eBot_db = v2->color[2] - v1->color[2];
/* compute color increments */
drdx = ((long long)(eMaj_dr * eBot_dy - eMaj_dy * eBot_dr)<<15) / area;
drdy = ((long long)(eMaj_dx * eBot_dr - eMaj_dr * eBot_dx)<<15) / area;
dgdx = ((long long)(eMaj_dg * eBot_dy - eMaj_dy * eBot_dg)<<15) / area;
dgdy = ((long long)(eMaj_dx * eBot_dg - eMaj_dg * eBot_dx)<<15) / area;
dbdx = ((long long)(eMaj_db * eBot_dy - eMaj_dy * eBot_db)<<15) / area;
dbdy = ((long long)(eMaj_dx * eBot_db - eMaj_db * eBot_dx)<<15) / area;
mga_fifo(6);
mga_outl(M_DR6, drdx);
mga_outl(M_DR7, drdy);
mga_outl(M_DR10, dgdx);
mga_outl(M_DR11, dgdy);
mga_outl(M_DR14, dbdx);
mga_outl(M_DR15, dbdy);
#endif
if (area > 0) { /* major edge on the right */
if (eBot_dy) { /* have lower triangle */
mga_fifo(9 + FIFO_CNT_Z + FIFO_CNT_RGB);
mga_outl(M_AR0, eBot_dy);
if (x2 < x1) {
mga_outl(M_AR1, eBot_dx + eBot_dy - 1);
mga_outl(M_AR2, eBot_dx);
sgn |= M_SDXL;
} else {
mga_outl(M_AR1, -eBot_dx);
mga_outl(M_AR2, -eBot_dx);
}
mga_outl(M_AR6, eMaj_dy);
if (x3 < x1) {
mga_outl(M_AR4, eMaj_dx + eMaj_dy - 1);
mga_outl(M_AR5, eMaj_dx);
sgn |= M_SDXR;
} else {
mga_outl(M_AR4, -eMaj_dx);
mga_outl(M_AR5, -eMaj_dx);
}
mga_outl(M_FXBNDRY, (x1<<16) | x1);
#ifdef INTERP_Z
mga_outl(M_DR0, z1<<15);
#endif
#ifdef INTERP_RGB
mga_outl(M_DR4, v1->color[0]<<15);
mga_outl(M_DR8, v1->color[1]<<15);
mga_outl(M_DR12, v1->color[2]<<15);
#endif
mga_outl(M_SGN, sgn);
mga_outl(M_LEN | M_EXEC, eBot_dy);
} else { /* no lower triangle */
mga_fifo(4 + FIFO_CNT_Z + FIFO_CNT_RGB);
mga_outl(M_AR6, eMaj_dy);
if (x3 < x1) {
mga_outl(M_AR4, eMaj_dx + eMaj_dy - 1);
mga_outl(M_AR5, eMaj_dx);
sgn |= M_SDXR;
} else {
mga_outl(M_AR4, -eMaj_dx);
mga_outl(M_AR5, -eMaj_dx);
}
mga_outl(M_FXBNDRY, (x1<<16) | x2);
#ifdef INTERP_Z
mga_outl(M_DR0, z2<<15);
#endif
#ifdef INTERP_RGB
mga_outl(M_DR4, v2->color[0]<<15);
mga_outl(M_DR8, v2->color[1]<<15);
mga_outl(M_DR12, v2->color[2]<<15);
#endif
}
/* draw upper triangle */
if (eTop_dy) {
mga_fifo(5);
mga_outl(M_AR0, eTop_dy);
if (x3 < x2) {
mga_outl(M_AR1, eTop_dx + eTop_dy - 1);
mga_outl(M_AR2, eTop_dx);
sgn |= M_SDXL;
} else {
mga_outl(M_AR1, -eTop_dx);
mga_outl(M_AR2, -eTop_dx);
sgn &= ~M_SDXL;
}
mga_outl(M_SGN, sgn);
mga_outl(M_LEN | M_EXEC, eTop_dy);
}
} else { /* major edge on the left */
if (eBot_dy) { /* have lower triangle */
mga_fifo(9 + FIFO_CNT_Z + FIFO_CNT_RGB);
mga_outl(M_AR0, eMaj_dy);
if (x3 < x1) {
mga_outl(M_AR1, eMaj_dx + eMaj_dy - 1);
mga_outl(M_AR2, eMaj_dx);
sgn |= M_SDXL;
} else {
mga_outl(M_AR1, -eMaj_dx);
mga_outl(M_AR2, -eMaj_dx);
}
mga_outl(M_AR6, eBot_dy);
if (x2 < x1) {
mga_outl(M_AR4, eBot_dx + eBot_dy - 1);
mga_outl(M_AR5, eBot_dx);
sgn |= M_SDXR;
} else {
mga_outl(M_AR4, -eBot_dx);
mga_outl(M_AR5, -eBot_dx);
}
mga_outl(M_FXBNDRY, (x1<<16) | x1);
#ifdef INTERP_Z
mga_outl(M_DR0, z1<<15);
#endif
#ifdef INTERP_RGB
mga_outl(M_DR4, v1->color[0]<<15);
mga_outl(M_DR8, v1->color[1]<<15);
mga_outl(M_DR12, v1->color[2]<<15);
#endif
mga_outl(M_SGN, sgn);
mga_outl(M_LEN | M_EXEC, eBot_dy);
} else { /* no lower triangle */
mga_fifo(4 + FIFO_CNT_Z + FIFO_CNT_RGB);
mga_outl(M_AR0, eMaj_dy);
if (x3 < x1) {
mga_outl(M_AR1, eMaj_dx + eMaj_dy - 1);
mga_outl(M_AR2, eMaj_dx);
sgn |= M_SDXL;
} else {
mga_outl(M_AR1, -eMaj_dx);
mga_outl(M_AR2, -eMaj_dx);
}
mga_outl(M_FXBNDRY, (x2<<16) | x1);
#ifdef INTERP_Z
mga_outl(M_DR0, z1<<15);
#endif
#ifdef INTERP_RGB
mga_outl(M_DR4, v1->color[0]<<15);
mga_outl(M_DR8, v1->color[1]<<15);
mga_outl(M_DR12, v1->color[2]<<15);
#endif
}
/* draw upper triangle */
if (eTop_dy) {
mga_fifo(5);
mga_outl(M_AR6, eTop_dy);
if (x3 < x2) {
mga_outl(M_AR4, eTop_dx + eTop_dy - 1);
mga_outl(M_AR5, eTop_dx);
sgn |= M_SDXR;
} else {
mga_outl(M_AR4, -eTop_dx);
mga_outl(M_AR5, -eTop_dx);
sgn &= ~M_SDXR;
}
mga_outl(M_SGN, sgn);
mga_outl(M_LEN | M_EXEC, eTop_dy);
}
}
}
#undef FIFO_CNT_RGB
#undef FIFO_CNT_Z
#undef TRI_SWAP
#undef SETUP_CODE
#undef INTERP_RGB
#undef INTERP_Z
#undef CULL
#undef TAG