Это старая версия документа!
Содержание
VRAM
Видеопамять PlayStation. Объем видеопамяти составляет 1 MiB (1024 KiB). VRAM не имеет отображения в системной памяти, доступ к ней осуществляется исключительно через команды GPU.
Цветовые режимы
Текстуры и буферы хранятся в видеопамяти в одном из поддерживаемых цветовых режимов:
- 24-битный - также известен как 24-bit Direct или True Color. На каждый канал выделено по 8 бит. Используется для вывода на экран и декодирования видео.
- 16-битный - также известен как 15-bit Direct. На каждый канал выделено по 5 бит, старший бит - бит прозрачности (если он равен 1 - включается прозрачность, если 0 - пиксель полностью непрозрачный). Этот режим позволяет хранить 32 × 32 × 32 = 32768 цветов.
- 8-битный индексированный - использует 256-цветовую палитру. Каждый пиксель является 8-битным индексом в палитре.
- 4-битный индексированный - использует 16-цветовую палитру. Каждый пиксель является 4-битным индексом в палитре. Подходит для простейшей 2D-графики и текста.
Для вывода на экран поддерживаются только прямые 24-битный и 16-битный режимы. Для текстур поддерживаются 16-битный, 8-битный и 4-битный.
Адресация
VRAM адресуется как двумерный буфер разрешением 2048×512 байт, что эквивалентно 1024×512 пикселей в 16-битном цветовом режиме. В левом верхнем углу этого прямоугольника обычно находятся буферы кадра (вверху первичный, под ним - вторичный).
Доступ к текстурам организован постранично. Текстурная страница - это логическая область размером 256×256 пикселей. GPU использует ее при текстурировании полигонов. Независимо от цветового режима, текстурные координаты имеют диапазон 0..255, поэтому один полигон не может напрямую адресовать текстуру большего размера. Это позволяет кодировать UV-координаты вершин всего двумя байтами.
Страницы располагаются в VRAM с учетом того, что GPU адресует память 16-битными пикселями. Начало страницы задается координатами tx и ty, где:
- tx - горизонтальная координата начала страницы в 16-битных пикселях, кратная 64;
- ty - вертикальная координата начала страницы в строках, кратная 256.
Одна и та же текстурная страница физически занимает разный объем памяти, так как ширина страницы в байтах зависит от цветового режима текстуры:
- 4-битный - TP=0 - 64 пикселя - 32 KiB
- 8-битный - TP=1 - 128 пикселей - 64 KiB
- 16-битный - TP=2 - 256 пикселей - 128 KiB
Для рисования текстурированного полигона в команду GPU отправляется значение tpage, 16-битное поле, которое кодирует положение страницы и параметры ее использования:
- Биты 0-3: pageX, горизонтальная позиция страницы (0-15 включительно)
- Бит 4: pageY, вертикальная позиция страницы (0 или 1)
- Биты 5-6: ABR, режим прозрачности (0, 1, 2 или 3, см GPU: Прозрачность и смешивание)
- Биты 7-8: TP, цветовой режим текстуры (0, 1, 2 или 3)
Если при загрузке изображения известны его координаты в VRAM (tx, ty) и цветовой режим, то искомое значение tpage получается следующим образом:
uint32_t pageX = tx / 64; uint32_t pageY = ty / 256; uint32_t tpage = pageX | (pageY << 4) | (abr << 5) | (tp << 7);
При рисовании полигонов tpage определяет, из какой страницы считывать текстуру, а U и V указывают конкретный пиксель внутри страницы. Для индексированных текстур дополнительно передается адрес палитры CLUT.
