mirror of
https://github.com/XProger/OpenLara.git
synced 2025-08-20 11:51:36 +02:00
#370 3DO save 14 ticks per vertex for projectVertices func
This commit is contained in:
@@ -8,20 +8,20 @@
|
|||||||
EXPORT projectVertices_asm
|
EXPORT projectVertices_asm
|
||||||
|
|
||||||
vCount RN r0
|
vCount RN r0
|
||||||
mx RN r0
|
mx RN vCount
|
||||||
my RN r1
|
my RN r1
|
||||||
mz RN r2
|
mz RN r2
|
||||||
x RN r3
|
x RN r3
|
||||||
y RN r4
|
y RN r4
|
||||||
z RN r5
|
z RN r5
|
||||||
dz RN r6
|
dz RN r6
|
||||||
minX RN dz
|
minX RN r7
|
||||||
minY RN r7
|
minY RN r8
|
||||||
maxX RN r8
|
maxX RN r9
|
||||||
maxY RN r12
|
maxY RN r12
|
||||||
last RN r9
|
m RN minX
|
||||||
m RN r10
|
vp RN minX
|
||||||
vp RN m
|
last RN r10
|
||||||
vertex RN r11
|
vertex RN r11
|
||||||
divLUT RN lr
|
divLUT RN lr
|
||||||
|
|
||||||
@@ -36,7 +36,7 @@ CLIP_FAR EQU (1 << 4)
|
|||||||
CLIP_NEAR EQU (1 << 5)
|
CLIP_NEAR EQU (1 << 5)
|
||||||
|
|
||||||
DIV_TABLE_END EQU (1025 - 1)
|
DIV_TABLE_END EQU (1025 - 1)
|
||||||
VIEW_DIST EQU (1024 * 10)
|
VIEW_DIST EQU (1024 * 10) ; max = DIV_TABLE_END << PROJ_SHIFT
|
||||||
VIEW_MIN EQU (256 << CLIP_SHIFT)
|
VIEW_MIN EQU (256 << CLIP_SHIFT)
|
||||||
VIEW_MAX EQU (VIEW_DIST << CLIP_SHIFT)
|
VIEW_MAX EQU (VIEW_DIST << CLIP_SHIFT)
|
||||||
|
|
||||||
@@ -61,6 +61,7 @@ projectVertices_asm
|
|||||||
ldmia m, {mx, my, mz} ; get view space offset from matrix
|
ldmia m, {mx, my, mz} ; get view space offset from matrix
|
||||||
ldr divLUT, =divTable
|
ldr divLUT, =divTable
|
||||||
ldr vp, =viewportRel
|
ldr vp, =viewportRel
|
||||||
|
ldmia vp, {minX, minY, maxX, maxY}
|
||||||
|
|
||||||
loop ldmia vertex, {x, y, z} ; read unpacked vertex
|
loop ldmia vertex, {x, y, z} ; read unpacked vertex
|
||||||
|
|
||||||
@@ -79,17 +80,14 @@ loop ldmia vertex, {x, y, z} ; read unpacked vertex
|
|||||||
orrgt z, z, #CLIP_FAR
|
orrgt z, z, #CLIP_FAR
|
||||||
|
|
||||||
; projection
|
; projection
|
||||||
mov dz, z, lsr #(PROJ_SHIFT + CLIP_SHIFT)
|
mov dz, z, lsr #(PROJ_SHIFT + CLIP_SHIFT) ; z is positive
|
||||||
cmp dz, #DIV_TABLE_END
|
|
||||||
movge dz, #DIV_TABLE_END
|
|
||||||
ldr dz, [divLUT, dz, lsl #2]
|
ldr dz, [divLUT, dz, lsl #2]
|
||||||
mul x, dz, x
|
mul x, dz, x
|
||||||
mul y, dz, y
|
mul y, dz, y
|
||||||
mov x, x, asr #12
|
mov x, x, asr #(16 - PROJ_SHIFT)
|
||||||
mov y, y, asr #12
|
mov y, y, asr #(16 - PROJ_SHIFT)
|
||||||
|
|
||||||
; check xy clipping
|
; check xy clipping
|
||||||
ldmia vp, {minX, minY, maxX, maxY}
|
|
||||||
cmp x, minX
|
cmp x, minX
|
||||||
orrlt z, z, #CLIP_LEFT
|
orrlt z, z, #CLIP_LEFT
|
||||||
cmp y, minY
|
cmp y, minY
|
||||||
|
Reference in New Issue
Block a user