User talk:Kozarovv: Difference between revisions

From PS4 Developer wiki
Jump to navigation Jump to search
 
(One intermediate revision by the same user not shown)
Line 3: Line 3:
==psfour2pstwo==
==psfour2pstwo==


====idle detect====
====vu0====
 
For JAK emu. Todo: Exec from VIF0 seems to always run program for 0x7FFFFFFF cycles...
* --detect-idle-vif
void __fastcall Vu0MicroExec()
* --detect-idle-ee
{
* --detect-idle-iop
  run_vu0(vu0_functions_ptr, 256LL, 0LL);
* --detect-idle-intc
                                                // run vu for 256 cycles.
* --detect-idle-chcr
                                                // 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.
====other====
 
  if (is_vu0_running())                        // if still running (no ebit, no mbit)
* --force-point-sampling
  {
* Project Snowblind US mipmap offset 0019506C  bc1f    loc_19508C
    v0 = ee_sched_stru;
 
    v1 = 0LL;
====vu====
    v2 = *(ee_core_regs_base + 0x378) - *(ee_core_regs_base + 0x370) + 512LL;
 
                                                // passed cycles + 512
Looks like VU sync always(?), not like ps2.
                                                // 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====
====todo====


seems to be like internal threads, not real threads. Emu print with that.
<pre>_____________________________________________________________________________
<pre>_____________________________________________________________________________
| Emotion Engine:      | Input Output Processor (iop)  | x Extra?          |
| Emotion Engine:      | Input Output Processor (iop)  | x Extra?          |

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