Skip to content

Commit f1c1d83

Browse files
committed
#368 GBA apply changes to transformRoomUW
1 parent dd05e19 commit f1c1d83

File tree

1 file changed

+20
-37
lines changed

1 file changed

+20
-37
lines changed

src/platform/gba/asm/transformRoomUW.s

Lines changed: 20 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ maxXY .req vz
3535

3636
tmp .req vy
3737
dx .req vz
38-
dy .req tmp
38+
dy .req vy
3939
dz .req vz
4040
fog .req vz
4141

@@ -62,7 +62,6 @@ transformRoomUW_asm:
6262

6363
ldr res, =gVerticesBase
6464
ldr res, [res]
65-
add res, #VERTEX_G
6665

6766
ldr tmp, =viewportRel
6867
ldmia tmp, {spMinXY, spMaxXY}
@@ -75,8 +74,6 @@ transformRoomUW_asm:
7574

7675
stmfd sp!, {spMinXY, spMaxXY, spRandLUT, spFrame, spCaustLUT}
7776

78-
mov mask, #0xFF
79-
8077
ldr m, =gMatrixPtr
8178
ldr m, [m]
8279
fiq_on
@@ -85,30 +82,23 @@ transformRoomUW_asm:
8582
asr mw1, #FIXED_SHIFT
8683
fiq_off
8784
ldmia m, {mx2, my2, mz2, mw2}
88-
asr mw2, #FIXED_SHIFT
85+
asr mw2, #(FIXED_SHIFT + OT_SHIFT)
8986

9087
.loop:
9188
// unpack vertex
92-
ldmia vertices!, {v}
89+
ldr v, [vertices], #4
9390

94-
and vz, mask, v, lsr #16
95-
and vy, mask, v, lsr #8
91+
mov mask, #0xFF
9692
and vx, mask, v
93+
and vy, mask, v, lsr #8
94+
and vz, mask, v, lsr #16
95+
mov vg, v, lsr #(24 + 3)
9796

9897
// transform z
9998
mul z, mx2, vx
10099
mla z, my2, vy, z
101100
mla z, mz2, vz, z
102-
add z, mw2, z, asr #(FIXED_SHIFT - 8)
103-
104-
// skip if vertex is out of z-range
105-
add z, #VIEW_OFF
106-
cmp z, #(VIEW_OFF + VIEW_OFF + VIEW_MAX)
107-
movhi vg, #(CLIP_NEAR + CLIP_FAR)
108-
bhi .skip
109-
110-
mov vg, v, lsr #24
111-
sub z, #VIEW_OFF
101+
add z, mw2, z, asr #(FIXED_SHIFT - 8 + OT_SHIFT)
112102

113103
fiq_on
114104
// transform y
@@ -133,28 +123,24 @@ transformRoomUW_asm:
133123
and rand, #(MAX_CAUSTICS - 1)
134124
ldr caust, [sp, #SP_CAUST]
135125
ldr caust, [caust, rand, lsl #2]
136-
add vg, caust, asr #5
126+
add vg, caust, asr #8
137127

138128
// fog
139-
subs fog, z, #FOG_MIN
140-
addgt vg, fog, lsr #4
141-
142-
// vg 0..255 -> 0..31
143-
lsr vg, #3
144-
cmp vg, #31
129+
subs fog, z, #(FOG_MIN >> OT_SHIFT)
130+
addgt vg, fog, lsr #(3 + FOG_SHIFT - OT_SHIFT)
131+
cmpgt vg, #31
145132
movgt vg, #31
146133

147134
// z clipping
148-
cmp z, #VIEW_MIN
149-
movle z, #VIEW_MIN
135+
cmp z, #(VIEW_MIN >> OT_SHIFT)
136+
movle z, #(VIEW_MIN >> OT_SHIFT)
150137
orrle vg, #CLIP_NEAR
151-
cmp z, #VIEW_MAX
152-
movge z, #VIEW_MAX
138+
cmp z, #(VIEW_MAX >> OT_SHIFT)
139+
movge z, #(VIEW_MAX >> OT_SHIFT)
153140
orrge vg, #CLIP_FAR
154141

155142
// project
156143
add dz, z, z, lsr #2
157-
lsr dz, #4
158144
divLUT tmp, dz
159145
mul dx, x, tmp
160146
mul dy, y, tmp
@@ -186,13 +172,10 @@ transformRoomUW_asm:
186172
orrhi vg, #CLIP_FRAME
187173

188174
// store the result
189-
strh x, [res, #-6]
190-
strh y, [res, #-4]
191-
strh z, [res, #-2]
192-
193-
mov mask, #0xFF
194-
.skip:
195-
strh vg, [res], #8
175+
strh x, [res], #2
176+
strh y, [res], #2
177+
strh z, [res], #2
178+
strh vg, [res], #2
196179

197180
subs count, #1
198181
bne .loop

0 commit comments

Comments
 (0)