Это старая версия документа!
Содержание
GTE
GTE (Geometry Transformation Engine) - это сопроцессор 2 (COP2), выполняющий векторно-матричные операции. Он не имеет портов, отображенных в память CPU, и полностью управляется специальными опкодами.
Перед использованием GTE должен быть включен. Для этого нужно установить бит 30 в статусном регистре COP0:
mfc0 $8, $12 # t0 = SR ori $8, $8, 0x40000000 # Set bit 30 in t0 (CU2) mtc0 $8, $12 # SR = t0 nop
Инструкции
- mtc2 $r, $d - Move To Coprocessor 2. Записывает значение из регистра общего назначения в регистр данных GTE. $d = $r
- mfc2 $r, $d - Move From Coprocessor 2. Читает значение из регистра данных GTE в регистр общего назначения. $r = $d
- ctc2 $r, $c - записывает значение из регистра общего назначения в контрольный регистр GTE. $c = $r
- cfc2 $r, $c - читает значение из контрольного регистра GTE в регистр общего назначения. $r = $c
- lwc2 $d, imm(base) - загружает значение из памяти в регистр данных GTE.
- swc2 $d, imm(base) - выгружает значение из регистра данных GTE в память.
- cop2 imm - выполняет команду GTE.
Загрузка и выгрузка регистров GTE имеют задержку в 2 инструкции для любых операций, которые используют эти регистры.
Регистры
GTE имеет две группы регистров - регистры данных и контрольные регистры. Регистры данных используются для передачи в сопроцессор входных векторов (позиций вершин, значений цвета). Контрольные регистры предназначены для передачи во сопроцессор матриц трансформации и параметров функций. Все регистры 32-битные, но вещественные значения чаще всего 16-битные с фиксированной запятой (Q3.12 или Q7.8). Многие регистры принимают два упакованных 16-битных значения в верхнем и нижнем полусловах.
Регистры данных (достп через 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), 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
- $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/color FIFO stage1, 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
- $23 - undefined/prohibited
- $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/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 3×3 (r11, r12), 2 signed 16-bit integers
- $1 - R13R21 - Rotation matrix 3×3 (r13, r21), 2 signed 16-bit integers
- $2 - R22R23 - Rotation matrix 3×3 (r22, r23), 2 signed 16-bit integers
- $3 - R31R32 - Rotation matrix 3×3 (r31, r32), 2 signed 16-bit integers
- $4 - R33 - Rotation matrix 3×3 (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 3×3 (l11, l12), 2 signed 16-bit integers
- $9 - L13L21 - Light source matrix 3×3 (l13, l21), 2 signed 16-bit integers
- $10 - L22L23 - Light source matrix 3×3 (l22, l23), 2 signed 16-bit integers
- $11 - L31L32 - Light source matrix 3×3 (l31, l32), 2 signed 16-bit integers
- $12 - L33 - Light source matrix 3×3 (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
