Инструменты пользователя

Инструменты сайта


gte

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
gte [2026/10/08 18:53] – geckogte [2026/10/16 09:59] (текущий) – gecko
Строка 1: Строка 1:
 ====== GTE ====== ====== GTE ======
-GTE (Geometry Transformation Engine) - это сопроцессор 2 (COP2), выполняющий векторно-матричные операции. Он не имеет портов, отображенных в память [[CPU]], и полностью управляется специальными опкодами.+GTE (Geometry Transformation Engine) - это сопроцессор 2 (COP2), выполняющий векторно-матричные операции. Он не имеет портов, отображенных в системную память, и управляется только специальными опкодами.
  
-Перед использованием GTE должен быть включен. Для этого нужно установить бит 30 в статусном регистре COP0:+Заявленные характеристики GTE: 
 +  * 90000 текстурированных и освещенных полигонов в секунду; 
 +  * 180000 текстурированных неосвещенных полигонов в секунду; 
 +  * 360000 полигонов сплошного цвета в секунду. 
 + 
 +Соответственно, при 50 FPS консоль способна обрабатывать в пределе около 1800-3600 полигонов на кадр. На практике это число несколько меньше, поскольку часть ресурсов уходит на игровую логику, ввод-вывод и операции копирования данных. 
 + 
 +Перед использованием GTE должен быть включен. Для этого нужно установить бит 30 в статусном регистре [[COP0]]:
  
 <code> <code>
-mfc0   $8, $12             # t0 = SR +mfc0   $8, $12 
-ori    $8, $8, 0x40000000  # Set bit 30 in t0 (CU2) +ori    $8, $8, 0x40000000 
-mtc0   $8, $12             # SR = t0+mtc0   $8, $12
 nop nop
 </code> </code>
Строка 26: Строка 33:
 GTE имеет две группы регистров - регистры данных и контрольные регистры. Регистры данных используются для передачи в сопроцессор входных векторов (позиций вершин, значений цвета). Контрольные регистры предназначены для передачи во сопроцессор матриц трансформации и параметров функций. Все регистры 32-битные, но вещественные значения чаще всего 16-битные с фиксированной запятой (Q3.12 или Q7.8). Многие регистры принимают два упакованных 16-битных значения в верхнем и нижнем полусловах. GTE имеет две группы регистров - регистры данных и контрольные регистры. Регистры данных используются для передачи в сопроцессор входных векторов (позиций вершин, значений цвета). Контрольные регистры предназначены для передачи во сопроцессор матриц трансформации и параметров функций. Все регистры 32-битные, но вещественные значения чаще всего 16-битные с фиксированной запятой (Q3.12 или Q7.8). Многие регистры принимают два упакованных 16-битных значения в верхнем и нижнем полусловах.
  
-Регистры данных (достп через `mfc2` / `mtc2`):+Регистры данных (достп через mfc2 / mtc2):
  
-- `$0` - VXY0  - Vector0 X and Y, 2 packed signed 16-bit integers +  * $0 - VXY0  - Vector0 X and Y, 2 packed signed 16-bit integers 
-- `$1` - VZ0   - Vector0 Z, signed 16-bit integer +  * $1 - VZ0   - Vector0 Z, signed 16-bit integer 
-- `$2` - VXY1  - Vector1 X and Y, 2 packed signed 16-bit integers +  * $2 - VXY1  - Vector1 X and Y, 2 packed signed 16-bit integers 
-- `$3` - VZ1   - Vector1 Z, signed 16-bit integer +  * $3 - VZ1   - Vector1 Z, signed 16-bit integer 
-- `$4` - VXY2  - Vector2 X and Y, 2 packed signed 16-bit integers +  * $4 - VXY2  - Vector2 X and Y, 2 packed signed 16-bit integers 
-- `$5` - VZ2   - Vector2 Z, signed 16-bit integer +  * $5 - VZ2   - Vector2 Z, signed 16-bit integer 
-- `$6` - RGBC  - Color/code value, 4 packed unsigned bytes +  * $6 - RGBC  - Color/code value, 4 packed unsigned bytes 
-- `$7` - OTZ   - Average Z value (for Ordering Table), unsigned 16-bit integer +  * $7 - OTZ   - Average Z value (for Ordering Table), unsigned 16-bit integer 
-- `$8` - IR0   - 16-bit Accumulator (Interpolate), signed 16-bit integer +  * $8 - IR0   - 16-bit Accumulator (Interpolate), signed 16-bit integer 
-- `$9` - IR1   - 16-bit Accumulator (Vector X), signed 16-bit integer +  * $9 - IR1   - 16-bit Accumulator (Vector X), signed 16-bit integer 
-- `$10` - IR2  - 16-bit Accumulator (Vector Y), signed 16-bit integer +  * $10 - IR2  - 16-bit Accumulator (Vector Y), signed 16-bit integer 
-- `$11` - IR3  - 16-bit Accumulator (Vector Z), signed 16-bit integer +  * $11 - IR3  - 16-bit Accumulator (Vector Z), signed 16-bit integer 
-- `$12` - SXY0 - Screen XY-coordinate FIFO stage1, 2 packed signed 16-bit integers +  * $12 - SXY0 - Screen XY-coordinate FIFO stage1, 2 packed signed 16-bit integers 
-- `$13` - SXY1 - Screen XY-coordinate FIFO stage2, 2 packed signed 16-bit integers +  * $13 - SXY1 - Screen XY-coordinate FIFO stage2, 2 packed signed 16-bit integers 
-- `$14` - SXY2 - Screen XY-coordinate FIFO stage3, 2 packed signed 16-bit integers +  * $14 - SXY2 - Screen XY-coordinate FIFO stage3, 2 packed signed 16-bit integers 
-- `$15` - SXYP - Screen XY-coordinate FIFO stage4, 2 packed signed 16-bit integers +  * $15 - SXYP - Screen XY-coordinate FIFO stage4, 2 packed signed 16-bit integers 
-- `$16` - SZ0 - Screen Z-coordinate FIFO stage1, unsigned 16-bit integer +  * $16 - SZ0 - Screen Z-coordinate FIFO stage1, unsigned 16-bit integer 
-- `$17` - SZ1 - Screen Z-coordinate FIFO stage2, unsigned 16-bit integer +  * $17 - SZ1 - Screen Z-coordinate FIFO stage2, unsigned 16-bit integer 
-- `$18` - SZ2 - Screen Z-coordinate FIFO stage3, unsigned 16-bit integer +  * $18 - SZ2 - Screen Z-coordinate FIFO stage3, unsigned 16-bit integer 
-- `$19` - SZ3 - Screen Z-coordinate FIFO stage4, unsigned 16-bit integer +  * $19 - SZ3 - Screen Z-coordinate FIFO stage4, unsigned 16-bit integer 
-- `$20` - RGB0 - Color CRGB-code/color FIFO stage1, 4 packed unsigned bytes +  * $20 - RGB0 - Color CRGB-code/color FIFO stage1, 4 packed unsigned bytes 
-- `$21` - RGB1 - Color CRGB-code/color FIFO stage2, 4 packed unsigned bytes +  * $21 - RGB1 - Color CRGB-code/color FIFO stage2, 4 packed unsigned bytes 
-- `$22` - RGB2 - Color CRGB-code/color FIFO stage3, 4 packed unsigned bytes +  * $22 - RGB2 - Color CRGB-code/color FIFO stage3, 4 packed unsigned bytes 
-- `$23` - undefined/prohibited +  * $23 - undefined/prohibited 
-- `$24` - MAC0 - 32bit Maths Accumulators (Value), signed 32-bit integer +  * $24 - MAC0 - 32bit Maths Accumulators (Value), signed 32-bit integer 
-- `$25` - MAC1 - 32bit Maths Accumulators (Vector X), signed 32-bit integer +  * $25 - MAC1 - 32bit Maths Accumulators (Vector X), signed 32-bit integer 
-- `$26` - MAC2 - 32bit Maths Accumulators (Vector Y), signed 32-bit integer +  * $26 - MAC2 - 32bit Maths Accumulators (Vector Y), signed 32-bit integer 
-- `$27` - MAC3 - 32bit Maths Accumulators (Vector Z), signed 32-bit integer +  * $27 - MAC3 - 32bit Maths Accumulators (Vector Z), signed 32-bit integer 
-- `$28` - IRGB - Convert RGB Color (48bit vs 15bit), unsigned 16-bit integer +  * $28 - IRGB - Convert RGB Color (48bit vs 15bit), unsigned 16-bit integer 
-- `$29` - ORGB -  +  * $29 - ORGB -  
-- `$30` - LZCS - Count Leading-Zeroes/Ones (sign bits), 2 packed signed 32-bit integers +  * $30 - LZCS - Count Leading-Zeroes/Ones (sign bits), 2 packed signed 32-bit integers 
-- `$31` - LZCR - Count Leading-Zeroes/Ones (sign bits), 2 packed signed 32-bit integers+  * $31 - LZCR - Count Leading-Zeroes/Ones (sign bits), 2 packed signed 32-bit integers 
 + 
 +Контрольные регистры (доступ через cfc2 / ctc2): 
 + 
 +  * $0  - R11R12 - Rotation matrix 3x3 (r11, r12), 2 signed 16-bit integers 
 +  * $1  - R13R21 - Rotation matrix 3x3 (r13, r21), 2 signed 16-bit integers 
 +  * $2  - R22R23 - Rotation matrix 3x3 (r22, r23), 2 signed 16-bit integers 
 +  * $3  - R31R32 - Rotation matrix 3x3 (r31, r32), 2 signed 16-bit integers 
 +  * $4  - R33    - Rotation matrix 3x3 (r33), signed 16-bit integer 
 +  * $5  - TRX    - Translation vector X, signed 32-bit integer 
 +  * $6  - TRY    - Translation vector Y, signed 32-bit integer 
 +  * $7  - TRZ    - Translation vector Z, signed 32-bit integer 
 +  * $8  - L11L12 - Light source matrix 3x3 (l11, l12), 2 signed 16-bit integers 
 +  * $9  - L13L21 - Light source matrix 3x3 (l13, l21), 2 signed 16-bit integers 
 +  * $10 - L22L23 - Light source matrix 3x3 (l22, l23), 2 signed 16-bit integers 
 +  * $11 - L31L32 - Light source matrix 3x3 (l31, l32), 2 signed 16-bit integers 
 +  * $12 - L33    - Light source matrix 3x3 (l33), signed 16-bit integer 
 +  * $13 - RBK    - Background color R, unsigned 32-bit integer 
 +  * $14 - GBK    - Background color G, unsigned 32-bit integer 
 +  * $15 - BBK    - Background color B, unsigned 32-bit integer 
 +  * $16 - LR1LR2 - Light color matrix source (lr1, lr2), 2 signed 16-bit integers 
 +  * $17 - LR3LG1 - Light color matrix source (lr3, lg1), 2 signed 16-bit integers 
 +  * $18 - LG2LG3 - Light color matrix source (lg2, lg3), 2 signed 16-bit integers 
 +  * $19 - LB1LB2 - Light color matrix source (lb1, lb2), 2 signed 16-bit integers 
 +  * $20 - LB3    - Light color matrix source (lb3), signed 16-bit integer 
 +  * $21 - RFC    - Far color R, unsigned 32-bit integer 
 +  * $22 - GFC    - Far color G, unsigned 32-bit integer 
 +  * $23 - BFC    - Far color B, unsigned 32-bit integer 
 +  * $24 - OFX    - Screen offset X, signed 32-bit integer 
 +  * $25 - OFY    - Screen offset Y, signed 32-bit integer 
 +  * $26 - H      - Projection plane distance, unsigned 16-bit integer 
 +  * $27 - DQA    - Depth queing parameter A (coefficient), signed 16-bit integer 
 +  * $28 - DQB    - Depth queing parameter B (offset), unsigned 32-bit integer 
 +  * $29 - ZSF3   - Z-averaging scale factor, signed 16-bit integer 
 +  * $30 - ZSF4   - Z-averaging scale factor, signed 16-bit integer 
 +  * $31 - FLAG   - Flag (read-only), returns any calculation errors, 20 bits
  
 ===== Команды ===== ===== Команды =====
-TODO+ 
 +[[RTPS]] - cop2 0x0180001 - Поворот, перенос и перспективное преобразование одной точки. Сначала точка умножается на матрицу поворота (R), затем к ней применяется перенос (TR). В завершение выполняется перспективное преобразование, результатом которого являются экранные координаты. Команда также возвращает значение интерполяции, используемое в различных инструкциях учета глубины (depth cueing). 
 + 
 +[[RTPT]] - cop2 0x0280030 - Поворот, перенос и перспективное преобразование трех точек. 
 + 
 +MVMVA - cop2 0x0400012 - Умножение матрицы на вектор и сложение. Умножает вектор на матрицу поворота, матрицу освещения или матрицу цвета, а затем прибавляет вектор переноса или вектор цвета фона. 
 + 
 +DCPL - cop2 0x0680029 - Цвет освещения с учетом глубины (Depth Cue Light Color). Сначала вычисляет цвет на основе вектора освещения (нормаль плоскости, умноженная на матрицу освещения, с ограничением минимального значения нулем) и заданного значения RGB. Затем выполняет коррекцию цвета по глубине (depth cueing) путем интерполяции между вектором цвета для дальней точки (far color) и полученным цветом. 
 + 
 +DPCS - cop2 0x0780010 - Коррекция цвета по глубине (один цвет). Выполняет коррекцию цвета по глубине путем интерполяции между исходным цветом и цветом для дальней точки (для одного цвета). 
 + 
 +DPCT - cop2 0x0f8002a - Коррекция цвета по глубине (три цвета). Выполняет коррекцию цвета по глубине путем интерполяции между исходным цветом и цветом для дальней точки (для трех цветов). 
 + 
 +INTPL - cop2 0x0980011 - Интерполяция. Выполняет интерполяцию между вектором и цветом для дальней точки. 
 + 
 +SQR - cop2 0x0a00428 - Вычисляет квадрат вектора. 
 + 
 +NCS - cop2 0x0c8041e - Цвет по нормали. Вычисляет цвет на основе нормали точки или плоскости, а также источников света и их цветов. Базовый цвет плоскости или точки, к которой относится нормаль, принимается за белый. 
 + 
 +NCT - cop2 0x0d80420 - 
 + 
 +NCDS - cop2 0x0e80413 - Цвет по нормали с коррекцией по глубине. Аналогична NCS, но также выполняет коррекцию цвета по глубине (как DPCS). 
 + 
 +NCDT - cop2 0x0f80416 - Цвет по нормали с коррекцией по глубине. Аналогична NCT, но также выполняет коррекцию цвета по глубине (как DPCT). 
 + 
 +NCCS - cop2 0x108041b - Аналогична NCS, но учитывает базовый цвет плоскости или точки. 
 + 
 +NCCT - cop2 0x118043f - Аналогична NCT, но учитывает базовый цвет плоскости или точки. 
 + 
 +CDP - cop2 0x1280414 - Цвет вычисляется на основе вектора освещения (базовый цвет принимается за белый), также выполняется коррекция цвета с учетом глубины (аналогично DPCS). 
 + 
 +CC - cop2 0x138041c - Цвет вычисляется на основе вектора освещения и базового цвета. 
 + 
 +NCLIP - cop2 0x1400006 - Отсечение по нормали (Normal Clipping). Вычисляет внешнее произведение трех двумерных точек (т. е. трех вершин, определяющих плоскость после проецирования). 
 + 
 +AVSZ3 - cop2 0x158002d - Усреднение Z-координат. Складывает три значения Z и умножает их на коэффициент с фиксированной запятой. Этот коэффициент обычно подбирается так, чтобы функция возвращала среднее арифметическое значений Z (как правило, с последующим делением на 2 или 4 для удобства добавления в таблицу упорядочивания - OT). 
 + 
 +AVSZ4 - cop2 0x168002e - Усреднение Z-координат. Складывает четыре значения Z и умножает их на коэффициент с фиксированной запятой. Этот коэффициент обычно подбирается так, чтобы функция возвращала среднее арифметическое значений Z (как правило, с последующим делением на 2 или 4 для удобства добавления в таблицу упорядочивания - OT). 
 + 
 +OP - cop2 0x170000c - Вычисляет внешнее произведение двух векторов. 
 + 
 +GPF - cop2 0x190003d - Перемножает два вектора. Также возвращает результат в виде 24-битного значения RGB. 
 + 
 +GPL - cop2 0x1a0003e - Умножает вектор на скаляр и прибавляет результат к другому вектору. Также возвращает результат в виде 24-битного значения RGB. 
gte.1791485634.txt.gz · Последнее изменение: — gecko

Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC0 1.0 Universal
CC0 1.0 Universal Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki