Geometry Vibes 3D Port - R-Pi Pico 1@35 FPS!

Could memset like this be replaced by dma?

I don’t know, but NUM_SLABS is only 40 at most, and all we’re doing is zeroing it out. All the binning is Core0, anyway. I’ve made a test branch and pushed the changes I tried earlier—no dice, unfortunately. I have collision detection disabled on the latest commit, as well. If you want to try it for yourself, change GV_TEST to 1.

1 Like

I was able to smooth things out for Core1 by marking renderAndFlushFrame() as __no_inline_not_in_flash_func. No more spikes on the debug output for Core1.

1 Like

After this and a modest overclock, thanks to Geoff, it’s running smoother than ever. I’m having so much fun with this thing. :slightly_smiling_face: And thank you too, Kuratius. I never would have Googled for that macro if you hadn’t mentioned putting code in memory.

1 Like

There is this thing I’ve noticed where the space bar sometimes gets read as not pressed (like you’re holding it and the space ship changes direction for a split second), but I think that is probably an issue with the hardware or the keyboard firmware, like maybe the button just doesn’t have good contact.

Hmm… I did boost the clock a bit. You could try setting it to 133MHz in PicoPlatform and set the SPI baud rate back to 65.5MHz in the display file. The keyboard is on I2C and I haven’t seen the same behavior, but you might try that to rule it out.

I didn’t check if you tryied to use different SRAM banks for the CPU/DMA ping-pong. The AHB interconnect can cause some stall if CPUs and DMA try to R/W in the same bank.

Just giving the idea if you want to squeeze out a few more FPS!

If the post by the raspberry pi engineer I linked earlier is to be believed the 4 main ram banks are striped across the address space so for most cases it sounds like it should be near impossible to have significant contention unless the data is stored in the scratchpad/stack XY banks.

Ah sorry, I must have read it too quickly.

But in this case, you should be perfectly in sync between both core and DMA to ensure stripping do the job right?

I’ll give it a try