From f2e658bae96f3e31f52cce101508a66efb84b866 Mon Sep 17 00:00:00 2001
From: marat569 <marat569@gmail.com>
Date: Sat, 26 Oct 2024 16:08:00 -0400
Subject: [PATCH] [YS10] Clamp frostbite to AP1

- Fix NaNs on 0,0,0
---
 src/games/ys10/addon.cpp       | 16 ++++++++++++++++
 src/games/ys10/tonemapper.hlsl |  3 ++-
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/src/games/ys10/addon.cpp b/src/games/ys10/addon.cpp
index 2c806b41..ab578ada 100644
--- a/src/games/ys10/addon.cpp
+++ b/src/games/ys10/addon.cpp
@@ -176,6 +176,22 @@ BOOL APIENTRY DllMain(HMODULE h_module, DWORD fdw_reason, LPVOID lpv_reserved) {
       //       .new_format = reshade::api::format::r16g16b16a16_float,
       //   });
 
+      // R11G11B10
+      //   renodx::mods::swapchain::swap_chain_upgrade_targets.push_back({.old_format = reshade::api::format::r11g11b10_float,
+      //                                                                  .new_format = reshade::api::format::r16g16b16a16_float,
+      //                                                                  .ignore_size = true,
+      //                                                                  .view_upgrades = {
+      //                                                                      {{reshade::api::resource_usage::shader_resource,
+      //                                                                        reshade::api::format::r11g11b10_float},
+      //                                                                       reshade::api::format::r16g16b16a16_float},
+      //                                                                      {{reshade::api::resource_usage::unordered_access,
+      //                                                                        reshade::api::format::r11g11b10_float},
+      //                                                                       reshade::api::format::r16g16b16a16_float},
+      //                                                                      {{reshade::api::resource_usage::render_target,
+      //                                                                        reshade::api::format::r11g11b10_float},
+      //                                                                       reshade::api::format::r16g16b16a16_float},
+      //                                                                  }});
+
       break;
     case DLL_PROCESS_DETACH:
       reshade::unregister_addon(h_module);
diff --git a/src/games/ys10/tonemapper.hlsl b/src/games/ys10/tonemapper.hlsl
index 38355ab1..1bcbb42f 100644
--- a/src/games/ys10/tonemapper.hlsl
+++ b/src/games/ys10/tonemapper.hlsl
@@ -4,7 +4,6 @@
 #include "./DICE.hlsl"
 #include "./shared.h"
 
-
 float3 applyUserTonemap(float3 untonemapped) {
   float3 outputColor;
 
@@ -45,6 +44,8 @@ float3 applyUserTonemap(float3 untonemapped) {
   } else if (injectedData.toneMapType == 4.f) {  // Frostbite
     float frostbitePeak = injectedData.toneMapPeakNits / injectedData.toneMapGameNits;
     outputColor = renodx::tonemap::frostbite::BT709(outputColor, frostbitePeak);
+
+    outputColor = renodx::color::bt709::clamp::AP1(outputColor); // Clamp frostbite to AP1 to avoid invalid colors
   }
 
   if (injectedData.toneMapType != 0) {  // UserColorGrading, post-tonemap