gte
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| gte [2026/07/17 12:41] – gecko | gte [2026/10/16 09:59] (текущий) – gecko | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| ====== GTE ====== | ====== GTE ====== | ||
| - | GTE (Geometry Transformation Engine) - это сопроцессор 2 (COP2), выполняющий векторно-матричные операции. Он не имеет портов, | + | GTE (Geometry Transformation Engine) - это сопроцессор 2 (COP2), выполняющий векторно-матричные операции. Он не имеет портов, |
| - | Перед использованием GTE должен быть включен. Для этого нужно установить бит 30 в статусном регистре COP0: | + | Заявленные характеристики GTE: |
| + | * 90000 текстурированных и освещенных полигонов в секунду; | ||
| + | * 180000 текстурированных неосвещенных полигонов в секунду; | ||
| + | * 360000 полигонов сплошного цвета в секунду. | ||
| + | |||
| + | Соответственно, | ||
| + | |||
| + | Перед использованием GTE должен быть включен. Для этого нужно установить бит 30 в статусном регистре | ||
| < | < | ||
| - | mfc0 $8, $12 # t0 = SR | + | mfc0 $8, $12 |
| - | ori $8, $8, 0x40000000 | + | ori $8, $8, 0x40000000 |
| - | mtc0 $8, $12 # SR = t0 | + | mtc0 $8, $12 |
| nop | nop | ||
| </ | </ | ||
| Строка 21: | Строка 28: | ||
| Загрузка и выгрузка регистров GTE имеют задержку в 2 инструкции для любых операций, | Загрузка и выгрузка регистров GTE имеют задержку в 2 инструкции для любых операций, | ||
| + | |||
| + | ===== Регистры ===== | ||
| + | |||
| + | GTE имеет две группы регистров - регистры данных и контрольные регистры. Регистры данных используются для передачи в сопроцессор входных векторов (позиций вершин, | ||
| + | |||
| + | Регистры данных (достп через mfc2 / mtc2): | ||
| + | |||
| + | * $0 - VXY0 - Vector0 X and Y, 2 packed signed 16-bit integers | ||
| + | * $1 - VZ0 - Vector0 Z, signed 16-bit integer | ||
| + | * $2 - VXY1 - Vector1 X and Y, 2 packed signed 16-bit integers | ||
| + | * $3 - VZ1 - Vector1 Z, signed 16-bit integer | ||
| + | * $4 - VXY2 - Vector2 X and Y, 2 packed signed 16-bit integers | ||
| + | * $5 - VZ2 - Vector2 Z, signed 16-bit integer | ||
| + | * $6 - RGBC - Color/code value, 4 packed unsigned bytes | ||
| + | * $7 - OTZ - Average Z value (for Ordering Table), unsigned 16-bit integer | ||
| + | * $8 - IR0 - 16-bit Accumulator (Interpolate), | ||
| + | * $9 - IR1 - 16-bit Accumulator (Vector X), 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 | ||
| + | * $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 | ||
| + | * $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 | ||
| + | * $16 - SZ0 - Screen Z-coordinate FIFO stage1, 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 | ||
| + | * $19 - SZ3 - Screen Z-coordinate FIFO stage4, unsigned 16-bit integer | ||
| + | * $20 - RGB0 - Color CRGB-code/ | ||
| + | * $21 - RGB1 - Color CRGB-code/ | ||
| + | * $22 - RGB2 - Color CRGB-code/ | ||
| + | * $23 - undefined/ | ||
| + | * $24 - MAC0 - 32bit Maths Accumulators (Value), 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 | ||
| + | * $27 - MAC3 - 32bit Maths Accumulators (Vector Z), signed 32-bit integer | ||
| + | * $28 - IRGB - Convert RGB Color (48bit vs 15bit), unsigned 16-bit integer | ||
| + | * $29 - ORGB - | ||
| + | * $30 - LZCS - Count Leading-Zeroes/ | ||
| + | * $31 - LZCR - Count Leading-Zeroes/ | ||
| + | |||
| + | Контрольные регистры (доступ через 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), | ||
| + | * $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), | ||
| + | |||
| + | ===== Команды ===== | ||
| + | |||
| + | [[RTPS]] - cop2 0x0180001 - Поворот, | ||
| + | |||
| + | [[RTPT]] - cop2 0x0280030 - Поворот, | ||
| + | |||
| + | MVMVA - cop2 0x0400012 - Умножение матрицы на вектор и сложение. Умножает вектор на матрицу поворота, | ||
| + | |||
| + | DCPL - cop2 0x0680029 - Цвет освещения с учетом глубины (Depth Cue Light 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 - Цвет вычисляется на основе вектора освещения (базовый цвет принимается за белый), | ||
| + | |||
| + | CC - cop2 0x138041c - Цвет вычисляется на основе вектора освещения и базового цвета. | ||
| + | |||
| + | NCLIP - cop2 0x1400006 - Отсечение по нормали (Normal Clipping). Вычисляет внешнее произведение трех двумерных точек (т. е. трех вершин, | ||
| + | |||
| + | AVSZ3 - cop2 0x158002d - Усреднение Z-координат. Складывает три значения Z и умножает их на коэффициент с фиксированной запятой. Этот коэффициент обычно подбирается так, чтобы функция возвращала среднее арифметическое значений Z (как правило, | ||
| + | |||
| + | AVSZ4 - cop2 0x168002e - Усреднение Z-координат. Складывает четыре значения Z и умножает их на коэффициент с фиксированной запятой. Этот коэффициент обычно подбирается так, чтобы функция возвращала среднее арифметическое значений Z (как правило, | ||
| + | |||
| + | OP - cop2 0x170000c - Вычисляет внешнее произведение двух векторов. | ||
| + | |||
| + | GPF - cop2 0x190003d - Перемножает два вектора. Также возвращает результат в виде 24-битного значения RGB. | ||
| + | |||
| + | GPL - cop2 0x1a0003e - Умножает вектор на скаляр и прибавляет результат к другому вектору. Также возвращает результат в виде 24-битного значения RGB. | ||
gte.1784292091.txt.gz · Последнее изменение: — gecko
