Home Emulatori Pubblicato un nuovo aggiornamento per shadPS4: più giochi avviabili, supporto Unreal Engine...

Pubblicato un nuovo aggiornamento per shadPS4: più giochi avviabili, supporto Unreal Engine e interfaccia migliorata

266
0

Pubblicato un nuovo aggiornamento per shadPS4, l’emulatore open source della console PlayStation 4 per PC Windows, MacOS e Linux sviluppato da georgemoralis, meglio noto sulla scena come shadow, fondatore e programmatore di molti altri progetti di emulazione.

Avviato nell’ottobre 2022 e scritto in C++, l’emulatore è ancora in una fase preliminare, il che significa che non garantisce un’esperienza perfetta per tutti i titoli.

Già prima di questo aggiornamento, shadPS4 era in grado di avviare diversi giochi commerciali: Bloodborne è considerato tra i più giocabili, soprattutto se affiancato da mod che correggono i bug grafici.

Altri titoli di grande richiamo, come Red Dead Redemption, Dark Souls Remastered e Resident Evil 4, sono avviabili ma soffrono ancora di cali di framerate e glitch visivi. I giochi più leggeri, come BlazBlue: Cross Tag Battle e Capcom Fighting Collection, risultano invece quasi perfetti.

L’aggiornamento appena pubblicato è comunque molto ricco di novità. Dal punto di vista del core, è stata migliorata la gestione della memoria, standardizzate le librerie HLE, corretti i comportamenti del filesystem e aggiunto il supporto al microfono.

Introdotti inoltre meccanismi più sicuri per la validazione degli indirizzi di memoria, corretta la gestione dei thread e dei registri MXCSR e FPUCW, e migliorata la stabilità generale.

Importante anche il fatto che i giochi che utilizzano Unreal Engine ora iniziano ad avviarsi correttamente e alcuni risultano persino giocabili, un passo avanti significativo nella compatibilità.

Le librerie di sistema hanno ricevuto numerosi aggiornamenti: è stato implementato il supporto alla risoluzione interna per migliorare la qualità grafica e introdotte nuove funzioni di rete per aumentare la compatibilità con le API di OpenOrbis.

Migliorata anche la gestione dell’audio (incluso l’audio 3D e il supporto all’altoparlante del DualShock 4), risolti artefatti grafici nei filmati tramite aggiornamenti a ffmpeg, e migliorata l’emulazione di molte funzioni legate a fotocamera, VR, input e salvataggi.

Il recompiler degli shader è stato ottimizzato in maniera sostanziale, correggendo casi limite di istruzioni vettoriali, migliorando l’accuratezza delle esportazioni degli shader, supportando più attributi per i vertex fetch e implementando operazioni avanzate come MUBUF per short/byte e V_ADD_F64 per calcoli in double precision.

Queste modifiche contribuiscono a una resa grafica più corretta e a una riduzione dei crash.

Sul fronte GPU e renderer Vulkan, è stato potenziato il sistema di cache delle texture e dei buffer, introdotta la gestione asincrona per il download delle immagini modificate dalla GPU, migliorata la pulizia della tile manager e aggiunto un sistema di garbage collector per ottimizzare l’uso della memoria video.

Sono stati corretti numerosi bug che causavano glitch visivi, ripristinata la gestione corretta dei parametri di blending e aggiunti fallback per i formati grafici non supportati.

L’interfaccia Qt ha ricevuto un corposo aggiornamento: ora è possibile selezionare e configurare controller multipli, personalizzare hotkey e preset, applicare patch e cheat in base alla versione del gioco, modificare il percorso dei DLC, regolare il volume globale e persino visualizzare i trofei con un suono dedicato.

Sono stati introdotti anche nuovi toggle per il logging, per la modalità di presentazione e per abilitare o disabilitare i readback delle immagini.

La GUI è stata resa più intuitiva, con categorie più ordinate e descrizioni per le opzioni sperimentali, ed è stato aggiunto il supporto alle opzioni FSR per migliorare le prestazioni su PC meno potenti.

Changelog

Core

  • Abilita mmap per memoria eseguibile.
  • Azzeramento dei bit più significativi in INSERTQ/EXTRQ.
  • Corretto l’unmap di file di sola lettura su Windows.
  • Standardizzati i nomi di RegisterLib per le librerie HLE.
  • Filesystem: corretto il trattamento del flag create in open
  • Se CONTENT_ID è vuoto in param.sfo, usare TITLE_ID come fallback.
  • Aggiunto un ramo “unreachable” quando si incontra ud2 invece di rimanere bloccati in un loop infinito.
  • Supporto microfono.
  • Aggiorna le configurazioni solo se si usa una build diversa.
  • Core: restituisce errore se l’indirizzo in DirectMemoryQuery è troppo alto.
  • IPC semplice per il controllo esterno.
  • Filesystem: corretto il comportamento in caso di errore per le chiamate close su handle standard.
  • Correzioni ai socket.
  • Aggiunte le voci . e .. in MntPoints::IterateDirectory
  • Registra CPU utente, RAM totale e sistema operativo nei log.
  • Filesystem: correzioni relative alle directory.
  • Memory: allineamento di dimensione e indirizzo in posix_munmap
  • Filesystem: astrazione nella gestione dei file di directory.
  • Sostituito l’uso diretto di wrgsbase e rdgsbase con una soluzione più portabile.
  • Config: aggiunta opzione “present mode”.
  • Configurazioni specifiche per gioco.
  • Migliorata la logica di validazione degli indirizzi di memoria.
  • Rimosse le verifiche per symbol version_major e version_minor
  • Correzione dei registri MXCSR e FPUCW nei thread creati.
  • Registra errore su MapMemory quando si esce dal caso di memoria flessibile.
  • Apre un dispositivo audio di input fittizio se nel sistema non è presente nessuno.
  • Supporto audio dallo speaker del DualShock 4.

Librerie (Libs)

  • libkernel: aggiunta esportazione mancante di mprotect
  • Correzioni IME.
  • video_out: supporto risoluzione interna.
  • Implementato sceKernelGetSystemSwVersion
  • Implementato sceAudio3dTerminate
  • Implementato sceAudioOutGetLastOutputTime
  • Registrato posix_rename
  • Implementato sceKernelError
  • Utilizzo di una libreria USB personalizzata.
  • Aggiunti inet_ntop e inet_pton
  • Estrazione netmask e gateway predefinito dal sistema host.
  • Implementata risoluzione DNS semplice.
  • Restituito il numero di campioni in coda in AudioOut.
  • Generato errore prima dell’apertura di un pad se non valido.
  • scePadResetOrientation
  • Corretto sceAudioOutOutputs
  • Corretta estrazione netmask per Windows.
  • Risolti vari problemi legati ai socket.
  • Implementato sys_getpeername
  • Implementato ORBIS_NET_CTL_INFO_HTTP_PROXY_CONFIG
  • Corretto get/setsockopt levels.
  • libkernel: aggiunte più funzioni di rete per compatibilità OpenOrbis.
  • libSceAppContent: usa gli ultimi 16 caratteri della cartella DLC per determinare l’etichetta di entitlement.
  • Reso libSceRtc completamente HLE.
  • Corretti artefatti verdi nei filmati/animazioni (ffmpeg).
  • Supporto per Select
  • libSceAppContent: determinazione etichette di entitlement dal file param.sfo dei contenuti aggiuntivi.
  • Corretto sceVoiceGetPortInfo
  • Corretto il trattamento delle date in formato RFC 3339.
  • libSceNpParty: stub per funzioni quando non si è in party.
  • Aggiunta libreria libSceNpProfileDialog stub.
  • Migliorati gli stub di libSceMove
  • Migliorati gli stub di libSceCamera
  • Implementato ORBIS_NET_SO_ERROR_EX in GetSocketOptions.
  • Migliorati gli stub di libSceHmd
  • Stub di libSceHmdSetupDialog
  • Stub di libSceVrTracker
  • semaphore: invertito ordine di priorità.
  • semaphore: corretto calcolo stato di attesa quando cancellato/eliminato.
  • Implementato send/recvmsg
  • libkernel: restituisce EINVAL se mmap è chiamato con length = 0
  • Correzioni SaveData.
  • Gestione flag evento null in cancel e clear
  • Supporto preliminare per AF_UNIX.
  • Pulizia delle librerie NP.
  • Implementato sceKernelIsInSandbox e aggiornato OrbisSysModule Enum.
  • equeue: alcune correzioni per sceKernelWaitEqueue
  • Implementati getargc e getargv
  • Implementazione semplice di sceGnmUnmapComputeQueue
  • kernel: miglioramenti alle condvars.
  • kernel: ulteriori pulizie del codice dei thread.

Ricompilatore Shader

  • Corretto V_ADDC_U32 per i casi limite di carry-out.
  • Riorganizzate le operazioni di data share e implementato GDS.
  • ir_passes: unificazione di readlane con pattern ff1.
  • Implementato ff1 con operazioni di sottogruppo.
  • Sostituito buffer pulling con attribute divisor per il passo di istanza.
  • Implementati barycentrici guest.
  • Corretto ff1_i32_b64 che non accettava vcc come argomento.
  • attribute: corretta la funzione di bary coord.
  • Evitata la pulizia di HTILE quando lo shader contiene calcoli di indirizzo.
  • Implementate istruzioni MUBUF per short/byte.
  • control_flow_graph: trattato branch condizionale vuoto come noop.
  • Corretto caricamento bary coord quando non supportato.
  • Uso del bit VM per il discard condizionale.
  • translate: corretta estrazione instance id negli shader locali.
  • Implementati V_ALIGNBYTE_B32 e V_ALIGNBIT_B32.
  • Rielaborato sharp tracking per maggiore robustezza.
  • Migliorata l’euristica per gli attributi passati tramite ring buffer.
  • ir: eseguita degamma nello shader quando il sampler imposta force_degamma.
  • Implementato V_CMP_GT_U6.
  • Migliorata l’accuratezza delle esportazioni shader (parte 1).
  • Non emettere Layer quando si emula tipo primitivo con tessellation.
  • vector_interpolation: risolte alcune asserzioni.
  • Supporto per attributi multipli usando lo stesso load nei vertex fetch shader.
  • Gestito S_LSHL_B32 in ParseCopyShader.
  • Inizializzati tutti i valori di ClipDistance e CullDistance.
  • Gestito ExecLo source in S_FF1_I32_B64.
  • Applicato tipo float per atomic buffer a 32-bit float.
  • constant_propagation_pass: gestite altre istruzioni bitwise.
  • Implementato V_ADD_F64 e caricamento di float a 64 bit da SGPR.
  • Gestiti offset e override dei formati nei fetch shader.
  • Allentata l’asserzione dual source blending per consentire fino a due target.
  • Permesso offset vettoriale e scalare negli argomenti di LoadBuffer/StoreBuffer.
  • Supporto per attributi PointSize e ViewportIndex.
  • image: non impostare l’uso di storage per formati con codifica a blocchi.

GPU

  • texture_cache: ripristinato depth resolve della nuova immagine al massimo delle risorse.
  • texture_cache: download asincrono delle immagini lineari modificate dalla GPU.
  • buffer_cache: reintrodotto batching degli upload e buffer temporaneo.
  • vk_rasterizer: impostata area di rendering allo scissor della finestra quando non ci sono framebuffer.
  • renderer_vulkan: gestite altre impostazioni GPU varie.
  • vk_instance: rimossa l’utilizzazione del depth clamp control.
  • liverpool_to_vk: non usare formati rimappati per i valori di clear.
  • vk_pipeline_cache: aggiunti fallback per R8Srgb e B5G6R5.
  • texture_cache: limitata altezza immagine buffer a quella di microtile.
  • vk_rasterizer: migliorata la pulizia dello stencil.
  • texture_cache: non modificare altezza mip per le copie nelle texture volumetriche.
  • video_core: implementato garbage collector (parte 1).
  • video_core: rielaborato tile manager.
  • texture_cache: accodare il download delle immagini solo se l’indirizzo è maggiore di zero.
  • video_core: corrette alcune comparazioni di struct.
  • vk_pipeline_cache: pulizia del refresh delle chiavi grafiche.
  • renderer_vulkan: ripristinato stato dinamico di color write.
  • vk_graphics_pipeline: priorità al depth clip quando il controllo clip/clamp separato non è supportato.
  • vk_pipeline_cache: aggiunte immagini di storage agli heap dei descrittori.
  • vk_scheduler: inizializzazione corretta delle strutture Vulkan in RenderState.
  • renderer_vulkan: ignorati i parametri di blending quando disabilitato.
  • vk_rasterizer: impostati i bit di flag immagine durante il resolve.
  • liverpool: scrittura query valide su PixelPipeStatDump.
  • amdgpu: riportato contatore di performance GPU in cicli GPU.
  • vk_rasterizer: assert su primitive restart solo durante indexed draw.
  • video_core: caricata memoria del buffer attorno a pagine non mappate.
  • video_core: corretti vari bug UE.
  • video_core: controllo del registro DB_SHADER_CONTROL prima di effettuare depth exports.
  • texture_cache: assicurato download in tempo delle immagini di readback.

Interfaccia QT

  • Estesa la rilevazione di Qt per supportare più drive.
  • Corretto il bug su gui emulatorLanguage.
  • Aggiunto slider del volume per regolare il livello audio globale dei giochi.
  • Disabilitato l’aggiornamento automatico su branch non ufficiali.
  • Aggiunto suono predefinito per i trofei.
  • Aggiunto toggle nelle impostazioni per i readback.
  • Applicazione di cheat/patch solo se AppVer corrisponde alla versione del gioco.
  • Supporto multi-controller: selezione controller attivo e possibilità di impostare controller predefinito.
  • Aggiunti hotkey personalizzabili per i controller.
  • Remapping GUI – altre piccole correzioni.
  • Corretto Play Time – non salvava ogni minuto.
  • Nome preset comune per config tastiera/pad tradotto nella lingua di destinazione.
  • Qt aggiornato alla versione 6.9.2 e rimosso workaround per Mac.
  • Qt: ordine imposto per il mapping stringhe kbm per evitare duplicati nelle combo.
  • Spostati i plugin Qt nella cartella qtplugins nelle build Windows.
  • Aggiunto toggle per abilitare/disabilitare il logging.
  • Qt: impedito salvataggio/annullamento dei dialoghi di remapping/hotkeys durante l’attesa input.
  • Aggiunta opzione per cambiare percorso DLC dalle impostazioni.
  • Uso di icone, musica e immagini di sfondo dagli update se disponibili.
  • Qt: aggiunte opzioni FSR nelle impostazioni GUI.
  • Aumentata la dimensione del box di testo per le descrizioni.
  • Funzione di log dei preset.
  • Qt: regolata dimensione TrophyViewer e tradotta la scheda ‘Log’.
  • Qt: aggiunta interfaccia GUI per impostazioni specifiche per gioco.
  • Qt: aggiunta scheda ‘Log’ come opzione per scheda predefinita all’apertura impostazioni.
  • Qt: aggiunte descrizioni per le nuove impostazioni sperimentali.
  • Qt: corretta notifica di incompatibilità per le patch.
  • Qt: raggruppati elementi specifici e non specifici per gioco nelle stesse schede.
  • Qt: aggiunta nota sul requisito Vulkan SDK nei tooltip di validazione.
  • Corretto il caricamento delle impostazioni di fullscreen.

Per discutere dello sviluppo di shadPS4, suggerire idee o chiedere aiuto, gli utenti possono unirsi al server Discord. Il team invita inoltre la community ad aggiornare la lista di compatibilità su GitHub: shadPS4 Game Compatibility List

Download: shadPS4 v0.11.0 (Linux qt) (Linux SDL)

Download: shadPS4 v0.11.0 (Win64 qt) (Win64 SDL)

Download: shadPS4 v0.11.0 (macos qt) (macos SDL)

Download: Source code shadPS4 v0.11.0

Fonte: shadps4.net