• Status Closed
  • Percent Complete
  • Task Type Patches
  • Category LCD
  • Assigned To No-one
  • Operating System iPod 5G
  • Severity Low
  • Priority Very Low
  • Reported Version Daily build (which?)
  • Due in Version Undecided
  • Due Date Undecided
  • Votes
  • Private
Attached to Project: Rockbox
Opened by Buschel - 2007-10-28
Last edited by amiconn - 2007-11-02

FS#8041 - small speed-up for iPod Video's lcd_update ()

Small speed-up (+1%) for iPod Video’s lcd_update()-function, based upon #15344.

- let x be even
- include the outer loop over y until heigth is reached into the asm-routine

Closed by  amiconn
2007-11-02 17:57
Reason for closing:  Out of Date
Additional comments about closing:   Warning: Undefined array key "typography" in /home/rockbox/flyspray/plugins/dokuwiki/inc/parserutils.php on line 371 Warning: Undefined array key "camelcase" in /home/rockbox/flyspray/plugins/dokuwiki/inc/parserutils.php on line 407

The update rectangle setup does indeed need just the rectangle parameters, the other 4 are unnecessary. Same goes for reading 0x1FC. Both ideas are implemented in svn now, as well as an update scheme that make the update functions never wait for the BCM (in main rockbox).

Further work in cleaning up the code (not that much relevant and more like a personal smell) as well as removing unneeded calls (interesting).
1. Writing to E0004, E0014, E0018, E001C in lcd_bcm_setup_rect() seems to be not needed and there is no measurable impact when changing the written values or even removing these writes.
2. lcd_bcm_read32(0x1FC) right after lcd_bcm_setup_rect() and right before leaving lcd_update_rect() seems to be not needed
3. variable and check for finishup_needed can be removed as the check for register content 0x1F8 works for the first call of lcd_update_rect() as well

Another result of dumb testing:
1. The call of lcd_bcm_write32(0x1F8, 0xFFFA0005) can be moved to the end of lcd_bcm_setup_rect() without any measurable impact.
2. When placing the call of lcd_bcm_write32(0x1F8, 0xFFFA0005) at the very end of lcd_update_rect() the iPod will perform some screen updates after booting and then hang up. It displays the startup logom the menu and if you are very fast you might even scroll a few items. Seems like the iPod hangs up after a small amount of time.

Maybe we get closer to the 14ms phenomenon?

Sync'ed and adapted to amiconns big rework of 5G LCD driver. Will leave the performance of full screen updates untouched (still 101fps @80MHz), but will slightly increase the fps for non full screen updates (1/4 screen 391.5 → 399fps).

- moved the outer loop (–height) into the asm-routine
- taking into account the special case "width==LCD_WIDTH"

Imho this makes the function lcd_update() better readable. But make up your mind for yourself ;o)

Btw, we could do similar things to the yuv_blit-helper function. For this function we still search for each percent of speed-up, don't we? ;o)


Available keyboard shortcuts


Task Details

Task Editing