Entkacheln von Texturen
PS5-Texturen liegen in GFX10-Swizzle-Mustern, nicht in linearen Zeilen. PS5PCEM wendet die Adressgleichungen auf der CPU an und auf der GPU für die großen Oberflächen mit 4, 8 und 16 Byte, die dafür infrage kommen.
Repository-Notizen bis 10. Oktober 2026
Die Adressgleichungen
Eine gekachelte Textur verknüpft die Pixelkoordinate per XOR mit Pipe-, Bank- und Sample-Bits, sodass benachbarte Pixel in verschiedenen Speicherkanälen landen. PS5PCEM implementiert die GFX10-Gleichungen für lineare Layouts, Standardkacheln von 256 Byte, 4 KiB und 64 KiB, teilweise residente Kacheln von 64 KiB, Tiefe Z_X und Renderziel R_X. Derselbe Vertrag deckt Mip-Tails und dicke 3D-Blöcke ab.
Bis zu sechzehn Mip-Stufen werden mit der kleinsten zuerst gelegt. Kleine Stufen teilen die genauen Positionen der Mip-Tails von 4 KiB und 64 KiB. Dreidimensionale Ressourcen nutzen dicke Blöcke und Tiefen-Blockslices. Jede Subressource legt einen geprüften Quellbyte-Offset offen. Adapter für Puffer, Bild, blockkomprimierte Daten, Farbziel und Tiefenziel teilen nichts zu und weisen einen Überlauf oder einen zu kurzen Bereich zurück.
GPU-Detile und der CPU-Rückfall
Uploads bei der ersten Nutzung großer Standardoberflächen von 4 Byte mit Kacheln von 256 Byte, 4 KiB und 64 KiB sowie großer linearer Oberflächen werden auf der GPU entkachelt. Der Compute-Kernel erhält einen zeigerfreien Schlüssel und einen Parameterblock von 84 Byte: Blockgröße, Tail, Pitch, Slice, Samplezahl und einen Pufferoffset von 64 Bit, in einem stabilen Layout aus lauter 32-Bit-Feldern. Standard- und PRT-Oberflächen in 2D und 3D mit acht und mit sechzehn Byte gehören zur selben GPU-Familie.
Andere Familien bleiben auf der CPU, einschließlich RB+ und MSAA. Die Oberon-Gleichungen dafür enthalten die Sample-Bits, und der CPU-Pfad nutzt sie. Der Rückfall kostet Bandbreite. Er ist kein anderes Pixelformat. Diagnosen bei einem laufenden Zeichenaufruf melden die Familie, die Maße des 3D-Blocks, die Samplezahl, die Grenze des Mip-Tails und die Größe der Gastzuteilung.
Warum Detile in der Bildzeit auftaucht
Eine Textur, die in jedem Bild erneut hochgeladen wird, zahlt die Detile-Kosten in jedem Bild. Der Seitenverfolger lässt, wenn er eingeschaltet ist, eine unveränderte Seite resident, sodass das Detile übersprungen wird. Eine Textur, die die GPU selbst umgeschrieben hat, muss weiterhin ungültig gemacht werden. Detile ersetzt diese Kohärenzregel nicht.
Abgetastete Sichten entkacheln den Mip-Bereich, den der Deskriptor nennt, einschließlich einer Basisstufe ungleich null. Mip 0 des Vulkan-Bildes ist in diesem Fall die Basisstufe der Sicht. Komponenten-Swizzles, die auf dem Sichtpfad noch fehlen, sind eine andere Grenze als die Adressgleichung.
Was umgesetzt ist
- GFX10-Adressgleichungen für linear, Standard, PRT, Tiefe und Renderziel, einschließlich Mip-Tails und 3D-Blöcken.
- Compute-Detile auf der GPU für große Standard- und PRT-Oberflächen in 2D und 3D mit 4, 8 und 16 Byte.
- CPU-Detile für die übrigen Familien, einschließlich der Sample-Bits von MSAA und RB+.
- Geprüfte Offsets von Subressourcen, die zu kurze Bereiche und Überläufe zurückweisen.
Was noch fehlt
- Detile von MSAA und RB+ läuft auf der CPU.
- Einige Komponenten-Swizzles und Layer-Sichten sind weiterhin unvollständig.
- Eine Oberfläche, die die CPU nach dem Upload schreibt, muss ungültig gemacht werden, bevor sie erneut abgetastet wird.
Verwandte Mechanismen
Worum es auf diesen Seiten geht