Ok. After some more testing, I have to face it : my cache isn’t that good. When the cache is used at full capacity (ie nothing is read from the Saturn memory, everything is already in the vector and cells are just displayed to the framebuffer, I only have a 0.5 fps increase …
So I did some more thinking.
The cache is organized like that :
- one map storing 8*8 pixels textures (one texture from the map can be used by one or more cells)
- one vector storing cells (up to 4096 by page), each cell being linked to a texture in the map
Currently the cache detects when a cell has changed in the Saturn memory, reloading it if necessary. So when the framebuffer is filled with vector data, each cell is displayed.
Here’s the catch : this method isn’t using the graphic card memory to store texture data. So every cell displayed is loaded in memory, displayed then discarded. That costs a lot performance wise …
So I’ve decided to do it another way :
- the map and vector contents will stay the same as before
- display to the framebuffer won’t be done directly : instead 512*512 pixels textures will be defined, filled with cell data, and stored into the graphic card memory. In that case a whole page (4096 cells) will be cached at one time, and reused at will.
I need to be careful not to saturate the graphic card memory, but I expect a huge perf increase 🙂
And as a nice bonus, I can this way handle per dot and per cell priority, without much effort 😉
Now that’s the theory. I hope that I won’t be disapointed by the results …