mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-04 10:03:36 +00:00
arm neon: add gSPInverseTransformVector function
Fix declaration of gSPInverseTransformVector as well. Replace vtx[4] with vec[3].
This commit is contained in:
parent
762def7dae
commit
39d4b223c8
|
@ -136,6 +136,25 @@ void gSPTransformVector_NEON(float vtx[4], float mtx[4][4])
|
||||||
vst1q_f32(vtx, _mtx0);
|
vst1q_f32(vtx, _mtx0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void gSPInverseTransformVector_NEON(float vec[3], float mtx[4][4])
|
||||||
|
{
|
||||||
|
float32x4x4_t _mtx = vld4q_f32(mtx[0]); // load 4x4 mtx interleaved
|
||||||
|
|
||||||
|
_mtx.val[0] = vmulq_n_f32(_mtx.val[0], vec[0]); // mtx[0][0]=mtx[0][0]*_vtx[0]
|
||||||
|
// mtx[0][1]=mtx[0][1]*_vtx[0]
|
||||||
|
// mtx[0][2]=mtx[0][2]*_vtx[0]
|
||||||
|
_mtx.val[0] = vmlaq_n_f32(_mtx.val[0], _mtx.val[1], vec[1]); // mtx[0][0]+=mtx[1][0]*_vtx[1]
|
||||||
|
// mtx[0][1]+=mtx[1][1]*_vtx[1]
|
||||||
|
// mtx[0][2]+=mtx[1][2]*_vtx[1]
|
||||||
|
_mtx.val[0] = vmlaq_n_f32(_mtx.val[0], _mtx.val[2], vec[2]); // mtx[0][0]+=mtx[2][0]*_vtx[2]
|
||||||
|
// mtx[0][1]+=mtx[2][1]*_vtx[2]
|
||||||
|
// mtx[0][2]+=mtx[2][2]*_vtx[2]
|
||||||
|
const float32x4_t _vec4 = _mtx.val[0];
|
||||||
|
vec[0] = _vec4[0]; // store vec[0]
|
||||||
|
vec[1] = _vec4[1]; // store vec[1]
|
||||||
|
vec[2] = _vec4[2]; // store vec[2]
|
||||||
|
}
|
||||||
|
|
||||||
void DotProductMax7FullNeon( float v0[3], float v1[7][3], float lights[7][3], float _vtx[3])
|
void DotProductMax7FullNeon( float v0[3], float v1[7][3], float lights[7][3], float _vtx[3])
|
||||||
{
|
{
|
||||||
asm volatile (
|
asm volatile (
|
||||||
|
|
|
@ -2621,11 +2621,13 @@ void gSPObjRendermode(u32 _mode)
|
||||||
DebugMsg(DEBUG_NORMAL, "gSPObjRendermode(0x%08x)\n", _mode);
|
DebugMsg(DEBUG_NORMAL, "gSPObjRendermode(0x%08x)\n", _mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
void(*gSPInverseTransformVector)(float vtx[4], float mtx[4][4]) = gSPInverseTransformVector_default;
|
|
||||||
#ifndef __NEON_OPT
|
#ifndef __NEON_OPT
|
||||||
|
void(*gSPInverseTransformVector)(float vec[3], float mtx[4][4]) = gSPInverseTransformVector_default;
|
||||||
void(*gSPTransformVector)(float vtx[4], float mtx[4][4]) = gSPTransformVector_default;
|
void(*gSPTransformVector)(float vtx[4], float mtx[4][4]) = gSPTransformVector_default;
|
||||||
#else
|
#else
|
||||||
|
void gSPInverseTransformVector_NEON(float vec[3], float mtx[4][4]);
|
||||||
void gSPTransformVector_NEON(float vtx[4], float mtx[4][4]);
|
void gSPTransformVector_NEON(float vtx[4], float mtx[4][4]);
|
||||||
|
void(*gSPInverseTransformVector)(float vec[3], float mtx[4][4]) = gSPInverseTransformVector_NEON;
|
||||||
void(*gSPTransformVector)(float vtx[4], float mtx[4][4]) = gSPTransformVector_NEON;
|
void(*gSPTransformVector)(float vtx[4], float mtx[4][4]) = gSPTransformVector_NEON;
|
||||||
#endif //__NEON_OPT
|
#endif //__NEON_OPT
|
||||||
|
|
||||||
|
|
|
@ -224,7 +224,7 @@ void gSP4Triangles(const s32 v00, const s32 v01, const s32 v02,
|
||||||
void gSPLightVertex(SPVertex & _vtx);
|
void gSPLightVertex(SPVertex & _vtx);
|
||||||
|
|
||||||
extern void (*gSPTransformVector)(float vtx[4], float mtx[4][4]);
|
extern void (*gSPTransformVector)(float vtx[4], float mtx[4][4]);
|
||||||
extern void (*gSPInverseTransformVector)(float vtx[4], float mtx[4][4]);
|
extern void (*gSPInverseTransformVector)(float vec[3], float mtx[4][4]);
|
||||||
void gSPSetupFunctions();
|
void gSPSetupFunctions();
|
||||||
void gSPFlushTriangles();
|
void gSPFlushTriangles();
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue
Block a user