mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
744 lines
15 KiB
744 lines
15 KiB
/*
|
|
** Copyright 1991, 1992, 1993, Silicon Graphics, Inc.
|
|
** All Rights Reserved.
|
|
**
|
|
** This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics,
|
|
** Inc.; the contents of this file may not be disclosed to third
|
|
** parties, copied or duplicated in any form, in whole or in part,
|
|
** without the prior written permission of Silicon Graphics, Inc.
|
|
**
|
|
** RESTRICTED RIGHTS LEGEND:
|
|
** Use, duplication or disclosure by the Government is subject to
|
|
** restrictions as set forth in subdivision (c)(1)(ii) of the Rights in
|
|
** Technical Data and Computer Software clause at DFARS 252.227-7013,
|
|
** and/or in similar or successor clauses in the FAR, DOD or NASA FAR
|
|
** Supplement. Unpublished - rights reserved under the Copyright Laws
|
|
** of the United States.
|
|
**
|
|
** PowerPC version:
|
|
**
|
|
** Created by: Curtis Fawcett IBM Corporation
|
|
**
|
|
** Created on: 7-5-94
|
|
**
|
|
*/
|
|
|
|
#include <ksppc.h>
|
|
#include "glppc.h"
|
|
|
|
//
|
|
// Define externals
|
|
//
|
|
.extern .._savegpr_28
|
|
.extern .._restgpr_28
|
|
|
|
//
|
|
// Define Local values
|
|
//
|
|
|
|
#define STK_MIN_FRAME StackFrameHeaderLength
|
|
#define SSIZE STK_MIN_FRAME+40 //Hdr+lr+4Regs+4local+fill
|
|
#define NEPTR STK_MIN_FRAME
|
|
|
|
|
|
#ifdef __GL_ASM_VALIDATEVERTEX2
|
|
|
|
//
|
|
// *******************************************************************
|
|
//
|
|
//void __glValidateVertex2(__GLcontext *gc,__GLvertex *vx,GLuint needs)
|
|
// {
|
|
//
|
|
NESTED_ENTRY(__glValidateVertex2,SSIZE,4,0)
|
|
PROLOGUE_END(__glValidateVertex2)
|
|
//
|
|
// GLuint has = vx->has;
|
|
// GLuint wants = needs & ~has;
|
|
//
|
|
lwz r.6,__VX_HAS(r.4)
|
|
mr r.31,r.3
|
|
mr r.30,r.4
|
|
//
|
|
// __GLtransform *tr = gc->transform.modelView;
|
|
//
|
|
lwz r.28,__GC_TRANSFORM_MODELVIEW(r.3)
|
|
//
|
|
// if (wants & __GL_HAS_EYE) {
|
|
//
|
|
li r.11,0x3f80 // Constant 1.0
|
|
slwi r.11,r.11,16 //
|
|
li r.0,0 // Constant 0
|
|
nor r.6,r.6,r.0
|
|
and r.29,r.6,r.5
|
|
Next:
|
|
andi. r.0,r.29,__GL_HAS_EYE
|
|
stw r.11,__VX_EYE_W(r.30)
|
|
bne Wants_Eye2
|
|
//
|
|
// }
|
|
// if (wants & __GL_HAS_NORMAL) {
|
|
//
|
|
Wants_Eye:
|
|
andi. r.0,r.29,__GL_HAS_NORMAL
|
|
beq Skip2
|
|
//
|
|
// __GLcoord ne;
|
|
// __GLtransform *tr = gc->transform.modelView;
|
|
//
|
|
// if (tr->matrix.matrixType == __GL_MT_GENERAL) {
|
|
//
|
|
lwz r.6,__TR_MATRIX_MATRIXTYPE(r.28)
|
|
lbz r.11,__TR_UPDATEINVERSE(r.28)
|
|
or. r.6,r.6,r.6
|
|
lwz r.0,__GC_ENABLES_GENERAL(r.31)
|
|
beq Gen_Mat2
|
|
//
|
|
// }
|
|
// if (tr->updateInverse) {
|
|
//
|
|
Gen_Mat:
|
|
or. r.11,r.11,r.11
|
|
bne Comp_Inv2
|
|
//
|
|
// }
|
|
// if (gc->state.enables.general & __GL_NORMALIZE_ENABLE) {
|
|
//
|
|
Comp_Inv:
|
|
LWI(r.3,__GL_NORMALIZE_ENABLE)
|
|
and. r.0,r.0,r.3
|
|
beq Skip1
|
|
//
|
|
// (*tr->inverseTranspose.xf3)(&ne, &vx->normal.x,
|
|
//
|
|
|
|
lwz r.8,__TR_INVERSETRANSPOSE_XF3(r.28)
|
|
addi r.3,r.sp,NEPTR
|
|
lwz r.8,0(r.8)
|
|
addi r.4,r.30,__VX_NORMAL_X
|
|
mtctr r.8
|
|
addi r.5,r.28,__TR_INVERSETRANSPOSE
|
|
bctrl
|
|
//
|
|
// &tr->inverseTranspose);
|
|
// (*gc->procs.normalize)(&vx->normal.x, &ne.x);
|
|
//
|
|
lwz r.8,__GC_PROCS_NORMALIZE(r.31)
|
|
addi r.3,r.30,__VX_NORMAL_X
|
|
lwz r.8,0(r.8)
|
|
addi r.4,r.sp,NEPTR
|
|
mtctr r.8
|
|
bctrl
|
|
b Skip2
|
|
//
|
|
// (*tr->matrix.xf2)(&vx->eye, &vx->obj.x, &tr->matrix);
|
|
//
|
|
Wants_Eye2:
|
|
lwz r.8,__TR_MATRIX_XF2(r.28)
|
|
addi r.3,r.30,__VX_EYE_X
|
|
lwz r.8,0(r.8)
|
|
addi r.4,r.30,__VX_OBJ_X
|
|
mtctr r.8
|
|
addi r.5,r.28,__TR_MATRIX
|
|
bctrl
|
|
b Wants_Eye
|
|
//
|
|
// /* this is needed only if there is projection info */
|
|
// vx->normal.w =
|
|
// -(vx->normal.x * vx->obj.x + vx->normal.y * vx->obj.y);
|
|
//
|
|
Gen_Mat2:
|
|
lfs f.0,__VX_NORMAL_X(r.30)
|
|
lfs f.1, __VX_OBJ_X(r.30)
|
|
lfs f.2,__VX_NORMAL_Y(r.30)
|
|
lfs f.4,__VX_OBJ_Y(r.30)
|
|
fmul f.3,f.0,f.1
|
|
fnmadd f.5,f.2,f.4,f.3
|
|
stfs f.5,__VX_NORMAL_W(r.30)
|
|
b Gen_Mat
|
|
//
|
|
// (*gc->procs.computeInverseTranspose)(gc, tr);
|
|
//
|
|
Comp_Inv2:
|
|
lwz r.8,__GC_PROCS_COMPUTEINVERSETRANSPOSE(r.31)
|
|
mr r.3,r.31
|
|
lwz r.8,0(r.8)
|
|
mr r.4,r.28
|
|
mtctr r.8
|
|
bctrl
|
|
lwz r.0,__GC_ENABLES_GENERAL(r.31)
|
|
b Comp_Inv
|
|
//
|
|
// }
|
|
// if (wants & __GL_HAS_FOG) {
|
|
// vx->fog = (*gc->procs.fogVertex)(gc, vx);
|
|
//
|
|
Wants_FogTex:
|
|
andi. r.0,r.29,__GL_HAS_FOG
|
|
beq Wants_Texture2
|
|
lwz r.8,__GC_PROCS_FOGVERTEX(r.31)
|
|
mr r.3,r.31
|
|
lwz r.8,0(r.8)
|
|
mr r.4,r.30
|
|
mtctr r.8
|
|
bctrl
|
|
//
|
|
// }
|
|
// if (wants & __GL_HAS_TEXTURE) {
|
|
//
|
|
andi. r.0,r.29,__GL_HAS_TEXTURE
|
|
stfs f.1,__VX_FOG(r.30)
|
|
beq Wants_FogTex2
|
|
//
|
|
// vx->obj.z = __glZero;
|
|
// vx->obj.w = __glOne;
|
|
// (*gc->procs.calcTexture)(gc, vx);
|
|
//
|
|
Wants_Texture2:
|
|
lwz r.8,__GC_PROCS_CALCTEXTURE(r.31)
|
|
li r.12,0
|
|
stw r.12,__VX_OBJ_Z(r.30)
|
|
lwz r.8,0(r.8)
|
|
li r.12,0x3f80
|
|
slwi r.12,r.12,16
|
|
mtctr r.8
|
|
mr r.3,r.31
|
|
mr r.4,r.30
|
|
stw r.12,__VX_OBJ_W(r.30)
|
|
bctrl
|
|
b Wants_FogTex2
|
|
//
|
|
// } else {
|
|
// (*tr->inverseTranspose.xf3)(&vx->normal,
|
|
//
|
|
Skip1:
|
|
lwz r.8,__TR_INVERSETRANSPOSE_XF3(r.28)
|
|
addi r.3,r.30,__VX_NORMAL_X
|
|
lwz r.8,0(r.8)
|
|
addi r.4,r.30,__VX_NORMAL_X
|
|
mtctr r.8
|
|
addi r.5,r.28,__TR_INVERSETRANSPOSE
|
|
bctrl
|
|
//
|
|
// &vx->normal.x, &tr->inverseTranspose);
|
|
// }
|
|
// }
|
|
// if (wants & __GL_HAS_FOG) {
|
|
// }
|
|
// if (wants & __GL_HAS_TEXTURE) {
|
|
//
|
|
Skip2:
|
|
andi. r.0,r.29,__GL_HAS_FOG | __GL_HAS_TEXTURE
|
|
bne Wants_FogTex
|
|
//
|
|
// }
|
|
// if (wants & __GL_HAS_FRONT_COLOR) {
|
|
// (*gc->procs.calcColor)(gc, __GL_FRONTFACE, vx);
|
|
//
|
|
Wants_FogTex2:
|
|
andi. r.0,r.29,__GL_HAS_FRONT_COLOR
|
|
beq Skip3
|
|
lwz r.8,__GC_PROCS_CALCCOLOR(r.31)
|
|
mr r.3,r.31
|
|
lwz r.8,0(r.8)
|
|
li r.4,__GL_FRONTFACE
|
|
mtctr r.8
|
|
mr r.5,r.30
|
|
bctrl
|
|
//
|
|
// }
|
|
// if (wants & __GL_HAS_BACK_COLOR) {
|
|
//
|
|
Skip3:
|
|
andi. r.0,r.29,__GL_HAS_BACK_COLOR
|
|
beq Skip4
|
|
//
|
|
// (*gc->procs.calcColor)(gc, __GL_BACKFACE, vx);
|
|
//
|
|
lwz r.8,__GC_PROCS_CALCCOLOR(r.31)
|
|
mr r.3,r.31
|
|
lwz r.8,0(r.8)
|
|
li r.4,__GL_BACKFACE
|
|
mtctr r.8
|
|
mr r.5,r.30
|
|
bctrl
|
|
//
|
|
// }
|
|
// vx->has = has | wants;
|
|
//
|
|
Skip4:
|
|
lwz r.6,__VX_HAS(r.30)
|
|
or r.6,r.6,r.29
|
|
stw r.6,__VX_HAS(r.30)
|
|
//
|
|
// Return to the caller
|
|
//
|
|
NESTED_EXIT(__glValidateVertex2,SSIZE,4,0)
|
|
|
|
|
|
#endif /* __GL_ASM_VALIDATEVERTEX2 */
|
|
|
|
|
|
#ifdef __GL_ASM_VALIDATEVERTEX3
|
|
|
|
//void __glValidateVertex3(__GLcontext *gc,__GLvertex *vx,GLuint needs)
|
|
// {
|
|
//
|
|
NESTED_ENTRY(__glValidateVertex3,SSIZE,4,0)
|
|
PROLOGUE_END(__glValidateVertex3)
|
|
//
|
|
// GLuint has = vx->has;
|
|
// GLuint wants = needs & ~has;
|
|
//
|
|
lwz r.6,__VX_HAS(r.4)
|
|
mr r.31,r.3
|
|
mr r.30,r.4
|
|
//
|
|
// __GLtransform *tr = gc->transform.modelView;
|
|
//
|
|
//
|
|
// if (wants & __GL_HAS_EYE) {
|
|
//
|
|
lwz r.28,__GC_TRANSFORM_MODELVIEW(r.31)
|
|
li r.9,0x3f80
|
|
slwi r.9,r.9,16
|
|
li r.12,0
|
|
nor r.6,r.6,r.12
|
|
and r.29,r.6,r.5
|
|
andi. r.0,r.29,__GL_HAS_EYE
|
|
stw r.9,__VX_EYE_W(r.4)
|
|
bne Wants_Eye2b
|
|
//
|
|
// }
|
|
// if (wants & __GL_HAS_NORMAL) {
|
|
//
|
|
Wants_Eyeb:
|
|
andi. r.0,r.29,__GL_HAS_NORMAL
|
|
beq Skip2b
|
|
//
|
|
// __GLcoord ne;
|
|
// __GLtransform *tr = gc->transform.modelView;
|
|
//
|
|
// if (tr->matrix.matrixType == __GL_MT_GENERAL) {
|
|
//
|
|
lwz r.6,__TR_MATRIX_MATRIXTYPE(r.28)
|
|
lbz r.9,__TR_UPDATEINVERSE(r.28)
|
|
lwz r.0,__GC_ENABLES_GENERAL(r.31)
|
|
or. r.6,r.6,r.6
|
|
beq Gen_Mat2b
|
|
//
|
|
// }
|
|
// if (tr->updateInverse) {
|
|
//
|
|
Gen_Matb:
|
|
or. r.9,r.9,r.9
|
|
bne Comp_Inv2b
|
|
//
|
|
// }
|
|
// if (gc->state.enables.general & __GL_NORMALIZE_ENABLE) {
|
|
//
|
|
Comp_Invb:
|
|
LWI(r.3,__GL_NORMALIZE_ENABLE)
|
|
and. r.0,r.0,r.3
|
|
beq Skip1b
|
|
//
|
|
// (*tr->inverseTranspose.xf3)(&ne, &vx->normal.x,
|
|
//
|
|
lwz r.8,__TR_INVERSETRANSPOSE_XF3(r.28)
|
|
addi r.3,r.sp,NEPTR
|
|
lwz r.8,0(r.8)
|
|
addi r.4,r.30,__VX_NORMAL_X
|
|
mtctr r.8
|
|
addi r.5,r.28,__TR_INVERSETRANSPOSE
|
|
bctrl
|
|
//
|
|
// &tr->inverseTranspose);
|
|
// (*gc->procs.normalize)(&vx->normal.x, &ne.x);
|
|
//
|
|
lwz r.8,__GC_PROCS_NORMALIZE(r.31)
|
|
addi r.3,r.30,__VX_NORMAL_X
|
|
lwz r.8,0(r.8)
|
|
addi r.4,r.sp,NEPTR
|
|
mtctr r.8
|
|
bctrl
|
|
b Skip2b
|
|
//
|
|
// (*tr->matrix.xf3)(&vx->eye, &vx->obj.x, &tr->matrix);
|
|
//
|
|
Wants_Eye2b:
|
|
lwz r.8,__TR_MATRIX_XF3(r.28)
|
|
addi r.3,r.30,__VX_EYE_X
|
|
lwz r.8,0(r.8)
|
|
addi r.4,r.30,__VX_OBJ_X
|
|
mtctr r.8
|
|
addi r.5,r.28,__TR_MATRIX
|
|
bctrl
|
|
b Wants_Eyeb
|
|
//
|
|
// /* this is needed only if there is projection info */
|
|
//
|
|
// vx->normal.w =
|
|
// -(vx->normal.x * vx->obj.x + vx->normal.y * vx->obj.y
|
|
// + vx->normal.z * vx->obj.z);
|
|
//
|
|
Gen_Mat2b:
|
|
lfs f.0,__VX_NORMAL_X(r.30)
|
|
lfs f.1,__VX_OBJ_X(r.30)
|
|
lfs f.2,__VX_NORMAL_Y(r.30)
|
|
fmuls f.3,f.0,f.1
|
|
lfs f.4,__VX_OBJ_Y(r.30)
|
|
lfs f.5,__VX_NORMAL_Z(r.30)
|
|
lfs f.6,__VX_OBJ_Z(r.30)
|
|
fmadds f.7,f.2,f.4,f.3
|
|
fnmadds f.8,f.5,f.6,f.7
|
|
stfs f.8,__VX_NORMAL_W(r.30)
|
|
b Gen_Matb
|
|
//
|
|
// (*gc->procs.computeInverseTranspose)(gc, tr);
|
|
//
|
|
Comp_Inv2b:
|
|
lwz r.8,__GC_PROCS_COMPUTEINVERSETRANSPOSE(r.31)
|
|
mr r.3,r.31
|
|
lwz r.8,0(r.8)
|
|
mr r.4,r.28
|
|
mtctr r.8
|
|
bctrl
|
|
lwz r.0,__GC_ENABLES_GENERAL(r.31)
|
|
b Comp_Invb
|
|
//
|
|
// }
|
|
// if (wants & __GL_HAS_FOG) {
|
|
// vx->fog = (*gc->procs.fogVertex)(gc, vx);
|
|
//
|
|
Wants_FogTexb:
|
|
andi. r.0,r.29,__GL_HAS_FOG
|
|
beq Wants_Texture2b
|
|
lwz r.8,__GC_PROCS_FOGVERTEX(r.31)
|
|
mr r.3,r.31
|
|
lwz r.8,0(r.8)
|
|
mr r.4,r.30
|
|
mtctr r.8
|
|
bctrl
|
|
//
|
|
// if (wants & __GL_HAS_TEXTURE) {
|
|
//
|
|
andi. r.0,r.29,__GL_HAS_TEXTURE
|
|
stfs f.1,__VX_FOG(r.30)
|
|
beq Wants_FogTex2b
|
|
//
|
|
// vx->obj.w = __glOne;
|
|
// (*gc->procs.calcTexture)(gc, vx);
|
|
//
|
|
Wants_Texture2b:
|
|
lwz r.8,__GC_PROCS_CALCTEXTURE(r.31)
|
|
li r.9,0x3f80
|
|
lwz r.8,0(r.8)
|
|
slwi r.9,r.9,16
|
|
mtctr r.8
|
|
mr r.3,r.31
|
|
mr r.4,r.30
|
|
stw r.9,__VX_OBJ_W(r.30)
|
|
bctrl
|
|
b Wants_FogTex2b
|
|
//
|
|
// } else {
|
|
// (*tr->inverseTranspose.xf3)(&vx->normal,
|
|
//
|
|
Skip1b:
|
|
lwz r.8,__TR_INVERSETRANSPOSE_XF3(r.28)
|
|
addi r.3,r.30,__VX_NORMAL_X
|
|
lwz r.8,0(r.8)
|
|
addi r.4,r.30,__VX_NORMAL_X
|
|
mtctr r.8
|
|
addi r.5,r.28,__TR_INVERSETRANSPOSE
|
|
bctrl
|
|
//
|
|
// &vx->normal.x, &tr->inverseTranspose);
|
|
// }
|
|
// }
|
|
// if (wants & __GL_HAS_FOG) {
|
|
// }
|
|
// if (wants & __GL_HAS_TEXTURE) {
|
|
//
|
|
Skip2b:
|
|
andi. r.0,r.29,__GL_HAS_FOG | __GL_HAS_TEXTURE
|
|
bne Wants_FogTexb
|
|
//
|
|
// }
|
|
// if (wants & __GL_HAS_FRONT_COLOR) {
|
|
// (*gc->procs.calcColor)(gc, __GL_FRONTFACE, vx);
|
|
//
|
|
Wants_FogTex2b:
|
|
andi. r.0,r.29,__GL_HAS_FRONT_COLOR
|
|
beq Skip3b
|
|
lwz r.8, __GC_PROCS_CALCCOLOR(r.31)
|
|
mr r.3,r.31
|
|
lwz r.8,0(r.8)
|
|
li r.4,__GL_FRONTFACE
|
|
mtctr r.8
|
|
mr r.5,r.30
|
|
bctrl
|
|
//
|
|
// }
|
|
// if (wants & __GL_HAS_BACK_COLOR) {
|
|
//
|
|
Skip3b:
|
|
andi. r.0,r.29,__GL_HAS_BACK_COLOR
|
|
beq Skip4b
|
|
//
|
|
// (*gc->procs.calcColor)(gc, __GL_BACKFACE, vx);
|
|
//
|
|
lwz r.8,__GC_PROCS_CALCCOLOR(r.31)
|
|
mr r.3,r.31
|
|
lwz r.8,0(r.8)
|
|
li r.4,__GL_BACKFACE
|
|
mtctr r.8
|
|
mr r.5,r.30
|
|
bctrl
|
|
//
|
|
// }
|
|
//
|
|
// vx->has = has | wants;
|
|
//
|
|
Skip4b:
|
|
lwz r.6,__VX_HAS(r.30)
|
|
or r.6,r.6,r.29
|
|
stw r.6,__VX_HAS(r.30)
|
|
//
|
|
// Return to caller
|
|
//
|
|
NESTED_EXIT(__glValidateVertex3,SSIZE,4,0)
|
|
|
|
#endif /* __GL_ASM_VALIDATEVERTEX3 */
|
|
|
|
|
|
#ifdef __GL_ASM_VALIDATEVERTEX4
|
|
|
|
//void __glValidateVertex4(__GLcontext *gc,__GLvertex *vx,GLuint needs)
|
|
// {
|
|
//
|
|
NESTED_ENTRY(__glValidateVertex4,SSIZE,4,0)
|
|
PROLOGUE_END(__glValidateVertex4)
|
|
//
|
|
// GLuint has = vx->has;
|
|
// GLuint wants = needs & ~has;
|
|
//
|
|
lwz r.6,__VX_HAS(r.4)
|
|
mr r.31,r.3
|
|
mr r.30,r.4
|
|
//
|
|
// __GLtransform *tr = gc->transform.modelView;
|
|
//
|
|
// if (wants & __GL_HAS_EYE) {
|
|
//
|
|
lwz r.28,__GC_TRANSFORM_MODELVIEW(r.31)
|
|
li r.9,0x3f80
|
|
slwi r.9,r.9,16
|
|
li r.12,0
|
|
nor r.6,r.6,r.12
|
|
and r.29,r.6,r.5
|
|
andi. r.0,r.29,__GL_HAS_EYE
|
|
stw r.9,__VX_EYE_W(r.4)
|
|
bne Wants_Eye2c
|
|
//
|
|
// }
|
|
// if (wants & __GL_HAS_NORMAL) {
|
|
//
|
|
Wants_Eyec:
|
|
andi. r.0,r.29,__GL_HAS_NORMAL
|
|
beq Skip2c
|
|
//
|
|
// __GLcoord ne;
|
|
// __GLtransform *tr = gc->transform.modelView;
|
|
//
|
|
// if (vx->obj.w) {
|
|
//
|
|
lwz r.6,__VX_OBJ_W(r.30)
|
|
lbz r.9,__TR_UPDATEINVERSE(r.28)
|
|
or. r.6,r.6,r.6
|
|
lwz r.0,__GC_ENABLES_GENERAL(r.31)
|
|
bne Gen_Mat2c
|
|
//
|
|
// } else {
|
|
// vx->normal.w = __glZero;
|
|
//
|
|
li r.12,0
|
|
stw r.12,__VX_NORMAL_W(r.30)
|
|
//
|
|
// }
|
|
// if (tr->updateInverse) {
|
|
//
|
|
Gen_Matc:
|
|
or. r.9,r.9,r.9
|
|
bne Comp_Inv2c
|
|
//
|
|
// }
|
|
// if (gc->state.enables.general & __GL_NORMALIZE_ENABLE) {
|
|
//
|
|
Comp_Invc:
|
|
LWI(r.3,__GL_NORMALIZE_ENABLE)
|
|
and. r.0,r.0,r.3
|
|
beq Skip1c
|
|
//
|
|
// (*tr->inverseTranspose.xf3)(&ne, &vx->normal.x,
|
|
//
|
|
lwz r.8,__TR_INVERSETRANSPOSE_XF3(r.28)
|
|
addi r.3,r.sp,NEPTR
|
|
lwz r.8,0(r.8)
|
|
addi r.4,r.30,__VX_NORMAL_X
|
|
mtctr r.8
|
|
addi r.5,r.28,__TR_INVERSETRANSPOSE
|
|
bctrl
|
|
//
|
|
// &tr->inverseTranspose);
|
|
// (*gc->procs.normalize)(&vx->normal.x, &ne.x);
|
|
//
|
|
lwz r.8,__GC_PROCS_NORMALIZE(r.31)
|
|
addi r.3,r.30,__VX_NORMAL_X
|
|
lwz r.8,0(r.8)
|
|
addi r.4,r.sp,NEPTR
|
|
mtctr r.8
|
|
bctrl
|
|
b Skip2c
|
|
//
|
|
// (*tr->matrix.xf4)(&vx->eye, &vx->obj.x, &tr->matrix);
|
|
//
|
|
Wants_Eye2c:
|
|
lwz r.8,__TR_MATRIX_XF4(r.28)
|
|
addi r.3,r.30,__VX_EYE_X
|
|
lwz r.8,0(r.8)
|
|
addi r.4,r.30,__VX_OBJ_X
|
|
mtctr r.8
|
|
addi r.5,r.28,__TR_MATRIX
|
|
bctrl
|
|
//
|
|
// vx->normal.w = -(vx->normal.x*vx->obj.x + vx->normal.y * vx->obj.y
|
|
// + vx->normal.z * vx->obj.z) / vx->obj.w;
|
|
//
|
|
Gen_Mat2c:
|
|
lfs f.0,__VX_NORMAL_X(r.30)
|
|
lfs f.1,__VX_OBJ_X(r.30)
|
|
lfs f.2,__VX_NORMAL_Y(r.30)
|
|
lfs f.3,__VX_OBJ_Y(r.30)
|
|
lfs f.4,__VX_NORMAL_Z(r.30)
|
|
lfs f.5, __VX_OBJ_Z(r.30)
|
|
lfs f.6,__VX_OBJ_W(r.30)
|
|
fmuls f.7,f.0,f.1
|
|
fmadds f.8,f.2,f.3,f.7
|
|
fnmadds f.9,f.4,f.5,f.8
|
|
fdivs f.10,f.9,f.6
|
|
stfs f.10,__VX_NORMAL_W(r.30)
|
|
b Gen_Matc
|
|
//
|
|
// (*gc->procs.computeInverseTranspose)(gc, tr);
|
|
//
|
|
Comp_Inv2c:
|
|
lwz r.8,__GC_PROCS_COMPUTEINVERSETRANSPOSE(r.31)
|
|
mr r.3,r.31
|
|
lwz r.8,0(r.8)
|
|
mr r.4,r.28
|
|
mtctr r.8
|
|
bctrl
|
|
lwz r.0,__GC_ENABLES_GENERAL(r.31)
|
|
b Comp_Invc
|
|
//
|
|
// }
|
|
// if (wants & __GL_HAS_FOG) {
|
|
// vx->fog = (*gc->procs.fogVertex)(gc, vx);
|
|
//
|
|
Wants_FogTexc:
|
|
andi. r.0,r.29,__GL_HAS_FOG
|
|
beq Wants_Texture2c
|
|
lwz r.8,__GC_PROCS_FOGVERTEX(r.31)
|
|
mr r.3,r.31
|
|
lwz r.8,0(r.8)
|
|
mr r.4,r.30
|
|
mtctr r.8
|
|
bctrl
|
|
//
|
|
// }
|
|
// if (wants & __GL_HAS_TEXTURE) {
|
|
//
|
|
andi. r.0,r.29,__GL_HAS_TEXTURE
|
|
stfs f.1,__VX_FOG(r.30)
|
|
beq Wants_FogTex2c
|
|
//
|
|
// (*gc->procs.calcTexture)(gc, vx);
|
|
//
|
|
Wants_Texture2c:
|
|
lwz r.8,__GC_PROCS_CALCTEXTURE(r.31)
|
|
mr r.3,r.31
|
|
lwz r.8,0(r.8)
|
|
mr r.4,r.30
|
|
mtctr r.8
|
|
bctrl
|
|
b Wants_FogTex2c
|
|
//
|
|
// } else {
|
|
// (*tr->inverseTranspose.xf3)(&vx->normal,
|
|
//
|
|
Skip1c:
|
|
lwz r.8,__TR_INVERSETRANSPOSE_XF3(r.28)
|
|
addi r.3,r.30,__VX_NORMAL_X
|
|
lwz r.8,0(r.8)
|
|
addi r.4,r.30,__VX_NORMAL_X
|
|
mtctr r.8
|
|
addi r.5,r.28,__TR_INVERSETRANSPOSE
|
|
bctrl
|
|
//
|
|
// &vx->normal.x, &tr->inverseTranspose);
|
|
// }
|
|
// }
|
|
// if (wants & __GL_HAS_FOG) {
|
|
// }
|
|
// if (wants & __GL_HAS_TEXTURE) {
|
|
//
|
|
Skip2c:
|
|
andi. r.0,r.29,__GL_HAS_FOG | __GL_HAS_TEXTURE
|
|
bne Wants_FogTexc
|
|
//
|
|
// }
|
|
// if (wants & __GL_HAS_FRONT_COLOR) {
|
|
// (*gc->procs.calcColor)(gc, __GL_FRONTFACE, vx);
|
|
//
|
|
Wants_FogTex2c:
|
|
andi. r.0,r.29,__GL_HAS_FRONT_COLOR
|
|
beq Skip3c
|
|
lwz r.8,__GC_PROCS_CALCCOLOR(r.31)
|
|
mr r.3,r.31
|
|
lwz r.8,0(r.8)
|
|
li r.4,__GL_FRONTFACE
|
|
mtctr r.8
|
|
mr r.5,r.30
|
|
bctrl
|
|
//
|
|
// }
|
|
// if (wants & __GL_HAS_BACK_COLOR) {
|
|
//
|
|
Skip3c:
|
|
andi. r.0,r.29,__GL_HAS_BACK_COLOR
|
|
beq Skip4c
|
|
//
|
|
// (*gc->procs.calcColor)(gc, __GL_BACKFACE, vx);
|
|
//
|
|
lwz r.8,__GC_PROCS_CALCCOLOR(r.31)
|
|
mr r.3,r.31
|
|
lwz r.8,0(r.8)
|
|
li r.4,__GL_BACKFACE
|
|
mtctr r.8
|
|
mr r.5,r.30
|
|
bctrl
|
|
//
|
|
// }
|
|
//
|
|
// vx->has = has | wants;
|
|
//
|
|
Skip4c:
|
|
lwz r.9,__VX_HAS(r.30)
|
|
or r.9,r.9,r.29
|
|
stw r.9,__VX_HAS(r.30)
|
|
//
|
|
// Return to caller
|
|
//
|
|
NESTED_EXIT(__glValidateVertex4,SSIZE,4,0)
|
|
|
|
#endif /* __GL_ASM_VALIDATEVERTEX4 */
|