citra
citra copied to clipboard
GX_TextureCopy appears to require a 16 byte aligned source offset
On real hardware using an 8 byte aligned source/destination offset makes GX_TextureCopy begin from the last 16 byte aligned offset. On citra GX_TextureCopy copies starting from the 8 byte aligned offset.
The code I'm using to test this is here. https://dl.dropboxusercontent.com/u/53682520/gpu_test_stuff.zip
In this example linearAlloc is used to create a buffer 16 bytes larger than needed for the texture. Since linearAlloc returns addresses that are 16 byte aligned offsetAmount is used to control the alignment. Using a value of 8 for offsetAmount should be 8 byte aligned and shows up fine on citra and incorrectly on 3DS. Using offsetAmount of 16 shows up fine in both citra and 3ds.
On citra the output looks like http://i.imgur.com/M4szVG3.png on a real 3DS it looks like this http://i.imgur.com/qYaHmoN.jpg