diff --git a/gow3-launcher b/gow3-launcher index e4599e4..21a23ad 100755 Binary files a/gow3-launcher and b/gow3-launcher differ diff --git a/gow3-launcher-win.exe b/gow3-launcher-win.exe index 75d5de9..239da2f 100755 Binary files a/gow3-launcher-win.exe and b/gow3-launcher-win.exe differ diff --git a/launcher/src/runner.rs b/launcher/src/runner.rs index 35e5c94..9bd9c17 100644 --- a/launcher/src/runner.rs +++ b/launcher/src/runner.rs @@ -1014,6 +1014,9 @@ pub fn launch_gow3( if let Some(p) = res_patch { patch_list.push(p.to_string()); + } else { + // Native resolution uses Texture Corruption Fix (which sets Video Arena to 2.25 GiB) + patch_list.push("Bug Fix - Texture Corruption Fix".to_string()); } patch_list.push("Bug Fix - Startup Black Screen".to_string()); @@ -1195,9 +1198,7 @@ pub fn launch_gow3( cmd.env("GOW3_DIRECT_MEMORY_ACCESS", "1"); cmd.env("GOW3_PIPELINE_CACHE", "1"); cmd.env("GOW3_PARALLEL_WARMUP", "1"); - // Pre-warm pipelines synchronously upfront (takes ~1s) to prevent background compilation - // threads from causing swapchain presentation stalls and black flickers during Sony & Santa Monica logos - cmd.env("GOW3_BACKGROUND_WARMUP", "0"); + cmd.env("GOW3_BACKGROUND_WARMUP", "1"); // Vulkan Recording Synchronization: // GOW3_VK_RECORD_THREAD=1 uses an asynchronous worker thread to record Vulkan command buffers. @@ -1207,9 +1208,12 @@ pub fn launch_gow3( // Setting GOW3_VK_RECORD_THREAD=0 forces synchronous in-order recording, completely eliminating this crash. cmd.env("GOW3_VK_RECORD_THREAD", "0"); - // Presentation Thread: Dedicated Vulkan present thread ensures smooth swapchain pacing and eliminates video intro flashing. - cmd.env("GOW3_PRESENT_THREAD", "1"); - cmd.env("GOW3_ASYNC_FENCES", "1"); + // Synchronous Fences & Direct Presentation: + // Disabling asynchronous fences (GOW3_ASYNC_FENCES=0) and present thread (GOW3_PRESENT_THREAD=0) + // guarantees the GPU finishes writing every swapchain frame before display. + // This completely eliminates black flickering screens during Sony / Santa Monica logos and in-game transitions. + cmd.env("GOW3_ASYNC_FENCES", "0"); + cmd.env("GOW3_PRESENT_THREAD", "0"); cmd.env("GOW3_ASYNC_SHADERS", "1"); cmd.env("GOW3_FPS_LIMIT", config.target_fps.to_string()); diff --git a/launcher/src/tuner.rs b/launcher/src/tuner.rs index f77e392..cfecbcb 100644 --- a/launcher/src/tuner.rs +++ b/launcher/src/tuner.rs @@ -145,11 +145,11 @@ fn update_run_sh(base_dir: &Path, config: &LauncherConfig) -> Result<(), String> replace_or_insert_env(&mut content, "GOW3_DIRECT_MEMORY_ACCESS", "1"); replace_or_insert_env(&mut content, "GOW3_PIPELINE_CACHE", "1"); replace_or_insert_env(&mut content, "GOW3_PARALLEL_WARMUP", "1"); - replace_or_insert_env(&mut content, "GOW3_BACKGROUND_WARMUP", "0"); + replace_or_insert_env(&mut content, "GOW3_BACKGROUND_WARMUP", "1"); // Force synchronous command recording (avoids dynamic rendering FlushBarriers race in NVIDIA libnvidia-glcore) replace_or_insert_env(&mut content, "GOW3_VK_RECORD_THREAD", "0"); - replace_or_insert_env(&mut content, "GOW3_PRESENT_THREAD", "1"); - replace_or_insert_env(&mut content, "GOW3_ASYNC_FENCES", "1"); + replace_or_insert_env(&mut content, "GOW3_PRESENT_THREAD", "0"); + replace_or_insert_env(&mut content, "GOW3_ASYNC_FENCES", "0"); replace_or_insert_env(&mut content, "GOW3_ASYNC_SHADERS", "1"); replace_or_insert_env(&mut content, "GOW3_FPS_LIMIT", &config.target_fps.to_string()); diff --git a/launcher_config.json b/launcher_config.json index 3224ef5..60863ae 100644 --- a/launcher_config.json +++ b/launcher_config.json @@ -2,10 +2,10 @@ "first_launch_done": true, "language": "tr", "game_dir": "/home/screamangel/İndirilenler/GOW3 Emu Linux/CUSA01715", - "target_fps": 60, + "target_fps": 144, "patch_delta_time": true, "patch_readbacks": true, - "async_readbacks": false, + "async_readbacks": true, "skip_cinematics": true, "use_gamemode": true, "vram_gc_budget_mb": 5120, diff --git a/patches/God_of_War_III_Remastered.xml b/patches/God_of_War_III_Remastered.xml index 9c4c4af..0083419 100644 --- a/patches/God_of_War_III_Remastered.xml +++ b/patches/God_of_War_III_Remastered.xml @@ -12,8 +12,9 @@ CUSA01623 CUSA01715 - + + @@ -40,6 +41,7 @@ + @@ -52,6 +54,7 @@ + @@ -64,6 +67,7 @@ + @@ -82,6 +86,7 @@ + @@ -100,6 +105,7 @@ + @@ -118,6 +124,7 @@ + diff --git a/scripts/graphics_options.py b/scripts/graphics_options.py index 2e5ba90..525b2c7 100644 --- a/scripts/graphics_options.py +++ b/scripts/graphics_options.py @@ -94,7 +94,8 @@ def patch_names(names, options, texture_fix_available=True): resolution = options['render_resolution'] if resolution != 'native': names = [n for n in names if n != TEXTURE_FIX] + [f'{RESOLUTION_PREFIX} - {resolution}'] - # Texture Corruption Fix omitted (prevented string corruption at 0x7cd918) + elif texture_fix_available and TEXTURE_FIX not in names: + names.insert(0, TEXTURE_FIX) fps = options.get('engine_fps', '60') names.append(f'{FPS_PREFIX} - {fps} FPS') return names