notaz.gp2x.de
/
picodrive.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
accurate_sprites performance improvement, PSP is untested
[picodrive.git]
/
Pico
/
Draw.s
diff --git
a/Pico/Draw.s
b/Pico/Draw.s
index
5ddd5e6
..
3cafde9
100644
(file)
--- a/
Pico/Draw.s
+++ b/
Pico/Draw.s
@@
-896,7
+896,7
@@
DrawTilesFromCache:
@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
\r
\r
\r
@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
\r
\r
\r
-.global DrawSpritesFromCache @ int *hc, int sh
\r
+.global DrawSpritesFromCache @ int *hc, int
maxwidth, int prio, int
sh
\r
\r
DrawSpritesFromCache:
\r
stmfd sp!, {r4-r11,lr}
\r
\r
DrawSpritesFromCache:
\r
stmfd sp!, {r4-r11,lr}
\r
@@
-911,7
+911,7
@@
DrawSpritesFromCache:
mov r12,#0xf
\r
.endif
\r
ldr lr, =(Pico+0x10000) @ lr=Pico.vram
\r
mov r12,#0xf
\r
.endif
\r
ldr lr, =(Pico+0x10000) @ lr=Pico.vram
\r
- mov r6, r
1
, lsl #31
\r
+ mov r6, r
3
, lsl #31
\r
orr r6, r6, #1<<30
\r
\r
mov r10, r0
\r
orr r6, r6, #1<<30
\r
\r
mov r10, r0
\r
@@
-1032,11
+1032,12
@@
DrawSpritesFromCache:
@ + 0 : hhhhvvvv ab--hhvv yyyyyyyy yyyyyyyy // a: offscreen h, b: offs. v, h: horiz. size
\r
@ + 4 : xxxxxxxx xxxxxxxx pccvhnnn nnnnnnnn // x: x coord + 8
\r
\r
@ + 0 : hhhhvvvv ab--hhvv yyyyyyyy yyyyyyyy // a: offscreen h, b: offs. v, h: horiz. size
\r
@ + 4 : xxxxxxxx xxxxxxxx pccvhnnn nnnnnnnn // x: x coord + 8
\r
\r
-.global DrawSprite @ unsigned int *sprite, int **hc, int sh
\r
+.global DrawSprite @ unsigned int *sprite, int **hc, int sh
, int acc_sprites
\r
\r
DrawSprite:
\r
stmfd sp!, {r4-r9,r11,lr}
\r
\r
\r
DrawSprite:
\r
stmfd sp!, {r4-r9,r11,lr}
\r
\r
+ orr r8, r3, r2, lsl #4
\r
ldr r3, [r0] @ sprite[0]
\r
ldr r7, =Scanline
\r
mov r6, r3, lsr #28
\r
ldr r3, [r0] @ sprite[0]
\r
ldr r7, =Scanline
\r
mov r6, r3, lsr #28
\r
@@
-1050,10
+1051,10
@@
DrawSprite:
ldr r9, [r0, #4]
\r
sub r7, r7, r4, asr #16 @ r7=row=Scanline-sy
\r
\r
ldr r9, [r0, #4]
\r
sub r7, r7, r4, asr #16 @ r7=row=Scanline-sy
\r
\r
- tst r2, r2
\r
mov r2, r9, asr #16 @ r2=sx
\r
mov r2, r9, asr #16 @ r2=sx
\r
- bic r9, r9, #0xfe000000
\r
- orrne r9, r9, #1<<31 @ r9=code|(sh<<31)
\r
+ mov r9, r9, lsl #16
\r
+ mov r9, r9, lsr #16
\r
+ orr r9, r9, r8, lsl #27 @ r9=code|sh[31]|as[27]
\r
\r
tst r9, #0x1000
\r
movne r4, r5, lsl #3
\r
\r
tst r9, #0x1000
\r
movne r4, r5, lsl #3
\r
@@
-1075,6
+1076,7
@@
DrawSprite:
tst r9, #0x8000
\r
bne .dspr_cache @ if(code&0x8000) // high priority - cache it
\r
\r
tst r9, #0x8000
\r
bne .dspr_cache @ if(code&0x8000) // high priority - cache it
\r
\r
+.dspr_continue:
\r
@ cache some stuff to avoid mem access
\r
.if OVERRIDE_HIGHCOL
\r
ldr r11,=HighCol
\r
@ cache some stuff to avoid mem access
\r
.if OVERRIDE_HIGHCOL
\r
ldr r11,=HighCol
\r
@@
-1089,11
+1091,10
@@
DrawSprite:
mov r5, r5, lsl #4 @ delta<<=4; // Delta of address
\r
and r4, r9, #0x6000
\r
orr r9, r9, r4, lsl #16
\r
mov r5, r5, lsl #4 @ delta<<=4; // Delta of address
\r
and r4, r9, #0x6000
\r
orr r9, r9, r4, lsl #16
\r
- orr
r9, r9, #0x10000000 @ r9=scc1 ???? ... <code> (s=shadow/hilight, cc=pal
)
\r
+ orr
s r9, r9, #0x10000000 @ r9=scc1 a??? ... <code> (s=shadow/hilight, cc=pal, a=acc_spr
)
\r
\r
\r
- tst r9, #1<<31
\r
mov r3, r4, lsr #9 @ r3=pal=((code>>9)&0x30);
\r
mov r3, r4, lsr #9 @ r3=pal=((code>>9)&0x30);
\r
- orr
ne
r3, r3, #0x40 @ shadow by default
\r
+ orr
mi
r3, r3, #0x40 @ shadow by default
\r
\r
add r6, r6, #1 @ inc now
\r
adds r0, r2, #0 @ mov sx to r0 and set ZV flags
\r
\r
add r6, r6, #1 @ inc now
\r
adds r0, r2, #0 @ mov sx to r0 and set ZV flags
\r
@@
-1184,19
+1185,21
@@
DrawSprite:
mov r4, r8, lsl #16 @ tile
\r
tst r9, #0x0800
\r
orrne r4, r4, #0x10000 @ code&0x0800
\r
mov r4, r8, lsl #16 @ tile
\r
tst r9, #0x0800
\r
orrne r4, r4, #0x10000 @ code&0x0800
\r
- mov r
2
, r2, lsl #22
\r
- orr r4, r4, r
2
, lsr #16 @ (sx<<6)&0x0000ffc0
\r
- and r
2
, r9, #0x6000
\r
- orr r4, r4, r
2
, lsr #9 @ (code>>9)&0x30
\r
+ mov r
0
, r2, lsl #22
\r
+ orr r4, r4, r
0
, lsr #16 @ (sx<<6)&0x0000ffc0
\r
+ and r
0
, r9, #0x6000
\r
+ orr r4, r4, r
0
, lsr #9 @ (code>>9)&0x30
\r
mov r3, r3, lsl #12
\r
mov r3, r3, lsl #12
\r
- ldr r
2
, [r1]
\r
+ ldr r
0
, [r1]
\r
orr r4, r4, r3, lsr #28 @ (sprite[0]>>24)&0xf
\r
\r
orr r4, r4, r3, lsr #28 @ (sprite[0]>>24)&0xf
\r
\r
- str r4, [r
2
], #4
\r
- str r
2
, [r1]
\r
+ str r4, [r
0
], #4
\r
+ str r
0
, [r1]
\r
\r
\r
- ldmfd sp!, {r4-r9,r11,lr}
\r
- bx lr
\r
+ tst r9, #(1<<27)
\r
+ ldmeqfd sp!, {r4-r9,r11,lr}
\r
+ bne .dspr_continue @ draw anyway if accurate sprites enabled
\r
+ bxeq lr
\r
\r
@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
\r
\r
\r
@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
\r
\r
@@
-1452,23
+1455,29
@@
FinalizeLineBGR444:
bne .fl_loopcpBGR444_hi
\r
\r
sub r3, r4, #0x40*3*2
\r
bne .fl_loopcpBGR444_hi
\r
\r
sub r3, r4, #0x40*3*2
\r
+ mov r6, #1
\r
\r
\r
.fl_noshBGR444:
\r
\r
\r
.fl_noshBGR444:
\r
+ ldr r12,=rendstatus
\r
+ eors r6, r6, #1 @ sh is 0
\r
+ ldr r12,[r12]
\r
+ mov lr, #0xff
\r
+ tstne r12,#(1<<2) @ and PDRAW_ACC_SPRITES
\r
+
\r
.if OVERRIDE_HIGHCOL
\r
ldr r1, =HighCol
\r
.if OVERRIDE_HIGHCOL
\r
ldr r1, =HighCol
\r
- mov
lr, #0xf
f
\r
+ mov
ne lr, #0x3
f
\r
ldr r1, [r1]
\r
mov lr, lr, lsl #1
\r
add r1, r1, #8
\r
.else
\r
ldr r1, =(HighCol+8)
\r
ldr r1, [r1]
\r
mov lr, lr, lsl #1
\r
add r1, r1, #8
\r
.else
\r
ldr r1, =(HighCol+8)
\r
- mov
lr, #0xf
f
\r
+ mov
ne lr, #0x3
f
\r
mov lr, lr, lsl #1
\r
.endif
\r
\r
.fl_loopBGR444:
\r
mov lr, lr, lsl #1
\r
.endif
\r
\r
.fl_loopBGR444:
\r
-
\r
ldr r12, [r1], #4
\r
subs r2, r2, #1
\r
\r
ldr r12, [r1], #4
\r
subs r2, r2, #1
\r
\r
@@
-1478,11
+1487,10
@@
FinalizeLineBGR444:
ldrh r5, [r3, r5]
\r
and r6, lr, r12, lsr #15
\r
ldrh r6, [r3, r6]
\r
ldrh r5, [r3, r5]
\r
and r6, lr, r12, lsr #15
\r
ldrh r6, [r3, r6]
\r
+ and r12,lr, r12, lsr #23
\r
+ ldrh r12,[r3, r12] @ 1c.i.
\r
orr r4, r4, r5, lsl #16
\r
orr r4, r4, r5, lsl #16
\r
-
\r
- and r5, lr, r12, lsr #23
\r
- ldrh r5, [r3, r5] @ 2c.i.
\r
- orr r5, r6, r5, lsl #16
\r
+ orr r5, r6, r12,lsl #16
\r
\r
stmia r0!, {r4,r5}
\r
bne .fl_loopBGR444
\r
\r
stmia r0!, {r4,r5}
\r
bne .fl_loopBGR444
\r
@@
-1617,8
+1625,16
@@
FinalizeLineRGB555:
bne .fl_loopcpRGB555_hi
\r
\r
sub r3, r3, #0x40*2
\r
bne .fl_loopcpRGB555_hi
\r
\r
sub r3, r3, #0x40*2
\r
+ mov r6, #1
\r
\r
.fl_noshRGB555:
\r
\r
.fl_noshRGB555:
\r
+ ldr r12,=rendstatus
\r
+ eors r6, r6, #1 @ sh is 0
\r
+ ldr r12,[r12]
\r
+ mov lr, #0xff
\r
+ tstne r12,#(1<<2) @ and PDRAW_ACC_SPRITES
\r
+ movne lr, #0x3f
\r
+
\r
.if OVERRIDE_HIGHCOL
\r
ldr r1, =HighCol
\r
ldr r0, =DrawLineDest
\r
.if OVERRIDE_HIGHCOL
\r
ldr r1, =HighCol
\r
ldr r0, =DrawLineDest
\r
@@
-1632,7
+1648,6
@@
FinalizeLineRGB555:
.endif
\r
\r
ldrb r12, [r8, #12]
\r
.endif
\r
\r
ldrb r12, [r8, #12]
\r
- mov lr, #0xff
\r
mov lr, lr, lsl #1
\r
\r
tst r12, #1
\r
mov lr, lr, lsl #1
\r
\r
tst r12, #1
\r