User talk:Kozarovv: Difference between revisions
Jump to navigation
Jump to search
(21 intermediate revisions by 3 users not shown) | |||
Line 3: | Line 3: | ||
==psfour2pstwo== | ==psfour2pstwo== | ||
==== | ====vu0==== | ||
For JAK emu. Todo: Exec from VIF0 seems to always run program for 0x7FFFFFFF cycles... | |||
void __fastcall Vu0MicroExec() | |||
{ | |||
run_vu0(vu0_functions_ptr, 256LL, 0LL); | |||
// run vu for 256 cycles. | |||
// This kill whole sync idea. We have 256 cycles run already on first run. | |||
// Games like SST/ARR/TM:HEAD-ON are alredy broken before we even started. | |||
if (is_vu0_running()) // if still running (no ebit, no mbit) | |||
{ | |||
v0 = ee_sched_stru; | |||
v1 = 0LL; | |||
v2 = *(ee_core_regs_base + 0x378) - *(ee_core_regs_base + 0x370) + 512LL; | |||
// passed cycles + 512 | |||
// terrible idea, we are falling behind ee here. | |||
// There is usually no point to run behind ee if we failed to do this at start. | |||
// This break games like Ratchet/Rayman. | |||
sched_Vu0MicroExec.delta = v2; | |||
if ( ee_sched_stru ) | |||
{ | |||
while ( 1 ) | |||
{ | |||
v3 = v0; | |||
if ( v0[2] >= v2 ) // if delta from scheduler higher than from v0 | |||
break; | |||
v0 = *v0; | |||
v1 = v3; | |||
if ( !*v3 ) // schedule next run... | |||
====todo==== | |||
seems to be like internal threads, not real threads. Emu print with that. | |||
<pre>_____________________________________________________________________________ | |||
| Emotion Engine: | Input Output Processor (iop) | x Extra? | | |||
|-----------------------|-------------------------------|-------------------| | |||
| e-dbg | i-fw | x-stdlib | | |||
| e-r59 | i-debug | x-emu | | |||
| e-mem | i-cdvd | x-lpnr | | |||
| e-dmac | i-dmac | x-cdvd | | |||
| e-timer | i-gmif | x-isofs | | |||
| e-sio | i-intc | x-log | | |||
| e-dramc | i-mem | x-mcd | | |||
| e-intc | i-memcard | x-replay | | |||
| e-sif | i-mtap | x-rtc | | |||
| e-gif | i-pad | x-save | | |||
| e-vif0 | i-pif | x-osd | | |||
| e-vif1 | i-sched | x-snap | | |||
| e-ipu | i-sif | x-host | | |||
| e-jit | i-sio2 | x-trphy | | |||
| e-hook | i-timer | x-audio | | |||
| e-Lua | i-usb | x-pad | | |||
| e-gs | i-spu2 | x-srvc | | |||
| e-sched | i-EndSlice | x-dialog | | |||
| | i-r30 | x-dlc | | |||
| | i-jit | x-stream | | |||
| | i-Lua | x-mem | | |||
| | i-thread | x-core | | |||
|-----------------------|-------------------------------|-------------------|</pre> | |||
== | ==Shaders== | ||
===SB header=== | |||
{| border="1" cellspacing="0" cellpadding="5" border="#999" class="wikitable" style="border:1px solid #999; border-collapse: collapse;" | |||
|- bgcolor="#cccccc" | |||
! Offset !! Size !! Description !! Example | |||
|- | |||
| 0x00 || 2 bytes || SB Version || 00 04 (00.04) | |||
|- | |||
| 0x02 || 2 bytes || Compiler Version || F9 F1 (63985) | |||
|- | |||
| 0x04 || 8 bytes || Association Hash || B2 09 E0 A5 00 00 00 00 | |||
|- | |||
| 0x0C || 1 byte || Shader Type || 02 | |||
|- | |||
| 0x0D || 1 byte || Code Type || 01 | |||
|- | |||
| 0x0E || 1 byte || UseShaderResourceTable || 00/01 (true/false) | |||
|- | |||
| 0x0F || 1 byte || Compiler Type || 03 | |||
|- | |||
| 0x10 || 4 bytes || Code Size || E8 00 00 00 (232) | |||
|- | |||
| 0x14 || 4 bytes || ? || 00 00 00 00 | |||
|- | |||
| 0x18 || 12 bytes? || System Attribute Info - Num Threads || 40 00 01 00 01 00 00 00 00 00 00 00 | |||
|- | |||
|} | |||
<pre> | |||
'''Shader Type''' | |||
*(unknown) 0 | |||
*kShaderTypeVsShader 1 | |||
*kShaderTypeFsShader 2 | |||
*kShaderTypeCsShader 3 | |||
*kShaderTypeGsShader 4 | |||
*kShaderTypeHsShader 5 | |||
*kShaderTypeDsShader 6 | |||
'''Code type''' | |||
* | *kCodeTypeIl 0 | ||
* | *kCodeTypeIsa 1 | ||
* -- | *kCodeTypeScu 2 | ||
'''UseShaderResourceTable''' | |||
*false 0 | |||
*true 1 | |||
'''Compiler Type''' | |||
*kCompilerTypeUnspecified 0 | |||
*kCompilerTypeOrbisPsslc 1 | |||
*kCompilerTypeOrbisEsslc 2 | |||
*kCompilerTypeOrbisWave 3 | |||
*kCompilerTypeOrbisCuAs 4</pre> | |||
===GNM Header=== | |||
{| border="1" cellspacing="0" cellpadding="5" border="#999" class="wikitable" style="border:1px solid #999; border-collapse: collapse;" | |||
|- bgcolor="#cccccc" | |||
! Offset !! Size !! Description !! Example | |||
|- | |||
| 0x00 || 4 bytes || Magic || 72 64 68 53 Shdr | |||
|- | |||
| 0x04 || 4 bytes || Version || 00 07 00 02 (0007.0002) | |||
|- | |||
| 0x08 || 1 byte || Shader type || 04 (Compute) | |||
|- | |||
| 0x09 || 1 byte || Shader header size in DW || 0D (13) | |||
|- | |||
| 0x0A || 1 byte || Has shader aux data || 00/01 ? | |||
|- | |||
| 0x0B || 1 byte || Target GPU types || 03 (Base|NEO) | |||
|- | |||
| 0x0C || 4 bytes || padding || 00 00 00 00 | |||
|- | |||
|} |
Latest revision as of 17:30, 11 April 2023
Rough draft[edit source]
psfour2pstwo[edit source]
vu0[edit source]
For JAK emu. Todo: Exec from VIF0 seems to always run program for 0x7FFFFFFF cycles...
void __fastcall Vu0MicroExec() { run_vu0(vu0_functions_ptr, 256LL, 0LL); // run vu for 256 cycles. // This kill whole sync idea. We have 256 cycles run already on first run. // Games like SST/ARR/TM:HEAD-ON are alredy broken before we even started. if (is_vu0_running()) // if still running (no ebit, no mbit) { v0 = ee_sched_stru; v1 = 0LL; v2 = *(ee_core_regs_base + 0x378) - *(ee_core_regs_base + 0x370) + 512LL; // passed cycles + 512 // terrible idea, we are falling behind ee here. // There is usually no point to run behind ee if we failed to do this at start. // This break games like Ratchet/Rayman. sched_Vu0MicroExec.delta = v2; if ( ee_sched_stru ) { while ( 1 ) { v3 = v0; if ( v0[2] >= v2 ) // if delta from scheduler higher than from v0 break; v0 = *v0; v1 = v3; if ( !*v3 ) // schedule next run...
todo[edit source]
seems to be like internal threads, not real threads. Emu print with that.
_____________________________________________________________________________ | Emotion Engine: | Input Output Processor (iop) | x Extra? | |-----------------------|-------------------------------|-------------------| | e-dbg | i-fw | x-stdlib | | e-r59 | i-debug | x-emu | | e-mem | i-cdvd | x-lpnr | | e-dmac | i-dmac | x-cdvd | | e-timer | i-gmif | x-isofs | | e-sio | i-intc | x-log | | e-dramc | i-mem | x-mcd | | e-intc | i-memcard | x-replay | | e-sif | i-mtap | x-rtc | | e-gif | i-pad | x-save | | e-vif0 | i-pif | x-osd | | e-vif1 | i-sched | x-snap | | e-ipu | i-sif | x-host | | e-jit | i-sio2 | x-trphy | | e-hook | i-timer | x-audio | | e-Lua | i-usb | x-pad | | e-gs | i-spu2 | x-srvc | | e-sched | i-EndSlice | x-dialog | | | i-r30 | x-dlc | | | i-jit | x-stream | | | i-Lua | x-mem | | | i-thread | x-core | |-----------------------|-------------------------------|-------------------|
Shaders[edit source]
SB header[edit source]
Offset | Size | Description | Example |
---|---|---|---|
0x00 | 2 bytes | SB Version | 00 04 (00.04) |
0x02 | 2 bytes | Compiler Version | F9 F1 (63985) |
0x04 | 8 bytes | Association Hash | B2 09 E0 A5 00 00 00 00 |
0x0C | 1 byte | Shader Type | 02 |
0x0D | 1 byte | Code Type | 01 |
0x0E | 1 byte | UseShaderResourceTable | 00/01 (true/false) |
0x0F | 1 byte | Compiler Type | 03 |
0x10 | 4 bytes | Code Size | E8 00 00 00 (232) |
0x14 | 4 bytes | ? | 00 00 00 00 |
0x18 | 12 bytes? | System Attribute Info - Num Threads | 40 00 01 00 01 00 00 00 00 00 00 00 |
'''Shader Type''' *(unknown) 0 *kShaderTypeVsShader 1 *kShaderTypeFsShader 2 *kShaderTypeCsShader 3 *kShaderTypeGsShader 4 *kShaderTypeHsShader 5 *kShaderTypeDsShader 6 '''Code type''' *kCodeTypeIl 0 *kCodeTypeIsa 1 *kCodeTypeScu 2 '''UseShaderResourceTable''' *false 0 *true 1 '''Compiler Type''' *kCompilerTypeUnspecified 0 *kCompilerTypeOrbisPsslc 1 *kCompilerTypeOrbisEsslc 2 *kCompilerTypeOrbisWave 3 *kCompilerTypeOrbisCuAs 4
GNM Header[edit source]
Offset | Size | Description | Example |
---|---|---|---|
0x00 | 4 bytes | Magic | 72 64 68 53 Shdr |
0x04 | 4 bytes | Version | 00 07 00 02 (0007.0002) |
0x08 | 1 byte | Shader type | 04 (Compute) |
0x09 | 1 byte | Shader header size in DW | 0D (13) |
0x0A | 1 byte | Has shader aux data | 00/01 ? |
0x0B | 1 byte | Target GPU types | NEO) |
0x0C | 4 bytes | padding | 00 00 00 00 |