mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-22 00:22:57 -05:00
A V# whose base is not a multiple of 4 bytes from the start of its GPU owner threw in GuestBufferMemory::Descriptor, because the shader added the offset below the view only in whole dwords. Descriptor now binds from the offset alignment below the view and passes the whole remainder. Such a view's range covers the dwords around it, and its descriptor region starts and ends on dword boundaries, so a lone view copied to its own buffer binds the same way. The buffer specialization records the V# base's low two bits. Raw vector loads through such a V# join two dwords, glc dwordx2 loads included, stores merge their bytes into both with compare-exchange loops, and bounds checks include the second dword. s_buffer_load ignores the low two bits, as SrtEvaluator does. Formatted accesses whose element alignment (min(element bytes, 4)) the base breaks throw, as they fault the wave on RDNA2, and so do atomics.