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

Method GetPixelOffset4

pcsx2/GS/GSLocalMemory.cpp:311–362  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

309}
310
311GSPixelOffset4* GSLocalMemory::GetPixelOffset4(const GIFRegFRAME& FRAME, const GIFRegZBUF& ZBUF)
312{
313 u32 fbp = FRAME.Block();
314 u32 zbp = ZBUF.Block();
315 u32 fpsm = FRAME.PSM;
316 u32 zpsm = ZBUF.PSM;
317 u32 bw = FRAME.FBW;
318
319 pxAssert(m_psm[fpsm].trbpp > 8 || m_psm[zpsm].trbpp > 8);
320
321 // "(psm & 0x0f) ^ ((psm & 0xf0) >> 2)" creates 4 bit unique identifiers for render target formats (only)
322
323 u32 fpsm_hash = (fpsm & 0x0f) ^ ((fpsm & 0x30) >> 2);
324 u32 zpsm_hash = (zpsm & 0x0f) ^ ((zpsm & 0x30) >> 2);
325
326 u32 hash = (FRAME.FBP << 0) | (ZBUF.ZBP << 9) | (bw << 18) | (fpsm_hash << 24) | (zpsm_hash << 28);
327
328 auto it = m_po4map.find(hash);
329
330 if (it != m_po4map.end())
331 {
332 return it->second;
333 }
334
335 GSPixelOffset4* off = (GSPixelOffset4*)_aligned_malloc(sizeof(GSPixelOffset4), VECTOR_ALIGNMENT);
336
337 off->hash = hash;
338 off->fbp = fbp;
339 off->zbp = zbp;
340 off->fpsm = fpsm;
341 off->zpsm = zpsm;
342 off->bw = bw;
343
344 int fs = m_psm[fpsm].bpp >> 5;
345 int zs = m_psm[zpsm].bpp >> 5;
346
347 for (int i = 0; i < 2048; i++)
348 {
349 off->row[i].x = (int)m_psm[fpsm].info.pa(0, i, fbp, bw) << fs;
350 off->row[i].y = (int)m_psm[zpsm].info.pa(0, i, zbp, bw) << zs;
351 }
352
353 for (int i = 0; i < 512; i++)
354 {
355 off->col[i].x = (m_psm[fpsm].info.pa(i * 4, 0, 0, 32) - m_psm[fpsm].info.pa(0, 0, 0, 32)) << fs;
356 off->col[i].y = (m_psm[zpsm].info.pa(i * 4, 0, 0, 32) - m_psm[zpsm].info.pa(0, 0, 0, 32)) << zs;
357 }
358
359 m_po4map[hash] = off;
360
361 return off;
362}
363
364std::vector<GSVector2i>* GSLocalMemory::GetPage2TileMap(const GIFRegTEX0& TEX0)
365{

Callers 4

ResetMethod · 0.80
GIFRegHandlerFRAMEMethod · 0.80
GIFRegHandlerZBUFMethod · 0.80
DefrostMethod · 0.80

Calls 5

_aligned_mallocFunction · 0.85
BlockMethod · 0.45
findMethod · 0.45
endMethod · 0.45
paMethod · 0.45

Tested by

no test coverage detected