MCPcopy Create free account
hub / github.com/PCSX2/pcsx2 / WriteImageX

Method WriteImageX

pcsx2/GS/GSLocalMemoryMultiISA.cpp:806–900  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

804}
805
806void 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;

Callers

nothing calls this directly

Calls 12

readWriteHelperFunction · 0.85
vm8Method · 0.80
vm16Method · 0.80
vm32Method · 0.80
assertSizesMatchMethod · 0.80
WritePixel24Method · 0.80
WritePixel4Method · 0.80
WritePixel8HMethod · 0.80
WritePixel4HLMethod · 0.80
WritePixel4HHMethod · 0.80
GetOffsetMethod · 0.45
valueMethod · 0.45

Tested by

no test coverage detected