User talk:Kozarovv: Difference between revisions

From PS4 Developer wiki
Jump to navigation Jump to search
 
(45 intermediate revisions by 4 users not shown)
Line 1: Line 1:
==Rough draft==
=Rough draft=


===psfour2pstwo===
==psfour2pstwo==


====gs====
====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...


* --gs-kernel-cl="DarkCloud2"
====todo====
* --gs-kernel-cl="fantavision"


Special case kernel plugins?
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>


====possible speed/comp hacks====
==Shaders==


* --detect-idle-vif
===SB header===
* --detect-idle-ee
{| border="1" cellspacing="0" cellpadding="5" border="#999" class="wikitable" style="border:1px solid #999; border-collapse: collapse;"
* --detect-idle-iop
|- bgcolor="#cccccc"
* --detect-idle-intc
! Offset !! Size !! Description !! Example
* --detect-idle-chcr
|-
| 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