| 804 | } |
| 805 | |
| 806 | void GSLocalMemoryFunctions::WriteImageX(GSLocalMemory& mem, int& tx, int& ty, const u8* src, int len, GIFRegBITBLTBUF& BITBLTBUF, GIFRegTRXPOS& TRXPOS, GIFRegTRXREG& TRXREG) |
| 807 | { |
| 808 | if (len <= 0) |
| 809 | return; |
| 810 | |
| 811 | const u8* pb = (u8*)src; |
| 812 | const u16* pw = (u16*)src; |
| 813 | const u32* pd = (u32*)src; |
| 814 | u8* vm8 = mem.vm8(); |
| 815 | u16* vm16 = mem.vm16(); |
| 816 | u32* vm32 = mem.vm32(); |
| 817 | |
| 818 | u32 bp = BITBLTBUF.DBP; |
| 819 | u32 bw = BITBLTBUF.DBW; |
| 820 | |
| 821 | int sx = TRXPOS.DSAX; |
| 822 | int w = TRXREG.RRW; |
| 823 | |
| 824 | GSOffset off = mem.GetOffset(bp, bw, BITBLTBUF.DPSM); |
| 825 | |
| 826 | switch (BITBLTBUF.DPSM) |
| 827 | { |
| 828 | case PSMCT32: |
| 829 | case PSMZ32: |
| 830 | readWriteHelper(tx, ty, len / 4, 1, sx, w, off.assertSizesMatch(GSLocalMemory::swizzle32), [&](GSOffset::PAHelper& pa, int x) |
| 831 | { |
| 832 | vm32[pa.value(x)] = *pd; |
| 833 | pd++; |
| 834 | }); |
| 835 | break; |
| 836 | |
| 837 | case PSMCT24: |
| 838 | case PSMZ24: |
| 839 | readWriteHelper(tx, ty, len / 3, 1, sx, w, off.assertSizesMatch(GSLocalMemory::swizzle32), [&](GSOffset::PAHelper& pa, int x) |
| 840 | { |
| 841 | mem.WritePixel24(&vm32[pa.value(x)], *(u32*)pb); |
| 842 | pb += 3; |
| 843 | }); |
| 844 | break; |
| 845 | |
| 846 | case PSMCT16: |
| 847 | case PSMCT16S: |
| 848 | case PSMZ16: |
| 849 | case PSMZ16S: |
| 850 | readWriteHelper(tx, ty, len / 2, 1, sx, w, off.assertSizesMatch(GSLocalMemory::swizzle16), [&](GSOffset::PAHelper& pa, int x) |
| 851 | { |
| 852 | vm16[pa.value(x)] = *pw; |
| 853 | pw++; |
| 854 | }); |
| 855 | break; |
| 856 | |
| 857 | case PSMT8: |
| 858 | readWriteHelper(tx, ty, len, 1, sx, w, GSOffset::fromKnownPSM(bp, bw, PSMT8), [&](GSOffset::PAHelper& pa, int x) |
| 859 | { |
| 860 | vm8[pa.value(x)] = *pb; |
| 861 | pb++; |
| 862 | }); |
| 863 | break; |
nothing calls this directly
no test coverage detected