From 26f81c811ac794535145decace52e9974e4aa80d Mon Sep 17 00:00:00 2001 From: Musa Haji Date: Thu, 11 Sep 2025 15:09:13 -0400 Subject: [PATCH 01/30] rdr2: initial commit - add 2 tonemap shaders, output shader, ui and hdr calibration shaders - add color grading sliders - add vanilla+ and vanilla+ (no display mapping) - add custom lut encoding - add unclamp lighting - add match sdr template --- src/games/rdr2/addon.cpp | 409 ++++++++++++++ src/games/rdr2/common.hlsli | 416 ++++++++++++++ .../rdr2/lut/tm_day_0x1D1EEAC6.ps_5_1.hlsl | 514 ++++++++++++++++++ .../rdr2/lut/tm_night_0xBF7C33C4.ps_5_1.hlsl | 512 +++++++++++++++++ .../output/main_output_0x307A8225.ps_5_1.hlsl | 150 +++++ src/games/rdr2/shared.h | 86 +++ .../calibration_image_0x832AC1BB.ps_5_1.hlsl | 85 +++ .../calibration_white_0xA1D92D89.ps_5_1.hlsl | 57 ++ .../rdr2/ui/ui_hud_0xCA8E18BF.ps_5_1.hlsl | 123 +++++ .../rdr2/ui/ui_text_0x2E866023.ps_5_1.hlsl | 119 ++++ 10 files changed, 2471 insertions(+) create mode 100644 src/games/rdr2/addon.cpp create mode 100644 src/games/rdr2/common.hlsli create mode 100644 src/games/rdr2/lut/tm_day_0x1D1EEAC6.ps_5_1.hlsl create mode 100644 src/games/rdr2/lut/tm_night_0xBF7C33C4.ps_5_1.hlsl create mode 100644 src/games/rdr2/output/main_output_0x307A8225.ps_5_1.hlsl create mode 100644 src/games/rdr2/shared.h create mode 100644 src/games/rdr2/ui/calibration_image_0x832AC1BB.ps_5_1.hlsl create mode 100644 src/games/rdr2/ui/calibration_white_0xA1D92D89.ps_5_1.hlsl create mode 100644 src/games/rdr2/ui/ui_hud_0xCA8E18BF.ps_5_1.hlsl create mode 100644 src/games/rdr2/ui/ui_text_0x2E866023.ps_5_1.hlsl diff --git a/src/games/rdr2/addon.cpp b/src/games/rdr2/addon.cpp new file mode 100644 index 0000000000..31b36e465b --- /dev/null +++ b/src/games/rdr2/addon.cpp @@ -0,0 +1,409 @@ +/* + * Copyright (C) 2024 Musa Haji + * SPDX-License-Identifier: MIT + */ + +#define ImTextureID ImU64 + +#define DEBUG_LEVEL_0 +#define DEBUG_SLIDERS_OFF + +#include +#include + +#include + +#include +#include "../../mods/shader.hpp" +#include "../../mods/swapchain.hpp" +#include "../../utils/date.hpp" +#include "../../utils/settings.hpp" +#include "./shared.h" + +namespace { + +renodx::mods::shader::CustomShaders custom_shaders = {__ALL_CUSTOM_SHADERS}; + +ShaderInjectData shader_injection; + +const std::unordered_map MATCH_SDR_VALUES = { + {"GammaCorrection", 1.f}, + {"ToneMapScaling", 1.f}, + {"UnclampLighting", 0.f}, + {"UseSRGBLUTEncoding", 0.f}, +}; + +renodx::utils::settings::Settings settings = { + new renodx::utils::settings::Setting{ + .key = "ToneMapType", + .binding = &shader_injection.tone_map_type, + .value_type = renodx::utils::settings::SettingValueType::INTEGER, + .default_value = 2.f, + .label = "Tone Mapper", + .section = "Tone Mapping", + .tooltip = "Sets the tone mapper type", + .labels = {"Vanilla", "Vanilla+ (No Display Mapping)", "Vanilla+"}, + }, + new renodx::utils::settings::Setting{ + .key = "ToneMapPeakNits", + .binding = &shader_injection.peak_white_nits, + .default_value = 1000.f, + .label = "Peak Brightness", + .section = "Tone Mapping", + .tooltip = "Sets the value of peak white in nits", + .min = 48.f, + .max = 4000.f, + .is_enabled = []() { return shader_injection.tone_map_type == 2.f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ToneMapGameNits", + .binding = &shader_injection.diffuse_white_nits, + .default_value = 203.f, + .label = "Game Brightness", + .section = "Tone Mapping", + .tooltip = "Sets the value of 100% white in nits", + .min = 48.f, + .max = 500.f, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ToneMapUINits", + .binding = &shader_injection.graphics_white_nits, + .default_value = 203.f, + .label = "UI Brightness", + .section = "Tone Mapping", + .tooltip = "Sets the brightness of UI and HUD elements in nits", + .min = 48.f, + .max = 500.f, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, + }, + new renodx::utils::settings::Setting{ + .key = "GammaCorrection", + .binding = &shader_injection.gamma_correction, + .value_type = renodx::utils::settings::SettingValueType::INTEGER, + .default_value = 2.f, + .label = "SDR EOTF Emulation", + .section = "Tone Mapping", + .tooltip = "Emulates a 2.2 EOTF", + .labels = {"Off", "2.2 (Per Channel)", "2.2 (By Luminance with Per Channel Chrominance)"}, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ToneMapScaling", + .binding = &shader_injection.tone_map_per_channel, + .value_type = renodx::utils::settings::SettingValueType::INTEGER, + .default_value = 0.f, + .label = "Scaling", + .section = "Tone Mapping", + .tooltip = "Luminance scales colors consistently while per-channel blows out and hue shifts", + .labels = {"Luminance & Per Channel Blend", "Per Channel"}, + .is_enabled = []() { return shader_injection.tone_map_type == 2.f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ToneMapHueCorrection", + .binding = &shader_injection.tone_map_hue_correction, + .default_value = 0.f, + .label = "Hue Correction", + .section = "Tone Mapping", + .tooltip = "Hue retention strength.", + .min = 0.f, + .max = 100.f, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, + .parse = [](float value) { return value * 0.01f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ToneMapBlowoutRestoration", + .binding = &shader_injection.tone_map_blowout_restoration, + .default_value = 90.f, + .label = "Blowout Restoration", + .section = "Tone Mapping", + .tooltip = "Restores color blowout from per-channel grading.", + .min = 0.f, + .max = 100.f, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f && shader_injection.tone_map_per_channel == 0.f; }, + .parse = [](float value) { return value * 0.01f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ToneMapWhiteClip", + .binding = &shader_injection.tone_map_white_clip, + .default_value = 100.f, + .label = "White Clip", + .section = "Tone Mapping", + .min = 0.f, + .max = 100.f, + .is_enabled = []() { return shader_injection.tone_map_type == 2.f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ColorGradeExposure", + .binding = &shader_injection.tone_map_exposure, + .default_value = 1.f, + .label = "Exposure", + .section = "Color Grading", + .max = 2.f, + .format = "%.2f", + .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ColorGradeHighlights", + .binding = &shader_injection.tone_map_highlights, + .default_value = 50.f, + .label = "Highlights", + .section = "Color Grading", + .max = 100.f, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, + .parse = [](float value) { return value * 0.02f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ColorGradeShadows", + .binding = &shader_injection.tone_map_shadows, + .default_value = 50.f, + .label = "Shadows", + .section = "Color Grading", + .max = 100.f, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, + .parse = [](float value) { return value * 0.02f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ColorGradeContrast", + .binding = &shader_injection.tone_map_contrast, + .default_value = 50.f, + .label = "Contrast", + .section = "Color Grading", + .max = 100.f, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, + .parse = [](float value) { return value * 0.02f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ColorGradeSaturation", + .binding = &shader_injection.tone_map_saturation, + .default_value = 50.f, + .label = "Saturation", + .section = "Color Grading", + .max = 100.f, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, + .parse = [](float value) { return value * 0.02f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ColorGradeHighlightSaturation", + .binding = &shader_injection.tone_map_highlight_saturation, + .default_value = 50.f, + .label = "Highlight Saturation", + .section = "Color Grading", + .tooltip = "Adds or removes highlight color.", + .max = 100.f, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, + .parse = [](float value) { return value * 0.02f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ColorGradeBlowout", + .binding = &shader_injection.tone_map_blowout, + .default_value = 0.f, + .label = "Blowout", + .section = "Color Grading", + .tooltip = "Controls highlight desaturation due to overexposure.", + .max = 100.f, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, + .parse = [](float value) { return value * 0.01f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ColorGradeFlare", + .binding = &shader_injection.tone_map_flare, + .default_value = 0.f, + .label = "Flare", + .section = "Color Grading", + .tooltip = "Flare/Glare Compensation", + .max = 100.f, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, + .parse = [](float value) { return value * 0.02f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ColorGradeFlare2", + .binding = &shader_injection.tone_map_flare2, + .default_value = 0.f, + .label = "Flare 2", + .section = "Color Grading", + .tooltip = "Flare/Glare Compensation 2, operates by luminance with per channel chrominance, adds saturation in shadows", + .max = 100.f, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, + .parse = [](float value) { return value * 0.02f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ColorGradeLUTStrength", + .binding = &shader_injection.color_grade_lut_strength, + .default_value = 100.f, + .label = "LUT Strength", + .section = "Color Grading", + .max = 100.f, + .is_enabled = []() { return shader_injection.tone_map_type != 0; }, + .parse = [](float value) { return value * 0.01f; }, + }, + new renodx::utils::settings::Setting{ + .key = "UnclampLighting", + .binding = &shader_injection.unclamp_highlights, + .value_type = renodx::utils::settings::SettingValueType::BOOLEAN, + .default_value = 1.f, + .label = "Unclamp Lighting", + .section = "Advanced", + .tooltip = "Removes clamp on brightness", + }, + new renodx::utils::settings::Setting{ + .key = "UseSRGBLUTEncoding", + .binding = &shader_injection.use_srgb_lut_encoding, + .value_type = renodx::utils::settings::SettingValueType::BOOLEAN, + .default_value = 1.f, + .label = "Use sRGB LUT Encoding", + .section = "Advanced", + .tooltip = "Replaces the game's custom sRGB-like LUT encoding with standard sRGB", + }, + new renodx::utils::settings::Setting{ + .value_type = renodx::utils::settings::SettingValueType::BUTTON, + .label = "Reset All", + .section = "Options", + .group = "button-line-1", + .on_change = []() { + for (auto* setting : settings) { + if (setting->key.empty()) continue; + if (!setting->can_reset) continue; + renodx::utils::settings::UpdateSetting(setting->key, setting->default_value); + } + }, + }, + new renodx::utils::settings::Setting{ + .value_type = renodx::utils::settings::SettingValueType::BUTTON, + .label = "Match SDR", + .section = "Options", + .group = "button-line-1", + .on_change = []() { + for (auto* setting : settings) { + if (setting->key.empty()) continue; + if (!setting->can_reset) continue; + + if (MATCH_SDR_VALUES.contains(setting->key)) { + renodx::utils::settings::UpdateSetting(setting->key, MATCH_SDR_VALUES.at(setting->key)); + } else { + renodx::utils::settings::UpdateSetting(setting->key, setting->default_value); + } + } + }, + }, + new renodx::utils::settings::Setting{ + .value_type = renodx::utils::settings::SettingValueType::BUTTON, + .label = "Discord", + .section = "Links", + .group = "button-line-2", + .tint = 0x5865F2, + .on_change = []() { + renodx::utils::platform::LaunchURL("https://discord.gg/", "5WZXDpmbpP"); + }, + }, + new renodx::utils::settings::Setting{ + .value_type = renodx::utils::settings::SettingValueType::BUTTON, + .label = "More Mods", + .section = "Links", + .group = "button-line-2", + .tint = 0x2B3137, + .on_change = []() { + renodx::utils::platform::LaunchURL("https://github.com/clshortfuse/renodx/wiki/Mods"); + }, + }, + new renodx::utils::settings::Setting{ + .value_type = renodx::utils::settings::SettingValueType::BUTTON, + .label = "Github", + .section = "Links", + .group = "button-line-2", + .tint = 0x2B3137, + .on_change = []() { + renodx::utils::platform::LaunchURL("https://github.com/clshortfuse/renodx"); + }, + }, + new renodx::utils::settings::Setting{ + .value_type = renodx::utils::settings::SettingValueType::BUTTON, + .label = "Musa's Ko-Fi", + .section = "Links", + .group = "button-line-3", + .tint = 0xFF5A16, + .on_change = []() { renodx::utils::platform::LaunchURL("https://ko-fi.com/musaqh"); }, + }, + new renodx::utils::settings::Setting{ + .value_type = renodx::utils::settings::SettingValueType::TEXT, + .label = std::string("Build: ") + renodx::utils::date::ISO_DATE_TIME, + .section = "About", + }, +}; + +void OnPresetOff() { + renodx::utils::settings::UpdateSettings({ + {"ToneMapType", 0.f}, + {"ToneMapPeakNits", 203.f}, + {"ToneMapGameNits", 203.f}, + {"ToneMapUINits", 203.f}, + {"ToneMapScaling", 1.f}, + {"ToneMapHueCorrection", 0.f}, + {"ToneMapBlowoutRestoration", 0.f}, + {"ToneMapWhiteClip", 100.f}, + {"ColorGradeExposure", 1.f}, + {"ColorGradeHighlights", 50.f}, + {"ColorGradeShadows", 50.f}, + {"ColorGradeContrast", 50.f}, + {"ColorGradeSaturation", 50.f}, + {"ColorGradeHighlightSaturation", 50.f}, + {"ColorGradeBlowout", 0.f}, + {"ColorGradeFlare", 0.f}, + {"ColorGradeFlare2", 0.f}, + {"ColorGradeLUTStrength", 100.f}, + {"UnclampLighting", 0.f}, + {"UseSRGBLUTEncoding", 0.f}, + }); +} + +void OnInitSwapchain(reshade::api::swapchain* swapchain, bool resize) { + auto peak = renodx::utils::swapchain::GetPeakNits(swapchain); + if (peak.has_value()) { + settings[1]->default_value = peak.value(); + } else { + settings[1]->default_value = 1000.f; + } +} + +} // namespace + +extern "C" __declspec(dllexport) constexpr const char* NAME = "RenoDX"; +extern "C" __declspec(dllexport) constexpr const char* DESCRIPTION = "RenoDX for Red Dead Redemption 2"; + +BOOL APIENTRY DllMain(HMODULE h_module, DWORD fdw_reason, LPVOID lpv_reserved) { + switch (fdw_reason) { + case DLL_PROCESS_ATTACH: + if (!reshade::register_addon(h_module)) return FALSE; + + renodx::mods::shader::force_pipeline_cloning = true; + renodx::mods::shader::expected_constant_buffer_index = 13; + renodx::mods::shader::expected_constant_buffer_space = 50; + + // renodx::mods::swapchain::use_resource_cloning = true; + // renodx::mods::swapchain::swap_chain_proxy_vertex_shader = __swap_chain_proxy_vertex_shader; + // renodx::mods::swapchain::swap_chain_proxy_pixel_shader = __swap_chain_proxy_pixel_shader; + + // renodx::mods::swapchain::swap_chain_upgrade_targets.push_back( + // { + // .old_format = reshade::api::format::r11g11b10_float, + // .new_format = reshade::api::format::r16g16b16a16_float, + // .use_resource_view_cloning = true, + // .dimensions = {.width = renodx::mods::swapchain::SwapChainUpgradeTarget::BACK_BUFFER, .height = renodx::mods::swapchain::SwapChainUpgradeTarget::BACK_BUFFER}, + // .usage_include = reshade::api::resource_usage::render_target, + // }); + + reshade::register_event(OnInitSwapchain); // peak nits + + break; + case DLL_PROCESS_DETACH: + reshade::unregister_event(OnInitSwapchain); // peak nits + reshade::unregister_addon(h_module); + break; + } + + renodx::utils::settings::Use(fdw_reason, &settings, &OnPresetOff); + renodx::mods::shader::Use(fdw_reason, custom_shaders, &shader_injection); + // renodx::mods::swapchain::Use(fdw_reason); + + return TRUE; +} \ No newline at end of file diff --git a/src/games/rdr2/common.hlsli b/src/games/rdr2/common.hlsli new file mode 100644 index 0000000000..546d625cb5 --- /dev/null +++ b/src/games/rdr2/common.hlsli @@ -0,0 +1,416 @@ +#include "./shared.h" + +float3 ApplyExposureContrastFlareHighlightsShadowsByLuminance(float3 untonemapped, float y, renodx::color::grade::Config config, float mid_gray = 0.18f) { + if (config.exposure == 1.f && config.shadows == 1.f && config.highlights == 1.f && config.contrast == 1.f && config.flare == 0.f) { + return untonemapped; + } + float3 color = untonemapped; + + color *= config.exposure; + + const float y_normalized = y / mid_gray; + const float highlight_mask = 1.f / mid_gray; + const float shadow_mask = mid_gray; + + // contrast & flare + float flare = renodx::math::DivideSafe(y_normalized + config.flare, y_normalized, 1.f); + float exponent = config.contrast * flare; + const float y_contrasted = pow(y_normalized, exponent); + + // highlights + float y_highlighted = pow(y_contrasted, config.highlights); + y_highlighted = lerp(y_contrasted, y_highlighted, saturate(y_contrasted / highlight_mask)); + + // shadows + float y_shadowed = pow(y_highlighted, -1.f * (config.shadows - 2.f)); + y_shadowed = lerp(y_shadowed, y_highlighted, saturate(y_highlighted / shadow_mask)); + + const float y_final = y_shadowed * mid_gray; + + color *= (y > 0 ? (y_final / y) : 0); + + return color; +} + +float3 ApplyFlareByChrominance(float3 untonemapped, float flare = 0.f, float mid_gray = 0.18f) { + if (flare == 0.f) { + return untonemapped; + } + float3 color = untonemapped; + + // flare - lum + float y = renodx::color::y::from::BT709(untonemapped); + const float y_normalized = y / mid_gray; + float flare_lum = renodx::math::DivideSafe(y_normalized + flare, y_normalized, 1.f); + const float y_flared = pow(y_normalized, flare_lum); + const float y_final = y_flared * mid_gray; + float3 color_lum = renodx::color::correct::Luminance(color, y, y_final); + + // flare - channel + float3 ch_normalized = untonemapped / mid_gray; + float3 flare_ch = renodx::math::DivideSafe(ch_normalized + flare, ch_normalized, 1.f); + const float3 ch_flared = pow(ch_normalized, flare_ch); + float3 color_ch = ch_flared * mid_gray; + + color = renodx::color::correct::Chrominance(color_lum, color_ch); + + return color; +} + +float3 ApplySaturationBlowoutHueCorrectionHighlightSaturation(float3 tonemapped, float3 untonemapped, float y, renodx::color::grade::Config config) { + float3 color = tonemapped; + if (config.saturation != 1.f || config.dechroma != 0.f || config.hue_correction_strength != 0.f || config.blowout != 0.f) { + float3 perceptual_new = renodx::color::oklab::from::BT709(color); + + if (config.hue_correction_strength != 0.f) { + float3 perceptual_old = renodx::color::oklab::from::BT709(untonemapped); + + // Save chrominance to apply black + float chrominance_pre_adjust = distance(perceptual_new.yz, 0); + + perceptual_new.yz = lerp(perceptual_new.yz, perceptual_old.yz, config.hue_correction_strength); + + float chrominance_post_adjust = distance(perceptual_new.yz, 0); + + // Apply back previous chrominance + perceptual_new.yz *= renodx::math::DivideSafe(chrominance_pre_adjust, chrominance_post_adjust, 1.f); + } + + if (config.dechroma != 0.f) { + perceptual_new.yz *= lerp(1.f, 0.f, saturate(pow(y / (10000.f / 100.f), (1.f - config.dechroma)))); + } + + if (config.blowout != 0.f) { + float percent_max = saturate(y * 100.f / 10000.f); + // positive = 1 to 0, negative = 1 to 2 + float blowout_strength = 100.f; + float blowout_change = pow(1.f - percent_max, blowout_strength * abs(config.blowout)); + if (config.blowout < 0) { + blowout_change = (2.f - blowout_change); + } + + perceptual_new.yz *= blowout_change; + } + + perceptual_new.yz *= config.saturation; + + color = renodx::color::bt709::from::OkLab(perceptual_new); + + color = renodx::color::bt709::clamp::AP1(color); + } + return color; +} + +float3 HueAndChrominanceOKLab( + float3 incorrect_color, + float3 chrominance_reference_color, + float3 hue_reference_color, + float hue_correct_strength = 1.f, + float clamp_chrominance_loss = 0.f) { + if (hue_correct_strength == 0.f) + return renodx::color::correct::ChrominanceOKLab(incorrect_color, chrominance_reference_color, 1.f, clamp_chrominance_loss); + + float3 incorrect_lab = renodx::color::oklab::from::BT709(incorrect_color); + float3 hue_lab = renodx::color::oklab::from::BT709(hue_reference_color); + float3 chrominance_lab = renodx::color::oklab::from::BT709(chrominance_reference_color); + + float2 incorrect_ab = incorrect_lab.yz; + float2 hue_ab = hue_lab.yz; + + // Always use chrominance magnitude from chrominance reference + float target_chrominance = length(chrominance_lab.yz); + + // Compute blended hue direction + float2 blended_ab_dir = normalize(lerp(normalize(incorrect_ab), normalize(hue_ab), hue_correct_strength)); + + // Compute current chrominance (magnitude of the a–b vector) + float current_chrominance = length(incorrect_ab); + + // Compute chrominance ratio and scale, with clamping + float chrominance_ratio = renodx::math::DivideSafe(target_chrominance, current_chrominance, 1.f); + float scale = chrominance_ratio; + float t = 1.0f - step(1.0f, scale); // t = 1 when scale < 1, 0 when scale >= 1 + scale = lerp(scale, 1.0f, t * clamp_chrominance_loss); + + // Apply chrominance magnitude from chrominance_reference_color, with clamping + float2 final_ab = blended_ab_dir * current_chrominance * scale; + + incorrect_lab.yz = final_ab; + + float3 result = renodx::color::bt709::from::OkLab(incorrect_lab); + return renodx::color::bt709::clamp::AP1(result); +} + +/// Applies Exponential Roll-Off tonemapping using the maximum channel. +/// Used to fit the color into a 0–output_max range for SDR LUT compatibility. +float3 ToneMapMaxCLL(float3 color, float rolloff_start = 0.375f, float output_max = 1.f) { + float peak = max(color.r, max(color.g, color.b)); + peak = min(peak, 100.f); + float log_peak = log2(peak); + + // Apply exponential shoulder in log space + float log_mapped = renodx::tonemap::ExponentialRollOff(log_peak, log2(rolloff_start), log2(output_max)); + float scale = exp2(log_mapped - log_peak); // How much to compress all channels + + return color * scale; +} + +float ReinhardPiecewiseExtended(float x, float white_max, float x_max = 1.f, float shoulder = 0.18f) { + const float x_min = 0.f; + float exposure = renodx::tonemap::ComputeReinhardExtendableScale(white_max, x_max, x_min, shoulder, shoulder); + float extended = renodx::tonemap::ReinhardExtended(x * exposure, white_max * exposure, x_max); + extended = min(extended, x_max); + + return lerp(x, extended, step(shoulder, x)); +} + +float3 ReinhardPiecewiseExtended(float3 x, float white_max, float x_max = 1.f, float shoulder = 0.18f) { + const float x_min = 0.f; + float exposure = renodx::tonemap::ComputeReinhardExtendableScale(white_max, x_max, x_min, shoulder, shoulder); + float3 extended = renodx::tonemap::ReinhardExtended(x * exposure, white_max * exposure, x_max); + extended = min(extended, x_max); + + return lerp(x, extended, step(shoulder, x)); +} + +float3 InverseReinhardScalablePiecewise(float3 color, float channel_max = 1.f, float shoulder = 0.18f) { + float channel_min = 0.f; + float exposure = (channel_max * (channel_min * shoulder + channel_min - shoulder)) + / (shoulder * (shoulder - channel_max)); + + float3 numerator = -channel_max * (channel_min * color + channel_min - color); + float3 denominator = (exposure * (channel_max - color)); + float3 inversed = renodx::math::DivideSafe(numerator, denominator, renodx::math::FLT16_MAX); + + return lerp(color, inversed, step(shoulder, color)); +} + +// AdvancedAutoHDR pass to generate some HDR brightess out of an SDR signal. +// This is hue conserving and only really affects highlights. +// "sdr_color" is meant to be in "SDR range", as in, a value of 1 matching SDR white (something between 80, 100, 203, 300 nits, or whatever else) +// https://github.com/Filoppi/PumboAutoHDR +float3 PumboAutoHDR(float3 sdr_color, float peak_ratio, float shoulder_pow = 7.5f) { + const float SDRRatio = max(renodx::color::y::from::BT709(sdr_color), 0.f); + + const float auto_HDR_max_white = max(peak_ratio, 1.f); + const float auto_HDR_shoulder_ratio = 1.f - max(1.f - SDRRatio, 0.f); + const float auto_HDR_extra_ratio = pow(max(auto_HDR_shoulder_ratio, 0.f), shoulder_pow) * (auto_HDR_max_white - 1.f); + const float auto_HDR_total_ratio = SDRRatio + auto_HDR_extra_ratio; + return sdr_color * renodx::math::SafeDivision(auto_HDR_total_ratio, SDRRatio, 1); // Fallback on a value of 1 in case of division by 0 +} + +float3 PumboAutoHDR_PerChannel(float3 sdr_color, float peak_ratio, float shoulder_pow = 7.5f) { + float3 SDRRatio = max(sdr_color, 0.f); + + float auto_HDR_max_white = max(peak_ratio, 1.f); + float3 auto_HDR_shoulder_ratio = 1.f - max(1.f - SDRRatio, 0.f); + float3 auto_HDR_extra_ratio = pow(max(auto_HDR_shoulder_ratio, 0.f), shoulder_pow) * (auto_HDR_max_white - 1.f); + float3 auto_HDR_total_ratio = SDRRatio + auto_HDR_extra_ratio; + return sdr_color * renodx::math::SafeDivision(auto_HDR_total_ratio, SDRRatio, 1); +} + +float3 ApplyInverseToneMap(float3 color, float peak_ratio, float shoulder_pow = 7.5f) { + // float3 lum = PumboAutoHDR(color, peak_ratio, shoulder_pow); + // float3 ch = PumboAutoHDR_PerChannel(color, peak_ratio, shoulder_pow); + + const float max_peak_ratio = 3.25f; + + float3 result = PumboAutoHDR_PerChannel(color, peak_ratio, shoulder_pow); + if (peak_ratio > max_peak_ratio) { + float3 chrominance_hue_reference = PumboAutoHDR_PerChannel(color, max_peak_ratio, shoulder_pow); + // limit the max chrominance boost and hue change + result = renodx::lut::RecolorUnclamped(chrominance_hue_reference, result); + } + + return result; +} + +void ApplyToneMap(inout bool hdr_enabled, + float3 untonemapped_sdr, + float3 untonemapped_hdr, + inout float output_r, inout float output_g, inout float output_b, + float CB1_m2_x, + float _515, float _516, float _517, float _519, float _520, float _521, float _522, + float _808) { + float _875, _876, _877; + if (RENODX_TONE_MAP_TYPE == 0.f) { + _875 = hdr_enabled ? (CB1_m2_x * (((mad(untonemapped_hdr.r, mad(_515, untonemapped_hdr.r, _519), _520) / mad(untonemapped_hdr.r, mad(_515, untonemapped_hdr.r, _516), _521)) - _522) * _808)) : clamp(_517 * ((mad(untonemapped_sdr.r, mad(_515, untonemapped_sdr.r, _519), _520) / mad(untonemapped_sdr.r, mad(_515, untonemapped_sdr.r, _516), _521)) - _522), 0.0f, 1.0f); + _876 = hdr_enabled ? (CB1_m2_x * (_808 * ((mad(mad(_515, untonemapped_hdr.g, _519), untonemapped_hdr.g, _520) / mad(mad(_515, untonemapped_hdr.g, _516), untonemapped_hdr.g, _521)) - _522))) : clamp(_517 * ((mad(mad(_515, untonemapped_sdr.g, _519), untonemapped_sdr.g, _520) / mad(mad(_515, untonemapped_sdr.g, _516), untonemapped_sdr.g, _521)) - _522), 0.0f, 1.0f); + _877 = hdr_enabled ? (CB1_m2_x * (_808 * ((mad(mad(_515, untonemapped_hdr.b, _519), untonemapped_hdr.b, _520) / mad(mad(_515, untonemapped_hdr.b, _516), untonemapped_hdr.b, _521)) - _522))) : clamp(_517 * ((mad(mad(_515, untonemapped_sdr.b, _519), untonemapped_sdr.b, _520) / mad(mad(_515, untonemapped_sdr.b, _516), untonemapped_sdr.b, _521)) - _522), 0.0f, 1.0f); + } else { + float3 hdr_tonemap = untonemapped_sdr; + + hdr_enabled = false; // use SDR tonemapper + _875 = hdr_enabled ? (CB1_m2_x * (((mad(untonemapped_hdr.r, mad(_515, untonemapped_hdr.r, _519), _520) / mad(untonemapped_hdr.r, mad(_515, untonemapped_hdr.r, _516), _521)) - _522) * _808)) : _517 * ((mad(untonemapped_sdr.r, mad(_515, untonemapped_sdr.r, _519), _520) / mad(untonemapped_sdr.r, mad(_515, untonemapped_sdr.r, _516), _521)) - _522); + _876 = hdr_enabled ? (CB1_m2_x * (_808 * ((mad(mad(_515, untonemapped_hdr.g, _519), untonemapped_hdr.g, _520) / mad(mad(_515, untonemapped_hdr.g, _516), untonemapped_hdr.g, _521)) - _522))) : _517 * ((mad(mad(_515, untonemapped_sdr.g, _519), untonemapped_sdr.g, _520) / mad(mad(_515, untonemapped_sdr.g, _516), untonemapped_sdr.g, _521)) - _522); + _877 = hdr_enabled ? (CB1_m2_x * (_808 * ((mad(mad(_515, untonemapped_hdr.b, _519), untonemapped_hdr.b, _520) / mad(mad(_515, untonemapped_hdr.b, _516), untonemapped_hdr.b, _521)) - _522))) : _517 * ((mad(mad(_515, untonemapped_sdr.b, _519), untonemapped_sdr.b, _520) / mad(mad(_515, untonemapped_sdr.b, _516), untonemapped_sdr.b, _521)) - _522); + + float3 ch_tonemap = float3(_875, _876, _877); + + float mid_gray = hdr_enabled ? (CB1_m2_x * (_808 * ((mad(mad(_515, 0.18, _519), 0.18, _520) / mad(mad(_515, 0.18, _516), 0.18, _521)) - _522))) : _517 * ((mad(mad(_515, 0.18, _519), 0.18, _520) / mad(mad(_515, 0.18, _516), 0.18, _521)) - _522); + float3 untonemapped_mid_gray_shifted = untonemapped_sdr * mid_gray / 0.18f; + + if (RENODX_TONE_MAP_PER_CHANNEL) { + hdr_tonemap = lerp(ch_tonemap, untonemapped_mid_gray_shifted, saturate(renodx::color::y::from::BT709(ch_tonemap))); + hdr_tonemap = HueAndChrominanceOKLab(hdr_tonemap, ch_tonemap, untonemapped_mid_gray_shifted, RENODX_TONE_MAP_HUE_CORRECTION, RENODX_TONE_MAP_BLOWOUT_RESTORATION); + } else { + float y_in = renodx::color::y::from::BT709(untonemapped_sdr); + float y_out = hdr_enabled ? (CB1_m2_x * (_808 * ((mad(mad(_515, y_in, _519), y_in, _520) / mad(mad(_515, y_in, _516), y_in, _521)) - _522))) : _517 * ((mad(mad(_515, y_in, _519), y_in, _520) / mad(mad(_515, y_in, _516), y_in, _521)) - _522); + float3 lum_tonemap = renodx::color::correct::Luminance(untonemapped_sdr, y_in, y_out, 1.f); + + // 0 - (midgray * 1.5): lum tonemap + // (midgray * 1.5) - 1: ch tonemap + // >1: untonemapped mid gray shifted + lum_tonemap = lerp(lum_tonemap, ch_tonemap, saturate(renodx::color::y::from::BT709(lum_tonemap) / (mid_gray * 1.5f))); + hdr_tonemap = lerp(lum_tonemap, untonemapped_mid_gray_shifted, saturate(renodx::color::y::from::BT709(lum_tonemap))); + hdr_tonemap = HueAndChrominanceOKLab(hdr_tonemap, ch_tonemap, untonemapped_mid_gray_shifted, RENODX_TONE_MAP_HUE_CORRECTION, RENODX_TONE_MAP_BLOWOUT_RESTORATION); + } + + _875 = hdr_tonemap.r, _876 = hdr_tonemap.g, _877 = hdr_tonemap.b; + } + output_r = _875, output_g = _876, output_b = _877; + return; +} + +#define DECODE_LUT_GENERATOR(T) \ + T DecodeLUT(T encoded, float linear_scale, float exp_scale, float exp_mul, float exp_sub) { \ + T threshold = linear_scale * 0.0031308f; \ + T lin = encoded / linear_scale; \ + T exp = exp2(log2((encoded + exp_sub) / exp_mul) / exp_scale); \ + /* 0 if encoded < threshold, 1 if encoded >= threshold */ \ + return lerp(lin, exp, step(threshold, encoded)); \ + } +DECODE_LUT_GENERATOR(float) +DECODE_LUT_GENERATOR(float3) + +#define ENCODE_LUT_GENERATOR(T) \ + T EncodeLUT(T color_linear, float linear_scale, float exp_scale, float exp_mul, float exp_sub) { \ + T lin = color_linear * linear_scale; \ + T exp = mad(exp_mul, pow(color_linear, exp_scale), -exp_sub); \ + /* lin if < threshold, exp if >= threshold */ \ + return lerp(lin, exp, step(0.0031308f, color_linear)); \ + } +ENCODE_LUT_GENERATOR(float) +ENCODE_LUT_GENERATOR(float3) + +void EncodeForLUT(inout bool skip_encoding, float linear_r, float linear_g, float linear_b, + float linear_scale, float exp_scale, float exp_mul, float exp_sub, + inout float encoded_r, inout float encoded_g, inout float encoded_b) { + if (RENODX_TONE_MAP_TYPE != 0.f) skip_encoding = false; // use SDR code path + + float3 encoded; + float3 color_linear = float3(linear_r, linear_g, linear_b); + if (USE_SRGB_LUT_ENCODING) { + encoded = skip_encoding ? color_linear : renodx::color::srgb::EncodeSafe(color_linear); + } else { + encoded = skip_encoding ? color_linear : EncodeLUT(color_linear, linear_scale, exp_scale, exp_mul, exp_sub); + } + encoded_r = encoded.r, encoded_g = encoded.g, encoded_b = encoded.b; + return; +} + +void PrepareForLUT(inout float r, inout float g, inout float b, inout float3 color_sdr, inout float3 color_hdr, inout float max_channel) { + color_hdr = float3(r, g, b); + if (RENODX_TONE_MAP_TYPE != 0.f) { + max_channel = 1.f; + float3 untonemapped_linear = renodx::color::srgb::DecodeSafe(color_hdr); + float y_in = renodx::color::y::from::BT709(untonemapped_linear); + float y_out = ReinhardPiecewiseExtended(y_in, 100.f, 1.f, 0.3f); + + float3 tonemapped = renodx::color::correct::Luminance(untonemapped_linear, y_in, y_out); + // float3 tonemapped = renodx::color::correct::Hue(ToneMapMaxCLL(untonemapped_linear, 0.5f, 1.f), untonemapped_linear); + tonemapped = renodx::color::srgb::Encode(saturate(tonemapped)); + + color_sdr = tonemapped; + r = tonemapped.r, g = tonemapped.g, b = tonemapped.b; + } + return; +} + +void UpgradeLUTOutput(float3 color_hdr, float3 color_sdr, inout float color_processed_r, inout float color_processed_g, inout float color_processed_b) { + if (RENODX_TONE_MAP_TYPE != 0.f) { + float3 color_hdr_linear = renodx::color::srgb::DecodeSafe(color_hdr); + float3 color_sdr_linear = renodx::color::srgb::DecodeSafe(color_sdr); + float3 color_processed_linear = renodx::color::srgb::DecodeSafe(float3(color_processed_r, color_processed_g, color_processed_b)); + // float3 color_processed_linear = (float3(color_processed_r, color_processed_g, color_processed_b)); + float3 upgraded = renodx::color::srgb::EncodeSafe(renodx::tonemap::UpgradeToneMap(color_hdr_linear, color_sdr_linear, color_processed_linear, RENODX_COLOR_GRADE_STRENGTH)); + color_processed_r = upgraded.r, color_processed_g = upgraded.g, color_processed_b = upgraded.b; + // color_processed_r = color_processed_linear.r, color_processed_g = color_processed_linear.g, color_processed_b = color_processed_linear.b; + } + return; +} + +float3 ApplyDisplayMap(float3 undisplaymapped) { + float peak_white = RENODX_PEAK_WHITE_NITS / RENODX_DIFFUSE_WHITE_NITS; + if (RENODX_GAMMA_CORRECTION) peak_white = renodx::color::correct::Gamma(peak_white, true); + + renodx::color::grade::Config cg_config = renodx::color::grade::config::Create(); + cg_config.exposure = RENODX_TONE_MAP_EXPOSURE; + cg_config.highlights = RENODX_TONE_MAP_HIGHLIGHTS; + cg_config.shadows = RENODX_TONE_MAP_SHADOWS; + cg_config.contrast = RENODX_TONE_MAP_CONTRAST; + cg_config.flare = 0.10f * pow(RENODX_TONE_MAP_FLARE, 10.f); + cg_config.saturation = RENODX_TONE_MAP_SATURATION; + cg_config.dechroma = RENODX_TONE_MAP_BLOWOUT; + cg_config.hue_correction_strength = RENODX_TONE_MAP_HUE_CORRECTION; + cg_config.blowout = -1.f * (RENODX_TONE_MAP_HIGHLIGHT_SATURATION - 1.f); + + undisplaymapped = ApplyFlareByChrominance(undisplaymapped, 0.10f * pow(RENODX_TONE_MAP_FLARE2, 10.f), 0.1f); + + float y = renodx::color::y::from::BT709(undisplaymapped); + float3 displaymapped = ApplyExposureContrastFlareHighlightsShadowsByLuminance(undisplaymapped, y, cg_config, 0.1f); + + if (RENODX_TONE_MAP_TYPE == 2.f) { + displaymapped = renodx::color::bt709::from::BT2020(ReinhardPiecewiseExtended(renodx::color::bt2020::from::BT709(displaymapped), RENODX_TONE_MAP_WHITE_CLIP, peak_white, 0.5f)); + } + + displaymapped = ApplySaturationBlowoutHueCorrectionHighlightSaturation(displaymapped, undisplaymapped, y, cg_config); + + return displaymapped; +} + +float3 ScaleScene(float3 color) { + if (RENODX_GAMMA_CORRECTION) { + color = renodx::color::correct::GammaSafe(color); + color *= RENODX_DIFFUSE_WHITE_NITS / RENODX_GRAPHICS_WHITE_NITS; + color = renodx::color::correct::GammaSafe(color, true); + } else { + color *= RENODX_DIFFUSE_WHITE_NITS / RENODX_GRAPHICS_WHITE_NITS; + } + return color; +} + +float3 FinalizeTonemap(float3 color) { + if (RENODX_TONE_MAP_TYPE != 0.f) { + color = renodx::color::srgb::DecodeSafe(color); + color = ApplyDisplayMap(color); + color = ScaleScene(color); + } + return color; +} +float3 GammaCorrectHuePreserving(float3 incorrect_color) { + float3 ch = renodx::color::correct::GammaSafe(incorrect_color); + + const float y_in = max(0, renodx::color::y::from::BT709(incorrect_color)); + const float y_out = renodx::color::correct::Gamma(y_in); + + float3 lum = renodx::color::correct::Luminance(incorrect_color, y_in, y_out); + + // use chrominance from per channel gamma correction + float3 result = renodx::color::correct::ChrominanceOKLab(lum, ch, 1.f, 1.f); + + return result; +} + +float3 ApplyGammaCorrection(float3 incorrect_color) { + float3 corrected_color; + if (RENODX_GAMMA_CORRECTION == 2.f) { + corrected_color = GammaCorrectHuePreserving(incorrect_color); + } else if (RENODX_GAMMA_CORRECTION == 1.f) { + corrected_color = renodx::color::correct::GammaSafe(incorrect_color); + } else { + corrected_color = incorrect_color; + } + + return corrected_color; +} diff --git a/src/games/rdr2/lut/tm_day_0x1D1EEAC6.ps_5_1.hlsl b/src/games/rdr2/lut/tm_day_0x1D1EEAC6.ps_5_1.hlsl new file mode 100644 index 0000000000..236de4a501 --- /dev/null +++ b/src/games/rdr2/lut/tm_day_0x1D1EEAC6.ps_5_1.hlsl @@ -0,0 +1,514 @@ +#include "../common.hlsli" + +struct anon_m { + int4 _m0; + float4 _m1; + float4 _m2; + float2 _m3; + uint4 _m4; + uint4 _m5; + uint4 _m6; + uint4 _m7; + uint4 _m8; + uint4 _m9; + uint4 _m10; + uint4 _m11; + uint4 _m12; + uint4 _m13; + uint4 _m14; + uint _m15; +}; + +cbuffer CB0_buf : register(b16, space0) { + uint4 CB0_m[88] : packoffset(c0); +}; + +cbuffer CB1_buf : register(b20, space0) { + uint4 CB1_m0 : packoffset(c0); + uint2 CB1_m1 : packoffset(c1); + float2 CB1_m2 : packoffset(c1.z); + float4 CB1_m3 : packoffset(c2); + float4 CB1_m4 : packoffset(c3); +}; + +ByteAddressBuffer T0 : register(t2, space0); +ByteAddressBuffer T1 : register(t3, space0); + +SamplerState S0 : register(s0, space0); +SamplerState S1 : register(s1, space0); +SamplerState S2 : register(s2, space0); +SamplerState S3 : register(s8, space0); + +Texture2DArray T2 : register(t25, space0); +Texture2D T3 : register(t44, space0); +Texture2D T4 : register(t77, space0); +Texture2D T5 : register(t78, space0); +Texture2D T6 : register(t81, space0); +Texture1D T7 : register(t89, space0); +Texture2D T8 : register(t90, space0); +Texture2D T9 : register(t94, space0); +Texture2D T10 : register(t95, space0); +Texture2D T11 : register(t100, space0); +Texture2D T12 : register(t101, space0); +Texture2D T13 : register(t106, space0); +Texture2D T14 : register(t107, space0); +Texture2D T15 : register(t109, space0); +Texture2D T16 : register(t110, space0); +Texture2D T17 : register(t111, space0); +Texture2D T18 : register(t113, space0); +Texture2D T19 : register(t114, space0); +Buffer T20 : register(t116, space0); +ByteAddressBuffer T21 : register(t118, space0); + +static float4 gl_FragCoord; +static float4 TEXCOORD; +static float TEXCOORD1; +static float4 SV_Target; + +struct SPIRV_Cross_Input { + float4 gl_FragCoord : SV_POSITION; + float4 TEXCOORD : TEXCOORD; + float TEXCOORD1 : TEXCOORD1; +}; + +struct SPIRV_Cross_Output { + float4 SV_Target : SV_Target0; +}; + +float dp2_f32(float2 a, float2 b) { + precise float _265 = a.x * b.x; + return mad(a.y, b.y, _265); +} + +int cvt_f32_i32(float v) { + return isnan(v) ? 0 : ((v < (-2147483648.0f)) ? int(0x80000000) : ((v > 2147483520.0f) ? 2147483647 : int(v))); +} + +float dp3_f32(float3 a, float3 b) { + precise float _240 = a.x * b.x; + return mad(a.z, b.z, mad(a.y, b.y, _240)); +} + +uint cvt_f32_u32(float v) { + return (v > 4294967040.0f) ? 4294967295u : uint(max(v, 0.0f)); +} + +void frag_main() { + float2 _278 = float2(TEXCOORD.x, TEXCOORD.y); + float4 _281 = T16.Sample(S0, _278); + float _282 = _281.x; + float _283 = _281.y; + float2 _285 = float2(_282, _283); + float _294 = asfloat(CB0_m[0u].w) + 1.0f; + float _298 = asfloat(CB0_m[0u].z); + float _299 = _298 / (_294 - T5.SampleLevel(S0, _285, 0.0f).x); + float4 _303 = T8.Sample(S3, _285); + float _311 = asfloat(T0.Load(16)); + float4 _327 = T19.SampleLevel(S0, float2(_282 * asfloat(CB0_m[82u].x), _283 * asfloat(CB0_m[82u].y)), 0.0f); + float _330 = _327.z; + float _500; + float _501; + float _502; + float _503; + if ((_330 >= 1.0f) && (_327.w < 2.0f)) { + float4 _340 = T18.SampleLevel(S0, _285, 0.0f); + float _345 = asfloat(CB0_m[20u].x); + float2 _348 = float2(_340.x * _345, _340.y * _345); + float _353 = asfloat(CB0_m[20u].z); + float _354 = min(sqrt(dp2_f32(_348, _348)), _353); + float _357 = min(_330, 2.0f); + float _361 = min(_357 + 1.0f, 2.0f); + int _362 = cvt_f32_i32(_361); + float _369 = ((_327.x / _330) * _357) * asfloat(CB0_m[66u].x); + float _370 = asfloat(CB0_m[66u].y) * (_357 * (_327.y / _330)); + float _372 = trunc(_361) - 0.5f; + float _373 = _372 / _357; + float _375; + float _378; + float _380; + float _382; + _375 = 0.0f; + _378 = 0.0f; + _380 = 0.0f; + _382 = 0.0f; + float _376; + float _379; + float _381; + float _383; + uint _385; + uint _384 = 0u; + for (;;) { + int _388 = int(_384); + if (_362 <= _388) { + break; + } + float _392 = float(_388); + float _395 = (_392 + 0.5f) / _372; + float2 _398 = float2(mad(_369, _395, _282), mad(_395, _370, _283)); + float4 _400 = T18.SampleLevel(S0, _398, 0.0f); + float2 _405 = float2(_345 * _400.x, _345 * _400.y); + float _408 = min(_353, sqrt(dp2_f32(_405, _405))); + float _414 = _298 / (_294 - T4.SampleLevel(S0, _398, 0.0f).x); + float _419 = _414 - _299; + float _424 = max(_392 - 0.5f, 0.0f); + float _429 = clamp(mad(_354, _373, -_424), 0.0f, 1.0f); + float _434 = (1.0f - clamp((1.0f - _408) * 8.0f, 0.0f, 1.0f)) * dp2_f32(float2(clamp(mad(_419, 1.0f, 0.5f), 0.0f, 1.0f), clamp(mad(_419, -1.0f, 0.5f), 0.0f, 1.0f)), float2(_429, clamp(mad(_373, _408, -_424), 0.0f, 1.0f))); + float4 _438 = T9.SampleLevel(S1, _398, 0.0f); + float2 _446 = float2(mad(-_369, _395, _282), mad(-_395, _370, _283)); + float4 _448 = T18.SampleLevel(S0, _446, 0.0f); + float2 _453 = float2(_345 * _448.x, _345 * _448.y); + float _456 = min(_353, sqrt(dp2_f32(_453, _453))); + float _461 = _298 / (_294 - T4.SampleLevel(S0, _446, 0.0f).x); + float _466 = _461 - _299; + float _477 = (1.0f - clamp((1.0f - _456) * 8.0f, 0.0f, 1.0f)) * dp2_f32(float2(clamp(mad(_466, 1.0f, 0.5f), 0.0f, 1.0f), clamp(mad(_466, -1.0f, 0.5f), 0.0f, 1.0f)), float2(_429, clamp(mad(_373, _456, -_424), 0.0f, 1.0f))); + float4 _479 = T9.SampleLevel(S1, _446, 0.0f); + bool _483 = _414 > _461; + bool _484 = _408 < _456; + bool _485 = _483 && _484; + float _486 = _485 ? _477 : _434; + float _489 = (_485 || (_483 || _484)) ? _477 : _434; + _383 = mad(_438.x, _486, mad(_479.x, _489, _382)); + _381 = mad(_438.y, _486, mad(_479.y, _489, _380)); + _379 = mad(_438.z, _486, mad(_479.z, _489, _378)); + _376 = _486 + (_489 + _375); + _385 = _384 + 1u; + _375 = _376; + _378 = _379; + _380 = _381; + _382 = _383; + _384 = _385; + continue; + } + float _495 = float(_362 << int(1u)); + _500 = _378 / _495; + _501 = _380 / _495; + _502 = _382 / _495; + _503 = _375 / _495; + } else { + _500 = 0.0f; + _501 = 0.0f; + _502 = 0.0f; + _503 = 0.0f; + } + float _504 = 1.0f - _503; + float4 _511 = T10.SampleLevel(S1, _285, 0.0f); + float _516 = 1.0f - _511.w; + float _517 = mad(mad(_504, _303.x * _311, _502), _516, _511.x); + float _518 = mad(mad(_303.y * _311, _504, _501), _516, _511.y); + float _519 = mad(mad(_504, _303.z * _311, _500), _516, _511.z); + float4 _521 = T20.Load(0u); + float _522 = _521.x; + float _523 = _521.y; + float _524 = _521.z; + float4 _525 = T20.Load(1u); + float _526 = _525.x; + float _527 = _525.y; + float _528 = _525.z; + float _529 = _525.w; + float4 _531 = T3.Load(int3(uint2(0u, 0u), 0u)); + float _532 = _531.x; + bool _562; + float _563; + float _564; + float _565; + if (CB0_m[64u].x != 0u) { + float4 _548 = T15.Sample(S3, _278); + float _549 = _548.x; + float _550 = _548.y; + float _551 = _548.z; + float _552 = _548.w; + bool _554 = (_552 + 9.9999997473787516355514526367188e-05f) >= 1.0f; + float _555 = 1.0f - _552; + _562 = _554; + _563 = _554 ? _551 : mad(_519, _555, _551); + _564 = _554 ? _550 : mad(_518, _555, _550); + _565 = _554 ? _549 : mad(_517, _555, _549); + } else { + _562 = false; + _563 = _519; + _564 = _518; + _565 = _517; + } + float _569 = min(_532 * _565, (UNCLAMP_HIGHLIGHTS != 0.f) ? renodx::math::FLT32_MAX : 65504.0f); + float _570 = min(_532 * _564, (UNCLAMP_HIGHLIGHTS != 0.f) ? renodx::math::FLT32_MAX : 65504.0f); + float _571 = min(_532 * _563, (UNCLAMP_HIGHLIGHTS != 0.f) ? renodx::math::FLT32_MAX : 65504.0f); + bool _572 = !_562; + float _734; + float _735; + float _736; + float _737; + if (_572) { + float _652; + if (CB0_m[73u].x != 0u) { + float4 _585 = T6.Sample(S2, _285); + float _600 = clamp(dp3_f32(float3(_532 * _585.x, _532 * _585.y, _532 * _585.z), float3(0.300000011920928955078125f, 0.589999973773956298828125f, 0.10999999940395355224609375f)), asfloat(CB0_m[75u].z), asfloat(CB0_m[75u].w)); + float _625 = asfloat(CB0_m[69u].x); + float _628 = asfloat(CB0_m[69u].y); + float _629 = clamp(mad(_600, asfloat(CB0_m[75u].y), mad(log2(_600 + asfloat(CB0_m[75u].x)) * asfloat(CB0_m[73u].y), 0.693147182464599609375f, asfloat(CB0_m[73u].z)) - 10.0f) + asfloat(CB0_m[68u].w), _625, _628); + _652 = exp2(mad(clamp(asfloat(CB0_m[73u].x), 0.0f, 1.0f), clamp(_625, mad(abs(_629) * asfloat(CB0_m[69u].z), float(int(((_629 < 0.0f) ? 4294967295u : 0u) + uint(_629 > 0.0f))), _629), _628) - TEXCOORD1, TEXCOORD1)); + } else { + _652 = TEXCOORD.z; + } + float2 _668 = float2(TEXCOORD.x - asfloat(CB0_m[53u].x), TEXCOORD.y - asfloat(CB0_m[53u].y)); + float2 _682 = float2(dp2_f32(float2(asfloat(CB0_m[55u].x), asfloat(CB0_m[55u].y)), _668) * asfloat(CB0_m[53u].z), dp2_f32(float2(asfloat(CB0_m[55u].z), asfloat(CB0_m[55u].w)), _668) * asfloat(CB0_m[53u].w)); + float _692 = max((dp2_f32(_682, _682) - asfloat(CB0_m[56u].x)) * asfloat(CB0_m[56u].w), 0.0f); + float _704 = (_692 < 1.0f) ? (1.0f - exp2(_692 * (-10.0f))) : ((((_692 - 1.0f) > 0.0f) ? exp2((_692 - 2.0f) * 10.0f) : 0.0f) + 0.9980499744415283203125f); + float _718 = asfloat(CB0_m[54u].w); + bool _728 = CB0_m[54u].w != 0u; + _734 = _652; + _735 = _728 ? mad(_704, mad(_718, _571 * asfloat(CB0_m[54u].z), -_571), _571) : _571; + _736 = _728 ? mad(_704, mad(_718, _570 * asfloat(CB0_m[54u].y), -_570), _570) : _570; + _737 = _728 ? mad(mad(_569 * asfloat(CB0_m[54u].x), _718, -_569), _704, _569) : _569; + } else { + _734 = TEXCOORD.z; + _735 = _571; + _736 = _570; + _737 = _569; + } + float _747 = clamp(clamp(TEXCOORD.y * asfloat(CB0_m[60u].y), 0.0f, 1.0f) + asfloat(CB0_m[57u].w), 0.0f, 1.0f); + float _762 = clamp(clamp(clamp(TEXCOORD.y - asfloat(CB0_m[59u].w), 0.0f, 1.0f) * asfloat(CB0_m[60u].x), 0.0f, 1.0f) - asfloat(CB0_m[58u].w), 0.0f, 1.0f); + float _768 = asfloat(CB0_m[57u].x); + float _769 = asfloat(CB0_m[57u].y); + float _770 = asfloat(CB0_m[57u].z); + float _776 = asfloat(CB0_m[59u].x); + float _777 = asfloat(CB0_m[59u].y); + float _778 = asfloat(CB0_m[59u].z); + float _782 = mad(_747, _776 - _768, _768); + float _783 = mad(_747, _777 - _769, _769); + float _784 = mad(_747, _778 - _770, _770); + float _805 = mad(TEXCOORD.y, mad(_762, asfloat(CB0_m[58u].x) - _776, _776) - _782, _782) * _737; + float _806 = _736 * mad(TEXCOORD.y, mad(_762, asfloat(CB0_m[58u].y) - _777, _777) - _783, _783); + float _807 = _735 * mad(TEXCOORD.y, mad(_762, asfloat(CB0_m[58u].z) - _778, _778) - _784, _784); + float _815 = (CB1_m1.x != 0u) ? CB1_m3.z : _524; + float _818 = _734 / CB1_m2.x; + float _822 = max(_805 * _818, 0.0f); + float _823 = max(_818 * _806, 0.0f); + float _824 = max(_818 * _807, 0.0f); + float _852 = max(_805 * _734, 0.0f); + float _853 = max(_734 * _806, 0.0f); + float _854 = max(_734 * _807, 0.0f); + bool _881 = CB1_m0.w != 0u; + + float _882, _883, _884; +#if 0 + float3 untonemapped = float3(_852, _853, _854); + float3 hdr_tonemap = untonemapped; + if (RENODX_TONE_MAP_TYPE == 0.f) { + _882 = _881 ? (CB1_m2.x * (((mad(_822, mad(_522, _822, _526), _527) / mad(_822, mad(_522, _822, _523), _528)) - _529) * _815)) : clamp(_524 * ((mad(_852, mad(_522, _852, _526), _527) / mad(_852, mad(_522, _852, _523), _528)) - _529), 0.0f, 1.0f); + _883 = _881 ? (CB1_m2.x * (_815 * ((mad(mad(_522, _823, _526), _823, _527) / mad(mad(_522, _823, _523), _823, _528)) - _529))) : clamp(_524 * ((mad(mad(_522, _853, _526), _853, _527) / mad(mad(_522, _853, _523), _853, _528)) - _529), 0.0f, 1.0f); + _884 = _881 ? (CB1_m2.x * (_815 * ((mad(mad(_522, _824, _526), _824, _527) / mad(mad(_522, _824, _523), _824, _528)) - _529))) : clamp(_524 * ((mad(mad(_522, _854, _526), _854, _527) / mad(mad(_522, _854, _523), _854, _528)) - _529), 0.0f, 1.0f); + } else { + _881 = false; // use SDR tonemapper + _882 = _881 ? (CB1_m2.x * (((mad(_822, mad(_522, _822, _526), _527) / mad(_822, mad(_522, _822, _523), _528)) - _529) * _815)) : _524 * ((mad(_852, mad(_522, _852, _526), _527) / mad(_852, mad(_522, _852, _523), _528)) - _529); + _883 = _881 ? (CB1_m2.x * (_815 * ((mad(mad(_522, _823, _526), _823, _527) / mad(mad(_522, _823, _523), _823, _528)) - _529))) : _524 * ((mad(mad(_522, _853, _526), _853, _527) / mad(mad(_522, _853, _523), _853, _528)) - _529); + _884 = _881 ? (CB1_m2.x * (_815 * ((mad(mad(_522, _824, _526), _824, _527) / mad(mad(_522, _824, _523), _824, _528)) - _529))) : _524 * ((mad(mad(_522, _854, _526), _854, _527) / mad(mad(_522, _854, _523), _854, _528)) - _529); + + float3 ch_tonemap = float3(_882, _883, _884); + + float3 mid_gray = _881 ? (CB1_m2.x * (_815 * ((mad(mad(_522, 0.18, _526), 0.18, _527) / mad(mad(_522, 0.18, _523), 0.18, _528)) - _529))) : _524 * ((mad(mad(_522, 0.18, _526), 0.18, _527) / mad(mad(_522, 0.18, _523), 0.18, _528)) - _529); + float3 untonemapped_mid_gray_shifted = untonemapped * renodx::color::y::from::BT709(mid_gray) / 0.18f; + + if (RENODX_TONE_MAP_PER_CHANNEL) { + hdr_tonemap = lerp(ch_tonemap, untonemapped_mid_gray_shifted, saturate(renodx::color::y::from::BT709(ch_tonemap))); + hdr_tonemap = HueAndChrominanceOKLab(hdr_tonemap, ch_tonemap, untonemapped_mid_gray_shifted, RENODX_TONE_MAP_HUE_CORRECTION, RENODX_TONE_MAP_BLOWOUT_RESTORATION); + } else { + float y_in = renodx::color::y::from::BT709(untonemapped); + float y_out = _881 ? (CB1_m2.x * (_815 * ((mad(mad(_522, y_in, _526), y_in, _527) / mad(mad(_522, y_in, _523), y_in, _528)) - _529))) : _524 * ((mad(mad(_522, y_in, _526), y_in, _527) / mad(mad(_522, y_in, _523), y_in, _528)) - _529); + float3 lum_tonemap = renodx::color::correct::Luminance(untonemapped, y_in, y_out, 1.f); + + // 0 - (midgray * 1.5): lum tonemap + // (midgray * 1.5) - 1: ch tonemap + // >1: untonemapped mid gray shifted + lum_tonemap = lerp(lum_tonemap, ch_tonemap, saturate(renodx::color::y::from::BT709(lum_tonemap) / (mid_gray * 1.5f))); + hdr_tonemap = lerp(lum_tonemap, untonemapped_mid_gray_shifted, saturate(renodx::color::y::from::BT709(lum_tonemap))); + hdr_tonemap = HueAndChrominanceOKLab(hdr_tonemap, ch_tonemap, untonemapped_mid_gray_shifted, RENODX_TONE_MAP_HUE_CORRECTION, RENODX_TONE_MAP_BLOWOUT_RESTORATION); + } + + _882 = hdr_tonemap.r, _883 = hdr_tonemap.g, _884 = hdr_tonemap.b; + } +#else + ApplyToneMap(_881, + float3(_852, _853, _854), + float3(_822, _823, _824), + _882, _883, _884, + CB1_m2.x, + _522, _523, _524, + _526, _527, _528, _529, + _815); + +#endif + float _957; + float _958; + float _959; + if (_572) { + float _954; + float _955; + float _956; + if (CB0_m[50u].w != 0u) { + float2 _907 = float2(TEXCOORD.x - asfloat(CB0_m[49u].x), TEXCOORD.y - asfloat(CB0_m[49u].y)); + float2 _921 = float2(dp2_f32(float2(asfloat(CB0_m[51u].x), asfloat(CB0_m[51u].y)), _907) * asfloat(CB0_m[49u].z), dp2_f32(float2(asfloat(CB0_m[51u].z), asfloat(CB0_m[51u].w)), _907) * asfloat(CB0_m[49u].w)); + float _939 = T7.Sample(S2, clamp((dp2_f32(_921, _921) - asfloat(CB0_m[52u].x)) * asfloat(CB0_m[52u].w), 0.0f, 1.0f)).w * asfloat(CB0_m[50u].w); + _954 = mad(_939, asfloat(CB0_m[50u].z) - _884, _884); + _955 = mad(_939, asfloat(CB0_m[50u].y) - _883, _883); + _956 = mad(_939, asfloat(CB0_m[50u].x) - _882, _882); + } else { + _954 = _884; + _955 = _883; + _956 = _882; + } + _957 = _954; + _958 = _955; + _959 = _956; + } else { + _957 = _884; + _958 = _883; + _959 = _882; + } + bool _995 = _881 && (CB1_m0.z == 0u); + // CB1_m4.x = 2.2f + + float _996, _997, _998; +#if 0 + _996 = _995 ? _959 : ((_959 < 0.003130800090730190277099609375f) ? (CB1_m3.w * _959) : mad(exp2(log2(_959) * CB1_m4.x), CB1_m4.y, -CB1_m4.z)); + _997 = _995 ? _958 : ((_958 < 0.003130800090730190277099609375f) ? (CB1_m3.w * _958) : mad(CB1_m4.y, exp2(CB1_m4.x * log2(_958)), -CB1_m4.z)); + _998 = _995 ? _957 : ((_957 < 0.003130800090730190277099609375f) ? (CB1_m3.w * _957) : mad(CB1_m4.y, exp2(CB1_m4.x * log2(_957)), -CB1_m4.z)); +#else + EncodeForLUT(_995, + _959, _958, _957, + CB1_m3.w, CB1_m4.x, CB1_m4.y, CB1_m4.z, + _996, _997, _998); +#endif + + float3 _999 = float3(_996, _997, _998); + float _1004 = max(dp3_f32(float3(0.265399992465972900390625f, 0.67040002346038818359375f, 0.06419999897480010986328125f), _999), 0.0f); + float _1010 = mad(((max(dp3_f32(float3(0.02480000071227550506591796875f, 0.1247999966144561767578125f, 0.85039997100830078125f), _999), 0.0f) + _1004) / max(dp3_f32(float3(0.514900028705596923828125f, 0.324400007724761962890625f, 0.1606999933719635009765625f), _999), 0.00999999977648258209228515625f)) + 1.0f, 1.33000004291534423828125f, -1.67999994754791259765625f) * _1004; + float _1024 = asfloat(CB0_m[83u].w); + float _1038 = clamp(mad(0.039999999105930328369140625f / (dp3_f32(float3(_517 * _532, _518 * _532, _519 * _532), float3(0.300000011920928955078125f, 0.589999973773956298828125f, 0.10999999940395355224609375f)) + 0.039999999105930328369140625f), asfloat(CB0_m[84u].x), asfloat(CB0_m[84u].y)), 0.0f, 1.0f); + float _1042 = mad(_1038, clamp((_1010 * asfloat(CB0_m[83u].x)) * _1024, 0.0f, 1.0f) - _996, _996); + float _1043 = mad(_1038, clamp(_1024 * (_1010 * asfloat(CB0_m[83u].y)), 0.0f, 1.0f) - _997, _997); + float _1044 = mad(_1038, clamp(_1024 * (_1010 * asfloat(CB0_m[83u].z)), 0.0f, 1.0f) - _998, _998); + float _1100; + float _1101; + float _1102; + if (CB0_m[86u].w != 0u) { + float _1054 = asfloat(CB0_m[87u].x); + float _1055 = asfloat(CB0_m[87u].w); + float _1070 = asfloat(CB0_m[86u].z); + float4 _1089 = T17.Sample(S2, float2(((((TEXCOORD.x - 0.5f) * _1070) / mad(TEXCOORD.y, asfloat(CB0_m[87u].z) - _1055, _1055)) - asfloat(CB0_m[86u].x)) + 0.5f, (((_1070 * (TEXCOORD.y - 0.5f)) / mad(TEXCOORD.x, asfloat(CB0_m[87u].y) - _1054, _1054)) - asfloat(CB0_m[86u].y)) + 0.5f)); + float _1096 = asfloat(CB0_m[86u].w); + _1100 = mad(_1089.x - _1042, _1096, _1042); + _1101 = mad(_1096, _1089.y - _1043, _1043); + _1102 = mad(_1096, _1089.z - _1044, _1044); + } else { + _1100 = _1042; + _1101 = _1043; + _1102 = _1044; + } + float _1290; + float _1291; + float _1292; + if (_572) { // use LUT + float _1111 = max(max(max(_1101, _1102), _1100), 9.9999997473787516355514526367188e-05f); + float _1122 = ((CB1_m1.y == 0u) && _995) ? 1.0f : (((CB1_m2.y < _1111) ? mad(_1111, CB1_m3.x, CB1_m3.y) : _1111) / _1111); + + float3 color_sdr, color_hdr; + PrepareForLUT(_1100, _1101, _1102, color_sdr, color_hdr, _1122); + +#if 1 + float _1123 = _1102 * _1122; + float _1128 = floor(_1123 * 14.99989986419677734375f); + float _1130 = mad(_1123, 15.0f, -_1128); + float _1132 = (_1128 * 0.0625f) + ((_1100 * _1122) * 0.05859375f); + float _1134 = mad(_1101 * _1122, 0.9375f, 0.03125f); + float4 _1140 = T13.Sample(S2, float2(_1132 + 0.001953125f, _1134)); + float _1141 = _1140.x; + float _1142 = _1140.y; + float _1143 = _1140.z; + float4 _1146 = T13.Sample(S2, float2(_1132 + 0.064453125f, _1134)); + float _1153 = mad(_1130, _1146.x - _1141, _1141); + float _1154 = mad(_1130, _1146.y - _1142, _1142); + float _1155 = mad(_1130, _1146.z - _1143, _1143); +#else + float3 lut1 = renodx::lut::SampleTetrahedral(T13, float3(_1100, _1101, _1102), 16u); + float _1153 = lut1.r, _1154 = lut1.g, _1155 = lut1.b; +#endif + + float _1284; + float _1285; + float _1286; + if (int(T21.Load(0)) > 0) { + float _1191 = clamp(asfloat(T21.Load4(32)).x + ((_299 < asfloat(T21.Load4(16)).z) ? clamp((_299 - asfloat(T21.Load4(16)).x) * asfloat(T21.Load4(16)).y, 0.0f, 1.0f) : (1.0f - clamp(asfloat(T21.Load4(16)).w * (_299 - asfloat(T21.Load4(16)).z), 0.0f, 1.0f))), 0.0f, 1.0f); + float _1194 = floor(_1155 * 14.99989986419677734375f); + float _1196 = mad(_1155, 15.0f, -_1194); + float _1198 = (_1153 * 0.05859375f) + (_1194 * 0.0625f); + float _1200 = mad(_1154, 0.9375f, 0.03125f); + float4 _1205 = T11.Sample(S2, float2(_1198 + 0.001953125f, _1200)); + float _1206 = _1205.x; + float _1207 = _1205.y; + float _1208 = _1205.z; + float4 _1211 = T11.Sample(S2, float2(_1198 + 0.064453125f, _1200)); + float _1224 = mad(_1191, mad(_1196, _1211.x - _1206, _1206) - _1153, _1153); + float _1225 = mad(mad(_1211.y - _1207, _1196, _1207) - _1154, _1191, _1154); + float _1226 = mad(mad(_1211.z - _1208, _1196, _1208) - _1155, _1191, _1155); + float _1237 = clamp(asfloat(T21.Load2(48)).y + ((_299 < asfloat(T21.Load4(32)).w) ? clamp(asfloat(T21.Load4(32)).z * (_299 - asfloat(T21.Load4(32)).y), 0.0f, 1.0f) : (1.0f - clamp(asfloat(T21.Load2(48)).x * (_299 - asfloat(T21.Load4(32)).w), 0.0f, 1.0f))), 0.0f, 1.0f); + float _1240 = floor(_1226 * 14.99989986419677734375f); + float _1242 = mad(_1226, 15.0f, -_1240); + float _1244 = (_1224 * 0.05859375f) + (_1240 * 0.0625f); + float _1246 = mad(_1225, 0.9375f, 0.03125f); + float4 _1251 = T12.Sample(S2, float2(_1244 + 0.001953125f, _1246)); + float _1252 = _1251.x; + float _1253 = _1251.y; + float _1254 = _1251.z; + float4 _1257 = T12.Sample(S2, float2(_1244 + 0.064453125f, _1246)); + float _1280 = dp3_f32(float3(T14.Sample(S2, _285).xyz), float3(0.2125999927520751953125f, 0.715200006961822509765625f, 0.072200000286102294921875f)); + _1284 = mad((mad(_1257.z - _1254, _1242, _1254) - _1226) * _1237, _1280, _1226); + _1285 = mad((mad(_1257.y - _1253, _1242, _1253) - _1225) * _1237, _1280, _1225); + _1286 = mad(_1237 * (mad(_1242, _1257.x - _1252, _1252) - _1224), _1280, _1224); + } else { + _1284 = _1155; + _1285 = _1154; + _1286 = _1153; + } + + _1290 = _1284 / _1122; + _1291 = _1285 / _1122; + _1292 = _1286 / _1122; + + UpgradeLUTOutput(color_hdr, color_sdr, _1292, _1291, _1290); + } else { + _1290 = _1102; + _1291 = _1101; + _1292 = _1100; + } + + float _1294 = dp3_f32(float3(_1292, _1291, _1290), float3(0.2989999949932098388671875f, 0.58700001239776611328125f, 0.114000000059604644775390625f)); + float _1296 = max(max(_1290, _1291), _1292); + bool _1299 = CB0_m[41u].w != 0u; + float _1333 = asfloat(CB0_m[42u].w); + float _1345 = asfloat(CB0_m[39u].x); + float _1346 = asfloat(CB0_m[39u].y); + float _1347 = asfloat(CB0_m[39u].z); + float _1379 = mad(T2.Load(int4(uint3(uint2(cvt_f32_u32(gl_FragCoord.x) & 63u, cvt_f32_u32(gl_FragCoord.y) & 63u), T1.Load(1840) & 31u), 0u)).x, 2.0f, -1.0f); + // _881 = false; + float _1392 = _881 ? (float(int(((_1379 < 0.0f) ? 4294967295u : 0u) + uint(_1379 > 0.0f))) * (1.0f - sqrt(1.0f - abs(_1379)))) : _1379; + float _1393 = mad(mad(exp2(log2(clamp(((_1299 ? _1292 : _1296) - asfloat(CB0_m[42u].x)) * asfloat(CB0_m[41u].x), 0.0f, 1.0f)) * _1333), asfloat(CB0_m[40u].x) - _1345, _1345), _1392, _1292); + float _1394 = mad(mad(asfloat(CB0_m[40u].y) - _1346, exp2(log2(clamp(((_1299 ? _1291 : _1296) - asfloat(CB0_m[42u].y)) * asfloat(CB0_m[41u].y), 0.0f, 1.0f)) * _1333), _1346), _1392, _1291); + float _1395 = mad(mad(asfloat(CB0_m[40u].z) - _1347, exp2(log2(clamp(((_1299 ? _1290 : _1296) - asfloat(CB0_m[42u].z)) * asfloat(CB0_m[41u].z), 0.0f, 1.0f)) * _1333), _1347), _1392, _1290); + SV_Target.x = _881 ? _1393 : (_1393); + SV_Target.y = _881 ? _1394 : (_1394); + SV_Target.z = _881 ? _1395 : (_1395); + SV_Target.w = _881 ? _1294 : clamp(_1294, 0.0f, 1.0f); + + SV_Target.rgb = FinalizeTonemap(SV_Target.rgb); +} + +SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { + gl_FragCoord = stage_input.gl_FragCoord; + gl_FragCoord.w = 1.0 / gl_FragCoord.w; + TEXCOORD = stage_input.TEXCOORD; + TEXCOORD1 = stage_input.TEXCOORD1; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.SV_Target = SV_Target; + return stage_output; +} diff --git a/src/games/rdr2/lut/tm_night_0xBF7C33C4.ps_5_1.hlsl b/src/games/rdr2/lut/tm_night_0xBF7C33C4.ps_5_1.hlsl new file mode 100644 index 0000000000..1037bfce61 --- /dev/null +++ b/src/games/rdr2/lut/tm_night_0xBF7C33C4.ps_5_1.hlsl @@ -0,0 +1,512 @@ + +#include "../common.hlsli" + +struct anon_m { + int4 _m0; + float4 _m1; + float4 _m2; + float2 _m3; + uint4 _m4; + uint4 _m5; + uint4 _m6; + uint4 _m7; + uint4 _m8; + uint4 _m9; + uint4 _m10; + uint4 _m11; + uint4 _m12; + uint4 _m13; + uint4 _m14; + uint _m15; +}; + +cbuffer CB0_buf : register(b16, space0) { + uint4 CB0_m[88] : packoffset(c0); +}; + +cbuffer CB1_buf : register(b20, space0) { + uint4 CB1_m0 : packoffset(c0); + uint2 CB1_m1 : packoffset(c1); + float2 CB1_m2 : packoffset(c1.z); + float4 CB1_m3 : packoffset(c2); + float4 CB1_m4 : packoffset(c3); +}; + +SamplerState S0 : register(s0, space0); +SamplerState S1 : register(s1, space0); +SamplerState S2 : register(s2, space0); +SamplerState S3 : register(s8, space0); + +ByteAddressBuffer T0 : register(t2, space0); +ByteAddressBuffer T1 : register(t3, space0); +Texture2DArray T2 : register(t25, space0); +Texture2D T3 : register(t44, space0); +Texture2D T4 : register(t77, space0); +Texture2D T5 : register(t78, space0); +Texture2D T6 : register(t81, space0); +Texture1D T7 : register(t89, space0); +Texture2D T8 : register(t90, space0); +Texture2D T9 : register(t94, space0); +Texture2D T10 : register(t95, space0); +Texture2D T11 : register(t100, space0); +Texture2D T12 : register(t101, space0); +Texture2D T13 : register(t106, space0); +Texture2D T14 : register(t107, space0); +Texture2D T15 : register(t109, space0); +Texture2D T16 : register(t111, space0); +Texture2D T17 : register(t113, space0); +Texture2D T18 : register(t114, space0); +Buffer T19 : register(t116, space0); +ByteAddressBuffer T20 : register(t118, space0); + +static float4 gl_FragCoord; +static float4 TEXCOORD; +static float TEXCOORD1; +static float4 SV_Target; + +struct SPIRV_Cross_Input { + float4 gl_FragCoord : SV_Position; + float4 TEXCOORD : TEXCOORD; + float TEXCOORD1 : TEXCOORD1; +}; + +struct SPIRV_Cross_Output { + float4 SV_Target : SV_Target0; +}; + +float dp2_f32(float2 a, float2 b) { + precise float _264 = a.x * b.x; + return mad(a.y, b.y, _264); +} + +int cvt_f32_i32(float v) { + return isnan(v) ? 0 : ((v < (-2147483648.0f)) ? int(0x80000000) : ((v > 2147483520.0f) ? 2147483647 : int(v))); +} + +float dp3_f32(float3 a, float3 b) { + precise float _239 = a.x * b.x; + return mad(a.z, b.z, mad(a.y, b.y, _239)); +} + +uint cvt_f32_u32(float v) { + return (v > 4294967040.0f) ? 4294967295u : uint(max(v, 0.0f)); +} + +void frag_main() { + float2 _277 = float2(TEXCOORD.x, TEXCOORD.y); + float _287 = asfloat(CB0_m[0u].w) + 1.0f; + float _291 = asfloat(CB0_m[0u].z); + float _292 = _291 / (_287 - T5.SampleLevel(S0, _277, 0.0f).x); + float4 _296 = T8.Sample(S3, _277); + float _304 = asfloat(T0.Load(16)); + float4 _320 = T18.SampleLevel(S0, float2(TEXCOORD.x * asfloat(CB0_m[82u].x), TEXCOORD.y * asfloat(CB0_m[82u].y)), 0.0f); + float _323 = _320.z; + float _493; + float _494; + float _495; + float _496; + if ((_323 >= 1.0f) && (_320.w < 2.0f)) { + float4 _333 = T17.SampleLevel(S0, _277, 0.0f); + float _338 = asfloat(CB0_m[20u].x); + float2 _341 = float2(_333.x * _338, _333.y * _338); + float _346 = asfloat(CB0_m[20u].z); + float _347 = min(sqrt(dp2_f32(_341, _341)), _346); + float _350 = min(_323, 2.0f); + float _354 = min(_350 + 1.0f, 2.0f); + int _355 = cvt_f32_i32(_354); + float _362 = ((_320.x / _323) * _350) * asfloat(CB0_m[66u].x); + float _363 = asfloat(CB0_m[66u].y) * (_350 * (_320.y / _323)); + float _365 = trunc(_354) - 0.5f; + float _366 = _365 / _350; + float _368; + float _371; + float _373; + float _375; + _368 = 0.0f; + _371 = 0.0f; + _373 = 0.0f; + _375 = 0.0f; + float _369; + float _372; + float _374; + float _376; + uint _378; + uint _377 = 0u; + for (;;) { + int _381 = int(_377); + if (_355 <= _381) { + break; + } + float _385 = float(_381); + float _388 = (_385 + 0.5f) / _365; + float2 _391 = float2(mad(_362, _388, TEXCOORD.x), mad(_388, _363, TEXCOORD.y)); + float4 _393 = T17.SampleLevel(S0, _391, 0.0f); + float2 _398 = float2(_338 * _393.x, _338 * _393.y); + float _401 = min(_346, sqrt(dp2_f32(_398, _398))); + float _407 = _291 / (_287 - T4.SampleLevel(S0, _391, 0.0f).x); + float _412 = _407 - _292; + float _417 = max(_385 - 0.5f, 0.0f); + float _422 = clamp(mad(_347, _366, -_417), 0.0f, 1.0f); + float _427 = (1.0f - clamp((1.0f - _401) * 8.0f, 0.0f, 1.0f)) * dp2_f32(float2(clamp(mad(_412, 1.0f, 0.5f), 0.0f, 1.0f), clamp(mad(_412, -1.0f, 0.5f), 0.0f, 1.0f)), float2(_422, clamp(mad(_366, _401, -_417), 0.0f, 1.0f))); + float4 _431 = T9.SampleLevel(S1, _391, 0.0f); + float2 _439 = float2(mad(-_362, _388, TEXCOORD.x), mad(-_388, _363, TEXCOORD.y)); + float4 _441 = T17.SampleLevel(S0, _439, 0.0f); + float2 _446 = float2(_338 * _441.x, _338 * _441.y); + float _449 = min(_346, sqrt(dp2_f32(_446, _446))); + float _454 = _291 / (_287 - T4.SampleLevel(S0, _439, 0.0f).x); + float _459 = _454 - _292; + float _470 = (1.0f - clamp((1.0f - _449) * 8.0f, 0.0f, 1.0f)) * dp2_f32(float2(clamp(mad(_459, 1.0f, 0.5f), 0.0f, 1.0f), clamp(mad(_459, -1.0f, 0.5f), 0.0f, 1.0f)), float2(_422, clamp(mad(_366, _449, -_417), 0.0f, 1.0f))); + float4 _472 = T9.SampleLevel(S1, _439, 0.0f); + bool _476 = _407 > _454; + bool _477 = _401 < _449; + bool _478 = _476 && _477; + float _479 = _478 ? _470 : _427; + float _482 = ((_476 || _477) || _478) ? _470 : _427; + _376 = mad(_431.x, _479, mad(_472.x, _482, _375)); + _374 = mad(_431.y, _479, mad(_472.y, _482, _373)); + _372 = mad(_431.z, _479, mad(_472.z, _482, _371)); + _369 = (_482 + _368) + _479; + _378 = _377 + 1u; + _368 = _369; + _371 = _372; + _373 = _374; + _375 = _376; + _377 = _378; + continue; + } + float _488 = float(_355 << int(1u)); + _493 = _371 / _488; + _494 = _373 / _488; + _495 = _375 / _488; + _496 = _368 / _488; + } else { + _493 = 0.0f; + _494 = 0.0f; + _495 = 0.0f; + _496 = 0.0f; + } + float _497 = 1.0f - _496; + float4 _504 = T10.SampleLevel(S1, _277, 0.0f); + float _509 = 1.0f - _504.w; + float _510 = mad(mad(_497, _296.x * _304, _495), _509, _504.x); + float _511 = mad(mad(_296.y * _304, _497, _494), _509, _504.y); + float _512 = mad(mad(_497, _296.z * _304, _493), _509, _504.z); + float4 _514 = T19.Load(0u); + float _515 = _514.x; + float _516 = _514.y; + float _517 = _514.z; + float4 _518 = T19.Load(1u); + float _519 = _518.x; + float _520 = _518.y; + float _521 = _518.z; + float _522 = _518.w; + float4 _524 = T3.Load(int3(uint2(0u, 0u), 0u)); + float _525 = _524.x; + bool _555; + float _556; + float _557; + float _558; + if (CB0_m[64u].x != 0u) { + float4 _541 = T15.Sample(S3, _277); + float _542 = _541.x; + float _543 = _541.y; + float _544 = _541.z; + float _545 = _541.w; + bool _547 = (_545 + 9.9999997473787516355514526367188e-05f) >= 1.0f; + float _548 = 1.0f - _545; + _555 = _547; + _556 = _547 ? _544 : mad(_512, _548, _544); + _557 = _547 ? _543 : mad(_511, _548, _543); + _558 = _547 ? _542 : mad(_510, _548, _542); + } else { + _555 = false; + _556 = _512; + _557 = _511; + _558 = _510; + } + float _562 = min(_525 * _558, (UNCLAMP_HIGHLIGHTS != 0.f) ? renodx::math::FLT32_MAX : 65504.0f); + float _563 = min(_525 * _557, (UNCLAMP_HIGHLIGHTS != 0.f) ? renodx::math::FLT32_MAX : 65504.0f); + float _564 = min(_525 * _556, (UNCLAMP_HIGHLIGHTS != 0.f) ? renodx::math::FLT32_MAX : 65504.0f); + bool _565 = !_555; + float _727; + float _728; + float _729; + float _730; + if (_565) { + float _645; + if (CB0_m[73u].x != 0u) { + float4 _578 = T6.Sample(S2, _277); + float _593 = clamp(dp3_f32(float3(_525 * _578.x, _525 * _578.y, _525 * _578.z), float3(0.300000011920928955078125f, 0.589999973773956298828125f, 0.10999999940395355224609375f)), asfloat(CB0_m[75u].z), asfloat(CB0_m[75u].w)); + float _618 = asfloat(CB0_m[69u].x); + float _621 = asfloat(CB0_m[69u].y); + float _622 = clamp(mad(_593, asfloat(CB0_m[75u].y), mad(log2(_593 + asfloat(CB0_m[75u].x)) * asfloat(CB0_m[73u].y), 0.693147182464599609375f, asfloat(CB0_m[73u].z)) - 10.0f) + asfloat(CB0_m[68u].w), _618, _621); + _645 = exp2(mad(clamp(asfloat(CB0_m[73u].x), 0.0f, 1.0f), clamp(_618, mad(abs(_622) * asfloat(CB0_m[69u].z), float(int(((_622 < 0.0f) ? 4294967295u : 0u) + uint(_622 > 0.0f))), _622), _621) - TEXCOORD1, TEXCOORD1)); + } else { + _645 = TEXCOORD.z; + } + float2 _661 = float2(TEXCOORD.x - asfloat(CB0_m[53u].x), TEXCOORD.y - asfloat(CB0_m[53u].y)); + float2 _675 = float2(dp2_f32(float2(asfloat(CB0_m[55u].x), asfloat(CB0_m[55u].y)), _661) * asfloat(CB0_m[53u].z), dp2_f32(float2(asfloat(CB0_m[55u].z), asfloat(CB0_m[55u].w)), _661) * asfloat(CB0_m[53u].w)); + float _685 = max((dp2_f32(_675, _675) - asfloat(CB0_m[56u].x)) * asfloat(CB0_m[56u].w), 0.0f); + float _697 = (_685 < 1.0f) ? (1.0f - exp2(_685 * (-10.0f))) : ((((_685 - 1.0f) > 0.0f) ? exp2((_685 - 2.0f) * 10.0f) : 0.0f) + 0.9980499744415283203125f); + float _711 = asfloat(CB0_m[54u].w); + bool _721 = CB0_m[54u].w != 0u; + _727 = _645; + _728 = _721 ? mad(_697, mad(_711, asfloat(CB0_m[54u].z) * _564, -_564), _564) : _564; + _729 = _721 ? mad(_697, mad(_711, asfloat(CB0_m[54u].y) * _563, -_563), _563) : _563; + _730 = _721 ? mad(mad(asfloat(CB0_m[54u].x) * _562, _711, -_562), _697, _562) : _562; + } else { + _727 = TEXCOORD.z; + _728 = _564; + _729 = _563; + _730 = _562; + } + float _740 = clamp(clamp(TEXCOORD.y * asfloat(CB0_m[60u].y), 0.0f, 1.0f) + asfloat(CB0_m[57u].w), 0.0f, 1.0f); + float _755 = clamp(clamp(clamp(TEXCOORD.y - asfloat(CB0_m[59u].w), 0.0f, 1.0f) * asfloat(CB0_m[60u].x), 0.0f, 1.0f) - asfloat(CB0_m[58u].w), 0.0f, 1.0f); + float _761 = asfloat(CB0_m[57u].x); + float _762 = asfloat(CB0_m[57u].y); + float _763 = asfloat(CB0_m[57u].z); + float _769 = asfloat(CB0_m[59u].x); + float _770 = asfloat(CB0_m[59u].y); + float _771 = asfloat(CB0_m[59u].z); + float _775 = mad(_740, _769 - _761, _761); + float _776 = mad(_740, _770 - _762, _762); + float _777 = mad(_740, _771 - _763, _763); + float _798 = mad(TEXCOORD.y, mad(_755, asfloat(CB0_m[58u].x) - _769, _769) - _775, _775) * _730; + float _799 = _729 * mad(TEXCOORD.y, mad(_755, asfloat(CB0_m[58u].y) - _770, _770) - _776, _776); + float _800 = _728 * mad(TEXCOORD.y, mad(_755, asfloat(CB0_m[58u].z) - _771, _771) - _777, _777); + float _808 = (CB1_m1.x != 0u) ? CB1_m3.z : _517; + float _811 = _727 / CB1_m2.x; + float _815 = max(_798 * _811, 0.0f); + float _816 = max(_811 * _799, 0.0f); + float _817 = max(_811 * _800, 0.0f); + float _845 = max(_798 * _727, 0.0f); + float _846 = max(_727 * _799, 0.0f); + float _847 = max(_727 * _800, 0.0f); + bool _874 = CB1_m0.w != 0u; + + float _875, _876, _877; +#if 0 + float3 untonemapped = float3(_845, _846, _847); + float3 hdr_tonemap = untonemapped; + if (RENODX_TONE_MAP_TYPE == 0.f) { + _875 = _874 ? (CB1_m2.x * (((mad(_815, mad(_515, _815, _519), _520) / mad(_815, mad(_515, _815, _516), _521)) - _522) * _808)) : clamp(_517 * ((mad(_845, mad(_515, _845, _519), _520) / mad(_845, mad(_515, _845, _516), _521)) - _522), 0.0f, 1.0f); + _876 = _874 ? (CB1_m2.x * (_808 * ((mad(mad(_515, _816, _519), _816, _520) / mad(mad(_515, _816, _516), _816, _521)) - _522))) : clamp(_517 * ((mad(mad(_515, _846, _519), _846, _520) / mad(mad(_515, _846, _516), _846, _521)) - _522), 0.0f, 1.0f); + _877 = _874 ? (CB1_m2.x * (_808 * ((mad(mad(_515, _817, _519), _817, _520) / mad(mad(_515, _817, _516), _817, _521)) - _522))) : clamp(_517 * ((mad(mad(_515, _847, _519), _847, _520) / mad(mad(_515, _847, _516), _847, _521)) - _522), 0.0f, 1.0f); + } else { + _874 = false; // use SDR tonemapper + _875 = _874 ? (CB1_m2.x * (((mad(_815, mad(_515, _815, _519), _520) / mad(_815, mad(_515, _815, _516), _521)) - _522) * _808)) : _517 * ((mad(_845, mad(_515, _845, _519), _520) / mad(_845, mad(_515, _845, _516), _521)) - _522); + _876 = _874 ? (CB1_m2.x * (_808 * ((mad(mad(_515, _816, _519), _816, _520) / mad(mad(_515, _816, _516), _816, _521)) - _522))) : _517 * ((mad(mad(_515, _846, _519), _846, _520) / mad(mad(_515, _846, _516), _846, _521)) - _522); + _877 = _874 ? (CB1_m2.x * (_808 * ((mad(mad(_515, _817, _519), _817, _520) / mad(mad(_515, _817, _516), _817, _521)) - _522))) : _517 * ((mad(mad(_515, _847, _519), _847, _520) / mad(mad(_515, _847, _516), _847, _521)) - _522); + + float3 ch_tonemap = float3(_875, _876, _877); + + float mid_gray = _874 ? (CB1_m2.x * (_808 * ((mad(mad(_515, 0.18, _519), 0.18, _520) / mad(mad(_515, 0.18, _516), 0.18, _521)) - _522))) : _517 * ((mad(mad(_515, 0.18, _519), 0.18, _520) / mad(mad(_515, 0.18, _516), 0.18, _521)) - _522); + float3 untonemapped_mid_gray_shifted = float3(_845, _846, _847) * mid_gray / 0.18f; + + if (RENODX_TONE_MAP_PER_CHANNEL) { + hdr_tonemap = lerp(ch_tonemap, untonemapped_mid_gray_shifted, saturate(renodx::color::y::from::BT709(ch_tonemap))); + hdr_tonemap = HueAndChrominanceOKLab(hdr_tonemap, ch_tonemap, untonemapped_mid_gray_shifted, RENODX_TONE_MAP_HUE_CORRECTION, RENODX_TONE_MAP_BLOWOUT_RESTORATION); + } else { + float y_in = renodx::color::y::from::BT709(untonemapped); + float y_out = _874 ? (CB1_m2.x * (_808 * ((mad(mad(_515, y_in, _519), y_in, _520) / mad(mad(_515, y_in, _516), y_in, _521)) - _522))) : _517 * ((mad(mad(_515, y_in, _519), y_in, _520) / mad(mad(_515, y_in, _516), y_in, _521)) - _522); + float3 lum_tonemap = renodx::color::correct::Luminance(untonemapped, y_in, y_out, 1.f); + + // 0 - (midgray * 1.5): lum tonemap + // (midgray * 1.5) - 1: ch tonemap + // >1: untonemapped mid gray shifted + lum_tonemap = lerp(lum_tonemap, ch_tonemap, saturate(renodx::color::y::from::BT709(lum_tonemap) / (mid_gray * 1.5f))); + hdr_tonemap = lerp(lum_tonemap, untonemapped_mid_gray_shifted, saturate(renodx::color::y::from::BT709(lum_tonemap))); + hdr_tonemap = HueAndChrominanceOKLab(hdr_tonemap, ch_tonemap, untonemapped_mid_gray_shifted, RENODX_TONE_MAP_HUE_CORRECTION, RENODX_TONE_MAP_BLOWOUT_RESTORATION); + } + + _875 = hdr_tonemap.r, _876 = hdr_tonemap.g, _877 = hdr_tonemap.b; + } +#else + ApplyToneMap(_874, + float3(_845, _846, _847), + float3(_815, _816, _817), + _875, _876, _877, + CB1_m2.x, + _515, _516, _517, + _519, _520, _521, _522, + _808); +#endif + float _950; + float _951; + float _952; + if (_565) { + float _947; + float _948; + float _949; + if (CB0_m[50u].w != 0u) { + float2 _900 = float2(TEXCOORD.x - asfloat(CB0_m[49u].x), TEXCOORD.y - asfloat(CB0_m[49u].y)); + float2 _914 = float2(dp2_f32(float2(asfloat(CB0_m[51u].x), asfloat(CB0_m[51u].y)), _900) * asfloat(CB0_m[49u].z), dp2_f32(float2(asfloat(CB0_m[51u].z), asfloat(CB0_m[51u].w)), _900) * asfloat(CB0_m[49u].w)); + float _932 = T7.Sample(S2, clamp((dp2_f32(_914, _914) - asfloat(CB0_m[52u].x)) * asfloat(CB0_m[52u].w), 0.0f, 1.0f)).w * asfloat(CB0_m[50u].w); + _947 = mad(_932, asfloat(CB0_m[50u].z) - _877, _877); + _948 = mad(_932, asfloat(CB0_m[50u].y) - _876, _876); + _949 = mad(_932, asfloat(CB0_m[50u].x) - _875, _875); + } else { + _947 = _877; + _948 = _876; + _949 = _875; + } + _950 = _947; + _951 = _948; + _952 = _949; + } else { + _950 = _877; + _951 = _876; + _952 = _875; + } + bool _988 = _874 && (CB1_m0.z == 0u); + float _989, _990, _991; +#if 0 + if (RENODX_TONE_MAP_TYPE != 0.f) { + _988 = false; + } + if (USE_SRGB_LUT_ENCODING) { + _989 = _988 ? _952 : renodx::color::srgb::EncodeSafe(_952); + _990 = _988 ? _951 : renodx::color::srgb::EncodeSafe(_951); + _991 = _988 ? _950 : renodx::color::srgb::EncodeSafe(_950); + } else { + _989 = _988 ? _952 : ((_952 < 0.003130800090730190277099609375f) ? (CB1_m3.w * _952) : mad(CB1_m4.y, exp2(log2(_952) * CB1_m4.x), -CB1_m4.z)); + _990 = _988 ? _951 : ((_951 < 0.003130800090730190277099609375f) ? (CB1_m3.w * _951) : mad(CB1_m4.y, exp2(CB1_m4.x * log2(_951)), -CB1_m4.z)); + _991 = _988 ? _950 : ((_950 < 0.003130800090730190277099609375f) ? (CB1_m3.w * _950) : mad(CB1_m4.y, exp2(CB1_m4.x * log2(_950)), -CB1_m4.z)); + } +#else + EncodeForLUT(_988, + _952, _951, _950, + CB1_m3.w, CB1_m4.x, CB1_m4.y, CB1_m4.z, + _989, _990, _991); +#endif + + float3 _992 = float3(_989, _990, _991); + float _997 = max(dp3_f32(float3(0.265399992465972900390625f, 0.67040002346038818359375f, 0.06419999897480010986328125f), _992), 0.0f); + float _1003 = mad(((max(dp3_f32(float3(0.02480000071227550506591796875f, 0.1247999966144561767578125f, 0.85039997100830078125f), _992), 0.0f) + _997) / max(dp3_f32(float3(0.514900028705596923828125f, 0.324400007724761962890625f, 0.1606999933719635009765625f), _992), 0.00999999977648258209228515625f)) + 1.0f, 1.33000004291534423828125f, -1.67999994754791259765625f) * _997; + float _1017 = asfloat(CB0_m[83u].w); + float _1031 = clamp(mad(0.039999999105930328369140625f / (dp3_f32(float3(_510 * _525, _511 * _525, _512 * _525), float3(0.300000011920928955078125f, 0.589999973773956298828125f, 0.10999999940395355224609375f)) + 0.039999999105930328369140625f), asfloat(CB0_m[84u].x), asfloat(CB0_m[84u].y)), 0.0f, 1.0f); + float _1035 = mad(_1031, clamp((_1003 * asfloat(CB0_m[83u].x)) * _1017, 0.0f, 1.0f) - _989, _989); + float _1036 = mad(_1031, clamp(_1017 * (_1003 * asfloat(CB0_m[83u].y)), 0.0f, 1.0f) - _990, _990); + float _1037 = mad(_1031, clamp(_1017 * (_1003 * asfloat(CB0_m[83u].z)), 0.0f, 1.0f) - _991, _991); + float _1093; + float _1094; + float _1095; + if (CB0_m[86u].w != 0u) { + float _1047 = asfloat(CB0_m[87u].x); + float _1048 = asfloat(CB0_m[87u].w); + float _1063 = asfloat(CB0_m[86u].z); + float4 _1082 = T16.Sample(S2, float2(((((TEXCOORD.x - 0.5f) * _1063) / mad(TEXCOORD.y, asfloat(CB0_m[87u].z) - _1048, _1048)) - asfloat(CB0_m[86u].x)) + 0.5f, (((_1063 * (TEXCOORD.y - 0.5f)) / mad(TEXCOORD.x, asfloat(CB0_m[87u].y) - _1047, _1047)) - asfloat(CB0_m[86u].y)) + 0.5f)); + float _1089 = asfloat(CB0_m[86u].w); + _1093 = mad(_1082.x - _1035, _1089, _1035); + _1094 = mad(_1089, _1082.y - _1036, _1036); + _1095 = mad(_1089, _1082.z - _1037, _1037); + } else { + _1093 = _1035; + _1094 = _1036; + _1095 = _1037; + } + float _1283; + float _1284; + float _1285; + if (_565) { // apply LUT + float _1146, _1147, _1148; + float _1104 = max(max(max(_1094, _1095), _1093), 9.9999997473787516355514526367188e-05f); + float _1115 = ((CB1_m1.y == 0u) && _988) ? 1.0f : (((CB1_m2.y < _1104) ? mad(_1104, CB1_m3.x, CB1_m3.y) : _1104) / _1104); + + float3 color_sdr, color_hdr; + PrepareForLUT(_1093, _1094, _1095, color_sdr, color_hdr, _1115); +#if 1 + float _1116 = _1095 * _1115; + float _1121 = floor(_1116 * 14.99989986419677734375f); + float _1123 = mad(_1116, 15.0f, -_1121); + float _1125 = (_1121 * 0.0625f) + ((_1093 * _1115) * 0.05859375f); + float _1127 = mad(_1094 * _1115, 0.9375f, 0.03125f); + float4 _1133 = T13.Sample(S2, float2(_1125 + 0.001953125f, _1127)); + float _1134 = _1133.x; + float _1135 = _1133.y; + float _1136 = _1133.z; + float4 _1139 = T13.Sample(S2, float2(_1125 + 0.064453125f, _1127)); + _1146 = mad(_1123, _1139.x - _1134, _1134); + _1147 = mad(_1123, _1139.y - _1135, _1135); + _1148 = mad(_1123, _1139.z - _1136, _1136); +#else + float3 lut1 = renodx::lut::SampleTetrahedral(T13, color_sdr, 16u); + _1146 = lut1.r, _1147 = lut1.g, _1148 = lut1.b; +#endif + float _1277; + float _1278; + float _1279; + if (int(T20.Load(0)) > 0) { + float _1184 = clamp(asfloat(T20.Load4(32)).x + ((_292 < asfloat(T20.Load4(16)).z) ? clamp(asfloat(T20.Load4(16)).y * (_292 - asfloat(T20.Load4(16)).x), 0.0f, 1.0f) : (1.0f - clamp(asfloat(T20.Load4(16)).w * (_292 - asfloat(T20.Load4(16)).z), 0.0f, 1.0f))), 0.0f, 1.0f); + float _1187 = floor(_1148 * 14.99989986419677734375f); + float _1189 = mad(_1148, 15.0f, -_1187); + float _1191 = (_1146 * 0.05859375f) + (_1187 * 0.0625f); + float _1193 = mad(_1147, 0.9375f, 0.03125f); + float4 _1198 = T11.Sample(S2, float2(_1191 + 0.001953125f, _1193)); + float _1199 = _1198.x; + float _1200 = _1198.y; + float _1201 = _1198.z; + float4 _1204 = T11.Sample(S2, float2(_1191 + 0.064453125f, _1193)); + float _1217 = mad(_1184, mad(_1189, _1204.x - _1199, _1199) - _1146, _1146); + float _1218 = mad(mad(_1204.y - _1200, _1189, _1200) - _1147, _1184, _1147); + float _1219 = mad(mad(_1204.z - _1201, _1189, _1201) - _1148, _1184, _1148); + float _1230 = clamp(asfloat(T20.Load2(48)).y + ((_292 < asfloat(T20.Load4(32)).w) ? clamp(asfloat(T20.Load4(32)).z * (_292 - asfloat(T20.Load4(32)).y), 0.0f, 1.0f) : (1.0f - clamp(asfloat(T20.Load2(48)).x * (_292 - asfloat(T20.Load4(32)).w), 0.0f, 1.0f))), 0.0f, 1.0f); + float _1233 = floor(_1219 * 14.99989986419677734375f); + float _1235 = mad(_1219, 15.0f, -_1233); + float _1237 = (_1217 * 0.05859375f) + (_1233 * 0.0625f); + float _1239 = mad(_1218, 0.9375f, 0.03125f); + float4 _1244 = T12.Sample(S2, float2(_1237 + 0.001953125f, _1239)); + float _1245 = _1244.x; + float _1246 = _1244.y; + float _1247 = _1244.z; + float4 _1250 = T12.Sample(S2, float2(_1237 + 0.064453125f, _1239)); + float _1273 = dp3_f32(float3(T14.Sample(S2, _277).xyz), float3(0.2125999927520751953125f, 0.715200006961822509765625f, 0.072200000286102294921875f)); + _1277 = mad((mad(_1250.z - _1247, _1235, _1247) - _1219) * _1230, _1273, _1219); + _1278 = mad((mad(_1250.y - _1246, _1235, _1246) - _1218) * _1230, _1273, _1218); + _1279 = mad(_1230 * (mad(_1235, _1250.x - _1245, _1245) - _1217), _1273, _1217); + } else { + _1277 = _1148; + _1278 = _1147; + _1279 = _1146; + } + _1283 = _1277 / _1115; + _1284 = _1278 / _1115; + _1285 = _1279 / _1115; + + UpgradeLUTOutput(color_hdr, color_sdr, _1285, _1284, _1283); + } else { + _1283 = _1095; + _1284 = _1094; + _1285 = _1093; + } + float _1287 = dp3_f32(float3(_1285, _1284, _1283), float3(0.2989999949932098388671875f, 0.58700001239776611328125f, 0.114000000059604644775390625f)); + float _1289 = max(max(_1283, _1284), _1285); + bool _1292 = CB0_m[41u].w != 0u; + float _1326 = asfloat(CB0_m[42u].w); + float _1338 = asfloat(CB0_m[39u].x); + float _1339 = asfloat(CB0_m[39u].y); + float _1340 = asfloat(CB0_m[39u].z); + + float _1372 = mad(T2.Load(int4(uint3(uint2(cvt_f32_u32(gl_FragCoord.x) & 63u, cvt_f32_u32(gl_FragCoord.y) & 63u), T1.Load(1840) & 31u), 0u)).x, 2.0f, -1.0f); + float _1385 = _874 ? (float(int(((_1372 < 0.0f) ? 4294967295u : 0u) + uint(_1372 > 0.0f))) * (1.0f - sqrt(1.0f - abs(_1372)))) : _1372; + float _1386 = mad(mad(exp2(log2(clamp(((_1292 ? _1285 : _1289) - asfloat(CB0_m[42u].x)) * asfloat(CB0_m[41u].x), 0.0f, 1.0f)) * _1326), asfloat(CB0_m[40u].x) - _1338, _1338), _1385, _1285); + float _1387 = mad(mad(asfloat(CB0_m[40u].y) - _1339, exp2(log2(clamp(((_1292 ? _1284 : _1289) - asfloat(CB0_m[42u].y)) * asfloat(CB0_m[41u].y), 0.0f, 1.0f)) * _1326), _1339), _1385, _1284); + float _1388 = mad(mad(asfloat(CB0_m[40u].z) - _1340, exp2(log2(clamp(((_1292 ? _1283 : _1289) - asfloat(CB0_m[42u].z)) * asfloat(CB0_m[41u].z), 0.0f, 1.0f)) * _1326), _1340), _1385, _1283); + SV_Target.x = _874 ? _1386 : (_1386); + SV_Target.y = _874 ? _1387 : (_1387); + SV_Target.z = _874 ? _1388 : (_1388); + SV_Target.w = _874 ? _1287 : clamp(_1287, 0.0f, 1.0f); + + SV_Target.rgb = FinalizeTonemap(SV_Target.rgb); +} + +SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { + gl_FragCoord = stage_input.gl_FragCoord; + gl_FragCoord.w = 1.0 / gl_FragCoord.w; + TEXCOORD = stage_input.TEXCOORD; + TEXCOORD1 = stage_input.TEXCOORD1; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.SV_Target = SV_Target; + return stage_output; +} diff --git a/src/games/rdr2/output/main_output_0x307A8225.ps_5_1.hlsl b/src/games/rdr2/output/main_output_0x307A8225.ps_5_1.hlsl new file mode 100644 index 0000000000..a6f4049c10 --- /dev/null +++ b/src/games/rdr2/output/main_output_0x307A8225.ps_5_1.hlsl @@ -0,0 +1,150 @@ +#include "../common.hlsli" + +cbuffer CB0_buf : register(b17, space0) { + uint4 CB0_m0 : packoffset(c0); + uint4 CB0_m1 : packoffset(c1); + uint3 CB0_m2 : packoffset(c2); + float CB0_m3 : packoffset(c2.w); + uint4 CB0_m4 : packoffset(c3); + uint4 CB0_m5 : packoffset(c4); + uint4 CB0_m6 : packoffset(c5); + uint4 CB0_m7 : packoffset(c6); + uint4 CB0_m8 : packoffset(c7); + float4 CB0_m9 : packoffset(c8); +}; + +cbuffer CB1_buf : register(b18, space0) { + float2 CB1_m0 : packoffset(c0); + uint2 CB1_m1 : packoffset(c0.z); + uint4 CB1_m2 : packoffset(c1); + float4 CB1_m3 : packoffset(c2); + float4 CB1_m4 : packoffset(c3); + uint4 CB1_m5 : packoffset(c4); +}; + +ByteAddressBuffer T0 : register(t3, space0); +SamplerState S0 : register(s0, space0); +SamplerState S1 : register(s2, space0); +Texture2DArray T1 : register(t27, space0); +Texture2D T2 : register(t91, space0); +Texture3D T3 : register(t111, space0); + +static float4 gl_FragCoord; +static float4 COLOR; +static float2 TEXCOORD; +static float4 SV_Target; + +struct SPIRV_Cross_Input { + float4 gl_FragCoord : SV_Position0; + float4 COLOR : COLOR0; + float2 TEXCOORD : TEXCOORD0; +}; + +struct SPIRV_Cross_Output { + float4 SV_Target : SV_Target0; +}; + +uint cvt_f32_u32(float v) { + return (v > 4294967040.0f) ? 4294967295u : uint(max(v, 0.0f)); +} + +float dp3_f32(float3 a, float3 b) { + precise float _101 = a.x * b.x; + return mad(a.z, b.z, mad(a.y, b.y, _101)); +} + +void frag_main() { + float4 _131 = T2.SampleLevel(S0, float2(TEXCOORD.x, TEXCOORD.y), 0.0f); + float _132 = _131.x; + float _133 = _131.y; + float _134 = _131.z; + bool _144 = (CB1_m1.y != 0u) && (CB1_m1.x == 0u); + float _163 = 1.0f / CB1_m4.x; + float _173 = 0.003130800090730190277099609375f / CB1_m3.w; + float _180 = _144 ? _132 : ((_132 < _173) ? (_132 / CB1_m3.w) : exp2(log2((_132 + CB1_m4.z) / CB1_m4.y) * _163)); + float _181 = _144 ? _133 : ((_133 < _173) ? (_133 / CB1_m3.w) : exp2(log2((_133 + CB1_m4.z) / CB1_m4.y) * _163)); + float _182 = _144 ? _134 : ((_134 < _173) ? (_134 / CB1_m3.w) : exp2(log2((_134 + CB1_m4.z) / CB1_m4.y) * _163)); + float _264; + float _265; + float _266; + if (CB1_m5.x != 0u) { + uint _191 = cvt_f32_u32(CB0_m9.x); + float _252; + float _253; + float _254; + if (_191 == 1u) { + _252 = mad(log2(_182 + 1.0000000116860974230803549289703e-07f), CB0_m9.y, CB0_m9.z); + _253 = mad(log2(_181 + 1.0000000116860974230803549289703e-07f), CB0_m9.y, CB0_m9.z); + _254 = mad(log2(_180 + 1.0000000116860974230803549289703e-07f), CB0_m9.y, CB0_m9.z); + } else { + float _249; + float _250; + float _251; + if (_191 == 2u) { + float _228 = exp2(log2(mad(CB0_m9.y, _180, CB0_m9.z) * 9.9999997473787516355514526367188e-05f) * 0.1593017578125f); + float _229 = exp2(log2(mad(CB0_m9.y, _181, CB0_m9.z) * 9.9999997473787516355514526367188e-05f) * 0.1593017578125f); + float _230 = exp2(log2(mad(CB0_m9.y, _182, CB0_m9.z) * 9.9999997473787516355514526367188e-05f) * 0.1593017578125f); + _249 = exp2(log2(mad(_230, 18.8515625f, 0.8359375f) / mad(_230, 18.6875f, 1.0f)) * 78.84375f); + _250 = exp2(log2(mad(_229, 18.8515625f, 0.8359375f) / mad(_229, 18.6875f, 1.0f)) * 78.84375f); + _251 = exp2(log2(mad(_228, 18.8515625f, 0.8359375f) / mad(_228, 18.6875f, 1.0f)) * 78.84375f); + } else { + _249 = _182; + _250 = _181; + _251 = _180; + } + _252 = _249; + _253 = _250; + _254 = _251; + } + float4 _260 = T3.SampleLevel(S1, float3(_254, _253, _252), 0.0f); + _264 = _260.z; + _265 = _260.y; + _266 = _260.x; + } else { + _264 = _182; + _265 = _181; + _266 = _180; + } + float3 _267 = float3(_266, _265, _264); + float _290, _300, _310; + if (RENODX_TONE_MAP_TYPE == 0.f) { + float _284 = exp2(log2(abs((CB1_m0.x * dp3_f32(float3(0.6274039745330810546875f, 0.329281985759735107421875f, 0.043313600122928619384765625f), _267)) / CB1_m4.w)) * 0.1593017578125f); + _290 = exp2(log2(mad(_284, 18.8515625f, 0.8359375f) / mad(_284, 18.6875f, 1.0f)) * 78.84375f); + float _294 = exp2(log2(abs((CB1_m0.x * dp3_f32(float3(0.06909699738025665283203125f, 0.919539988040924072265625f, 0.0113612003624439239501953125f), _267)) / CB1_m4.w)) * 0.1593017578125f); + _300 = exp2(log2(mad(_294, 18.8515625f, 0.8359375f) / mad(_294, 18.6875f, 1.0f)) * 78.84375f); + float _304 = exp2(log2(abs((CB1_m0.x * dp3_f32(float3(0.01639159955084323883056640625f, 0.0880132019519805908203125f, 0.895595014095306396484375f), _267)) / CB1_m4.w)) * 0.1593017578125f); + _310 = exp2(log2(mad(_304, 18.8515625f, 0.8359375f) / mad(_304, 18.6875f, 1.0f)) * 78.84375f); + } else { + _267 = ApplyGammaCorrection(_267); + _267 = renodx::color::pq::EncodeSafe(renodx::color::bt2020::from::BT709(_267), RENODX_GRAPHICS_WHITE_NITS); + _290 = _267.x, _300 = _267.y, _310 = _267.z; + } + float _362; + float _363; + float _364; + if (CB0_m2.x != 0u) { + float _339 = mad(T1.Load(int4(uint3(uint2(cvt_f32_u32(gl_FragCoord.x) & 63u, cvt_f32_u32(gl_FragCoord.y) & 63u), (CB0_m2.y != 0u) ? (T0.Load(1840) & 31u) : 31u), 0u)).x, 2.0f, -1.0f); + float _356 = (CB0_m2.z != 0u) ? (float(int(((_339 < 0.0f) ? 4294967295u : 0u) + uint(_339 > 0.0f))) * (1.0f - sqrt(1.0f - abs(_339)))) : _339; + _362 = mad(_356, CB0_m3, _310); + _363 = mad(_356, CB0_m3, _300); + _364 = mad(_356, CB0_m3, _290); + } else { + _362 = _310; + _363 = _300; + _364 = _290; + } + SV_Target.x = _364; + SV_Target.y = _363; + SV_Target.z = _362; + SV_Target.w = _131.w; +} + +SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { + gl_FragCoord = stage_input.gl_FragCoord; + gl_FragCoord.w = 1.0 / gl_FragCoord.w; + TEXCOORD = stage_input.TEXCOORD; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.SV_Target = SV_Target; + return stage_output; +} diff --git a/src/games/rdr2/shared.h b/src/games/rdr2/shared.h new file mode 100644 index 0000000000..f1b51b92d7 --- /dev/null +++ b/src/games/rdr2/shared.h @@ -0,0 +1,86 @@ +#ifndef SRC_RDR2_SHARED_H_ +#define SRC_RDR2_SHARED_H_ + +// #define RENODX_TONE_MAP_TYPE 2.f +// #define RENODX_TONE_MAP_HUE_CORRECTION 1.f +// #define RENODX_PEAK_WHITE_NITS 400.f +// #define RENODX_DIFFUSE_WHITE_NITS 100.f +// #define RENODX_GRAPHICS_WHITE_NITS 140.f +// #define RENODX_GAMMA_CORRECTION 1u +// #define RENODX_TONE_MAP_EXPOSURE 1.f +// #define RENODX_TONE_MAP_HIGHLIGHTS 1.f +// #define RENODX_TONE_MAP_SHADOWS 1.f +// #define RENODX_TONE_MAP_CONTRAST 1.f +// #define RENODX_TONE_MAP_SATURATION 1.f +// #define RENODX_TONE_MAP_BLOWOUT 0.f + +// Must be 32bit aligned +// Should be 4x32 +struct ShaderInjectData { + float tone_map_type; + float peak_white_nits; + float diffuse_white_nits; + float graphics_white_nits; + float gamma_correction; + float tone_map_per_channel; + float tone_map_hue_correction; + float tone_map_blowout_restoration; + float tone_map_white_clip; + + float tone_map_exposure; + float tone_map_highlights; + float tone_map_shadows; + float tone_map_contrast; + float tone_map_saturation; + float tone_map_highlight_saturation; + float tone_map_blowout; + float tone_map_flare; + float tone_map_flare2; + + float color_grade_lut_strength; + + float unclamp_highlights; + float use_srgb_lut_encoding; +}; + +#ifndef __cplusplus +#if ((__SHADER_TARGET_MAJOR == 5 && __SHADER_TARGET_MINOR >= 1) || __SHADER_TARGET_MAJOR >= 6) +cbuffer shader_injection : register(b13, space50) { +#elif (__SHADER_TARGET_MAJOR < 5) || ((__SHADER_TARGET_MAJOR == 5) && (__SHADER_TARGET_MINOR < 1)) +cbuffer shader_injection : register(b13) { +#endif + ShaderInjectData shader_injection : packoffset(c0); +} + +#define COLOR_GRADE_LUT_SAMPLING_METHOD 1.f + +#define RENODX_TONE_MAP_TYPE shader_injection.tone_map_type +#define RENODX_PEAK_WHITE_NITS shader_injection.peak_white_nits +#define RENODX_DIFFUSE_WHITE_NITS shader_injection.diffuse_white_nits +#define RENODX_GRAPHICS_WHITE_NITS shader_injection.graphics_white_nits +#define RENODX_GAMMA_CORRECTION shader_injection.gamma_correction +#define RENODX_TONE_MAP_PER_CHANNEL shader_injection.tone_map_per_channel +#define RENODX_TONE_MAP_HUE_CORRECTION shader_injection.tone_map_hue_correction +#define RENODX_TONE_MAP_BLOWOUT_RESTORATION shader_injection.tone_map_blowout_restoration +#define RENODX_TONE_MAP_WHITE_CLIP shader_injection.tone_map_white_clip + +#define RENODX_TONE_MAP_EXPOSURE shader_injection.tone_map_exposure +#define RENODX_TONE_MAP_HIGHLIGHTS shader_injection.tone_map_highlights +#define RENODX_TONE_MAP_SHADOWS shader_injection.tone_map_shadows +#define RENODX_TONE_MAP_CONTRAST shader_injection.tone_map_contrast +#define RENODX_TONE_MAP_SATURATION shader_injection.tone_map_saturation +#define RENODX_TONE_MAP_HIGHLIGHT_SATURATION shader_injection.tone_map_highlight_saturation +#define RENODX_TONE_MAP_BLOWOUT shader_injection.tone_map_blowout +#define RENODX_TONE_MAP_FLARE shader_injection.tone_map_flare +#define RENODX_TONE_MAP_FLARE2 shader_injection.tone_map_flare2 + +#define RENODX_COLOR_GRADE_STRENGTH shader_injection.color_grade_lut_strength + +#define UNCLAMP_HIGHLIGHTS shader_injection.unclamp_highlights +#define USE_SRGB_LUT_ENCODING shader_injection.use_srgb_lut_encoding + +#include "../../shaders/renodx.hlsl" + +#endif + +#endif // SRC_RDR2_SHARED_H_ \ No newline at end of file diff --git a/src/games/rdr2/ui/calibration_image_0x832AC1BB.ps_5_1.hlsl b/src/games/rdr2/ui/calibration_image_0x832AC1BB.ps_5_1.hlsl new file mode 100644 index 0000000000..6dffb40f62 --- /dev/null +++ b/src/games/rdr2/ui/calibration_image_0x832AC1BB.ps_5_1.hlsl @@ -0,0 +1,85 @@ +#include "../common.hlsli" + +cbuffer CB0_buf : register(b17, space0) { + uint4 CB0_m0 : packoffset(c0); + uint4 CB0_m1 : packoffset(c1); + float4 CB0_m2 : packoffset(c2); +}; + +cbuffer CB1_buf : register(b18, space0) { + uint4 CB1_m0 : packoffset(c0); + uint2 CB1_m1 : packoffset(c1); + float2 CB1_m2 : packoffset(c1.z); +}; + +SamplerState S0 : register(s5, space0); +Texture2D T0 : register(t8, space0); + +static float4 SV_Position; +static float4 COLOR; +static float2 TEXCOORD; +static float4 SV_Target; + +struct SPIRV_Cross_Input { + float4 SV_Position : SV_Position; + float4 COLOR : COLOR0; + float2 TEXCOORD : TEXCOORD; +}; + +struct SPIRV_Cross_Output { + float4 SV_Target : SV_Target0; +}; + +float dp3_f32(float3 a, float3 b) { + precise float _50 = a.x * b.x; + return mad(a.z, b.z, mad(a.y, b.y, _50)); +} + +void frag_main() { + SV_Target.w = 1.0f; + + float4 _71 = T0.SampleLevel(S0, float2(TEXCOORD.x, TEXCOORD.y), 0.0f); + + if (RENODX_TONE_MAP_TYPE != 0.f) { + SV_Target.rgb = _71.rgb; + const float sdr_peak = 0.9525f; + SV_Target.rgb = InverseReinhardScalablePiecewise(SV_Target.rgb, sdr_peak, 0.4f); + + float peak_ratio = RENODX_PEAK_WHITE_NITS / RENODX_DIFFUSE_WHITE_NITS; + + if (RENODX_GAMMA_CORRECTION) { + peak_ratio = renodx::color::correct::Gamma(peak_ratio, true); + if (RENODX_TONE_MAP_TYPE != 1.f) { + SV_Target.rgb = ReinhardPiecewiseExtended(SV_Target.rgb, 99.1f, peak_ratio, 0.4f); + } + SV_Target.rgb = renodx::color::correct::GammaSafe(SV_Target.rgb); + SV_Target.rgb *= RENODX_DIFFUSE_WHITE_NITS / RENODX_GRAPHICS_WHITE_NITS; + SV_Target.rgb = renodx::color::correct::GammaSafe(SV_Target.rgb, true); + } else { + if (RENODX_TONE_MAP_TYPE != 1.f) { + SV_Target.rgb = ReinhardPiecewiseExtended(SV_Target.rgb, 99.1f, peak_ratio, 0.4f); + } + SV_Target.rgb *= RENODX_DIFFUSE_WHITE_NITS / RENODX_GRAPHICS_WHITE_NITS; + } + return; + } + + float _72 = _71.x; + float _93 = clamp((dp3_f32(float3(_72, _71.yz), float3(0.300000011920928955078125f, 0.589999973773956298828125f, 0.10999999940395355224609375f)) - CB0_m2.z) * (1.0f / (CB0_m2.w - CB0_m2.z)), 0.0f, 1.0f); + + bool boolean = (CB1_m1.y != 0u); // true = game, false = cinematic + float _106 = boolean ? ((CB1_m2.x * CB0_m2.y) + ((mad(_93, -2.0f, 3.0f) * (_93 * _93)) * mad(-CB1_m2.x, CB0_m2.y, CB1_m2.x))) + : 1.0f; + + SV_Target.x = (_72 * _106) * CB0_m2.x; + SV_Target.y = (_71.y * _106) * CB0_m2.x; + SV_Target.z = (_71.z * _106) * CB0_m2.x; +} + +SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { + TEXCOORD = stage_input.TEXCOORD; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.SV_Target = SV_Target; + return stage_output; +} diff --git a/src/games/rdr2/ui/calibration_white_0xA1D92D89.ps_5_1.hlsl b/src/games/rdr2/ui/calibration_white_0xA1D92D89.ps_5_1.hlsl new file mode 100644 index 0000000000..979a32830f --- /dev/null +++ b/src/games/rdr2/ui/calibration_white_0xA1D92D89.ps_5_1.hlsl @@ -0,0 +1,57 @@ +#include "../shared.h" + +cbuffer CB0_buf : register(b18, space0) { + float4 CB0_m0 : packoffset(c0); + uint4 CB0_m1 : packoffset(c1); + uint4 CB0_m2 : packoffset(c2); + float4 CB0_m3 : packoffset(c3); +}; + +SamplerState S0 : register(s5, space0); +Texture2D T0 : register(t8, space0); +Texture2D T1 : register(t91, space0); + +static float4 SV_Position; +static float4 COLOR; +static float2 TEXCOORD; +static float4 SV_Target; + +struct SPIRV_Cross_Input { + float4 SV_Position : SV_Position; + float4 COLOR : COLOR0; + float2 TEXCOORD : TEXCOORD0; +}; + +struct SPIRV_Cross_Output { + float4 SV_Target : SV_Target0; +}; + +void frag_main() { + float2 _52 = float2(TEXCOORD.x, TEXCOORD.y); + float4 _55 = T1.SampleLevel(S0, _52, 0.0f); + float _56 = _55.w; + + float peak_ratio = (CB0_m0.y / CB0_m0.x); + float maximum_ratio = (CB0_m3.w / CB0_m0.x); + if (RENODX_TONE_MAP_TYPE != 0.f) { + peak_ratio = RENODX_PEAK_WHITE_NITS / (RENODX_GRAPHICS_WHITE_NITS); + maximum_ratio = (CB0_m3.w / (RENODX_GRAPHICS_WHITE_NITS)); + if (RENODX_GAMMA_CORRECTION != 0.f) { + peak_ratio = renodx::color::correct::Gamma(peak_ratio, true); + maximum_ratio = renodx::color::correct::Gamma(maximum_ratio, true); + } + } + float _65 = (peak_ratio * _56) + (maximum_ratio * ((1.0f - _56) * T0.SampleLevel(S0, _52, 0.0f).w)); + SV_Target.x = _65; + SV_Target.y = _65; + SV_Target.z = _65; + SV_Target.w = 1.0f; +} + +SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { + TEXCOORD = stage_input.TEXCOORD; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.SV_Target = SV_Target; + return stage_output; +} diff --git a/src/games/rdr2/ui/ui_hud_0xCA8E18BF.ps_5_1.hlsl b/src/games/rdr2/ui/ui_hud_0xCA8E18BF.ps_5_1.hlsl new file mode 100644 index 0000000000..89405e1c72 --- /dev/null +++ b/src/games/rdr2/ui/ui_hud_0xCA8E18BF.ps_5_1.hlsl @@ -0,0 +1,123 @@ + +#include "../common.hlsli" + +struct anon_m { + float4 _m0; + uint4 _m1; + uint4 _m2; + uint4 _m3; + uint4 _m4; + uint3 _m5; +}; + +cbuffer CB0_buf : register(b22, space0) { + uint4 CB0_m0 : packoffset(c0); + uint4 CB0_m1 : packoffset(c1); + uint4 CB0_m2 : packoffset(c2); + uint4 CB0_m3 : packoffset(c3); + uint4 CB0_m4 : packoffset(c4); + uint4 CB0_m5 : packoffset(c5); + uint4 CB0_m6 : packoffset(c6); + float4 CB0_m7 : packoffset(c7); + float4 CB0_m8 : packoffset(c8); + float CB0_m9 : packoffset(c9); + uint CB0_m10 : packoffset(c9.y); + uint CB0_m11 : packoffset(c9.z); + uint CB0_m12 : packoffset(c9.w); + uint4 CB0_m13 : packoffset(c10); +}; + +cbuffer CB1_buf : register(b23, space0) { + float4 CB1_m0 : packoffset(c0); + uint4 CB1_m1 : packoffset(c1); + uint4 CB1_m2 : packoffset(c2); + float4 CB1_m3 : packoffset(c3); +}; + +ByteAddressBuffer T0 : register(t0, space0); +SamplerState S0 : register(s2, space0); +SamplerState S1 : register(s5, space0); +Texture2D T1 : register(t32, space0); +Texture3D T2 : register(t35, space0); + +static float4 SV_POSITION0; +static float4 COLOR0; +static float4 COLOR1; +static float2 TEXCOORD; +static float4 SV_Target; + +struct SPIRV_Cross_Input { + float4 SV_POSITION0 : SV_POSITION0; + float4 COLOR0 : COLOR0; + float4 COLOR1 : COLOR1; + float2 TEXCOORD : TEXCOORD0; +}; + +struct SPIRV_Cross_Output { + float4 SV_Target : SV_Target0; +}; + +float dp3_f32(float3 a, float3 b) { + precise float _83 = a.x * b.x; + return mad(a.z, b.z, mad(a.y, b.y, _83)); +} + +void frag_main() { + float4 _104 = T1.Sample(S1, float2(TEXCOORD.x, TEXCOORD.y)); + float _123 = mad(_104.x, CB0_m8.x, CB0_m7.x); + float _124 = mad(_104.y, CB0_m8.y, CB0_m7.y); + float _125 = mad(_104.z, CB0_m8.z, CB0_m7.z); + float _129 = mad(_104.w, CB0_m8.w, CB0_m7.w) * COLOR1.w; + float _146; + float _147; + float _148; + if (CB0_m13.x != 0u) { + float4 _142 = T2.SampleLevel(S0, float3(_123, _124, _125), 0.0f); + _146 = _142.z; + _147 = _142.y; + _148 = _142.x; + } else { + _146 = _125; + _147 = _124; + _148 = _123; + } + float _200; + float _201; + float _202; + if (CB0_m10 != 0u) { + float3 _154 = float3(_148, _147, _146); + if (RENODX_TONE_MAP_TYPE == 0.f) { + float _173 = exp2(log2(abs((dp3_f32(float3(0.6274039745330810546875f, 0.329281985759735107421875f, 0.043313600122928619384765625f), _154) * CB1_m0.x) / CB1_m3.w)) * 0.1593017578125f); + float _183 = exp2(log2(abs((dp3_f32(float3(0.06909699738025665283203125f, 0.919539988040924072265625f, 0.0113612003624439239501953125f), _154) * CB1_m0.x) / CB1_m3.w)) * 0.1593017578125f); + float _193 = exp2(log2(abs((dp3_f32(float3(0.01639159955084323883056640625f, 0.0880132019519805908203125f, 0.895595014095306396484375f), _154) * CB1_m0.x) / CB1_m3.w)) * 0.1593017578125f); + _200 = exp2(log2(mad(_193, 18.8515625f, 0.8359375f) / mad(_193, 18.6875f, 1.0f)) * 78.84375f); + _201 = exp2(log2(mad(_183, 18.8515625f, 0.8359375f) / mad(_183, 18.6875f, 1.0f)) * 78.84375f); + _202 = exp2(log2(mad(_173, 18.8515625f, 0.8359375f) / mad(_173, 18.6875f, 1.0f)) * 78.84375f); + } else { + _154 = ApplyGammaCorrection(_154); + _154 = renodx::color::pq::EncodeSafe(renodx::color::bt2020::from::BT709(_154), RENODX_GRAPHICS_WHITE_NITS); + _200 = _154.x, _201 = _154.y, _202 = _154.z; + } + } else { + _200 = _146; + _201 = _147; + _202 = _148; + } + bool _205 = CB0_m9 == 0.0f; + float _216 = _129 * asfloat(T0.Load(12)); + SV_Target.z = (asfloat(T0.Load(12)) != 1.0f) ? (_216 * _216) : (_205 ? _200 : (_129 * _200)); + float _224 = _129 * asfloat(T0.Load(0)); + float _230 = (CB0_m11 != 0u) ? (_224 * asfloat(CB0_m11)) : _224; + SV_Target.w = clamp((CB0_m13.y != 0u) ? ((CB0_m12 != 0u) ? ((cos(_230 * 3.1415927410125732421875f) - 1.0f) * (-0.5f)) : _230) : _224, 0.0f, 1.0f); + SV_Target.x = _205 ? _202 : (_129 * _202); + SV_Target.y = _205 ? _201 : (_129 * _201); +} + +SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { + COLOR1 = stage_input.COLOR1; + TEXCOORD = stage_input.TEXCOORD; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.SV_Target = SV_Target; + return stage_output; +} diff --git a/src/games/rdr2/ui/ui_text_0x2E866023.ps_5_1.hlsl b/src/games/rdr2/ui/ui_text_0x2E866023.ps_5_1.hlsl new file mode 100644 index 0000000000..175d9a4a7a --- /dev/null +++ b/src/games/rdr2/ui/ui_text_0x2E866023.ps_5_1.hlsl @@ -0,0 +1,119 @@ +#include "../common.hlsli" + +struct anon_m { + float4 _m0; + uint4 _m1; + uint4 _m2; + uint4 _m3; + uint4 _m4; + uint3 _m5; +}; + +cbuffer CB0_buf : register(b22, space0) { + uint4 CB0_m0 : packoffset(c0); + uint4 CB0_m1 : packoffset(c1); + uint4 CB0_m2 : packoffset(c2); + uint4 CB0_m3 : packoffset(c3); + uint4 CB0_m4 : packoffset(c4); + uint4 CB0_m5 : packoffset(c5); + uint4 CB0_m6 : packoffset(c6); + float4 CB0_m7 : packoffset(c7); + float4 CB0_m8 : packoffset(c8); + float CB0_m9 : packoffset(c9); + uint CB0_m10 : packoffset(c9.y); + uint CB0_m11 : packoffset(c9.z); + uint CB0_m12 : packoffset(c9.w); + uint4 CB0_m13 : packoffset(c10); +}; + +cbuffer CB1_buf : register(b23, space0) { + float4 CB1_m0 : packoffset(c0); + uint4 CB1_m1 : packoffset(c1); + uint4 CB1_m2 : packoffset(c2); + float4 CB1_m3 : packoffset(c3); +}; + +ByteAddressBuffer T0 : register(t0, space0); +SamplerState S0 : register(s2, space0); +SamplerState S1 : register(s5, space0); +Texture2D T1 : register(t32, space0); +Texture3D T2 : register(t35, space0); + +static float4 SV_Position; +static float2 TEXCOORD; +static float4 COLOR; +static float4 SV_Target; + +struct SPIRV_Cross_Input { + float4 SV_Position : SV_Position; + float2 TEXCOORD : TEXCOORD0; + float4 COLOR : COLOR0; +}; + +struct SPIRV_Cross_Output { + float4 SV_Target : SV_Target0; +}; + +float dp3_f32(float3 a, float3 b) { + precise float _83 = a.x * b.x; + return mad(a.z, b.z, mad(a.y, b.y, _83)); +} + +void frag_main() { + float _117 = mad(COLOR.x, CB0_m8.x, CB0_m7.x); + float _118 = mad(COLOR.y, CB0_m8.y, CB0_m7.y); + float _119 = mad(COLOR.z, CB0_m8.z, CB0_m7.z); + float4 _130 = T1.Sample(S1, float2(TEXCOORD.x, TEXCOORD.y)); + float _132 = mad(COLOR.w, CB0_m8.w, CB0_m7.w) * _130.w; + float _149; + float _150; + float _151; + if (CB0_m13.x != 0u) { + float4 _145 = T2.SampleLevel(S0, float3(_117, _118, _119), 0.0f); + _149 = _145.z; + _150 = _145.y; + _151 = _145.x; + } else { + _149 = _119; + _150 = _118; + _151 = _117; + } + float _203; + float _204; + float _205; + if (CB0_m10 != 0u) { + float3 _157 = float3(_151, _150, _149); + if (RENODX_TONE_MAP_TYPE == 0.f) { + float _176 = exp2(log2(abs((dp3_f32(float3(0.6274039745330810546875f, 0.329281985759735107421875f, 0.043313600122928619384765625f), _157) * CB1_m0.x) / CB1_m3.w)) * 0.1593017578125f); + float _186 = exp2(log2(abs((dp3_f32(float3(0.06909699738025665283203125f, 0.919539988040924072265625f, 0.0113612003624439239501953125f), _157) * CB1_m0.x) / CB1_m3.w)) * 0.1593017578125f); + float _196 = exp2(log2(abs((dp3_f32(float3(0.01639159955084323883056640625f, 0.0880132019519805908203125f, 0.895595014095306396484375f), _157) * CB1_m0.x) / CB1_m3.w)) * 0.1593017578125f); + _203 = exp2(log2(mad(_196, 18.8515625f, 0.8359375f) / mad(_196, 18.6875f, 1.0f)) * 78.84375f); + _204 = exp2(log2(mad(_186, 18.8515625f, 0.8359375f) / mad(_186, 18.6875f, 1.0f)) * 78.84375f); + _205 = exp2(log2(mad(_176, 18.8515625f, 0.8359375f) / mad(_176, 18.6875f, 1.0f)) * 78.84375f); + } else { + _157 = renodx::color::pq::EncodeSafe(renodx::color::bt2020::from::BT709(ApplyGammaCorrection(_157)), RENODX_GRAPHICS_WHITE_NITS); + _203 = _157.x, _204 = _157.y, _205 = _157.z; + } + } else { + _203 = _149; + _204 = _150; + _205 = _151; + } + bool _208 = CB0_m9 == 0.0f; + float _219 = _132 * asfloat(T0.Load(12)); + SV_Target.z = (asfloat(T0.Load(12)) != 1.0f) ? (_219 * _219) : (_208 ? _203 : (_132 * _203)); + float _227 = _132 * asfloat(T0.Load(0)); + float _233 = (CB0_m11 != 0u) ? (_227 * asfloat(CB0_m11)) : _227; + SV_Target.w = clamp((CB0_m13.y != 0u) ? ((CB0_m12 != 0u) ? ((cos(_233 * 3.1415927410125732421875f) - 1.0f) * (-0.5f)) : _233) : _227, 0.0f, 1.0f); + SV_Target.x = _208 ? _205 : (_132 * _205); + SV_Target.y = _208 ? _204 : (_132 * _204); +} + +SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { + TEXCOORD = stage_input.TEXCOORD; + COLOR = stage_input.COLOR; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.SV_Target = SV_Target; + return stage_output; +} From 4574b93e393f4be6a19c74fd1fba3ef093f16601 Mon Sep 17 00:00:00 2001 From: Musa Haji Date: Thu, 11 Sep 2025 21:05:03 -0400 Subject: [PATCH 02/30] fix(rdr2): fix tooltips and sliders, clean up addon.cpp --- src/games/rdr2/addon.cpp | 46 +++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/src/games/rdr2/addon.cpp b/src/games/rdr2/addon.cpp index 31b36e465b..670955fe29 100644 --- a/src/games/rdr2/addon.cpp +++ b/src/games/rdr2/addon.cpp @@ -120,7 +120,7 @@ renodx::utils::settings::Settings settings = { .tooltip = "Restores color blowout from per-channel grading.", .min = 0.f, .max = 100.f, - .is_enabled = []() { return shader_injection.tone_map_type != 0.f && shader_injection.tone_map_per_channel == 0.f; }, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, .parse = [](float value) { return value * 0.01f; }, }, new renodx::utils::settings::Setting{ @@ -356,15 +356,20 @@ void OnPresetOff() { }); } +bool fired_on_init_swapchain = false; + void OnInitSwapchain(reshade::api::swapchain* swapchain, bool resize) { + if (fired_on_init_swapchain) return; + fired_on_init_swapchain = true; auto peak = renodx::utils::swapchain::GetPeakNits(swapchain); - if (peak.has_value()) { - settings[1]->default_value = peak.value(); - } else { - settings[1]->default_value = 1000.f; + if (!peak.has_value()) { + peak = 1000.f; } + settings[1]->default_value = peak.value(); } +bool initialized = false; + } // namespace extern "C" __declspec(dllexport) constexpr const char* NAME = "RenoDX"; @@ -375,25 +380,14 @@ BOOL APIENTRY DllMain(HMODULE h_module, DWORD fdw_reason, LPVOID lpv_reserved) { case DLL_PROCESS_ATTACH: if (!reshade::register_addon(h_module)) return FALSE; - renodx::mods::shader::force_pipeline_cloning = true; - renodx::mods::shader::expected_constant_buffer_index = 13; - renodx::mods::shader::expected_constant_buffer_space = 50; - - // renodx::mods::swapchain::use_resource_cloning = true; - // renodx::mods::swapchain::swap_chain_proxy_vertex_shader = __swap_chain_proxy_vertex_shader; - // renodx::mods::swapchain::swap_chain_proxy_pixel_shader = __swap_chain_proxy_pixel_shader; - - // renodx::mods::swapchain::swap_chain_upgrade_targets.push_back( - // { - // .old_format = reshade::api::format::r11g11b10_float, - // .new_format = reshade::api::format::r16g16b16a16_float, - // .use_resource_view_cloning = true, - // .dimensions = {.width = renodx::mods::swapchain::SwapChainUpgradeTarget::BACK_BUFFER, .height = renodx::mods::swapchain::SwapChainUpgradeTarget::BACK_BUFFER}, - // .usage_include = reshade::api::resource_usage::render_target, - // }); - - reshade::register_event(OnInitSwapchain); // peak nits + if (!initialized) { + renodx::mods::shader::force_pipeline_cloning = true; + renodx::mods::shader::allow_multiple_push_constants = true; + renodx::mods::shader::expected_constant_buffer_index = 13; + renodx::mods::shader::expected_constant_buffer_space = 50; + } + initialized = true; break; case DLL_PROCESS_DETACH: reshade::unregister_event(OnInitSwapchain); // peak nits @@ -403,7 +397,11 @@ BOOL APIENTRY DllMain(HMODULE h_module, DWORD fdw_reason, LPVOID lpv_reserved) { renodx::utils::settings::Use(fdw_reason, &settings, &OnPresetOff); renodx::mods::shader::Use(fdw_reason, custom_shaders, &shader_injection); - // renodx::mods::swapchain::Use(fdw_reason); + + if (fdw_reason == DLL_PROCESS_ATTACH) { + // Run check after mods::swapchain + reshade::register_event(OnInitSwapchain); // peak nits + } return TRUE; } \ No newline at end of file From bc68a80f2ba398b8046e42402d005d84f4e09a0c Mon Sep 17 00:00:00 2001 From: Musa Haji Date: Fri, 12 Sep 2025 22:44:38 -0400 Subject: [PATCH 03/30] feat(rdr2): add vignette, film grain, recommended settings --- src/games/rdr2/addon.cpp | 60 ++++++++++++++++++- src/games/rdr2/common.hlsli | 15 ++++- .../rdr2/lut/tm_day_0x1D1EEAC6.ps_5_1.hlsl | 4 +- .../rdr2/lut/tm_night_0xBF7C33C4.ps_5_1.hlsl | 4 +- src/games/rdr2/shared.h | 8 +++ 5 files changed, 84 insertions(+), 7 deletions(-) diff --git a/src/games/rdr2/addon.cpp b/src/games/rdr2/addon.cpp index 670955fe29..782b5f3c1f 100644 --- a/src/games/rdr2/addon.cpp +++ b/src/games/rdr2/addon.cpp @@ -13,10 +13,9 @@ #include -#include #include "../../mods/shader.hpp" -#include "../../mods/swapchain.hpp" #include "../../utils/date.hpp" +#include "../../utils/random.hpp" #include "../../utils/settings.hpp" #include "./shared.h" @@ -33,6 +32,15 @@ const std::unordered_map MATCH_SDR_VALUES = { {"UseSRGBLUTEncoding", 0.f}, }; +const std::unordered_map RECOMMENDED_VALUES = { + {"GammaCorrection", 0.f}, + {"ToneMapBlowoutRestoration", 100.f}, + {"ColorGradeExposure", 0.8f}, + {"ColorGradeHighlights", 57.f}, + {"ColorGradeHighlightSaturation", 60.f}, + {"ColorGradeFlare2", 38.f}, +}; + renodx::utils::settings::Settings settings = { new renodx::utils::settings::Setting{ .key = "ToneMapType", @@ -237,6 +245,25 @@ renodx::utils::settings::Settings settings = { .is_enabled = []() { return shader_injection.tone_map_type != 0; }, .parse = [](float value) { return value * 0.01f; }, }, + new renodx::utils::settings::Setting{ + .key = "FxVignette", + .binding = &shader_injection.custom_vignette, + .default_value = 100.f, + .label = "Vignette", + .section = "Effects", + .max = 100.f, + .parse = [](float value) { return value * 0.01f; }, + }, + new renodx::utils::settings::Setting{ + .key = "FxGrainStrength", + .binding = &shader_injection.custom_grain_strength, + .default_value = 0.f, + .label = "Film Grain", + .section = "Effects", + .max = 100.f, + .is_enabled = []() { return shader_injection.tone_map_type != 0; }, + .parse = [](float value) { return value * 0.02f; }, + }, new renodx::utils::settings::Setting{ .key = "UnclampLighting", .binding = &shader_injection.unclamp_highlights, @@ -286,6 +313,24 @@ renodx::utils::settings::Settings settings = { } }, }, + new renodx::utils::settings::Setting{ + .value_type = renodx::utils::settings::SettingValueType::BUTTON, + .label = "Recommended Settings", + .section = "Options", + .group = "button-line-1", + .on_change = []() { + for (auto* setting : settings) { + if (setting->key.empty()) continue; + if (!setting->can_reset) continue; + + if (RECOMMENDED_VALUES.contains(setting->key)) { + renodx::utils::settings::UpdateSetting(setting->key, RECOMMENDED_VALUES.at(setting->key)); + } else { + renodx::utils::settings::UpdateSetting(setting->key, setting->default_value); + } + } + }, + }, new renodx::utils::settings::Setting{ .value_type = renodx::utils::settings::SettingValueType::BUTTON, .label = "Discord", @@ -329,6 +374,12 @@ renodx::utils::settings::Settings settings = { .label = std::string("Build: ") + renodx::utils::date::ISO_DATE_TIME, .section = "About", }, + new renodx::utils::settings::Setting{ + .value_type = renodx::utils::settings::SettingValueType::TEXT, + .label = std::string("- Requires HDR on in game"), + .section = "About", + }, + }; void OnPresetOff() { @@ -351,6 +402,8 @@ void OnPresetOff() { {"ColorGradeFlare", 0.f}, {"ColorGradeFlare2", 0.f}, {"ColorGradeLUTStrength", 100.f}, + {"FxVignette", 100.f}, + {"FxGrainStrength", 0.f}, {"UnclampLighting", 0.f}, {"UseSRGBLUTEncoding", 0.f}, }); @@ -387,6 +440,8 @@ BOOL APIENTRY DllMain(HMODULE h_module, DWORD fdw_reason, LPVOID lpv_reserved) { renodx::mods::shader::expected_constant_buffer_space = 50; } + renodx::utils::random::binds.push_back(&shader_injection.custom_random); // film grain + initialized = true; break; case DLL_PROCESS_DETACH: @@ -397,6 +452,7 @@ BOOL APIENTRY DllMain(HMODULE h_module, DWORD fdw_reason, LPVOID lpv_reserved) { renodx::utils::settings::Use(fdw_reason, &settings, &OnPresetOff); renodx::mods::shader::Use(fdw_reason, custom_shaders, &shader_injection); + renodx::utils::random::Use(fdw_reason); // film grain if (fdw_reason == DLL_PROCESS_ATTACH) { // Run check after mods::swapchain diff --git a/src/games/rdr2/common.hlsli b/src/games/rdr2/common.hlsli index 546d625cb5..1958b92215 100644 --- a/src/games/rdr2/common.hlsli +++ b/src/games/rdr2/common.hlsli @@ -380,10 +380,23 @@ float3 ScaleScene(float3 color) { return color; } -float3 FinalizeTonemap(float3 color) { +float3 ApplyGrain(float3 color, float2 texcoord) { + if (CUSTOM_GRAIN_STRENGTH != 0.f) { + color = renodx::effects::ApplyFilmGrain( + color, + texcoord, + CUSTOM_RANDOM, + CUSTOM_GRAIN_STRENGTH * 0.03f, + 1.f); + } + return color; +} + +float3 FinalizeTonemap(float3 color, float2 texcoord) { if (RENODX_TONE_MAP_TYPE != 0.f) { color = renodx::color::srgb::DecodeSafe(color); color = ApplyDisplayMap(color); + color = ApplyGrain(color, texcoord); color = ScaleScene(color); } return color; diff --git a/src/games/rdr2/lut/tm_day_0x1D1EEAC6.ps_5_1.hlsl b/src/games/rdr2/lut/tm_day_0x1D1EEAC6.ps_5_1.hlsl index 236de4a501..eaa51b7380 100644 --- a/src/games/rdr2/lut/tm_day_0x1D1EEAC6.ps_5_1.hlsl +++ b/src/games/rdr2/lut/tm_day_0x1D1EEAC6.ps_5_1.hlsl @@ -251,7 +251,7 @@ void frag_main() { } float2 _668 = float2(TEXCOORD.x - asfloat(CB0_m[53u].x), TEXCOORD.y - asfloat(CB0_m[53u].y)); float2 _682 = float2(dp2_f32(float2(asfloat(CB0_m[55u].x), asfloat(CB0_m[55u].y)), _668) * asfloat(CB0_m[53u].z), dp2_f32(float2(asfloat(CB0_m[55u].z), asfloat(CB0_m[55u].w)), _668) * asfloat(CB0_m[53u].w)); - float _692 = max((dp2_f32(_682, _682) - asfloat(CB0_m[56u].x)) * asfloat(CB0_m[56u].w), 0.0f); + float _692 = max((dp2_f32(_682, _682) - asfloat(CB0_m[56u].x)) * asfloat(CB0_m[56u].w) * CUSTOM_VIGNETTE, 0.0f); float _704 = (_692 < 1.0f) ? (1.0f - exp2(_692 * (-10.0f))) : ((((_692 - 1.0f) > 0.0f) ? exp2((_692 - 2.0f) * 10.0f) : 0.0f) + 0.9980499744415283203125f); float _718 = asfloat(CB0_m[54u].w); bool _728 = CB0_m[54u].w != 0u; @@ -499,7 +499,7 @@ void frag_main() { SV_Target.z = _881 ? _1395 : (_1395); SV_Target.w = _881 ? _1294 : clamp(_1294, 0.0f, 1.0f); - SV_Target.rgb = FinalizeTonemap(SV_Target.rgb); + SV_Target.rgb = FinalizeTonemap(SV_Target.rgb, TEXCOORD.xy); } SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { diff --git a/src/games/rdr2/lut/tm_night_0xBF7C33C4.ps_5_1.hlsl b/src/games/rdr2/lut/tm_night_0xBF7C33C4.ps_5_1.hlsl index 1037bfce61..6bb8f72f23 100644 --- a/src/games/rdr2/lut/tm_night_0xBF7C33C4.ps_5_1.hlsl +++ b/src/games/rdr2/lut/tm_night_0xBF7C33C4.ps_5_1.hlsl @@ -246,7 +246,7 @@ void frag_main() { } float2 _661 = float2(TEXCOORD.x - asfloat(CB0_m[53u].x), TEXCOORD.y - asfloat(CB0_m[53u].y)); float2 _675 = float2(dp2_f32(float2(asfloat(CB0_m[55u].x), asfloat(CB0_m[55u].y)), _661) * asfloat(CB0_m[53u].z), dp2_f32(float2(asfloat(CB0_m[55u].z), asfloat(CB0_m[55u].w)), _661) * asfloat(CB0_m[53u].w)); - float _685 = max((dp2_f32(_675, _675) - asfloat(CB0_m[56u].x)) * asfloat(CB0_m[56u].w), 0.0f); + float _685 = max((dp2_f32(_675, _675) - asfloat(CB0_m[56u].x)) * asfloat(CB0_m[56u].w) * CUSTOM_VIGNETTE, 0.0f); float _697 = (_685 < 1.0f) ? (1.0f - exp2(_685 * (-10.0f))) : ((((_685 - 1.0f) > 0.0f) ? exp2((_685 - 2.0f) * 10.0f) : 0.0f) + 0.9980499744415283203125f); float _711 = asfloat(CB0_m[54u].w); bool _721 = CB0_m[54u].w != 0u; @@ -497,7 +497,7 @@ void frag_main() { SV_Target.z = _874 ? _1388 : (_1388); SV_Target.w = _874 ? _1287 : clamp(_1287, 0.0f, 1.0f); - SV_Target.rgb = FinalizeTonemap(SV_Target.rgb); + SV_Target.rgb = FinalizeTonemap(SV_Target.rgb, TEXCOORD.xy); } SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { diff --git a/src/games/rdr2/shared.h b/src/games/rdr2/shared.h index f1b51b92d7..1ef9f02f3d 100644 --- a/src/games/rdr2/shared.h +++ b/src/games/rdr2/shared.h @@ -39,6 +39,10 @@ struct ShaderInjectData { float color_grade_lut_strength; + float custom_vignette; + float custom_random; + float custom_grain_strength; + float unclamp_highlights; float use_srgb_lut_encoding; }; @@ -76,6 +80,10 @@ cbuffer shader_injection : register(b13) { #define RENODX_COLOR_GRADE_STRENGTH shader_injection.color_grade_lut_strength +#define CUSTOM_VIGNETTE shader_injection.custom_vignette +#define CUSTOM_GRAIN_STRENGTH shader_injection.custom_grain_strength +#define CUSTOM_RANDOM shader_injection.custom_random + #define UNCLAMP_HIGHLIGHTS shader_injection.unclamp_highlights #define USE_SRGB_LUT_ENCODING shader_injection.use_srgb_lut_encoding From 9c684141a0198a5ee823b0c751c707e41197bfff Mon Sep 17 00:00:00 2001 From: Musa Haji Date: Mon, 15 Sep 2025 22:07:11 -0400 Subject: [PATCH 04/30] chore(rdr2/shaders): add unfinished and unused hlslx shader sources for reference These shaders are not yet in use or integrated; added for archival and future development. --- src/games/rdr2/lut/0x4FF4CC58.ps_5_1.hlslx | 586 ++++++++++++++++++ src/games/rdr2/lut/0x6F990851.ps_5_1.hlslx | 581 +++++++++++++++++ src/games/rdr2/lut/0x8704771A.ps_5_1.hlslx | 480 ++++++++++++++ src/games/rdr2/lut/0x9CCF855F.ps_5_1.hlslx | 379 +++++++++++ src/games/rdr2/lut/0xFC787CD2.ps_5_1.hlslx | 480 ++++++++++++++ .../lut/lut_no_tm_0x737EB461.ps_5_1.hlslx | 86 +++ src/games/rdr2/lut/tm_0xD603CA55.ps_5_1.hlslx | 104 ++++ .../rdr2/lut/tm_pause_0xDBCF46F8.ps_5_1.hlslx | 193 ++++++ src/games/rdr2/output/0x1096351C.ps_5_1.hlslx | 107 ++++ src/games/rdr2/output/0x157288EC.ps_5_1.hlslx | 110 ++++ src/games/rdr2/output/0x20C410CB.ps_5_1.hlslx | 110 ++++ src/games/rdr2/output/0x737584AF.ps_5_1.hlslx | 586 ++++++++++++++++++ src/games/rdr2/output/0x969F0551.cs_5_1.hlslx | 67 ++ src/games/rdr2/output/0x9DF4FCED.ps_5_1.hlslx | 111 ++++ src/games/rdr2/output/0xA2BCE028.cs_5_1.hlslx | 107 ++++ src/games/rdr2/output/0xD99B0510.ps_5_0.hlslx | 46 ++ src/games/rdr2/output/0xE3F0F5BF.cs_5_1.hlslx | 144 +++++ src/games/rdr2/ui/ui_0x1A0D957F.ps_5_1.hlslx | 114 ++++ .../ui_button_icons_0xEE341D7A.ps_5_1.hlslx | 118 ++++ 19 files changed, 4509 insertions(+) create mode 100644 src/games/rdr2/lut/0x4FF4CC58.ps_5_1.hlslx create mode 100644 src/games/rdr2/lut/0x6F990851.ps_5_1.hlslx create mode 100644 src/games/rdr2/lut/0x8704771A.ps_5_1.hlslx create mode 100644 src/games/rdr2/lut/0x9CCF855F.ps_5_1.hlslx create mode 100644 src/games/rdr2/lut/0xFC787CD2.ps_5_1.hlslx create mode 100644 src/games/rdr2/lut/lut_no_tm_0x737EB461.ps_5_1.hlslx create mode 100644 src/games/rdr2/lut/tm_0xD603CA55.ps_5_1.hlslx create mode 100644 src/games/rdr2/lut/tm_pause_0xDBCF46F8.ps_5_1.hlslx create mode 100644 src/games/rdr2/output/0x1096351C.ps_5_1.hlslx create mode 100644 src/games/rdr2/output/0x157288EC.ps_5_1.hlslx create mode 100644 src/games/rdr2/output/0x20C410CB.ps_5_1.hlslx create mode 100644 src/games/rdr2/output/0x737584AF.ps_5_1.hlslx create mode 100644 src/games/rdr2/output/0x969F0551.cs_5_1.hlslx create mode 100644 src/games/rdr2/output/0x9DF4FCED.ps_5_1.hlslx create mode 100644 src/games/rdr2/output/0xA2BCE028.cs_5_1.hlslx create mode 100644 src/games/rdr2/output/0xD99B0510.ps_5_0.hlslx create mode 100644 src/games/rdr2/output/0xE3F0F5BF.cs_5_1.hlslx create mode 100644 src/games/rdr2/ui/ui_0x1A0D957F.ps_5_1.hlslx create mode 100644 src/games/rdr2/ui/ui_button_icons_0xEE341D7A.ps_5_1.hlslx diff --git a/src/games/rdr2/lut/0x4FF4CC58.ps_5_1.hlslx b/src/games/rdr2/lut/0x4FF4CC58.ps_5_1.hlslx new file mode 100644 index 0000000000..4ecfb05eca --- /dev/null +++ b/src/games/rdr2/lut/0x4FF4CC58.ps_5_1.hlslx @@ -0,0 +1,586 @@ +struct anon_m { + int _m0; + float3 _m1; + float4 _m2; + float4 _m3; + float2 _m4; + uint4 _m5; + uint4 _m6; + uint4 _m7; + uint4 _m8; + uint4 _m9; + uint4 _m10; + uint4 _m11; + uint4 _m12; + uint4 _m13; + uint4 _m14; + uint4 _m15; + uint _m16; +}; + +cbuffer CB0_buf : register(b0, space0) { + uint4 CB0_m[88] : packoffset(c0); +}; + +cbuffer CB1_buf : register(b1, space0) { + uint4 CB1_m0 : packoffset(c0); + uint2 CB1_m1 : packoffset(c1); + float2 CB1_m2 : packoffset(c1.z); + float4 CB1_m3 : packoffset(c2); + float4 CB1_m4 : packoffset(c3); +}; + +ByteAddressBuffer T0 : register(t6, space0); +ByteAddressBuffer T1 : register(t7, space0); +ByteAddressBuffer T28 : register(t34, space0); +SamplerState S0 : register(s2, space0); +SamplerState S1 : register(s3, space0); +SamplerState S2 : register(s4, space0); +SamplerState S3 : register(s5, space0); +Texture2DArray T2 : register(t8, space0); +Texture2D T3 : register(t9, space0); +Texture2D T4 : register(t10, space0); +Texture2D T5 : register(t11, space0); +Texture2D T6 : register(t12, space0); +Texture1D T7 : register(t13, space0); +Texture2D T8 : register(t14, space0); +Texture2D T9 : register(t15, space0); +Texture2D T10 : register(t16, space0); +Texture2D T11 : register(t17, space0); +Texture2D T12 : register(t18, space0); +Texture2D T13 : register(t19, space0); +Texture2D T14 : register(t20, space0); +Texture2D T15 : register(t21, space0); +Texture2D T16 : register(t22, space0); +Texture2D T17 : register(t23, space0); +Texture2D T18 : register(t24, space0); +Texture2D T19 : register(t25, space0); +Texture2D T20 : register(t26, space0); +Texture2D T21 : register(t27, space0); +Texture2D T22 : register(t28, space0); +Texture2D T23 : register(t29, space0); +Texture2D T24 : register(t30, space0); +Texture2D T25 : register(t31, space0); +Texture2D T26 : register(t32, space0); +Buffer T27 : register(t33, space0); + +static float4 gl_FragCoord; +static float4 TEXCOORD; +static float TEXCOORD1; +static float4 SV_Target; + +struct SPIRV_Cross_Input { + float4 TEXCOORD : TEXCOORD1; + float TEXCOORD1 : TEXCOORD2; + float4 gl_FragCoord : SV_Position; +}; + +struct SPIRV_Cross_Output { + float4 SV_Target : SV_Target0; +}; + +float dp2_f32(float2 a, float2 b) { + precise float _302 = a.x * b.x; + return mad(a.y, b.y, _302); +} + +int cvt_f32_i32(float v) { + return isnan(v) ? 0 : ((v < (-2147483648.0f)) ? int(0x80000000) : ((v > 2147483520.0f) ? 2147483647 : int(v))); +} + +float dp3_f32(float3 a, float3 b) { + precise float _277 = a.x * b.x; + return mad(a.z, b.z, mad(a.y, b.y, _277)); +} + +uint cvt_f32_u32(float v) { + return (v > 4294967040.0f) ? 4294967295u : uint(max(v, 0.0f)); +} + +void frag_main() { + float2 _315 = float2(TEXCOORD.x, TEXCOORD.y); + float4 _318 = T23.Sample(S0, _315); + float _319 = _318.x; + float _320 = _318.y; + float2 _322 = float2(_319, _320); + float _331 = asfloat(CB0_m[0u].w) + 1.0f; + float _335 = asfloat(CB0_m[0u].z); + float _336 = _335 / (_331 - T5.SampleLevel(S0, _322, 0.0f).x); + float4 _340 = T8.Sample(S3, _322); + float _348 = asfloat(T0.Load(16)); + float4 _364 = T26.SampleLevel(S0, float2(_319 * asfloat(CB0_m[82u].x), _320 * asfloat(CB0_m[82u].y)), 0.0f); + float _367 = _364.z; + float _537; + float _538; + float _539; + float _540; + if ((_367 >= 1.0f) && (_364.w < 2.0f)) { + float4 _377 = T25.SampleLevel(S0, _322, 0.0f); + float _382 = asfloat(CB0_m[20u].x); + float2 _385 = float2(_377.x * _382, _377.y * _382); + float _390 = asfloat(CB0_m[20u].z); + float _391 = min(sqrt(dp2_f32(_385, _385)), _390); + float _394 = min(_367, 2.0f); + float _398 = min(_394 + 1.0f, 2.0f); + int _399 = cvt_f32_i32(_398); + float _406 = ((_364.x / _367) * _394) * asfloat(CB0_m[66u].x); + float _407 = asfloat(CB0_m[66u].y) * (_394 * (_364.y / _367)); + float _409 = trunc(_398) - 0.5f; + float _410 = _409 / _394; + float _412; + float _415; + float _417; + float _419; + _412 = 0.0f; + _415 = 0.0f; + _417 = 0.0f; + _419 = 0.0f; + float _413; + float _416; + float _418; + float _420; + uint _422; + uint _421 = 0u; + for (;;) { + int _425 = int(_421); + if (_399 <= _425) { + break; + } + float _429 = float(_425); + float _432 = (_429 + 0.5f) / _409; + float2 _435 = float2(mad(_406, _432, _319), mad(_432, _407, _320)); + float4 _437 = T25.SampleLevel(S0, _435, 0.0f); + float2 _442 = float2(_382 * _437.x, _382 * _437.y); + float _445 = min(_390, sqrt(dp2_f32(_442, _442))); + float _451 = _335 / (_331 - T4.SampleLevel(S0, _435, 0.0f).x); + float _456 = _451 - _336; + float _461 = max(_429 - 0.5f, 0.0f); + float _466 = clamp(mad(_391, _410, -_461), 0.0f, 1.0f); + float _471 = (1.0f - clamp((1.0f - _445) * 8.0f, 0.0f, 1.0f)) * dp2_f32(float2(clamp(mad(_456, 1.0f, 0.5f), 0.0f, 1.0f), clamp(mad(_456, -1.0f, 0.5f), 0.0f, 1.0f)), float2(_466, clamp(mad(_410, _445, -_461), 0.0f, 1.0f))); + float4 _475 = T10.SampleLevel(S1, _435, 0.0f); + float2 _483 = float2(mad(-_406, _432, _319), mad(-_432, _407, _320)); + float4 _485 = T25.SampleLevel(S0, _483, 0.0f); + float2 _490 = float2(_382 * _485.x, _382 * _485.y); + float _493 = min(_390, sqrt(dp2_f32(_490, _490))); + float _498 = _335 / (_331 - T4.SampleLevel(S0, _483, 0.0f).x); + float _503 = _498 - _336; + float _514 = (1.0f - clamp((1.0f - _493) * 8.0f, 0.0f, 1.0f)) * dp2_f32(float2(clamp(mad(_503, 1.0f, 0.5f), 0.0f, 1.0f), clamp(mad(_503, -1.0f, 0.5f), 0.0f, 1.0f)), float2(_466, clamp(mad(_410, _493, -_461), 0.0f, 1.0f))); + float4 _516 = T10.SampleLevel(S1, _483, 0.0f); + bool _520 = _451 > _498; + bool _521 = _445 < _493; + bool _522 = _520 && _521; + float _523 = _522 ? _514 : _471; + float _526 = ((_520 || _521) || _522) ? _514 : _471; + _420 = mad(_475.x, _523, mad(_516.x, _526, _419)); + _418 = mad(_475.y, _523, mad(_516.y, _526, _417)); + _416 = mad(_475.z, _523, mad(_516.z, _526, _415)); + _413 = (_526 + _412) + _523; + _422 = _421 + 1u; + _412 = _413; + _415 = _416; + _417 = _418; + _419 = _420; + _421 = _422; + continue; + } + float _532 = float(_399 << int(1u)); + _537 = _415 / _532; + _538 = _417 / _532; + _539 = _419 / _532; + _540 = _412 / _532; + } else { + _537 = 0.0f; + _538 = 0.0f; + _539 = 0.0f; + _540 = 0.0f; + } + float _541 = 1.0f - _540; + float4 _548 = T11.SampleLevel(S1, _322, 0.0f); + float _553 = 1.0f - _548.w; + float _554 = mad(mad(_541, _340.x * _348, _539), _553, _548.x); + float _555 = mad(_553, mad(_340.y * _348, _541, _538), _548.y); + float _556 = mad(_553, mad(_541, _340.z * _348, _537), _548.z); + float4 _558 = T27.Load(0u); + float _559 = _558.x; + float _560 = _558.y; + float _561 = _558.z; + float4 _562 = T27.Load(1u); + float _563 = _562.x; + float _564 = _562.y; + float _565 = _562.z; + float _566 = _562.w; + float4 _568 = T3.Load(int3(uint2(0u, 0u), 0u)); + float _569 = _568.x; + float _574 = dp3_f32(float3(_554 * _569, _569 * _555, _569 * _556), float3(0.300000011920928955078125f, 0.589999973773956298828125f, 0.10999999940395355224609375f)); + bool _599; + float _600; + float _601; + float _602; + if (CB0_m[64u].x != 0u) { + float4 _585 = T22.Sample(S3, _315); + float _586 = _585.x; + float _587 = _585.y; + float _588 = _585.z; + float _589 = _585.w; + bool _591 = (_589 + 9.9999997473787516355514526367188e-05f) >= 1.0f; + float _592 = 1.0f - _589; + _599 = _591; + _600 = _591 ? _588 : mad(_592, _556, _588); + _601 = _591 ? _587 : mad(_592, _555, _587); + _602 = _591 ? _586 : mad(_554, _592, _586); + } else { + _599 = false; + _600 = _556; + _601 = _555; + _602 = _554; + } + float _606 = min(_569 * _602, 65504.0f); + float _607 = min(_569 * _601, 65504.0f); + float _608 = min(_569 * _600, 65504.0f); + bool _609 = !_599; + float _806; + float _807; + float _808; + float _809; + if (_609) { + float _689; + if (CB0_m[73u].x != 0u) { + float4 _622 = T6.Sample(S2, _322); + float _637 = clamp(dp3_f32(float3(_569 * _622.x, _569 * _622.y, _569 * _622.z), float3(0.300000011920928955078125f, 0.589999973773956298828125f, 0.10999999940395355224609375f)), asfloat(CB0_m[75u].z), asfloat(CB0_m[75u].w)); + float _662 = asfloat(CB0_m[69u].x); + float _665 = asfloat(CB0_m[69u].y); + float _666 = clamp(mad(_637, asfloat(CB0_m[75u].y), mad(log2(_637 + asfloat(CB0_m[75u].x)) * asfloat(CB0_m[73u].y), 0.693147182464599609375f, asfloat(CB0_m[73u].z)) - 10.0f) + asfloat(CB0_m[68u].w), _662, _665); + _689 = exp2(mad(clamp(asfloat(CB0_m[73u].x), 0.0f, 1.0f), clamp(_662, mad(abs(_666) * asfloat(CB0_m[69u].z), float(int(((_666 < 0.0f) ? 4294967295u : 0u) + uint(_666 > 0.0f))), _666), _665) - TEXCOORD1, TEXCOORD1)); + } else { + _689 = TEXCOORD.z; + } + float _692 = asfloat(CB0_m[16u].w); + float _715 = _574 * (T9.Sample(S2, float2(frac(mad(TEXCOORD.x * _692, 1.60000002384185791015625f, asfloat(CB0_m[16u].x))), frac(mad(TEXCOORD.y * _692, 0.89999997615814208984375f, asfloat(CB0_m[16u].y))))).w - 0.5f); + float _718 = asfloat(CB0_m[16u].z); + float _722 = max(_606 * 0.5f, mad(_715, _718, _606)); + float _723 = max(_607 * 0.5f, mad(_715, _718, _607)); + float _724 = max(_608 * 0.5f, mad(_715, _718, _608)); + float2 _740 = float2(TEXCOORD.x - asfloat(CB0_m[53u].x), TEXCOORD.y - asfloat(CB0_m[53u].y)); + float2 _754 = float2(dp2_f32(float2(asfloat(CB0_m[55u].x), asfloat(CB0_m[55u].y)), _740) * asfloat(CB0_m[53u].z), dp2_f32(float2(asfloat(CB0_m[55u].z), asfloat(CB0_m[55u].w)), _740) * asfloat(CB0_m[53u].w)); + float _764 = max((dp2_f32(_754, _754) - asfloat(CB0_m[56u].x)) * asfloat(CB0_m[56u].w), 0.0f); + float _776 = (_764 < 1.0f) ? (1.0f - exp2(_764 * (-10.0f))) : ((((_764 - 1.0f) > 0.0f) ? exp2((_764 - 2.0f) * 10.0f) : 0.0f) + 0.9980499744415283203125f); + float _790 = asfloat(CB0_m[54u].w); + bool _800 = CB0_m[54u].w != 0u; + _806 = _689; + _807 = _800 ? mad(mad(asfloat(CB0_m[54u].z) * _724, _790, -_724), _776, _724) : _724; + _808 = _800 ? mad(mad(asfloat(CB0_m[54u].y) * _723, _790, -_723), _776, _723) : _723; + _809 = _800 ? mad(mad(_722 * asfloat(CB0_m[54u].x), _790, -_722), _776, _722) : _722; + } else { + _806 = TEXCOORD.z; + _807 = _608; + _808 = _607; + _809 = _606; + } + float _819 = clamp(clamp(TEXCOORD.y * asfloat(CB0_m[60u].y), 0.0f, 1.0f) + asfloat(CB0_m[57u].w), 0.0f, 1.0f); + float _834 = clamp(clamp(clamp(TEXCOORD.y - asfloat(CB0_m[59u].w), 0.0f, 1.0f) * asfloat(CB0_m[60u].x), 0.0f, 1.0f) - asfloat(CB0_m[58u].w), 0.0f, 1.0f); + float _840 = asfloat(CB0_m[57u].x); + float _841 = asfloat(CB0_m[57u].y); + float _842 = asfloat(CB0_m[57u].z); + float _848 = asfloat(CB0_m[59u].x); + float _849 = asfloat(CB0_m[59u].y); + float _850 = asfloat(CB0_m[59u].z); + float _854 = mad(_819, _848 - _840, _840); + float _855 = mad(_849 - _841, _819, _841); + float _856 = mad(_850 - _842, _819, _842); + float _877 = mad(TEXCOORD.y, mad(_834, asfloat(CB0_m[58u].x) - _848, _848) - _854, _854) * _809; + float _878 = _808 * mad(TEXCOORD.y, mad(_834, asfloat(CB0_m[58u].y) - _849, _849) - _855, _855); + float _879 = _807 * mad(TEXCOORD.y, mad(_834, asfloat(CB0_m[58u].z) - _850, _850) - _856, _856); + float _887 = (CB1_m1.x != 0u) ? CB1_m3.z : _561; + float _890 = _806 / CB1_m2.x; + float _894 = max(_877 * _890, 0.0f); + float _895 = max(_890 * _878, 0.0f); + float _896 = max(_890 * _879, 0.0f); + float _924 = max(_877 * _806, 0.0f); + float _925 = max(_806 * _878, 0.0f); + float _926 = max(_806 * _879, 0.0f); + bool _953 = CB1_m0.w != 0u; + float _954 = _953 ? ((((mad(_894, mad(_559, _894, _563), _564) / mad(_894, mad(_559, _894, _560), _565)) - _566) * _887) * CB1_m2.x) : clamp(_561 * ((mad(_924, mad(_559, _924, _563), _564) / mad(_924, mad(_559, _924, _560), _565)) - _566), 0.0f, 1.0f); + float _955 = _953 ? (CB1_m2.x * (_887 * ((mad(mad(_559, _895, _563), _895, _564) / mad(mad(_559, _895, _560), _895, _565)) - _566))) : clamp(_561 * ((mad(mad(_559, _925, _563), _925, _564) / mad(mad(_559, _925, _560), _925, _565)) - _566), 0.0f, 1.0f); + float _956 = _953 ? (CB1_m2.x * (_887 * ((mad(mad(_559, _896, _563), _896, _564) / mad(mad(_559, _896, _560), _896, _565)) - _566))) : clamp(_561 * ((mad(mad(_559, _926, _563), _926, _564) / mad(mad(_559, _926, _560), _926, _565)) - _566), 0.0f, 1.0f); + float _1029; + float _1030; + float _1031; + if (_609) { + float _1026; + float _1027; + float _1028; + if (CB0_m[50u].w != 0u) { + float2 _979 = float2(TEXCOORD.x - asfloat(CB0_m[49u].x), TEXCOORD.y - asfloat(CB0_m[49u].y)); + float2 _993 = float2(dp2_f32(float2(asfloat(CB0_m[51u].x), asfloat(CB0_m[51u].y)), _979) * asfloat(CB0_m[49u].z), dp2_f32(float2(asfloat(CB0_m[51u].z), asfloat(CB0_m[51u].w)), _979) * asfloat(CB0_m[49u].w)); + float _1011 = T7.Sample(S2, clamp((dp2_f32(_993, _993) - asfloat(CB0_m[52u].x)) * asfloat(CB0_m[52u].w), 0.0f, 1.0f)).w * asfloat(CB0_m[50u].w); + _1026 = mad(_1011, asfloat(CB0_m[50u].z) - _956, _956); + _1027 = mad(_1011, asfloat(CB0_m[50u].y) - _955, _955); + _1028 = mad(_1011, asfloat(CB0_m[50u].x) - _954, _954); + } else { + _1026 = _956; + _1027 = _955; + _1028 = _954; + } + _1029 = _1026; + _1030 = _1027; + _1031 = _1028; + } else { + _1029 = _956; + _1030 = _955; + _1031 = _954; + } + bool _1067 = _953 && (CB1_m0.z == 0u); + float _1068 = _1067 ? _1031 : ((_1031 < 0.003130800090730190277099609375f) ? (CB1_m3.w * _1031) : mad(exp2(log2(_1031) * CB1_m4.x), CB1_m4.y, -CB1_m4.z)); + float _1069 = _1067 ? _1030 : ((_1030 < 0.003130800090730190277099609375f) ? (CB1_m3.w * _1030) : mad(CB1_m4.y, exp2(CB1_m4.x * log2(_1030)), -CB1_m4.z)); + float _1070 = _1067 ? _1029 : ((_1029 < 0.003130800090730190277099609375f) ? (CB1_m3.w * _1029) : mad(CB1_m4.y, exp2(CB1_m4.x * log2(_1029)), -CB1_m4.z)); + float _1268; + float _1269; + float _1270; + if (_609 && (CB0_m[19u].x != 0u)) { + float _1079 = asfloat(CB0_m[17u].x); + float _1080 = _1079 * 0.070000000298023223876953125f; + float _1081 = _1079 * 0.10999999940395355224609375f; + float _1082 = _1079 * 0.12999999523162841796875f; + float _1083 = _1079 * 0.17000000178813934326171875f; + float _1086 = asfloat(CB0_m[17u].w); + float _1087 = TEXCOORD.x * _1086; + float _1088 = TEXCOORD.y * _1086; + float _1117 = _1079 * 0.189999997615814208984375f; + float _1118 = _1079 * 0.23000000417232513427734375f; + float _1119 = _1079 * 0.2899999916553497314453125f; + float _1120 = _1079 * 0.310000002384185791015625f; + float _1160 = clamp(mad((((frac(sin(dp2_f32(float2(_1087 + _1117, _1117 + _1088), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f) + (((frac(sin(dp2_f32(float2(_1087 + _1080, _1088 + _1080), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f) + frac(sin(dp2_f32(float2(_1087 + _1081, _1088 + _1081), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f)) + frac(sin(dp2_f32(float2(_1087 + _1082, _1088 + _1082), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f)) + frac(sin(dp2_f32(float2(_1087 + _1083, _1088 + _1083), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f))) + frac(sin(dp2_f32(float2(_1087 + _1118, _1118 + _1088), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f)) + frac(sin(dp2_f32(float2(_1087 + _1119, _1119 + _1088), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f)) + frac(sin(dp2_f32(float2(_1087 + _1120, _1120 + _1088), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f), 0.125f, asfloat(CB0_m[17u].z)), 0.0f, 1.0f); + float _1162 = dp3_f32(float3(_1068, _1069, _1070), float3(0.2125999927520751953125f, 0.715200006961822509765625f, 0.072200000286102294921875f)); + float _1170 = (CB0_m[18u].y != 0u) ? mad(_1160 * (_1162 * (_1162 * _1162)), -0.5f, _1160) : _1160; + float _1174 = _1170 - 0.5f; + float _1177 = asfloat(CB0_m[18u].x); + bool _1187 = _1170 < 0.5f; + float _1188 = _1170 + _1170; + float _1189 = _1188 * _1068; + float _1190 = _1188 * _1069; + float _1191 = _1188 * _1070; + float _1195 = mad(_1170, -2.0f, 1.0f); + float _1205 = 1.0f - _1170; + float _1209 = mad(_1170, 2.0f, -1.0f); + float _1231 = _1205 + _1205; + bool _1252 = CB0_m[19u].w != 0u; + bool _1258 = CB0_m[19u].z != 0u; + bool _1264 = CB0_m[18u].w != 0u; + _1268 = _1264 ? (_1258 ? mad(_1177, (_1187 ? ((_1195 * (_1070 * _1070)) + _1191) : ((_1205 * (_1070 + _1070)) + (_1209 * sqrt(_1070)))) - _1070, _1070) : (_1252 ? mad(_1177, ((_1070 < 0.5f) ? _1191 : mad(-_1231, 1.0f - _1070, 1.0f)) - _1070, _1070) : clamp(max(mad(_1174, _1177, _1070), _1070 * 0.02500000037252902984619140625f), 0.0f, 1.0f))) : _1160; + _1269 = _1264 ? (_1258 ? mad(_1177, (_1187 ? ((_1195 * (_1069 * _1069)) + _1190) : ((_1205 * (_1069 + _1069)) + (_1209 * sqrt(_1069)))) - _1069, _1069) : (_1252 ? mad(_1177, ((_1069 < 0.5f) ? _1190 : mad(-_1231, 1.0f - _1069, 1.0f)) - _1069, _1069) : clamp(max(mad(_1174, _1177, _1069), _1069 * 0.02500000037252902984619140625f), 0.0f, 1.0f))) : _1160; + _1270 = _1264 ? (_1258 ? mad(_1177, (_1187 ? (_1189 + ((_1068 * _1068) * _1195)) : ((sqrt(_1068) * _1209) + ((_1068 + _1068) * _1205))) - _1068, _1068) : (_1252 ? mad(_1177, ((_1068 < 0.5f) ? _1189 : mad(-_1231, 1.0f - _1068, 1.0f)) - _1068, _1068) : clamp(max(mad(_1174, _1177, _1068), _1068 * 0.02500000037252902984619140625f), 0.0f, 1.0f))) : _1160; + } else { + _1268 = _1070; + _1269 = _1069; + _1270 = _1068; + } + float3 _1271 = float3(_1270, _1269, _1268); + float _1276 = max(dp3_f32(float3(0.265399992465972900390625f, 0.67040002346038818359375f, 0.06419999897480010986328125f), _1271), 0.0f); + float _1282 = mad(((max(dp3_f32(float3(0.02480000071227550506591796875f, 0.1247999966144561767578125f, 0.85039997100830078125f), _1271), 0.0f) + _1276) / max(dp3_f32(float3(0.514900028705596923828125f, 0.324400007724761962890625f, 0.1606999933719635009765625f), _1271), 0.00999999977648258209228515625f)) + 1.0f, 1.33000004291534423828125f, -1.67999994754791259765625f) * _1276; + float _1296 = asfloat(CB0_m[83u].w); + float _1310 = clamp(mad(0.039999999105930328369140625f / (_574 + 0.039999999105930328369140625f), asfloat(CB0_m[84u].x), asfloat(CB0_m[84u].y)), 0.0f, 1.0f); + float _1314 = mad(_1310, clamp((_1282 * asfloat(CB0_m[83u].x)) * _1296, 0.0f, 1.0f) - _1270, _1270); + float _1315 = mad(_1310, clamp(_1296 * (_1282 * asfloat(CB0_m[83u].y)), 0.0f, 1.0f) - _1269, _1269); + float _1316 = mad(_1310, clamp(_1296 * (_1282 * asfloat(CB0_m[83u].z)), 0.0f, 1.0f) - _1268, _1268); + float _1372; + float _1373; + float _1374; + if (CB0_m[86u].w != 0u) { + float _1326 = asfloat(CB0_m[87u].x); + float _1327 = asfloat(CB0_m[87u].w); + float _1342 = asfloat(CB0_m[86u].z); + float4 _1361 = T24.Sample(S2, float2(((((TEXCOORD.x - 0.5f) * _1342) / mad(TEXCOORD.y, asfloat(CB0_m[87u].z) - _1327, _1327)) - asfloat(CB0_m[86u].x)) + 0.5f, (((_1342 * (TEXCOORD.y - 0.5f)) / mad(TEXCOORD.x, asfloat(CB0_m[87u].y) - _1326, _1326)) - asfloat(CB0_m[86u].y)) + 0.5f)); + float _1368 = asfloat(CB0_m[86u].w); + _1372 = mad(_1361.x - _1314, _1368, _1314); + _1373 = mad(_1368, _1361.y - _1315, _1315); + _1374 = mad(_1368, _1361.z - _1316, _1316); + } else { + _1372 = _1314; + _1373 = _1315; + _1374 = _1316; + } + float _1762; + float _1763; + float _1764; + if (_609) { + float _1383 = max(max(max(_1373, _1374), _1372), 9.9999997473787516355514526367188e-05f); + float _1394 = ((CB1_m1.y == 0u) && _1067) ? 1.0f : (((CB1_m2.y < _1383) ? mad(CB1_m3.x, _1383, CB1_m3.y) : _1383) / _1383); + float _1395 = _1374 * _1394; + float _1400 = floor(_1395 * 14.99989986419677734375f); + float _1402 = mad(_1395, 15.0f, -_1400); + float _1404 = (_1400 * 0.0625f) + ((_1372 * _1394) * 0.05859375f); + float _1406 = mad(_1373 * _1394, 0.9375f, 0.03125f); + float4 _1412 = T19.Sample(S2, float2(_1404 + 0.001953125f, _1406)); + float _1413 = _1412.x; + float _1414 = _1412.y; + float _1415 = _1412.z; + float4 _1418 = T19.Sample(S2, float2(_1404 + 0.064453125f, _1406)); + float _1425 = mad(_1402, _1418.x - _1413, _1413); + float _1426 = mad(_1402, _1418.y - _1414, _1414); + float _1427 = mad(_1402, _1418.z - _1415, _1415); + float _1756; + float _1757; + float _1758; + if (int(T28.Load(0)) > 0) { + float4 _1437 = T12.Sample(S0, _322); + float _1449 = clamp(asfloat(T28.Load(4)) * _1437.x, 0.0f, 1.0f); + float _1450 = clamp(asfloat(T28.Load(4)) * _1437.y, 0.0f, 1.0f); + float _1451 = clamp(asfloat(T28.Load(4)) * _1437.z, 0.0f, 1.0f); + float _1452 = clamp(asfloat(T28.Load(4)) * _1437.w, 0.0f, 1.0f); + float _1460 = dp3_f32(float3(T21.Sample(S2, _322).xyz), float3(0.2125999927520751953125f, 0.715200006961822509765625f, 0.072200000286102294921875f)); + float _1461 = _1449 * _1460; + float _1462 = _1460 * _1450; + float _1463 = _1460 * _1451; + float _1464 = _1460 * _1452; + float _1506; + float _1507; + float _1508; + if (_1461 != 0.0f) { + float _1473 = floor(_1427 * 14.99989986419677734375f); + float _1475 = mad(_1427, 15.0f, -_1473); + float _1477 = (_1473 * 0.0625f) + (_1425 * 0.05859375f); + float _1479 = mad(_1426, 0.9375f, 0.03125f); + float4 _1484 = T15.Sample(S2, float2(_1477 + 0.001953125f, _1479)); + float _1485 = _1484.x; + float _1486 = _1484.y; + float _1487 = _1484.z; + float4 _1490 = T15.Sample(S2, float2(_1477 + 0.064453125f, _1479)); + _1506 = mad(_1461, mad(_1475, _1490.z - _1487, _1487) - _1427, _1427); + _1507 = mad(_1461, mad(_1475, _1490.y - _1486, _1486) - _1426, _1426); + _1508 = mad(_1461, mad(_1475, _1490.x - _1485, _1485) - _1425, _1425); + } else { + _1506 = _1427; + _1507 = _1426; + _1508 = _1425; + } + float _1546; + float _1547; + float _1548; + if (_1462 != 0.0f) { + float _1513 = floor(_1506 * 14.99989986419677734375f); + float _1515 = mad(_1506, 15.0f, -_1513); + float _1517 = (_1508 * 0.05859375f) + (_1513 * 0.0625f); + float _1519 = mad(_1507, 0.9375f, 0.03125f); + float4 _1524 = T16.Sample(S2, float2(_1517 + 0.001953125f, _1519)); + float _1525 = _1524.x; + float _1526 = _1524.y; + float _1527 = _1524.z; + float4 _1530 = T16.Sample(S2, float2(_1517 + 0.064453125f, _1519)); + _1546 = mad(mad(_1530.z - _1527, _1515, _1527) - _1506, _1462, _1506); + _1547 = mad(mad(_1530.y - _1526, _1515, _1526) - _1507, _1462, _1507); + _1548 = mad(_1462, mad(_1515, _1530.x - _1525, _1525) - _1508, _1508); + } else { + _1546 = _1506; + _1547 = _1507; + _1548 = _1508; + } + float _1586; + float _1587; + float _1588; + if (_1463 != 0.0f) { + float _1553 = floor(_1546 * 14.99989986419677734375f); + float _1555 = mad(_1546, 15.0f, -_1553); + float _1557 = (_1548 * 0.05859375f) + (_1553 * 0.0625f); + float _1559 = mad(_1547, 0.9375f, 0.03125f); + float4 _1564 = T17.Sample(S2, float2(_1557 + 0.001953125f, _1559)); + float _1565 = _1564.x; + float _1566 = _1564.y; + float _1567 = _1564.z; + float4 _1570 = T17.Sample(S2, float2(_1557 + 0.064453125f, _1559)); + _1586 = mad(mad(_1570.z - _1567, _1555, _1567) - _1546, _1463, _1546); + _1587 = mad(mad(_1570.y - _1566, _1555, _1566) - _1547, _1463, _1547); + _1588 = mad(_1463, mad(_1555, _1570.x - _1565, _1565) - _1548, _1548); + } else { + _1586 = _1546; + _1587 = _1547; + _1588 = _1548; + } + float _1626; + float _1627; + float _1628; + if (_1464 != 0.0f) { + float _1593 = floor(_1586 * 14.99989986419677734375f); + float _1595 = mad(_1586, 15.0f, -_1593); + float _1597 = (_1588 * 0.05859375f) + (_1593 * 0.0625f); + float _1599 = mad(_1587, 0.9375f, 0.03125f); + float4 _1604 = T18.Sample(S2, float2(_1597 + 0.001953125f, _1599)); + float _1605 = _1604.x; + float _1606 = _1604.y; + float _1607 = _1604.z; + float4 _1610 = T18.Sample(S2, float2(_1597 + 0.064453125f, _1599)); + _1626 = mad(mad(_1610.z - _1607, _1595, _1607) - _1586, _1464, _1586); + _1627 = mad(mad(_1610.y - _1606, _1595, _1606) - _1587, _1464, _1587); + _1628 = mad(_1464, mad(_1595, _1610.x - _1605, _1605) - _1588, _1588); + } else { + _1626 = _1586; + _1627 = _1587; + _1628 = _1588; + } + float _1662 = clamp(asfloat(T28.Load4(32)).x + ((_336 < asfloat(T28.Load4(16)).z) ? clamp((_336 - asfloat(T28.Load4(16)).x) * asfloat(T28.Load4(16)).y, 0.0f, 1.0f) : (1.0f - clamp((_336 - asfloat(T28.Load4(16)).z) * asfloat(T28.Load4(16)).w, 0.0f, 1.0f))), 0.0f, 1.0f); + float _1665 = floor(_1626 * 14.99989986419677734375f); + float _1667 = mad(_1626, 15.0f, -_1665); + float _1669 = (_1628 * 0.05859375f) + (_1665 * 0.0625f); + float _1671 = mad(_1627, 0.9375f, 0.03125f); + float4 _1676 = T13.Sample(S2, float2(_1669 + 0.001953125f, _1671)); + float _1677 = _1676.x; + float _1678 = _1676.y; + float _1679 = _1676.z; + float4 _1682 = T13.Sample(S2, float2(_1669 + 0.064453125f, _1671)); + float _1695 = mad(_1662, mad(_1667, _1682.x - _1677, _1677) - _1628, _1628); + float _1696 = mad(mad(_1682.y - _1678, _1667, _1678) - _1627, _1662, _1627); + float _1697 = mad(mad(_1682.z - _1679, _1667, _1679) - _1626, _1662, _1626); + float _1708 = clamp(asfloat(T28.Load2(48)).y + ((_336 < asfloat(T28.Load4(32)).w) ? clamp(asfloat(T28.Load4(32)).z * (_336 - asfloat(T28.Load4(32)).y), 0.0f, 1.0f) : (1.0f - clamp((_336 - asfloat(T28.Load4(32)).w) * asfloat(T28.Load2(48)).x, 0.0f, 1.0f))), 0.0f, 1.0f); + float _1711 = floor(_1697 * 14.99989986419677734375f); + float _1713 = mad(_1697, 15.0f, -_1711); + float _1715 = (_1695 * 0.05859375f) + (_1711 * 0.0625f); + float _1717 = mad(_1696, 0.9375f, 0.03125f); + float4 _1722 = T14.Sample(S2, float2(_1715 + 0.001953125f, _1717)); + float _1723 = _1722.x; + float _1724 = _1722.y; + float _1725 = _1722.z; + float4 _1728 = T14.Sample(S2, float2(_1715 + 0.064453125f, _1717)); + float _1752 = (1.0f - min(_1452 + (_1451 + (_1449 + _1450)), 1.0f)) * dp3_f32(float3(T20.Sample(S2, _322).xyz), float3(0.2125999927520751953125f, 0.715200006961822509765625f, 0.072200000286102294921875f)); + _1756 = mad((mad(_1728.z - _1725, _1713, _1725) - _1697) * _1708, _1752, _1697); + _1757 = mad((mad(_1728.y - _1724, _1713, _1724) - _1696) * _1708, _1752, _1696); + _1758 = mad(_1708 * (mad(_1713, _1728.x - _1723, _1723) - _1695), _1752, _1695); + } else { + _1756 = _1427; + _1757 = _1426; + _1758 = _1425; + } + _1762 = _1756 / _1394; + _1763 = _1757 / _1394; + _1764 = _1758 / _1394; + } else { + _1762 = _1374; + _1763 = _1373; + _1764 = _1372; + } + float _1766 = dp3_f32(float3(_1764, _1763, _1762), float3(0.2989999949932098388671875f, 0.58700001239776611328125f, 0.114000000059604644775390625f)); + float _1768 = max(max(_1762, _1763), _1764); + bool _1771 = CB0_m[41u].w != 0u; + float _1805 = asfloat(CB0_m[42u].w); + float _1817 = asfloat(CB0_m[39u].x); + float _1818 = asfloat(CB0_m[39u].y); + float _1819 = asfloat(CB0_m[39u].z); + float _1851 = mad(T2.Load(int4(uint3(uint2(cvt_f32_u32(gl_FragCoord.x) & 63u, cvt_f32_u32(gl_FragCoord.y) & 63u), T1.Load(1840) & 31u), 0u)).x, 2.0f, -1.0f); + float _1864 = _953 ? (float(int(((_1851 < 0.0f) ? 4294967295u : 0u) + uint(_1851 > 0.0f))) * (1.0f - sqrt(1.0f - abs(_1851)))) : _1851; + float _1865 = mad(mad(exp2(log2(clamp(((_1771 ? _1764 : _1768) - asfloat(CB0_m[42u].x)) * asfloat(CB0_m[41u].x), 0.0f, 1.0f)) * _1805), asfloat(CB0_m[40u].x) - _1817, _1817), _1864, _1764); + float _1866 = mad(mad(asfloat(CB0_m[40u].y) - _1818, exp2(log2(clamp(((_1771 ? _1763 : _1768) - asfloat(CB0_m[42u].y)) * asfloat(CB0_m[41u].y), 0.0f, 1.0f)) * _1805), _1818), _1864, _1763); + float _1867 = mad(mad(asfloat(CB0_m[40u].z) - _1819, exp2(log2(clamp(((_1771 ? _1762 : _1768) - asfloat(CB0_m[42u].z)) * asfloat(CB0_m[41u].z), 0.0f, 1.0f)) * _1805), _1819), _1864, _1762); + SV_Target.x = _953 ? _1865 : clamp(_1865, 0.0f, 1.0f); + SV_Target.y = _953 ? _1866 : clamp(_1866, 0.0f, 1.0f); + SV_Target.z = _953 ? _1867 : clamp(_1867, 0.0f, 1.0f); + SV_Target.w = _953 ? _1766 : clamp(_1766, 0.0f, 1.0f); +} + +SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { + gl_FragCoord = stage_input.gl_FragCoord; + gl_FragCoord.w = 1.0 / gl_FragCoord.w; + TEXCOORD = stage_input.TEXCOORD; + TEXCOORD1 = stage_input.TEXCOORD1; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.SV_Target = SV_Target; + return stage_output; +} diff --git a/src/games/rdr2/lut/0x6F990851.ps_5_1.hlslx b/src/games/rdr2/lut/0x6F990851.ps_5_1.hlslx new file mode 100644 index 0000000000..4a8c8d70ca --- /dev/null +++ b/src/games/rdr2/lut/0x6F990851.ps_5_1.hlslx @@ -0,0 +1,581 @@ +struct anon_m { + int _m0; + float3 _m1; + float4 _m2; + float4 _m3; + float2 _m4; + uint4 _m5; + uint4 _m6; + uint4 _m7; + uint4 _m8; + uint4 _m9; + uint4 _m10; + uint4 _m11; + uint4 _m12; + uint4 _m13; + uint4 _m14; + uint4 _m15; + uint _m16; +}; + +cbuffer CB0_buf : register(b0, space0) { + uint4 CB0_m[88] : packoffset(c0); +}; + +cbuffer CB1_buf : register(b1, space0) { + uint4 CB1_m0 : packoffset(c0); + uint2 CB1_m1 : packoffset(c1); + float2 CB1_m2 : packoffset(c1.z); + float4 CB1_m3 : packoffset(c2); + float4 CB1_m4 : packoffset(c3); +}; + +ByteAddressBuffer T0 : register(t6, space0); +ByteAddressBuffer T1 : register(t7, space0); +ByteAddressBuffer T27 : register(t33, space0); +SamplerState S0 : register(s2, space0); +SamplerState S1 : register(s3, space0); +SamplerState S2 : register(s4, space0); +SamplerState S3 : register(s5, space0); +Texture2DArray T2 : register(t8, space0); +Texture2D T3 : register(t9, space0); +Texture2D T4 : register(t10, space0); +Texture2D T5 : register(t11, space0); +Texture2D T6 : register(t12, space0); +Texture1D T7 : register(t13, space0); +Texture2D T8 : register(t14, space0); +Texture2D T9 : register(t15, space0); +Texture2D T10 : register(t16, space0); +Texture2D T11 : register(t17, space0); +Texture2D T12 : register(t18, space0); +Texture2D T13 : register(t19, space0); +Texture2D T14 : register(t20, space0); +Texture2D T15 : register(t21, space0); +Texture2D T16 : register(t22, space0); +Texture2D T17 : register(t23, space0); +Texture2D T18 : register(t24, space0); +Texture2D T19 : register(t25, space0); +Texture2D T20 : register(t26, space0); +Texture2D T21 : register(t27, space0); +Texture2D T22 : register(t28, space0); +Texture2D T23 : register(t29, space0); +Texture2D T24 : register(t30, space0); +Texture2D T25 : register(t31, space0); +Buffer T26 : register(t32, space0); + +static float4 gl_FragCoord; +static float4 TEXCOORD; +static float TEXCOORD1; +static float4 SV_Target; + +struct SPIRV_Cross_Input { + float4 TEXCOORD : TEXCOORD1; + float TEXCOORD1 : TEXCOORD2; + float4 gl_FragCoord : SV_Position; +}; + +struct SPIRV_Cross_Output { + float4 SV_Target : SV_Target0; +}; + +float dp2_f32(float2 a, float2 b) { + precise float _301 = a.x * b.x; + return mad(a.y, b.y, _301); +} + +int cvt_f32_i32(float v) { + return isnan(v) ? 0 : ((v < (-2147483648.0f)) ? int(0x80000000) : ((v > 2147483520.0f) ? 2147483647 : int(v))); +} + +float dp3_f32(float3 a, float3 b) { + precise float _276 = a.x * b.x; + return mad(a.z, b.z, mad(a.y, b.y, _276)); +} + +uint cvt_f32_u32(float v) { + return (v > 4294967040.0f) ? 4294967295u : uint(max(v, 0.0f)); +} + +void frag_main() { + float2 _314 = float2(TEXCOORD.x, TEXCOORD.y); + float _324 = asfloat(CB0_m[0u].w) + 1.0f; + float _328 = asfloat(CB0_m[0u].z); + float _329 = _328 / (_324 - T5.SampleLevel(S0, _314, 0.0f).x); + float4 _333 = T8.Sample(S3, _314); + float _341 = asfloat(T0.Load(16)); + float4 _357 = T25.SampleLevel(S0, float2(TEXCOORD.x * asfloat(CB0_m[82u].x), TEXCOORD.y * asfloat(CB0_m[82u].y)), 0.0f); + float _360 = _357.z; + float _530; + float _531; + float _532; + float _533; + if ((_360 >= 1.0f) && (_357.w < 2.0f)) { + float4 _370 = T24.SampleLevel(S0, _314, 0.0f); + float _375 = asfloat(CB0_m[20u].x); + float2 _378 = float2(_370.x * _375, _370.y * _375); + float _383 = asfloat(CB0_m[20u].z); + float _384 = min(sqrt(dp2_f32(_378, _378)), _383); + float _387 = min(_360, 2.0f); + float _391 = min(_387 + 1.0f, 2.0f); + int _392 = cvt_f32_i32(_391); + float _399 = ((_357.x / _360) * _387) * asfloat(CB0_m[66u].x); + float _400 = asfloat(CB0_m[66u].y) * (_387 * (_357.y / _360)); + float _402 = trunc(_391) - 0.5f; + float _403 = _402 / _387; + float _405; + float _408; + float _410; + float _412; + _405 = 0.0f; + _408 = 0.0f; + _410 = 0.0f; + _412 = 0.0f; + float _406; + float _409; + float _411; + float _413; + uint _415; + uint _414 = 0u; + for (;;) { + int _418 = int(_414); + if (_392 <= _418) { + break; + } + float _422 = float(_418); + float _425 = (_422 + 0.5f) / _402; + float2 _428 = float2(mad(_399, _425, TEXCOORD.x), mad(_425, _400, TEXCOORD.y)); + float4 _430 = T24.SampleLevel(S0, _428, 0.0f); + float2 _435 = float2(_375 * _430.x, _375 * _430.y); + float _438 = min(_383, sqrt(dp2_f32(_435, _435))); + float _444 = _328 / (_324 - T4.SampleLevel(S0, _428, 0.0f).x); + float _449 = _444 - _329; + float _454 = max(_422 - 0.5f, 0.0f); + float _459 = clamp(mad(_384, _403, -_454), 0.0f, 1.0f); + float _464 = (1.0f - clamp((1.0f - _438) * 8.0f, 0.0f, 1.0f)) * dp2_f32(float2(clamp(mad(_449, 1.0f, 0.5f), 0.0f, 1.0f), clamp(mad(_449, -1.0f, 0.5f), 0.0f, 1.0f)), float2(_459, clamp(mad(_403, _438, -_454), 0.0f, 1.0f))); + float4 _468 = T10.SampleLevel(S1, _428, 0.0f); + float2 _476 = float2(mad(-_399, _425, TEXCOORD.x), mad(-_425, _400, TEXCOORD.y)); + float4 _478 = T24.SampleLevel(S0, _476, 0.0f); + float2 _483 = float2(_375 * _478.x, _375 * _478.y); + float _486 = min(_383, sqrt(dp2_f32(_483, _483))); + float _491 = _328 / (_324 - T4.SampleLevel(S0, _476, 0.0f).x); + float _496 = _491 - _329; + float _507 = (1.0f - clamp((1.0f - _486) * 8.0f, 0.0f, 1.0f)) * dp2_f32(float2(clamp(mad(_496, 1.0f, 0.5f), 0.0f, 1.0f), clamp(mad(_496, -1.0f, 0.5f), 0.0f, 1.0f)), float2(_459, clamp(mad(_403, _486, -_454), 0.0f, 1.0f))); + float4 _509 = T10.SampleLevel(S1, _476, 0.0f); + bool _513 = _444 > _491; + bool _514 = _438 < _486; + bool _515 = _513 && _514; + float _516 = _515 ? _507 : _464; + float _519 = ((_513 || _514) || _515) ? _507 : _464; + _413 = mad(_468.x, _516, mad(_509.x, _519, _412)); + _411 = mad(_468.y, _516, mad(_509.y, _519, _410)); + _409 = mad(_468.z, _516, mad(_509.z, _519, _408)); + _406 = (_519 + _405) + _516; + _415 = _414 + 1u; + _405 = _406; + _408 = _409; + _410 = _411; + _412 = _413; + _414 = _415; + continue; + } + float _525 = float(_392 << int(1u)); + _530 = _408 / _525; + _531 = _410 / _525; + _532 = _412 / _525; + _533 = _405 / _525; + } else { + _530 = 0.0f; + _531 = 0.0f; + _532 = 0.0f; + _533 = 0.0f; + } + float _534 = 1.0f - _533; + float4 _541 = T11.SampleLevel(S1, _314, 0.0f); + float _546 = 1.0f - _541.w; + float _547 = mad(mad(_534, _333.x * _341, _532), _546, _541.x); + float _548 = mad(_546, mad(_333.y * _341, _534, _531), _541.y); + float _549 = mad(_546, mad(_534, _333.z * _341, _530), _541.z); + float4 _551 = T26.Load(0u); + float _552 = _551.x; + float _553 = _551.y; + float _554 = _551.z; + float4 _555 = T26.Load(1u); + float _556 = _555.x; + float _557 = _555.y; + float _558 = _555.z; + float _559 = _555.w; + float4 _561 = T3.Load(int3(uint2(0u, 0u), 0u)); + float _562 = _561.x; + float _567 = dp3_f32(float3(_547 * _562, _562 * _548, _562 * _549), float3(0.300000011920928955078125f, 0.589999973773956298828125f, 0.10999999940395355224609375f)); + bool _592; + float _593; + float _594; + float _595; + if (CB0_m[64u].x != 0u) { + float4 _578 = T22.Sample(S3, _314); + float _579 = _578.x; + float _580 = _578.y; + float _581 = _578.z; + float _582 = _578.w; + bool _584 = (_582 + 9.9999997473787516355514526367188e-05f) >= 1.0f; + float _585 = 1.0f - _582; + _592 = _584; + _593 = _584 ? _581 : mad(_585, _549, _581); + _594 = _584 ? _580 : mad(_585, _548, _580); + _595 = _584 ? _579 : mad(_547, _585, _579); + } else { + _592 = false; + _593 = _549; + _594 = _548; + _595 = _547; + } + float _599 = min(_562 * _595, 65504.0f); + float _600 = min(_562 * _594, 65504.0f); + float _601 = min(_562 * _593, 65504.0f); + bool _602 = !_592; + float _799; + float _800; + float _801; + float _802; + if (_602) { + float _682; + if (CB0_m[73u].x != 0u) { + float4 _615 = T6.Sample(S2, _314); + float _630 = clamp(dp3_f32(float3(_562 * _615.x, _562 * _615.y, _562 * _615.z), float3(0.300000011920928955078125f, 0.589999973773956298828125f, 0.10999999940395355224609375f)), asfloat(CB0_m[75u].z), asfloat(CB0_m[75u].w)); + float _655 = asfloat(CB0_m[69u].x); + float _658 = asfloat(CB0_m[69u].y); + float _659 = clamp(mad(_630, asfloat(CB0_m[75u].y), mad(log2(_630 + asfloat(CB0_m[75u].x)) * asfloat(CB0_m[73u].y), 0.693147182464599609375f, asfloat(CB0_m[73u].z)) - 10.0f) + asfloat(CB0_m[68u].w), _655, _658); + _682 = exp2(mad(clamp(asfloat(CB0_m[73u].x), 0.0f, 1.0f), clamp(_655, mad(abs(_659) * asfloat(CB0_m[69u].z), float(int(((_659 < 0.0f) ? 4294967295u : 0u) + uint(_659 > 0.0f))), _659), _658) - TEXCOORD1, TEXCOORD1)); + } else { + _682 = TEXCOORD.z; + } + float _685 = asfloat(CB0_m[16u].w); + float _708 = _567 * (T9.Sample(S2, float2(frac(mad(TEXCOORD.x * _685, 1.60000002384185791015625f, asfloat(CB0_m[16u].x))), frac(mad(TEXCOORD.y * _685, 0.89999997615814208984375f, asfloat(CB0_m[16u].y))))).w - 0.5f); + float _711 = asfloat(CB0_m[16u].z); + float _715 = max(_599 * 0.5f, mad(_708, _711, _599)); + float _716 = max(mad(_708, _711, _600), _600 * 0.5f); + float _717 = max(mad(_708, _711, _601), _601 * 0.5f); + float2 _733 = float2(TEXCOORD.x - asfloat(CB0_m[53u].x), TEXCOORD.y - asfloat(CB0_m[53u].y)); + float2 _747 = float2(dp2_f32(float2(asfloat(CB0_m[55u].x), asfloat(CB0_m[55u].y)), _733) * asfloat(CB0_m[53u].z), dp2_f32(float2(asfloat(CB0_m[55u].z), asfloat(CB0_m[55u].w)), _733) * asfloat(CB0_m[53u].w)); + float _757 = max((dp2_f32(_747, _747) - asfloat(CB0_m[56u].x)) * asfloat(CB0_m[56u].w), 0.0f); + float _769 = (_757 < 1.0f) ? (1.0f - exp2(_757 * (-10.0f))) : ((((_757 - 1.0f) > 0.0f) ? exp2((_757 - 2.0f) * 10.0f) : 0.0f) + 0.9980499744415283203125f); + float _783 = asfloat(CB0_m[54u].w); + bool _793 = CB0_m[54u].w != 0u; + _799 = _682; + _800 = _793 ? mad(_769, mad(_717 * asfloat(CB0_m[54u].z), _783, -_717), _717) : _717; + _801 = _793 ? mad(_769, mad(_716 * asfloat(CB0_m[54u].y), _783, -_716), _716) : _716; + _802 = _793 ? mad(mad(_715 * asfloat(CB0_m[54u].x), _783, -_715), _769, _715) : _715; + } else { + _799 = TEXCOORD.z; + _800 = _601; + _801 = _600; + _802 = _599; + } + float _812 = clamp(clamp(TEXCOORD.y * asfloat(CB0_m[60u].y), 0.0f, 1.0f) + asfloat(CB0_m[57u].w), 0.0f, 1.0f); + float _827 = clamp(clamp(clamp(TEXCOORD.y - asfloat(CB0_m[59u].w), 0.0f, 1.0f) * asfloat(CB0_m[60u].x), 0.0f, 1.0f) - asfloat(CB0_m[58u].w), 0.0f, 1.0f); + float _833 = asfloat(CB0_m[57u].x); + float _834 = asfloat(CB0_m[57u].y); + float _835 = asfloat(CB0_m[57u].z); + float _841 = asfloat(CB0_m[59u].x); + float _842 = asfloat(CB0_m[59u].y); + float _843 = asfloat(CB0_m[59u].z); + float _847 = mad(_812, _841 - _833, _833); + float _848 = mad(_812, _842 - _834, _834); + float _849 = mad(_812, _843 - _835, _835); + float _870 = mad(TEXCOORD.y, mad(_827, asfloat(CB0_m[58u].x) - _841, _841) - _847, _847) * _802; + float _871 = _801 * mad(TEXCOORD.y, mad(_827, asfloat(CB0_m[58u].y) - _842, _842) - _848, _848); + float _872 = _800 * mad(TEXCOORD.y, mad(_827, asfloat(CB0_m[58u].z) - _843, _843) - _849, _849); + float _880 = (CB1_m1.x != 0u) ? CB1_m3.z : _554; + float _883 = _799 / CB1_m2.x; + float _887 = max(_870 * _883, 0.0f); + float _888 = max(_883 * _871, 0.0f); + float _889 = max(_883 * _872, 0.0f); + float _917 = max(_870 * _799, 0.0f); + float _918 = max(_799 * _871, 0.0f); + float _919 = max(_799 * _872, 0.0f); + bool _946 = CB1_m0.w != 0u; + float _947 = _946 ? ((((mad(_887, mad(_552, _887, _556), _557) / mad(_887, mad(_552, _887, _553), _558)) - _559) * _880) * CB1_m2.x) : clamp(_554 * ((mad(_917, mad(_552, _917, _556), _557) / mad(_917, mad(_552, _917, _553), _558)) - _559), 0.0f, 1.0f); + float _948 = _946 ? (CB1_m2.x * (_880 * ((mad(mad(_552, _888, _556), _888, _557) / mad(mad(_552, _888, _553), _888, _558)) - _559))) : clamp(_554 * ((mad(mad(_552, _918, _556), _918, _557) / mad(mad(_552, _918, _553), _918, _558)) - _559), 0.0f, 1.0f); + float _949 = _946 ? (CB1_m2.x * (_880 * ((mad(mad(_552, _889, _556), _889, _557) / mad(mad(_552, _889, _553), _889, _558)) - _559))) : clamp(_554 * ((mad(mad(_552, _919, _556), _919, _557) / mad(mad(_552, _919, _553), _919, _558)) - _559), 0.0f, 1.0f); + float _1022; + float _1023; + float _1024; + if (_602) { + float _1019; + float _1020; + float _1021; + if (CB0_m[50u].w != 0u) { + float2 _972 = float2(TEXCOORD.x - asfloat(CB0_m[49u].x), TEXCOORD.y - asfloat(CB0_m[49u].y)); + float2 _986 = float2(dp2_f32(float2(asfloat(CB0_m[51u].x), asfloat(CB0_m[51u].y)), _972) * asfloat(CB0_m[49u].z), dp2_f32(float2(asfloat(CB0_m[51u].z), asfloat(CB0_m[51u].w)), _972) * asfloat(CB0_m[49u].w)); + float _1004 = T7.Sample(S2, clamp((dp2_f32(_986, _986) - asfloat(CB0_m[52u].x)) * asfloat(CB0_m[52u].w), 0.0f, 1.0f)).w * asfloat(CB0_m[50u].w); + _1019 = mad(_1004, asfloat(CB0_m[50u].z) - _949, _949); + _1020 = mad(_1004, asfloat(CB0_m[50u].y) - _948, _948); + _1021 = mad(_1004, asfloat(CB0_m[50u].x) - _947, _947); + } else { + _1019 = _949; + _1020 = _948; + _1021 = _947; + } + _1022 = _1019; + _1023 = _1020; + _1024 = _1021; + } else { + _1022 = _949; + _1023 = _948; + _1024 = _947; + } + bool _1060 = _946 && (CB1_m0.z == 0u); + float _1061 = _1060 ? _1024 : ((_1024 < 0.003130800090730190277099609375f) ? (_1024 * CB1_m3.w) : mad(exp2(log2(_1024) * CB1_m4.x), CB1_m4.y, -CB1_m4.z)); + float _1062 = _1060 ? _1023 : ((_1023 < 0.003130800090730190277099609375f) ? (_1023 * CB1_m3.w) : mad(CB1_m4.y, exp2(CB1_m4.x * log2(_1023)), -CB1_m4.z)); + float _1063 = _1060 ? _1022 : ((_1022 < 0.003130800090730190277099609375f) ? (_1022 * CB1_m3.w) : mad(CB1_m4.y, exp2(CB1_m4.x * log2(_1022)), -CB1_m4.z)); + float _1261; + float _1262; + float _1263; + if (_602 && (CB0_m[19u].x != 0u)) { + float _1072 = asfloat(CB0_m[17u].x); + float _1073 = _1072 * 0.070000000298023223876953125f; + float _1074 = _1072 * 0.10999999940395355224609375f; + float _1075 = _1072 * 0.12999999523162841796875f; + float _1076 = _1072 * 0.17000000178813934326171875f; + float _1079 = asfloat(CB0_m[17u].w); + float _1080 = TEXCOORD.x * _1079; + float _1081 = TEXCOORD.y * _1079; + float _1109 = _1072 * 0.189999997615814208984375f; + float _1110 = _1072 * 0.23000000417232513427734375f; + float _1111 = _1072 * 0.2899999916553497314453125f; + float _1112 = _1072 * 0.310000002384185791015625f; + float _1153 = clamp(mad(frac(sin(dp2_f32(float2(_1080 + _1112, _1112 + _1081), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f) + ((((frac(sin(dp2_f32(float2(_1080 + _1076, _1081 + _1076), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f) + ((frac(sin(dp2_f32(float2(_1080 + _1073, _1081 + _1073), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f) + frac(sin(dp2_f32(float2(_1080 + _1074, _1081 + _1074), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f)) + frac(sin(dp2_f32(float2(_1080 + _1075, _1081 + _1075), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f))) + frac(sin(dp2_f32(float2(_1080 + _1109, _1109 + _1081), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f)) + frac(sin(dp2_f32(float2(_1080 + _1110, _1110 + _1081), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f)) + frac(sin(dp2_f32(float2(_1080 + _1111, _1111 + _1081), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f)), 0.125f, asfloat(CB0_m[17u].z)), 0.0f, 1.0f); + float _1155 = dp3_f32(float3(_1061, _1062, _1063), float3(0.2125999927520751953125f, 0.715200006961822509765625f, 0.072200000286102294921875f)); + float _1163 = (CB0_m[18u].y != 0u) ? mad(_1153 * (_1155 * (_1155 * _1155)), -0.5f, _1153) : _1153; + float _1167 = _1163 - 0.5f; + float _1170 = asfloat(CB0_m[18u].x); + bool _1180 = _1163 < 0.5f; + float _1181 = _1163 + _1163; + float _1182 = _1181 * _1061; + float _1183 = _1181 * _1062; + float _1184 = _1181 * _1063; + float _1188 = mad(_1163, -2.0f, 1.0f); + float _1198 = 1.0f - _1163; + float _1202 = mad(_1163, 2.0f, -1.0f); + float _1224 = _1198 + _1198; + bool _1245 = CB0_m[19u].w != 0u; + bool _1251 = CB0_m[19u].z != 0u; + bool _1257 = CB0_m[18u].w != 0u; + _1261 = _1257 ? (_1251 ? mad(_1170, (_1180 ? ((_1188 * (_1063 * _1063)) + _1184) : ((_1198 * (_1063 + _1063)) + (_1202 * sqrt(_1063)))) - _1063, _1063) : (_1245 ? mad(_1170, ((_1063 < 0.5f) ? _1184 : mad(-_1224, 1.0f - _1063, 1.0f)) - _1063, _1063) : clamp(max(mad(_1167, _1170, _1063), _1063 * 0.02500000037252902984619140625f), 0.0f, 1.0f))) : _1153; + _1262 = _1257 ? (_1251 ? mad(_1170, (_1180 ? ((_1188 * (_1062 * _1062)) + _1183) : ((_1198 * (_1062 + _1062)) + (_1202 * sqrt(_1062)))) - _1062, _1062) : (_1245 ? mad(_1170, ((_1062 < 0.5f) ? _1183 : mad(-_1224, 1.0f - _1062, 1.0f)) - _1062, _1062) : clamp(max(mad(_1167, _1170, _1062), _1062 * 0.02500000037252902984619140625f), 0.0f, 1.0f))) : _1153; + _1263 = _1257 ? (_1251 ? mad(_1170, (_1180 ? (_1182 + ((_1061 * _1061) * _1188)) : ((sqrt(_1061) * _1202) + ((_1061 + _1061) * _1198))) - _1061, _1061) : (_1245 ? mad(_1170, ((_1061 < 0.5f) ? _1182 : mad(-_1224, 1.0f - _1061, 1.0f)) - _1061, _1061) : clamp(max(mad(_1167, _1170, _1061), _1061 * 0.02500000037252902984619140625f), 0.0f, 1.0f))) : _1153; + } else { + _1261 = _1063; + _1262 = _1062; + _1263 = _1061; + } + float3 _1264 = float3(_1263, _1262, _1261); + float _1269 = max(dp3_f32(float3(0.265399992465972900390625f, 0.67040002346038818359375f, 0.06419999897480010986328125f), _1264), 0.0f); + float _1275 = mad(((max(dp3_f32(float3(0.02480000071227550506591796875f, 0.1247999966144561767578125f, 0.85039997100830078125f), _1264), 0.0f) + _1269) / max(dp3_f32(float3(0.514900028705596923828125f, 0.324400007724761962890625f, 0.1606999933719635009765625f), _1264), 0.00999999977648258209228515625f)) + 1.0f, 1.33000004291534423828125f, -1.67999994754791259765625f) * _1269; + float _1289 = asfloat(CB0_m[83u].w); + float _1303 = clamp(mad(0.039999999105930328369140625f / (_567 + 0.039999999105930328369140625f), asfloat(CB0_m[84u].x), asfloat(CB0_m[84u].y)), 0.0f, 1.0f); + float _1307 = mad(_1303, clamp((_1275 * asfloat(CB0_m[83u].x)) * _1289, 0.0f, 1.0f) - _1263, _1263); + float _1308 = mad(_1303, clamp(_1289 * (_1275 * asfloat(CB0_m[83u].y)), 0.0f, 1.0f) - _1262, _1262); + float _1309 = mad(_1303, clamp(_1289 * (_1275 * asfloat(CB0_m[83u].z)), 0.0f, 1.0f) - _1261, _1261); + float _1365; + float _1366; + float _1367; + if (CB0_m[86u].w != 0u) { + float _1319 = asfloat(CB0_m[87u].x); + float _1320 = asfloat(CB0_m[87u].w); + float _1335 = asfloat(CB0_m[86u].z); + float4 _1354 = T23.Sample(S2, float2(((((TEXCOORD.x - 0.5f) * _1335) / mad(TEXCOORD.y, asfloat(CB0_m[87u].z) - _1320, _1320)) - asfloat(CB0_m[86u].x)) + 0.5f, (((_1335 * (TEXCOORD.y - 0.5f)) / mad(TEXCOORD.x, asfloat(CB0_m[87u].y) - _1319, _1319)) - asfloat(CB0_m[86u].y)) + 0.5f)); + float _1361 = asfloat(CB0_m[86u].w); + _1365 = mad(_1354.x - _1307, _1361, _1307); + _1366 = mad(_1361, _1354.y - _1308, _1308); + _1367 = mad(_1361, _1354.z - _1309, _1309); + } else { + _1365 = _1307; + _1366 = _1308; + _1367 = _1309; + } + float _1755; + float _1756; + float _1757; + if (_602) { + float _1376 = max(max(max(_1366, _1367), _1365), 9.9999997473787516355514526367188e-05f); + float _1387 = ((CB1_m1.y == 0u) && _1060) ? 1.0f : (((_1376 > CB1_m2.y) ? mad(_1376, CB1_m3.x, CB1_m3.y) : _1376) / _1376); + float _1388 = _1367 * _1387; + float _1393 = floor(_1388 * 14.99989986419677734375f); + float _1395 = mad(_1388, 15.0f, -_1393); + float _1397 = (_1393 * 0.0625f) + ((_1365 * _1387) * 0.05859375f); + float _1399 = mad(_1366 * _1387, 0.9375f, 0.03125f); + float4 _1405 = T19.Sample(S2, float2(_1397 + 0.001953125f, _1399)); + float _1406 = _1405.x; + float _1407 = _1405.y; + float _1408 = _1405.z; + float4 _1411 = T19.Sample(S2, float2(_1397 + 0.064453125f, _1399)); + float _1418 = mad(_1395, _1411.x - _1406, _1406); + float _1419 = mad(_1395, _1411.y - _1407, _1407); + float _1420 = mad(_1395, _1411.z - _1408, _1408); + float _1749; + float _1750; + float _1751; + if (int(T27.Load(0)) > 0) { + float4 _1430 = T12.Sample(S0, _314); + float _1442 = clamp(asfloat(T27.Load(4)) * _1430.x, 0.0f, 1.0f); + float _1443 = clamp(asfloat(T27.Load(4)) * _1430.y, 0.0f, 1.0f); + float _1444 = clamp(asfloat(T27.Load(4)) * _1430.z, 0.0f, 1.0f); + float _1445 = clamp(asfloat(T27.Load(4)) * _1430.w, 0.0f, 1.0f); + float _1453 = dp3_f32(float3(T21.Sample(S2, _314).xyz), float3(0.2125999927520751953125f, 0.715200006961822509765625f, 0.072200000286102294921875f)); + float _1454 = _1442 * _1453; + float _1455 = _1453 * _1443; + float _1456 = _1453 * _1444; + float _1457 = _1453 * _1445; + float _1499; + float _1500; + float _1501; + if (_1454 != 0.0f) { + float _1466 = floor(_1420 * 14.99989986419677734375f); + float _1468 = mad(_1420, 15.0f, -_1466); + float _1470 = (_1466 * 0.0625f) + (_1418 * 0.05859375f); + float _1472 = mad(_1419, 0.9375f, 0.03125f); + float4 _1477 = T15.Sample(S2, float2(_1470 + 0.001953125f, _1472)); + float _1478 = _1477.x; + float _1479 = _1477.y; + float _1480 = _1477.z; + float4 _1483 = T15.Sample(S2, float2(_1470 + 0.064453125f, _1472)); + _1499 = mad(_1454, mad(_1468, _1483.z - _1480, _1480) - _1420, _1420); + _1500 = mad(_1454, mad(_1468, _1483.y - _1479, _1479) - _1419, _1419); + _1501 = mad(_1454, mad(_1468, _1483.x - _1478, _1478) - _1418, _1418); + } else { + _1499 = _1420; + _1500 = _1419; + _1501 = _1418; + } + float _1539; + float _1540; + float _1541; + if (_1455 != 0.0f) { + float _1506 = floor(_1499 * 14.99989986419677734375f); + float _1508 = mad(_1499, 15.0f, -_1506); + float _1510 = (_1501 * 0.05859375f) + (_1506 * 0.0625f); + float _1512 = mad(_1500, 0.9375f, 0.03125f); + float4 _1517 = T16.Sample(S2, float2(_1510 + 0.001953125f, _1512)); + float _1518 = _1517.x; + float _1519 = _1517.y; + float _1520 = _1517.z; + float4 _1523 = T16.Sample(S2, float2(_1510 + 0.064453125f, _1512)); + _1539 = mad(mad(_1523.z - _1520, _1508, _1520) - _1499, _1455, _1499); + _1540 = mad(mad(_1523.y - _1519, _1508, _1519) - _1500, _1455, _1500); + _1541 = mad(_1455, mad(_1508, _1523.x - _1518, _1518) - _1501, _1501); + } else { + _1539 = _1499; + _1540 = _1500; + _1541 = _1501; + } + float _1579; + float _1580; + float _1581; + if (_1456 != 0.0f) { + float _1546 = floor(_1539 * 14.99989986419677734375f); + float _1548 = mad(_1539, 15.0f, -_1546); + float _1550 = (_1541 * 0.05859375f) + (_1546 * 0.0625f); + float _1552 = mad(_1540, 0.9375f, 0.03125f); + float4 _1557 = T17.Sample(S2, float2(_1550 + 0.001953125f, _1552)); + float _1558 = _1557.x; + float _1559 = _1557.y; + float _1560 = _1557.z; + float4 _1563 = T17.Sample(S2, float2(_1550 + 0.064453125f, _1552)); + _1579 = mad(mad(_1563.z - _1560, _1548, _1560) - _1539, _1456, _1539); + _1580 = mad(mad(_1563.y - _1559, _1548, _1559) - _1540, _1456, _1540); + _1581 = mad(_1456, mad(_1548, _1563.x - _1558, _1558) - _1541, _1541); + } else { + _1579 = _1539; + _1580 = _1540; + _1581 = _1541; + } + float _1619; + float _1620; + float _1621; + if (_1457 != 0.0f) { + float _1586 = floor(_1579 * 14.99989986419677734375f); + float _1588 = mad(_1579, 15.0f, -_1586); + float _1590 = (_1581 * 0.05859375f) + (_1586 * 0.0625f); + float _1592 = mad(_1580, 0.9375f, 0.03125f); + float4 _1597 = T18.Sample(S2, float2(_1590 + 0.001953125f, _1592)); + float _1598 = _1597.x; + float _1599 = _1597.y; + float _1600 = _1597.z; + float4 _1603 = T18.Sample(S2, float2(_1590 + 0.064453125f, _1592)); + _1619 = mad(mad(_1603.z - _1600, _1588, _1600) - _1579, _1457, _1579); + _1620 = mad(mad(_1603.y - _1599, _1588, _1599) - _1580, _1457, _1580); + _1621 = mad(_1457, mad(_1588, _1603.x - _1598, _1598) - _1581, _1581); + } else { + _1619 = _1579; + _1620 = _1580; + _1621 = _1581; + } + float _1655 = clamp(asfloat(T27.Load4(32)).x + ((_329 < asfloat(T27.Load4(16)).z) ? clamp(asfloat(T27.Load4(16)).y * (_329 - asfloat(T27.Load4(16)).x), 0.0f, 1.0f) : (1.0f - clamp(asfloat(T27.Load4(16)).w * (_329 - asfloat(T27.Load4(16)).z), 0.0f, 1.0f))), 0.0f, 1.0f); + float _1658 = floor(_1619 * 14.99989986419677734375f); + float _1660 = mad(_1619, 15.0f, -_1658); + float _1662 = (_1621 * 0.05859375f) + (_1658 * 0.0625f); + float _1664 = mad(_1620, 0.9375f, 0.03125f); + float4 _1669 = T13.Sample(S2, float2(_1662 + 0.001953125f, _1664)); + float _1670 = _1669.x; + float _1671 = _1669.y; + float _1672 = _1669.z; + float4 _1675 = T13.Sample(S2, float2(_1662 + 0.064453125f, _1664)); + float _1688 = mad(_1655, mad(_1660, _1675.x - _1670, _1670) - _1621, _1621); + float _1689 = mad(mad(_1675.y - _1671, _1660, _1671) - _1620, _1655, _1620); + float _1690 = mad(mad(_1675.z - _1672, _1660, _1672) - _1619, _1655, _1619); + float _1701 = clamp(asfloat(T27.Load2(48)).y + ((_329 < asfloat(T27.Load4(32)).w) ? clamp(asfloat(T27.Load4(32)).z * (_329 - asfloat(T27.Load4(32)).y), 0.0f, 1.0f) : (1.0f - clamp(asfloat(T27.Load2(48)).x * (_329 - asfloat(T27.Load4(32)).w), 0.0f, 1.0f))), 0.0f, 1.0f); + float _1704 = floor(_1690 * 14.99989986419677734375f); + float _1706 = mad(_1690, 15.0f, -_1704); + float _1708 = (_1688 * 0.05859375f) + (_1704 * 0.0625f); + float _1710 = mad(_1689, 0.9375f, 0.03125f); + float4 _1715 = T14.Sample(S2, float2(_1708 + 0.001953125f, _1710)); + float _1716 = _1715.x; + float _1717 = _1715.y; + float _1718 = _1715.z; + float4 _1721 = T14.Sample(S2, float2(_1708 + 0.064453125f, _1710)); + float _1745 = (1.0f - min(_1445 + (_1444 + (_1442 + _1443)), 1.0f)) * dp3_f32(float3(T20.Sample(S2, _314).xyz), float3(0.2125999927520751953125f, 0.715200006961822509765625f, 0.072200000286102294921875f)); + _1749 = mad((mad(_1721.z - _1718, _1706, _1718) - _1690) * _1701, _1745, _1690); + _1750 = mad((mad(_1721.y - _1717, _1706, _1717) - _1689) * _1701, _1745, _1689); + _1751 = mad(_1701 * (mad(_1706, _1721.x - _1716, _1716) - _1688), _1745, _1688); + } else { + _1749 = _1420; + _1750 = _1419; + _1751 = _1418; + } + _1755 = _1749 / _1387; + _1756 = _1750 / _1387; + _1757 = _1751 / _1387; + } else { + _1755 = _1367; + _1756 = _1366; + _1757 = _1365; + } + float _1759 = dp3_f32(float3(_1757, _1756, _1755), float3(0.2989999949932098388671875f, 0.58700001239776611328125f, 0.114000000059604644775390625f)); + float _1761 = max(max(_1755, _1756), _1757); + bool _1764 = CB0_m[41u].w != 0u; + float _1798 = asfloat(CB0_m[42u].w); + float _1810 = asfloat(CB0_m[39u].x); + float _1811 = asfloat(CB0_m[39u].y); + float _1812 = asfloat(CB0_m[39u].z); + float _1844 = mad(T2.Load(int4(uint3(uint2(cvt_f32_u32(gl_FragCoord.x) & 63u, cvt_f32_u32(gl_FragCoord.y) & 63u), T1.Load(1840) & 31u), 0u)).x, 2.0f, -1.0f); + float _1857 = _946 ? (float(int(((_1844 < 0.0f) ? 4294967295u : 0u) + uint(_1844 > 0.0f))) * (1.0f - sqrt(1.0f - abs(_1844)))) : _1844; + float _1858 = mad(mad(exp2(log2(clamp(((_1764 ? _1757 : _1761) - asfloat(CB0_m[42u].x)) * asfloat(CB0_m[41u].x), 0.0f, 1.0f)) * _1798), asfloat(CB0_m[40u].x) - _1810, _1810), _1857, _1757); + float _1859 = mad(mad(asfloat(CB0_m[40u].y) - _1811, exp2(log2(clamp(((_1764 ? _1756 : _1761) - asfloat(CB0_m[42u].y)) * asfloat(CB0_m[41u].y), 0.0f, 1.0f)) * _1798), _1811), _1857, _1756); + float _1860 = mad(mad(asfloat(CB0_m[40u].z) - _1812, exp2(log2(clamp(((_1764 ? _1755 : _1761) - asfloat(CB0_m[42u].z)) * asfloat(CB0_m[41u].z), 0.0f, 1.0f)) * _1798), _1812), _1857, _1755); + SV_Target.x = _946 ? _1858 : clamp(_1858, 0.0f, 1.0f); + SV_Target.y = _946 ? _1859 : clamp(_1859, 0.0f, 1.0f); + SV_Target.z = _946 ? _1860 : clamp(_1860, 0.0f, 1.0f); + SV_Target.w = _946 ? _1759 : clamp(_1759, 0.0f, 1.0f); +} + +SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { + gl_FragCoord = stage_input.gl_FragCoord; + gl_FragCoord.w = 1.0 / gl_FragCoord.w; + TEXCOORD = stage_input.TEXCOORD; + TEXCOORD1 = stage_input.TEXCOORD1; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.SV_Target = SV_Target; + return stage_output; +} diff --git a/src/games/rdr2/lut/0x8704771A.ps_5_1.hlslx b/src/games/rdr2/lut/0x8704771A.ps_5_1.hlslx new file mode 100644 index 0000000000..5481c2a423 --- /dev/null +++ b/src/games/rdr2/lut/0x8704771A.ps_5_1.hlslx @@ -0,0 +1,480 @@ +struct anon_m { + int _m0; + float3 _m1; + float4 _m2; + float4 _m3; + float2 _m4; + uint4 _m5; + uint4 _m6; + uint4 _m7; + uint4 _m8; + uint4 _m9; + uint4 _m10; + uint4 _m11; + uint4 _m12; + uint4 _m13; + uint4 _m14; + uint4 _m15; + uint _m16; +}; + +cbuffer CB0_buf : register(b0, space0) { + uint4 CB0_m[88] : packoffset(c0); +}; + +cbuffer CB1_buf : register(b1, space0) { + uint4 CB1_m0 : packoffset(c0); + uint2 CB1_m1 : packoffset(c1); + float2 CB1_m2 : packoffset(c1.z); + float4 CB1_m3 : packoffset(c2); + float4 CB1_m4 : packoffset(c3); +}; + +ByteAddressBuffer T0 : register(t5, space0); +ByteAddressBuffer T1 : register(t6, space0); +ByteAddressBuffer T22 : register(t27, space0); +SamplerState S0 : register(s2, space0); +SamplerState S1 : register(s3, space0); +SamplerState S2 : register(s4, space0); +Texture2DArray T2 : register(t7, space0); +Texture2D T3 : register(t8, space0); +Texture2D T4 : register(t9, space0); +Texture2D T5 : register(t10, space0); +Texture1D T6 : register(t11, space0); +Texture2D T7 : register(t12, space0); +Texture2D T8 : register(t13, space0); +Texture2D T9 : register(t14, space0); +Texture2D T10 : register(t15, space0); +Texture2D T11 : register(t16, space0); +Texture2D T12 : register(t17, space0); +Texture2D T13 : register(t18, space0); +Texture2D T14 : register(t19, space0); +Texture2D T15 : register(t20, space0); +Texture2D T16 : register(t21, space0); +Texture2D T17 : register(t22, space0); +Texture2D T18 : register(t23, space0); +Texture2D T19 : register(t24, space0); +Texture2D T20 : register(t25, space0); +Buffer T21 : register(t26, space0); + +static float4 gl_FragCoord; +static float4 TEXCOORD; +static float TEXCOORD1; +static float4 SV_Target; + +struct SPIRV_Cross_Input { + float4 TEXCOORD : TEXCOORD1; + float TEXCOORD1 : TEXCOORD2; + float4 gl_FragCoord : SV_Position; +}; + +struct SPIRV_Cross_Output { + float4 SV_Target : SV_Target0; +}; + +float dp3_f32(float3 a, float3 b) { + precise float _271 = a.x * b.x; + return mad(a.z, b.z, mad(a.y, b.y, _271)); +} + +float dp2_f32(float2 a, float2 b) { + precise float _260 = a.x * b.x; + return mad(a.y, b.y, _260); +} + +uint cvt_f32_u32(float v) { + return (v > 4294967040.0f) ? 4294967295u : uint(max(v, 0.0f)); +} + +void frag_main() { + float2 _287 = float2(TEXCOORD.x, TEXCOORD.y); + float4 _290 = T7.Sample(S2, _287); + float _298 = asfloat(T0.Load(16)); + float _299 = _290.x * _298; + float _300 = _290.y * _298; + float _301 = _290.z * _298; + float4 _303 = T21.Load(0u); + float _304 = _303.x; + float _305 = _303.y; + float _306 = _303.z; + float4 _307 = T21.Load(1u); + float _308 = _307.x; + float _309 = _307.y; + float _310 = _307.z; + float _311 = _307.w; + float4 _313 = T3.Load(int3(uint2(0u, 0u), 0u)); + float _314 = _313.x; + float _319 = dp3_f32(float3(_314 * _299, _314 * _300, _314 * _301), float3(0.300000011920928955078125f, 0.589999973773956298828125f, 0.10999999940395355224609375f)); + bool _346; + float _347; + float _348; + float _349; + if (CB0_m[64u].x != 0u) { + float4 _332 = T19.Sample(S2, _287); + float _333 = _332.x; + float _334 = _332.y; + float _335 = _332.z; + float _336 = _332.w; + bool _338 = (_336 + 9.9999997473787516355514526367188e-05f) >= 1.0f; + float _339 = 1.0f - _336; + _346 = _338; + _347 = _338 ? _335 : mad(_339, _301, _335); + _348 = _338 ? _334 : mad(_339, _300, _334); + _349 = _338 ? _333 : mad(_339, _299, _333); + } else { + _346 = false; + _347 = _301; + _348 = _300; + _349 = _299; + } + float _353 = min(_314 * _349, 65504.0f); + float _354 = min(_314 * _348, 65504.0f); + float _355 = min(_314 * _347, 65504.0f); + bool _356 = !_346; + float _554; + float _555; + float _556; + float _557; + if (_356) { + float _436; + if (CB0_m[73u].x != 0u) { + float4 _369 = T5.Sample(S1, _287); + float _384 = clamp(dp3_f32(float3(_314 * _369.x, _314 * _369.y, _314 * _369.z), float3(0.300000011920928955078125f, 0.589999973773956298828125f, 0.10999999940395355224609375f)), asfloat(CB0_m[75u].z), asfloat(CB0_m[75u].w)); + float _409 = asfloat(CB0_m[69u].x); + float _412 = asfloat(CB0_m[69u].y); + float _413 = clamp(mad(_384, asfloat(CB0_m[75u].y), mad(log2(_384 + asfloat(CB0_m[75u].x)) * asfloat(CB0_m[73u].y), 0.693147182464599609375f, asfloat(CB0_m[73u].z)) - 10.0f) + asfloat(CB0_m[68u].w), _409, _412); + _436 = exp2(mad(clamp(asfloat(CB0_m[73u].x), 0.0f, 1.0f), clamp(_409, mad(abs(_413) * asfloat(CB0_m[69u].z), float(int(((_413 < 0.0f) ? 4294967295u : 0u) + uint(_413 > 0.0f))), _413), _412) - TEXCOORD1, TEXCOORD1)); + } else { + _436 = TEXCOORD.z; + } + float _439 = asfloat(CB0_m[16u].w); + float _463 = _319 * (T8.Sample(S1, float2(frac(mad(TEXCOORD.x * _439, 1.60000002384185791015625f, asfloat(CB0_m[16u].x))), frac(mad(TEXCOORD.y * _439, 0.89999997615814208984375f, asfloat(CB0_m[16u].y))))).w - 0.5f); + float _466 = asfloat(CB0_m[16u].z); + float _470 = max(_353 * 0.5f, mad(_463, _466, _353)); + float _471 = max(_354 * 0.5f, mad(_463, _466, _354)); + float _472 = max(_355 * 0.5f, mad(_463, _466, _355)); + float2 _488 = float2(TEXCOORD.x - asfloat(CB0_m[53u].x), TEXCOORD.y - asfloat(CB0_m[53u].y)); + float2 _502 = float2(dp2_f32(float2(asfloat(CB0_m[55u].x), asfloat(CB0_m[55u].y)), _488) * asfloat(CB0_m[53u].z), dp2_f32(float2(asfloat(CB0_m[55u].z), asfloat(CB0_m[55u].w)), _488) * asfloat(CB0_m[53u].w)); + float _512 = max((dp2_f32(_502, _502) - asfloat(CB0_m[56u].x)) * asfloat(CB0_m[56u].w), 0.0f); + float _524 = (_512 < 1.0f) ? (1.0f - exp2(_512 * (-10.0f))) : ((((_512 - 1.0f) > 0.0f) ? exp2((_512 - 2.0f) * 10.0f) : 0.0f) + 0.9980499744415283203125f); + float _538 = asfloat(CB0_m[54u].w); + bool _548 = CB0_m[54u].w != 0u; + _554 = _436; + _555 = _548 ? mad(mad(_538, asfloat(CB0_m[54u].z) * _472, -_472), _524, _472) : _472; + _556 = _548 ? mad(mad(_538, asfloat(CB0_m[54u].y) * _471, -_471), _524, _471) : _471; + _557 = _548 ? mad(mad(_470 * asfloat(CB0_m[54u].x), _538, -_470), _524, _470) : _470; + } else { + _554 = TEXCOORD.z; + _555 = _355; + _556 = _354; + _557 = _353; + } + float _567 = clamp(clamp(TEXCOORD.y * asfloat(CB0_m[60u].y), 0.0f, 1.0f) + asfloat(CB0_m[57u].w), 0.0f, 1.0f); + float _582 = clamp(clamp(clamp(TEXCOORD.y - asfloat(CB0_m[59u].w), 0.0f, 1.0f) * asfloat(CB0_m[60u].x), 0.0f, 1.0f) - asfloat(CB0_m[58u].w), 0.0f, 1.0f); + float _588 = asfloat(CB0_m[57u].x); + float _589 = asfloat(CB0_m[57u].y); + float _590 = asfloat(CB0_m[57u].z); + float _596 = asfloat(CB0_m[59u].x); + float _597 = asfloat(CB0_m[59u].y); + float _598 = asfloat(CB0_m[59u].z); + float _602 = mad(_567, _596 - _588, _588); + float _603 = mad(_567, _597 - _589, _589); + float _604 = mad(_598 - _590, _567, _590); + float _625 = mad(TEXCOORD.y, mad(_582, asfloat(CB0_m[58u].x) - _596, _596) - _602, _602) * _557; + float _626 = _556 * mad(TEXCOORD.y, mad(asfloat(CB0_m[58u].y) - _597, _582, _597) - _603, _603); + float _627 = _555 * mad(TEXCOORD.y, mad(asfloat(CB0_m[58u].z) - _598, _582, _598) - _604, _604); + float _635 = (CB1_m1.x != 0u) ? CB1_m3.z : _306; + float _638 = _554 / CB1_m2.x; + float _642 = max(_625 * _638, 0.0f); + float _643 = max(_638 * _626, 0.0f); + float _644 = max(_638 * _627, 0.0f); + float _672 = max(_625 * _554, 0.0f); + float _673 = max(_554 * _626, 0.0f); + float _674 = max(_554 * _627, 0.0f); + bool _701 = CB1_m0.w != 0u; + float _702 = _701 ? ((((mad(_642, mad(_304, _642, _308), _309) / mad(_642, mad(_304, _642, _305), _310)) - _311) * _635) * CB1_m2.x) : clamp(_306 * ((mad(_672, mad(_304, _672, _308), _309) / mad(_672, mad(_304, _672, _305), _310)) - _311), 0.0f, 1.0f); + float _703 = _701 ? (CB1_m2.x * (_635 * ((mad(mad(_304, _643, _308), _643, _309) / mad(mad(_304, _643, _305), _643, _310)) - _311))) : clamp(_306 * ((mad(mad(_304, _673, _308), _673, _309) / mad(mad(_304, _673, _305), _673, _310)) - _311), 0.0f, 1.0f); + float _704 = _701 ? (CB1_m2.x * (_635 * ((mad(mad(_304, _644, _308), _644, _309) / mad(mad(_304, _644, _305), _644, _310)) - _311))) : clamp(_306 * ((mad(mad(_304, _674, _308), _674, _309) / mad(mad(_304, _674, _305), _674, _310)) - _311), 0.0f, 1.0f); + float _777; + float _778; + float _779; + if (_356) { + float _774; + float _775; + float _776; + if (CB0_m[50u].w != 0u) { + float2 _727 = float2(TEXCOORD.x - asfloat(CB0_m[49u].x), TEXCOORD.y - asfloat(CB0_m[49u].y)); + float2 _741 = float2(dp2_f32(float2(asfloat(CB0_m[51u].x), asfloat(CB0_m[51u].y)), _727) * asfloat(CB0_m[49u].z), dp2_f32(float2(asfloat(CB0_m[51u].z), asfloat(CB0_m[51u].w)), _727) * asfloat(CB0_m[49u].w)); + float _759 = T6.Sample(S1, clamp((dp2_f32(_741, _741) - asfloat(CB0_m[52u].x)) * asfloat(CB0_m[52u].w), 0.0f, 1.0f)).w * asfloat(CB0_m[50u].w); + _774 = mad(_759, asfloat(CB0_m[50u].z) - _704, _704); + _775 = mad(_759, asfloat(CB0_m[50u].y) - _703, _703); + _776 = mad(_759, asfloat(CB0_m[50u].x) - _702, _702); + } else { + _774 = _704; + _775 = _703; + _776 = _702; + } + _777 = _774; + _778 = _775; + _779 = _776; + } else { + _777 = _704; + _778 = _703; + _779 = _702; + } + bool _815 = _701 && (CB1_m0.z == 0u); + float _816 = _815 ? _779 : ((_779 < 0.003130800090730190277099609375f) ? (CB1_m3.w * _779) : mad(exp2(log2(_779) * CB1_m4.x), CB1_m4.y, -CB1_m4.z)); + float _817 = _815 ? _778 : ((_778 < 0.003130800090730190277099609375f) ? (CB1_m3.w * _778) : mad(CB1_m4.y, exp2(CB1_m4.x * log2(_778)), -CB1_m4.z)); + float _818 = _815 ? _777 : ((_777 < 0.003130800090730190277099609375f) ? (CB1_m3.w * _777) : mad(CB1_m4.y, exp2(CB1_m4.x * log2(_777)), -CB1_m4.z)); + float _1016; + float _1017; + float _1018; + if ((CB0_m[19u].x != 0u) && _356) { + float _827 = asfloat(CB0_m[17u].x); + float _828 = _827 * 0.070000000298023223876953125f; + float _829 = _827 * 0.10999999940395355224609375f; + float _830 = _827 * 0.12999999523162841796875f; + float _831 = _827 * 0.17000000178813934326171875f; + float _834 = asfloat(CB0_m[17u].w); + float _835 = TEXCOORD.x * _834; + float _836 = TEXCOORD.y * _834; + float _865 = _827 * 0.189999997615814208984375f; + float _866 = _827 * 0.23000000417232513427734375f; + float _867 = _827 * 0.2899999916553497314453125f; + float _868 = _827 * 0.310000002384185791015625f; + float _908 = clamp(mad((((frac(sin(dp2_f32(float2(_835 + _865, _865 + _836), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f) + (((frac(sin(dp2_f32(float2(_835 + _828, _836 + _828), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f) + frac(sin(dp2_f32(float2(_835 + _829, _836 + _829), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f)) + frac(sin(dp2_f32(float2(_835 + _830, _836 + _830), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f)) + frac(sin(dp2_f32(float2(_835 + _831, _836 + _831), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f))) + frac(sin(dp2_f32(float2(_835 + _866, _866 + _836), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f)) + frac(sin(dp2_f32(float2(_835 + _867, _867 + _836), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f)) + frac(sin(dp2_f32(float2(_835 + _868, _868 + _836), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f), 0.125f, asfloat(CB0_m[17u].z)), 0.0f, 1.0f); + float _910 = dp3_f32(float3(_816, _817, _818), float3(0.2125999927520751953125f, 0.715200006961822509765625f, 0.072200000286102294921875f)); + float _918 = (CB0_m[18u].y != 0u) ? mad(_908 * (_910 * (_910 * _910)), -0.5f, _908) : _908; + float _922 = _918 - 0.5f; + float _925 = asfloat(CB0_m[18u].x); + bool _935 = _918 < 0.5f; + float _936 = _918 + _918; + float _937 = _936 * _816; + float _938 = _936 * _817; + float _939 = _936 * _818; + float _943 = mad(_918, -2.0f, 1.0f); + float _953 = 1.0f - _918; + float _957 = mad(_918, 2.0f, -1.0f); + float _979 = _953 + _953; + bool _1000 = CB0_m[19u].w != 0u; + bool _1006 = CB0_m[19u].z != 0u; + bool _1012 = CB0_m[18u].w != 0u; + _1016 = _1012 ? (_1006 ? mad(_925, (_935 ? ((_943 * (_818 * _818)) + _939) : ((_953 * (_818 + _818)) + (_957 * sqrt(_818)))) - _818, _818) : (_1000 ? mad(_925, ((_818 < 0.5f) ? _939 : mad(-_979, 1.0f - _818, 1.0f)) - _818, _818) : clamp(max(mad(_922, _925, _818), _818 * 0.02500000037252902984619140625f), 0.0f, 1.0f))) : _908; + _1017 = _1012 ? (_1006 ? mad(_925, (_935 ? ((_943 * (_817 * _817)) + _938) : ((_953 * (_817 + _817)) + (_957 * sqrt(_817)))) - _817, _817) : (_1000 ? mad(_925, ((_817 < 0.5f) ? _938 : mad(-_979, 1.0f - _817, 1.0f)) - _817, _817) : clamp(max(mad(_922, _925, _817), _817 * 0.02500000037252902984619140625f), 0.0f, 1.0f))) : _908; + _1018 = _1012 ? (_1006 ? mad(_925, (_935 ? (_937 + ((_816 * _816) * _943)) : ((sqrt(_816) * _957) + ((_816 + _816) * _953))) - _816, _816) : (_1000 ? mad(_925, ((_816 < 0.5f) ? _937 : mad(-_979, 1.0f - _816, 1.0f)) - _816, _816) : clamp(max(mad(_922, _925, _816), _816 * 0.02500000037252902984619140625f), 0.0f, 1.0f))) : _908; + } else { + _1016 = _818; + _1017 = _817; + _1018 = _816; + } + float3 _1019 = float3(_1018, _1017, _1016); + float _1024 = max(dp3_f32(float3(0.265399992465972900390625f, 0.67040002346038818359375f, 0.06419999897480010986328125f), _1019), 0.0f); + float _1030 = mad(((max(dp3_f32(float3(0.02480000071227550506591796875f, 0.1247999966144561767578125f, 0.85039997100830078125f), _1019), 0.0f) + _1024) / max(dp3_f32(float3(0.514900028705596923828125f, 0.324400007724761962890625f, 0.1606999933719635009765625f), _1019), 0.00999999977648258209228515625f)) + 1.0f, 1.33000004291534423828125f, -1.67999994754791259765625f) * _1024; + float _1044 = asfloat(CB0_m[83u].w); + float _1058 = clamp(mad(0.039999999105930328369140625f / (_319 + 0.039999999105930328369140625f), asfloat(CB0_m[84u].x), asfloat(CB0_m[84u].y)), 0.0f, 1.0f); + float _1062 = mad(_1058, clamp((_1030 * asfloat(CB0_m[83u].x)) * _1044, 0.0f, 1.0f) - _1018, _1018); + float _1063 = mad(_1058, clamp(_1044 * (_1030 * asfloat(CB0_m[83u].y)), 0.0f, 1.0f) - _1017, _1017); + float _1064 = mad(_1058, clamp(_1044 * (_1030 * asfloat(CB0_m[83u].z)), 0.0f, 1.0f) - _1016, _1016); + float _1120; + float _1121; + float _1122; + if (CB0_m[86u].w != 0u) { + float _1074 = asfloat(CB0_m[87u].x); + float _1075 = asfloat(CB0_m[87u].w); + float _1090 = asfloat(CB0_m[86u].z); + float4 _1109 = T20.Sample(S1, float2(((((TEXCOORD.x - 0.5f) * _1090) / mad(TEXCOORD.y, asfloat(CB0_m[87u].z) - _1075, _1075)) - asfloat(CB0_m[86u].x)) + 0.5f, (((_1090 * (TEXCOORD.y - 0.5f)) / mad(TEXCOORD.x, asfloat(CB0_m[87u].y) - _1074, _1074)) - asfloat(CB0_m[86u].y)) + 0.5f)); + float _1116 = asfloat(CB0_m[86u].w); + _1120 = mad(_1109.x - _1062, _1116, _1062); + _1121 = mad(_1116, _1109.y - _1063, _1063); + _1122 = mad(_1116, _1109.z - _1064, _1064); + } else { + _1120 = _1062; + _1121 = _1063; + _1122 = _1064; + } + float _1524; + float _1525; + float _1526; + if (_356) { + float _1131 = max(max(max(_1122, _1121), _1120), 9.9999997473787516355514526367188e-05f); + float _1142 = ((CB1_m1.y == 0u) && _815) ? 1.0f : (((CB1_m2.y < _1131) ? mad(CB1_m3.x, _1131, CB1_m3.y) : _1131) / _1131); + float _1143 = _1122 * _1142; + float _1148 = floor(_1143 * 14.99989986419677734375f); + float _1150 = mad(_1143, 15.0f, -_1148); + float _1152 = (_1148 * 0.0625f) + ((_1142 * _1120) * 0.05859375f); + float _1154 = mad(_1142 * _1121, 0.9375f, 0.03125f); + float4 _1160 = T16.Sample(S1, float2(_1152 + 0.001953125f, _1154)); + float _1161 = _1160.x; + float _1162 = _1160.y; + float _1163 = _1160.z; + float4 _1166 = T16.Sample(S1, float2(_1152 + 0.064453125f, _1154)); + float _1173 = mad(_1150, _1166.x - _1161, _1161); + float _1174 = mad(_1150, _1166.y - _1162, _1162); + float _1175 = mad(_1150, _1166.z - _1163, _1163); + float _1518; + float _1519; + float _1520; + if (int(T22.Load(0)) > 0) { + float _1196 = asfloat(CB0_m[0u].z) / ((asfloat(CB0_m[0u].w) + 1.0f) - T4.SampleLevel(S0, _287, 0.0f).x); + float4 _1199 = T9.Sample(S0, _287); + float _1211 = clamp(asfloat(T22.Load(4)) * _1199.x, 0.0f, 1.0f); + float _1212 = clamp(asfloat(T22.Load(4)) * _1199.y, 0.0f, 1.0f); + float _1213 = clamp(asfloat(T22.Load(4)) * _1199.z, 0.0f, 1.0f); + float _1214 = clamp(asfloat(T22.Load(4)) * _1199.w, 0.0f, 1.0f); + float _1222 = dp3_f32(float3(T18.Sample(S1, _287).xyz), float3(0.2125999927520751953125f, 0.715200006961822509765625f, 0.072200000286102294921875f)); + float _1223 = _1211 * _1222; + float _1224 = _1222 * _1212; + float _1225 = _1222 * _1213; + float _1226 = _1222 * _1214; + float _1268; + float _1269; + float _1270; + if (_1223 != 0.0f) { + float _1235 = floor(_1175 * 14.99989986419677734375f); + float _1237 = mad(_1175, 15.0f, -_1235); + float _1239 = (_1235 * 0.0625f) + (_1173 * 0.05859375f); + float _1241 = mad(_1174, 0.9375f, 0.03125f); + float4 _1246 = T12.Sample(S1, float2(_1239 + 0.001953125f, _1241)); + float _1247 = _1246.x; + float _1248 = _1246.y; + float _1249 = _1246.z; + float4 _1252 = T12.Sample(S1, float2(_1239 + 0.064453125f, _1241)); + _1268 = mad(_1223, mad(_1237, _1252.z - _1249, _1249) - _1175, _1175); + _1269 = mad(_1223, mad(_1237, _1252.y - _1248, _1248) - _1174, _1174); + _1270 = mad(_1223, mad(_1237, _1252.x - _1247, _1247) - _1173, _1173); + } else { + _1268 = _1175; + _1269 = _1174; + _1270 = _1173; + } + float _1308; + float _1309; + float _1310; + if (_1224 != 0.0f) { + float _1275 = floor(_1268 * 14.99989986419677734375f); + float _1277 = mad(_1268, 15.0f, -_1275); + float _1279 = (_1275 * 0.0625f) + (_1270 * 0.05859375f); + float _1281 = mad(_1269, 0.9375f, 0.03125f); + float4 _1286 = T13.Sample(S1, float2(_1279 + 0.001953125f, _1281)); + float _1287 = _1286.x; + float _1288 = _1286.y; + float _1289 = _1286.z; + float4 _1292 = T13.Sample(S1, float2(_1279 + 0.064453125f, _1281)); + _1308 = mad(mad(_1277, _1292.z - _1289, _1289) - _1268, _1224, _1268); + _1309 = mad(mad(_1277, _1292.y - _1288, _1288) - _1269, _1224, _1269); + _1310 = mad(mad(_1277, _1292.x - _1287, _1287) - _1270, _1224, _1270); + } else { + _1308 = _1268; + _1309 = _1269; + _1310 = _1270; + } + float _1348; + float _1349; + float _1350; + if (_1225 != 0.0f) { + float _1315 = floor(_1308 * 14.99989986419677734375f); + float _1317 = mad(_1308, 15.0f, -_1315); + float _1319 = (_1310 * 0.05859375f) + (_1315 * 0.0625f); + float _1321 = mad(_1309, 0.9375f, 0.03125f); + float4 _1326 = T14.Sample(S1, float2(_1319 + 0.001953125f, _1321)); + float _1327 = _1326.x; + float _1328 = _1326.y; + float _1329 = _1326.z; + float4 _1332 = T14.Sample(S1, float2(_1319 + 0.064453125f, _1321)); + _1348 = mad(mad(_1332.z - _1329, _1317, _1329) - _1308, _1225, _1308); + _1349 = mad(mad(_1332.y - _1328, _1317, _1328) - _1309, _1225, _1309); + _1350 = mad(_1225, mad(_1317, _1332.x - _1327, _1327) - _1310, _1310); + } else { + _1348 = _1308; + _1349 = _1309; + _1350 = _1310; + } + float _1388; + float _1389; + float _1390; + if (_1226 != 0.0f) { + float _1355 = floor(_1348 * 14.99989986419677734375f); + float _1357 = mad(_1348, 15.0f, -_1355); + float _1359 = (_1350 * 0.05859375f) + (_1355 * 0.0625f); + float _1361 = mad(_1349, 0.9375f, 0.03125f); + float4 _1366 = T15.Sample(S1, float2(_1359 + 0.001953125f, _1361)); + float _1367 = _1366.x; + float _1368 = _1366.y; + float _1369 = _1366.z; + float4 _1372 = T15.Sample(S1, float2(_1359 + 0.064453125f, _1361)); + _1388 = mad(mad(_1372.z - _1369, _1357, _1369) - _1348, _1226, _1348); + _1389 = mad(mad(_1372.y - _1368, _1357, _1368) - _1349, _1226, _1349); + _1390 = mad(_1226, mad(_1357, _1372.x - _1367, _1367) - _1350, _1350); + } else { + _1388 = _1348; + _1389 = _1349; + _1390 = _1350; + } + float _1424 = clamp(asfloat(T22.Load4(32)).x + ((asfloat(T22.Load4(16)).z > _1196) ? clamp(asfloat(T22.Load4(16)).y * (_1196 - asfloat(T22.Load4(16)).x), 0.0f, 1.0f) : (1.0f - clamp(asfloat(T22.Load4(16)).w * (_1196 - asfloat(T22.Load4(16)).z), 0.0f, 1.0f))), 0.0f, 1.0f); + float _1427 = floor(_1388 * 14.99989986419677734375f); + float _1429 = mad(_1388, 15.0f, -_1427); + float _1431 = (_1390 * 0.05859375f) + (_1427 * 0.0625f); + float _1433 = mad(_1389, 0.9375f, 0.03125f); + float4 _1438 = T10.Sample(S1, float2(_1431 + 0.001953125f, _1433)); + float _1439 = _1438.x; + float _1440 = _1438.y; + float _1441 = _1438.z; + float4 _1444 = T10.Sample(S1, float2(_1431 + 0.064453125f, _1433)); + float _1457 = mad(_1424, mad(_1429, _1444.x - _1439, _1439) - _1390, _1390); + float _1458 = mad(mad(_1444.y - _1440, _1429, _1440) - _1389, _1424, _1389); + float _1459 = mad(mad(_1444.z - _1441, _1429, _1441) - _1388, _1424, _1388); + float _1470 = clamp(asfloat(T22.Load2(48)).y + ((asfloat(T22.Load4(32)).w > _1196) ? clamp(asfloat(T22.Load4(32)).z * (_1196 - asfloat(T22.Load4(32)).y), 0.0f, 1.0f) : (1.0f - clamp(asfloat(T22.Load2(48)).x * (_1196 - asfloat(T22.Load4(32)).w), 0.0f, 1.0f))), 0.0f, 1.0f); + float _1473 = floor(_1459 * 14.99989986419677734375f); + float _1475 = mad(_1459, 15.0f, -_1473); + float _1477 = (_1457 * 0.05859375f) + (_1473 * 0.0625f); + float _1479 = mad(_1458, 0.9375f, 0.03125f); + float4 _1484 = T11.Sample(S1, float2(_1477 + 0.001953125f, _1479)); + float _1485 = _1484.x; + float _1486 = _1484.y; + float _1487 = _1484.z; + float4 _1490 = T11.Sample(S1, float2(_1477 + 0.064453125f, _1479)); + float _1514 = (1.0f - min(_1214 + (_1213 + (_1211 + _1212)), 1.0f)) * dp3_f32(float3(T17.Sample(S1, _287).xyz), float3(0.2125999927520751953125f, 0.715200006961822509765625f, 0.072200000286102294921875f)); + _1518 = mad((mad(_1490.z - _1487, _1475, _1487) - _1459) * _1470, _1514, _1459); + _1519 = mad((mad(_1490.y - _1486, _1475, _1486) - _1458) * _1470, _1514, _1458); + _1520 = mad(_1470 * (mad(_1475, _1490.x - _1485, _1485) - _1457), _1514, _1457); + } else { + _1518 = _1175; + _1519 = _1174; + _1520 = _1173; + } + _1524 = _1518 / _1142; + _1525 = _1519 / _1142; + _1526 = _1520 / _1142; + } else { + _1524 = _1122; + _1525 = _1121; + _1526 = _1120; + } + float _1528 = dp3_f32(float3(_1526, _1525, _1524), float3(0.2989999949932098388671875f, 0.58700001239776611328125f, 0.114000000059604644775390625f)); + float _1530 = max(max(_1524, _1525), _1526); + bool _1533 = CB0_m[41u].w != 0u; + float _1567 = asfloat(CB0_m[42u].w); + float _1579 = asfloat(CB0_m[39u].x); + float _1580 = asfloat(CB0_m[39u].y); + float _1581 = asfloat(CB0_m[39u].z); + float _1613 = mad(T2.Load(int4(uint3(uint2(cvt_f32_u32(gl_FragCoord.x) & 63u, cvt_f32_u32(gl_FragCoord.y) & 63u), T1.Load(1840) & 31u), 0u)).x, 2.0f, -1.0f); + float _1626 = _701 ? (float(int(((_1613 < 0.0f) ? 4294967295u : 0u) + uint(_1613 > 0.0f))) * (1.0f - sqrt(1.0f - abs(_1613)))) : _1613; + float _1627 = mad(mad(exp2(log2(clamp(((_1533 ? _1526 : _1530) - asfloat(CB0_m[42u].x)) * asfloat(CB0_m[41u].x), 0.0f, 1.0f)) * _1567), asfloat(CB0_m[40u].x) - _1579, _1579), _1626, _1526); + float _1628 = mad(mad(asfloat(CB0_m[40u].y) - _1580, exp2(log2(clamp(((_1533 ? _1525 : _1530) - asfloat(CB0_m[42u].y)) * asfloat(CB0_m[41u].y), 0.0f, 1.0f)) * _1567), _1580), _1626, _1525); + float _1629 = mad(mad(asfloat(CB0_m[40u].z) - _1581, exp2(log2(clamp(((_1533 ? _1524 : _1530) - asfloat(CB0_m[42u].z)) * asfloat(CB0_m[41u].z), 0.0f, 1.0f)) * _1567), _1581), _1626, _1524); + SV_Target.x = _701 ? _1627 : clamp(_1627, 0.0f, 1.0f); + SV_Target.y = _701 ? _1628 : clamp(_1628, 0.0f, 1.0f); + SV_Target.z = _701 ? _1629 : clamp(_1629, 0.0f, 1.0f); + SV_Target.w = _701 ? _1528 : clamp(_1528, 0.0f, 1.0f); +} + +SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { + gl_FragCoord = stage_input.gl_FragCoord; + gl_FragCoord.w = 1.0 / gl_FragCoord.w; + TEXCOORD = stage_input.TEXCOORD; + TEXCOORD1 = stage_input.TEXCOORD1; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.SV_Target = SV_Target; + return stage_output; +} diff --git a/src/games/rdr2/lut/0x9CCF855F.ps_5_1.hlslx b/src/games/rdr2/lut/0x9CCF855F.ps_5_1.hlslx new file mode 100644 index 0000000000..3ac0a4c743 --- /dev/null +++ b/src/games/rdr2/lut/0x9CCF855F.ps_5_1.hlslx @@ -0,0 +1,379 @@ +struct anon_m { + int4 _m0; + float4 _m1; + float4 _m2; + float2 _m3; + uint4 _m4; + uint4 _m5; + uint4 _m6; + uint4 _m7; + uint4 _m8; + uint4 _m9; + uint4 _m10; + uint4 _m11; + uint4 _m12; + uint4 _m13; + uint4 _m14; + uint _m15; +}; + +cbuffer CB0_buf : register(b0, space0) { + uint4 CB0_m[88] : packoffset(c0); +}; + +cbuffer CB1_buf : register(b1, space0) { + uint4 CB1_m0 : packoffset(c0); + uint2 CB1_m1 : packoffset(c1); + float2 CB1_m2 : packoffset(c1.z); + float4 CB1_m3 : packoffset(c2); + float4 CB1_m4 : packoffset(c3); +}; + +ByteAddressBuffer T0 : register(t5, space0); +ByteAddressBuffer T1 : register(t6, space0); +ByteAddressBuffer T16 : register(t21, space0); +SamplerState S0 : register(s2, space0); +SamplerState S1 : register(s3, space0); +SamplerState S2 : register(s4, space0); +Texture2DArray T2 : register(t7, space0); +Texture2D T3 : register(t8, space0); +Texture2D T4 : register(t9, space0); +Texture2D T5 : register(t10, space0); +Texture1D T6 : register(t11, space0); +Texture2D T7 : register(t12, space0); +Texture2D T8 : register(t13, space0); +Texture2D T9 : register(t14, space0); +Texture2D T10 : register(t15, space0); +Texture2D T11 : register(t16, space0); +Texture2D T12 : register(t17, space0); +Texture2D T13 : register(t18, space0); +Texture2D T14 : register(t19, space0); +Buffer T15 : register(t20, space0); + +static float4 gl_FragCoord; +static float4 TEXCOORD; +static float TEXCOORD1; +static float4 SV_Target; + +struct SPIRV_Cross_Input { + float4 TEXCOORD : TEXCOORD1; + float TEXCOORD1 : TEXCOORD2; + float4 gl_FragCoord : SV_Position; +}; + +struct SPIRV_Cross_Output { + float4 SV_Target : SV_Target0; +}; + +float dp3_f32(float3 a, float3 b) { + precise float _267 = a.x * b.x; + return mad(a.z, b.z, mad(a.y, b.y, _267)); +} + +float dp2_f32(float2 a, float2 b) { + precise float _256 = a.x * b.x; + return mad(a.y, b.y, _256); +} + +uint cvt_f32_u32(float v) { + return (v > 4294967040.0f) ? 4294967295u : uint(max(v, 0.0f)); +} + +void frag_main() { + float2 _283 = float2(TEXCOORD.x, TEXCOORD.y); + float4 _286 = T7.Sample(S2, _283); + float _294 = asfloat(T0.Load(16)); + float _295 = _286.x * _294; + float _296 = _286.y * _294; + float _297 = _286.z * _294; + float4 _299 = T15.Load(0u); + float _300 = _299.x; + float _301 = _299.y; + float _302 = _299.z; + float4 _303 = T15.Load(1u); + float _304 = _303.x; + float _305 = _303.y; + float _306 = _303.z; + float _307 = _303.w; + float4 _309 = T3.Load(int3(uint2(0u, 0u), 0u)); + float _310 = _309.x; + float _315 = dp3_f32(float3(_310 * _295, _310 * _296, _310 * _297), float3(0.300000011920928955078125f, 0.589999973773956298828125f, 0.10999999940395355224609375f)); + bool _342; + float _343; + float _344; + float _345; + if (CB0_m[64u].x != 0u) { + float4 _328 = T13.Sample(S2, _283); + float _329 = _328.x; + float _330 = _328.y; + float _331 = _328.z; + float _332 = _328.w; + bool _334 = (_332 + 9.9999997473787516355514526367188e-05f) >= 1.0f; + float _335 = 1.0f - _332; + _342 = _334; + _343 = _334 ? _331 : mad(_335, _297, _331); + _344 = _334 ? _330 : mad(_335, _296, _330); + _345 = _334 ? _329 : mad(_335, _295, _329); + } else { + _342 = false; + _343 = _297; + _344 = _296; + _345 = _295; + } + float _349 = min(_310 * _345, 65504.0f); + float _350 = min(_310 * _344, 65504.0f); + float _351 = min(_310 * _343, 65504.0f); + bool _352 = !_342; + float _550; + float _551; + float _552; + float _553; + if (_352) { + float _432; + if (CB0_m[73u].x != 0u) { + float4 _365 = T5.Sample(S1, _283); + float _380 = clamp(dp3_f32(float3(_310 * _365.x, _310 * _365.y, _310 * _365.z), float3(0.300000011920928955078125f, 0.589999973773956298828125f, 0.10999999940395355224609375f)), asfloat(CB0_m[75u].z), asfloat(CB0_m[75u].w)); + float _405 = asfloat(CB0_m[69u].x); + float _408 = asfloat(CB0_m[69u].y); + float _409 = clamp(mad(_380, asfloat(CB0_m[75u].y), mad(log2(_380 + asfloat(CB0_m[75u].x)) * asfloat(CB0_m[73u].y), 0.693147182464599609375f, asfloat(CB0_m[73u].z)) - 10.0f) + asfloat(CB0_m[68u].w), _405, _408); + _432 = exp2(mad(clamp(asfloat(CB0_m[73u].x), 0.0f, 1.0f), clamp(_405, mad(abs(_409) * asfloat(CB0_m[69u].z), float(int(((_409 < 0.0f) ? 4294967295u : 0u) + uint(_409 > 0.0f))), _409), _408) - TEXCOORD1, TEXCOORD1)); + } else { + _432 = TEXCOORD.z; + } + float _435 = asfloat(CB0_m[16u].w); + float _459 = _315 * (T8.Sample(S1, float2(frac(mad(TEXCOORD.x * _435, 1.60000002384185791015625f, asfloat(CB0_m[16u].x))), frac(mad(TEXCOORD.y * _435, 0.89999997615814208984375f, asfloat(CB0_m[16u].y))))).w - 0.5f); + float _462 = asfloat(CB0_m[16u].z); + float _466 = max(_349 * 0.5f, mad(_459, _462, _349)); + float _467 = max(_350 * 0.5f, mad(_459, _462, _350)); + float _468 = max(_351 * 0.5f, mad(_459, _462, _351)); + float2 _484 = float2(TEXCOORD.x - asfloat(CB0_m[53u].x), TEXCOORD.y - asfloat(CB0_m[53u].y)); + float2 _498 = float2(dp2_f32(float2(asfloat(CB0_m[55u].x), asfloat(CB0_m[55u].y)), _484) * asfloat(CB0_m[53u].z), dp2_f32(float2(asfloat(CB0_m[55u].z), asfloat(CB0_m[55u].w)), _484) * asfloat(CB0_m[53u].w)); + float _508 = max((dp2_f32(_498, _498) - asfloat(CB0_m[56u].x)) * asfloat(CB0_m[56u].w), 0.0f); + float _520 = (_508 < 1.0f) ? (1.0f - exp2(_508 * (-10.0f))) : ((((_508 - 1.0f) > 0.0f) ? exp2((_508 - 2.0f) * 10.0f) : 0.0f) + 0.9980499744415283203125f); + float _534 = asfloat(CB0_m[54u].w); + bool _544 = CB0_m[54u].w != 0u; + _550 = _432; + _551 = _544 ? mad(mad(asfloat(CB0_m[54u].z) * _468, _534, -_468), _520, _468) : _468; + _552 = _544 ? mad(mad(asfloat(CB0_m[54u].y) * _467, _534, -_467), _520, _467) : _467; + _553 = _544 ? mad(mad(_466 * asfloat(CB0_m[54u].x), _534, -_466), _520, _466) : _466; + } else { + _550 = TEXCOORD.z; + _551 = _351; + _552 = _350; + _553 = _349; + } + float _563 = clamp(clamp(TEXCOORD.y * asfloat(CB0_m[60u].y), 0.0f, 1.0f) + asfloat(CB0_m[57u].w), 0.0f, 1.0f); + float _578 = clamp(clamp(clamp(TEXCOORD.y - asfloat(CB0_m[59u].w), 0.0f, 1.0f) * asfloat(CB0_m[60u].x), 0.0f, 1.0f) - asfloat(CB0_m[58u].w), 0.0f, 1.0f); + float _584 = asfloat(CB0_m[57u].x); + float _585 = asfloat(CB0_m[57u].y); + float _586 = asfloat(CB0_m[57u].z); + float _592 = asfloat(CB0_m[59u].x); + float _593 = asfloat(CB0_m[59u].y); + float _594 = asfloat(CB0_m[59u].z); + float _598 = mad(_563, _592 - _584, _584); + float _599 = mad(_563, _593 - _585, _585); + float _600 = mad(_563, _594 - _586, _586); + float _621 = mad(TEXCOORD.y, mad(_578, asfloat(CB0_m[58u].x) - _592, _592) - _598, _598) * _553; + float _622 = _552 * mad(TEXCOORD.y, mad(_578, asfloat(CB0_m[58u].y) - _593, _593) - _599, _599); + float _623 = _551 * mad(TEXCOORD.y, mad(_578, asfloat(CB0_m[58u].z) - _594, _594) - _600, _600); + float _631 = (CB1_m1.x != 0u) ? CB1_m3.z : _302; + float _634 = _550 / CB1_m2.x; + float _638 = max(_621 * _634, 0.0f); + float _639 = max(_634 * _622, 0.0f); + float _640 = max(_634 * _623, 0.0f); + float _668 = max(_621 * _550, 0.0f); + float _669 = max(_550 * _622, 0.0f); + float _670 = max(_550 * _623, 0.0f); + bool _697 = CB1_m0.w != 0u; + float _698 = _697 ? ((((mad(_638, mad(_300, _638, _304), _305) / mad(_638, mad(_300, _638, _301), _306)) - _307) * _631) * CB1_m2.x) : clamp(_302 * ((mad(_668, mad(_300, _668, _304), _305) / mad(_668, mad(_300, _668, _301), _306)) - _307), 0.0f, 1.0f); + float _699 = _697 ? (CB1_m2.x * (_631 * ((mad(mad(_300, _639, _304), _639, _305) / mad(mad(_300, _639, _301), _639, _306)) - _307))) : clamp(_302 * ((mad(mad(_300, _669, _304), _669, _305) / mad(mad(_300, _669, _301), _669, _306)) - _307), 0.0f, 1.0f); + float _700 = _697 ? (CB1_m2.x * (_631 * ((mad(mad(_300, _640, _304), _640, _305) / mad(mad(_300, _640, _301), _640, _306)) - _307))) : clamp(_302 * ((mad(mad(_300, _670, _304), _670, _305) / mad(mad(_300, _670, _301), _670, _306)) - _307), 0.0f, 1.0f); + float _773; + float _774; + float _775; + if (_352) { + float _770; + float _771; + float _772; + if (CB0_m[50u].w != 0u) { + float2 _723 = float2(TEXCOORD.x - asfloat(CB0_m[49u].x), TEXCOORD.y - asfloat(CB0_m[49u].y)); + float2 _737 = float2(dp2_f32(float2(asfloat(CB0_m[51u].x), asfloat(CB0_m[51u].y)), _723) * asfloat(CB0_m[49u].z), dp2_f32(float2(asfloat(CB0_m[51u].z), asfloat(CB0_m[51u].w)), _723) * asfloat(CB0_m[49u].w)); + float _755 = T6.Sample(S1, clamp((dp2_f32(_737, _737) - asfloat(CB0_m[52u].x)) * asfloat(CB0_m[52u].w), 0.0f, 1.0f)).w * asfloat(CB0_m[50u].w); + _770 = mad(_755, asfloat(CB0_m[50u].z) - _700, _700); + _771 = mad(_755, asfloat(CB0_m[50u].y) - _699, _699); + _772 = mad(_755, asfloat(CB0_m[50u].x) - _698, _698); + } else { + _770 = _700; + _771 = _699; + _772 = _698; + } + _773 = _770; + _774 = _771; + _775 = _772; + } else { + _773 = _700; + _774 = _699; + _775 = _698; + } + bool _811 = _697 && (CB1_m0.z == 0u); + float _812 = _811 ? _775 : ((_775 < 0.003130800090730190277099609375f) ? (CB1_m3.w * _775) : mad(exp2(log2(_775) * CB1_m4.x), CB1_m4.y, -CB1_m4.z)); + float _813 = _811 ? _774 : ((_774 < 0.003130800090730190277099609375f) ? (CB1_m3.w * _774) : mad(CB1_m4.y, exp2(CB1_m4.x * log2(_774)), -CB1_m4.z)); + float _814 = _811 ? _773 : ((_773 < 0.003130800090730190277099609375f) ? (CB1_m3.w * _773) : mad(CB1_m4.y, exp2(CB1_m4.x * log2(_773)), -CB1_m4.z)); + float _1012; + float _1013; + float _1014; + if ((CB0_m[19u].x != 0u) && _352) { + float _823 = asfloat(CB0_m[17u].x); + float _824 = _823 * 0.070000000298023223876953125f; + float _825 = _823 * 0.10999999940395355224609375f; + float _826 = _823 * 0.12999999523162841796875f; + float _827 = _823 * 0.17000000178813934326171875f; + float _830 = asfloat(CB0_m[17u].w); + float _831 = TEXCOORD.x * _830; + float _832 = TEXCOORD.y * _830; + float _861 = _823 * 0.189999997615814208984375f; + float _862 = _823 * 0.23000000417232513427734375f; + float _863 = _823 * 0.2899999916553497314453125f; + float _864 = _823 * 0.310000002384185791015625f; + float _904 = clamp(mad((((frac(sin(dp2_f32(float2(_831 + _861, _861 + _832), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f) + (((frac(sin(dp2_f32(float2(_831 + _824, _832 + _824), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f) + frac(sin(dp2_f32(float2(_831 + _825, _832 + _825), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f)) + frac(sin(dp2_f32(float2(_831 + _826, _832 + _826), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f)) + frac(sin(dp2_f32(float2(_831 + _827, _832 + _827), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f))) + frac(sin(dp2_f32(float2(_831 + _862, _862 + _832), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f)) + frac(sin(dp2_f32(float2(_831 + _863, _863 + _832), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f)) + frac(sin(dp2_f32(float2(_831 + _864, _864 + _832), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f), 0.125f, asfloat(CB0_m[17u].z)), 0.0f, 1.0f); + float _906 = dp3_f32(float3(_812, _813, _814), float3(0.2125999927520751953125f, 0.715200006961822509765625f, 0.072200000286102294921875f)); + float _914 = (CB0_m[18u].y != 0u) ? mad(_904 * (_906 * (_906 * _906)), -0.5f, _904) : _904; + float _918 = _914 - 0.5f; + float _921 = asfloat(CB0_m[18u].x); + bool _931 = _914 < 0.5f; + float _932 = _914 + _914; + float _933 = _932 * _812; + float _934 = _932 * _813; + float _935 = _932 * _814; + float _939 = mad(_914, -2.0f, 1.0f); + float _949 = 1.0f - _914; + float _953 = mad(_914, 2.0f, -1.0f); + float _975 = _949 + _949; + bool _996 = CB0_m[19u].w != 0u; + bool _1002 = CB0_m[19u].z != 0u; + bool _1008 = CB0_m[18u].w != 0u; + _1012 = _1008 ? (_1002 ? mad(_921, (_931 ? ((_939 * (_814 * _814)) + _935) : ((_949 * (_814 + _814)) + (_953 * sqrt(_814)))) - _814, _814) : (_996 ? mad(_921, ((_814 < 0.5f) ? _935 : mad(-_975, 1.0f - _814, 1.0f)) - _814, _814) : clamp(max(mad(_918, _921, _814), _814 * 0.02500000037252902984619140625f), 0.0f, 1.0f))) : _904; + _1013 = _1008 ? (_1002 ? mad(_921, (_931 ? ((_939 * (_813 * _813)) + _934) : ((_949 * (_813 + _813)) + (_953 * sqrt(_813)))) - _813, _813) : (_996 ? mad(_921, ((_813 < 0.5f) ? _934 : mad(-_975, 1.0f - _813, 1.0f)) - _813, _813) : clamp(max(mad(_918, _921, _813), _813 * 0.02500000037252902984619140625f), 0.0f, 1.0f))) : _904; + _1014 = _1008 ? (_1002 ? mad(_921, (_931 ? (_933 + ((_812 * _812) * _939)) : ((sqrt(_812) * _953) + ((_812 + _812) * _949))) - _812, _812) : (_996 ? mad(_921, ((_812 < 0.5f) ? _933 : mad(-_975, 1.0f - _812, 1.0f)) - _812, _812) : clamp(max(mad(_918, _921, _812), _812 * 0.02500000037252902984619140625f), 0.0f, 1.0f))) : _904; + } else { + _1012 = _814; + _1013 = _813; + _1014 = _812; + } + float3 _1015 = float3(_1014, _1013, _1012); + float _1020 = max(dp3_f32(float3(0.265399992465972900390625f, 0.67040002346038818359375f, 0.06419999897480010986328125f), _1015), 0.0f); + float _1026 = mad(((max(dp3_f32(float3(0.02480000071227550506591796875f, 0.1247999966144561767578125f, 0.85039997100830078125f), _1015), 0.0f) + _1020) / max(dp3_f32(float3(0.514900028705596923828125f, 0.324400007724761962890625f, 0.1606999933719635009765625f), _1015), 0.00999999977648258209228515625f)) + 1.0f, 1.33000004291534423828125f, -1.67999994754791259765625f) * _1020; + float _1040 = asfloat(CB0_m[83u].w); + float _1054 = clamp(mad(0.039999999105930328369140625f / (_315 + 0.039999999105930328369140625f), asfloat(CB0_m[84u].x), asfloat(CB0_m[84u].y)), 0.0f, 1.0f); + float _1058 = mad(_1054, clamp((_1026 * asfloat(CB0_m[83u].x)) * _1040, 0.0f, 1.0f) - _1014, _1014); + float _1059 = mad(_1054, clamp(_1040 * (_1026 * asfloat(CB0_m[83u].y)), 0.0f, 1.0f) - _1013, _1013); + float _1060 = mad(_1054, clamp(_1040 * (_1026 * asfloat(CB0_m[83u].z)), 0.0f, 1.0f) - _1012, _1012); + float _1116; + float _1117; + float _1118; + if (CB0_m[86u].w != 0u) { + float _1070 = asfloat(CB0_m[87u].x); + float _1071 = asfloat(CB0_m[87u].w); + float _1086 = asfloat(CB0_m[86u].z); + float4 _1105 = T14.Sample(S1, float2(((((TEXCOORD.x - 0.5f) * _1086) / mad(TEXCOORD.y, asfloat(CB0_m[87u].z) - _1071, _1071)) - asfloat(CB0_m[86u].x)) + 0.5f, (((_1086 * (TEXCOORD.y - 0.5f)) / mad(TEXCOORD.x, asfloat(CB0_m[87u].y) - _1070, _1070)) - asfloat(CB0_m[86u].y)) + 0.5f)); + float _1112 = asfloat(CB0_m[86u].w); + _1116 = mad(_1105.x - _1058, _1112, _1058); + _1117 = mad(_1112, _1105.y - _1059, _1059); + _1118 = mad(_1105.z - _1060, _1112, _1060); + } else { + _1116 = _1058; + _1117 = _1059; + _1118 = _1060; + } + float _1320; + float _1321; + float _1322; + if (_352) { + float _1127 = max(max(max(_1118, _1117), _1116), 9.9999997473787516355514526367188e-05f); + float _1138 = ((CB1_m1.y == 0u) && _811) ? 1.0f : (((_1127 > CB1_m2.y) ? mad(_1127, CB1_m3.x, CB1_m3.y) : _1127) / _1127); + float _1139 = _1118 * _1138; + float _1144 = floor(_1139 * 14.99989986419677734375f); + float _1146 = mad(_1139, 15.0f, -_1144); + float _1148 = ((_1116 * _1138) * 0.05859375f) + (_1144 * 0.0625f); + float _1150 = mad(_1117 * _1138, 0.9375f, 0.03125f); + float4 _1156 = T11.Sample(S1, float2(_1148 + 0.001953125f, _1150)); + float _1157 = _1156.x; + float _1158 = _1156.y; + float _1159 = _1156.z; + float4 _1162 = T11.Sample(S1, float2(_1148 + 0.064453125f, _1150)); + float _1169 = mad(_1146, _1162.x - _1157, _1157); + float _1170 = mad(_1162.y - _1158, _1146, _1158); + float _1171 = mad(_1162.z - _1159, _1146, _1159); + float _1314; + float _1315; + float _1316; + if (int(T16.Load(0)) > 0) { + float _1192 = asfloat(CB0_m[0u].z) / ((asfloat(CB0_m[0u].w) + 1.0f) - T4.SampleLevel(S0, _283, 0.0f).x); + float _1221 = clamp(asfloat(T16.Load4(32)).x + ((_1192 < asfloat(T16.Load4(16)).z) ? clamp((_1192 - asfloat(T16.Load4(16)).x) * asfloat(T16.Load4(16)).y, 0.0f, 1.0f) : (1.0f - clamp(asfloat(T16.Load4(16)).w * (_1192 - asfloat(T16.Load4(16)).z), 0.0f, 1.0f))), 0.0f, 1.0f); + float _1224 = floor(_1171 * 14.99989986419677734375f); + float _1226 = mad(_1171, 15.0f, -_1224); + float _1228 = (_1169 * 0.05859375f) + (_1224 * 0.0625f); + float _1230 = mad(_1170, 0.9375f, 0.03125f); + float4 _1235 = T9.Sample(S1, float2(_1228 + 0.001953125f, _1230)); + float _1236 = _1235.x; + float _1237 = _1235.y; + float _1238 = _1235.z; + float4 _1241 = T9.Sample(S1, float2(_1228 + 0.064453125f, _1230)); + float _1254 = mad(_1221, mad(_1226, _1241.x - _1236, _1236) - _1169, _1169); + float _1255 = mad(mad(_1241.y - _1237, _1226, _1237) - _1170, _1221, _1170); + float _1256 = mad(mad(_1241.z - _1238, _1226, _1238) - _1171, _1221, _1171); + float _1267 = clamp(asfloat(T16.Load2(48)).y + ((asfloat(T16.Load4(32)).w > _1192) ? clamp(asfloat(T16.Load4(32)).z * (_1192 - asfloat(T16.Load4(32)).y), 0.0f, 1.0f) : (1.0f - clamp((_1192 - asfloat(T16.Load4(32)).w) * asfloat(T16.Load2(48)).x, 0.0f, 1.0f))), 0.0f, 1.0f); + float _1270 = floor(_1256 * 14.99989986419677734375f); + float _1272 = mad(_1256, 15.0f, -_1270); + float _1274 = (_1254 * 0.05859375f) + (_1270 * 0.0625f); + float _1276 = mad(_1255, 0.9375f, 0.03125f); + float4 _1281 = T10.Sample(S1, float2(_1274 + 0.001953125f, _1276)); + float _1282 = _1281.x; + float _1283 = _1281.y; + float _1284 = _1281.z; + float4 _1287 = T10.Sample(S1, float2(_1274 + 0.064453125f, _1276)); + float _1310 = dp3_f32(float3(T12.Sample(S1, _283).xyz), float3(0.2125999927520751953125f, 0.715200006961822509765625f, 0.072200000286102294921875f)); + _1314 = mad((mad(_1287.z - _1284, _1272, _1284) - _1256) * _1267, _1310, _1256); + _1315 = mad((mad(_1287.y - _1283, _1272, _1283) - _1255) * _1267, _1310, _1255); + _1316 = mad(_1267 * (mad(_1272, _1287.x - _1282, _1282) - _1254), _1310, _1254); + } else { + _1314 = _1171; + _1315 = _1170; + _1316 = _1169; + } + _1320 = _1314 / _1138; + _1321 = _1315 / _1138; + _1322 = _1316 / _1138; + } else { + _1320 = _1118; + _1321 = _1117; + _1322 = _1116; + } + float _1324 = dp3_f32(float3(_1322, _1321, _1320), float3(0.2989999949932098388671875f, 0.58700001239776611328125f, 0.114000000059604644775390625f)); + float _1326 = max(max(_1320, _1321), _1322); + bool _1329 = CB0_m[41u].w != 0u; + float _1363 = asfloat(CB0_m[42u].w); + float _1375 = asfloat(CB0_m[39u].x); + float _1376 = asfloat(CB0_m[39u].y); + float _1377 = asfloat(CB0_m[39u].z); + float _1409 = mad(T2.Load(int4(uint3(uint2(cvt_f32_u32(gl_FragCoord.x) & 63u, cvt_f32_u32(gl_FragCoord.y) & 63u), T1.Load(1840) & 31u), 0u)).x, 2.0f, -1.0f); + float _1422 = _697 ? (float(int(((_1409 < 0.0f) ? 4294967295u : 0u) + uint(_1409 > 0.0f))) * (1.0f - sqrt(1.0f - abs(_1409)))) : _1409; + float _1423 = mad(mad(exp2(log2(clamp(((_1329 ? _1322 : _1326) - asfloat(CB0_m[42u].x)) * asfloat(CB0_m[41u].x), 0.0f, 1.0f)) * _1363), asfloat(CB0_m[40u].x) - _1375, _1375), _1422, _1322); + float _1424 = mad(mad(asfloat(CB0_m[40u].y) - _1376, exp2(log2(clamp(((_1329 ? _1321 : _1326) - asfloat(CB0_m[42u].y)) * asfloat(CB0_m[41u].y), 0.0f, 1.0f)) * _1363), _1376), _1422, _1321); + float _1425 = mad(mad(asfloat(CB0_m[40u].z) - _1377, exp2(log2(clamp(((_1329 ? _1320 : _1326) - asfloat(CB0_m[42u].z)) * asfloat(CB0_m[41u].z), 0.0f, 1.0f)) * _1363), _1377), _1422, _1320); + SV_Target.x = _697 ? _1423 : clamp(_1423, 0.0f, 1.0f); + SV_Target.y = _697 ? _1424 : clamp(_1424, 0.0f, 1.0f); + SV_Target.z = _697 ? _1425 : clamp(_1425, 0.0f, 1.0f); + SV_Target.w = _697 ? _1324 : clamp(_1324, 0.0f, 1.0f); +} + +SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { + gl_FragCoord = stage_input.gl_FragCoord; + gl_FragCoord.w = 1.0 / gl_FragCoord.w; + TEXCOORD = stage_input.TEXCOORD; + TEXCOORD1 = stage_input.TEXCOORD1; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.SV_Target = SV_Target; + return stage_output; +} diff --git a/src/games/rdr2/lut/0xFC787CD2.ps_5_1.hlslx b/src/games/rdr2/lut/0xFC787CD2.ps_5_1.hlslx new file mode 100644 index 0000000000..edaac82bf2 --- /dev/null +++ b/src/games/rdr2/lut/0xFC787CD2.ps_5_1.hlslx @@ -0,0 +1,480 @@ +struct anon_m { + int4 _m0; + float4 _m1; + float4 _m2; + float2 _m3; + uint4 _m4; + uint4 _m5; + uint4 _m6; + uint4 _m7; + uint4 _m8; + uint4 _m9; + uint4 _m10; + uint4 _m11; + uint4 _m12; + uint4 _m13; + uint4 _m14; + uint _m15; +}; + +cbuffer CB0_buf : register(b0, space0) { + uint4 CB0_m[88] : packoffset(c0); +}; + +cbuffer CB1_buf : register(b1, space0) { + uint4 CB1_m0 : packoffset(c0); + uint2 CB1_m1 : packoffset(c1); + float2 CB1_m2 : packoffset(c1.z); + float4 CB1_m3 : packoffset(c2); + float4 CB1_m4 : packoffset(c3); +}; + +ByteAddressBuffer T0 : register(t6, space0); +ByteAddressBuffer T1 : register(t7, space0); +ByteAddressBuffer T21 : register(t27, space0); +SamplerState S0 : register(s2, space0); +SamplerState S1 : register(s3, space0); +SamplerState S2 : register(s4, space0); +SamplerState S3 : register(s5, space0); +Texture2DArray T2 : register(t8, space0); +Texture2D T3 : register(t9, space0); +Texture2D T4 : register(t10, space0); +Texture2D T5 : register(t11, space0); +Texture2D T6 : register(t12, space0); +Texture1D T7 : register(t13, space0); +Texture2D T8 : register(t14, space0); +Texture2D T9 : register(t15, space0); +Texture2D T10 : register(t16, space0); +Texture2D T11 : register(t17, space0); +Texture2D T12 : register(t18, space0); +Texture2D T13 : register(t19, space0); +Texture2D T14 : register(t20, space0); +Texture2D T15 : register(t21, space0); +Texture2D T16 : register(t22, space0); +Texture2D T17 : register(t23, space0); +Texture2D T18 : register(t24, space0); +Texture2D T19 : register(t25, space0); +Buffer T20 : register(t26, space0); + +static float4 gl_FragCoord; +static float4 TEXCOORD; +static float TEXCOORD1; +static float4 SV_Target; + +struct SPIRV_Cross_Input { + float4 TEXCOORD : TEXCOORD1; + float TEXCOORD1 : TEXCOORD2; + float4 gl_FragCoord : SV_Position; +}; + +struct SPIRV_Cross_Output { + float4 SV_Target : SV_Target0; +}; + +float dp2_f32(float2 a, float2 b) { + precise float _297 = a.x * b.x; + return mad(a.y, b.y, _297); +} + +int cvt_f32_i32(float v) { + return isnan(v) ? 0 : ((v < (-2147483648.0f)) ? int(0x80000000) : ((v > 2147483520.0f) ? 2147483647 : int(v))); +} + +float dp3_f32(float3 a, float3 b) { + precise float _272 = a.x * b.x; + return mad(a.z, b.z, mad(a.y, b.y, _272)); +} + +uint cvt_f32_u32(float v) { + return (v > 4294967040.0f) ? 4294967295u : uint(max(v, 0.0f)); +} + +void frag_main() { + float2 _310 = float2(TEXCOORD.x, TEXCOORD.y); + float _320 = asfloat(CB0_m[0u].w) + 1.0f; + float _324 = asfloat(CB0_m[0u].z); + float _325 = _324 / (_320 - T5.SampleLevel(S0, _310, 0.0f).x); + float4 _329 = T8.Sample(S3, _310); + float _337 = asfloat(T0.Load(16)); + float4 _353 = T19.SampleLevel(S0, float2(TEXCOORD.x * asfloat(CB0_m[82u].x), TEXCOORD.y * asfloat(CB0_m[82u].y)), 0.0f); + float _356 = _353.z; + float _526; + float _527; + float _528; + float _529; + if ((_356 >= 1.0f) && (_353.w < 2.0f)) { + float4 _366 = T18.SampleLevel(S0, _310, 0.0f); + float _371 = asfloat(CB0_m[20u].x); + float2 _374 = float2(_366.x * _371, _366.y * _371); + float _379 = asfloat(CB0_m[20u].z); + float _380 = min(sqrt(dp2_f32(_374, _374)), _379); + float _383 = min(_356, 2.0f); + float _387 = min(_383 + 1.0f, 2.0f); + int _388 = cvt_f32_i32(_387); + float _395 = ((_353.x / _356) * _383) * asfloat(CB0_m[66u].x); + float _396 = asfloat(CB0_m[66u].y) * (_383 * (_353.y / _356)); + float _398 = trunc(_387) - 0.5f; + float _399 = _398 / _383; + float _401; + float _404; + float _406; + float _408; + _401 = 0.0f; + _404 = 0.0f; + _406 = 0.0f; + _408 = 0.0f; + float _402; + float _405; + float _407; + float _409; + uint _411; + uint _410 = 0u; + for (;;) { + int _414 = int(_410); + if (_388 <= _414) { + break; + } + float _418 = float(_414); + float _421 = (_418 + 0.5f) / _398; + float2 _424 = float2(mad(_395, _421, TEXCOORD.x), mad(_421, _396, TEXCOORD.y)); + float4 _426 = T18.SampleLevel(S0, _424, 0.0f); + float2 _431 = float2(_371 * _426.x, _371 * _426.y); + float _434 = min(_379, sqrt(dp2_f32(_431, _431))); + float _440 = _324 / (_320 - T4.SampleLevel(S0, _424, 0.0f).x); + float _445 = _440 - _325; + float _450 = max(_418 - 0.5f, 0.0f); + float _455 = clamp(mad(_380, _399, -_450), 0.0f, 1.0f); + float _460 = (1.0f - clamp((1.0f - _434) * 8.0f, 0.0f, 1.0f)) * dp2_f32(float2(clamp(mad(_445, 1.0f, 0.5f), 0.0f, 1.0f), clamp(mad(_445, -1.0f, 0.5f), 0.0f, 1.0f)), float2(_455, clamp(mad(_399, _434, -_450), 0.0f, 1.0f))); + float4 _464 = T10.SampleLevel(S1, _424, 0.0f); + float2 _472 = float2(mad(-_395, _421, TEXCOORD.x), mad(-_421, _396, TEXCOORD.y)); + float4 _474 = T18.SampleLevel(S0, _472, 0.0f); + float2 _479 = float2(_371 * _474.x, _371 * _474.y); + float _482 = min(_379, sqrt(dp2_f32(_479, _479))); + float _487 = _324 / (_320 - T4.SampleLevel(S0, _472, 0.0f).x); + float _492 = _487 - _325; + float _503 = (1.0f - clamp((1.0f - _482) * 8.0f, 0.0f, 1.0f)) * dp2_f32(float2(clamp(mad(_492, 1.0f, 0.5f), 0.0f, 1.0f), clamp(mad(_492, -1.0f, 0.5f), 0.0f, 1.0f)), float2(_455, clamp(mad(_399, _482, -_450), 0.0f, 1.0f))); + float4 _505 = T10.SampleLevel(S1, _472, 0.0f); + bool _509 = _440 > _487; + bool _510 = _434 < _482; + bool _511 = _509 && _510; + float _512 = _511 ? _503 : _460; + float _515 = (_511 || (_509 || _510)) ? _503 : _460; + _409 = mad(_464.x, _512, mad(_505.x, _515, _408)); + _407 = mad(_464.y, _512, mad(_505.y, _515, _406)); + _405 = mad(_464.z, _512, mad(_505.z, _515, _404)); + _402 = (_515 + _401) + _512; + _411 = _410 + 1u; + _401 = _402; + _404 = _405; + _406 = _407; + _408 = _409; + _410 = _411; + continue; + } + float _521 = float(_388 << int(1u)); + _526 = _404 / _521; + _527 = _406 / _521; + _528 = _408 / _521; + _529 = _401 / _521; + } else { + _526 = 0.0f; + _527 = 0.0f; + _528 = 0.0f; + _529 = 0.0f; + } + float _530 = 1.0f - _529; + float4 _537 = T11.SampleLevel(S1, _310, 0.0f); + float _542 = 1.0f - _537.w; + float _543 = mad(mad(_530, _329.x * _337, _528), _542, _537.x); + float _544 = mad(mad(_329.y * _337, _530, _527), _542, _537.y); + float _545 = mad(mad(_530, _329.z * _337, _526), _542, _537.z); + float4 _547 = T20.Load(0u); + float _548 = _547.x; + float _549 = _547.y; + float _550 = _547.z; + float4 _551 = T20.Load(1u); + float _552 = _551.x; + float _553 = _551.y; + float _554 = _551.z; + float _555 = _551.w; + float4 _557 = T3.Load(int3(uint2(0u, 0u), 0u)); + float _558 = _557.x; + float _563 = dp3_f32(float3(_543 * _558, _544 * _558, _545 * _558), float3(0.300000011920928955078125f, 0.589999973773956298828125f, 0.10999999940395355224609375f)); + bool _588; + float _589; + float _590; + float _591; + if (CB0_m[64u].x != 0u) { + float4 _574 = T16.Sample(S3, _310); + float _575 = _574.x; + float _576 = _574.y; + float _577 = _574.z; + float _578 = _574.w; + bool _580 = (_578 + 9.9999997473787516355514526367188e-05f) >= 1.0f; + float _581 = 1.0f - _578; + _588 = _580; + _589 = _580 ? _577 : mad(_545, _581, _577); + _590 = _580 ? _576 : mad(_544, _581, _576); + _591 = _580 ? _575 : mad(_543, _581, _575); + } else { + _588 = false; + _589 = _545; + _590 = _544; + _591 = _543; + } + float _595 = min(_558 * _591, 65504.0f); + float _596 = min(_558 * _590, 65504.0f); + float _597 = min(_558 * _589, 65504.0f); + bool _598 = !_588; + float _795; + float _796; + float _797; + float _798; + if (_598) { + float _678; + if (CB0_m[73u].x != 0u) { + float4 _611 = T6.Sample(S2, _310); + float _626 = clamp(dp3_f32(float3(_558 * _611.x, _558 * _611.y, _558 * _611.z), float3(0.300000011920928955078125f, 0.589999973773956298828125f, 0.10999999940395355224609375f)), asfloat(CB0_m[75u].z), asfloat(CB0_m[75u].w)); + float _651 = asfloat(CB0_m[69u].x); + float _654 = asfloat(CB0_m[69u].y); + float _655 = clamp(mad(_626, asfloat(CB0_m[75u].y), mad(log2(_626 + asfloat(CB0_m[75u].x)) * asfloat(CB0_m[73u].y), 0.693147182464599609375f, asfloat(CB0_m[73u].z)) - 10.0f) + asfloat(CB0_m[68u].w), _651, _654); + _678 = exp2(mad(clamp(asfloat(CB0_m[73u].x), 0.0f, 1.0f), clamp(_651, mad(abs(_655) * asfloat(CB0_m[69u].z), float(int(((_655 < 0.0f) ? 4294967295u : 0u) + uint(_655 > 0.0f))), _655), _654) - TEXCOORD1, TEXCOORD1)); + } else { + _678 = TEXCOORD.z; + } + float _681 = asfloat(CB0_m[16u].w); + float _704 = _563 * (T9.Sample(S2, float2(frac(mad(TEXCOORD.x * _681, 1.60000002384185791015625f, asfloat(CB0_m[16u].x))), frac(mad(TEXCOORD.y * _681, 0.89999997615814208984375f, asfloat(CB0_m[16u].y))))).w - 0.5f); + float _707 = asfloat(CB0_m[16u].z); + float _711 = max(_595 * 0.5f, mad(_704, _707, _595)); + float _712 = max(mad(_704, _707, _596), _596 * 0.5f); + float _713 = max(mad(_704, _707, _597), _597 * 0.5f); + float2 _729 = float2(TEXCOORD.x - asfloat(CB0_m[53u].x), TEXCOORD.y - asfloat(CB0_m[53u].y)); + float2 _743 = float2(dp2_f32(float2(asfloat(CB0_m[55u].x), asfloat(CB0_m[55u].y)), _729) * asfloat(CB0_m[53u].z), dp2_f32(float2(asfloat(CB0_m[55u].z), asfloat(CB0_m[55u].w)), _729) * asfloat(CB0_m[53u].w)); + float _753 = max((dp2_f32(_743, _743) - asfloat(CB0_m[56u].x)) * asfloat(CB0_m[56u].w), 0.0f); + float _765 = (_753 < 1.0f) ? (1.0f - exp2(_753 * (-10.0f))) : ((((_753 - 1.0f) > 0.0f) ? exp2((_753 - 2.0f) * 10.0f) : 0.0f) + 0.9980499744415283203125f); + float _779 = asfloat(CB0_m[54u].w); + bool _789 = CB0_m[54u].w != 0u; + _795 = _678; + _796 = _789 ? mad(_765, mad(_779, asfloat(CB0_m[54u].z) * _713, -_713), _713) : _713; + _797 = _789 ? mad(_765, mad(_779, asfloat(CB0_m[54u].y) * _712, -_712), _712) : _712; + _798 = _789 ? mad(mad(_711 * asfloat(CB0_m[54u].x), _779, -_711), _765, _711) : _711; + } else { + _795 = TEXCOORD.z; + _796 = _597; + _797 = _596; + _798 = _595; + } + float _808 = clamp(clamp(TEXCOORD.y * asfloat(CB0_m[60u].y), 0.0f, 1.0f) + asfloat(CB0_m[57u].w), 0.0f, 1.0f); + float _823 = clamp(clamp(clamp(TEXCOORD.y - asfloat(CB0_m[59u].w), 0.0f, 1.0f) * asfloat(CB0_m[60u].x), 0.0f, 1.0f) - asfloat(CB0_m[58u].w), 0.0f, 1.0f); + float _829 = asfloat(CB0_m[57u].x); + float _830 = asfloat(CB0_m[57u].y); + float _831 = asfloat(CB0_m[57u].z); + float _837 = asfloat(CB0_m[59u].x); + float _838 = asfloat(CB0_m[59u].y); + float _839 = asfloat(CB0_m[59u].z); + float _843 = mad(_808, _837 - _829, _829); + float _844 = mad(_808, _838 - _830, _830); + float _845 = mad(_808, _839 - _831, _831); + float _866 = mad(TEXCOORD.y, mad(_823, asfloat(CB0_m[58u].x) - _837, _837) - _843, _843) * _798; + float _867 = _797 * mad(TEXCOORD.y, mad(_823, asfloat(CB0_m[58u].y) - _838, _838) - _844, _844); + float _868 = _796 * mad(TEXCOORD.y, mad(_823, asfloat(CB0_m[58u].z) - _839, _839) - _845, _845); + float _876 = (CB1_m1.x != 0u) ? CB1_m3.z : _550; + float _879 = _795 / CB1_m2.x; + float _883 = max(_866 * _879, 0.0f); + float _884 = max(_879 * _867, 0.0f); + float _885 = max(_879 * _868, 0.0f); + float _913 = max(_866 * _795, 0.0f); + float _914 = max(_795 * _867, 0.0f); + float _915 = max(_795 * _868, 0.0f); + bool _942 = CB1_m0.w != 0u; + float _943 = _942 ? ((((mad(_883, mad(_548, _883, _552), _553) / mad(_883, mad(_548, _883, _549), _554)) - _555) * _876) * CB1_m2.x) : clamp(_550 * ((mad(_913, mad(_548, _913, _552), _553) / mad(_913, mad(_548, _913, _549), _554)) - _555), 0.0f, 1.0f); + float _944 = _942 ? (CB1_m2.x * (_876 * ((mad(mad(_548, _884, _552), _884, _553) / mad(mad(_548, _884, _549), _884, _554)) - _555))) : clamp(_550 * ((mad(mad(_548, _914, _552), _914, _553) / mad(mad(_548, _914, _549), _914, _554)) - _555), 0.0f, 1.0f); + float _945 = _942 ? (CB1_m2.x * (_876 * ((mad(mad(_548, _885, _552), _885, _553) / mad(mad(_548, _885, _549), _885, _554)) - _555))) : clamp(_550 * ((mad(mad(_548, _915, _552), _915, _553) / mad(mad(_548, _915, _549), _915, _554)) - _555), 0.0f, 1.0f); + float _1018; + float _1019; + float _1020; + if (_598) { + float _1015; + float _1016; + float _1017; + if (CB0_m[50u].w != 0u) { + float2 _968 = float2(TEXCOORD.x - asfloat(CB0_m[49u].x), TEXCOORD.y - asfloat(CB0_m[49u].y)); + float2 _982 = float2(dp2_f32(float2(asfloat(CB0_m[51u].x), asfloat(CB0_m[51u].y)), _968) * asfloat(CB0_m[49u].z), dp2_f32(float2(asfloat(CB0_m[51u].z), asfloat(CB0_m[51u].w)), _968) * asfloat(CB0_m[49u].w)); + float _1000 = T7.Sample(S2, clamp((dp2_f32(_982, _982) - asfloat(CB0_m[52u].x)) * asfloat(CB0_m[52u].w), 0.0f, 1.0f)).w * asfloat(CB0_m[50u].w); + _1015 = mad(_1000, asfloat(CB0_m[50u].z) - _945, _945); + _1016 = mad(_1000, asfloat(CB0_m[50u].y) - _944, _944); + _1017 = mad(_1000, asfloat(CB0_m[50u].x) - _943, _943); + } else { + _1015 = _945; + _1016 = _944; + _1017 = _943; + } + _1018 = _1015; + _1019 = _1016; + _1020 = _1017; + } else { + _1018 = _945; + _1019 = _944; + _1020 = _943; + } + bool _1056 = _942 && (CB1_m0.z == 0u); + float _1057 = _1056 ? _1020 : ((_1020 < 0.003130800090730190277099609375f) ? (CB1_m3.w * _1020) : mad(exp2(log2(_1020) * CB1_m4.x), CB1_m4.y, -CB1_m4.z)); + float _1058 = _1056 ? _1019 : ((_1019 < 0.003130800090730190277099609375f) ? (CB1_m3.w * _1019) : mad(exp2(log2(_1019) * CB1_m4.x), CB1_m4.y, -CB1_m4.z)); + float _1059 = _1056 ? _1018 : ((_1018 < 0.003130800090730190277099609375f) ? (CB1_m3.w * _1018) : mad(exp2(log2(_1018) * CB1_m4.x), CB1_m4.y, -CB1_m4.z)); + float _1257; + float _1258; + float _1259; + if (_598 && (CB0_m[19u].x != 0u)) { + float _1068 = asfloat(CB0_m[17u].x); + float _1069 = _1068 * 0.070000000298023223876953125f; + float _1070 = _1068 * 0.10999999940395355224609375f; + float _1071 = _1068 * 0.12999999523162841796875f; + float _1072 = _1068 * 0.17000000178813934326171875f; + float _1075 = asfloat(CB0_m[17u].w); + float _1076 = TEXCOORD.x * _1075; + float _1077 = TEXCOORD.y * _1075; + float _1105 = _1068 * 0.189999997615814208984375f; + float _1106 = _1068 * 0.23000000417232513427734375f; + float _1107 = _1068 * 0.2899999916553497314453125f; + float _1108 = _1068 * 0.310000002384185791015625f; + float _1149 = clamp(mad(frac(sin(dp2_f32(float2(_1076 + _1108, _1108 + _1077), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f) + ((((frac(sin(dp2_f32(float2(_1076 + _1072, _1077 + _1072), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f) + ((frac(sin(dp2_f32(float2(_1076 + _1069, _1077 + _1069), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f) + frac(sin(dp2_f32(float2(_1076 + _1070, _1077 + _1070), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f)) + frac(sin(dp2_f32(float2(_1076 + _1071, _1077 + _1071), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f))) + frac(sin(dp2_f32(float2(_1076 + _1105, _1105 + _1077), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f)) + frac(sin(dp2_f32(float2(_1076 + _1106, _1106 + _1077), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f)) + frac(sin(dp2_f32(float2(_1076 + _1107, _1107 + _1077), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f)), 0.125f, asfloat(CB0_m[17u].z)), 0.0f, 1.0f); + float _1151 = dp3_f32(float3(_1057, _1058, _1059), float3(0.2125999927520751953125f, 0.715200006961822509765625f, 0.072200000286102294921875f)); + float _1159 = (CB0_m[18u].y != 0u) ? mad(_1149 * (_1151 * (_1151 * _1151)), -0.5f, _1149) : _1149; + float _1163 = _1159 - 0.5f; + float _1166 = asfloat(CB0_m[18u].x); + bool _1176 = _1159 < 0.5f; + float _1177 = _1159 + _1159; + float _1178 = _1177 * _1057; + float _1179 = _1177 * _1058; + float _1180 = _1177 * _1059; + float _1184 = mad(_1159, -2.0f, 1.0f); + float _1194 = 1.0f - _1159; + float _1198 = mad(_1159, 2.0f, -1.0f); + float _1220 = _1194 + _1194; + bool _1241 = CB0_m[19u].w != 0u; + bool _1247 = CB0_m[19u].z != 0u; + bool _1253 = CB0_m[18u].w != 0u; + _1257 = _1253 ? (_1247 ? mad(_1166, (_1176 ? ((_1184 * (_1059 * _1059)) + _1180) : ((_1194 * (_1059 + _1059)) + (_1198 * sqrt(_1059)))) - _1059, _1059) : (_1241 ? mad(_1166, ((_1059 < 0.5f) ? _1180 : mad(-_1220, 1.0f - _1059, 1.0f)) - _1059, _1059) : clamp(max(mad(_1163, _1166, _1059), _1059 * 0.02500000037252902984619140625f), 0.0f, 1.0f))) : _1149; + _1258 = _1253 ? (_1247 ? mad(_1166, (_1176 ? ((_1184 * (_1058 * _1058)) + _1179) : ((_1194 * (_1058 + _1058)) + (_1198 * sqrt(_1058)))) - _1058, _1058) : (_1241 ? mad(_1166, ((_1058 < 0.5f) ? _1179 : mad(-_1220, 1.0f - _1058, 1.0f)) - _1058, _1058) : clamp(max(mad(_1163, _1166, _1058), _1058 * 0.02500000037252902984619140625f), 0.0f, 1.0f))) : _1149; + _1259 = _1253 ? (_1247 ? mad(_1166, (_1176 ? (_1178 + ((_1057 * _1057) * _1184)) : ((sqrt(_1057) * _1198) + ((_1057 + _1057) * _1194))) - _1057, _1057) : (_1241 ? mad(_1166, ((_1057 < 0.5f) ? _1178 : mad(-_1220, 1.0f - _1057, 1.0f)) - _1057, _1057) : clamp(max(mad(_1163, _1166, _1057), _1057 * 0.02500000037252902984619140625f), 0.0f, 1.0f))) : _1149; + } else { + _1257 = _1059; + _1258 = _1058; + _1259 = _1057; + } + float3 _1260 = float3(_1259, _1258, _1257); + float _1265 = max(dp3_f32(float3(0.265399992465972900390625f, 0.67040002346038818359375f, 0.06419999897480010986328125f), _1260), 0.0f); + float _1271 = mad(((max(dp3_f32(float3(0.02480000071227550506591796875f, 0.1247999966144561767578125f, 0.85039997100830078125f), _1260), 0.0f) + _1265) / max(dp3_f32(float3(0.514900028705596923828125f, 0.324400007724761962890625f, 0.1606999933719635009765625f), _1260), 0.00999999977648258209228515625f)) + 1.0f, 1.33000004291534423828125f, -1.67999994754791259765625f) * _1265; + float _1285 = asfloat(CB0_m[83u].w); + float _1299 = clamp(mad(0.039999999105930328369140625f / (_563 + 0.039999999105930328369140625f), asfloat(CB0_m[84u].x), asfloat(CB0_m[84u].y)), 0.0f, 1.0f); + float _1303 = mad(_1299, clamp((_1271 * asfloat(CB0_m[83u].x)) * _1285, 0.0f, 1.0f) - _1259, _1259); + float _1304 = mad(_1299, clamp(_1285 * (_1271 * asfloat(CB0_m[83u].y)), 0.0f, 1.0f) - _1258, _1258); + float _1305 = mad(_1299, clamp(_1285 * (_1271 * asfloat(CB0_m[83u].z)), 0.0f, 1.0f) - _1257, _1257); + float _1361; + float _1362; + float _1363; + if (CB0_m[86u].w != 0u) { + float _1315 = asfloat(CB0_m[87u].x); + float _1316 = asfloat(CB0_m[87u].w); + float _1331 = asfloat(CB0_m[86u].z); + float4 _1350 = T17.Sample(S2, float2(((((TEXCOORD.x - 0.5f) * _1331) / mad(TEXCOORD.y, asfloat(CB0_m[87u].z) - _1316, _1316)) - asfloat(CB0_m[86u].x)) + 0.5f, ((((TEXCOORD.y - 0.5f) * _1331) / mad(TEXCOORD.x, asfloat(CB0_m[87u].y) - _1315, _1315)) - asfloat(CB0_m[86u].y)) + 0.5f)); + float _1357 = asfloat(CB0_m[86u].w); + _1361 = mad(_1350.x - _1303, _1357, _1303); + _1362 = mad(_1350.y - _1304, _1357, _1304); + _1363 = mad(_1350.z - _1305, _1357, _1305); + } else { + _1361 = _1303; + _1362 = _1304; + _1363 = _1305; + } + float _1551; + float _1552; + float _1553; + if (_598) { + float _1372 = max(max(max(_1362, _1363), _1361), 9.9999997473787516355514526367188e-05f); + float _1383 = ((CB1_m1.y == 0u) && _1056) ? 1.0f : (((CB1_m2.y < _1372) ? mad(CB1_m3.x, _1372, CB1_m3.y) : _1372) / _1372); + float _1384 = _1363 * _1383; + float _1389 = floor(_1384 * 14.99989986419677734375f); + float _1391 = mad(_1384, 15.0f, -_1389); + float _1393 = ((_1361 * _1383) * 0.05859375f) + (_1389 * 0.0625f); + float _1395 = mad(_1362 * _1383, 0.9375f, 0.03125f); + float4 _1401 = T14.Sample(S2, float2(_1393 + 0.001953125f, _1395)); + float _1402 = _1401.x; + float _1403 = _1401.y; + float _1404 = _1401.z; + float4 _1407 = T14.Sample(S2, float2(_1393 + 0.064453125f, _1395)); + float _1414 = mad(_1391, _1407.x - _1402, _1402); + float _1415 = mad(_1407.y - _1403, _1391, _1403); + float _1416 = mad(_1407.z - _1404, _1391, _1404); + float _1545; + float _1546; + float _1547; + if (int(T21.Load(0)) > 0) { + float _1452 = clamp(asfloat(T21.Load4(32)).x + ((_325 < asfloat(T21.Load4(16)).z) ? clamp(asfloat(T21.Load4(16)).y * (_325 - asfloat(T21.Load4(16)).x), 0.0f, 1.0f) : (1.0f - clamp((_325 - asfloat(T21.Load4(16)).z) * asfloat(T21.Load4(16)).w, 0.0f, 1.0f))), 0.0f, 1.0f); + float _1455 = floor(_1416 * 14.99989986419677734375f); + float _1457 = mad(_1416, 15.0f, -_1455); + float _1459 = (_1414 * 0.05859375f) + (_1455 * 0.0625f); + float _1461 = mad(_1415, 0.9375f, 0.03125f); + float4 _1466 = T12.Sample(S2, float2(_1459 + 0.001953125f, _1461)); + float _1467 = _1466.x; + float _1468 = _1466.y; + float _1469 = _1466.z; + float4 _1472 = T12.Sample(S2, float2(_1459 + 0.064453125f, _1461)); + float _1485 = mad(_1452, mad(_1457, _1472.x - _1467, _1467) - _1414, _1414); + float _1486 = mad(mad(_1472.y - _1468, _1457, _1468) - _1415, _1452, _1415); + float _1487 = mad(mad(_1472.z - _1469, _1457, _1469) - _1416, _1452, _1416); + float _1498 = clamp(asfloat(T21.Load2(48)).y + ((_325 < asfloat(T21.Load4(32)).w) ? clamp(asfloat(T21.Load4(32)).z * (_325 - asfloat(T21.Load4(32)).y), 0.0f, 1.0f) : (1.0f - clamp((_325 - asfloat(T21.Load4(32)).w) * asfloat(T21.Load2(48)).x, 0.0f, 1.0f))), 0.0f, 1.0f); + float _1501 = floor(_1487 * 14.99989986419677734375f); + float _1503 = mad(_1487, 15.0f, -_1501); + float _1505 = (_1485 * 0.05859375f) + (_1501 * 0.0625f); + float _1507 = mad(_1486, 0.9375f, 0.03125f); + float4 _1512 = T13.Sample(S2, float2(_1505 + 0.001953125f, _1507)); + float _1513 = _1512.x; + float _1514 = _1512.y; + float _1515 = _1512.z; + float4 _1518 = T13.Sample(S2, float2(_1505 + 0.064453125f, _1507)); + float _1541 = dp3_f32(float3(T15.Sample(S2, _310).xyz), float3(0.2125999927520751953125f, 0.715200006961822509765625f, 0.072200000286102294921875f)); + _1545 = mad((mad(_1518.z - _1515, _1503, _1515) - _1487) * _1498, _1541, _1487); + _1546 = mad((mad(_1518.y - _1514, _1503, _1514) - _1486) * _1498, _1541, _1486); + _1547 = mad(_1498 * (mad(_1503, _1518.x - _1513, _1513) - _1485), _1541, _1485); + } else { + _1545 = _1416; + _1546 = _1415; + _1547 = _1414; + } + _1551 = _1545 / _1383; + _1552 = _1546 / _1383; + _1553 = _1547 / _1383; + } else { + _1551 = _1363; + _1552 = _1362; + _1553 = _1361; + } + float _1555 = dp3_f32(float3(_1553, _1552, _1551), float3(0.2989999949932098388671875f, 0.58700001239776611328125f, 0.114000000059604644775390625f)); + float _1557 = max(max(_1551, _1552), _1553); + bool _1560 = CB0_m[41u].w != 0u; + float _1594 = asfloat(CB0_m[42u].w); + float _1606 = asfloat(CB0_m[39u].x); + float _1607 = asfloat(CB0_m[39u].y); + float _1608 = asfloat(CB0_m[39u].z); + float _1640 = mad(T2.Load(int4(uint3(uint2(cvt_f32_u32(gl_FragCoord.x) & 63u, cvt_f32_u32(gl_FragCoord.y) & 63u), T1.Load(1840) & 31u), 0u)).x, 2.0f, -1.0f); + float _1653 = _942 ? (float(int(((_1640 < 0.0f) ? 4294967295u : 0u) + uint(_1640 > 0.0f))) * (1.0f - sqrt(1.0f - abs(_1640)))) : _1640; + float _1654 = mad(mad(exp2(log2(clamp(((_1560 ? _1553 : _1557) - asfloat(CB0_m[42u].x)) * asfloat(CB0_m[41u].x), 0.0f, 1.0f)) * _1594), asfloat(CB0_m[40u].x) - _1606, _1606), _1653, _1553); + float _1655 = mad(mad(asfloat(CB0_m[40u].y) - _1607, exp2(log2(clamp(((_1560 ? _1552 : _1557) - asfloat(CB0_m[42u].y)) * asfloat(CB0_m[41u].y), 0.0f, 1.0f)) * _1594), _1607), _1653, _1552); + float _1656 = mad(mad(asfloat(CB0_m[40u].z) - _1608, exp2(log2(clamp(((_1560 ? _1551 : _1557) - asfloat(CB0_m[42u].z)) * asfloat(CB0_m[41u].z), 0.0f, 1.0f)) * _1594), _1608), _1653, _1551); + SV_Target.x = _942 ? _1654 : clamp(_1654, 0.0f, 1.0f); + SV_Target.y = _942 ? _1655 : clamp(_1655, 0.0f, 1.0f); + SV_Target.z = _942 ? _1656 : clamp(_1656, 0.0f, 1.0f); + SV_Target.w = _942 ? _1555 : clamp(_1555, 0.0f, 1.0f); +} + +SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { + gl_FragCoord = stage_input.gl_FragCoord; + gl_FragCoord.w = 1.0 / gl_FragCoord.w; + TEXCOORD = stage_input.TEXCOORD; + TEXCOORD1 = stage_input.TEXCOORD1; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.SV_Target = SV_Target; + return stage_output; +} diff --git a/src/games/rdr2/lut/lut_no_tm_0x737EB461.ps_5_1.hlslx b/src/games/rdr2/lut/lut_no_tm_0x737EB461.ps_5_1.hlslx new file mode 100644 index 0000000000..c92078a5f8 --- /dev/null +++ b/src/games/rdr2/lut/lut_no_tm_0x737EB461.ps_5_1.hlslx @@ -0,0 +1,86 @@ +cbuffer CB0_buf : register(b0, space0) { + uint4 CB0_m0 : packoffset(c0); + uint4 CB0_m1 : packoffset(c1); + uint4 CB0_m2 : packoffset(c2); + uint4 CB0_m3 : packoffset(c3); + uint4 CB0_m4 : packoffset(c4); + uint4 CB0_m5 : packoffset(c5); + uint4 CB0_m6 : packoffset(c6); +}; + +SamplerState S0 : register(s1, space0); +Texture2D T0 : register(t2, space0); +Texture2D T1 : register(t3, space0); +Texture2D T2 : register(t4, space0); +Texture2D T3 : register(t5, space0); +Texture2D T4 : register(t6, space0); + +static float2 TEXCOORD; +static float4 SV_Target; + +struct SPIRV_Cross_Input { + float2 TEXCOORD : TEXCOORD1; +}; + +struct SPIRV_Cross_Output { + float4 SV_Target : SV_Target0; +}; + +void frag_main() { + float2 _51 = float2(TEXCOORD.x, TEXCOORD.y); + float4 _54 = T0.Sample(S0, _51); + float _57 = _54.z; + float _60 = floor(_57 * 14.99989986419677734375f); + float _63 = mad(_57, 15.0f, -_60); + float _65 = (_60 * 0.0625f) + (_54.x * 0.05859375f); + float _67 = mad(_54.y, 0.9375f, 0.03125f); + float4 _72 = T3.Sample(S0, float2(_65 + 0.001953125f, _67)); + float _73 = _72.x; + float _74 = _72.y; + float _75 = _72.z; + float4 _78 = T3.Sample(S0, float2(_65 + 0.064453125f, _67)); + float _85 = mad(_63, _78.z - _75, _75); + float4 _90 = T4.Sample(S0, _51); + float _91 = _90.x; + float _94 = floor(_85 * 14.99989986419677734375f); + float _96 = mad(_85, 15.0f, -_94); + float _98 = (_94 * 0.0625f) + (mad(_63, _78.x - _73, _73) * 0.05859375f); + float _100 = mad(mad(_63, _78.y - _74, _74), 0.9375f, 0.03125f); + float2 _103 = float2(_98 + 0.001953125f, _100); + float4 _105 = T1.Sample(S0, _103); + float _106 = _105.x; + float _107 = _105.y; + float _108 = _105.z; + float2 _109 = float2(_98 + 0.064453125f, _100); + float4 _111 = T1.Sample(S0, _109); + float _118 = mad(_96, _111.x - _106, _106); + float _119 = mad(_96, _111.y - _107, _107); + float _120 = mad(_96, _111.z - _108, _108); + float4 _123 = T2.Sample(S0, _103); + float _124 = _123.x; + float _125 = _123.y; + float _126 = _123.z; + float4 _128 = T2.Sample(S0, _109); + float _135 = mad(_96, _128.x - _124, _124); + float _136 = mad(_96, _128.y - _125, _125); + float _137 = mad(_96, _128.z - _126, _126); + float _142 = asfloat(CB0_m6.z); + float _144 = mad(-_91, _142, 1.0f); + float _149 = mad(_91, _142, 1.0f) - _142; + bool _153 = CB0_m6.z != 0u; + float _155 = _153 ? (_118 * _144) : _118; + float _156 = _153 ? (_144 * _119) : _119; + float _157 = _153 ? (_144 * _120) : _120; + SV_Target.x = mad(_91, (_153 ? (_135 * _149) : _135) - _155, _155); + SV_Target.y = mad(_91, (_153 ? (_136 * _149) : _136) - _156, _156); + SV_Target.z = mad(_91, (_153 ? (_137 * _149) : _137) - _157, _157); + SV_Target.w = 1.0f; +} + +SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { + TEXCOORD = stage_input.TEXCOORD; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.SV_Target = SV_Target; + return stage_output; +} diff --git a/src/games/rdr2/lut/tm_0xD603CA55.ps_5_1.hlslx b/src/games/rdr2/lut/tm_0xD603CA55.ps_5_1.hlslx new file mode 100644 index 0000000000..68714c8fc9 --- /dev/null +++ b/src/games/rdr2/lut/tm_0xD603CA55.ps_5_1.hlslx @@ -0,0 +1,104 @@ +#include "../common.hlsli" + +cbuffer CB0_buf : register(b0, space0) { + uint4 CB0_m0 : packoffset(c0); + uint4 CB0_m1 : packoffset(c1); + uint4 CB0_m2 : packoffset(c2); + float2 CB0_m3 : packoffset(c3); + float2 CB0_m4 : packoffset(c3.z); + float2 CB0_m5 : packoffset(c4); + float2 CB0_m6 : packoffset(c4.z); + float3 CB0_m7 : packoffset(c5); + float CB0_m8 : packoffset(c5.w); + float2 CB0_m9 : packoffset(c6); + uint2 CB0_m10 : packoffset(c6.z); +}; + +SamplerState S0 : register(s1, space0); +Texture2D T0 : register(t2, space0); +Texture1D T1 : register(t3, space0); +Texture2D T2 : register(t4, space0); +Texture2D T3 : register(t5, space0); +Texture2D T4 : register(t6, space0); +Texture2D T5 : register(t7, space0); + +static float2 TEXCOORD; +static float4 SV_Target; + +struct SPIRV_Cross_Input { + float2 TEXCOORD : TEXCOORD1; +}; + +struct SPIRV_Cross_Output { + float4 SV_Target : SV_Target0; +}; + +float dp2_f32(float2 a, float2 b) { + precise float _61 = a.x * b.x; + return mad(a.y, b.y, _61); +} + +void frag_main() { + float2 _76 = float2(TEXCOORD.x, TEXCOORD.y); + float4 _79 = T0.Sample(S0, _76); + float _80 = _79.x; + float _81 = _79.y; + float _82 = _79.z; + float2 _93 = float2(TEXCOORD.x - CB0_m3.x, TEXCOORD.y - CB0_m3.y); + float2 _104 = float2(dp2_f32(CB0_m5, _93) * CB0_m4.x, dp2_f32(CB0_m6, _93) * CB0_m4.y); + float _121 = T1.Sample(S0, clamp((dp2_f32(_104, _104) - CB0_m9.x) * CB0_m9.y, 0.0f, 1.0f)).w * CB0_m8; + float _131 = mad(_121, CB0_m7.z - _82, _82); + float _136 = floor(_131 * 14.99989986419677734375f); + float _138 = mad(_131, 15.0f, -_136); + float _140 = (_136 * 0.0625f) + (mad(CB0_m7.x - _80, _121, _80) * 0.05859375f); + float _142 = mad(mad(CB0_m7.y - _81, _121, _81), 0.9375f, 0.03125f); + float4 _147 = T4.Sample(S0, float2(_140 + 0.001953125f, _142)); + float _148 = _147.x; + float _149 = _147.y; + float _150 = _147.z; + float4 _153 = T4.Sample(S0, float2(_140 + 0.064453125f, _142)); + float _160 = mad(_138, _153.z - _150, _150); + float4 _165 = T5.Sample(S0, _76); + float _166 = _165.x; + float _169 = floor(_160 * 14.99989986419677734375f); + float _171 = mad(_160, 15.0f, -_169); + float _173 = (_169 * 0.0625f) + (mad(_138, _153.x - _148, _148) * 0.05859375f); + float _175 = mad(mad(_138, _153.y - _149, _149), 0.9375f, 0.03125f); + float2 _178 = float2(_173 + 0.001953125f, _175); + float4 _180 = T2.Sample(S0, _178); + float _181 = _180.x; + float _182 = _180.y; + float _183 = _180.z; + float2 _184 = float2(_173 + 0.064453125f, _175); + float4 _186 = T2.Sample(S0, _184); + float _193 = mad(_171, _186.x - _181, _181); + float _194 = mad(_171, _186.y - _182, _182); + float _195 = mad(_171, _186.z - _183, _183); + float4 _198 = T3.Sample(S0, _178); + float _199 = _198.x; + float _200 = _198.y; + float _201 = _198.z; + float4 _203 = T3.Sample(S0, _184); + float _210 = mad(_171, _203.x - _199, _199); + float _211 = mad(_171, _203.y - _200, _200); + float _212 = mad(_171, _203.z - _201, _201); + float _216 = asfloat(CB0_m10.x); + float _218 = mad(-_166, _216, 1.0f); + float _223 = mad(_166, _216, 1.0f) - _216; + bool _227 = CB0_m10.x != 0u; + float _229 = _227 ? (_193 * _218) : _193; + float _230 = _227 ? (_194 * _218) : _194; + float _231 = _227 ? (_195 * _218) : _195; + SV_Target.x = mad(_166, (_227 ? (_210 * _223) : _210) - _229, _229); + SV_Target.y = mad(_166, (_227 ? (_211 * _223) : _211) - _230, _230); + SV_Target.z = mad(_166, (_227 ? (_212 * _223) : _212) - _231, _231); + SV_Target.w = 1.0f; +} + +SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { + TEXCOORD = stage_input.TEXCOORD; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.SV_Target = SV_Target; + return stage_output; +} diff --git a/src/games/rdr2/lut/tm_pause_0xDBCF46F8.ps_5_1.hlslx b/src/games/rdr2/lut/tm_pause_0xDBCF46F8.ps_5_1.hlslx new file mode 100644 index 0000000000..02581a8075 --- /dev/null +++ b/src/games/rdr2/lut/tm_pause_0xDBCF46F8.ps_5_1.hlslx @@ -0,0 +1,193 @@ +#include "../common.hlsli" + +struct anon_m { + int4 _m0; + uint4 _m1; + uint4 _m2; + uint4 _m3; + uint4 _m4; + uint4 _m5; + uint4 _m6; + uint4 _m7; + uint4 _m8; + uint4 _m9; + uint4 _m10; + uint4 _m11; + uint4 _m12; + uint4 _m13; + uint3 _m14; +}; + +cbuffer CB0_buf : register(b16, space0) { + uint4 CB0_m[53] : packoffset(c0); +}; + +cbuffer CB1_buf : register(b20, space0) { + uint4 CB1_m0 : packoffset(c0); + float4 CB1_m1 : packoffset(c1); + float4 CB1_m2 : packoffset(c2); +}; + +ByteAddressBuffer T5 : register(t118, space0); +SamplerState S0 : register(s2, space0); +SamplerState S1 : register(s8, space0); +Texture1D T0 : register(t89, space0); +Texture2D T1 : register(t90, space0); +Texture2D T2 : register(t100, space0); +Texture2D T3 : register(t106, space0); +Texture2D T4 : register(t107, space0); + +static float4 SV_POSITION; +static float4 TEXCOORD; +static float4 SV_Target; + +struct SPIRV_Cross_Input { + float4 SV_POSITION : SV_POSITION; + float4 TEXCOORD : TEXCOORD; +}; + +struct SPIRV_Cross_Output { + float4 SV_Target : SV_Target0; +}; + +float dp2_f32(float2 a, float2 b) { + precise float _128 = a.x * b.x; + return mad(a.y, b.y, _128); +} + +float dp3_f32(float3 a, float3 b) { + precise float _113 = a.x * b.x; + return mad(a.z, b.z, mad(a.y, b.y, _113)); +} + +void frag_main() { + float2 _142 = float2(TEXCOORD.x, TEXCOORD.y); + float4 _145 = T1.Sample(S1, _142); + + float _146 = _145.x; + float _147 = _145.y; + float _148 = _145.z; + + float _221; + float _222; + float _223; + if (CB0_m[50u].w != 0u) { + float2 _174 = float2(TEXCOORD.x - asfloat(CB0_m[49u].x), TEXCOORD.y - asfloat(CB0_m[49u].y)); + float2 _188 = float2(dp2_f32(float2(asfloat(CB0_m[51u].x), asfloat(CB0_m[51u].y)), _174) * asfloat(CB0_m[49u].z), dp2_f32(float2(asfloat(CB0_m[51u].z), asfloat(CB0_m[51u].w)), _174) * asfloat(CB0_m[49u].w)); + float _206 = T0.Sample(S0, clamp((dp2_f32(_188, _188) - asfloat(CB0_m[52u].x)) * asfloat(CB0_m[52u].w), 0.0f, 1.0f)).w * asfloat(CB0_m[50u].w); + _221 = mad(_206, asfloat(CB0_m[50u].z) - _148, _148); + _222 = mad(_206, asfloat(CB0_m[50u].y) - _147, _147); + _223 = mad(_206, asfloat(CB0_m[50u].x) - _146, _146); + } else { + _221 = _148; + _222 = _147; + _223 = _146; + } + float _420; + float _421; + float _422; + if (CB0_m[19u].x != 0u) { + float _231 = asfloat(CB0_m[17u].x); + float _232 = _231 * 0.070000000298023223876953125f; + float _233 = _231 * 0.10999999940395355224609375f; + float _234 = _231 * 0.12999999523162841796875f; + float _235 = _231 * 0.17000000178813934326171875f; + float _238 = asfloat(CB0_m[17u].w); + float _239 = TEXCOORD.x * _238; + float _240 = TEXCOORD.y * _238; + float _269 = _231 * 0.189999997615814208984375f; + float _270 = _231 * 0.23000000417232513427734375f; + float _271 = _231 * 0.2899999916553497314453125f; + float _272 = _231 * 0.310000002384185791015625f; + float _312 = clamp(mad((((frac(sin(dp2_f32(float2(_239 + _269, _240 + _269), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f) + (((frac(sin(dp2_f32(float2(_232 + _239, _240 + _232), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f) + frac(sin(dp2_f32(float2(_233 + _239, _240 + _233), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f)) + frac(sin(dp2_f32(float2(_234 + _239, _240 + _234), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f)) + frac(sin(dp2_f32(float2(_235 + _239, _240 + _235), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f))) + frac(sin(dp2_f32(float2(_239 + _270, _240 + _270), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f)) + frac(sin(dp2_f32(float2(_239 + _271, _240 + _271), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f)) + frac(sin(dp2_f32(float2(_239 + _272, _240 + _272), float2(12.98980045318603515625f, 78.233001708984375f))) * 43758.546875f), 0.125f, asfloat(CB0_m[17u].z)), 0.0f, 1.0f); + float _314 = dp3_f32(float3(_223, _222, _221), float3(0.2125999927520751953125f, 0.715200006961822509765625f, 0.072200000286102294921875f)); + float _322 = (CB0_m[18u].y != 0u) ? mad(_312 * (_314 * (_314 * _314)), -0.5f, _312) : _312; + float _326 = _322 - 0.5f; + float _329 = asfloat(CB0_m[18u].x); + bool _339 = _322 < 0.5f; + float _340 = _322 + _322; + float _341 = _340 * _223; + float _342 = _340 * _222; + float _343 = _340 * _221; + float _347 = mad(_322, -2.0f, 1.0f); + float _357 = 1.0f - _322; + float _361 = mad(_322, 2.0f, -1.0f); + float _383 = _357 + _357; + bool _404 = CB0_m[19u].w != 0u; + bool _410 = CB0_m[19u].z != 0u; + bool _416 = CB0_m[18u].w != 0u; + + // _404 - SDR = false; + // _410 - SDR = false; + // _416 - SDR = true; + +#if 1 + _420 = _416 ? (_410 ? mad(_329, (_339 ? (_341 + ((_223 * _223) * _347)) : ((sqrt(_223) * _361) + ((_223 + _223) * _357))) - _223, _223) : (_404 ? mad(_329, ((_223 < 0.5f) ? _341 : mad(-_383, 1.0f - _223, 1.0f)) - _223, _223) : clamp(max(mad(_326, _329, _223), _223 * 0.02500000037252902984619140625f), 0.0f, 1.0f))) : _312; + _421 = _416 ? (_410 ? mad(_329, (_339 ? ((_347 * (_222 * _222)) + _342) : ((_357 * (_222 + _222)) + (_361 * sqrt(_222)))) - _222, _222) : (_404 ? mad(_329, ((_222 < 0.5f) ? _342 : mad(-_383, 1.0f - _222, 1.0f)) - _222, _222) : clamp(max(mad(_326, _329, _222), _222 * 0.02500000037252902984619140625f), 0.0f, 1.0f))) : _312; + _422 = _416 ? (_410 ? mad(_329, (_339 ? ((_347 * (_221 * _221)) + _343) : ((_357 * (_221 + _221)) + (_361 * sqrt(_221)))) - _221, _221) : (_404 ? mad(_329, ((_221 < 0.5f) ? _343 : mad(-_383, 1.0f - _221, 1.0f)) - _221, _221) : clamp(max(mad(_326, _329, _221), _221 * 0.02500000037252902984619140625f), 0.0f, 1.0f))) : _312; +#else + _420 = _416 ? (_410 ? mad(_329, (_339 ? (_341 + ((_223 * _223) * _347)) : ((sqrt(_223) * _361) + ((_223 + _223) * _357))) - _223, _223) : (_404 ? mad(_329, ((_223 < 0.5f) ? _341 : mad(-_383, 1.0f - _223, 1.0f)) - _223, _223) : max(mad(_326, _329, _223), _223 * 0.02500000037252902984619140625f))) : _312; + _421 = _416 ? (_410 ? mad(_329, (_339 ? ((_347 * (_222 * _222)) + _342) : ((_357 * (_222 + _222)) + (_361 * sqrt(_222)))) - _222, _222) : (_404 ? mad(_329, ((_222 < 0.5f) ? _342 : mad(-_383, 1.0f - _222, 1.0f)) - _222, _222) : max(mad(_326, _329, _222), _222 * 0.02500000037252902984619140625f))) : _312; + _422 = _416 ? (_410 ? mad(_329, (_339 ? ((_347 * (_221 * _221)) + _343) : ((_357 * (_221 + _221)) + (_361 * sqrt(_221)))) - _221, _221) : (_404 ? mad(_329, ((_221 < 0.5f) ? _343 : mad(-_383, 1.0f - _221, 1.0f)) - _221, _221) : max(mad(_326, _329, _221), _221 * 0.02500000037252902984619140625f))) : _312; +#endif + + } else { + _420 = _223; + _421 = _222; + _422 = _221; + } + + float _425 = max(max(max(_421, _422), _420), 9.9999997473787516355514526367188e-05f); + float _441 = (CB1_m0.w != 0u) ? (((_425 > CB1_m1.w) ? mad(CB1_m2.x, _425, CB1_m2.y) : _425) / _425) : 1.0f; + float _442 = _422 * _441; + float _447 = floor(_442 * 14.99989986419677734375f); + float _449 = mad(_442, 15.0f, -_447); + float _451 = ((_420 * _441) * 0.05859375f) + (_447 * 0.0625f); + float _453 = mad(_421 * _441, 0.9375f, 0.03125f); + float4 _459 = T3.Sample(S0, float2(_451 + 0.001953125f, _453)); + float _460 = _459.x; + float _461 = _459.y; + float _462 = _459.z; + float4 _465 = T3.Sample(S0, float2(_451 + 0.064453125f, _453)); + float _472 = mad(_449, _465.x - _460, _460); + float _473 = mad(_465.y - _461, _449, _461); + float _474 = mad(_465.z - _462, _449, _462); + float _525; + float _526; + float _527; + if (int(T5.Load(0)) > 0) { + float _489 = dp3_f32(float3(T4.Sample(S0, _142).xyz), float3(0.2125999927520751953125f, 0.715200006961822509765625f, 0.072200000286102294921875f)); + float _492 = floor(_474 * 14.99989986419677734375f); + float _494 = mad(_474, 15.0f, -_492); + float _496 = (_472 * 0.05859375f) + (_492 * 0.0625f); + float _498 = mad(_473, 0.9375f, 0.03125f); + float4 _503 = T2.Sample(S0, float2(_496 + 0.001953125f, _498)); + float _504 = _503.x; + float _505 = _503.y; + float _506 = _503.z; + float4 _509 = T2.Sample(S0, float2(_496 + 0.064453125f, _498)); + _525 = mad(mad(_509.z - _506, _494, _506) - _474, _489, _474); + _526 = mad(mad(_509.y - _505, _494, _505) - _473, _489, _473); + _527 = mad(_489, mad(_494, _509.x - _504, _504) - _472, _472); + } else { + _525 = _474; + _526 = _473; + _527 = _472; + } + SV_Target.x = _527 / _441; + SV_Target.y = _526 / _441; + SV_Target.z = _525 / _441; + + SV_Target.w = _145.w; +#if 1 + SV_Target.rgb = ScaleScene(SV_Target.rgb); +#endif +} + +SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { + TEXCOORD = stage_input.TEXCOORD; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.SV_Target = SV_Target; + return stage_output; +} diff --git a/src/games/rdr2/output/0x1096351C.ps_5_1.hlslx b/src/games/rdr2/output/0x1096351C.ps_5_1.hlslx new file mode 100644 index 0000000000..a812a2aed7 --- /dev/null +++ b/src/games/rdr2/output/0x1096351C.ps_5_1.hlslx @@ -0,0 +1,107 @@ +struct anon_m { + float4 _m0; + uint4 _m1; + uint4 _m2; + uint4 _m3; + uint4 _m4; + uint3 _m5; +}; + +cbuffer CB0_buf : register(b0, space0) { + uint4 CB0_m0 : packoffset(c0); + uint4 CB0_m1 : packoffset(c1); + uint4 CB0_m2 : packoffset(c2); + uint4 CB0_m3 : packoffset(c3); + uint4 CB0_m4 : packoffset(c4); + uint4 CB0_m5 : packoffset(c5); + uint4 CB0_m6 : packoffset(c6); + float4 CB0_m7 : packoffset(c7); + float4 CB0_m8 : packoffset(c8); + float CB0_m9 : packoffset(c9); + uint CB0_m10 : packoffset(c9.y); + uint CB0_m11 : packoffset(c9.z); + uint CB0_m12 : packoffset(c9.w); + uint4 CB0_m13 : packoffset(c10); +}; + +cbuffer CB1_buf : register(b1, space0) { + float4 CB1_m0 : packoffset(c0); + uint4 CB1_m1 : packoffset(c1); + uint4 CB1_m2 : packoffset(c2); + float4 CB1_m3 : packoffset(c3); +}; + +ByteAddressBuffer T0 : register(t4, space0); +SamplerState S0 : register(s2, space0); +SamplerState S1 : register(s3, space0); +Texture2D T1 : register(t5, space0); +Texture3D T2 : register(t6, space0); + +static float2 TEXCOORD; +static float4 SV_Target; + +struct SPIRV_Cross_Input { + float2 TEXCOORD : TEXCOORD1; +}; + +struct SPIRV_Cross_Output { + float4 SV_Target : SV_Target0; +}; + +float dp3_f32(float3 a, float3 b) { + precise float _81 = a.x * b.x; + return mad(a.z, b.z, mad(a.y, b.y, _81)); +} + +void frag_main() { + float4 _102 = T1.Sample(S1, float2(TEXCOORD.x, TEXCOORD.y)); + float _121 = mad(_102.x, CB0_m8.x, CB0_m7.x); + float _122 = mad(_102.y, CB0_m8.y, CB0_m7.y); + float _123 = mad(_102.z, CB0_m8.z, CB0_m7.z); + float _124 = mad(_102.w, CB0_m8.w, CB0_m7.w); + float _141; + float _142; + float _143; + if (CB0_m13.x != 0u) { + float4 _137 = T2.SampleLevel(S0, float3(_121, _122, _123), 0.0f); + _141 = _137.z; + _142 = _137.y; + _143 = _137.x; + } else { + _141 = _123; + _142 = _122; + _143 = _121; + } + float _195; + float _196; + float _197; + if (CB0_m10 != 0u) { + float3 _149 = float3(_143, _142, _141); + float _168 = exp2(log2(abs((dp3_f32(float3(0.6274039745330810546875f, 0.329281985759735107421875f, 0.043313600122928619384765625f), _149) * CB1_m0.x) / CB1_m3.w)) * 0.1593017578125f); + float _178 = exp2(log2(abs((dp3_f32(float3(0.06909699738025665283203125f, 0.919539988040924072265625f, 0.0113612003624439239501953125f), _149) * CB1_m0.x) / CB1_m3.w)) * 0.1593017578125f); + float _188 = exp2(log2(abs((dp3_f32(float3(0.01639159955084323883056640625f, 0.0880132019519805908203125f, 0.895595014095306396484375f), _149) * CB1_m0.x) / CB1_m3.w)) * 0.1593017578125f); + _195 = exp2(log2(mad(_188, 18.8515625f, 0.8359375f) / mad(_188, 18.6875f, 1.0f)) * 78.84375f); + _196 = exp2(log2(mad(_178, 18.8515625f, 0.8359375f) / mad(_178, 18.6875f, 1.0f)) * 78.84375f); + _197 = exp2(log2(mad(_168, 18.8515625f, 0.8359375f) / mad(_168, 18.6875f, 1.0f)) * 78.84375f); + } else { + _195 = _141; + _196 = _142; + _197 = _143; + } + bool _200 = CB0_m9 == 0.0f; + float _211 = _124 * asfloat(T0.Load(12)); + SV_Target.z = (asfloat(T0.Load(12)) != 1.0f) ? (_211 * _211) : (_200 ? _195 : (_124 * _195)); + float _219 = _124 * asfloat(T0.Load(0)); + float _225 = (CB0_m11 != 0u) ? (_219 * asfloat(CB0_m11)) : _219; + SV_Target.w = clamp((CB0_m13.y != 0u) ? ((CB0_m12 != 0u) ? ((cos(_225 * 3.1415927410125732421875f) - 1.0f) * (-0.5f)) : _225) : _219, 0.0f, 1.0f); + SV_Target.x = _200 ? _197 : (_124 * _197); + SV_Target.y = _200 ? _196 : (_124 * _196); +} + +SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { + TEXCOORD = stage_input.TEXCOORD; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.SV_Target = SV_Target; + return stage_output; +} diff --git a/src/games/rdr2/output/0x157288EC.ps_5_1.hlslx b/src/games/rdr2/output/0x157288EC.ps_5_1.hlslx new file mode 100644 index 0000000000..86d37df212 --- /dev/null +++ b/src/games/rdr2/output/0x157288EC.ps_5_1.hlslx @@ -0,0 +1,110 @@ +struct anon_m { + float4 _m0; + uint4 _m1; + uint4 _m2; + uint4 _m3; + uint4 _m4; + uint3 _m5; +}; + +cbuffer CB0_buf : register(b0, space0) { + uint4 CB0_m0 : packoffset(c0); + uint4 CB0_m1 : packoffset(c1); + uint4 CB0_m2 : packoffset(c2); + uint4 CB0_m3 : packoffset(c3); + uint4 CB0_m4 : packoffset(c4); + uint4 CB0_m5 : packoffset(c5); + uint4 CB0_m6 : packoffset(c6); + float4 CB0_m7 : packoffset(c7); + float4 CB0_m8 : packoffset(c8); + float CB0_m9 : packoffset(c9); + uint CB0_m10 : packoffset(c9.y); + uint CB0_m11 : packoffset(c9.z); + uint CB0_m12 : packoffset(c9.w); + uint4 CB0_m13 : packoffset(c10); +}; + +cbuffer CB1_buf : register(b1, space0) { + float4 CB1_m0 : packoffset(c0); + uint4 CB1_m1 : packoffset(c1); + uint4 CB1_m2 : packoffset(c2); + float4 CB1_m3 : packoffset(c3); +}; + +ByteAddressBuffer T0 : register(t4, space0); +SamplerState S0 : register(s2, space0); +SamplerState S1 : register(s3, space0); +Texture3D T1 : register(t5, space0); +Texture2D T2 : register(t6, space0); + +static float4 COLOR; +static float2 TEXCOORD; +static float4 SV_Target; + +struct SPIRV_Cross_Input { + float4 COLOR : TEXCOORD1; + float2 TEXCOORD : TEXCOORD2; +}; + +struct SPIRV_Cross_Output { + float4 SV_Target : SV_Target0; +}; + +float dp3_f32(float3 a, float3 b) { + precise float _83 = a.x * b.x; + return mad(a.z, b.z, mad(a.y, b.y, _83)); +} + +void frag_main() { + float _117 = mad(COLOR.x, CB0_m8.x, CB0_m7.x); + float _118 = mad(COLOR.y, CB0_m8.y, CB0_m7.y); + float _119 = mad(COLOR.z, CB0_m8.z, CB0_m7.z); + float4 _130 = T2.Sample(S1, float2(TEXCOORD.x, TEXCOORD.y)); + float _132 = mad(COLOR.w, CB0_m8.w, CB0_m7.w) * _130.x; + float _149; + float _150; + float _151; + if (CB0_m13.x != 0u) { + float4 _145 = T1.SampleLevel(S0, float3(_117, _118, _119), 0.0f); + _149 = _145.z; + _150 = _145.y; + _151 = _145.x; + } else { + _149 = _119; + _150 = _118; + _151 = _117; + } + float _203; + float _204; + float _205; + if (CB0_m10 != 0u) { + float3 _157 = float3(_151, _150, _149); + float _176 = exp2(log2(abs((dp3_f32(float3(0.6274039745330810546875f, 0.329281985759735107421875f, 0.043313600122928619384765625f), _157) * CB1_m0.x) / CB1_m3.w)) * 0.1593017578125f); + float _186 = exp2(log2(abs((dp3_f32(float3(0.06909699738025665283203125f, 0.919539988040924072265625f, 0.0113612003624439239501953125f), _157) * CB1_m0.x) / CB1_m3.w)) * 0.1593017578125f); + float _196 = exp2(log2(abs((dp3_f32(float3(0.01639159955084323883056640625f, 0.0880132019519805908203125f, 0.895595014095306396484375f), _157) * CB1_m0.x) / CB1_m3.w)) * 0.1593017578125f); + _203 = exp2(log2(mad(_196, 18.8515625f, 0.8359375f) / mad(_196, 18.6875f, 1.0f)) * 78.84375f); + _204 = exp2(log2(mad(_186, 18.8515625f, 0.8359375f) / mad(_186, 18.6875f, 1.0f)) * 78.84375f); + _205 = exp2(log2(mad(_176, 18.8515625f, 0.8359375f) / mad(_176, 18.6875f, 1.0f)) * 78.84375f); + } else { + _203 = _149; + _204 = _150; + _205 = _151; + } + bool _208 = CB0_m9 == 0.0f; + float _219 = _132 * asfloat(T0.Load(12)); + SV_Target.z = (asfloat(T0.Load(12)) != 1.0f) ? (_219 * _219) : (_208 ? _203 : (_132 * _203)); + float _227 = _132 * asfloat(T0.Load(0)); + float _233 = (CB0_m11 != 0u) ? (_227 * asfloat(CB0_m11)) : _227; + SV_Target.w = clamp((CB0_m13.y != 0u) ? ((CB0_m12 != 0u) ? ((cos(_233 * 3.1415927410125732421875f) - 1.0f) * (-0.5f)) : _233) : _227, 0.0f, 1.0f); + SV_Target.x = _208 ? _205 : (_132 * _205); + SV_Target.y = _208 ? _204 : (_132 * _204); +} + +SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { + COLOR = stage_input.COLOR; + TEXCOORD = stage_input.TEXCOORD; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.SV_Target = SV_Target; + return stage_output; +} diff --git a/src/games/rdr2/output/0x20C410CB.ps_5_1.hlslx b/src/games/rdr2/output/0x20C410CB.ps_5_1.hlslx new file mode 100644 index 0000000000..498948818e --- /dev/null +++ b/src/games/rdr2/output/0x20C410CB.ps_5_1.hlslx @@ -0,0 +1,110 @@ +struct anon_m { + float4 _m0; + uint4 _m1; + uint4 _m2; + uint4 _m3; + uint4 _m4; + uint3 _m5; +}; + +cbuffer CB0_buf : register(b0, space0) { + uint4 CB0_m0 : packoffset(c0); + uint4 CB0_m1 : packoffset(c1); + uint4 CB0_m2 : packoffset(c2); + uint4 CB0_m3 : packoffset(c3); + uint4 CB0_m4 : packoffset(c4); + uint4 CB0_m5 : packoffset(c5); + uint4 CB0_m6 : packoffset(c6); + float4 CB0_m7 : packoffset(c7); + float4 CB0_m8 : packoffset(c8); + float CB0_m9 : packoffset(c9); + uint CB0_m10 : packoffset(c9.y); + uint CB0_m11 : packoffset(c9.z); + uint CB0_m12 : packoffset(c9.w); + uint4 CB0_m13 : packoffset(c10); +}; + +cbuffer CB1_buf : register(b1, space0) { + float4 CB1_m0 : packoffset(c0); + uint4 CB1_m1 : packoffset(c1); + uint4 CB1_m2 : packoffset(c2); + float4 CB1_m3 : packoffset(c3); +}; + +ByteAddressBuffer T0 : register(t4, space0); +SamplerState S0 : register(s2, space0); +SamplerState S1 : register(s3, space0); +Texture2D T1 : register(t5, space0); +Texture3D T2 : register(t6, space0); + +static float2 TEXCOORD; +static float4 SV_Target; + +struct SPIRV_Cross_Input { + float2 TEXCOORD : TEXCOORD1; +}; + +struct SPIRV_Cross_Output { + float4 SV_Target : SV_Target0; +}; + +float dp3_f32(float3 a, float3 b) { + precise float _81 = a.x * b.x; + return mad(a.z, b.z, mad(a.y, b.y, _81)); +} + +void frag_main() { + float4 _102 = T1.Sample(S1, float2(TEXCOORD.x, TEXCOORD.y)); + float _121 = mad(_102.x, CB0_m8.x, CB0_m7.x); + float _122 = mad(_102.y, CB0_m8.y, CB0_m7.y); + float _123 = mad(_102.z, CB0_m8.z, CB0_m7.z); + float _124 = mad(_102.w, CB0_m8.w, CB0_m7.w); + if (_124 < 1.0f) { + discard; + } + float _144; + float _145; + float _146; + if (CB0_m13.x != 0u) { + float4 _140 = T2.SampleLevel(S0, float3(_121, _122, _123), 0.0f); + _144 = _140.z; + _145 = _140.y; + _146 = _140.x; + } else { + _144 = _123; + _145 = _122; + _146 = _121; + } + float _198; + float _199; + float _200; + if (CB0_m10 != 0u) { + float3 _152 = float3(_146, _145, _144); + float _171 = exp2(log2(abs((dp3_f32(float3(0.6274039745330810546875f, 0.329281985759735107421875f, 0.043313600122928619384765625f), _152) * CB1_m0.x) / CB1_m3.w)) * 0.1593017578125f); + float _181 = exp2(log2(abs((dp3_f32(float3(0.06909699738025665283203125f, 0.919539988040924072265625f, 0.0113612003624439239501953125f), _152) * CB1_m0.x) / CB1_m3.w)) * 0.1593017578125f); + float _191 = exp2(log2(abs((dp3_f32(float3(0.01639159955084323883056640625f, 0.0880132019519805908203125f, 0.895595014095306396484375f), _152) * CB1_m0.x) / CB1_m3.w)) * 0.1593017578125f); + _198 = exp2(log2(mad(_191, 18.8515625f, 0.8359375f) / mad(_191, 18.6875f, 1.0f)) * 78.84375f); + _199 = exp2(log2(mad(_181, 18.8515625f, 0.8359375f) / mad(_181, 18.6875f, 1.0f)) * 78.84375f); + _200 = exp2(log2(mad(_171, 18.8515625f, 0.8359375f) / mad(_171, 18.6875f, 1.0f)) * 78.84375f); + } else { + _198 = _144; + _199 = _145; + _200 = _146; + } + bool _203 = CB0_m9 == 0.0f; + float _214 = _124 * asfloat(T0.Load(12)); + SV_Target.z = (asfloat(T0.Load(12)) != 1.0f) ? (_214 * _214) : (_203 ? _198 : (_124 * _198)); + float _222 = _124 * asfloat(T0.Load(0)); + float _228 = (CB0_m11 != 0u) ? (_222 * asfloat(CB0_m11)) : _222; + SV_Target.w = clamp((CB0_m13.y != 0u) ? ((CB0_m12 != 0u) ? ((cos(_228 * 3.1415927410125732421875f) - 1.0f) * (-0.5f)) : _228) : _222, 0.0f, 1.0f); + SV_Target.x = _203 ? _200 : (_124 * _200); + SV_Target.y = _203 ? _199 : (_124 * _199); +} + +SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { + TEXCOORD = stage_input.TEXCOORD; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.SV_Target = SV_Target; + return stage_output; +} diff --git a/src/games/rdr2/output/0x737584AF.ps_5_1.hlslx b/src/games/rdr2/output/0x737584AF.ps_5_1.hlslx new file mode 100644 index 0000000000..3972466c8b --- /dev/null +++ b/src/games/rdr2/output/0x737584AF.ps_5_1.hlslx @@ -0,0 +1,586 @@ +struct anon_m { + float4 _m0; + uint4 _m1; + uint4 _m2; + uint4 _m3; + uint4 _m4; + uint3 _m5; +}; + +cbuffer CB0_buf : register(b0, space0) { + uint4 CB0_m0 : packoffset(c0); + uint4 CB0_m1 : packoffset(c1); + uint4 CB0_m2 : packoffset(c2); + uint4 CB0_m3 : packoffset(c3); + uint4 CB0_m4 : packoffset(c4); + uint4 CB0_m5 : packoffset(c5); + uint4 CB0_m6 : packoffset(c6); + float4 CB0_m7 : packoffset(c7); + float4 CB0_m8 : packoffset(c8); + float CB0_m9 : packoffset(c9); + uint CB0_m10 : packoffset(c9.y); + uint CB0_m11 : packoffset(c9.z); + uint CB0_m12 : packoffset(c9.w); + uint4 CB0_m13 : packoffset(c10); +}; + +cbuffer CB1_buf : register(b1, space0) { + float4 CB1_m0 : packoffset(c0); + uint4 CB1_m1 : packoffset(c1); + uint4 CB1_m2 : packoffset(c2); + float4 CB1_m3 : packoffset(c3); +}; + +ByteAddressBuffer T0 : register(t4, space0); +SamplerState S0 : register(s2, space0); +SamplerState S1 : register(s3, space0); +Texture2D T1 : register(t5, space0); +Texture3D T2 : register(t6, space0); + +static float4 COLOR1; +static float4 TEXCOORD; +static float4 SV_Target; + +struct SPIRV_Cross_Input { + float4 COLOR1 : TEXCOORD2; + float4 TEXCOORD : TEXCOORD3; +}; + +struct SPIRV_Cross_Output { + float4 SV_Target : SV_Target0; +}; + +float dp3_f32(float3 a, float3 b) { + precise float _101 = a.x * b.x; + return mad(a.z, b.z, mad(a.y, b.y, _101)); +} + +void frag_main() { + float2 _120 = float2(TEXCOORD.x, TEXCOORD.y); + float4 _123 = T1.SampleLevel(S1, _120, 0.0f); + float _125 = _123.y; + float4 _128 = T1.GatherGreen(S1, _120); + float _129 = _128.x; + float _130 = _128.y; + float _131 = _128.z; + float4 _133 = T1.GatherGreen(S1, _120, int2(-1, -1)); + float _134 = _133.x; + float _135 = _133.z; + float _136 = _133.w; + float _143 = max(max(_131, max(_125, _129)), max(_134, _135)); + float _146 = _143 - min(min(_131, min(_125, _129)), min(_134, _135)); + float _706; + float _707; + float _708; + if (_146 >= max(_143 * 0.063000001013278961181640625f, 0.0f)) { + float4 _153 = T1.SampleLevel(S1, _120, 0.0f, int2(1, -1)); + float _154 = _153.y; + float4 _156 = T1.SampleLevel(S1, _120, 0.0f, int2(-1, 1)); + float _157 = _156.y; + float _158 = _129 + _135; + float _159 = _131 + _134; + float _164 = _130 + _154; + float _168 = _136 + _157; + bool _183 = (mad(abs(mad(_125, -2.0f, _158)), 2.0f, abs(mad(_131, -2.0f, _164))) + abs(mad(_134, -2.0f, _168))) >= (mad(abs(mad(_125, -2.0f, _159)), 2.0f, abs(mad(_135, -2.0f, _136 + _154))) + abs(mad(_129, -2.0f, _130 + _157))); + float _185 = _183 ? _135 : _134; + float _186 = _183 ? _129 : _131; + float _191 = _183 ? TEXCOORD.w : TEXCOORD.z; + float _198 = abs(_185 - _125); + float _199 = abs(_186 - _125); + bool _200 = _198 >= _199; + float _203 = _200 ? (-_191) : _191; + float _206 = clamp((1.0f / _146) * abs(mad(mad(_159 + _158, 2.0f, _164 + _168), 0.083333335816860198974609375f, -_125)), 0.0f, 1.0f); + float _207 = _183 ? 0.0f : TEXCOORD.w; + float _210 = _183 ? TEXCOORD.x : mad(_203, 0.5f, TEXCOORD.x); + float _211 = _183 ? mad(_203, 0.5f, TEXCOORD.y) : TEXCOORD.y; + float _212 = _183 ? TEXCOORD.z : 0.0f; + float _213 = _210 - _212; + float _214 = _211 - _207; + float _215 = _212 + _210; + float _216 = _207 + _211; + float _227 = _200 ? (_125 + _185) : (_125 + _186); + float _228 = max(_198, _199) * 0.25f; + float _230 = mad(_206, -2.0f, 3.0f) * (_206 * _206); + bool _231 = mad(_227, -0.5f, _125) < 0.0f; + float _232 = mad(_227, -0.5f, T1.SampleLevel(S1, float2(_213, _214), 0.0f).y); + float _233 = mad(_227, -0.5f, T1.SampleLevel(S1, float2(_215, _216), 0.0f).y); + bool _236 = abs(_232) >= _228; + bool _237 = _228 <= abs(_233); + float _241 = _236 ? _213 : (_213 - _212); + float _242 = _236 ? _214 : (_214 - _207); + float _247 = _237 ? _215 : (_212 + _215); + float _249 = _237 ? _216 : (_216 + _207); + float _660; + float _661; + float _662; + float _663; + float _664; + float _665; + if (!(_236 && _237)) { + float _258; + if (!_236) { + _258 = T1.SampleLevel(S1, float2(_241, _242), 0.0f).y; + } else { + _258 = _232; + } + float _265; + if (!_237) { + _265 = T1.SampleLevel(S1, float2(_247, _249), 0.0f).y; + } else { + _265 = _233; + } + float _267 = _236 ? _258 : mad(_227, -0.5f, _258); + float _269 = _237 ? _265 : mad(_227, -0.5f, _265); + bool _272 = _228 <= abs(_267); + bool _273 = _228 <= abs(_269); + float _276 = _272 ? _241 : (_241 - _212); + float _278 = _272 ? _242 : (_242 - _207); + float _283 = _273 ? _247 : (_212 + _247); + float _285 = _273 ? _249 : (_249 + _207); + float _654; + float _655; + float _656; + float _657; + float _658; + float _659; + if (!(_273 && _272)) { + float _294; + if (!_272) { + _294 = T1.SampleLevel(S1, float2(_276, _278), 0.0f).y; + } else { + _294 = _267; + } + float _301; + if (!_273) { + _301 = T1.SampleLevel(S1, float2(_283, _285), 0.0f).y; + } else { + _301 = _269; + } + float _303 = _272 ? _294 : mad(_227, -0.5f, _294); + float _305 = _273 ? _301 : mad(_227, -0.5f, _301); + bool _308 = _228 <= abs(_303); + bool _309 = _228 <= abs(_305); + float _312 = _308 ? _276 : (_276 - _212); + float _314 = _308 ? _278 : (_278 - _207); + float _319 = _309 ? _283 : (_283 + _212); + float _321 = _309 ? _285 : (_285 + _207); + float _648; + float _649; + float _650; + float _651; + float _652; + float _653; + if (!(_308 && _309)) { + float _330; + if (!_308) { + _330 = T1.SampleLevel(S1, float2(_312, _314), 0.0f).y; + } else { + _330 = _303; + } + float _337; + if (!_309) { + _337 = T1.SampleLevel(S1, float2(_319, _321), 0.0f).y; + } else { + _337 = _305; + } + float _339 = _308 ? _330 : mad(_227, -0.5f, _330); + float _341 = _309 ? _337 : mad(_227, -0.5f, _337); + bool _344 = _228 <= abs(_339); + bool _345 = _228 <= abs(_341); + float _348 = _344 ? _312 : (_312 - _212); + float _350 = _344 ? _314 : (_314 - _207); + float _355 = _345 ? _319 : (_319 + _212); + float _357 = _345 ? _321 : (_321 + _207); + float _642; + float _643; + float _644; + float _645; + float _646; + float _647; + if (!(_345 && _344)) { + float _366; + if (!_344) { + _366 = T1.SampleLevel(S1, float2(_348, _350), 0.0f).y; + } else { + _366 = _339; + } + float _373; + if (!_345) { + _373 = T1.SampleLevel(S1, float2(_355, _357), 0.0f).y; + } else { + _373 = _341; + } + float _375 = _344 ? _366 : mad(_227, -0.5f, _366); + float _377 = _345 ? _373 : mad(_227, -0.5f, _373); + bool _380 = _228 <= abs(_375); + bool _381 = _228 <= abs(_377); + float _384 = _380 ? _348 : mad(_212, -1.5f, _348); + float _386 = _380 ? _350 : mad(_207, -1.5f, _350); + float _391 = _381 ? _355 : mad(_212, 1.5f, _355); + float _393 = _381 ? _357 : mad(_207, 1.5f, _357); + float _636; + float _637; + float _638; + float _639; + float _640; + float _641; + if (!(_380 && _381)) { + float _402; + if (!_380) { + _402 = T1.SampleLevel(S1, float2(_384, _386), 0.0f).y; + } else { + _402 = _375; + } + float _409; + if (!_381) { + _409 = T1.SampleLevel(S1, float2(_391, _393), 0.0f).y; + } else { + _409 = _377; + } + float _411 = _380 ? _402 : mad(_227, -0.5f, _402); + float _413 = _381 ? _409 : mad(_227, -0.5f, _409); + bool _416 = _228 <= abs(_411); + bool _417 = _228 <= abs(_413); + float _420 = _416 ? _384 : mad(_212, -2.0f, _384); + float _422 = _416 ? _386 : mad(_207, -2.0f, _386); + float _427 = _417 ? _391 : mad(_212, 2.0f, _391); + float _429 = _417 ? _393 : mad(_207, 2.0f, _393); + float _630; + float _631; + float _632; + float _633; + float _634; + float _635; + if (!(_417 && _416)) { + float _438; + if (!_416) { + _438 = T1.SampleLevel(S1, float2(_420, _422), 0.0f).y; + } else { + _438 = _411; + } + float _445; + if (!_417) { + _445 = T1.SampleLevel(S1, float2(_427, _429), 0.0f).y; + } else { + _445 = _413; + } + float _447 = _416 ? _438 : mad(_227, -0.5f, _438); + float _449 = _417 ? _445 : mad(_227, -0.5f, _445); + bool _452 = _228 <= abs(_447); + bool _453 = _228 <= abs(_449); + float _456 = _452 ? _420 : mad(_212, -2.0f, _420); + float _458 = _452 ? _422 : mad(_207, -2.0f, _422); + float _463 = _453 ? _427 : mad(_212, 2.0f, _427); + float _465 = _453 ? _429 : mad(_207, 2.0f, _429); + float _624; + float _625; + float _626; + float _627; + float _628; + float _629; + if (!(_452 && _453)) { + float _474; + if (!_452) { + _474 = T1.SampleLevel(S1, float2(_456, _458), 0.0f).y; + } else { + _474 = _447; + } + float _481; + if (!_453) { + _481 = T1.SampleLevel(S1, float2(_463, _465), 0.0f).y; + } else { + _481 = _449; + } + float _483 = _452 ? _474 : mad(_227, -0.5f, _474); + float _485 = _453 ? _481 : mad(_227, -0.5f, _481); + bool _488 = _228 <= abs(_483); + bool _489 = _228 <= abs(_485); + float _492 = _488 ? _456 : mad(_212, -2.0f, _456); + float _494 = _488 ? _458 : mad(_207, -2.0f, _458); + float _499 = _489 ? _463 : mad(_212, 2.0f, _463); + float _501 = _489 ? _465 : mad(_207, 2.0f, _465); + float _618; + float _619; + float _620; + float _621; + float _622; + float _623; + if (!(_489 && _488)) { + float _510; + if (!_488) { + _510 = T1.SampleLevel(S1, float2(_492, _494), 0.0f).y; + } else { + _510 = _483; + } + float _517; + if (!_489) { + _517 = T1.SampleLevel(S1, float2(_499, _501), 0.0f).y; + } else { + _517 = _485; + } + float _519 = _488 ? _510 : mad(_227, -0.5f, _510); + float _521 = _489 ? _517 : mad(_227, -0.5f, _517); + bool _524 = _228 <= abs(_519); + bool _525 = _228 <= abs(_521); + float _528 = _524 ? _492 : mad(_212, -2.0f, _492); + float _530 = _524 ? _494 : mad(_207, -2.0f, _494); + float _535 = _525 ? _499 : mad(_212, 2.0f, _499); + float _537 = _525 ? _501 : mad(_207, 2.0f, _501); + float _612; + float _613; + float _614; + float _615; + float _616; + float _617; + if (!(_525 && _524)) { + float _546; + if (!_524) { + _546 = T1.SampleLevel(S1, float2(_528, _530), 0.0f).y; + } else { + _546 = _519; + } + float _553; + if (!_525) { + _553 = T1.SampleLevel(S1, float2(_535, _537), 0.0f).y; + } else { + _553 = _521; + } + float _555 = _524 ? _546 : mad(_227, -0.5f, _546); + float _557 = _525 ? _553 : mad(_227, -0.5f, _553); + bool _560 = _228 <= abs(_555); + bool _561 = _228 <= abs(_557); + float _564 = _560 ? _528 : mad(_212, -4.0f, _528); + float _566 = _560 ? _530 : mad(_207, -4.0f, _530); + float _571 = _561 ? _535 : mad(_212, 4.0f, _535); + float _573 = _561 ? _537 : mad(_207, 4.0f, _537); + float _606; + float _607; + float _608; + float _609; + float _610; + float _611; + if (!(_561 && _560)) { + float _582; + if (!_560) { + _582 = T1.SampleLevel(S1, float2(_564, _566), 0.0f).y; + } else { + _582 = _555; + } + float _589; + if (!_561) { + _589 = T1.SampleLevel(S1, float2(_571, _573), 0.0f).y; + } else { + _589 = _557; + } + float _591 = _560 ? _582 : mad(_227, -0.5f, _582); + float _593 = _561 ? _589 : mad(_227, -0.5f, _589); + bool _596 = _228 <= abs(_591); + bool _597 = _228 <= abs(_593); + _606 = _593; + _607 = _591; + _608 = _597 ? _573 : mad(_207, 8.0f, _573); + _609 = _597 ? _571 : mad(_212, 8.0f, _571); + _610 = _596 ? _566 : mad(_207, -8.0f, _566); + _611 = _596 ? _564 : mad(_212, -8.0f, _564); + } else { + _606 = _557; + _607 = _555; + _608 = _573; + _609 = _571; + _610 = _566; + _611 = _564; + } + _612 = _606; + _613 = _607; + _614 = _608; + _615 = _609; + _616 = _610; + _617 = _611; + } else { + _612 = _521; + _613 = _519; + _614 = _537; + _615 = _535; + _616 = _530; + _617 = _528; + } + _618 = _612; + _619 = _613; + _620 = _614; + _621 = _615; + _622 = _616; + _623 = _617; + } else { + _618 = _485; + _619 = _483; + _620 = _501; + _621 = _499; + _622 = _494; + _623 = _492; + } + _624 = _618; + _625 = _619; + _626 = _620; + _627 = _621; + _628 = _622; + _629 = _623; + } else { + _624 = _449; + _625 = _447; + _626 = _465; + _627 = _463; + _628 = _458; + _629 = _456; + } + _630 = _624; + _631 = _625; + _632 = _626; + _633 = _627; + _634 = _628; + _635 = _629; + } else { + _630 = _413; + _631 = _411; + _632 = _429; + _633 = _427; + _634 = _422; + _635 = _420; + } + _636 = _630; + _637 = _631; + _638 = _632; + _639 = _633; + _640 = _634; + _641 = _635; + } else { + _636 = _377; + _637 = _375; + _638 = _393; + _639 = _391; + _640 = _386; + _641 = _384; + } + _642 = _636; + _643 = _637; + _644 = _638; + _645 = _639; + _646 = _640; + _647 = _641; + } else { + _642 = _341; + _643 = _339; + _644 = _357; + _645 = _355; + _646 = _350; + _647 = _348; + } + _648 = _642; + _649 = _643; + _650 = _644; + _651 = _645; + _652 = _646; + _653 = _647; + } else { + _648 = _305; + _649 = _303; + _650 = _321; + _651 = _319; + _652 = _314; + _653 = _312; + } + _654 = _648; + _655 = _649; + _656 = _650; + _657 = _651; + _658 = _652; + _659 = _653; + } else { + _654 = _269; + _655 = _267; + _656 = _285; + _657 = _283; + _658 = _278; + _659 = _276; + } + _660 = _654; + _661 = _655; + _662 = _656; + _663 = _657; + _664 = _658; + _665 = _659; + } else { + _660 = _233; + _661 = _232; + _662 = _249; + _663 = _247; + _664 = _242; + _665 = _241; + } + float _668 = _183 ? (TEXCOORD.x - _665) : (TEXCOORD.y - _664); + float _671 = _183 ? (_663 - TEXCOORD.x) : (_662 - TEXCOORD.y); + bool _672 = _661 < 0.0f; + bool _673 = _660 < 0.0f; + bool _675 = !_231; + bool _685 = _668 < _671; + float _695 = max(_230 * _230, ((((_673 && _675) || (_231 && (!_673))) && (!_685)) || (((_672 && _675) || (_231 && (!_672))) && _685)) ? mad(-(1.0f / (_668 + _671)), min(_668, _671), 0.5f) : 0.0f); + float4 _702 = T1.SampleLevel(S1, float2(_183 ? TEXCOORD.x : mad(_203, _695, TEXCOORD.x), _183 ? mad(_203, _695, TEXCOORD.y) : TEXCOORD.y), 0.0f); + _706 = _702.z; + _707 = _702.y; + _708 = _702.x; + } else { + _706 = _123.z; + _707 = _125; + _708 = _123.x; + } + float4 _710 = T1.Sample(S1, _120); + float _726 = mad(_708, CB0_m8.x, CB0_m7.x); + float _727 = mad(CB0_m8.y, _707, CB0_m7.y); + float _728 = mad(_706, CB0_m8.z, CB0_m7.z); + float _732 = mad(_710.w, CB0_m8.w, CB0_m7.w) * COLOR1.w; + float _748; + float _749; + float _750; + if (CB0_m13.x != 0u) { + float4 _744 = T2.SampleLevel(S0, float3(_726, _727, _728), 0.0f); + _748 = _744.z; + _749 = _744.y; + _750 = _744.x; + } else { + _748 = _728; + _749 = _727; + _750 = _726; + } + float _802; + float _803; + float _804; + if (CB0_m10 != 0u) { + float3 _756 = float3(_750, _749, _748); + float _775 = exp2(log2(abs((dp3_f32(float3(0.6274039745330810546875f, 0.329281985759735107421875f, 0.043313600122928619384765625f), _756) * CB1_m0.x) / CB1_m3.w)) * 0.1593017578125f); + float _785 = exp2(log2(abs((dp3_f32(float3(0.06909699738025665283203125f, 0.919539988040924072265625f, 0.0113612003624439239501953125f), _756) * CB1_m0.x) / CB1_m3.w)) * 0.1593017578125f); + float _795 = exp2(log2(abs((dp3_f32(float3(0.01639159955084323883056640625f, 0.0880132019519805908203125f, 0.895595014095306396484375f), _756) * CB1_m0.x) / CB1_m3.w)) * 0.1593017578125f); + _802 = exp2(log2(mad(_795, 18.8515625f, 0.8359375f) / mad(_795, 18.6875f, 1.0f)) * 78.84375f); + _803 = exp2(log2(mad(_785, 18.8515625f, 0.8359375f) / mad(_785, 18.6875f, 1.0f)) * 78.84375f); + _804 = exp2(log2(mad(_775, 18.8515625f, 0.8359375f) / mad(_775, 18.6875f, 1.0f)) * 78.84375f); + } else { + _802 = _748; + _803 = _749; + _804 = _750; + } + bool _807 = CB0_m9 == 0.0f; + float _818 = _732 * asfloat(T0.Load(12)); + SV_Target.z = (asfloat(T0.Load(12)) != 1.0f) ? (_818 * _818) : (_807 ? _802 : (_732 * _802)); + float _826 = _732 * asfloat(T0.Load(0)); + float _832 = (CB0_m11 != 0u) ? (_826 * asfloat(CB0_m11)) : _826; + SV_Target.w = clamp((CB0_m13.y != 0u) ? ((CB0_m12 != 0u) ? ((cos(_832 * 3.1415927410125732421875f) - 1.0f) * (-0.5f)) : _832) : _826, 0.0f, 1.0f); + SV_Target.x = _807 ? _804 : (_732 * _804); + SV_Target.y = _807 ? _803 : (_732 * _803); +} + +SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { + COLOR1 = stage_input.COLOR1; + TEXCOORD = stage_input.TEXCOORD; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.SV_Target = SV_Target; + return stage_output; +} diff --git a/src/games/rdr2/output/0x969F0551.cs_5_1.hlslx b/src/games/rdr2/output/0x969F0551.cs_5_1.hlslx new file mode 100644 index 0000000000..711daec168 --- /dev/null +++ b/src/games/rdr2/output/0x969F0551.cs_5_1.hlslx @@ -0,0 +1,67 @@ +cbuffer CB0_buf : register(b0, space0) { + uint4 CB0_m0 : packoffset(c0); + float4 CB0_m1 : packoffset(c1); + float3 CB0_m2 : packoffset(c2); + uint CB0_m3 : packoffset(c2.w); + float3 CB0_m4 : packoffset(c3); + uint CB0_m5 : packoffset(c3.w); + float3 CB0_m6 : packoffset(c4); + uint CB0_m7 : packoffset(c4.w); + uint4 CB0_m8 : packoffset(c5); + uint4 CB0_m9 : packoffset(c6); + uint4 CB0_m10 : packoffset(c7); + uint4 CB0_m11 : packoffset(c8); + uint4 CB0_m12 : packoffset(c9); + uint4 CB0_m13 : packoffset(c10); + uint4 CB0_m14 : packoffset(c11); + uint4 CB0_m15 : packoffset(c12); + uint4 CB0_m16 : packoffset(c13); + uint4 CB0_m17 : packoffset(c14); +}; + +cbuffer CB1_buf : register(b1, space0) { + float4 CB1_m0 : packoffset(c0); + uint4 CB1_m1 : packoffset(c1); + uint4 CB1_m2 : packoffset(c2); + float4 CB1_m3 : packoffset(c3); +}; + +RWTexture3D U0 : register(u2, space0); + +static uint3 gl_WorkGroupID; +static uint3 gl_GlobalInvocationID; +struct SPIRV_Cross_Input { + uint3 gl_WorkGroupID : SV_GroupID; + uint3 gl_GlobalInvocationID : SV_DispatchThreadID; +}; + +float dp3_f32(float3 a, float3 b) { + precise float _64 = a.x * b.x; + return mad(a.z, b.z, mad(a.y, b.y, _64)); +} + +void comp_main() { + float _90 = float(CB0_m17.w - 1u); + float _100 = exp2(log2(float(gl_GlobalInvocationID.x) / _90) * 0.0126833133399486541748046875f); + float _101 = exp2(log2(float(gl_GlobalInvocationID.y) / _90) * 0.0126833133399486541748046875f); + float _102 = exp2(log2(float(gl_WorkGroupID.z) / _90) * 0.0126833133399486541748046875f); + float _133 = (exp2(log2(max(_100 - 0.8359375f, 0.0f) / mad(_100, -18.6875f, 18.8515625f)) * 6.277394771575927734375f) * CB1_m3.w) / CB1_m0.x; + float _134 = (CB1_m3.w * exp2(log2(max(_101 - 0.8359375f, 0.0f) / mad(_101, -18.6875f, 18.8515625f)) * 6.277394771575927734375f)) / CB1_m0.x; + float _135 = (CB1_m3.w * exp2(log2(max(_102 - 0.8359375f, 0.0f) / mad(_102, -18.6875f, 18.8515625f)) * 6.277394771575927734375f)) / CB1_m0.x; + float _138 = max(max(_133, max(_135, _134)), 5.9604644775390625e-08f); + float _145 = log2(_138) * CB0_m1.x; + float _156 = exp2(_145) / mad(exp2(_145 * CB0_m1.y), CB0_m1.z, CB0_m1.w); + float _169 = exp2(log2(_133 / _138) * CB0_m2.x); + float _170 = exp2(log2(_134 / _138) * CB0_m2.y); + float _171 = exp2(log2(_135 / _138) * CB0_m2.z); + float _172 = log2(_156); + float3 _207 = float3(_156 * exp2(log2(mad(exp2(_172 * CB0_m4.x), 1.0f - _169, _169)) * CB0_m6.x), _156 * exp2(log2(mad(1.0f - _170, exp2(_172 * CB0_m4.y), _170)) * CB0_m6.y), _156 * exp2(log2(mad(1.0f - _171, exp2(_172 * CB0_m4.z), _171)) * CB0_m6.z)); + U0[uint3(gl_GlobalInvocationID.x, gl_GlobalInvocationID.y, gl_WorkGroupID.z)] = float4(dp3_f32(float3(1.66049015522003173828125f, -0.587639033794403076171875f, -0.072851590812206268310546875f), _207), dp3_f32(float3(-0.124549962580204010009765625f, 1.13289988040924072265625f, -0.00834796018898487091064453125f), _207), dp3_f32(float3(-0.01815111003816127777099609375f, -0.10057871043682098388671875f, 1.11872971057891845703125f), _207), 1.0f); +} + +[numthreads(32, 32, 1)] +void main(SPIRV_Cross_Input stage_input) { + gl_WorkGroupID = stage_input.gl_WorkGroupID; + gl_GlobalInvocationID = stage_input.gl_GlobalInvocationID; + comp_main(); +} diff --git a/src/games/rdr2/output/0x9DF4FCED.ps_5_1.hlslx b/src/games/rdr2/output/0x9DF4FCED.ps_5_1.hlslx new file mode 100644 index 0000000000..61b1491e3b --- /dev/null +++ b/src/games/rdr2/output/0x9DF4FCED.ps_5_1.hlslx @@ -0,0 +1,111 @@ +struct anon_m { + float4 _m0; + uint4 _m1; + uint4 _m2; + uint4 _m3; + uint4 _m4; + uint3 _m5; +}; + +cbuffer CB0_buf : register(b0, space0) { + uint4 CB0_m0 : packoffset(c0); + uint4 CB0_m1 : packoffset(c1); + uint4 CB0_m2 : packoffset(c2); + uint4 CB0_m3 : packoffset(c3); + uint4 CB0_m4 : packoffset(c4); + uint4 CB0_m5 : packoffset(c5); + uint4 CB0_m6 : packoffset(c6); + float4 CB0_m7 : packoffset(c7); + float4 CB0_m8 : packoffset(c8); + float CB0_m9 : packoffset(c9); + uint CB0_m10 : packoffset(c9.y); + uint CB0_m11 : packoffset(c9.z); + uint CB0_m12 : packoffset(c9.w); + uint4 CB0_m13 : packoffset(c10); +}; + +cbuffer CB1_buf : register(b1, space0) { + float4 CB1_m0 : packoffset(c0); + uint4 CB1_m1 : packoffset(c1); + uint4 CB1_m2 : packoffset(c2); + float4 CB1_m3 : packoffset(c3); +}; + +ByteAddressBuffer T0 : register(t4, space0); +SamplerState S0 : register(s2, space0); +SamplerState S1 : register(s3, space0); +Texture2D T1 : register(t5, space0); +Texture3D T2 : register(t6, space0); + +static float4 COLOR1; +static float2 TEXCOORD; +static float4 SV_Target; + +struct SPIRV_Cross_Input { + float4 COLOR1 : TEXCOORD2; + float2 TEXCOORD : TEXCOORD3; +}; + +struct SPIRV_Cross_Output { + float4 SV_Target : SV_Target0; +}; + +float dp3_f32(float3 a, float3 b) { + precise float _83 = a.x * b.x; + return mad(a.z, b.z, mad(a.y, b.y, _83)); +} + +void frag_main() { + float4 _104 = T1.Sample(S1, float2(TEXCOORD.x, TEXCOORD.y)); + float _105 = _104.x; + float _120 = mad(_105, CB0_m8.x, CB0_m7.x); + float _121 = mad(_105, CB0_m8.y, CB0_m7.y); + float _122 = mad(_105, CB0_m8.z, CB0_m7.z); + float _126 = mad(_105, CB0_m8.w, CB0_m7.w) * COLOR1.w; + float _143; + float _144; + float _145; + if (CB0_m13.x != 0u) { + float4 _139 = T2.SampleLevel(S0, float3(_120, _121, _122), 0.0f); + _143 = _139.z; + _144 = _139.y; + _145 = _139.x; + } else { + _143 = _122; + _144 = _121; + _145 = _120; + } + float _197; + float _198; + float _199; + if (CB0_m10 != 0u) { + float3 _151 = float3(_145, _144, _143); + float _170 = exp2(log2(abs((dp3_f32(float3(0.6274039745330810546875f, 0.329281985759735107421875f, 0.043313600122928619384765625f), _151) * CB1_m0.x) / CB1_m3.w)) * 0.1593017578125f); + float _180 = exp2(log2(abs((dp3_f32(float3(0.06909699738025665283203125f, 0.919539988040924072265625f, 0.0113612003624439239501953125f), _151) * CB1_m0.x) / CB1_m3.w)) * 0.1593017578125f); + float _190 = exp2(log2(abs((dp3_f32(float3(0.01639159955084323883056640625f, 0.0880132019519805908203125f, 0.895595014095306396484375f), _151) * CB1_m0.x) / CB1_m3.w)) * 0.1593017578125f); + _197 = exp2(log2(mad(_190, 18.8515625f, 0.8359375f) / mad(_190, 18.6875f, 1.0f)) * 78.84375f); + _198 = exp2(log2(mad(_180, 18.8515625f, 0.8359375f) / mad(_180, 18.6875f, 1.0f)) * 78.84375f); + _199 = exp2(log2(mad(_170, 18.8515625f, 0.8359375f) / mad(_170, 18.6875f, 1.0f)) * 78.84375f); + } else { + _197 = _143; + _198 = _144; + _199 = _145; + } + bool _202 = CB0_m9 == 0.0f; + float _213 = _126 * asfloat(T0.Load(12)); + SV_Target.z = (asfloat(T0.Load(12)) != 1.0f) ? (_213 * _213) : (_202 ? _197 : (_126 * _197)); + float _221 = _126 * asfloat(T0.Load(0)); + float _227 = (CB0_m11 != 0u) ? (_221 * asfloat(CB0_m11)) : _221; + SV_Target.w = clamp((CB0_m13.y != 0u) ? ((CB0_m12 != 0u) ? ((cos(_227 * 3.1415927410125732421875f) - 1.0f) * (-0.5f)) : _227) : _221, 0.0f, 1.0f); + SV_Target.x = _202 ? _199 : (_126 * _199); + SV_Target.y = _202 ? _198 : (_126 * _198); +} + +SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { + COLOR1 = stage_input.COLOR1; + TEXCOORD = stage_input.TEXCOORD; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.SV_Target = SV_Target; + return stage_output; +} diff --git a/src/games/rdr2/output/0xA2BCE028.cs_5_1.hlslx b/src/games/rdr2/output/0xA2BCE028.cs_5_1.hlslx new file mode 100644 index 0000000000..626288fd0e --- /dev/null +++ b/src/games/rdr2/output/0xA2BCE028.cs_5_1.hlslx @@ -0,0 +1,107 @@ +cbuffer CB0_buf : register(b0, space0) { + float4 CB0_m0 : packoffset(c0); + float4 CB0_m1 : packoffset(c1); + uint2 CB0_m2 : packoffset(c2); + float2 CB0_m3 : packoffset(c2.z); + float4 CB0_m4 : packoffset(c3); +}; + +RWByteAddressBuffer U0 : register(u6, space0); +SamplerState S0 : register(s1, space0); +Texture2D T0 : register(t2, space0); +Texture2D T1 : register(t3, space0); +Texture2D T2 : register(t4, space0); +Texture2D T3 : register(t5, space0); + +static uint3 gl_WorkGroupID; +struct SPIRV_Cross_Input { + uint3 gl_WorkGroupID : SV_GroupID; +}; + +float dp3_f32(float3 a, float3 b) { + precise float _86 = a.x * b.x; + return mad(a.z, b.z, mad(a.y, b.y, _86)); +} + +uint cvt_f32_u32(float v) { + return (v > 4294967040.0f) ? 4294967295u : uint(max(v, 0.0f)); +} + +void comp_main() { + uint _99 = gl_WorkGroupID.x << 4u; + float _106 = CB0_m3.x * 0.5f; + float _107 = CB0_m3.y * 0.5f; + uint _109; + uint _112; + uint _114; + _109 = 0u; + _112 = 1199524608u; + _114 = 0u; + uint _117; + uint _110; + uint _113; + uint _115; + uint _116 = 0u; + for (;;) { + if (_116 >= 16u) { + break; + } + float _124 = float(_99 + _116); + float _127 = (_124 * CB0_m3.x) + _106; + float _128 = _107 + (_124 * CB0_m3.y); + float2 _142 = float2(_127 * CB0_m4.x, CB0_m4.y * _128); + float2 _148 = float2(_127 * CB0_m4.z, CB0_m4.w * _128); + float _165 = mad(T1.SampleLevel(S0, _148, 0.0f).x, CB0_m1.x, CB0_m1.z); + float _170 = mad(T2.SampleLevel(S0, _148, 0.0f).x, CB0_m1.y, CB0_m1.w); + float _177 = (T0.SampleLevel(S0, _142, 0.0f).x + T3.SampleLevel(S0, _142, 0.0f).x) * CB0_m0.x; + float _193 = exp2(log2(max(mad(_170, 0.11102962493896484375f, (_165 * 0.008609036915004253387451171875f) + _177), 0.0f)) * 0.0126833133399486541748046875f); + float _194 = exp2(log2(max(mad(_170, -0.11102962493896484375f, (_165 * (-0.008609036915004253387451171875f)) + _177), 0.0f)) * 0.0126833133399486541748046875f); + float _195 = exp2(log2(max(mad(_170, -0.3206271827220916748046875f, (_165 * 0.560031354427337646484375f) + _177), 0.0f)) * 0.0126833133399486541748046875f); + float _217 = exp2(log2(abs(max(_193 - 0.8359375f, 0.0f) / mad(_193, -18.6875f, 18.8515625f))) * 6.277394771575927734375f); + float _218 = exp2(log2(abs(max(_194 - 0.8359375f, 0.0f) / mad(_194, -18.6875f, 18.8515625f))) * 6.277394771575927734375f); + float _219 = exp2(log2(abs(max(_195 - 0.8359375f, 0.0f) / mad(_195, -18.6875f, 18.8515625f))) * 6.277394771575927734375f); + float _233 = dp3_f32(float3(mad(_219, 8.73067760467529296875f, (_217 * 429.575836181640625f) + (_218 * (-313.3065185546875f))), mad(_219, -24.0338611602783203125f, (_217 * (-98.91619110107421875f)) + (_218 * 247.9500579833984375f)), mad(_219, 140.6079559326171875f, (_217 * (-3.2437374591827392578125f)) + (_218 * (-12.3642139434814453125f)))), float3(0.2125000059604644775390625f, 0.7153999805450439453125f, 0.07209999859333038330078125f)); + _110 = _109; + _113 = _112; + _115 = _114; + uint _235; + uint _237; + uint _238; + uint _240; + uint _239 = 0u; + for (;;) { + if (_239 >= 16u) { + break; + } + _238 = asuint(_233 + asfloat(_115)); + _237 = asuint(min(_233, asfloat(_113))); + _235 = asuint(max(_233, asfloat(_110))); + _240 = _239 + 1u; + _110 = _235; + _113 = _237; + _115 = _238; + _239 = _240; + continue; + } + _117 = _116 + 1u; + _109 = _110; + _112 = _113; + _114 = _115; + _116 = _117; + continue; + } + uint _262; + U0.InterlockedAdd(0, cvt_f32_u32(asfloat(_114) * 6.55350017547607421875f), _262); + uint _267; + U0.InterlockedMin(8, cvt_f32_u32(asfloat(_112) * 6.55350017547607421875f), _267); + uint _269; + U0.InterlockedMax(4, cvt_f32_u32(asfloat(_109) * 6.55350017547607421875f), _269); + uint _271; + U0.InterlockedAdd(12, 1u, _271); +} + +[numthreads(1, 1, 1)] +void main(SPIRV_Cross_Input stage_input) { + gl_WorkGroupID = stage_input.gl_WorkGroupID; + comp_main(); +} diff --git a/src/games/rdr2/output/0xD99B0510.ps_5_0.hlslx b/src/games/rdr2/output/0xD99B0510.ps_5_0.hlslx new file mode 100644 index 0000000000..be387de16d --- /dev/null +++ b/src/games/rdr2/output/0xD99B0510.ps_5_0.hlslx @@ -0,0 +1,46 @@ +SamplerState s0 : register(s0, space0); +Texture2D t0 : register(t1, space0); + +static float2 TEXCOORD; +static float4 SV_TARGET; + +struct SPIRV_Cross_Input +{ + float2 TEXCOORD : TEXCOORD1; +}; + +struct SPIRV_Cross_Output +{ + float4 SV_TARGET : SV_Target0; +}; + +float dp3_f32(float3 a, float3 b) +{ + precise float _53 = a.x * b.x; + return mad(a.z, b.z, mad(a.y, b.y, _53)); +} + +void frag_main() +{ + float4 _74 = t0.Sample(s0, float2(TEXCOORD.x, TEXCOORD.y)); + float _75 = _74.x; + float _76 = _74.y; + float _77 = _74.z; + SV_TARGET.w = _74.w; + float3 _109 = float3((_75 < 0.0003379185800440609455108642578125f) ? (_75 * 0.10793362557888031005859375f) : exp2(log2(abs((_75 + 0.047142855823040008544921875f) * 0.95497953891754150390625f)) * 2.2000000476837158203125f), (_76 < 0.0003379185800440609455108642578125f) ? (_76 * 0.10793362557888031005859375f) : exp2(log2(abs((_76 + 0.047142855823040008544921875f) * 0.95497953891754150390625f)) * 2.2000000476837158203125f), (_77 < 0.0003379185800440609455108642578125f) ? (_77 * 0.10793362557888031005859375f) : exp2(log2(abs((_77 + 0.047142855823040008544921875f) * 0.95497953891754150390625f)) * 2.2000000476837158203125f)); + float _115 = exp2(log2(abs(dp3_f32(_109, float3(0.6274039745330810546875f, 0.329281985759735107421875f, 0.043313600122928619384765625f)) * 0.0400000028312206268310546875f)) * 0.1593017578125f); + SV_TARGET.x = exp2(log2(mad(_115, 18.8515625f, 0.8359375f) / mad(_115, 18.6875f, 1.0f)) * 78.84375f); + float _129 = exp2(log2(abs(dp3_f32(_109, float3(0.01639159955084323883056640625f, 0.0880132019519805908203125f, 0.895595014095306396484375f)) * 0.0400000028312206268310546875f)) * 0.1593017578125f); + SV_TARGET.z = exp2(log2(mad(_129, 18.8515625f, 0.8359375f) / mad(_129, 18.6875f, 1.0f)) * 78.84375f); + float _141 = exp2(log2(abs(dp3_f32(_109, float3(0.06909699738025665283203125f, 0.919539988040924072265625f, 0.0113612003624439239501953125f)) * 0.0400000028312206268310546875f)) * 0.1593017578125f); + SV_TARGET.y = exp2(log2(mad(_141, 18.8515625f, 0.8359375f) / mad(_141, 18.6875f, 1.0f)) * 78.84375f); +} + +SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) +{ + TEXCOORD = stage_input.TEXCOORD; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.SV_TARGET = SV_TARGET; + return stage_output; +} diff --git a/src/games/rdr2/output/0xE3F0F5BF.cs_5_1.hlslx b/src/games/rdr2/output/0xE3F0F5BF.cs_5_1.hlslx new file mode 100644 index 0000000000..2d5cb30db5 --- /dev/null +++ b/src/games/rdr2/output/0xE3F0F5BF.cs_5_1.hlslx @@ -0,0 +1,144 @@ +cbuffer CB0_buf : register(b0, space0) +{ + uint4 CB0_m0 : packoffset(c0); + uint4 CB0_m1 : packoffset(c1); + uint4 CB0_m2 : packoffset(c2); + uint4 CB0_m3 : packoffset(c3); + uint4 CB0_m4 : packoffset(c4); + uint4 CB0_m5 : packoffset(c5); + uint4 CB0_m6 : packoffset(c6); + uint4 CB0_m7 : packoffset(c7); + uint4 CB0_m8 : packoffset(c8); + uint4 CB0_m9 : packoffset(c9); + uint4 CB0_m10 : packoffset(c10); + uint4 CB0_m11 : packoffset(c11); + float4 CB0_m12 : packoffset(c12); + float4 CB0_m13 : packoffset(c13); + float2 CB0_m14 : packoffset(c14); + uint2 CB0_m15 : packoffset(c14.z); +}; + +RWTexture3D U0 : register(u1, space0); + +static uint3 gl_WorkGroupID; +static uint3 gl_GlobalInvocationID; +struct SPIRV_Cross_Input +{ + uint3 gl_WorkGroupID : SV_GroupID; + uint3 gl_GlobalInvocationID : SV_DispatchThreadID; +}; + +float dp3_f32(float3 a, float3 b) +{ + precise float _142 = a.x * b.x; + return mad(a.z, b.z, mad(a.y, b.y, _142)); +} + +float dp2_f32(float2 a, float2 b) +{ + precise float _130 = a.x * b.x; + return mad(a.y, b.y, _130); +} + +void comp_main() +{ + float _167 = float(CB0_m15.y - 1u); + float _168 = float(gl_GlobalInvocationID.x) / _167; + float _169 = float(gl_GlobalInvocationID.y) / _167; + float _170 = float(gl_WorkGroupID.z) / _167; + float _244; + float _245; + float _246; + if (CB0_m15.x == 1u) + { + _244 = exp2((_170 - CB0_m12.z) / CB0_m12.y); + _245 = exp2((_169 - CB0_m12.z) / CB0_m12.y); + _246 = exp2((_168 - CB0_m12.z) / CB0_m12.y); + } + else + { + float _241; + float _242; + float _243; + if (CB0_m15.x == 2u) + { + float _201 = exp2(log2(_168) * 0.0126833133399486541748046875f); + float _202 = exp2(log2(_169) * 0.0126833133399486541748046875f); + float _203 = exp2(log2(_170) * 0.0126833133399486541748046875f); + float _204 = _201 - 0.8359375f; + float _205 = _202 - 0.8359375f; + float _206 = _203 - 0.8359375f; + _241 = mad(exp2(log2(((_206 < 0.0f) ? 0.0f : _206) / mad(_203, -18.6875f, 18.8515625f)) * 6.277394771575927734375f), 10000.0f, -CB0_m12.z) / CB0_m12.y; + _242 = mad(exp2(log2(((_205 < 0.0f) ? 0.0f : _205) / mad(_202, -18.6875f, 18.8515625f)) * 6.277394771575927734375f), 10000.0f, -CB0_m12.z) / CB0_m12.y; + _243 = mad(exp2(log2(((_204 < 0.0f) ? 0.0f : _204) / mad(_201, -18.6875f, 18.8515625f)) * 6.277394771575927734375f), 10000.0f, -CB0_m12.z) / CB0_m12.y; + } + else + { + _241 = _170; + _242 = _169; + _243 = _168; + } + _244 = _241; + _245 = _242; + _246 = _243; + } + float _249 = CB0_m12.w * 0.00999999977648258209228515625f; + float3 _250 = float3(_246, _245, _244); + float3 _254 = float3(dp3_f32(float3(0.41245639324188232421875f, 0.3575761020183563232421875f, 0.180437505245208740234375f), _250), dp3_f32(float3(0.21267290413379669189453125f, 0.715152204036712646484375f, 0.072175003588199615478515625f), _250), dp3_f32(float3(0.01933390088379383087158203125f, 0.119191996753215789794921875f, 0.950304090976715087890625f), _250)); + float _270 = exp2(log2(max(dp3_f32(float3(0.359200000762939453125f, 0.69760000705718994140625f, -0.0357999987900257110595703125f), _254), 0.0f) / _249) * 0.1593017578125f); + float _271 = exp2(log2(max(dp3_f32(float3(-0.192200005054473876953125f, 1.10039997100830078125f, 0.07549999654293060302734375f), _254), 0.0f) / _249) * 0.1593017578125f); + float _272 = exp2(log2(max(dp3_f32(float3(0.007000000216066837310791015625f, 0.0749000012874603271484375f, 0.84340000152587890625f), _254), 0.0f) / _249) * 0.1593017578125f); + float _288 = exp2(log2(mad(_270, 18.8515625f, 0.8359375f) / mad(_270, 18.6875f, 1.0f)) * 78.84375f); + float _289 = exp2(log2(mad(_271, 18.8515625f, 0.8359375f) / mad(_271, 18.6875f, 1.0f)) * 78.84375f); + float _292 = dp2_f32(0.5f.xx, float2(_288, _289)); + float3 _293 = float3(_288, _289, exp2(log2(mad(_272, 18.8515625f, 0.8359375f) / mad(_272, 18.6875f, 1.0f)) * 78.84375f)); + float _294 = dp3_f32(float3(1.61370003223419189453125f, -3.323400020599365234375f, 1.70969998836517333984375f), _293); + float _295 = dp3_f32(float3(4.377999782562255859375f, -4.245500087738037109375f, -0.132499992847442626953125f), _293); + float _299 = _292 - 1.0f; + float _302 = clamp(_299 * (1.0f / (CB0_m13.x - 1.0f)), 0.0f, 1.0f); + float _310 = exp2(log2(mad(_302, -2.0f, 3.0f) * (_302 * _302)) * CB0_m13.y); + float3 _314 = float3(_292 * 1.0f, _310 * _294, _310 * _295); + float _324 = exp2(log2(dp3_f32(float3(1.0f, 0.008605145849287509918212890625f, 0.111035607755184173583984375f), _314)) * 0.0126833133399486541748046875f); + float _325 = exp2(log2(dp3_f32(float3(1.0f, -0.008605145849287509918212890625f, -0.111035607755184173583984375f), _314)) * 0.0126833133399486541748046875f); + float _326 = exp2(log2(dp3_f32(float3(1.0f, 0.560048878192901611328125f, -0.3206374645233154296875f), _314)) * 0.0126833133399486541748046875f); + float3 _351 = float3(_249 * exp2(log2(max(_324 - 0.8359375f, 0.0f) / mad(_324, -18.6875f, 18.8515625f)) * 6.277394771575927734375f), _249 * exp2(log2(max(_325 - 0.8359375f, 0.0f) / mad(_325, -18.6875f, 18.8515625f)) * 6.277394771575927734375f), _249 * exp2(log2(max(_326 - 0.8359375f, 0.0f) / mad(_326, -18.6875f, 18.8515625f)) * 6.277394771575927734375f)); + float3 _355 = float3(dp3_f32(float3(2.07017993927001953125f, -1.32645690441131591796875f, 0.2066160142421722412109375f), _351), dp3_f32(float3(0.3649882376194000244140625f, 0.6804673671722412109375f, -0.0454217530786991119384765625f), _351), dp3_f32(float3(-0.049595542252063751220703125f, -0.0494211614131927490234375f, 1.18799591064453125f), _351)); + float _356 = dp3_f32(float3(3.2404549121856689453125f, -1.53713881969451904296875f, -0.4985315501689910888671875f), _355); + float _357 = dp3_f32(float3(-0.969266414642333984375f, 1.876010894775390625f, 0.041556082665920257568359375f), _355); + float _358 = dp3_f32(float3(0.0556434206664562225341796875f, -0.20402584969997406005859375f, 1.05722510814666748046875f), _355); + float _360 = max(_356, max(_357, _358)); + float _363 = 1.0f - CB0_m13.z; + float _371 = (CB0_m13.z > _360) ? _360 : mad(_363, 1.0f - exp2(((_360 - CB0_m13.z) / _363) * (-1.44269502162933349609375f)), CB0_m13.z); + float _399 = (_356 < CB0_m13.z) ? _356 : mad(_363, 1.0f - exp2(((_356 - CB0_m13.z) / _363) * (-1.44269502162933349609375f)), CB0_m13.z); + float _400 = (_357 < CB0_m13.z) ? _357 : mad(_363, 1.0f - exp2(((_357 - CB0_m13.z) / _363) * (-1.44269502162933349609375f)), CB0_m13.z); + float _401 = (_358 < CB0_m13.z) ? _358 : mad(_363, 1.0f - exp2(((_358 - CB0_m13.z) / _363) * (-1.44269502162933349609375f)), CB0_m13.z); + float3 _410 = float3(mad(CB0_m13.w, ((_356 * _371) / _360) - _399, _399), mad(CB0_m13.w, ((_357 * _371) / _360) - _400, _400), mad(CB0_m13.w, ((_358 * _371) / _360) - _401, _401)); + float3 _414 = float3(dp3_f32(float3(0.41245639324188232421875f, 0.3575761020183563232421875f, 0.180437505245208740234375f), _410), dp3_f32(float3(0.21267290413379669189453125f, 0.715152204036712646484375f, 0.072175003588199615478515625f), _410), dp3_f32(float3(0.01933390088379383087158203125f, 0.119191996753215789794921875f, 0.950304090976715087890625f), _410)); + float _430 = exp2(log2(max(dp3_f32(float3(0.359200000762939453125f, 0.69760000705718994140625f, -0.0357999987900257110595703125f), _414), 0.0f) / _249) * 0.1593017578125f); + float _431 = exp2(log2(max(dp3_f32(float3(-0.192200005054473876953125f, 1.10039997100830078125f, 0.07549999654293060302734375f), _414), 0.0f) / _249) * 0.1593017578125f); + float _432 = exp2(log2(max(dp3_f32(float3(0.007000000216066837310791015625f, 0.0749000012874603271484375f, 0.84340000152587890625f), _414), 0.0f) / _249) * 0.1593017578125f); + float _448 = exp2(log2(mad(_430, 18.8515625f, 0.8359375f) / mad(_430, 18.6875f, 1.0f)) * 78.84375f); + float _449 = exp2(log2(mad(_431, 18.8515625f, 0.8359375f) / mad(_431, 18.6875f, 1.0f)) * 78.84375f); + float _452 = dp2_f32(0.5f.xx, float2(_448, _449)); + float3 _453 = float3(_448, _449, exp2(log2(mad(_432, 18.8515625f, 0.8359375f) / mad(_432, 18.6875f, 1.0f)) * 78.84375f)); + float _454 = dp3_f32(float3(1.61370003223419189453125f, -3.323400020599365234375f, 1.70969998836517333984375f), _453); + float _455 = dp3_f32(float3(4.377999782562255859375f, -4.245500087738037109375f, -0.132499992847442626953125f), _453); + float _461 = clamp(_299 * (1.0f / (CB0_m14.y - 1.0f)), 0.0f, 1.0f); + float _467 = (mad(_461, -2.0f, 3.0f) * (_461 * _461)) * CB0_m14.x; + float _470 = max(_292, 0.001000000047497451305389404296875f); + float3 _477 = float3(_452, mad(_467, ((_294 * _452) / _470) - _454, _454), mad(((_295 * _452) / _470) - _455, _467, _455)); + float _487 = exp2(log2(dp3_f32(float3(1.0f, 0.008605145849287509918212890625f, 0.111035607755184173583984375f), _477)) * 0.0126833133399486541748046875f); + float _488 = exp2(log2(dp3_f32(float3(1.0f, -0.008605145849287509918212890625f, -0.111035607755184173583984375f), _477)) * 0.0126833133399486541748046875f); + float _489 = exp2(log2(dp3_f32(float3(1.0f, 0.560048878192901611328125f, -0.3206374645233154296875f), _477)) * 0.0126833133399486541748046875f); + float3 _514 = float3(_249 * exp2(log2(max(_487 - 0.8359375f, 0.0f) / mad(_487, -18.6875f, 18.8515625f)) * 6.277394771575927734375f), _249 * exp2(log2(max(_488 - 0.8359375f, 0.0f) / mad(_488, -18.6875f, 18.8515625f)) * 6.277394771575927734375f), _249 * exp2(log2(max(_489 - 0.8359375f, 0.0f) / mad(_489, -18.6875f, 18.8515625f)) * 6.277394771575927734375f)); + float3 _518 = float3(dp3_f32(float3(2.07017993927001953125f, -1.32645690441131591796875f, 0.2066160142421722412109375f), _514), dp3_f32(float3(0.3649882376194000244140625f, 0.6804673671722412109375f, -0.0454217530786991119384765625f), _514), dp3_f32(float3(-0.049595542252063751220703125f, -0.0494211614131927490234375f, 1.18799591064453125f), _514)); + U0[uint3(gl_GlobalInvocationID.x, gl_GlobalInvocationID.y, gl_WorkGroupID.z)] = float4(dp3_f32(float3(3.2404549121856689453125f, -1.53713881969451904296875f, -0.4985315501689910888671875f), _518), dp3_f32(float3(-0.969266414642333984375f, 1.876010894775390625f, 0.041556082665920257568359375f), _518), dp3_f32(float3(0.0556434206664562225341796875f, -0.20402584969997406005859375f, 1.05722510814666748046875f), _518), 1.0f); +} + +[numthreads(32, 32, 1)] +void main(SPIRV_Cross_Input stage_input) +{ + gl_WorkGroupID = stage_input.gl_WorkGroupID; + gl_GlobalInvocationID = stage_input.gl_GlobalInvocationID; + comp_main(); +} diff --git a/src/games/rdr2/ui/ui_0x1A0D957F.ps_5_1.hlslx b/src/games/rdr2/ui/ui_0x1A0D957F.ps_5_1.hlslx new file mode 100644 index 0000000000..944854f136 --- /dev/null +++ b/src/games/rdr2/ui/ui_0x1A0D957F.ps_5_1.hlslx @@ -0,0 +1,114 @@ +#include "../common.hlsli" + +struct anon_m +{ + float4 _m0; + uint4 _m1; + uint4 _m2; + uint4 _m3; + uint4 _m4; + uint3 _m5; +}; + +cbuffer CB0_buf : register(b0, space0) +{ + uint4 CB0_m0 : packoffset(c0); + uint4 CB0_m1 : packoffset(c1); + uint4 CB0_m2 : packoffset(c2); + uint4 CB0_m3 : packoffset(c3); + uint4 CB0_m4 : packoffset(c4); + uint4 CB0_m5 : packoffset(c5); + float4 CB0_m6 : packoffset(c6); + float4 CB0_m7 : packoffset(c7); + float4 CB0_m8 : packoffset(c8); + float CB0_m9 : packoffset(c9); + uint CB0_m10 : packoffset(c9.y); + uint CB0_m11 : packoffset(c9.z); + uint CB0_m12 : packoffset(c9.w); + uint4 CB0_m13 : packoffset(c10); +}; + +cbuffer CB1_buf : register(b1, space0) +{ + float4 CB1_m0 : packoffset(c0); + uint4 CB1_m1 : packoffset(c1); + uint4 CB1_m2 : packoffset(c2); + float4 CB1_m3 : packoffset(c3); +}; + +ByteAddressBuffer T0 : register(t3, space0); +SamplerState S0 : register(s2, space0); +Texture3D T1 : register(t4, space0); + +static float4 SV_Target; + +struct SPIRV_Cross_Output +{ + float4 SV_Target : SV_Target0; +}; + +float dp3_f32(float3 a, float3 b) +{ + precise float _75 = a.x * b.x; + return mad(a.z, b.z, mad(a.y, b.y, _75)); +} + +void frag_main() +{ + float _106 = mad(CB0_m6.x, CB0_m8.x, CB0_m7.x); + float _107 = mad(CB0_m6.y, CB0_m8.y, CB0_m7.y); + float _108 = mad(CB0_m8.z, CB0_m6.z, CB0_m7.z); + float _109 = mad(CB0_m8.w, CB0_m6.w, CB0_m7.w); + float _126; + float _127; + float _128; + if (CB0_m13.x != 0u) + { + float4 _122 = T1.SampleLevel(S0, float3(_106, _107, _108), 0.0f); + _126 = _122.z; + _127 = _122.y; + _128 = _122.x; + } + else + { + _126 = _108; + _127 = _107; + _128 = _106; + } + float _180; + float _181; + float _182; + if (CB0_m10 != 0u) + { + float3 _134 = float3(_128, _127, _126); + float _153 = exp2(log2(abs((dp3_f32(float3(0.6274039745330810546875f, 0.329281985759735107421875f, 0.043313600122928619384765625f), _134) * CB1_m0.x) / CB1_m3.w)) * 0.1593017578125f); + float _163 = exp2(log2(abs((dp3_f32(float3(0.06909699738025665283203125f, 0.919539988040924072265625f, 0.0113612003624439239501953125f), _134) * CB1_m0.x) / CB1_m3.w)) * 0.1593017578125f); + float _173 = exp2(log2(abs((dp3_f32(float3(0.01639159955084323883056640625f, 0.0880132019519805908203125f, 0.895595014095306396484375f), _134) * CB1_m0.x) / CB1_m3.w)) * 0.1593017578125f); + _180 = exp2(log2(mad(_173, 18.8515625f, 0.8359375f) / mad(_173, 18.6875f, 1.0f)) * 78.84375f); + _181 = exp2(log2(mad(_163, 18.8515625f, 0.8359375f) / mad(_163, 18.6875f, 1.0f)) * 78.84375f); + _182 = exp2(log2(mad(_153, 18.8515625f, 0.8359375f) / mad(_153, 18.6875f, 1.0f)) * 78.84375f); + // _134 = renodx::color::pq::EncodeSafe(renodx::color::bt2020::from::BT709(_134)) + } + else + { + _180 = _126; + _181 = _127; + _182 = _128; + } + bool _185 = CB0_m9 == 0.0f; + float _196 = _109 * asfloat(T0.Load(12)); + SV_Target.z = (asfloat(T0.Load(12)) != 1.0f) ? (_196 * _196) : (_185 ? _180 : (_109 * _180)); + float _204 = _109 * asfloat(T0.Load(0)); + float _210 = (CB0_m11 != 0u) ? (_204 * asfloat(CB0_m11)) : _204; + SV_Target.w = clamp((CB0_m13.y != 0u) ? ((CB0_m12 != 0u) ? ((cos(_210 * 3.1415927410125732421875f) - 1.0f) * (-0.5f)) : _210) : _204, 0.0f, 1.0f); + SV_Target.x = _185 ? _182 : (_109 * _182); + SV_Target.y = _185 ? _181 : (_109 * _181); +} + +SPIRV_Cross_Output main() +{ + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.SV_Target = SV_Target; + return stage_output; +} diff --git a/src/games/rdr2/ui/ui_button_icons_0xEE341D7A.ps_5_1.hlslx b/src/games/rdr2/ui/ui_button_icons_0xEE341D7A.ps_5_1.hlslx new file mode 100644 index 0000000000..157e3fc0fe --- /dev/null +++ b/src/games/rdr2/ui/ui_button_icons_0xEE341D7A.ps_5_1.hlslx @@ -0,0 +1,118 @@ +struct anon_m +{ + float4 _m0; + uint4 _m1; + uint4 _m2; + uint4 _m3; + uint4 _m4; + uint3 _m5; +}; + +cbuffer CB0_buf : register(b0, space0) +{ + uint4 CB0_m0 : packoffset(c0); + uint4 CB0_m1 : packoffset(c1); + uint4 CB0_m2 : packoffset(c2); + uint4 CB0_m3 : packoffset(c3); + uint4 CB0_m4 : packoffset(c4); + uint4 CB0_m5 : packoffset(c5); + uint4 CB0_m6 : packoffset(c6); + float4 CB0_m7 : packoffset(c7); + float4 CB0_m8 : packoffset(c8); + float CB0_m9 : packoffset(c9); + uint CB0_m10 : packoffset(c9.y); + uint CB0_m11 : packoffset(c9.z); + uint CB0_m12 : packoffset(c9.w); + uint4 CB0_m13 : packoffset(c10); +}; + +cbuffer CB1_buf : register(b1, space0) +{ + float4 CB1_m0 : packoffset(c0); + uint4 CB1_m1 : packoffset(c1); + uint4 CB1_m2 : packoffset(c2); + float4 CB1_m3 : packoffset(c3); +}; + +ByteAddressBuffer T0 : register(t3, space0); +SamplerState S0 : register(s2, space0); +Texture3D T1 : register(t4, space0); + +static float4 COLOR; +static float4 SV_Target; + +struct SPIRV_Cross_Input +{ + float4 COLOR : TEXCOORD1; +}; + +struct SPIRV_Cross_Output +{ + float4 SV_Target : SV_Target0; +}; + +float dp3_f32(float3 a, float3 b) +{ + precise float _76 = a.x * b.x; + return mad(a.z, b.z, mad(a.y, b.y, _76)); +} + +void frag_main() +{ + float _110 = mad(COLOR.x, CB0_m8.x, CB0_m7.x); + float _111 = mad(COLOR.y, CB0_m8.y, CB0_m7.y); + float _112 = mad(COLOR.z, CB0_m8.z, CB0_m7.z); + float _113 = mad(COLOR.w, CB0_m8.w, CB0_m7.w); + float _130; + float _131; + float _132; + if (CB0_m13.x != 0u) + { + float4 _126 = T1.SampleLevel(S0, float3(_110, _111, _112), 0.0f); + _130 = _126.z; + _131 = _126.y; + _132 = _126.x; + } + else + { + _130 = _112; + _131 = _111; + _132 = _110; + } + float _184; + float _185; + float _186; + if (CB0_m10 != 0u) + { + float3 _138 = float3(_132, _131, _130); + float _157 = exp2(log2(abs((dp3_f32(float3(0.6274039745330810546875f, 0.329281985759735107421875f, 0.043313600122928619384765625f), _138) * CB1_m0.x) / CB1_m3.w)) * 0.1593017578125f); + float _167 = exp2(log2(abs((dp3_f32(float3(0.06909699738025665283203125f, 0.919539988040924072265625f, 0.0113612003624439239501953125f), _138) * CB1_m0.x) / CB1_m3.w)) * 0.1593017578125f); + float _177 = exp2(log2(abs((dp3_f32(float3(0.01639159955084323883056640625f, 0.0880132019519805908203125f, 0.895595014095306396484375f), _138) * CB1_m0.x) / CB1_m3.w)) * 0.1593017578125f); + _184 = exp2(log2(mad(_177, 18.8515625f, 0.8359375f) / mad(_177, 18.6875f, 1.0f)) * 78.84375f); + _185 = exp2(log2(mad(_167, 18.8515625f, 0.8359375f) / mad(_167, 18.6875f, 1.0f)) * 78.84375f); + _186 = exp2(log2(mad(_157, 18.8515625f, 0.8359375f) / mad(_157, 18.6875f, 1.0f)) * 78.84375f); + } + else + { + _184 = _130; + _185 = _131; + _186 = _132; + } + bool _189 = CB0_m9 == 0.0f; + float _200 = _113 * asfloat(T0.Load(12)); + SV_Target.z = (asfloat(T0.Load(12)) != 1.0f) ? (_200 * _200) : (_189 ? _184 : (_113 * _184)); + float _208 = _113 * asfloat(T0.Load(0)); + float _214 = (CB0_m11 != 0u) ? (_208 * asfloat(CB0_m11)) : _208; + SV_Target.w = clamp((CB0_m13.y != 0u) ? ((CB0_m12 != 0u) ? ((cos(_214 * 3.1415927410125732421875f) - 1.0f) * (-0.5f)) : _214) : _208, 0.0f, 1.0f); + SV_Target.x = _189 ? _186 : (_113 * _186); + SV_Target.y = _189 ? _185 : (_113 * _185); +} + +SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) +{ + COLOR = stage_input.COLOR; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.SV_Target = SV_Target; + return stage_output; +} From 16c622c24126874eae700d45d9325dd1aa4ab135 Mon Sep 17 00:00:00 2001 From: Musa Haji Date: Mon, 15 Sep 2025 22:07:48 -0400 Subject: [PATCH 05/30] feat(rdr2): adjust shadows slider behavior --- src/games/rdr2/common.hlsli | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/games/rdr2/common.hlsli b/src/games/rdr2/common.hlsli index 1958b92215..8dc5a93172 100644 --- a/src/games/rdr2/common.hlsli +++ b/src/games/rdr2/common.hlsli @@ -10,7 +10,8 @@ float3 ApplyExposureContrastFlareHighlightsShadowsByLuminance(float3 untonemappe const float y_normalized = y / mid_gray; const float highlight_mask = 1.f / mid_gray; - const float shadow_mask = mid_gray; + float shadow_mask = 1.f; + if (config.shadows < 1.f) shadow_mask = mid_gray; // contrast & flare float flare = renodx::math::DivideSafe(y_normalized + config.flare, y_normalized, 1.f); From 2992a795a4d710329a99729e53eec4e9a1dc42a4 Mon Sep 17 00:00:00 2001 From: Musa Haji Date: Thu, 18 Sep 2025 11:53:16 -0400 Subject: [PATCH 06/30] feat(rdr2): add preserve shadow detail preset --- src/games/rdr2/addon.cpp | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/src/games/rdr2/addon.cpp b/src/games/rdr2/addon.cpp index 782b5f3c1f..afb16f81fe 100644 --- a/src/games/rdr2/addon.cpp +++ b/src/games/rdr2/addon.cpp @@ -28,17 +28,22 @@ ShaderInjectData shader_injection; const std::unordered_map MATCH_SDR_VALUES = { {"GammaCorrection", 1.f}, {"ToneMapScaling", 1.f}, + {"ToneMapHueCorrection", 0.f}, {"UnclampLighting", 0.f}, {"UseSRGBLUTEncoding", 0.f}, }; const std::unordered_map RECOMMENDED_VALUES = { + {"ColorGradeShadows", 55.f}, +}; + +const std::unordered_map PRESERVE_SHADOW_DETAIL = { {"GammaCorrection", 0.f}, - {"ToneMapBlowoutRestoration", 100.f}, - {"ColorGradeExposure", 0.8f}, - {"ColorGradeHighlights", 57.f}, - {"ColorGradeHighlightSaturation", 60.f}, - {"ColorGradeFlare2", 38.f}, + {"ColorGradeShadows", 55.f}, + {"ColorGradeContrast", 51.f}, + {"ColorGradeHighlightSaturation", 55.f}, + {"ColorGradeFlare2", 33.f}, + {"UseSRGBLUTEncoding", 0.f}, }; renodx::utils::settings::Settings settings = { @@ -110,7 +115,7 @@ renodx::utils::settings::Settings settings = { new renodx::utils::settings::Setting{ .key = "ToneMapHueCorrection", .binding = &shader_injection.tone_map_hue_correction, - .default_value = 0.f, + .default_value = 20.f, .label = "Hue Correction", .section = "Tone Mapping", .tooltip = "Hue retention strength.", @@ -122,7 +127,7 @@ renodx::utils::settings::Settings settings = { new renodx::utils::settings::Setting{ .key = "ToneMapBlowoutRestoration", .binding = &shader_injection.tone_map_blowout_restoration, - .default_value = 90.f, + .default_value = 100.f, .label = "Blowout Restoration", .section = "Tone Mapping", .tooltip = "Restores color blowout from per-channel grading.", @@ -331,6 +336,24 @@ renodx::utils::settings::Settings settings = { } }, }, + new renodx::utils::settings::Setting{ + .value_type = renodx::utils::settings::SettingValueType::BUTTON, + .label = "Preserve Shadow Detail", + .section = "Options", + .group = "button-line-1", + .on_change = []() { + for (auto* setting : settings) { + if (setting->key.empty()) continue; + if (!setting->can_reset) continue; + + if (PRESERVE_SHADOW_DETAIL.contains(setting->key)) { + renodx::utils::settings::UpdateSetting(setting->key, PRESERVE_SHADOW_DETAIL.at(setting->key)); + } else { + renodx::utils::settings::UpdateSetting(setting->key, setting->default_value); + } + } + }, + }, new renodx::utils::settings::Setting{ .value_type = renodx::utils::settings::SettingValueType::BUTTON, .label = "Discord", From 1d87d7d1bb3843641f36f484688cbd42f868c874 Mon Sep 17 00:00:00 2001 From: Musa Haji Date: Thu, 18 Sep 2025 11:54:00 -0400 Subject: [PATCH 07/30] feat(rdr2): add more tonemap shaders --- src/games/rdr2/lut/tm_0x20270B14.ps_5_1.hlsl | 373 ++++++++++++++++++ .../rdr2/lut/tm_night_0xBF7C33C4.ps_5_1.hlsl | 2 +- .../lut/tm_no-blur_0xF039556F.ps_5_1.hlsl | 370 +++++++++++++++++ 3 files changed, 744 insertions(+), 1 deletion(-) create mode 100644 src/games/rdr2/lut/tm_0x20270B14.ps_5_1.hlsl create mode 100644 src/games/rdr2/lut/tm_no-blur_0xF039556F.ps_5_1.hlsl diff --git a/src/games/rdr2/lut/tm_0x20270B14.ps_5_1.hlsl b/src/games/rdr2/lut/tm_0x20270B14.ps_5_1.hlsl new file mode 100644 index 0000000000..cea720e185 --- /dev/null +++ b/src/games/rdr2/lut/tm_0x20270B14.ps_5_1.hlsl @@ -0,0 +1,373 @@ +#include "../common.hlsli" + +struct anon_m { + int4 _m0; + float4 _m1; + float4 _m2; + float2 _m3; + uint4 _m4; + uint4 _m5; + uint4 _m6; + uint4 _m7; + uint4 _m8; + uint4 _m9; + uint4 _m10; + uint4 _m11; + uint4 _m12; + uint4 _m13; + uint4 _m14; + uint _m15; +}; + +cbuffer CB0_buf : register(b16, space0) { + uint4 CB0_m[88] : packoffset(c0); +}; + +cbuffer CB1_buf : register(b20, space0) { + uint4 CB1_m0 : packoffset(c0); + uint2 CB1_m1 : packoffset(c1); + float2 CB1_m2 : packoffset(c1.z); + float4 CB1_m3 : packoffset(c2); + float4 CB1_m4 : packoffset(c3); +}; + +ByteAddressBuffer T0 : register(t2, space0); +ByteAddressBuffer T1 : register(t3, space0); +ByteAddressBuffer T16 : register(t118, space0); +SamplerState S0 : register(s0, space0); +SamplerState S1 : register(s2, space0); +SamplerState S2 : register(s8, space0); +Texture2DArray T2 : register(t25, space0); +Texture2D T3 : register(t44, space0); +Texture2D T4 : register(t78, space0); +Texture2D T5 : register(t81, space0); +Texture1D T6 : register(t89, space0); +Texture2D T7 : register(t90, space0); +Texture2D T8 : register(t100, space0); +Texture2D T9 : register(t101, space0); +Texture2D T10 : register(t106, space0); +Texture2D T11 : register(t107, space0); +Texture2D T12 : register(t109, space0); +Texture2D T13 : register(t110, space0); +Texture2D T14 : register(t111, space0); +Buffer T15 : register(t116, space0); + +static float4 gl_FragCoord; +static float4 TEXCOORD; +static float TEXCOORD1; +static float4 SV_Target; + +struct SPIRV_Cross_Input { + float4 gl_FragCoord : SV_Position; + float4 TEXCOORD : TEXCOORD; + float TEXCOORD1 : TEXCOORD1; +}; + +struct SPIRV_Cross_Output { + float4 SV_Target : SV_Target0; +}; + +float dp3_f32(float3 a, float3 b) { + precise float _235 = a.x * b.x; + return mad(a.z, b.z, mad(a.y, b.y, _235)); +} + +float dp2_f32(float2 a, float2 b) { + precise float _224 = a.x * b.x; + return mad(a.y, b.y, _224); +} + +uint cvt_f32_u32(float v) { + return (v > 4294967040.0f) ? 4294967295u : uint(max(v, 0.0f)); +} + +void frag_main() { + float2 _251 = float2(TEXCOORD.x, TEXCOORD.y); + float4 _254 = T13.Sample(S0, _251); + float2 _259 = float2(_254.xy); + float4 _261 = T7.Sample(S2, _259); + float _269 = asfloat(T0.Load(16)); + float _270 = _261.x * _269; + float _271 = _261.y * _269; + float _272 = _261.z * _269; + float4 _274 = T15.Load(0u); + float _275 = _274.x; + float _276 = _274.y; + float _277 = _274.z; + float4 _278 = T15.Load(1u); + float _279 = _278.x; + float _280 = _278.y; + float _281 = _278.z; + float _282 = _278.w; + float4 _284 = T3.Load(int3(uint2(0u, 0u), 0u)); + float _285 = _284.x; + bool _317; + float _318; + float _319; + float _320; + if (CB0_m[64u].x != 0u) { + float4 _303 = T12.Sample(S2, _251); + float _304 = _303.x; + float _305 = _303.y; + float _306 = _303.z; + float _307 = _303.w; + bool _309 = (_307 + 9.9999997473787516355514526367188e-05f) >= 1.0f; + float _310 = 1.0f - _307; + _317 = _309; + _318 = _309 ? _306 : mad(_310, _272, _306); + _319 = _309 ? _305 : mad(_310, _271, _305); + _320 = _309 ? _304 : mad(_310, _270, _304); + } else { + _317 = false; + _318 = _272; + _319 = _271; + _320 = _270; + } + float _324 = min(_285 * _320, (UNCLAMP_HIGHLIGHTS != 0.f) ? renodx::math::FLT32_MAX : 65504.0f); + float _325 = min(_285 * _319, (UNCLAMP_HIGHLIGHTS != 0.f) ? renodx::math::FLT32_MAX : 65504.0f); + float _326 = min(_285 * _318, (UNCLAMP_HIGHLIGHTS != 0.f) ? renodx::math::FLT32_MAX : 65504.0f); + bool _327 = !_317; + float _490; + float _491; + float _492; + float _493; + if (_327) { + float _407; + if (CB0_m[73u].x != 0u) { + float4 _340 = T5.Sample(S1, _259); + float _355 = clamp(dp3_f32(float3(_285 * _340.x, _285 * _340.y, _285 * _340.z), float3(0.300000011920928955078125f, 0.589999973773956298828125f, 0.10999999940395355224609375f)), asfloat(CB0_m[75u].z), asfloat(CB0_m[75u].w)); + float _380 = asfloat(CB0_m[69u].x); + float _383 = asfloat(CB0_m[69u].y); + float _384 = clamp(mad(_355, asfloat(CB0_m[75u].y), mad(log2(_355 + asfloat(CB0_m[75u].x)) * asfloat(CB0_m[73u].y), 0.693147182464599609375f, asfloat(CB0_m[73u].z)) - 10.0f) + asfloat(CB0_m[68u].w), _380, _383); + _407 = exp2(mad(clamp(asfloat(CB0_m[73u].x), 0.0f, 1.0f), clamp(_380, mad(abs(_384) * asfloat(CB0_m[69u].z), float(int(((_384 < 0.0f) ? 4294967295u : 0u) + uint(_384 > 0.0f))), _384), _383) - TEXCOORD1, TEXCOORD1)); + } else { + _407 = TEXCOORD.z; + } + float2 _424 = float2(TEXCOORD.x - asfloat(CB0_m[53u].x), TEXCOORD.y - asfloat(CB0_m[53u].y)); + float2 _438 = float2(dp2_f32(float2(asfloat(CB0_m[55u].x), asfloat(CB0_m[55u].y)), _424) * asfloat(CB0_m[53u].z), dp2_f32(float2(asfloat(CB0_m[55u].z), asfloat(CB0_m[55u].w)), _424) * asfloat(CB0_m[53u].w)); + float _448 = max((dp2_f32(_438, _438) - asfloat(CB0_m[56u].x)) * asfloat(CB0_m[56u].w) * CUSTOM_VIGNETTE, 0.0f); + float _460 = (_448 < 1.0f) ? (1.0f - exp2(_448 * (-10.0f))) : ((((_448 - 1.0f) > 0.0f) ? exp2((_448 - 2.0f) * 10.0f) : 0.0f) + 0.9980499744415283203125f); + float _474 = asfloat(CB0_m[54u].w); + bool _484 = CB0_m[54u].w != 0u; + _490 = _407; + _491 = _484 ? mad(_460, mad(_474, asfloat(CB0_m[54u].z) * _326, -_326), _326) : _326; + _492 = _484 ? mad(mad(_474, asfloat(CB0_m[54u].y) * _325, -_325), _460, _325) : _325; + _493 = _484 ? mad(mad(asfloat(CB0_m[54u].x) * _324, _474, -_324), _460, _324) : _324; + } else { + _490 = TEXCOORD.z; + _491 = _326; + _492 = _325; + _493 = _324; + } + float _503 = clamp(clamp(TEXCOORD.y * asfloat(CB0_m[60u].y), 0.0f, 1.0f) + asfloat(CB0_m[57u].w), 0.0f, 1.0f); + float _518 = clamp(clamp(clamp(TEXCOORD.y - asfloat(CB0_m[59u].w), 0.0f, 1.0f) * asfloat(CB0_m[60u].x), 0.0f, 1.0f) - asfloat(CB0_m[58u].w), 0.0f, 1.0f); + float _524 = asfloat(CB0_m[57u].x); + float _525 = asfloat(CB0_m[57u].y); + float _526 = asfloat(CB0_m[57u].z); + float _532 = asfloat(CB0_m[59u].x); + float _533 = asfloat(CB0_m[59u].y); + float _534 = asfloat(CB0_m[59u].z); + float _538 = mad(_503, _532 - _524, _524); + float _539 = mad(_533 - _525, _503, _525); + float _540 = mad(_534 - _526, _503, _526); + float _561 = mad(TEXCOORD.y, mad(_518, asfloat(CB0_m[58u].x) - _532, _532) - _538, _538) * _493; + float _562 = _492 * mad(TEXCOORD.y, mad(_518, asfloat(CB0_m[58u].y) - _533, _533) - _539, _539); + float _563 = _491 * mad(TEXCOORD.y, mad(_518, asfloat(CB0_m[58u].z) - _534, _534) - _540, _540); + float _571 = (CB1_m1.x != 0u) ? CB1_m3.z : _277; + float _574 = _490 / CB1_m2.x; + float _578 = max(_561 * _574, 0.0f); + float _579 = max(_574 * _562, 0.0f); + float _580 = max(_574 * _563, 0.0f); + float _608 = max(_561 * _490, 0.0f); + float _609 = max(_490 * _562, 0.0f); + float _610 = max(_490 * _563, 0.0f); + bool _637 = CB1_m0.w != 0u; + + float _638, _639, _640; +#if 0 + _638 = _637 ? (CB1_m2.x * (((mad(_578, mad(_275, _578, _279), _280) / mad(_578, mad(_275, _578, _276), _281)) - _282) * _571)) : clamp(_277 * ((mad(_608, mad(_275, _608, _279), _280) / mad(_608, mad(_275, _608, _276), _281)) - _282), 0.0f, 1.0f); + _639 = _637 ? (CB1_m2.x * (_571 * ((mad(mad(_275, _579, _279), _579, _280) / mad(mad(_275, _579, _276), _579, _281)) - _282))) : clamp(_277 * ((mad(mad(_275, _609, _279), _609, _280) / mad(mad(_275, _609, _276), _609, _281)) - _282), 0.0f, 1.0f); + _640 = _637 ? (CB1_m2.x * (_571 * ((mad(mad(_275, _580, _279), _580, _280) / mad(mad(_275, _580, _276), _580, _281)) - _282))) : clamp(_277 * ((mad(mad(_275, _610, _279), _610, _280) / mad(mad(_275, _610, _276), _610, _281)) - _282), 0.0f, 1.0f); +#else + ApplyToneMap(_637, + float3(_608, _609, _610), + float3(_578, _579, _580), + _638, _639, _640, + CB1_m2.x, + _275, _276, _277, + _279, _280, _281, _282, + _571); + +#endif + float _713; + float _714; + float _715; + if (_327) { + float _710; + float _711; + float _712; + if (CB0_m[50u].w != 0u) { + float2 _663 = float2(TEXCOORD.x - asfloat(CB0_m[49u].x), TEXCOORD.y - asfloat(CB0_m[49u].y)); + float2 _677 = float2(dp2_f32(float2(asfloat(CB0_m[51u].x), asfloat(CB0_m[51u].y)), _663) * asfloat(CB0_m[49u].z), dp2_f32(float2(asfloat(CB0_m[51u].z), asfloat(CB0_m[51u].w)), _663) * asfloat(CB0_m[49u].w)); + float _695 = T6.Sample(S1, clamp((dp2_f32(_677, _677) - asfloat(CB0_m[52u].x)) * asfloat(CB0_m[52u].w), 0.0f, 1.0f)).w * asfloat(CB0_m[50u].w); + _710 = mad(_695, asfloat(CB0_m[50u].z) - _640, _640); + _711 = mad(_695, asfloat(CB0_m[50u].y) - _639, _639); + _712 = mad(_695, asfloat(CB0_m[50u].x) - _638, _638); + } else { + _710 = _640; + _711 = _639; + _712 = _638; + } + _713 = _710; + _714 = _711; + _715 = _712; + } else { + _713 = _640; + _714 = _639; + _715 = _638; + } + bool _751 = _637 && (CB1_m0.z == 0u); + + float _752, _753, _754; +#if 0 + _752 = _751 ? _715 : ((_715 < 0.003130800090730190277099609375f) ? (CB1_m3.w * _715) : mad(exp2(CB1_m4.x * log2(_715)), CB1_m4.y, -CB1_m4.z)); + _753 = _751 ? _714 : ((_714 < 0.003130800090730190277099609375f) ? (CB1_m3.w * _714) : mad(CB1_m4.y, exp2(CB1_m4.x * log2(_714)), -CB1_m4.z)); + _754 = _751 ? _713 : ((_713 < 0.003130800090730190277099609375f) ? (CB1_m3.w * _713) : mad(CB1_m4.y, exp2(CB1_m4.x * log2(_713)), -CB1_m4.z)); +#else + EncodeForLUT(_751, + _715, _714, _713, + CB1_m3.w, CB1_m4.x, CB1_m4.y, CB1_m4.z, + _752, _753, _754); +#endif + float3 _755 = float3(_752, _753, _754); + float _760 = max(dp3_f32(float3(0.265399992465972900390625f, 0.67040002346038818359375f, 0.06419999897480010986328125f), _755), 0.0f); + float _766 = mad(((max(dp3_f32(float3(0.02480000071227550506591796875f, 0.1247999966144561767578125f, 0.85039997100830078125f), _755), 0.0f) + _760) / max(dp3_f32(float3(0.514900028705596923828125f, 0.324400007724761962890625f, 0.1606999933719635009765625f), _755), 0.00999999977648258209228515625f)) + 1.0f, 1.33000004291534423828125f, -1.67999994754791259765625f) * _760; + float _780 = asfloat(CB0_m[83u].w); + float _794 = clamp(mad(0.039999999105930328369140625f / (dp3_f32(float3(_285 * _270, _285 * _271, _285 * _272), float3(0.300000011920928955078125f, 0.589999973773956298828125f, 0.10999999940395355224609375f)) + 0.039999999105930328369140625f), asfloat(CB0_m[84u].x), asfloat(CB0_m[84u].y)), 0.0f, 1.0f); + float _798 = mad(_794, clamp((_766 * asfloat(CB0_m[83u].x)) * _780, 0.0f, 1.0f) - _752, _752); + float _799 = mad(_794, clamp(_780 * (_766 * asfloat(CB0_m[83u].y)), 0.0f, 1.0f) - _753, _753); + float _800 = mad(_794, clamp(_780 * (_766 * asfloat(CB0_m[83u].z)), 0.0f, 1.0f) - _754, _754); + float _856; + float _857; + float _858; + if (CB0_m[86u].w != 0u) { + float _810 = asfloat(CB0_m[87u].x); + float _811 = asfloat(CB0_m[87u].w); + float _826 = asfloat(CB0_m[86u].z); + float4 _845 = T14.Sample(S1, float2((((_826 * (TEXCOORD.x - 0.5f)) / mad(TEXCOORD.y, asfloat(CB0_m[87u].z) - _811, _811)) - asfloat(CB0_m[86u].x)) + 0.5f, (((_826 * (TEXCOORD.y - 0.5f)) / mad(TEXCOORD.x, asfloat(CB0_m[87u].y) - _810, _810)) - asfloat(CB0_m[86u].y)) + 0.5f)); + float _852 = asfloat(CB0_m[86u].w); + _856 = mad(_845.x - _798, _852, _798); + _857 = mad(_852, _845.y - _799, _799); + _858 = mad(_852, _845.z - _800, _800); + } else { + _856 = _798; + _857 = _799; + _858 = _800; + } + float _1059; + float _1060; + float _1061; + if (_327) { + float _867 = max(max(max(_858, _857), _856), 9.9999997473787516355514526367188e-05f); + float _878 = ((CB1_m1.y == 0u) && _751) ? 1.0f : (((_867 > CB1_m2.y) ? mad(_867, CB1_m3.x, CB1_m3.y) : _867) / _867); + +#if 1 + float3 color_sdr, color_hdr; + PrepareForLUT(_856, _857, _858, color_sdr, color_hdr, _878); +#endif + + float _879 = _858 * _878; + float _884 = floor(_879 * 14.99989986419677734375f); + float _886 = mad(_879, 15.0f, -_884); + float _888 = (_884 * 0.0625f) + ((_856 * _878) * 0.05859375f); + float _890 = mad(_857 * _878, 0.9375f, 0.03125f); + float4 _896 = T10.Sample(S1, float2(_888 + 0.001953125f, _890)); + float _897 = _896.x; + float _898 = _896.y; + float _899 = _896.z; + float4 _902 = T10.Sample(S1, float2(_888 + 0.064453125f, _890)); + float _909 = mad(_886, _902.x - _897, _897); + float _910 = mad(_886, _902.y - _898, _898); + float _911 = mad(_886, _902.z - _899, _899); + float _1053; + float _1054; + float _1055; + if (int(T16.Load(0)) > 0) { + float _931 = asfloat(CB0_m[0u].z) / ((asfloat(CB0_m[0u].w) + 1.0f) - T4.SampleLevel(S0, _259, 0.0f).x); + float _960 = clamp(asfloat(T16.Load4(32)).x + ((_931 < asfloat(T16.Load4(16)).z) ? clamp((_931 - asfloat(T16.Load4(16)).x) * asfloat(T16.Load4(16)).y, 0.0f, 1.0f) : (1.0f - clamp(asfloat(T16.Load4(16)).w * (_931 - asfloat(T16.Load4(16)).z), 0.0f, 1.0f))), 0.0f, 1.0f); + float _963 = floor(_911 * 14.99989986419677734375f); + float _965 = mad(_911, 15.0f, -_963); + float _967 = (_963 * 0.0625f) + (_909 * 0.05859375f); + float _969 = mad(_910, 0.9375f, 0.03125f); + float4 _974 = T8.Sample(S1, float2(_967 + 0.001953125f, _969)); + float _975 = _974.x; + float _976 = _974.y; + float _977 = _974.z; + float4 _980 = T8.Sample(S1, float2(_967 + 0.064453125f, _969)); + float _993 = mad(_960, mad(_965, _980.x - _975, _975) - _909, _909); + float _994 = mad(_960, mad(_965, _980.y - _976, _976) - _910, _910); + float _995 = mad(_960, mad(_965, _980.z - _977, _977) - _911, _911); + float _1006 = clamp(((asfloat(T16.Load4(32)).w > _931) ? clamp(asfloat(T16.Load4(32)).z * (_931 - asfloat(T16.Load4(32)).y), 0.0f, 1.0f) : (1.0f - clamp((_931 - asfloat(T16.Load4(32)).w) * asfloat(T16.Load2(48)).x, 0.0f, 1.0f))) + asfloat(T16.Load2(48)).y, 0.0f, 1.0f); + float _1009 = floor(_995 * 14.99989986419677734375f); + float _1011 = mad(_995, 15.0f, -_1009); + float _1013 = (_993 * 0.05859375f) + (_1009 * 0.0625f); + float _1015 = mad(_994, 0.9375f, 0.03125f); + float4 _1020 = T9.Sample(S1, float2(_1013 + 0.001953125f, _1015)); + float _1021 = _1020.x; + float _1022 = _1020.y; + float _1023 = _1020.z; + float4 _1026 = T9.Sample(S1, float2(_1013 + 0.064453125f, _1015)); + float _1049 = dp3_f32(float3(T11.Sample(S1, _259).xyz), float3(0.2125999927520751953125f, 0.715200006961822509765625f, 0.072200000286102294921875f)); + _1053 = mad((mad(_1026.z - _1023, _1011, _1023) - _995) * _1006, _1049, _995); + _1054 = mad((mad(_1026.y - _1022, _1011, _1022) - _994) * _1006, _1049, _994); + _1055 = mad(_1006 * (mad(_1011, _1026.x - _1021, _1021) - _993), _1049, _993); + } else { + _1053 = _911; + _1054 = _910; + _1055 = _909; + } + _1059 = _1053 / _878; + _1060 = _1054 / _878; + _1061 = _1055 / _878; + +#if 1 + UpgradeLUTOutput(color_hdr, color_sdr, _1061, _1060, _1059); +#endif + + } else { + _1059 = _858; + _1060 = _857; + _1061 = _856; + } + float _1063 = dp3_f32(float3(_1061, _1060, _1059), float3(0.2989999949932098388671875f, 0.58700001239776611328125f, 0.114000000059604644775390625f)); + float _1065 = max(max(_1059, _1060), _1061); + bool _1068 = CB0_m[41u].w != 0u; + float _1102 = asfloat(CB0_m[42u].w); + float _1114 = asfloat(CB0_m[39u].x); + float _1115 = asfloat(CB0_m[39u].y); + float _1116 = asfloat(CB0_m[39u].z); + float _1148 = mad(T2.Load(int4(uint3(uint2(cvt_f32_u32(gl_FragCoord.x) & 63u, cvt_f32_u32(gl_FragCoord.y) & 63u), T1.Load(1840) & 31u), 0u)).x, 2.0f, -1.0f); + float _1161 = _637 ? (float(int(((_1148 < 0.0f) ? 4294967295u : 0u) + uint(_1148 > 0.0f))) * (1.0f - sqrt(1.0f - abs(_1148)))) : _1148; + float _1162 = mad(mad(exp2(log2(clamp(((_1068 ? _1061 : _1065) - asfloat(CB0_m[42u].x)) * asfloat(CB0_m[41u].x), 0.0f, 1.0f)) * _1102), asfloat(CB0_m[40u].x) - _1114, _1114), _1161, _1061); + float _1163 = mad(mad(asfloat(CB0_m[40u].y) - _1115, exp2(log2(clamp(((_1068 ? _1060 : _1065) - asfloat(CB0_m[42u].y)) * asfloat(CB0_m[41u].y), 0.0f, 1.0f)) * _1102), _1115), _1161, _1060); + float _1164 = mad(mad(asfloat(CB0_m[40u].z) - _1116, exp2(log2(clamp(((_1068 ? _1059 : _1065) - asfloat(CB0_m[42u].z)) * asfloat(CB0_m[41u].z), 0.0f, 1.0f)) * _1102), _1116), _1161, _1059); + SV_Target.x = _637 ? _1162 : (_1162); + SV_Target.y = _637 ? _1163 : (_1163); + SV_Target.z = _637 ? _1164 : (_1164); + SV_Target.w = _637 ? _1063 : clamp(_1063, 0.0f, 1.0f); + +#if 1 + SV_Target.rgb = FinalizeTonemap(SV_Target.rgb, TEXCOORD.xy); +#endif +} + +SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { + gl_FragCoord = stage_input.gl_FragCoord; + gl_FragCoord.w = 1.0 / gl_FragCoord.w; + TEXCOORD = stage_input.TEXCOORD; + TEXCOORD1 = stage_input.TEXCOORD1; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.SV_Target = SV_Target; + return stage_output; +} diff --git a/src/games/rdr2/lut/tm_night_0xBF7C33C4.ps_5_1.hlsl b/src/games/rdr2/lut/tm_night_0xBF7C33C4.ps_5_1.hlsl index 6bb8f72f23..f5d233c659 100644 --- a/src/games/rdr2/lut/tm_night_0xBF7C33C4.ps_5_1.hlsl +++ b/src/games/rdr2/lut/tm_night_0xBF7C33C4.ps_5_1.hlsl @@ -246,7 +246,7 @@ void frag_main() { } float2 _661 = float2(TEXCOORD.x - asfloat(CB0_m[53u].x), TEXCOORD.y - asfloat(CB0_m[53u].y)); float2 _675 = float2(dp2_f32(float2(asfloat(CB0_m[55u].x), asfloat(CB0_m[55u].y)), _661) * asfloat(CB0_m[53u].z), dp2_f32(float2(asfloat(CB0_m[55u].z), asfloat(CB0_m[55u].w)), _661) * asfloat(CB0_m[53u].w)); - float _685 = max((dp2_f32(_675, _675) - asfloat(CB0_m[56u].x)) * asfloat(CB0_m[56u].w) * CUSTOM_VIGNETTE, 0.0f); + float _685 = max((dp2_f32(_675, _675) - asfloat(CB0_m[56u].x)) * asfloat(CB0_m[56u].w) * CUSTOM_VIGNETTE, 0.0f); float _697 = (_685 < 1.0f) ? (1.0f - exp2(_685 * (-10.0f))) : ((((_685 - 1.0f) > 0.0f) ? exp2((_685 - 2.0f) * 10.0f) : 0.0f) + 0.9980499744415283203125f); float _711 = asfloat(CB0_m[54u].w); bool _721 = CB0_m[54u].w != 0u; diff --git a/src/games/rdr2/lut/tm_no-blur_0xF039556F.ps_5_1.hlsl b/src/games/rdr2/lut/tm_no-blur_0xF039556F.ps_5_1.hlsl new file mode 100644 index 0000000000..8539d5aaeb --- /dev/null +++ b/src/games/rdr2/lut/tm_no-blur_0xF039556F.ps_5_1.hlsl @@ -0,0 +1,370 @@ +#include "../common.hlsli" + +struct anon_m { + int4 _m0; + float4 _m1; + float4 _m2; + float2 _m3; + uint4 _m4; + uint4 _m5; + uint4 _m6; + uint4 _m7; + uint4 _m8; + uint4 _m9; + uint4 _m10; + uint4 _m11; + uint4 _m12; + uint4 _m13; + uint4 _m14; + uint _m15; +}; + +cbuffer CB0_buf : register(b16, space0) { + uint4 CB0_m[88] : packoffset(c0); +}; + +cbuffer CB1_buf : register(b20, space0) { + uint4 CB1_m0 : packoffset(c0); + uint2 CB1_m1 : packoffset(c1); + float2 CB1_m2 : packoffset(c1.z); + float4 CB1_m3 : packoffset(c2); + float4 CB1_m4 : packoffset(c3); +}; + +ByteAddressBuffer T0 : register(t2, space0); +ByteAddressBuffer T1 : register(t3, space0); +ByteAddressBuffer T15 : register(t118, space0); +SamplerState S0 : register(s0, space0); +SamplerState S1 : register(s2, space0); +SamplerState S2 : register(s8, space0); +Texture2DArray T2 : register(t25, space0); +Texture2D T3 : register(t44, space0); +Texture2D T4 : register(t78, space0); +Texture2D T5 : register(t81, space0); +Texture1D T6 : register(t89, space0); +Texture2D T7 : register(t90, space0); +Texture2D T8 : register(t100, space0); +Texture2D T9 : register(t101, space0); +Texture2D T10 : register(t106, space0); +Texture2D T11 : register(t107, space0); +Texture2D T12 : register(t109, space0); +Texture2D T13 : register(t111, space0); +Buffer T14 : register(t116, space0); + +static float4 gl_FragCoord; +static float4 TEXCOORD; +static float TEXCOORD1; +static float4 SV_Target; + +struct SPIRV_Cross_Input { + float4 gl_FragCoord : SV_Position; + float4 TEXCOORD : TEXCOORD; + float TEXCOORD1 : TEXCOORD1; +}; + +struct SPIRV_Cross_Output { + float4 SV_Target : SV_Target0; +}; + +float dp3_f32(float3 a, float3 b) { + precise float _234 = a.x * b.x; + return mad(a.z, b.z, mad(a.y, b.y, _234)); +} + +float dp2_f32(float2 a, float2 b) { + precise float _223 = a.x * b.x; + return mad(a.y, b.y, _223); +} + +uint cvt_f32_u32(float v) { + return (v > 4294967040.0f) ? 4294967295u : uint(max(v, 0.0f)); +} + +void frag_main() { + float2 _250 = float2(TEXCOORD.x, TEXCOORD.y); + float4 _253 = T7.Sample(S2, _250); + float _261 = asfloat(T0.Load(16)); + float _262 = _253.x * _261; + float _263 = _253.y * _261; + float _264 = _253.z * _261; + float4 _266 = T14.Load(0u); + float _267 = _266.x; + float _268 = _266.y; + float _269 = _266.z; + float4 _270 = T14.Load(1u); + float _271 = _270.x; + float _272 = _270.y; + float _273 = _270.z; + float _274 = _270.w; + float4 _276 = T3.Load(int3(uint2(0u, 0u), 0u)); + float _277 = _276.x; + bool _309; + float _310; + float _311; + float _312; + if (CB0_m[64u].x != 0u) { + float4 _295 = T12.Sample(S2, _250); + float _296 = _295.x; + float _297 = _295.y; + float _298 = _295.z; + float _299 = _295.w; + bool _301 = (_299 + 9.9999997473787516355514526367188e-05f) >= 1.0f; + float _302 = 1.0f - _299; + _309 = _301; + _310 = _301 ? _298 : mad(_302, _264, _298); + _311 = _301 ? _297 : mad(_302, _263, _297); + _312 = _301 ? _296 : mad(_302, _262, _296); + } else { + _309 = false; + _310 = _264; + _311 = _263; + _312 = _262; + } + float _316 = min(_277 * _312, (UNCLAMP_HIGHLIGHTS != 0.f) ? renodx::math::FLT32_MAX : 65504.0f); + float _317 = min(_277 * _311, (UNCLAMP_HIGHLIGHTS != 0.f) ? renodx::math::FLT32_MAX : 65504.0f); + float _318 = min(_277 * _310, (UNCLAMP_HIGHLIGHTS != 0.f) ? renodx::math::FLT32_MAX : 65504.0f); + bool _319 = !_309; + float _482; + float _483; + float _484; + float _485; + if (_319) { + float _399; + if (CB0_m[73u].x != 0u) { + float4 _332 = T5.Sample(S1, _250); + float _347 = clamp(dp3_f32(float3(_277 * _332.x, _277 * _332.y, _277 * _332.z), float3(0.300000011920928955078125f, 0.589999973773956298828125f, 0.10999999940395355224609375f)), asfloat(CB0_m[75u].z), asfloat(CB0_m[75u].w)); + float _372 = asfloat(CB0_m[69u].x); + float _375 = asfloat(CB0_m[69u].y); + float _376 = clamp(mad(_347, asfloat(CB0_m[75u].y), mad(log2(_347 + asfloat(CB0_m[75u].x)) * asfloat(CB0_m[73u].y), 0.693147182464599609375f, asfloat(CB0_m[73u].z)) - 10.0f) + asfloat(CB0_m[68u].w), _372, _375); + _399 = exp2(mad(clamp(asfloat(CB0_m[73u].x), 0.0f, 1.0f), clamp(_372, mad(abs(_376) * asfloat(CB0_m[69u].z), float(int(((_376 < 0.0f) ? 4294967295u : 0u) + uint(_376 > 0.0f))), _376), _375) - TEXCOORD1, TEXCOORD1)); + } else { + _399 = TEXCOORD.z; + } + float2 _416 = float2(TEXCOORD.x - asfloat(CB0_m[53u].x), TEXCOORD.y - asfloat(CB0_m[53u].y)); + float2 _430 = float2(dp2_f32(float2(asfloat(CB0_m[55u].x), asfloat(CB0_m[55u].y)), _416) * asfloat(CB0_m[53u].z), dp2_f32(float2(asfloat(CB0_m[55u].z), asfloat(CB0_m[55u].w)), _416) * asfloat(CB0_m[53u].w)); + float _440 = max((dp2_f32(_430, _430) - asfloat(CB0_m[56u].x)) * asfloat(CB0_m[56u].w) * CUSTOM_VIGNETTE, 0.0f); + float _452 = (_440 < 1.0f) ? (1.0f - exp2(_440 * (-10.0f))) : ((((_440 - 1.0f) > 0.0f) ? exp2((_440 - 2.0f) * 10.0f) : 0.0f) + 0.9980499744415283203125f); + float _466 = asfloat(CB0_m[54u].w); + bool _476 = CB0_m[54u].w != 0u; + _482 = _399; + _483 = _476 ? mad(mad(_466, asfloat(CB0_m[54u].z) * _318, -_318), _452, _318) : _318; + _484 = _476 ? mad(mad(_466, asfloat(CB0_m[54u].y) * _317, -_317), _452, _317) : _317; + _485 = _476 ? mad(mad(asfloat(CB0_m[54u].x) * _316, _466, -_316), _452, _316) : _316; + } else { + _482 = TEXCOORD.z; + _483 = _318; + _484 = _317; + _485 = _316; + } + float _495 = clamp(clamp(TEXCOORD.y * asfloat(CB0_m[60u].y), 0.0f, 1.0f) + asfloat(CB0_m[57u].w), 0.0f, 1.0f); + float _510 = clamp(clamp(clamp(TEXCOORD.y - asfloat(CB0_m[59u].w), 0.0f, 1.0f) * asfloat(CB0_m[60u].x), 0.0f, 1.0f) - asfloat(CB0_m[58u].w), 0.0f, 1.0f); + float _516 = asfloat(CB0_m[57u].x); + float _517 = asfloat(CB0_m[57u].y); + float _518 = asfloat(CB0_m[57u].z); + float _524 = asfloat(CB0_m[59u].x); + float _525 = asfloat(CB0_m[59u].y); + float _526 = asfloat(CB0_m[59u].z); + float _530 = mad(_495, _524 - _516, _516); + float _531 = mad(_495, _525 - _517, _517); + float _532 = mad(_495, _526 - _518, _518); + float _553 = mad(TEXCOORD.y, mad(_510, asfloat(CB0_m[58u].x) - _524, _524) - _530, _530) * _485; + float _554 = _484 * mad(TEXCOORD.y, mad(_510, asfloat(CB0_m[58u].y) - _525, _525) - _531, _531); + float _555 = _483 * mad(TEXCOORD.y, mad(_510, asfloat(CB0_m[58u].z) - _526, _526) - _532, _532); + float _563 = (CB1_m1.x != 0u) ? CB1_m3.z : _269; + float _566 = _482 / CB1_m2.x; + float _570 = max(_553 * _566, 0.0f); + float _571 = max(_566 * _554, 0.0f); + float _572 = max(_566 * _555, 0.0f); + float _600 = max(_553 * _482, 0.0f); + float _601 = max(_482 * _554, 0.0f); + float _602 = max(_482 * _555, 0.0f); + bool _629 = CB1_m0.w != 0u; + + float _630, _631, _632; +#if 0 + _630 = _629 ? (CB1_m2.x * (((mad(_570, mad(_267, _570, _271), _272) / mad(_570, mad(_267, _570, _268), _273)) - _274) * _563)) : clamp(_269 * ((mad(_600, mad(_267, _600, _271), _272) / mad(_600, mad(_267, _600, _268), _273)) - _274), 0.0f, 1.0f); + _631 = _629 ? (CB1_m2.x * (_563 * ((mad(mad(_267, _571, _271), _571, _272) / mad(mad(_267, _571, _268), _571, _273)) - _274))) : clamp(_269 * ((mad(mad(_267, _601, _271), _601, _272) / mad(mad(_267, _601, _268), _601, _273)) - _274), 0.0f, 1.0f); + _632 = _629 ? (CB1_m2.x * (_563 * ((mad(mad(_267, _572, _271), _572, _272) / mad(mad(_267, _572, _268), _572, _273)) - _274))) : clamp(_269 * ((mad(mad(_267, _602, _271), _602, _272) / mad(mad(_267, _602, _268), _602, _273)) - _274), 0.0f, 1.0f); +#else + ApplyToneMap(_629, + float3(_600, _601, _602), + float3(_570, _571, _572), + _630, _631, _632, + CB1_m2.x, + _267, _268, _269, + _271, _272, _273, _274, + _563); + +#endif + float _705; + float _706; + float _707; + if (_319) { + float _702; + float _703; + float _704; + if (CB0_m[50u].w != 0u) { + float2 _655 = float2(TEXCOORD.x - asfloat(CB0_m[49u].x), TEXCOORD.y - asfloat(CB0_m[49u].y)); + float2 _669 = float2(dp2_f32(float2(asfloat(CB0_m[51u].x), asfloat(CB0_m[51u].y)), _655) * asfloat(CB0_m[49u].z), dp2_f32(float2(asfloat(CB0_m[51u].z), asfloat(CB0_m[51u].w)), _655) * asfloat(CB0_m[49u].w)); + float _687 = T6.Sample(S1, clamp((dp2_f32(_669, _669) - asfloat(CB0_m[52u].x)) * asfloat(CB0_m[52u].w), 0.0f, 1.0f)).w * asfloat(CB0_m[50u].w); + _702 = mad(_687, asfloat(CB0_m[50u].z) - _632, _632); + _703 = mad(_687, asfloat(CB0_m[50u].y) - _631, _631); + _704 = mad(_687, asfloat(CB0_m[50u].x) - _630, _630); + } else { + _702 = _632; + _703 = _631; + _704 = _630; + } + _705 = _702; + _706 = _703; + _707 = _704; + } else { + _705 = _632; + _706 = _631; + _707 = _630; + } + bool _743 = _629 && (CB1_m0.z == 0u); + + float _744, _745, _746; +#if 0 + float _744 = _743 ? _707 : ((_707 < 0.003130800090730190277099609375f) ? (CB1_m3.w * _707) : mad(exp2(CB1_m4.x * log2(_707)), CB1_m4.y, -CB1_m4.z)); + float _745 = _743 ? _706 : ((_706 < 0.003130800090730190277099609375f) ? (CB1_m3.w * _706) : mad(CB1_m4.y, exp2(CB1_m4.x * log2(_706)), -CB1_m4.z)); + float _746 = _743 ? _705 : ((_705 < 0.003130800090730190277099609375f) ? (CB1_m3.w * _705) : mad(CB1_m4.y, exp2(CB1_m4.x * log2(_705)), -CB1_m4.z)); +#else + EncodeForLUT(_743, + _707, _706, _705, + CB1_m3.w, CB1_m4.x, CB1_m4.y, CB1_m4.z, + _744, _745, _746); +#endif + float3 _747 = float3(_744, _745, _746); + float _752 = max(dp3_f32(float3(0.265399992465972900390625f, 0.67040002346038818359375f, 0.06419999897480010986328125f), _747), 0.0f); + float _758 = mad(((max(dp3_f32(float3(0.02480000071227550506591796875f, 0.1247999966144561767578125f, 0.85039997100830078125f), _747), 0.0f) + _752) / max(dp3_f32(float3(0.514900028705596923828125f, 0.324400007724761962890625f, 0.1606999933719635009765625f), _747), 0.00999999977648258209228515625f)) + 1.0f, 1.33000004291534423828125f, -1.67999994754791259765625f) * _752; + float _772 = asfloat(CB0_m[83u].w); + float _786 = clamp(mad(0.039999999105930328369140625f / (dp3_f32(float3(_277 * _262, _277 * _263, _277 * _264), float3(0.300000011920928955078125f, 0.589999973773956298828125f, 0.10999999940395355224609375f)) + 0.039999999105930328369140625f), asfloat(CB0_m[84u].x), asfloat(CB0_m[84u].y)), 0.0f, 1.0f); + float _790 = mad(_786, clamp((_758 * asfloat(CB0_m[83u].x)) * _772, 0.0f, 1.0f) - _744, _744); + float _791 = mad(_786, clamp(_772 * (_758 * asfloat(CB0_m[83u].y)), 0.0f, 1.0f) - _745, _745); + float _792 = mad(_786, clamp(_772 * (_758 * asfloat(CB0_m[83u].z)), 0.0f, 1.0f) - _746, _746); + float _848; + float _849; + float _850; + if (CB0_m[86u].w != 0u) { + float _802 = asfloat(CB0_m[87u].x); + float _803 = asfloat(CB0_m[87u].w); + float _818 = asfloat(CB0_m[86u].z); + float4 _837 = T13.Sample(S1, float2((((_818 * (TEXCOORD.x - 0.5f)) / mad(TEXCOORD.y, asfloat(CB0_m[87u].z) - _803, _803)) - asfloat(CB0_m[86u].x)) + 0.5f, (((_818 * (TEXCOORD.y - 0.5f)) / mad(TEXCOORD.x, asfloat(CB0_m[87u].y) - _802, _802)) - asfloat(CB0_m[86u].y)) + 0.5f)); + float _844 = asfloat(CB0_m[86u].w); + _848 = mad(_837.x - _790, _844, _790); + _849 = mad(_844, _837.y - _791, _791); + _850 = mad(_844, _837.z - _792, _792); + } else { + _848 = _790; + _849 = _791; + _850 = _792; + } + float _1052; + float _1053; + float _1054; + if (_319) { + float _859 = max(max(max(_850, _849), _848), 9.9999997473787516355514526367188e-05f); + float _870 = ((CB1_m1.y == 0u) && _743) ? 1.0f : (((_859 > CB1_m2.y) ? mad(_859, CB1_m3.x, CB1_m3.y) : _859) / _859); + +#if 1 + float3 color_sdr, color_hdr; + PrepareForLUT(_848, _849, _850, color_sdr, color_hdr, _870); +#endif + + float _871 = _850 * _870; + float _876 = floor(_871 * 14.99989986419677734375f); + float _878 = mad(_871, 15.0f, -_876); + float _880 = (_876 * 0.0625f) + ((_848 * _870) * 0.05859375f); + float _882 = mad(_849 * _870, 0.9375f, 0.03125f); + float4 _888 = T10.Sample(S1, float2(_880 + 0.001953125f, _882)); + float _889 = _888.x; + float _890 = _888.y; + float _891 = _888.z; + float4 _894 = T10.Sample(S1, float2(_880 + 0.064453125f, _882)); + float _901 = mad(_878, _894.x - _889, _889); + float _902 = mad(_878, _894.y - _890, _890); + float _903 = mad(_878, _894.z - _891, _891); + float _1046; + float _1047; + float _1048; + if (int(T15.Load(0)) > 0) { + float _924 = asfloat(CB0_m[0u].z) / ((asfloat(CB0_m[0u].w) + 1.0f) - T4.SampleLevel(S0, _250, 0.0f).x); + float _953 = clamp(((_924 < asfloat(T15.Load4(16)).z) ? clamp((_924 - asfloat(T15.Load4(16)).x) * asfloat(T15.Load4(16)).y, 0.0f, 1.0f) : (1.0f - clamp((_924 - asfloat(T15.Load4(16)).z) * asfloat(T15.Load4(16)).w, 0.0f, 1.0f))) + asfloat(T15.Load4(32)).x, 0.0f, 1.0f); + float _956 = floor(_903 * 14.99989986419677734375f); + float _958 = mad(_903, 15.0f, -_956); + float _960 = (_901 * 0.05859375f) + (_956 * 0.0625f); + float _962 = mad(_902, 0.9375f, 0.03125f); + float4 _967 = T8.Sample(S1, float2(_960 + 0.001953125f, _962)); + float _968 = _967.x; + float _969 = _967.y; + float _970 = _967.z; + float4 _973 = T8.Sample(S1, float2(_960 + 0.064453125f, _962)); + float _986 = mad(_953, mad(_958, _973.x - _968, _968) - _901, _901); + float _987 = mad(mad(_973.y - _969, _958, _969) - _902, _953, _902); + float _988 = mad(mad(_973.z - _970, _958, _970) - _903, _953, _903); + float _999 = clamp(((asfloat(T15.Load4(32)).w > _924) ? clamp(asfloat(T15.Load4(32)).z * (_924 - asfloat(T15.Load4(32)).y), 0.0f, 1.0f) : (1.0f - clamp((_924 - asfloat(T15.Load4(32)).w) * asfloat(T15.Load2(48)).x, 0.0f, 1.0f))) + asfloat(T15.Load2(48)).y, 0.0f, 1.0f); + float _1002 = floor(_988 * 14.99989986419677734375f); + float _1004 = mad(_988, 15.0f, -_1002); + float _1006 = (_986 * 0.05859375f) + (_1002 * 0.0625f); + float _1008 = mad(_987, 0.9375f, 0.03125f); + float4 _1013 = T9.Sample(S1, float2(_1006 + 0.001953125f, _1008)); + float _1014 = _1013.x; + float _1015 = _1013.y; + float _1016 = _1013.z; + float4 _1019 = T9.Sample(S1, float2(_1006 + 0.064453125f, _1008)); + float _1042 = dp3_f32(float3(T11.Sample(S1, _250).xyz), float3(0.2125999927520751953125f, 0.715200006961822509765625f, 0.072200000286102294921875f)); + _1046 = mad((mad(_1019.z - _1016, _1004, _1016) - _988) * _999, _1042, _988); + _1047 = mad((mad(_1019.y - _1015, _1004, _1015) - _987) * _999, _1042, _987); + _1048 = mad(_999 * (mad(_1004, _1019.x - _1014, _1014) - _986), _1042, _986); + } else { + _1046 = _903; + _1047 = _902; + _1048 = _901; + } + _1052 = _1046 / _870; + _1053 = _1047 / _870; + _1054 = _1048 / _870; + +#if 1 + UpgradeLUTOutput(color_hdr, color_sdr, _1054, _1053, _1052); +#endif + + } else { + _1052 = _850; + _1053 = _849; + _1054 = _848; + } + float _1056 = dp3_f32(float3(_1054, _1053, _1052), float3(0.2989999949932098388671875f, 0.58700001239776611328125f, 0.114000000059604644775390625f)); + float _1058 = max(max(_1052, _1053), _1054); + bool _1061 = CB0_m[41u].w != 0u; + float _1095 = asfloat(CB0_m[42u].w); + float _1107 = asfloat(CB0_m[39u].x); + float _1108 = asfloat(CB0_m[39u].y); + float _1109 = asfloat(CB0_m[39u].z); + float _1141 = mad(T2.Load(int4(uint3(uint2(cvt_f32_u32(gl_FragCoord.x) & 63u, cvt_f32_u32(gl_FragCoord.y) & 63u), T1.Load(1840) & 31u), 0u)).x, 2.0f, -1.0f); + float _1154 = _629 ? (float(int(((_1141 < 0.0f) ? 4294967295u : 0u) + uint(_1141 > 0.0f))) * (1.0f - sqrt(1.0f - abs(_1141)))) : _1141; + float _1155 = mad(mad(exp2(log2(clamp(((_1061 ? _1054 : _1058) - asfloat(CB0_m[42u].x)) * asfloat(CB0_m[41u].x), 0.0f, 1.0f)) * _1095), asfloat(CB0_m[40u].x) - _1107, _1107), _1154, _1054); + float _1156 = mad(mad(asfloat(CB0_m[40u].y) - _1108, exp2(log2(clamp(((_1061 ? _1053 : _1058) - asfloat(CB0_m[42u].y)) * asfloat(CB0_m[41u].y), 0.0f, 1.0f)) * _1095), _1108), _1154, _1053); + float _1157 = mad(mad(asfloat(CB0_m[40u].z) - _1109, exp2(log2(clamp(((_1061 ? _1052 : _1058) - asfloat(CB0_m[42u].z)) * asfloat(CB0_m[41u].z), 0.0f, 1.0f)) * _1095), _1109), _1154, _1052); + SV_Target.x = _629 ? _1155 : (_1155); + SV_Target.y = _629 ? _1156 : (_1156); + SV_Target.z = _629 ? _1157 : (_1157); + SV_Target.w = _629 ? _1056 : clamp(_1056, 0.0f, 1.0f); + +#if 1 + SV_Target.rgb = FinalizeTonemap(SV_Target.rgb, TEXCOORD.xy); +#endif +} + +SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { + gl_FragCoord = stage_input.gl_FragCoord; + gl_FragCoord.w = 1.0 / gl_FragCoord.w; + TEXCOORD = stage_input.TEXCOORD; + TEXCOORD1 = stage_input.TEXCOORD1; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.SV_Target = SV_Target; + return stage_output; +} From 4ad7920352dc4c531c73f2c56b2a4b6e450522bf Mon Sep 17 00:00:00 2001 From: Musa Haji Date: Sat, 27 Sep 2025 19:02:30 -0400 Subject: [PATCH 08/30] fix(rdr2): clamp negatives after tonemap --- src/games/rdr2/common.hlsli | 1 + 1 file changed, 1 insertion(+) diff --git a/src/games/rdr2/common.hlsli b/src/games/rdr2/common.hlsli index 8dc5a93172..8f276c4476 100644 --- a/src/games/rdr2/common.hlsli +++ b/src/games/rdr2/common.hlsli @@ -266,6 +266,7 @@ void ApplyToneMap(inout bool hdr_enabled, hdr_tonemap = lerp(lum_tonemap, untonemapped_mid_gray_shifted, saturate(renodx::color::y::from::BT709(lum_tonemap))); hdr_tonemap = HueAndChrominanceOKLab(hdr_tonemap, ch_tonemap, untonemapped_mid_gray_shifted, RENODX_TONE_MAP_HUE_CORRECTION, RENODX_TONE_MAP_BLOWOUT_RESTORATION); } + hdr_tonemap = max(0, hdr_tonemap); _875 = hdr_tonemap.r, _876 = hdr_tonemap.g, _877 = hdr_tonemap.b; } From 85f990acc6e8a7391f0b90e10eaa934ea362496a Mon Sep 17 00:00:00 2001 From: Musa Haji Date: Mon, 29 Sep 2025 05:40:09 -0400 Subject: [PATCH 09/30] feat(rdr2): add another tm shader (not finished yet) --- ...D2.ps_5_1.hlslx => 0xFC787CD2.ps_5_1.hlsl} | 70 ++++++++++--------- 1 file changed, 36 insertions(+), 34 deletions(-) rename src/games/rdr2/lut/{0xFC787CD2.ps_5_1.hlslx => 0xFC787CD2.ps_5_1.hlsl} (93%) diff --git a/src/games/rdr2/lut/0xFC787CD2.ps_5_1.hlslx b/src/games/rdr2/lut/0xFC787CD2.ps_5_1.hlsl similarity index 93% rename from src/games/rdr2/lut/0xFC787CD2.ps_5_1.hlslx rename to src/games/rdr2/lut/0xFC787CD2.ps_5_1.hlsl index edaac82bf2..fcecb1b4ea 100644 --- a/src/games/rdr2/lut/0xFC787CD2.ps_5_1.hlslx +++ b/src/games/rdr2/lut/0xFC787CD2.ps_5_1.hlsl @@ -1,3 +1,5 @@ +#include "../common.hlsli" + struct anon_m { int4 _m0; float4 _m1; @@ -17,11 +19,11 @@ struct anon_m { uint _m15; }; -cbuffer CB0_buf : register(b0, space0) { +cbuffer CB0_buf : register(b16, space0) { uint4 CB0_m[88] : packoffset(c0); }; -cbuffer CB1_buf : register(b1, space0) { +cbuffer CB1_buf : register(b20, space0) { uint4 CB1_m0 : packoffset(c0); uint2 CB1_m1 : packoffset(c1); float2 CB1_m2 : packoffset(c1.z); @@ -29,32 +31,32 @@ cbuffer CB1_buf : register(b1, space0) { float4 CB1_m4 : packoffset(c3); }; -ByteAddressBuffer T0 : register(t6, space0); -ByteAddressBuffer T1 : register(t7, space0); -ByteAddressBuffer T21 : register(t27, space0); -SamplerState S0 : register(s2, space0); -SamplerState S1 : register(s3, space0); -SamplerState S2 : register(s4, space0); -SamplerState S3 : register(s5, space0); -Texture2DArray T2 : register(t8, space0); -Texture2D T3 : register(t9, space0); -Texture2D T4 : register(t10, space0); -Texture2D T5 : register(t11, space0); -Texture2D T6 : register(t12, space0); -Texture1D T7 : register(t13, space0); -Texture2D T8 : register(t14, space0); -Texture2D T9 : register(t15, space0); -Texture2D T10 : register(t16, space0); -Texture2D T11 : register(t17, space0); -Texture2D T12 : register(t18, space0); -Texture2D T13 : register(t19, space0); -Texture2D T14 : register(t20, space0); -Texture2D T15 : register(t21, space0); -Texture2D T16 : register(t22, space0); -Texture2D T17 : register(t23, space0); -Texture2D T18 : register(t24, space0); -Texture2D T19 : register(t25, space0); -Buffer T20 : register(t26, space0); +ByteAddressBuffer T0 : register(t2, space0); +ByteAddressBuffer T1 : register(t3, space0); +ByteAddressBuffer T21 : register(t118, space0); +SamplerState S0 : register(s0, space0); +SamplerState S1 : register(s1, space0); +SamplerState S2 : register(s2, space0); +SamplerState S3 : register(s8, space0); +Texture2DArray T2 : register(t25, space0); +Texture2D T3 : register(t44, space0); +Texture2D T4 : register(t77, space0); +Texture2D T5 : register(t78, space0); +Texture2D T6 : register(t81, space0); +Texture1D T7 : register(t89, space0); +Texture2D T8 : register(t90, space0); +Texture2D T9 : register(t93, space0); +Texture2D T10 : register(t94, space0); +Texture2D T11 : register(t95, space0); +Texture2D T12 : register(t100, space0); +Texture2D T13 : register(t101, space0); +Texture2D T14 : register(t106, space0); +Texture2D T15 : register(t107, space0); +Texture2D T16 : register(t109, space0); +Texture2D T17 : register(t111, space0); +Texture2D T18 : register(t113, space0); +Texture2D T19 : register(t114, space0); +Buffer T20 : register(t116, space0); static float4 gl_FragCoord; static float4 TEXCOORD; @@ -62,9 +64,9 @@ static float TEXCOORD1; static float4 SV_Target; struct SPIRV_Cross_Input { - float4 TEXCOORD : TEXCOORD1; - float TEXCOORD1 : TEXCOORD2; float4 gl_FragCoord : SV_Position; + float4 TEXCOORD : TEXCOORD; + float TEXCOORD1 : TEXCOORD1; }; struct SPIRV_Cross_Output { @@ -222,9 +224,9 @@ void frag_main() { _590 = _544; _591 = _543; } - float _595 = min(_558 * _591, 65504.0f); - float _596 = min(_558 * _590, 65504.0f); - float _597 = min(_558 * _589, 65504.0f); + float _595 = min(_558 * _591, (UNCLAMP_HIGHLIGHTS != 0.f) ? renodx::math::FLT32_MAX : 65504.0f); + float _596 = min(_558 * _590, (UNCLAMP_HIGHLIGHTS != 0.f) ? renodx::math::FLT32_MAX : 65504.0f); + float _597 = min(_558 * _589, (UNCLAMP_HIGHLIGHTS != 0.f) ? renodx::math::FLT32_MAX : 65504.0f); bool _598 = !_588; float _795; float _796; @@ -250,7 +252,7 @@ void frag_main() { float _713 = max(mad(_704, _707, _597), _597 * 0.5f); float2 _729 = float2(TEXCOORD.x - asfloat(CB0_m[53u].x), TEXCOORD.y - asfloat(CB0_m[53u].y)); float2 _743 = float2(dp2_f32(float2(asfloat(CB0_m[55u].x), asfloat(CB0_m[55u].y)), _729) * asfloat(CB0_m[53u].z), dp2_f32(float2(asfloat(CB0_m[55u].z), asfloat(CB0_m[55u].w)), _729) * asfloat(CB0_m[53u].w)); - float _753 = max((dp2_f32(_743, _743) - asfloat(CB0_m[56u].x)) * asfloat(CB0_m[56u].w), 0.0f); + float _753 = max((dp2_f32(_743, _743) - asfloat(CB0_m[56u].x)) * asfloat(CB0_m[56u].w) * CUSTOM_VIGNETTE, 0.0f); float _765 = (_753 < 1.0f) ? (1.0f - exp2(_753 * (-10.0f))) : ((((_753 - 1.0f) > 0.0f) ? exp2((_753 - 2.0f) * 10.0f) : 0.0f) + 0.9980499744415283203125f); float _779 = asfloat(CB0_m[54u].w); bool _789 = CB0_m[54u].w != 0u; From 6446afb74cbe56220f703a81db8520ab7cf01eec Mon Sep 17 00:00:00 2001 From: Musa Haji Date: Mon, 3 Nov 2025 00:44:24 -0500 Subject: [PATCH 10/30] feat(rdr2): overhaul tonemap, color grade, defaults, presets; add gamut compression - use hermite spline by max channel - use v3 highlights and shadows - change defaults - remove recommended and preserve shadow detail presets - compress to BT.709 in tonemap shaders and compress to BT.2020 in output shaders --- src/games/rdr2/addon.cpp | 71 +---- src/games/rdr2/common.hlsli | 268 ++++++++++-------- .../calibration_image_0x832AC1BB.ps_5_1.hlsl | 4 +- 3 files changed, 154 insertions(+), 189 deletions(-) diff --git a/src/games/rdr2/addon.cpp b/src/games/rdr2/addon.cpp index afb16f81fe..19c65ef560 100644 --- a/src/games/rdr2/addon.cpp +++ b/src/games/rdr2/addon.cpp @@ -28,24 +28,12 @@ ShaderInjectData shader_injection; const std::unordered_map MATCH_SDR_VALUES = { {"GammaCorrection", 1.f}, {"ToneMapScaling", 1.f}, - {"ToneMapHueCorrection", 0.f}, + {"ColorGradeHighlights", 50.f}, + {"ColorGradeShadows", 50.f}, {"UnclampLighting", 0.f}, {"UseSRGBLUTEncoding", 0.f}, }; -const std::unordered_map RECOMMENDED_VALUES = { - {"ColorGradeShadows", 55.f}, -}; - -const std::unordered_map PRESERVE_SHADOW_DETAIL = { - {"GammaCorrection", 0.f}, - {"ColorGradeShadows", 55.f}, - {"ColorGradeContrast", 51.f}, - {"ColorGradeHighlightSaturation", 55.f}, - {"ColorGradeFlare2", 33.f}, - {"UseSRGBLUTEncoding", 0.f}, -}; - renodx::utils::settings::Settings settings = { new renodx::utils::settings::Setting{ .key = "ToneMapType", @@ -115,7 +103,7 @@ renodx::utils::settings::Settings settings = { new renodx::utils::settings::Setting{ .key = "ToneMapHueCorrection", .binding = &shader_injection.tone_map_hue_correction, - .default_value = 20.f, + .default_value = 0.f, .label = "Hue Correction", .section = "Tone Mapping", .tooltip = "Hue retention strength.", @@ -127,7 +115,7 @@ renodx::utils::settings::Settings settings = { new renodx::utils::settings::Setting{ .key = "ToneMapBlowoutRestoration", .binding = &shader_injection.tone_map_blowout_restoration, - .default_value = 100.f, + .default_value = 70.f, .label = "Blowout Restoration", .section = "Tone Mapping", .tooltip = "Restores color blowout from per-channel grading.", @@ -159,7 +147,7 @@ renodx::utils::settings::Settings settings = { new renodx::utils::settings::Setting{ .key = "ColorGradeHighlights", .binding = &shader_injection.tone_map_highlights, - .default_value = 50.f, + .default_value = 54.f, .label = "Highlights", .section = "Color Grading", .max = 100.f, @@ -169,7 +157,7 @@ renodx::utils::settings::Settings settings = { new renodx::utils::settings::Setting{ .key = "ColorGradeShadows", .binding = &shader_injection.tone_map_shadows, - .default_value = 50.f, + .default_value = 75.f, .label = "Shadows", .section = "Color Grading", .max = 100.f, @@ -229,17 +217,6 @@ renodx::utils::settings::Settings settings = { .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, .parse = [](float value) { return value * 0.02f; }, }, - new renodx::utils::settings::Setting{ - .key = "ColorGradeFlare2", - .binding = &shader_injection.tone_map_flare2, - .default_value = 0.f, - .label = "Flare 2", - .section = "Color Grading", - .tooltip = "Flare/Glare Compensation 2, operates by luminance with per channel chrominance, adds saturation in shadows", - .max = 100.f, - .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, - .parse = [](float value) { return value * 0.02f; }, - }, new renodx::utils::settings::Setting{ .key = "ColorGradeLUTStrength", .binding = &shader_injection.color_grade_lut_strength, @@ -318,42 +295,6 @@ renodx::utils::settings::Settings settings = { } }, }, - new renodx::utils::settings::Setting{ - .value_type = renodx::utils::settings::SettingValueType::BUTTON, - .label = "Recommended Settings", - .section = "Options", - .group = "button-line-1", - .on_change = []() { - for (auto* setting : settings) { - if (setting->key.empty()) continue; - if (!setting->can_reset) continue; - - if (RECOMMENDED_VALUES.contains(setting->key)) { - renodx::utils::settings::UpdateSetting(setting->key, RECOMMENDED_VALUES.at(setting->key)); - } else { - renodx::utils::settings::UpdateSetting(setting->key, setting->default_value); - } - } - }, - }, - new renodx::utils::settings::Setting{ - .value_type = renodx::utils::settings::SettingValueType::BUTTON, - .label = "Preserve Shadow Detail", - .section = "Options", - .group = "button-line-1", - .on_change = []() { - for (auto* setting : settings) { - if (setting->key.empty()) continue; - if (!setting->can_reset) continue; - - if (PRESERVE_SHADOW_DETAIL.contains(setting->key)) { - renodx::utils::settings::UpdateSetting(setting->key, PRESERVE_SHADOW_DETAIL.at(setting->key)); - } else { - renodx::utils::settings::UpdateSetting(setting->key, setting->default_value); - } - } - }, - }, new renodx::utils::settings::Setting{ .value_type = renodx::utils::settings::SettingValueType::BUTTON, .label = "Discord", diff --git a/src/games/rdr2/common.hlsli b/src/games/rdr2/common.hlsli index 8f276c4476..d8bbd7cbe5 100644 --- a/src/games/rdr2/common.hlsli +++ b/src/games/rdr2/common.hlsli @@ -1,5 +1,37 @@ #include "./shared.h" +float Highlights(float x, float highlights, float mid_gray) { + if (highlights == 1.f) return x; + + if (highlights > 1.f) { + // value = max(x, lerp(x, mid_gray * pow(x / mid_gray, highlights), x)); + return max(x, + lerp(x, mid_gray * pow(x / mid_gray, highlights), + renodx::tonemap::ExponentialRollOff(x, 1.f, 1.1f))); + } else { // highlights < 1.f + x /= mid_gray; + return lerp(x, pow(x, highlights), step(1.f, x)) * mid_gray; + } +} + +float Shadows(float x, float shadows, float mid_gray) { + if (shadows == 1.f) return x; + + const float ratio = max(renodx::math::DivideSafe(x, mid_gray, 0.f), 0.f); + const float base_term = x * mid_gray; + const float base_scale = renodx::math::DivideSafe(base_term, ratio, 0.f); + + if (shadows > 1.f) { + float raised = x * (1.f + renodx::math::DivideSafe(base_term, pow(ratio, shadows), 0.f)); + float reference = x * (1.f + base_scale); + return max(x, x + (raised - reference)); + } else { // shadows < 1.f + float lowered = x * (1.f - renodx::math::DivideSafe(base_term, pow(ratio, 2.f - shadows), 0.f)); + float reference = x * (1.f - base_scale); + return clamp(x + (lowered - reference), 0.f, x); + } +} + float3 ApplyExposureContrastFlareHighlightsShadowsByLuminance(float3 untonemapped, float y, renodx::color::grade::Config config, float mid_gray = 0.18f) { if (config.exposure == 1.f && config.shadows == 1.f && config.highlights == 1.f && config.contrast == 1.f && config.flare == 0.f) { return untonemapped; @@ -8,52 +40,25 @@ float3 ApplyExposureContrastFlareHighlightsShadowsByLuminance(float3 untonemappe color *= config.exposure; - const float y_normalized = y / mid_gray; - const float highlight_mask = 1.f / mid_gray; - float shadow_mask = 1.f; - if (config.shadows < 1.f) shadow_mask = mid_gray; - // contrast & flare + const float y_normalized = y / mid_gray; float flare = renodx::math::DivideSafe(y_normalized + config.flare, y_normalized, 1.f); float exponent = config.contrast * flare; - const float y_contrasted = pow(y_normalized, exponent); - - // highlights - float y_highlighted = pow(y_contrasted, config.highlights); - y_highlighted = lerp(y_contrasted, y_highlighted, saturate(y_contrasted / highlight_mask)); - + const float y_contrasted = pow(y_normalized, exponent) * mid_gray; + +// highlights +#if 0 + // const float highlights = 1 + (sign(config.highlights - 1) * pow(abs(config.highlights - 1), 10.f)); + // float y_highlighted = renodx::color::grade::Highlights(y_contrasted, config.highlights, mid_gray); +#else + float y_highlighted = Highlights(y_contrasted, config.highlights, mid_gray); +#endif // shadows - float y_shadowed = pow(y_highlighted, -1.f * (config.shadows - 2.f)); - y_shadowed = lerp(y_shadowed, y_highlighted, saturate(y_highlighted / shadow_mask)); + float y_shadowed = Shadows(y_highlighted, config.shadows, mid_gray); - const float y_final = y_shadowed * mid_gray; + const float y_final = y_shadowed; - color *= (y > 0 ? (y_final / y) : 0); - - return color; -} - -float3 ApplyFlareByChrominance(float3 untonemapped, float flare = 0.f, float mid_gray = 0.18f) { - if (flare == 0.f) { - return untonemapped; - } - float3 color = untonemapped; - - // flare - lum - float y = renodx::color::y::from::BT709(untonemapped); - const float y_normalized = y / mid_gray; - float flare_lum = renodx::math::DivideSafe(y_normalized + flare, y_normalized, 1.f); - const float y_flared = pow(y_normalized, flare_lum); - const float y_final = y_flared * mid_gray; - float3 color_lum = renodx::color::correct::Luminance(color, y, y_final); - - // flare - channel - float3 ch_normalized = untonemapped / mid_gray; - float3 flare_ch = renodx::math::DivideSafe(ch_normalized + flare, ch_normalized, 1.f); - const float3 ch_flared = pow(ch_normalized, flare_ch); - float3 color_ch = ch_flared * mid_gray; - - color = renodx::color::correct::Chrominance(color_lum, color_ch); + color = renodx::color::correct::Luminance(color, y, y_final); return color; } @@ -102,13 +107,32 @@ float3 ApplySaturationBlowoutHueCorrectionHighlightSaturation(float3 tonemapped, return color; } +float3 BT709GamutCompressBT2020(float3 color) { + // clamp to AP1 + color = max(0, renodx::color::ap1::from::BT709(color)); + color = renodx::color::bt2020::from::AP1(color); + + // compress to BT.2020 in gamma space + float3 gamma_color = renodx::color::gamma::EncodeSafe(color); + float grayscale = renodx::color::y::from::BT2020(gamma_color.rgb); + float compression_scale = renodx::color::correct::ComputeGamutCompressionScale(gamma_color.rgb, grayscale); + gamma_color = renodx::color::correct::GamutCompress(gamma_color, grayscale, compression_scale); + + // back to BT.709 linear + color = renodx::color::gamma::DecodeSafe(gamma_color); + color = renodx::color::bt709::from::BT2020(color); + + return color; +} + float3 HueAndChrominanceOKLab( float3 incorrect_color, float3 chrominance_reference_color, float3 hue_reference_color, float hue_correct_strength = 1.f, - float clamp_chrominance_loss = 0.f) { - if (hue_correct_strength == 0.f) + float clamp_chrominance_loss = 0.f, + float highlight_saturation = 1.f) { + if (hue_correct_strength == 0.f && highlight_saturation == 1.f) return renodx::color::correct::ChrominanceOKLab(incorrect_color, chrominance_reference_color, 1.f, clamp_chrominance_loss); float3 incorrect_lab = renodx::color::oklab::from::BT709(incorrect_color); @@ -138,40 +162,31 @@ float3 HueAndChrominanceOKLab( incorrect_lab.yz = final_ab; - float3 result = renodx::color::bt709::from::OkLab(incorrect_lab); - return renodx::color::bt709::clamp::AP1(result); -} - -/// Applies Exponential Roll-Off tonemapping using the maximum channel. -/// Used to fit the color into a 0–output_max range for SDR LUT compatibility. -float3 ToneMapMaxCLL(float3 color, float rolloff_start = 0.375f, float output_max = 1.f) { - float peak = max(color.r, max(color.g, color.b)); - peak = min(peak, 100.f); - float log_peak = log2(peak); - - // Apply exponential shoulder in log space - float log_mapped = renodx::tonemap::ExponentialRollOff(log_peak, log2(rolloff_start), log2(output_max)); - float scale = exp2(log_mapped - log_peak); // How much to compress all channels + if (highlight_saturation != 1.f) { + highlight_saturation = -1.f * (highlight_saturation - 1.f); + float y = renodx::color::y::from::BT709(incorrect_color); - return color * scale; -} + float percent_max = saturate(y * 100.f / 10000.f); + // positive = 1 to 0, negative = 1 to 2 + float blowout_strength = 100.f; + float blowout_change = pow(1.f - percent_max, blowout_strength * abs(highlight_saturation)); + if (highlight_saturation < 0) { + blowout_change = (2.f - blowout_change); + } -float ReinhardPiecewiseExtended(float x, float white_max, float x_max = 1.f, float shoulder = 0.18f) { - const float x_min = 0.f; - float exposure = renodx::tonemap::ComputeReinhardExtendableScale(white_max, x_max, x_min, shoulder, shoulder); - float extended = renodx::tonemap::ReinhardExtended(x * exposure, white_max * exposure, x_max); - extended = min(extended, x_max); + incorrect_lab.yz *= blowout_change; + } - return lerp(x, extended, step(shoulder, x)); + float3 result = renodx::color::bt709::from::OkLab(incorrect_lab); + return renodx::color::bt709::clamp::AP1(result); } -float3 ReinhardPiecewiseExtended(float3 x, float white_max, float x_max = 1.f, float shoulder = 0.18f) { - const float x_min = 0.f; - float exposure = renodx::tonemap::ComputeReinhardExtendableScale(white_max, x_max, x_min, shoulder, shoulder); - float3 extended = renodx::tonemap::ReinhardExtended(x * exposure, white_max * exposure, x_max); - extended = min(extended, x_max); +float ComputeReinhardSmoothClampScale(float3 untonemapped, float rolloff_start = 0.5f, float output_max = 1.f, float white_clip = 100.f) { + float peak = renodx::math::Max(untonemapped.r, untonemapped.g, untonemapped.b); + float mapped_peak = renodx::tonemap::ReinhardPiecewiseExtended(peak, white_clip, output_max, rolloff_start); + float scale = renodx::math::DivideSafe(mapped_peak, peak, 0.f); - return lerp(x, extended, step(shoulder, x)); + return scale; } float3 InverseReinhardScalablePiecewise(float3 color, float channel_max = 1.f, float shoulder = 0.18f) { @@ -186,46 +201,6 @@ float3 InverseReinhardScalablePiecewise(float3 color, float channel_max = 1.f, f return lerp(color, inversed, step(shoulder, color)); } -// AdvancedAutoHDR pass to generate some HDR brightess out of an SDR signal. -// This is hue conserving and only really affects highlights. -// "sdr_color" is meant to be in "SDR range", as in, a value of 1 matching SDR white (something between 80, 100, 203, 300 nits, or whatever else) -// https://github.com/Filoppi/PumboAutoHDR -float3 PumboAutoHDR(float3 sdr_color, float peak_ratio, float shoulder_pow = 7.5f) { - const float SDRRatio = max(renodx::color::y::from::BT709(sdr_color), 0.f); - - const float auto_HDR_max_white = max(peak_ratio, 1.f); - const float auto_HDR_shoulder_ratio = 1.f - max(1.f - SDRRatio, 0.f); - const float auto_HDR_extra_ratio = pow(max(auto_HDR_shoulder_ratio, 0.f), shoulder_pow) * (auto_HDR_max_white - 1.f); - const float auto_HDR_total_ratio = SDRRatio + auto_HDR_extra_ratio; - return sdr_color * renodx::math::SafeDivision(auto_HDR_total_ratio, SDRRatio, 1); // Fallback on a value of 1 in case of division by 0 -} - -float3 PumboAutoHDR_PerChannel(float3 sdr_color, float peak_ratio, float shoulder_pow = 7.5f) { - float3 SDRRatio = max(sdr_color, 0.f); - - float auto_HDR_max_white = max(peak_ratio, 1.f); - float3 auto_HDR_shoulder_ratio = 1.f - max(1.f - SDRRatio, 0.f); - float3 auto_HDR_extra_ratio = pow(max(auto_HDR_shoulder_ratio, 0.f), shoulder_pow) * (auto_HDR_max_white - 1.f); - float3 auto_HDR_total_ratio = SDRRatio + auto_HDR_extra_ratio; - return sdr_color * renodx::math::SafeDivision(auto_HDR_total_ratio, SDRRatio, 1); -} - -float3 ApplyInverseToneMap(float3 color, float peak_ratio, float shoulder_pow = 7.5f) { - // float3 lum = PumboAutoHDR(color, peak_ratio, shoulder_pow); - // float3 ch = PumboAutoHDR_PerChannel(color, peak_ratio, shoulder_pow); - - const float max_peak_ratio = 3.25f; - - float3 result = PumboAutoHDR_PerChannel(color, peak_ratio, shoulder_pow); - if (peak_ratio > max_peak_ratio) { - float3 chrominance_hue_reference = PumboAutoHDR_PerChannel(color, max_peak_ratio, shoulder_pow); - // limit the max chrominance boost and hue change - result = renodx::lut::RecolorUnclamped(chrominance_hue_reference, result); - } - - return result; -} - void ApplyToneMap(inout bool hdr_enabled, float3 untonemapped_sdr, float3 untonemapped_hdr, @@ -251,9 +226,10 @@ void ApplyToneMap(inout bool hdr_enabled, float mid_gray = hdr_enabled ? (CB1_m2_x * (_808 * ((mad(mad(_515, 0.18, _519), 0.18, _520) / mad(mad(_515, 0.18, _516), 0.18, _521)) - _522))) : _517 * ((mad(mad(_515, 0.18, _519), 0.18, _520) / mad(mad(_515, 0.18, _516), 0.18, _521)) - _522); float3 untonemapped_mid_gray_shifted = untonemapped_sdr * mid_gray / 0.18f; + const float highlight_saturation = 1.f; if (RENODX_TONE_MAP_PER_CHANNEL) { hdr_tonemap = lerp(ch_tonemap, untonemapped_mid_gray_shifted, saturate(renodx::color::y::from::BT709(ch_tonemap))); - hdr_tonemap = HueAndChrominanceOKLab(hdr_tonemap, ch_tonemap, untonemapped_mid_gray_shifted, RENODX_TONE_MAP_HUE_CORRECTION, RENODX_TONE_MAP_BLOWOUT_RESTORATION); + hdr_tonemap = HueAndChrominanceOKLab(hdr_tonemap, ch_tonemap, untonemapped_mid_gray_shifted, RENODX_TONE_MAP_HUE_CORRECTION, RENODX_TONE_MAP_BLOWOUT_RESTORATION, highlight_saturation); } else { float y_in = renodx::color::y::from::BT709(untonemapped_sdr); float y_out = hdr_enabled ? (CB1_m2_x * (_808 * ((mad(mad(_515, y_in, _519), y_in, _520) / mad(mad(_515, y_in, _516), y_in, _521)) - _522))) : _517 * ((mad(mad(_515, y_in, _519), y_in, _520) / mad(mad(_515, y_in, _516), y_in, _521)) - _522); @@ -264,7 +240,11 @@ void ApplyToneMap(inout bool hdr_enabled, // >1: untonemapped mid gray shifted lum_tonemap = lerp(lum_tonemap, ch_tonemap, saturate(renodx::color::y::from::BT709(lum_tonemap) / (mid_gray * 1.5f))); hdr_tonemap = lerp(lum_tonemap, untonemapped_mid_gray_shifted, saturate(renodx::color::y::from::BT709(lum_tonemap))); - hdr_tonemap = HueAndChrominanceOKLab(hdr_tonemap, ch_tonemap, untonemapped_mid_gray_shifted, RENODX_TONE_MAP_HUE_CORRECTION, RENODX_TONE_MAP_BLOWOUT_RESTORATION); + hdr_tonemap = HueAndChrominanceOKLab(hdr_tonemap, ch_tonemap, untonemapped_mid_gray_shifted, RENODX_TONE_MAP_HUE_CORRECTION, RENODX_TONE_MAP_BLOWOUT_RESTORATION, highlight_saturation); + + float3 gamma_color = renodx::color::gamma::EncodeSafe(hdr_tonemap); + gamma_color = renodx::color::correct::GamutCompress(gamma_color, renodx::color::y::from::BT709(gamma_color)); + hdr_tonemap = renodx::color::gamma::DecodeSafe(gamma_color); } hdr_tonemap = max(0, hdr_tonemap); @@ -316,11 +296,15 @@ void PrepareForLUT(inout float r, inout float g, inout float b, inout float3 col if (RENODX_TONE_MAP_TYPE != 0.f) { max_channel = 1.f; float3 untonemapped_linear = renodx::color::srgb::DecodeSafe(color_hdr); +#if 1 float y_in = renodx::color::y::from::BT709(untonemapped_linear); - float y_out = ReinhardPiecewiseExtended(y_in, 100.f, 1.f, 0.3f); + float y_out = renodx::tonemap::ReinhardPiecewiseExtended(y_in, 100.f, 1.f, 0.3f); float3 tonemapped = renodx::color::correct::Luminance(untonemapped_linear, y_in, y_out); - // float3 tonemapped = renodx::color::correct::Hue(ToneMapMaxCLL(untonemapped_linear, 0.5f, 1.f), untonemapped_linear); +#else + float3 tonemapped = untonemapped_linear * ComputeReinhardSmoothClampScale(untonemapped_linear, 0.3f, 1.f, 100.f); +#endif + tonemapped = renodx::color::srgb::Encode(saturate(tonemapped)); color_sdr = tonemapped; @@ -342,10 +326,36 @@ void UpgradeLUTOutput(float3 color_hdr, float3 color_sdr, inout float color_proc return; } -float3 ApplyDisplayMap(float3 undisplaymapped) { - float peak_white = RENODX_PEAK_WHITE_NITS / RENODX_DIFFUSE_WHITE_NITS; - if (RENODX_GAMMA_CORRECTION) peak_white = renodx::color::correct::Gamma(peak_white, true); +float3 ApplyHermiteSplineByMaxChannel(float3 input, float diffuse_nits, float peak_nits) { + const float peak_ratio = peak_nits / diffuse_nits; + float white_clip = max(RENODX_TONE_MAP_WHITE_CLIP, peak_ratio * 1.5f); // safeguard to prevent artifacts + + float max_channel = renodx::math::Max(input.r, input.g, input.b); + + float max_pq = renodx::color::pq::Encode(max_channel, diffuse_nits); + float target_white_pq = renodx::color::pq::Encode(peak_nits, 1.f); + float max_white_pq = renodx::color::pq::Encode(white_clip, diffuse_nits); + float target_black_pq = renodx::color::pq::Encode(0.0001f, 1.f); + float min_black_pq = renodx::color::pq::Encode(0.f, 1.f); + + float scaled_pq = renodx::tonemap::HermiteSplineRolloff(max_pq, target_white_pq, max_white_pq, target_black_pq, min_black_pq); + + float mapped_max = renodx::color::pq::Decode(scaled_pq, diffuse_nits); + mapped_max = min(mapped_max, peak_ratio); + float scale = renodx::math::DivideSafe(mapped_max, max_channel, 0.f); + return input * scale; +} + +float3 ApplyGammaCorrectionByLuminance(float3 color_input, bool pow_to_srgb = false) { + float y_in = renodx::color::y::from::BT709(color_input); + float y_out = renodx::color::correct::Gamma(max(0, y_in), pow_to_srgb); + float3 color_output = renodx::color::correct::Luminance(color_input, y_in, y_out); + + return color_output; +} + +float3 ApplyDisplayMap(float3 undisplaymapped) { renodx::color::grade::Config cg_config = renodx::color::grade::config::Create(); cg_config.exposure = RENODX_TONE_MAP_EXPOSURE; cg_config.highlights = RENODX_TONE_MAP_HIGHLIGHTS; @@ -354,19 +364,31 @@ float3 ApplyDisplayMap(float3 undisplaymapped) { cg_config.flare = 0.10f * pow(RENODX_TONE_MAP_FLARE, 10.f); cg_config.saturation = RENODX_TONE_MAP_SATURATION; cg_config.dechroma = RENODX_TONE_MAP_BLOWOUT; - cg_config.hue_correction_strength = RENODX_TONE_MAP_HUE_CORRECTION; + cg_config.hue_correction_strength = 0.f; cg_config.blowout = -1.f * (RENODX_TONE_MAP_HIGHLIGHT_SATURATION - 1.f); - undisplaymapped = ApplyFlareByChrominance(undisplaymapped, 0.10f * pow(RENODX_TONE_MAP_FLARE2, 10.f), 0.1f); + if (RENODX_GAMMA_CORRECTION != 0.f) { + undisplaymapped = ApplyGammaCorrectionByLuminance(undisplaymapped); + } float y = renodx::color::y::from::BT709(undisplaymapped); - float3 displaymapped = ApplyExposureContrastFlareHighlightsShadowsByLuminance(undisplaymapped, y, cg_config, 0.1f); + float3 displaymapped = ApplyExposureContrastFlareHighlightsShadowsByLuminance(undisplaymapped, y, cg_config, 0.18f); + displaymapped = ApplySaturationBlowoutHueCorrectionHighlightSaturation(displaymapped, undisplaymapped, y, cg_config); + + // float3 gamma_color = renodx::color::gamma::EncodeSafe(displaymapped); + // gamma_color = renodx::color::correct::GamutCompress(gamma_color, renodx::color::y::from::BT709(gamma_color)); + // displaymapped = renodx::color::gamma::DecodeSafe(gamma_color); if (RENODX_TONE_MAP_TYPE == 2.f) { - displaymapped = renodx::color::bt709::from::BT2020(ReinhardPiecewiseExtended(renodx::color::bt2020::from::BT709(displaymapped), RENODX_TONE_MAP_WHITE_CLIP, peak_white, 0.5f)); + displaymapped = renodx::color::bt709::from::BT2020(ApplyHermiteSplineByMaxChannel( + renodx::color::bt2020::from::BT709(displaymapped), + RENODX_DIFFUSE_WHITE_NITS, + RENODX_PEAK_WHITE_NITS)); } - displaymapped = ApplySaturationBlowoutHueCorrectionHighlightSaturation(displaymapped, undisplaymapped, y, cg_config); + if (RENODX_GAMMA_CORRECTION != 0.f) { + displaymapped = ApplyGammaCorrectionByLuminance(displaymapped, true); + } return displaymapped; } @@ -421,6 +443,8 @@ float3 ApplyGammaCorrection(float3 incorrect_color) { float3 corrected_color; if (RENODX_GAMMA_CORRECTION == 2.f) { corrected_color = GammaCorrectHuePreserving(incorrect_color); + + corrected_color = BT709GamutCompressBT2020(corrected_color); } else if (RENODX_GAMMA_CORRECTION == 1.f) { corrected_color = renodx::color::correct::GammaSafe(incorrect_color); } else { diff --git a/src/games/rdr2/ui/calibration_image_0x832AC1BB.ps_5_1.hlsl b/src/games/rdr2/ui/calibration_image_0x832AC1BB.ps_5_1.hlsl index 6dffb40f62..a8b6078fba 100644 --- a/src/games/rdr2/ui/calibration_image_0x832AC1BB.ps_5_1.hlsl +++ b/src/games/rdr2/ui/calibration_image_0x832AC1BB.ps_5_1.hlsl @@ -50,14 +50,14 @@ void frag_main() { if (RENODX_GAMMA_CORRECTION) { peak_ratio = renodx::color::correct::Gamma(peak_ratio, true); if (RENODX_TONE_MAP_TYPE != 1.f) { - SV_Target.rgb = ReinhardPiecewiseExtended(SV_Target.rgb, 99.1f, peak_ratio, 0.4f); + SV_Target.rgb = renodx::tonemap::ReinhardPiecewiseExtended(SV_Target.rgb, 99.1f, peak_ratio, 0.4f); } SV_Target.rgb = renodx::color::correct::GammaSafe(SV_Target.rgb); SV_Target.rgb *= RENODX_DIFFUSE_WHITE_NITS / RENODX_GRAPHICS_WHITE_NITS; SV_Target.rgb = renodx::color::correct::GammaSafe(SV_Target.rgb, true); } else { if (RENODX_TONE_MAP_TYPE != 1.f) { - SV_Target.rgb = ReinhardPiecewiseExtended(SV_Target.rgb, 99.1f, peak_ratio, 0.4f); + SV_Target.rgb = renodx::tonemap::ReinhardPiecewiseExtended(SV_Target.rgb, 99.1f, peak_ratio, 0.4f); } SV_Target.rgb *= RENODX_DIFFUSE_WHITE_NITS / RENODX_GRAPHICS_WHITE_NITS; } From 9ac973b063fa7cd90a2aa8a4e851a666357cef9c Mon Sep 17 00:00:00 2001 From: Musa Haji Date: Mon, 29 Dec 2025 08:38:28 -0500 Subject: [PATCH 11/30] feat(rdr2): overhaul tonemap, sliders, defaults, presets --- src/games/rdr2/addon.cpp | 111 ++++++++------- src/games/rdr2/common.hlsli | 174 ++++++++++++++--------- src/games/rdr2/shared.h | 28 ++-- src/games/rdr2/tonemaprdr2extended.hlsli | 106 ++++++++++++++ 4 files changed, 281 insertions(+), 138 deletions(-) create mode 100644 src/games/rdr2/tonemaprdr2extended.hlsli diff --git a/src/games/rdr2/addon.cpp b/src/games/rdr2/addon.cpp index 19c65ef560..8da1c0b17d 100644 --- a/src/games/rdr2/addon.cpp +++ b/src/games/rdr2/addon.cpp @@ -25,15 +25,6 @@ renodx::mods::shader::CustomShaders custom_shaders = {__ALL_CUSTOM_SHADERS}; ShaderInjectData shader_injection; -const std::unordered_map MATCH_SDR_VALUES = { - {"GammaCorrection", 1.f}, - {"ToneMapScaling", 1.f}, - {"ColorGradeHighlights", 50.f}, - {"ColorGradeShadows", 50.f}, - {"UnclampLighting", 0.f}, - {"UseSRGBLUTEncoding", 0.f}, -}; - renodx::utils::settings::Settings settings = { new renodx::utils::settings::Setting{ .key = "ToneMapType", @@ -43,7 +34,7 @@ renodx::utils::settings::Settings settings = { .label = "Tone Mapper", .section = "Tone Mapping", .tooltip = "Sets the tone mapper type", - .labels = {"Vanilla", "Vanilla+ (No Display Mapping)", "Vanilla+"}, + .labels = {"Vanilla", "None", "Vanilla+", "SDR"}, }, new renodx::utils::settings::Setting{ .key = "ToneMapPeakNits", @@ -86,7 +77,7 @@ renodx::utils::settings::Settings settings = { .label = "SDR EOTF Emulation", .section = "Tone Mapping", .tooltip = "Emulates a 2.2 EOTF", - .labels = {"Off", "2.2 (Per Channel)", "2.2 (By Luminance with Per Channel Chrominance)"}, + .labels = {"Off", "2.2 (Per Channel)", "2.2 (Per Channel, Hue Preserving)"}, .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, }, new renodx::utils::settings::Setting{ @@ -97,31 +88,30 @@ renodx::utils::settings::Settings settings = { .label = "Scaling", .section = "Tone Mapping", .tooltip = "Luminance scales colors consistently while per-channel blows out and hue shifts", - .labels = {"Luminance & Per Channel Blend", "Per Channel"}, + .labels = {"Luminance", "Per Channel"}, .is_enabled = []() { return shader_injection.tone_map_type == 2.f; }, }, new renodx::utils::settings::Setting{ - .key = "ToneMapHueCorrection", - .binding = &shader_injection.tone_map_hue_correction, - .default_value = 0.f, - .label = "Hue Correction", + .key = "ToneMapHueShift", + .binding = &shader_injection.tone_map_hue_shift, + .default_value = 100.f, + .label = "Hue Shift", .section = "Tone Mapping", - .tooltip = "Hue retention strength.", - .min = 0.f, + .tooltip = "Emulates hue shifting per channel tonemapping", .max = 100.f, - .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f && shader_injection.tone_map_type != 3.f; }, .parse = [](float value) { return value * 0.01f; }, }, new renodx::utils::settings::Setting{ - .key = "ToneMapBlowoutRestoration", - .binding = &shader_injection.tone_map_blowout_restoration, - .default_value = 70.f, - .label = "Blowout Restoration", + .key = "ToneMapBlowout", + .binding = &shader_injection.tone_map_blowout, + .default_value = 50.f, + .label = "Blowout", .section = "Tone Mapping", - .tooltip = "Restores color blowout from per-channel grading.", + .tooltip = "Emulates blowout from per channel tonemapping", .min = 0.f, .max = 100.f, - .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f && shader_injection.tone_map_type != 3.f; }, .parse = [](float value) { return value * 0.01f; }, }, new renodx::utils::settings::Setting{ @@ -142,16 +132,16 @@ renodx::utils::settings::Settings settings = { .section = "Color Grading", .max = 2.f, .format = "%.2f", - .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f && shader_injection.tone_map_type != 3.f; }, }, new renodx::utils::settings::Setting{ .key = "ColorGradeHighlights", .binding = &shader_injection.tone_map_highlights, - .default_value = 54.f, + .default_value = 50.f, .label = "Highlights", .section = "Color Grading", .max = 100.f, - .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f && shader_injection.tone_map_type != 3.f; }, .parse = [](float value) { return value * 0.02f; }, }, new renodx::utils::settings::Setting{ @@ -161,7 +151,7 @@ renodx::utils::settings::Settings settings = { .label = "Shadows", .section = "Color Grading", .max = 100.f, - .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f && shader_injection.tone_map_type != 3.f; }, .parse = [](float value) { return value * 0.02f; }, }, new renodx::utils::settings::Setting{ @@ -171,7 +161,7 @@ renodx::utils::settings::Settings settings = { .label = "Contrast", .section = "Color Grading", .max = 100.f, - .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f && shader_injection.tone_map_type != 3.f; }, .parse = [](float value) { return value * 0.02f; }, }, new renodx::utils::settings::Setting{ @@ -181,7 +171,7 @@ renodx::utils::settings::Settings settings = { .label = "Saturation", .section = "Color Grading", .max = 100.f, - .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f && shader_injection.tone_map_type != 3.f; }, .parse = [](float value) { return value * 0.02f; }, }, new renodx::utils::settings::Setting{ @@ -192,18 +182,18 @@ renodx::utils::settings::Settings settings = { .section = "Color Grading", .tooltip = "Adds or removes highlight color.", .max = 100.f, - .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f && shader_injection.tone_map_type != 3.f; }, .parse = [](float value) { return value * 0.02f; }, }, new renodx::utils::settings::Setting{ - .key = "ColorGradeBlowout", - .binding = &shader_injection.tone_map_blowout, + .key = "ColorGradeDechroma", + .binding = &shader_injection.tone_map_dechroma, .default_value = 0.f, - .label = "Blowout", + .label = "Dechroma", .section = "Color Grading", .tooltip = "Controls highlight desaturation due to overexposure.", .max = 100.f, - .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f && shader_injection.tone_map_type != 3.f; }, .parse = [](float value) { return value * 0.01f; }, }, new renodx::utils::settings::Setting{ @@ -214,7 +204,7 @@ renodx::utils::settings::Settings settings = { .section = "Color Grading", .tooltip = "Flare/Glare Compensation", .max = 100.f, - .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f && shader_injection.tone_map_type != 3.f; }, .parse = [](float value) { return value * 0.02f; }, }, new renodx::utils::settings::Setting{ @@ -224,7 +214,6 @@ renodx::utils::settings::Settings settings = { .label = "LUT Strength", .section = "Color Grading", .max = 100.f, - .is_enabled = []() { return shader_injection.tone_map_type != 0; }, .parse = [](float value) { return value * 0.01f; }, }, new renodx::utils::settings::Setting{ @@ -283,21 +272,29 @@ renodx::utils::settings::Settings settings = { .section = "Options", .group = "button-line-1", .on_change = []() { - for (auto* setting : settings) { - if (setting->key.empty()) continue; - if (!setting->can_reset) continue; - - if (MATCH_SDR_VALUES.contains(setting->key)) { - renodx::utils::settings::UpdateSetting(setting->key, MATCH_SDR_VALUES.at(setting->key)); - } else { - renodx::utils::settings::UpdateSetting(setting->key, setting->default_value); - } - } + renodx::utils::settings::ResetSettings(); + renodx::utils::settings::UpdateSettings({ + {"GammaCorrection", 1.f}, + {"ToneMapScaling", 1.f}, + {"ColorGradeShadows", 50.f}, + {"UnclampLighting", 0.f}, + {"UseSRGBLUTEncoding", 0.f}, + }); }, }, new renodx::utils::settings::Setting{ .value_type = renodx::utils::settings::SettingValueType::BUTTON, - .label = "Discord", + .label = "RenoDX Discord", + .section = "Links", + .group = "button-line-2", + .tint = 0x5865F2, + .on_change = []() { + renodx::utils::platform::LaunchURL("https://discord.gg/", "Ce9bQHQrSV"); + }, + }, + new renodx::utils::settings::Setting{ + .value_type = renodx::utils::settings::SettingValueType::BUTTON, + .label = "HDR Den Discord", .section = "Links", .group = "button-line-2", .tint = 0x5865F2, @@ -333,6 +330,14 @@ renodx::utils::settings::Settings settings = { .tint = 0xFF5A16, .on_change = []() { renodx::utils::platform::LaunchURL("https://ko-fi.com/musaqh"); }, }, + new renodx::utils::settings::Setting{ + .value_type = renodx::utils::settings::SettingValueType::BUTTON, + .label = "ShortFuse's Ko-Fi", + .section = "Links", + .group = "button-line-3", + .tint = 0xFF5A16, + .on_change = []() { renodx::utils::platform::LaunchURL("https://ko-fi.com/shortfuse"); }, + }, new renodx::utils::settings::Setting{ .value_type = renodx::utils::settings::SettingValueType::TEXT, .label = std::string("Build: ") + renodx::utils::date::ISO_DATE_TIME, @@ -343,7 +348,6 @@ renodx::utils::settings::Settings settings = { .label = std::string("- Requires HDR on in game"), .section = "About", }, - }; void OnPresetOff() { @@ -353,8 +357,8 @@ void OnPresetOff() { {"ToneMapGameNits", 203.f}, {"ToneMapUINits", 203.f}, {"ToneMapScaling", 1.f}, - {"ToneMapHueCorrection", 0.f}, - {"ToneMapBlowoutRestoration", 0.f}, + {"ToneMapHueShift", 100.f}, + {"ToneMapBlowout", 100.f}, {"ToneMapWhiteClip", 100.f}, {"ColorGradeExposure", 1.f}, {"ColorGradeHighlights", 50.f}, @@ -362,9 +366,8 @@ void OnPresetOff() { {"ColorGradeContrast", 50.f}, {"ColorGradeSaturation", 50.f}, {"ColorGradeHighlightSaturation", 50.f}, - {"ColorGradeBlowout", 0.f}, + {"ColorGradeDechroma", 0.f}, {"ColorGradeFlare", 0.f}, - {"ColorGradeFlare2", 0.f}, {"ColorGradeLUTStrength", 100.f}, {"FxVignette", 100.f}, {"FxGrainStrength", 0.f}, diff --git a/src/games/rdr2/common.hlsli b/src/games/rdr2/common.hlsli index d8bbd7cbe5..91a3e5400f 100644 --- a/src/games/rdr2/common.hlsli +++ b/src/games/rdr2/common.hlsli @@ -1,13 +1,11 @@ #include "./shared.h" +#include "./tonemaprdr2extended.hlsli" float Highlights(float x, float highlights, float mid_gray) { if (highlights == 1.f) return x; if (highlights > 1.f) { - // value = max(x, lerp(x, mid_gray * pow(x / mid_gray, highlights), x)); - return max(x, - lerp(x, mid_gray * pow(x / mid_gray, highlights), - renodx::tonemap::ExponentialRollOff(x, 1.f, 1.1f))); + return max(x, lerp(x, mid_gray * pow(x / mid_gray, highlights), min(x, 15.f))); } else { // highlights < 1.f x /= mid_gray; return lerp(x, pow(x, highlights), step(1.f, x)) * mid_gray; @@ -63,23 +61,31 @@ float3 ApplyExposureContrastFlareHighlightsShadowsByLuminance(float3 untonemappe return color; } -float3 ApplySaturationBlowoutHueCorrectionHighlightSaturation(float3 tonemapped, float3 untonemapped, float y, renodx::color::grade::Config config) { +float3 ApplySaturationBlowoutHueCorrectionHighlightSaturation(float3 tonemapped, float3 hue_reference_color, float y, renodx::color::grade::Config config, float chrominance_correction = 0.f) { float3 color = tonemapped; - if (config.saturation != 1.f || config.dechroma != 0.f || config.hue_correction_strength != 0.f || config.blowout != 0.f) { + if (config.saturation != 1.f || config.dechroma != 0.f || config.hue_correction_strength != 0.f || config.blowout != 0.f || chrominance_correction != 0.f) { float3 perceptual_new = renodx::color::oklab::from::BT709(color); - if (config.hue_correction_strength != 0.f) { - float3 perceptual_old = renodx::color::oklab::from::BT709(untonemapped); + if (config.hue_correction_strength != 0.0 || chrominance_correction != 0.0) { + const float3 reference_oklab = renodx::color::oklab::from::BT709(hue_reference_color); - // Save chrominance to apply black - float chrominance_pre_adjust = distance(perceptual_new.yz, 0); + float chrominance_current = length(perceptual_new.yz); + float chrominance_ratio = 1.0; - perceptual_new.yz = lerp(perceptual_new.yz, perceptual_old.yz, config.hue_correction_strength); - - float chrominance_post_adjust = distance(perceptual_new.yz, 0); + if (config.hue_correction_strength != 0.0) { + const float chrominance_pre = chrominance_current; + perceptual_new.yz = lerp(perceptual_new.yz, reference_oklab.yz, config.hue_correction_strength); + const float chrominancePost = length(perceptual_new.yz); + chrominance_ratio = renodx::math::SafeDivision(chrominance_pre, chrominancePost, 1); + chrominance_current = chrominancePost; + } - // Apply back previous chrominance - perceptual_new.yz *= renodx::math::DivideSafe(chrominance_pre_adjust, chrominance_post_adjust, 1.f); + if (chrominance_correction != 0.0) { + const float reference_chrominance = length(reference_oklab.yz); + float target_chrominance_ratio = renodx::math::SafeDivision(reference_chrominance, chrominance_current, 1); + chrominance_ratio = lerp(chrominance_ratio, target_chrominance_ratio, chrominance_correction); + } + perceptual_new.yz *= chrominance_ratio; } if (config.dechroma != 0.f) { @@ -181,10 +187,42 @@ float3 HueAndChrominanceOKLab( return renodx::color::bt709::clamp::AP1(result); } +float3 HueAndChrominance1ReferenceColorOKLab( + float3 incorrect_color, float3 reference_color, + float hue_correct_strength = 0.f, + float chrominance_correct_strength = 0.f) { + if (hue_correct_strength != 0.0 || chrominance_correct_strength != 0.0) { + float3 perceptual_new = renodx::color::oklab::from::BT709(incorrect_color); + const float3 reference_oklab = renodx::color::oklab::from::BT709(reference_color); + + float chrominance_current = length(perceptual_new.yz); + float chrominance_ratio = 1.0; + + if (hue_correct_strength != 0.0) { + const float chrominance_pre = chrominance_current; + perceptual_new.yz = lerp(perceptual_new.yz, reference_oklab.yz, hue_correct_strength); + const float chrominancePost = length(perceptual_new.yz); + chrominance_ratio = renodx::math::SafeDivision(chrominance_pre, chrominancePost, 1); + chrominance_current = chrominancePost; + } + + if (chrominance_correct_strength != 0.0) { + const float reference_chrominance = length(reference_oklab.yz); + float target_chrominance_ratio = renodx::math::SafeDivision(reference_chrominance, chrominance_current, 1); + chrominance_ratio = lerp(chrominance_ratio, target_chrominance_ratio, chrominance_correct_strength); + } + perceptual_new.yz *= chrominance_ratio; + + incorrect_color = renodx::color::bt709::from::OkLab(perceptual_new); + incorrect_color = renodx::color::bt709::clamp::AP1(incorrect_color); + } + return incorrect_color; +} + float ComputeReinhardSmoothClampScale(float3 untonemapped, float rolloff_start = 0.5f, float output_max = 1.f, float white_clip = 100.f) { float peak = renodx::math::Max(untonemapped.r, untonemapped.g, untonemapped.b); float mapped_peak = renodx::tonemap::ReinhardPiecewiseExtended(peak, white_clip, output_max, rolloff_start); - float scale = renodx::math::DivideSafe(mapped_peak, peak, 0.f); + float scale = renodx::math::DivideSafe(mapped_peak, peak, 1.f); return scale; } @@ -209,46 +247,47 @@ void ApplyToneMap(inout bool hdr_enabled, float _515, float _516, float _517, float _519, float _520, float _521, float _522, float _808) { float _875, _876, _877; + float3 hdr_tonemap; if (RENODX_TONE_MAP_TYPE == 0.f) { _875 = hdr_enabled ? (CB1_m2_x * (((mad(untonemapped_hdr.r, mad(_515, untonemapped_hdr.r, _519), _520) / mad(untonemapped_hdr.r, mad(_515, untonemapped_hdr.r, _516), _521)) - _522) * _808)) : clamp(_517 * ((mad(untonemapped_sdr.r, mad(_515, untonemapped_sdr.r, _519), _520) / mad(untonemapped_sdr.r, mad(_515, untonemapped_sdr.r, _516), _521)) - _522), 0.0f, 1.0f); _876 = hdr_enabled ? (CB1_m2_x * (_808 * ((mad(mad(_515, untonemapped_hdr.g, _519), untonemapped_hdr.g, _520) / mad(mad(_515, untonemapped_hdr.g, _516), untonemapped_hdr.g, _521)) - _522))) : clamp(_517 * ((mad(mad(_515, untonemapped_sdr.g, _519), untonemapped_sdr.g, _520) / mad(mad(_515, untonemapped_sdr.g, _516), untonemapped_sdr.g, _521)) - _522), 0.0f, 1.0f); _877 = hdr_enabled ? (CB1_m2_x * (_808 * ((mad(mad(_515, untonemapped_hdr.b, _519), untonemapped_hdr.b, _520) / mad(mad(_515, untonemapped_hdr.b, _516), untonemapped_hdr.b, _521)) - _522))) : clamp(_517 * ((mad(mad(_515, untonemapped_sdr.b, _519), untonemapped_sdr.b, _520) / mad(mad(_515, untonemapped_sdr.b, _516), untonemapped_sdr.b, _521)) - _522), 0.0f, 1.0f); - } else { - float3 hdr_tonemap = untonemapped_sdr; - - hdr_enabled = false; // use SDR tonemapper - _875 = hdr_enabled ? (CB1_m2_x * (((mad(untonemapped_hdr.r, mad(_515, untonemapped_hdr.r, _519), _520) / mad(untonemapped_hdr.r, mad(_515, untonemapped_hdr.r, _516), _521)) - _522) * _808)) : _517 * ((mad(untonemapped_sdr.r, mad(_515, untonemapped_sdr.r, _519), _520) / mad(untonemapped_sdr.r, mad(_515, untonemapped_sdr.r, _516), _521)) - _522); - _876 = hdr_enabled ? (CB1_m2_x * (_808 * ((mad(mad(_515, untonemapped_hdr.g, _519), untonemapped_hdr.g, _520) / mad(mad(_515, untonemapped_hdr.g, _516), untonemapped_hdr.g, _521)) - _522))) : _517 * ((mad(mad(_515, untonemapped_sdr.g, _519), untonemapped_sdr.g, _520) / mad(mad(_515, untonemapped_sdr.g, _516), untonemapped_sdr.g, _521)) - _522); - _877 = hdr_enabled ? (CB1_m2_x * (_808 * ((mad(mad(_515, untonemapped_hdr.b, _519), untonemapped_hdr.b, _520) / mad(mad(_515, untonemapped_hdr.b, _516), untonemapped_hdr.b, _521)) - _522))) : _517 * ((mad(mad(_515, untonemapped_sdr.b, _519), untonemapped_sdr.b, _520) / mad(mad(_515, untonemapped_sdr.b, _516), untonemapped_sdr.b, _521)) - _522); - - float3 ch_tonemap = float3(_875, _876, _877); + } else if (RENODX_TONE_MAP_TYPE == 2.f) { + // Hable/U2-ish form, values found at night in Saint Denis + float A = _515; // 0.22, A + float B = _516; // 0.3, B + float C = _519; // 0.03, C * D? + float D = _520; // 0.0, actually E? + float E = _521; // 0.06 + float F = _522; // 0.0 + float white_precompute = _517; // 1.12 + float pivot_point = rdr2::tonemap::FindSecondDerivativeRootMax(A, B, C, D, E); + + float3 base; + if (RENODX_TONE_MAP_PER_CHANNEL == 0.f) { + float y_in = renodx::color::y::from::BT709(untonemapped_sdr); + float base_y = rdr2::tonemap::Apply(y_in, A, B, C, D, E, F, white_precompute); - float mid_gray = hdr_enabled ? (CB1_m2_x * (_808 * ((mad(mad(_515, 0.18, _519), 0.18, _520) / mad(mad(_515, 0.18, _516), 0.18, _521)) - _522))) : _517 * ((mad(mad(_515, 0.18, _519), 0.18, _520) / mad(mad(_515, 0.18, _516), 0.18, _521)) - _522); - float3 untonemapped_mid_gray_shifted = untonemapped_sdr * mid_gray / 0.18f; + float y_out = rdr2::tonemap::ApplyExtended( + y_in, base_y, pivot_point, white_precompute, + A, B, C, D, E, F); - const float highlight_saturation = 1.f; - if (RENODX_TONE_MAP_PER_CHANNEL) { - hdr_tonemap = lerp(ch_tonemap, untonemapped_mid_gray_shifted, saturate(renodx::color::y::from::BT709(ch_tonemap))); - hdr_tonemap = HueAndChrominanceOKLab(hdr_tonemap, ch_tonemap, untonemapped_mid_gray_shifted, RENODX_TONE_MAP_HUE_CORRECTION, RENODX_TONE_MAP_BLOWOUT_RESTORATION, highlight_saturation); + hdr_tonemap = renodx::color::correct::Luminance(untonemapped_sdr, y_in, y_out); } else { - float y_in = renodx::color::y::from::BT709(untonemapped_sdr); - float y_out = hdr_enabled ? (CB1_m2_x * (_808 * ((mad(mad(_515, y_in, _519), y_in, _520) / mad(mad(_515, y_in, _516), y_in, _521)) - _522))) : _517 * ((mad(mad(_515, y_in, _519), y_in, _520) / mad(mad(_515, y_in, _516), y_in, _521)) - _522); - float3 lum_tonemap = renodx::color::correct::Luminance(untonemapped_sdr, y_in, y_out, 1.f); - - // 0 - (midgray * 1.5): lum tonemap - // (midgray * 1.5) - 1: ch tonemap - // >1: untonemapped mid gray shifted - lum_tonemap = lerp(lum_tonemap, ch_tonemap, saturate(renodx::color::y::from::BT709(lum_tonemap) / (mid_gray * 1.5f))); - hdr_tonemap = lerp(lum_tonemap, untonemapped_mid_gray_shifted, saturate(renodx::color::y::from::BT709(lum_tonemap))); - hdr_tonemap = HueAndChrominanceOKLab(hdr_tonemap, ch_tonemap, untonemapped_mid_gray_shifted, RENODX_TONE_MAP_HUE_CORRECTION, RENODX_TONE_MAP_BLOWOUT_RESTORATION, highlight_saturation); - - float3 gamma_color = renodx::color::gamma::EncodeSafe(hdr_tonemap); - gamma_color = renodx::color::correct::GamutCompress(gamma_color, renodx::color::y::from::BT709(gamma_color)); - hdr_tonemap = renodx::color::gamma::DecodeSafe(gamma_color); + // (x * (A * x + C) + D)/(x * (A * x + B) + E) - F + base = rdr2::tonemap::Apply(untonemapped_sdr, A, B, C, D, E, F, white_precompute); + hdr_tonemap = rdr2::tonemap::ApplyExtended( + untonemapped_sdr, base, pivot_point, white_precompute, + A, B, C, D, E, F); } - hdr_tonemap = max(0, hdr_tonemap); _875 = hdr_tonemap.r, _876 = hdr_tonemap.g, _877 = hdr_tonemap.b; + } else if (RENODX_TONE_MAP_TYPE == 3.f) { + float3 sdr_tonemap = saturate(rdr2::tonemap::Apply(untonemapped_sdr, _515, _516, _519, _520, _521, _522, _517)); + + _875 = sdr_tonemap.r, _876 = sdr_tonemap.g, _877 = sdr_tonemap.b; + } else { // None + _875 = untonemapped_sdr.r, _876 = untonemapped_sdr.g, _877 = untonemapped_sdr.b; } output_r = _875, output_g = _876, output_b = _877; return; @@ -293,10 +332,10 @@ void EncodeForLUT(inout bool skip_encoding, float linear_r, float linear_g, floa void PrepareForLUT(inout float r, inout float g, inout float b, inout float3 color_sdr, inout float3 color_hdr, inout float max_channel) { color_hdr = float3(r, g, b); - if (RENODX_TONE_MAP_TYPE != 0.f) { + if (RENODX_TONE_MAP_TYPE != 0.f && RENODX_TONE_MAP_TYPE != 3.f) { max_channel = 1.f; float3 untonemapped_linear = renodx::color::srgb::DecodeSafe(color_hdr); -#if 1 +#if 0 float y_in = renodx::color::y::from::BT709(untonemapped_linear); float y_out = renodx::tonemap::ReinhardPiecewiseExtended(y_in, 100.f, 1.f, 0.3f); @@ -314,7 +353,7 @@ void PrepareForLUT(inout float r, inout float g, inout float b, inout float3 col } void UpgradeLUTOutput(float3 color_hdr, float3 color_sdr, inout float color_processed_r, inout float color_processed_g, inout float color_processed_b) { - if (RENODX_TONE_MAP_TYPE != 0.f) { + if (RENODX_TONE_MAP_TYPE != 0.f && RENODX_TONE_MAP_TYPE != 3.f) { float3 color_hdr_linear = renodx::color::srgb::DecodeSafe(color_hdr); float3 color_sdr_linear = renodx::color::srgb::DecodeSafe(color_sdr); float3 color_processed_linear = renodx::color::srgb::DecodeSafe(float3(color_processed_r, color_processed_g, color_processed_b)); @@ -322,6 +361,9 @@ void UpgradeLUTOutput(float3 color_hdr, float3 color_sdr, inout float color_proc float3 upgraded = renodx::color::srgb::EncodeSafe(renodx::tonemap::UpgradeToneMap(color_hdr_linear, color_sdr_linear, color_processed_linear, RENODX_COLOR_GRADE_STRENGTH)); color_processed_r = upgraded.r, color_processed_g = upgraded.g, color_processed_b = upgraded.b; // color_processed_r = color_processed_linear.r, color_processed_g = color_processed_linear.g, color_processed_b = color_processed_linear.b; + } else { + float3 output = lerp(color_hdr, float3(color_processed_r, color_processed_g, color_processed_b), RENODX_COLOR_GRADE_STRENGTH); + color_processed_r = output.r, color_processed_g = output.g, color_processed_b = output.b; } return; } @@ -343,7 +385,7 @@ float3 ApplyHermiteSplineByMaxChannel(float3 input, float diffuse_nits, float pe float mapped_max = renodx::color::pq::Decode(scaled_pq, diffuse_nits); mapped_max = min(mapped_max, peak_ratio); - float scale = renodx::math::DivideSafe(mapped_max, max_channel, 0.f); + float scale = renodx::math::DivideSafe(mapped_max, max_channel, 1.f); return input * scale; } @@ -363,21 +405,19 @@ float3 ApplyDisplayMap(float3 undisplaymapped) { cg_config.contrast = RENODX_TONE_MAP_CONTRAST; cg_config.flare = 0.10f * pow(RENODX_TONE_MAP_FLARE, 10.f); cg_config.saturation = RENODX_TONE_MAP_SATURATION; - cg_config.dechroma = RENODX_TONE_MAP_BLOWOUT; - cg_config.hue_correction_strength = 0.f; + cg_config.dechroma = RENODX_TONE_MAP_DECHROMA; + cg_config.hue_correction_strength = RENODX_TONE_MAP_HUE_SHIFT; cg_config.blowout = -1.f * (RENODX_TONE_MAP_HIGHLIGHT_SATURATION - 1.f); if (RENODX_GAMMA_CORRECTION != 0.f) { undisplaymapped = ApplyGammaCorrectionByLuminance(undisplaymapped); } + float3 hue_reference_color = renodx::tonemap::ReinhardPiecewise(undisplaymapped, 6.f, 1.f); + float y = renodx::color::y::from::BT709(undisplaymapped); float3 displaymapped = ApplyExposureContrastFlareHighlightsShadowsByLuminance(undisplaymapped, y, cg_config, 0.18f); - displaymapped = ApplySaturationBlowoutHueCorrectionHighlightSaturation(displaymapped, undisplaymapped, y, cg_config); - - // float3 gamma_color = renodx::color::gamma::EncodeSafe(displaymapped); - // gamma_color = renodx::color::correct::GamutCompress(gamma_color, renodx::color::y::from::BT709(gamma_color)); - // displaymapped = renodx::color::gamma::DecodeSafe(gamma_color); + displaymapped = ApplySaturationBlowoutHueCorrectionHighlightSaturation(displaymapped, hue_reference_color, y, cg_config, RENODX_TONE_MAP_BLOWOUT); if (RENODX_TONE_MAP_TYPE == 2.f) { displaymapped = renodx::color::bt709::from::BT2020(ApplyHermiteSplineByMaxChannel( @@ -419,22 +459,20 @@ float3 ApplyGrain(float3 color, float2 texcoord) { float3 FinalizeTonemap(float3 color, float2 texcoord) { if (RENODX_TONE_MAP_TYPE != 0.f) { color = renodx::color::srgb::DecodeSafe(color); - color = ApplyDisplayMap(color); + if (RENODX_TONE_MAP_TYPE == 3.f) { + color = saturate(color); + } else { + color = ApplyDisplayMap(color); + } color = ApplyGrain(color, texcoord); color = ScaleScene(color); } return color; } -float3 GammaCorrectHuePreserving(float3 incorrect_color) { - float3 ch = renodx::color::correct::GammaSafe(incorrect_color); - - const float y_in = max(0, renodx::color::y::from::BT709(incorrect_color)); - const float y_out = renodx::color::correct::Gamma(y_in); - float3 lum = renodx::color::correct::Luminance(incorrect_color, y_in, y_out); - - // use chrominance from per channel gamma correction - float3 result = renodx::color::correct::ChrominanceOKLab(lum, ch, 1.f, 1.f); +float3 GammaCorrectHuePreserving(float3 incorrect_color) { + float3 result = renodx::color::correct::GammaSafe(incorrect_color); + result = renodx::color::correct::Hue(result, incorrect_color); return result; } @@ -443,8 +481,6 @@ float3 ApplyGammaCorrection(float3 incorrect_color) { float3 corrected_color; if (RENODX_GAMMA_CORRECTION == 2.f) { corrected_color = GammaCorrectHuePreserving(incorrect_color); - - corrected_color = BT709GamutCompressBT2020(corrected_color); } else if (RENODX_GAMMA_CORRECTION == 1.f) { corrected_color = renodx::color::correct::GammaSafe(incorrect_color); } else { diff --git a/src/games/rdr2/shared.h b/src/games/rdr2/shared.h index 1ef9f02f3d..6a6d2c205e 100644 --- a/src/games/rdr2/shared.h +++ b/src/games/rdr2/shared.h @@ -23,8 +23,8 @@ struct ShaderInjectData { float graphics_white_nits; float gamma_correction; float tone_map_per_channel; - float tone_map_hue_correction; - float tone_map_blowout_restoration; + float tone_map_hue_shift; + float tone_map_blowout; float tone_map_white_clip; float tone_map_exposure; @@ -33,9 +33,8 @@ struct ShaderInjectData { float tone_map_contrast; float tone_map_saturation; float tone_map_highlight_saturation; - float tone_map_blowout; + float tone_map_dechroma; float tone_map_flare; - float tone_map_flare2; float color_grade_lut_strength; @@ -58,15 +57,15 @@ cbuffer shader_injection : register(b13) { #define COLOR_GRADE_LUT_SAMPLING_METHOD 1.f -#define RENODX_TONE_MAP_TYPE shader_injection.tone_map_type -#define RENODX_PEAK_WHITE_NITS shader_injection.peak_white_nits -#define RENODX_DIFFUSE_WHITE_NITS shader_injection.diffuse_white_nits -#define RENODX_GRAPHICS_WHITE_NITS shader_injection.graphics_white_nits -#define RENODX_GAMMA_CORRECTION shader_injection.gamma_correction -#define RENODX_TONE_MAP_PER_CHANNEL shader_injection.tone_map_per_channel -#define RENODX_TONE_MAP_HUE_CORRECTION shader_injection.tone_map_hue_correction -#define RENODX_TONE_MAP_BLOWOUT_RESTORATION shader_injection.tone_map_blowout_restoration -#define RENODX_TONE_MAP_WHITE_CLIP shader_injection.tone_map_white_clip +#define RENODX_TONE_MAP_TYPE shader_injection.tone_map_type +#define RENODX_PEAK_WHITE_NITS shader_injection.peak_white_nits +#define RENODX_DIFFUSE_WHITE_NITS shader_injection.diffuse_white_nits +#define RENODX_GRAPHICS_WHITE_NITS shader_injection.graphics_white_nits +#define RENODX_GAMMA_CORRECTION shader_injection.gamma_correction +#define RENODX_TONE_MAP_PER_CHANNEL shader_injection.tone_map_per_channel +#define RENODX_TONE_MAP_HUE_SHIFT shader_injection.tone_map_hue_shift +#define RENODX_TONE_MAP_BLOWOUT shader_injection.tone_map_blowout +#define RENODX_TONE_MAP_WHITE_CLIP shader_injection.tone_map_white_clip #define RENODX_TONE_MAP_EXPOSURE shader_injection.tone_map_exposure #define RENODX_TONE_MAP_HIGHLIGHTS shader_injection.tone_map_highlights @@ -74,9 +73,8 @@ cbuffer shader_injection : register(b13) { #define RENODX_TONE_MAP_CONTRAST shader_injection.tone_map_contrast #define RENODX_TONE_MAP_SATURATION shader_injection.tone_map_saturation #define RENODX_TONE_MAP_HIGHLIGHT_SATURATION shader_injection.tone_map_highlight_saturation -#define RENODX_TONE_MAP_BLOWOUT shader_injection.tone_map_blowout +#define RENODX_TONE_MAP_DECHROMA shader_injection.tone_map_dechroma #define RENODX_TONE_MAP_FLARE shader_injection.tone_map_flare -#define RENODX_TONE_MAP_FLARE2 shader_injection.tone_map_flare2 #define RENODX_COLOR_GRADE_STRENGTH shader_injection.color_grade_lut_strength diff --git a/src/games/rdr2/tonemaprdr2extended.hlsli b/src/games/rdr2/tonemaprdr2extended.hlsli new file mode 100644 index 0000000000..7e6136e7a7 --- /dev/null +++ b/src/games/rdr2/tonemaprdr2extended.hlsli @@ -0,0 +1,106 @@ +#include "./shared.h" + +namespace rdr2 { +namespace tonemap { +float Derivative(float x, float a, float b, float c, float d, float e, float f) { + float denom = a * x * x + b * x + e; + float numer = a * (b - c) * x * x + 2.0f * a * (e - d) * x + (c * e - b * d); + return numer / (denom * denom); // -f drops out because f is constant +} + +// Solve cubic a3*x^3 + a2*x^2 + a1*x + a0 = 0 +// Returns three real roots if disc <= 0, otherwise one real root duplicated. +float3 SolveCubic(float a3, float a2, float a1, float a0) { + // Normalize: x = y - a2/(3a3) + float invA = rcp(a3); + float b = a2 * invA; + float c = a1 * invA; + float d = a0 * invA; + + float shift = b / 3.0; + float p = c - (b * b) / 3.0; + float q = (2.0 * b * b * b) / 27.0 - (b * c) / 3.0 + d; + + float halfQ = 0.5 * q; + float thirdP = p / 3.0; + + float disc = halfQ * halfQ + thirdP * thirdP * thirdP; + + if (disc > 0.0) { + // One real root + float s = sqrt(disc); + float u = renodx::math::Cbrt(-halfQ + s); + float v = renodx::math::Cbrt(-halfQ - s); + float y = u + v; + float x = y - shift; + return float3(x, x, x); + } else { + // Three real roots + float t = 2.0 * sqrt(-thirdP); + float cosArg = (-halfQ) / sqrt(-(thirdP * thirdP * thirdP)); + cosArg = clamp(cosArg, -1.0, 1.0); + + float phi = acos(cosArg) / 3.0; + + float y0 = t * cos(phi); + float y1 = t * cos(phi - 2.0 * renodx::math::PI / 3.0); + float y2 = t * cos(phi - 4.0 * renodx::math::PI / 3.0); + + return float3( + y0 - shift, + y1 - shift, + y2 - shift); + } +} + +// f(x) = (A x^2 + C x + D) / (A x^2 + B x + E) - F +// f''(x) = 0 => cubic P3(x) = 0 +float FindSecondDerivativeRootMax(float A, float B, float C, float D, float E) { + float a3 = A * A * (B - C); + float a2 = 3.0 * A * A * (E - D); + float a1 = 3.0 * A * (C * E - B * D); + float a0 = A * D * E - A * E * E - B * B * D + B * C * E; + + float3 roots = SolveCubic(a3, a2, a1, a0); + + // Just take the max — if NaN shows up, math is broken + return renodx::math::Max(roots); +} + +// Hable/U2-style tonemap used in RDR2 +#define TONEMAP_RDR2_GENERATOR(T) \ + T Apply(T x, float A, float B, float C, float D, float E, float F, float white_precompute) { \ + /* (x * (a * x + c) + d)/(x * (a * x + b) + e) - f */ \ + T num = x * (A * x + C) + D; \ + T den = x * (A * x + B) + E; \ + return white_precompute * ((num / den) - F); \ + } + +TONEMAP_RDR2_GENERATOR(float) +TONEMAP_RDR2_GENERATOR(float3) +#undef TONEMAP_RDR2_GENERATOR + +#define APPLY_EXTENDED_GENERATOR(T) \ + T ApplyExtended( \ + T x, \ + T base, \ + float pivot_point, \ + float white_precompute, \ + float A, float B, float C, float D, float E, float F) { \ + float pivot_x = pivot_point; \ + float pivot_y = Apply(pivot_x, A, B, C, D, E, F, white_precompute); \ + float slope = Derivative(pivot_x, A, B, C, D, E, F) * white_precompute; \ + T offset = pivot_y - slope * pivot_x; \ + \ + T extended = slope * x + offset; /* match slope */ \ + \ + return lerp(base, extended, step(pivot_x, x)); \ + } + +APPLY_EXTENDED_GENERATOR(float) +APPLY_EXTENDED_GENERATOR(float3) +#undef APPLY_EXTENDED_GENERATOR + +} // namespace tonemap +} // namespace rdr2 + From 2599250d720c8c7ff9bc57f86c8872ead4dfb645 Mon Sep 17 00:00:00 2001 From: Musa Haji Date: Wed, 25 Feb 2026 11:09:31 -0500 Subject: [PATCH 12/30] rdr2vk: initial commit - add srgb encoding for LUT - add 2.2 emulation - no sliders, hijacks game's peak and paper white sliders --- src/games/rdr2vk/addon.cpp | 213 +++ src/games/rdr2vk/common.glsl | 1138 +++++++++++++++++ src/games/rdr2vk/output/0x14BF23D4.frag.glsl | 138 ++ src/games/rdr2vk/output/0x1B0D650C.frag.glsl | 133 ++ src/games/rdr2vk/output/0x26B3FAA9.frag.glsl | 137 ++ src/games/rdr2vk/output/0x6032A998.frag.glsl | 139 ++ src/games/rdr2vk/output/0x76A78879.frag.glsl | 138 ++ src/games/rdr2vk/output/0x7BE28339.frag.glsl | 133 ++ src/games/rdr2vk/output/0x8B9C89F1.frag.glsl | 1020 +++++++++++++++ src/games/rdr2vk/output/0xA383C448.frag.glsl | 425 ++++++ src/games/rdr2vk/output/0xBCF843ED.frag.glsl | 140 ++ src/games/rdr2vk/output/0xC235CFFA.comp.glsl | 91 ++ src/games/rdr2vk/output/0xFCD82342.frag.glsl | 139 ++ .../output/compiled/0x14BF23D4.frag.spv | Bin 0 -> 19744 bytes .../output/compiled/0x1B0D650C.frag.spv | Bin 0 -> 19284 bytes .../output/compiled/0x26B3FAA9.frag.spv | Bin 0 -> 19612 bytes .../output/compiled/0x6032A998.frag.spv | Bin 0 -> 19844 bytes .../output/compiled/0x76A78879.frag.spv | Bin 0 -> 19744 bytes .../output/compiled/0x7BE28339.frag.spv | Bin 0 -> 19256 bytes .../output/compiled/0x8B9C89F1.frag.spv | Bin 0 -> 63296 bytes .../output/compiled/0xA383C448.frag.spv | Bin 0 -> 30580 bytes .../output/compiled/0xBCF843ED.frag.spv | Bin 0 -> 19716 bytes .../output/compiled/0xC235CFFA.comp.spv | Bin 0 -> 14936 bytes .../output/compiled/0xFCD82342.frag.spv | Bin 0 -> 19808 bytes src/games/rdr2vk/output/output.glsl | 9 + src/games/rdr2vk/shared.h | 29 + src/games/rdr2vk/tonemap/0x2B012EDD.frag.glsl | 229 ++++ src/games/rdr2vk/tonemap/0x6B9382CA.frag.glsl | 1012 +++++++++++++++ src/games/rdr2vk/tonemap/0x809F5852.frag.glsl | 852 ++++++++++++ src/games/rdr2vk/tonemap/0x9B304112.frag.glsl | 66 + src/games/rdr2vk/tonemap/0x9F191B0B.frag.glsl | 848 ++++++++++++ src/games/rdr2vk/tonemap/0xA2ED1CB7.frag.glsl | 958 ++++++++++++++ src/games/rdr2vk/tonemap/0xCD6F15F2.frag.glsl | 66 + src/games/rdr2vk/tonemap/0xCF7FE0D7.frag.glsl | 893 +++++++++++++ src/games/rdr2vk/tonemap/0xDA9A5AA0.frag.glsl | 947 ++++++++++++++ src/games/rdr2vk/tonemap/0xDD04030E.frag.glsl | 1008 +++++++++++++++ src/games/rdr2vk/tonemap/0xE3E0B5C4.frag.glsl | 950 ++++++++++++++ .../tonemap/compiled/0x0C1275BE.frag.spv | Bin 0 -> 67920 bytes .../tonemap/compiled/0x2B012EDD.frag.spv | Bin 0 -> 26320 bytes .../tonemap/compiled/0x4205843B.frag.spv | Bin 0 -> 74184 bytes .../tonemap/compiled/0x54F0BD84.frag.spv | Bin 0 -> 67980 bytes .../tonemap/compiled/0x6B9382CA.frag.spv | Bin 0 -> 80820 bytes .../tonemap/compiled/0x809F5852.frag.spv | Bin 0 -> 59968 bytes .../tonemap/compiled/0x9B304112.frag.spv | Bin 0 -> 14564 bytes .../tonemap/compiled/0x9F191B0B.frag.spv | Bin 0 -> 59768 bytes .../tonemap/compiled/0xA2ED1CB7.frag.spv | Bin 0 -> 74244 bytes .../tonemap/compiled/0xCD6F15F2.frag.spv | Bin 0 -> 13276 bytes .../tonemap/compiled/0xCF7FE0D7.frag.spv | Bin 0 -> 66032 bytes .../tonemap/compiled/0xDA9A5AA0.frag.spv | Bin 0 -> 72660 bytes .../tonemap/compiled/0xDD04030E.frag.spv | Bin 0 -> 80812 bytes .../tonemap/compiled/0xE3E0B5C4.frag.spv | Bin 0 -> 72804 bytes src/games/rdr2vk/tonemap/tonemap.glsl | 33 + .../tonemap/tonemap_0x0C1275BE.frag.glsl | 910 +++++++++++++ .../tonemap/tonemap_0x4205843B.frag.glsl | 955 ++++++++++++++ .../tonemap/tonemap_0x54F0BD84.frag.glsl | 915 +++++++++++++ 55 files changed, 14664 insertions(+) create mode 100644 src/games/rdr2vk/addon.cpp create mode 100644 src/games/rdr2vk/common.glsl create mode 100644 src/games/rdr2vk/output/0x14BF23D4.frag.glsl create mode 100644 src/games/rdr2vk/output/0x1B0D650C.frag.glsl create mode 100644 src/games/rdr2vk/output/0x26B3FAA9.frag.glsl create mode 100644 src/games/rdr2vk/output/0x6032A998.frag.glsl create mode 100644 src/games/rdr2vk/output/0x76A78879.frag.glsl create mode 100644 src/games/rdr2vk/output/0x7BE28339.frag.glsl create mode 100644 src/games/rdr2vk/output/0x8B9C89F1.frag.glsl create mode 100644 src/games/rdr2vk/output/0xA383C448.frag.glsl create mode 100644 src/games/rdr2vk/output/0xBCF843ED.frag.glsl create mode 100644 src/games/rdr2vk/output/0xC235CFFA.comp.glsl create mode 100644 src/games/rdr2vk/output/0xFCD82342.frag.glsl create mode 100644 src/games/rdr2vk/output/compiled/0x14BF23D4.frag.spv create mode 100644 src/games/rdr2vk/output/compiled/0x1B0D650C.frag.spv create mode 100644 src/games/rdr2vk/output/compiled/0x26B3FAA9.frag.spv create mode 100644 src/games/rdr2vk/output/compiled/0x6032A998.frag.spv create mode 100644 src/games/rdr2vk/output/compiled/0x76A78879.frag.spv create mode 100644 src/games/rdr2vk/output/compiled/0x7BE28339.frag.spv create mode 100644 src/games/rdr2vk/output/compiled/0x8B9C89F1.frag.spv create mode 100644 src/games/rdr2vk/output/compiled/0xA383C448.frag.spv create mode 100644 src/games/rdr2vk/output/compiled/0xBCF843ED.frag.spv create mode 100644 src/games/rdr2vk/output/compiled/0xC235CFFA.comp.spv create mode 100644 src/games/rdr2vk/output/compiled/0xFCD82342.frag.spv create mode 100644 src/games/rdr2vk/output/output.glsl create mode 100644 src/games/rdr2vk/shared.h create mode 100644 src/games/rdr2vk/tonemap/0x2B012EDD.frag.glsl create mode 100644 src/games/rdr2vk/tonemap/0x6B9382CA.frag.glsl create mode 100644 src/games/rdr2vk/tonemap/0x809F5852.frag.glsl create mode 100644 src/games/rdr2vk/tonemap/0x9B304112.frag.glsl create mode 100644 src/games/rdr2vk/tonemap/0x9F191B0B.frag.glsl create mode 100644 src/games/rdr2vk/tonemap/0xA2ED1CB7.frag.glsl create mode 100644 src/games/rdr2vk/tonemap/0xCD6F15F2.frag.glsl create mode 100644 src/games/rdr2vk/tonemap/0xCF7FE0D7.frag.glsl create mode 100644 src/games/rdr2vk/tonemap/0xDA9A5AA0.frag.glsl create mode 100644 src/games/rdr2vk/tonemap/0xDD04030E.frag.glsl create mode 100644 src/games/rdr2vk/tonemap/0xE3E0B5C4.frag.glsl create mode 100644 src/games/rdr2vk/tonemap/compiled/0x0C1275BE.frag.spv create mode 100644 src/games/rdr2vk/tonemap/compiled/0x2B012EDD.frag.spv create mode 100644 src/games/rdr2vk/tonemap/compiled/0x4205843B.frag.spv create mode 100644 src/games/rdr2vk/tonemap/compiled/0x54F0BD84.frag.spv create mode 100644 src/games/rdr2vk/tonemap/compiled/0x6B9382CA.frag.spv create mode 100644 src/games/rdr2vk/tonemap/compiled/0x809F5852.frag.spv create mode 100644 src/games/rdr2vk/tonemap/compiled/0x9B304112.frag.spv create mode 100644 src/games/rdr2vk/tonemap/compiled/0x9F191B0B.frag.spv create mode 100644 src/games/rdr2vk/tonemap/compiled/0xA2ED1CB7.frag.spv create mode 100644 src/games/rdr2vk/tonemap/compiled/0xCD6F15F2.frag.spv create mode 100644 src/games/rdr2vk/tonemap/compiled/0xCF7FE0D7.frag.spv create mode 100644 src/games/rdr2vk/tonemap/compiled/0xDA9A5AA0.frag.spv create mode 100644 src/games/rdr2vk/tonemap/compiled/0xDD04030E.frag.spv create mode 100644 src/games/rdr2vk/tonemap/compiled/0xE3E0B5C4.frag.spv create mode 100644 src/games/rdr2vk/tonemap/tonemap.glsl create mode 100644 src/games/rdr2vk/tonemap/tonemap_0x0C1275BE.frag.glsl create mode 100644 src/games/rdr2vk/tonemap/tonemap_0x4205843B.frag.glsl create mode 100644 src/games/rdr2vk/tonemap/tonemap_0x54F0BD84.frag.glsl diff --git a/src/games/rdr2vk/addon.cpp b/src/games/rdr2vk/addon.cpp new file mode 100644 index 0000000000..df1c4621f3 --- /dev/null +++ b/src/games/rdr2vk/addon.cpp @@ -0,0 +1,213 @@ +/* + * Copyright (C) 2024 Musa Haji + * SPDX-License-Identifier: MIT + */ + +#define ImTextureID ImU64 + +#define DEBUG_LEVEL_0 + +#include + +#include +#include + +#include "../../mods/shader.hpp" +#include "../../utils/date.hpp" +#include "../../utils/settings.hpp" + +namespace { + +renodx::mods::shader::CustomShaders custom_shaders = { + + // tonemap + CustomShaderEntry(0x0C1275BE), + CustomShaderEntry(0x2B012EDD), + CustomShaderEntry(0x4205843B), + CustomShaderEntry(0x54F0BD84), + CustomShaderEntry(0x6B9382CA), + CustomShaderEntry(0x809F5852), + CustomShaderEntry(0x9B304112), + CustomShaderEntry(0x9F191B0B), + CustomShaderEntry(0xA2ED1CB7), + CustomShaderEntry(0xCD6F15F2), + CustomShaderEntry(0xCF7FE0D7), + CustomShaderEntry(0xDA9A5AA0), + CustomShaderEntry(0xDD04030E), + CustomShaderEntry(0xE3E0B5C4), + + // output + CustomShaderEntry(0x14BF23D4), + CustomShaderEntry(0x1B0D650C), + CustomShaderEntry(0x26B3FAA9), + CustomShaderEntry(0x6032A998), + CustomShaderEntry(0x76A78879), + CustomShaderEntry(0x7BE28339), + CustomShaderEntry(0x8B9C89F1), + CustomShaderEntry(0xA383C448), + CustomShaderEntry(0xBCF843ED), + CustomShaderEntry(0xC235CFFA), + CustomShaderEntry(0xFCD82342), + +}; + +namespace shader_toggle { +namespace runtime { +float g_use_shaders = 1.f; // Controlled by slider +float g_current_use_shaders = 1.f; // Will be overridden on startup + +void OnPresent( + reshade::api::command_queue*, + reshade::api::swapchain* swapchain, + const reshade::api::rect*, + const reshade::api::rect*, + uint32_t, + const reshade::api::rect*) { + if (g_use_shaders != g_current_use_shaders) { + reshade::log::message( + reshade::log::level::info, + (g_use_shaders != 0.f) ? "Enabling shaders (toggle)" : "Disabling shaders (toggle)"); + + auto* device = swapchain->get_device(); + if (device == nullptr) { + reshade::log::message(reshade::log::level::error, "Device is null in OnPresent"); + g_current_use_shaders = g_use_shaders; + return; + } + + if (g_use_shaders != 0.f) { + for (const auto& [hash, shader] : custom_shaders) { + renodx::utils::shader::AddRuntimeReplacement(device, hash, shader.code); + } + reshade::log::message( + reshade::log::level::info, + ("Injected " + std::to_string(custom_shaders.size()) + " shaders").c_str()); + } else { + renodx::utils::shader::RemoveRuntimeReplacements(device); + reshade::log::message(reshade::log::level::info, "Removed all shader replacements."); + } + + g_current_use_shaders = g_use_shaders; + } +} + +void RegisterEvents() { + g_current_use_shaders = -1.0f; + reshade::register_event(OnPresent); +} + +void UnregisterEvents() { + reshade::unregister_event(OnPresent); +} + +renodx::utils::settings::Setting* GetSetting() { + return new renodx::utils::settings::Setting{ + .key = "", + .binding = &g_use_shaders, + .value_type = renodx::utils::settings::SettingValueType::BOOLEAN, + .default_value = 1.f, + .label = "Enable Mod", + .section = "Options", + .on_change = []() { + g_current_use_shaders = -1.f; + }, + }; +} +} // namespace runtime +} // namespace shader_toggle + +renodx::utils::settings::Settings settings = { + shader_toggle::runtime::GetSetting(), + new renodx::utils::settings::Setting{ + .value_type = renodx::utils::settings::SettingValueType::BUTTON, + .label = "RenoDX Discord", + .section = "Links", + .group = "button-line-2", + .tint = 0x5865F2, + .on_change = []() { + renodx::utils::platform::LaunchURL("https://discord.gg/", "Ce9bQHQrSV"); + }, + }, + new renodx::utils::settings::Setting{ + .value_type = renodx::utils::settings::SettingValueType::BUTTON, + .label = "HDR Den Discord", + .section = "Links", + .group = "button-line-2", + .tint = 0x5865F2, + .on_change = []() { + renodx::utils::platform::LaunchURL("https://discord.gg/", "5WZXDpmbpP"); + }, + }, + new renodx::utils::settings::Setting{ + .value_type = renodx::utils::settings::SettingValueType::BUTTON, + .label = "More Mods", + .section = "Links", + .group = "button-line-2", + .tint = 0x2B3137, + .on_change = []() { + renodx::utils::platform::LaunchURL("https://github.com/clshortfuse/renodx/wiki/Mods"); + }, + }, + new renodx::utils::settings::Setting{ + .value_type = renodx::utils::settings::SettingValueType::BUTTON, + .label = "Github", + .section = "Links", + .group = "button-line-2", + .tint = 0x2B3137, + .on_change = []() { + renodx::utils::platform::LaunchURL("https://github.com/clshortfuse/renodx"); + }, + }, + new renodx::utils::settings::Setting{ + .value_type = renodx::utils::settings::SettingValueType::BUTTON, + .label = "Musa's Ko-Fi", + .section = "Links", + .group = "button-line-3", + .tint = 0xFF5A16, + .on_change = []() { renodx::utils::platform::LaunchURL("https://ko-fi.com/musaqh"); }, + }, + new renodx::utils::settings::Setting{ + .value_type = renodx::utils::settings::SettingValueType::BUTTON, + .label = "ShortFuse's Ko-Fi", + .section = "Links", + .group = "button-line-3", + .tint = 0xFF5A16, + .on_change = []() { renodx::utils::platform::LaunchURL("https://ko-fi.com/shortfuse"); }, + }, + new renodx::utils::settings::Setting{ + .value_type = renodx::utils::settings::SettingValueType::TEXT, + .label = std::string("Build: ") + renodx::utils::date::ISO_DATE_TIME, + .section = "About", + }, + new renodx::utils::settings::Setting{ + .value_type = renodx::utils::settings::SettingValueType::TEXT, + .label = std::string("- Requires HDR on in game"), + .section = "About", + }, +}; + +} // namespace + +extern "C" __declspec(dllexport) constexpr const char* NAME = "RenoDX"; +extern "C" __declspec(dllexport) constexpr const char* DESCRIPTION = "RenoDX for Red Dead Redemption 2"; + +BOOL APIENTRY DllMain(HMODULE h_module, DWORD fdw_reason, LPVOID lpv_reserved) { + switch (fdw_reason) { + case DLL_PROCESS_ATTACH: + if (!reshade::register_addon(h_module)) return FALSE; + renodx::utils::settings::use_presets = false; + renodx::mods::shader::force_pipeline_cloning = true; + renodx::utils::shader::use_replace_async = true; + shader_toggle::runtime::RegisterEvents(); + break; + case DLL_PROCESS_DETACH: + shader_toggle::runtime::UnregisterEvents(); + reshade::unregister_addon(h_module); + break; + } + + renodx::utils::settings::Use(fdw_reason, &settings); + renodx::mods::shader::Use(fdw_reason, custom_shaders); + + return TRUE; +} diff --git a/src/games/rdr2vk/common.glsl b/src/games/rdr2vk/common.glsl new file mode 100644 index 0000000000..dd7eff85d3 --- /dev/null +++ b/src/games/rdr2vk/common.glsl @@ -0,0 +1,1138 @@ +#include "./shared.h" + +// START INCLUDES + +// --- sRGB ENCODING --- +float EncodeSRGB(float x) { + return mix( + x * 12.92, + 1.055 * pow(x, 1.0 / 2.4) - 0.055, + step(0.0031308, x)); +} + +vec3 EncodeSRGB(vec3 x) { + return mix( + x * 12.92, + 1.055 * pow(x, vec3(1.0 / 2.4)) - 0.055, + step(vec3(0.0031308), x)); +} + +// --- sRGB DECODING --- +float DecodeSRGB(float x) { + return mix( + x / 12.92, + pow((x + 0.055) / 1.055, 2.4), + step(0.04045, x)); +} + +vec3 DecodeSRGB(vec3 x) { + return mix( + x / 12.92, + pow((x + 0.055) / 1.055, vec3(2.4)), + step(vec3(0.04045), x)); +} + +// --- GAMMA ENCODING --- +float EncodeGamma(float x, float gamma) { + return pow(x, 1.0 / gamma); +} + +vec3 EncodeGamma(vec3 x, float gamma) { + return pow(x, vec3(1.0 / gamma)); +} + +// --- GAMMA DECODING --- +float DecodeGamma(float x, float gamma) { + return pow(x, gamma); +} + +vec3 DecodeGamma(vec3 x, float gamma) { + return pow(x, vec3(gamma)); +} + +// Fix or undo gamma mismatch by converting between sRGB and gamma 2.2 +float CorrectGammaMismatch(float x, bool inverse) { + return inverse + ? DecodeSRGB(EncodeGamma(x, 2.2)) // undo fix + : DecodeGamma(EncodeSRGB(x), 2.2); // apply fix +} + +vec3 CorrectGammaMismatch(vec3 x, bool inverse) { + vec3 s = sign(x); + vec3 a = abs(x); + + vec3 result = inverse + ? DecodeSRGB(EncodeGamma(a, 2.2)) + : DecodeGamma(EncodeSRGB(a), 2.2); + + return s * result; +} + +const mat3 BT709_TO_BT2020_MAT = mat3( + vec3(0.6274039149284363, 0.06909728795289993, 0.0163914393633604), + vec3(0.3292830288410187, 0.9195404052734375, 0.08801330626010895), + vec3(0.04331306740641594, 0.01136231515556574, 0.8955952525138855)); + +const mat3 BT2020_TO_BT709_MAT = mat3( + vec3(1.6604909896850586, -0.12455047667026520, -0.01815076358616352), + vec3(-0.5876411199569702, 1.1328998804092407, -0.10057889670133591), + vec3(-0.07284986227750778, -0.00834942236542702, 1.1187297105789185)); + +vec3 BT2020FromBT709(vec3 bt709) { + return BT709_TO_BT2020_MAT * bt709; +} + +vec3 BT709FromBT2020(vec3 bt2020) { + return BT2020_TO_BT709_MAT * bt2020; +} + +// START ACES INCLUDE + +// color conversion matrices +const mat3 BT709_TO_XYZ_MAT = mat3( + vec3(0.4123907993, 0.2126390059, 0.0193308187), + vec3(0.3575843394, 0.7151686788, 0.1191947798), + vec3(0.1804807884, 0.0721923154, 0.9505321522)); + +const mat3 XYZ_TO_BT709_MAT = mat3( + vec3(3.2409699419, -0.9692436363, 0.0556300797), + vec3(-1.5373831776, 1.8759675015, -0.2039769589), + vec3(-0.4986107603, 0.0415550574, 1.0569715142)); + +const mat3 BT2020_TO_XYZ_MAT = mat3( + vec3(0.6369580483, 0.2627002120, 0.0000000000), + vec3(0.1446169036, 0.6779980715, 0.0280726930), + vec3(0.1688809752, 0.0593017165, 1.0609850577)); + +const mat3 XYZ_TO_BT2020_MAT = mat3( + vec3(1.7166511880, -0.6666843518, 0.0176398574), + vec3(-0.3556707838, 1.6164812366, -0.0427706133), + vec3(-0.2533662814, 0.0157685458, 0.9421031212)); + +const mat3 AP0_TO_XYZ_MAT = mat3( + vec3(0.9525523959, 0.3439664498, 0.0000000000), + vec3(0.0000000000, 0.7281660966, 0.0000000000), + vec3(0.0000936786, -0.0721325464, 1.0088251844)); + +const mat3 XYZ_TO_AP0_MAT = mat3( + vec3(1.0498110175, -0.4959030231, 0.0000000000), + vec3(0.0000000000, 1.3733130458, 0.0000000000), + vec3(-0.0000974845, 0.0982400361, 0.9912520182)); + +const mat3 AP1_TO_XYZ_MAT = mat3( + vec3(0.6624541811, 0.2722287168, -0.0055746495), + vec3(0.1340042065, 0.6740817658, 0.0040607335), + vec3(0.1561876870, 0.0536895174, 1.0103391003)); + +const mat3 XYZ_TO_AP1_MAT = mat3( + vec3(1.6410233797, -0.6636628587, 0.0117218943), + vec3(-0.3248032942, 1.6153315917, -0.0082844420), + vec3(-0.2364246952, 0.0167563477, 0.9883948585)); + +// With Bradford +const mat3 AP1_TO_BT709_MAT = mat3( + vec3(1.7050509927, -0.1302564175, -0.0240033568), + vec3(-0.6217921207, 1.1408047366, -0.1289689761), + vec3(-0.0832588720, -0.0105483191, 1.1529723329)); + +// With Bradford +const mat3 AP1_TO_BT2020_MAT = mat3( + vec3(1.0258247477, -0.0022343695, -0.0050133515), + vec3(-0.0200531908, 1.0045865019, -0.0252900718), + vec3(-0.0057715568, -0.0023521324, 1.0303034233)); + +const mat3 BT709_TO_AP1_MAT = mat3( + vec3(0.6130974024, 0.0701937225, 0.0206155929), + vec3(0.3395231462, 0.9163538791, 0.1095697729), + vec3(0.0473794514, 0.0134523985, 0.8698146342)); + +// With Bradford +const mat3 BT2020_TO_AP1_MAT = mat3( + vec3(0.9748949779, 0.0021795628, 0.0047972397), + vec3(0.0195991086, 0.9955354689, 0.0245320166), + vec3(0.0055059134, 0.0022849683, 0.9706707437)); + +// chromatic adaptation method: von Kries +// chromatic adaptation transform: Bradford +const mat3 D65_TO_D60_CAT = mat3( + vec3(1.01303493, 0.00769822997, -0.00284131732), + vec3(0.00610525766, 0.998163342, 0.00468515651), + vec3(-0.0149709433, -0.00503203831, 0.924506127)); + +// chromatic adaptation method: von Kries +// chromatic adaptation transform: Bradford +const mat3 D60_TO_D65_MAT = mat3( + vec3(0.987223982, -0.00759837171, 0.00307257706), + vec3(-0.00611322838, 1.00186145, -0.00509596150), + vec3(0.0159532874, 0.00533003592, 1.08168065)); + +const mat3 AP1_TO_BT709D60_MAT = XYZ_TO_BT709_MAT * AP1_TO_XYZ_MAT; +const mat3 AP1_TO_BT2020D60_MAT = XYZ_TO_BT2020_MAT * AP1_TO_XYZ_MAT; +const mat3 AP1_TO_AP1D65_MAT = XYZ_TO_AP1_MAT * (D60_TO_D65_MAT * AP1_TO_XYZ_MAT); + +const mat3 BT709_TO_AP0_MAT = XYZ_TO_AP0_MAT * (D65_TO_D60_CAT * BT709_TO_XYZ_MAT); + +const mat3 AP0_TO_AP1_MAT = XYZ_TO_AP1_MAT * AP0_TO_XYZ_MAT; +const mat3 AP1_TO_AP0_MAT = XYZ_TO_AP0_MAT * AP1_TO_XYZ_MAT; + +const mat3 RRT_SAT_MAT = mat3( + vec3(0.9708890, 0.0108892, 0.0108892), + vec3(0.0269633, 0.9869630, 0.0269633), + vec3(0.00214758, 0.00214758, 0.96214800)); + +const mat3 ODT_SAT_MAT = mat3( + vec3(0.949056, 0.019056, 0.019056), + vec3(0.0471857, 0.9771860, 0.0471857), + vec3(0.00375827, 0.00375827, 0.93375800)); + +const mat3 M = mat3( + vec3(0.5, -1.0, 0.5), + vec3(-1.0, 1.0, 0.5), + vec3(0.5, 0.0, 0.0)); + +// Define log10 function for single float +float log10(float x) { + return log(x) / log(10.0); +} + +// Define log10 function for vec2 +vec2 log10(vec2 v) { + return log(v) / log(10.0); +} + +float Rgb2Yc(vec3 rgb) { + const float yc_radius_weight = 1.75; + // Converts RGB to a luminance proxy, here called YC + // YC is ~ Y + K * Chroma + // Constant YC is a cone-shaped surface in RGB space, with the tip on the + // neutral axis, towards white. + // YC is normalized: RGB 1 1 1 maps to YC = 1 + // + // ycRadiusWeight defaults to 1.75, although can be overridden in function + // call to rgb_2_yc + // ycRadiusWeight = 1 -> YC for pure cyan, magenta, yellow == YC for neutral + // of same value + // ycRadiusWeight = 2 -> YC for pure red, green, blue == YC for neutral of + // same value. + + float r = rgb[0]; + float g = rgb[1]; + float b = rgb[2]; + + float chroma = sqrt(b * (b - g) + g * (g - r) + r * (r - b)); + + return (b + g + r + yc_radius_weight * chroma) / 3.0; +} + +float Rgb2Saturation(vec3 rgb) { + float minrgb = min(min(rgb.r, rgb.g), rgb.b); + float maxrgb = max(max(rgb.r, rgb.g), rgb.b); + return (max(maxrgb, 1e-10) - max(minrgb, 1e-10)) / max(maxrgb, 1e-2); +} + +// Sigmoid function in the range 0 to 1 spanning -2 to +2. +float SigmoidShaper(float x) { + float t = max(1.0 - abs(0.5 * x), 0.0); + float y = 1.0 + sign(x) * (1.0 - t * t); + return 0.5 * y; +} + +float GlowFwd(float yc_in, float glow_gain_in, float glow_mid) { + float glow_gain_out; + + if (yc_in <= 2.0 / 3.0 * glow_mid) { + glow_gain_out = glow_gain_in; + } else if (yc_in >= 2.0 * glow_mid) { + glow_gain_out = 0.0; + } else { + glow_gain_out = glow_gain_in * (glow_mid / yc_in - 0.5); + } + + return glow_gain_out; +} + +// Transformations from RGB to other color representations +float Rgb2Hue(vec3 rgb) { + const float aces_pi = 3.14159265359; + // Returns a geometric hue angle in degrees (0-360) based on RGB values. + // For neutral colors, hue is undefined and the function will return a quiet NaN value. + float hue; + if (rgb.r == rgb.g && rgb.g == rgb.b) { + hue = 0.0; // RGB triplets where RGB are equal have an undefined hue + } else { + hue = (180.0 / aces_pi) * atan(sqrt(3.0) * (rgb.g - rgb.b), 2.0 * rgb.r - rgb.g - rgb.b); + } + + if (hue < 0.0) { + hue = hue + 360.0; + } + + return clamp(hue, 0.0, 360.0); +} + +float CenterHue(float hue, float center_h) { + float hue_centered = hue - center_h; + if (hue_centered < -180.0) { + hue_centered += 360.0; + } else if (hue_centered > 180.0) { + hue_centered -= 360.0; + } + return hue_centered; +} + +vec3 YToLinCV(vec3 y, float y_max, float y_min) { + return (y - y_min) / (y_max - y_min); +} + +vec4 YToLinCV(vec4 y, float y_max, float y_min) { + return (y - y_min) / (y_max - y_min); +} + +// Transformations between CIE XYZ tristimulus values and CIE x,y +// chromaticity coordinates +vec3 XYZToXyY(vec3 xyz) { + vec3 xy_y; + float divisor = (xyz[0] + xyz[1] + xyz[2]); + if (divisor == 0.0) + divisor = 1e-10; + xy_y[0] = xyz[0] / divisor; + xy_y[1] = xyz[1] / divisor; + xy_y[2] = xyz[1]; + + return xy_y; +} + +vec3 XyYToXYZ(vec3 xy_y) { + vec3 xyz; + xyz[0] = xy_y[0] * xy_y[2] / max(xy_y[1], 1e-10); + xyz[1] = xy_y[2]; + xyz[2] = (1.0 - xy_y[0] - xy_y[1]) * xy_y[2] / max(xy_y[1], 1e-10); + + return xyz; +} + +const float DIM_SURROUND_GAMMA = 0.9811; + +vec3 DarkToDim(vec3 xyz, float dim_surround_gamma) { + vec3 xy_y = XYZToXyY(xyz); + xy_y.z = clamp(xy_y.z, 0.0, 65504.0); + xy_y.z = pow(xy_y.z, DIM_SURROUND_GAMMA); + return XyYToXYZ(xy_y); +} + +const float MIN_STOP_SDR = -6.5; +const float MAX_STOP_SDR = 6.5; + +const float MIN_STOP_RRT = -15.0; +const float MAX_STOP_RRT = 18.0; + +const float MIN_LUM_SDR = 0.02; +const float MAX_LUM_SDR = 48.0; + +const float MIN_LUM_RRT = 0.0001; +const float MAX_LUM_RRT = 10000.0; + +const mat2 MIN_LUM_TABLE = mat2( + -4.0000000, -1.6989700, /* log10(0.0001), log10(0.02) */ + MIN_STOP_RRT, MIN_STOP_SDR); + +const mat2 MAX_LUM_TABLE = mat2( + 1.6812413, 4.0000000, /* log10(48.0), log10(10000) */ + MAX_STOP_SDR, MAX_STOP_RRT); + +float Interpolate1D(mat2 table, float p) { + float x0 = table[0][0]; + float x1 = table[0][1]; + float y0 = table[1][0]; + float y1 = table[1][1]; + + if (p < x0) return y0; + if (p >= x1) return y1; + + float s = (p - x0) / (x1 - x0); // 0-to-1 mix factor + return mix(y0, y1, s); +} + +vec3 LinCv2Y(vec3 lin_cv, float y_max, float y_min) { + return lin_cv * (y_max - y_min) + y_min; +} + +float LookUpAcesMin(float min_lum_log10) { + return 0.18 * exp2(Interpolate1D(MIN_LUM_TABLE, min_lum_log10)); +} + +float LookUpAcesMax(float max_lum_log10) { + return 0.18 * exp2(Interpolate1D(MAX_LUM_TABLE, max_lum_log10)); +} + +float SSTS( + float x, + vec3 y_min, vec3 y_mid, vec3 y_max, + vec3 coefs_low_a, vec3 coefs_low_b, + vec3 coefs_high_a, vec3 coefs_high_b) { + const int N_KNOTS_LOW = 4; + const int N_KNOTS_HIGH = 4; + + float coefs_low[6]; + + coefs_low[0] = coefs_low_a.x; + coefs_low[1] = coefs_low_a.y; + coefs_low[2] = coefs_low_a.z; + coefs_low[3] = coefs_low_b.x; + coefs_low[4] = coefs_low_b.y; + coefs_low[5] = coefs_low_b.z; + float coefs_high[6]; + coefs_high[0] = coefs_high_a.x; + coefs_high[1] = coefs_high_a.y; + coefs_high[2] = coefs_high_a.z; + coefs_high[3] = coefs_high_b.x; + coefs_high[4] = coefs_high_b.y; + coefs_high[5] = coefs_high_b.z; + + // Check for negatives or zero before taking the log. If negative or zero, + // set to HALF_MIN. + float log_x = log10(max(x, 1.17549435082228750797e-38)); // equivalent to asfloat(0x00800000) + + float log_y; + + if (log_x > y_max.x) { + // Above max breakpoint (overshoot) + // If MAX_PT slope is 0, this is just a straight line and always returns + // maxLum + // y = mx+b + // log_y = computeGraphY(C.Max.z, log_x, (C.Max.y) - (C.Max.z * (C.Max.x))); + log_y = y_max.y; + } else if (log_x >= y_mid.x) { + // Part of Midtones area (Must have slope) + float knot_coord = float(N_KNOTS_HIGH - 1) * (log_x - y_mid.x) / (y_max.x - y_mid.x); + int j = int(knot_coord); + float t = knot_coord - float(j); + + vec3 cf = vec3(coefs_high[j], coefs_high[j + 1], coefs_high[j + 2]); + + vec3 monomials = vec3(t * t, t, 1.0); + log_y = dot(monomials, M * cf); + } else if (log_x > y_min.x) { + float knot_coord = float(N_KNOTS_LOW - 1) * (log_x - y_min.x) / (y_mid.x - y_min.x); + int j = int(knot_coord); + float t = knot_coord - float(j); + + vec3 cf = vec3(coefs_low[j], coefs_low[j + 1], coefs_low[j + 2]); + + vec3 monomials = vec3(t * t, t, 1.0); + log_y = dot(monomials, M * cf); + } else { //(log_x <= (C.Min.x)) + // Below min breakpoint (undershoot) + // log_y = computeGraphY(C.Min.z, log_x, ((C.Min.y) - C.Min.z * (C.Min.x))); + log_y = y_min.y; + } + + return pow(10.0, log_y); +} + +const float LIM_CYAN = 1.147; +const float LIM_MAGENTA = 1.264; +const float LIM_YELLOW = 1.312; +const float THR_CYAN = 0.815; +const float THR_MAGENTA = 0.803; +const float THR_YELLOW = 0.880; +const float PWR = 1.2; + +float GamutCompressChannel(float dist, float lim, float thr, float pwr) { + float compr_dist; + float scl; + float nd; + float p; + + if (dist < thr) { + compr_dist = dist; // No compression below threshold + } else { + // Calculate scale factor for y = 1 intersect + scl = (lim - thr) / pow(pow((1.0 - thr) / (lim - thr), -pwr) - 1.0, 1.0 / pwr); + + // Normalize distance outside threshold by scale factor + nd = (dist - thr) / scl; + p = pow(nd, pwr); + + compr_dist = thr + scl * nd / (pow(1.0 + p, 1.0 / pwr)); // Compress + } + + return compr_dist; +} + +vec3 GamutCompress(vec3 lin_ap1) { + // Achromatic axis + float ach = max(lin_ap1.r, max(lin_ap1.g, lin_ap1.b)); + float abs_ach = abs(ach); + // Distance from the achromatic axis for each color component aka inverse RGB ratios + vec3 dist = ach != 0.0 ? (ach - lin_ap1) / abs_ach : vec3(0.0); + + // Compress distance with parameterized shaper function + vec3 compr_dist = vec3( + GamutCompressChannel(dist.r, LIM_CYAN, THR_CYAN, PWR), + GamutCompressChannel(dist.g, LIM_MAGENTA, THR_MAGENTA, PWR), + GamutCompressChannel(dist.b, LIM_YELLOW, THR_YELLOW, PWR)); + + // Recalculate RGB from compressed distance and achromatic + vec3 compr_lin_ap1 = ach - compr_dist * abs_ach; + + return compr_lin_ap1; +} + +vec3 RRT(vec3 aces) { + const vec3 AP1_RGB2Y = vec3(0.2722287168, 0.6740817658, 0.0536895174); + + // --- Glow module --- // + // "Glow" module constants + const float RRT_GLOW_GAIN = 0.05; + const float RRT_GLOW_MID = 0.08; + float saturation = Rgb2Saturation(aces); + float yc_in = Rgb2Yc(aces); + const float s = SigmoidShaper((saturation - 0.4) / 0.2); + float added_glow = 1.0 + GlowFwd(yc_in, RRT_GLOW_GAIN * s, RRT_GLOW_MID); + aces *= added_glow; + + // --- Red modifier --- // + // Red modifier constants + const float RRT_RED_SCALE = 0.82; + const float RRT_RED_PIVOT = 0.03; + const float RRT_RED_HUE = 0.0; + const float RRT_RED_WIDTH = 135.0; + float hue = Rgb2Hue(aces); + const float centered_hue = CenterHue(hue, RRT_RED_HUE); + float hue_weight; + { + // hueWeight = cubic_basis_shaper(centeredHue, RRT_RED_WIDTH); + hue_weight = smoothstep(0.0, 1.0, 1.0 - abs(2.0 * centered_hue / RRT_RED_WIDTH)); + hue_weight *= hue_weight; + } + + aces.r += hue_weight * saturation * (RRT_RED_PIVOT - aces.r) * (1.0 - RRT_RED_SCALE); + + // --- ACES to RGB rendering space --- // + aces = clamp(aces, 0.0, 65535.0); + vec3 rgb_pre = AP0_TO_AP1_MAT * aces; + rgb_pre = clamp(rgb_pre, 0.0, 65504.0); + + // --- Global desaturation --- // + // rgb_pre = RRT_SAT_MAT * rgb_pre; + const float RRT_SAT_FACTOR = 0.96; + rgb_pre = mix(vec3(dot(rgb_pre, AP1_RGB2Y)), rgb_pre, RRT_SAT_FACTOR); + + return rgb_pre; +} + +vec3 ODTToneMap(vec3 rgb_pre, float min_y, float max_y) { + // Aces-dev has more expensive version + // AcesParams PARAMS = init_aces_params(minY, maxY); + + const mat2 BENDS_LOW_TABLE = mat2( + MIN_STOP_RRT, MIN_STOP_SDR, + 0.18, 0.35); + + const mat2 BENDS_HIGH_TABLE = mat2( + MAX_STOP_SDR, MAX_STOP_RRT, + 0.89, 0.90); + + float min_lum_log10 = log10(min_y); + float max_lum_log10 = log10(max_y); + float aces_min = LookUpAcesMin(min_lum_log10); + float aces_max = LookUpAcesMax(max_lum_log10); + + // float3 MIN_PT = vec3(lookup_ACESmin(minLum), minLum, 0.0); + const vec3 MID_PT = vec3(0.18, 4.8, 1.55); + // float3 MAX_PT = vec3(lookup_ACESmax(maxLum), maxLum, 0.0); + + vec3 coefs_low_a; + vec3 coefs_low_b; + vec3 coefs_high_a; + vec3 coefs_high_b; + + vec2 log_min = vec2(log10(aces_min), min_lum_log10); + vec2 LOG_MID = vec2(log10(MID_PT.xy)); + vec2 log_max = vec2(log10(aces_max), max_lum_log10); + + float knot_inc_low = (LOG_MID.x - log_min.x) / 3.0; + + // Determine two lowest coefficients (straddling minPt) + coefs_low_a.x = log_min.y; + coefs_low_a.y = coefs_low_a.x; + + // Determine two highest coefficients (straddling midPt) + float min_coef = (LOG_MID.y - MID_PT.z * LOG_MID.x); + coefs_low_b.x = (MID_PT.z * (LOG_MID.x - 0.5 * knot_inc_low)) + (LOG_MID.y - MID_PT.z * LOG_MID.x); + coefs_low_b.y = (MID_PT.z * (LOG_MID.x + 0.5 * knot_inc_low)) + (LOG_MID.y - MID_PT.z * LOG_MID.x); + coefs_low_b.z = coefs_low_b.y; + + // Middle coefficient (which defines the "sharpness of the bend") is linearly interpolated + float pct_low = Interpolate1D(BENDS_LOW_TABLE, log2(aces_min / 0.18)); + coefs_low_a.z = log_min.y + pct_low * (LOG_MID.y - log_min.y); + + float knot_inc_high = (log_max.x - LOG_MID.x) / 3.0; + + // Determine two lowest coefficients (straddling midPt) + // float minCoef = ( logMid.y - MID_PT.z * logMid.x); + coefs_high_a.x = (MID_PT.z * (LOG_MID.x - 0.5 * knot_inc_high)) + min_coef; + coefs_high_a.y = (MID_PT.z * (LOG_MID.x + 0.5 * knot_inc_high)) + min_coef; + + // Determine two highest coefficients (straddling maxPt) + // coefs_high[3] = (MAX_PT.z * (log_max.x-0.5*knotIncHigh)) + ( log_max.y - MAX_PT.z * log_max.x); + // coefs_high[4] = (MAX_PT.z * (log_max.x+0.5*knotIncHigh)) + ( log_max.y - MAX_PT.z * log_max.x); + // NOTE: if slope=0, then the above becomes just + coefs_high_b.x = log_max.y; + coefs_high_b.y = coefs_high_b.x; + coefs_high_b.z = coefs_high_b.y; + // leaving it as a variable for now in case we decide we need non-zero slope extensions + + // Middle coefficient (which defines the "sharpness of the bend") is linearly interpolated + + float pct_high = Interpolate1D(BENDS_HIGH_TABLE, log2(aces_max / 0.18)); + coefs_high_a.z = LOG_MID.y + pct_high * (log_max.y - LOG_MID.y); + + vec3 rgb_post = vec3( + SSTS(rgb_pre.x, vec3(log_min.x, log_min.y, 0.0), vec3(LOG_MID.x, LOG_MID.y, MID_PT.z), vec3(log_max.x, log_max.y, 0.0), coefs_low_a, coefs_low_b, coefs_high_a, coefs_high_b), + SSTS(rgb_pre.y, vec3(log_min.x, log_min.y, 0.0), vec3(LOG_MID.x, LOG_MID.y, MID_PT.z), vec3(log_max.x, log_max.y, 0.0), coefs_low_a, coefs_low_b, coefs_high_a, coefs_high_b), + SSTS(rgb_pre.z, vec3(log_min.x, log_min.y, 0.0), vec3(LOG_MID.x, LOG_MID.y, MID_PT.z), vec3(log_max.x, log_max.y, 0.0), coefs_low_a, coefs_low_b, coefs_high_a, coefs_high_b)); + + // Nits to Linear + vec3 linear_cv = YToLinCV(rgb_post, max_y, min_y); + return clamp(rgb_post, 0.0, 65535.0); +} + +vec4 ODTToneMap(vec4 rgb_pre, float min_y, float max_y) { + // Aces-dev has more expensive version + // AcesParams PARAMS = init_aces_params(minY, maxY); + + const mat2 BENDS_LOW_TABLE = mat2( + MIN_STOP_RRT, MIN_STOP_SDR, + 0.18, 0.35); + + const mat2 BENDS_HIGH_TABLE = mat2( + MAX_STOP_SDR, MAX_STOP_RRT, + 0.89, 0.90); + + float min_lum_log10 = log10(min_y); + float max_lum_log10 = log10(max_y); + float aces_min = LookUpAcesMin(min_lum_log10); + float aces_max = LookUpAcesMax(max_lum_log10); + + // float3 MIN_PT = vec3(lookup_ACESmin(minLum), minLum, 0.0); + const vec3 MID_PT = vec3(0.18, 4.8, 1.55); + // float3 MAX_PT = vec3(lookup_ACESmax(maxLum), maxLum, 0.0); + + vec3 coefs_low_a; + vec3 coefs_low_b; + vec3 coefs_high_a; + vec3 coefs_high_b; + + vec2 log_min = vec2(log10(aces_min), min_lum_log10); + vec2 LOG_MID = vec2(log10(MID_PT.xy)); + vec2 log_max = vec2(log10(aces_max), max_lum_log10); + + float knot_inc_low = (LOG_MID.x - log_min.x) / 3.0; + + // Determine two lowest coefficients (straddling minPt) + coefs_low_a.x = log_min.y; + coefs_low_a.y = coefs_low_a.x; + + // Determine two highest coefficients (straddling midPt) + float min_coef = (LOG_MID.y - MID_PT.z * LOG_MID.x); + coefs_low_b.x = (MID_PT.z * (LOG_MID.x - 0.5 * knot_inc_low)) + (LOG_MID.y - MID_PT.z * LOG_MID.x); + coefs_low_b.y = (MID_PT.z * (LOG_MID.x + 0.5 * knot_inc_low)) + (LOG_MID.y - MID_PT.z * LOG_MID.x); + coefs_low_b.z = coefs_low_b.y; + + // Middle coefficient (which defines the "sharpness of the bend") is linearly interpolated + float pct_low = Interpolate1D(BENDS_LOW_TABLE, log2(aces_min / 0.18)); + coefs_low_a.z = log_min.y + pct_low * (LOG_MID.y - log_min.y); + + float knot_inc_high = (log_max.x - LOG_MID.x) / 3.0; + + // Determine two lowest coefficients (straddling midPt) + // float minCoef = ( logMid.y - MID_PT.z * logMid.x); + coefs_high_a.x = (MID_PT.z * (LOG_MID.x - 0.5 * knot_inc_high)) + min_coef; + coefs_high_a.y = (MID_PT.z * (LOG_MID.x + 0.5 * knot_inc_high)) + min_coef; + + // Determine two highest coefficients (straddling maxPt) + // coefs_high[3] = (MAX_PT.z * (log_max.x-0.5*knotIncHigh)) + ( log_max.y - MAX_PT.z * log_max.x); + // coefs_high[4] = (MAX_PT.z * (log_max.x+0.5*knotIncHigh)) + ( log_max.y - MAX_PT.z * log_max.x); + // NOTE: if slope=0, then the above becomes just + coefs_high_b.x = log_max.y; + coefs_high_b.y = coefs_high_b.x; + coefs_high_b.z = coefs_high_b.y; + // leaving it as a variable for now in case we decide we need non-zero slope extensions + + // Middle coefficient (which defines the "sharpness of the bend") is linearly interpolated + + float pct_high = Interpolate1D(BENDS_HIGH_TABLE, log2(aces_max / 0.18)); + coefs_high_a.z = LOG_MID.y + pct_high * (log_max.y - LOG_MID.y); + + vec4 rgb_post = vec4( + SSTS(rgb_pre.x, vec3(log_min.x, log_min.y, 0.0), vec3(LOG_MID.x, LOG_MID.y, MID_PT.z), vec3(log_max.x, log_max.y, 0.0), coefs_low_a, coefs_low_b, coefs_high_a, coefs_high_b), + SSTS(rgb_pre.y, vec3(log_min.x, log_min.y, 0.0), vec3(LOG_MID.x, LOG_MID.y, MID_PT.z), vec3(log_max.x, log_max.y, 0.0), coefs_low_a, coefs_low_b, coefs_high_a, coefs_high_b), + SSTS(rgb_pre.z, vec3(log_min.x, log_min.y, 0.0), vec3(LOG_MID.x, LOG_MID.y, MID_PT.z), vec3(log_max.x, log_max.y, 0.0), coefs_low_a, coefs_low_b, coefs_high_a, coefs_high_b), + SSTS(rgb_pre.w, vec3(log_min.x, log_min.y, 0.0), vec3(LOG_MID.x, LOG_MID.y, MID_PT.z), vec3(log_max.x, log_max.y, 0.0), coefs_low_a, coefs_low_b, coefs_high_a, coefs_high_b)); + + // Nits to Linear + vec4 linear_cv = YToLinCV(rgb_post, max_y, min_y); + return clamp(rgb_post, 0.0, 65535.0); +} + +vec3 ODT(vec3 rgb_pre, float min_y, float max_y, mat3 odt_matrix) { + vec3 tonescaled = ODTToneMap(rgb_pre, min_y, max_y); + vec3 output_color = odt_matrix * tonescaled; + return output_color; +} + +vec4 ODT(vec4 rgb_pre, float min_y, float max_y, mat3 odt_matrix) { + vec4 tonescaled = ODTToneMap(rgb_pre, min_y, max_y); + vec4 output_color = vec4(odt_matrix * tonescaled.rgb, tonescaled.a); + return output_color; +} + +vec3 RRTAndODT(vec3 color, float min_y, float max_y, mat3 odt_matrix) { + color = BT709_TO_AP0_MAT * color; + color = RRT(color); + color = ODT(color, min_y, max_y, odt_matrix); + return color; +} + +vec3 RGCAndRRTAndODT(vec3 color, float min_y, float max_y, mat3 odt_matrix) { + color = BT709_TO_AP1_MAT * color; // BT709 to AP1 + color = GamutCompress(color); // Compresses to AP1 + color = AP1_TO_AP0_MAT * color; // Convert to AP0 + color = RRT(color); // RRT AP0 => AP1 + color = ODT(color, min_y, max_y, odt_matrix); // ODT AP1 => Matrix + return color; +} + +// END ACES INCLUDE + +const mat3 BT709_TO_OKLAB_LMS = mat3( + 0.4122214708, 0.2119034982, 0.0883024619, + 0.5363325363, 0.6806995451, 0.2817188376, + 0.0514459929, 0.1073969566, 0.6299787005); + +const mat3 OKLAB_LMS_TO_OKLAB = mat3( + 0.2104542553, 1.9779984951, 0.0259040371, + 0.7936177850, -2.4285922050, 0.7827717662, + -0.0040720468, 0.4505937099, -0.8086757660); + +const mat3 OKLAB_TO_OKLAB_LMS = mat3( + 1.0000000000, 1.0000000000, 1.0000000000, + 0.3963377774, -0.1055613458, -0.0894841775, + 0.2158037573, -0.0638541728, -1.2914855480); + +const mat3 OKLAB_LMS_TO_BT709 = mat3( + 4.0767416621, -1.2684380046, -0.0041960863, + -3.3077115913, 2.6097574011, -0.7034186147, + 0.2309699292, -0.3413193965, 1.7076147010); + +vec3 okLabFromBT709(vec3 bt709) { + vec3 lms = BT709_TO_OKLAB_LMS * bt709; + lms = sign(lms) * pow(abs(lms), vec3(1.0 / 3.0)); // cube-root with sign + return OKLAB_LMS_TO_OKLAB * lms; +} + +vec3 bt709FromOKLab(vec3 okLab) { + vec3 lms = OKLAB_TO_OKLAB_LMS * okLab; + lms *= lms * lms; // cube + return OKLAB_LMS_TO_BT709 * lms; +} + +vec3 okLChFromOKLab(vec3 okLab) { + float L = okLab.x; + float a = okLab.y; + float b = okLab.z; + return vec3(L, + length(okLab.yz), // C + atan(b, a)); // h (radians) +} + +vec3 okLabFromOKLCh(vec3 okLCh) { + float L = okLCh.x; + float C = okLCh.y; + float h = okLCh.z; + return vec3(L, + C * cos(h), + C * sin(h)); +} + +vec3 okLChFromBT709(vec3 bt709) { + return okLChFromOKLab(okLabFromBT709(bt709)); +} + +vec3 bt709FromOKLCh(vec3 okLCh) { + return bt709FromOKLab(okLabFromOKLCh(okLCh)); +} + +vec3 EncodePQ(vec3 color, float scaling) { + float M1 = 2610.f / 16384.f; // 0.1593017578125f; + float M2 = 128.f * (2523.f / 4096.f); // 78.84375f; + float C1 = 3424.f / 4096.f; // 0.8359375f; + float C2 = 32.f * (2413.f / 4096.f); // 18.8515625f; + float C3 = 32.f * (2392.f / 4096.f); // 18.6875f; + color *= (scaling / 10000.f); + vec3 y_m1 = pow(color, vec3(M1)); + return pow((vec3(C1) + vec3(C2) * y_m1) / (1.f + vec3(C3) * y_m1), vec3(M2)); +} +vec3 EncodePQ(vec3 color) { + return EncodePQ(color, 10000.f); +} + +vec3 DecodePQ(vec3 in_color, float scaling) { + float M1 = 2610.f / 16384.f; // 0.1593017578125f; + float M2 = 128.f * (2523.f / 4096.f); // 78.84375f; + float C1 = 3424.f / 4096.f; // 0.8359375f; + float C2 = 32.f * (2413.f / 4096.f); // 18.8515625f; + float C3 = 32.f * (2392.f / 4096.f); // 18.6875f; + + vec3 e_m12 = pow(in_color, 1.f / vec3(M2)); + vec3 out_color = pow(max(e_m12 - vec3(C1), 0) / (vec3(C2) - vec3(C3) * e_m12), + 1.f / vec3(M1)); + return out_color * (10000.f / scaling); +} +vec3 DecodePQ(vec3 color) { + return DecodePQ(color, 10000.f); +} + +// const mat3 XYZ_TO_LMS_MAT = +// mat3(0.3592832590121217f, 0.6976051147779502f, -0.0358915932320290f, +// -0.1920808463704993f, 1.1004767970374321f, 0.0753748658519118f, +// 0.0070797844607479f, 0.0748396662186362f, 0.8433265453898765f); + +// const mat3 LMS_TO_XYZ_MAT = +// mat3(2.07018005669561320, -1.32645687610302100, 0.206616006847855170, +// 0.36498825003265756, 0.68046736285223520, -0.045421753075853236, +// -0.04959554223893212, -0.04942116118675749, 1.187995941732803400); +const mat3 XYZ_TO_LMS_MAT = mat3( + 0.3592832590121217, -0.1920808463704993, 0.0070797844607479, + 0.6976051147779502, 1.1004767970374321, 0.0748396662186362, + -0.0358915932320290, 0.0753748658519118, 0.8433265453898765); + +const mat3 LMS_TO_XYZ_MAT = mat3( + 2.0701800566956132, 0.36498825003265756, -0.04959554223893212, + -1.3264568761030210, 0.68046736285223520, -0.04942116118675749, + 0.20661600684785517, -0.045421753075853236, 1.1879959417328034); + +vec3 IctcpFromBT709(vec3 bt709_color) { + vec3 xyz_color = BT709_TO_XYZ_MAT * bt709_color; + vec3 lms_color = XYZ_TO_LMS_MAT * xyz_color; + + // mat3 mat = mat3( + // 0.5000, 0.5000, 0.0000, + // 1.6137, -3.3234, 1.7097, + // 4.3780, -4.2455, -0.1325); + const mat3 ICTCP_LMS_TO_ICTCP_MAT = mat3( + 0.5000, 1.6137, 4.3780, + 0.5000, -3.3234, -4.2455, + 0.0000, 1.7097, -0.1325); + + return ICTCP_LMS_TO_ICTCP_MAT * EncodePQ(lms_color, 100.0f); +} + +vec3 BT709FromICtCp(vec3 col) { + // mat3 mat = mat3(1.0, 0.00860514569398152, 0.11103560447547328, 1.0, + // -0.00860514569398152, -0.11103560447547328, 1.0, + // 0.56004885956263900, -0.32063747023212210); + const mat3 ICTCP_TO_LMS_MAT = mat3( + 1.0, 1.0, 1.0, + 0.008605146, -0.008605146, 0.56004886, + 0.11103560, -0.11103560, -0.32063747); + col = ICTCP_TO_LMS_MAT * col; + + // 1.0f = 100 nits, 100.0f = 10k nits + col = DecodePQ(col, 100.f); + col = LMS_TO_XYZ_MAT * col; + return XYZ_TO_BT709_MAT * col; +} + +const vec3 BT709_LUMA = vec3(0.2126390059, + 0.7151686788, + 0.0721923154); + +float luminanceBT709(vec3 c) { + return dot(c, BT709_LUMA); +} + +// Safe divide (float & vec2 versions) +float DivideSafe(float a, float b, float fallback) { + return (b == 0.0) ? fallback : a / b; +} +float DivideSafe(float a, float b) { + return DivideSafe(a, b, 3.4028235e38); +} +vec2 DivideSafe(vec2 a, vec2 b, vec2 fallback) { + return vec2(DivideSafe(a.x, b.x, fallback.x), DivideSafe(a.y, b.y, fallback.y)); +} +vec2 DivideSafe(vec2 a, vec2 b) { + return DivideSafe(a, b, vec2(3.4028235e38)); +} + +vec3 ApplyPerChannelCorrection( + vec3 untonemapped, + vec3 per_channel_color, + float blowout_restoration, + float hue_correction_strength, + float chrominance_correction_strength, + float hue_shift_strength) { + const float tonemapped_luminance = luminanceBT709(abs(per_channel_color)); + + const float AUTO_CORRECT_BLACK = 0.02; + // Fix near black + const float untonemapped_luminance = luminanceBT709(abs(untonemapped)); + float ratio = tonemapped_luminance / untonemapped_luminance; + float auto_correct_ratio = mix(ratio, 1.0, + clamp(untonemapped_luminance / AUTO_CORRECT_BLACK, 0.0, 1.0)); + untonemapped *= auto_correct_ratio; + + const vec3 tonemapped_perceptual = IctcpFromBT709(per_channel_color); + const vec3 untonemapped_perceptual = IctcpFromBT709(untonemapped); + + vec2 untonemapped_chromas = untonemapped_perceptual.yz; + vec2 tonemapped_chromas = tonemapped_perceptual.yz; + + float untonemapped_chrominance = length(untonemapped_perceptual.yz); // eg: 0.80 + float tonemapped_chrominance = length(tonemapped_perceptual.yz); // eg: 0.20 + + // clamp saturation loss + float chrominance_ratio = min(DivideSafe(tonemapped_chrominance, + untonemapped_chrominance, 1.0), + 1.0); + chrominance_ratio = max(chrominance_ratio, blowout_restoration); + + // Untonemapped hue, tonemapped chrominance (with limit) + vec2 reduced_untonemapped_chromas = untonemapped_chromas * chrominance_ratio; + + // pick chroma based on per-channel luminance (supports not oversaturating crushed areas) + const vec2 reduced_hue_shifted = mix( + tonemapped_chromas, + reduced_untonemapped_chromas, + clamp(tonemapped_luminance / 0.36, 0.0, 1.0)); + + // Tonemapped hue, restored chrominance (with limit) + const vec2 blowout_restored_chromas = tonemapped_chromas * DivideSafe(length(reduced_hue_shifted), length(tonemapped_chromas), 1.0); + + const vec2 hue_shifted_chromas = mix(reduced_hue_shifted, + blowout_restored_chromas, + hue_shift_strength); + + // Pick untonemapped hues for shadows/midtones + const vec2 hue_correct_chromas = untonemapped_chromas * DivideSafe(length(hue_shifted_chromas), length(untonemapped_chromas), 1.0); + + const vec2 selectable_hue_correct_range = mix( + hue_correct_chromas, + hue_shifted_chromas, + clamp(tonemapped_luminance / 0.36, 0.0, 1.0)); + + const vec2 hue_corrected_chromas = mix(hue_shifted_chromas, + selectable_hue_correct_range, + hue_correction_strength); + + const vec2 chroma_correct_chromas = hue_corrected_chromas * DivideSafe(length(untonemapped_chromas), length(hue_corrected_chromas), 1.0); + + const vec2 selectable_chroma_correct_range = mix( + chroma_correct_chromas, + hue_corrected_chromas, + clamp(tonemapped_luminance / 0.36, 0.0, 1.0)); + + const vec2 chroma_corrected_chromas = mix( + hue_correct_chromas, + selectable_chroma_correct_range, + chrominance_correction_strength); + + vec2 final_chromas = chroma_corrected_chromas; + + const vec3 final_color = BT709FromICtCp(vec3( + tonemapped_perceptual.x, + final_chromas)); + + return final_color; +} + +vec3 CorrectHue(vec3 incorrect_color, vec3 correct_color, float strength) { + if (strength == 0.0) return incorrect_color; + + vec3 correct_lab = okLabFromBT709(correct_color); + vec3 incorrect_lab = okLabFromBT709(incorrect_color); + + float chrominance_pre_adjust = length(incorrect_lab.yz); + + incorrect_lab.yz = mix(incorrect_lab.yz, correct_lab.yz, strength); + + float chrominance_post_adjust = length(incorrect_lab.yz); + + incorrect_lab.yz *= DivideSafe(chrominance_pre_adjust, + chrominance_post_adjust, + 1.0); + + vec3 color = bt709FromOKLab(incorrect_lab); + color = AP1_TO_BT709_MAT * // convert to ap1, clamp negatives, convert back to bt709 + max(BT709_TO_AP1_MAT * color, vec3(0.0)); + + return color; +} + +vec3 CorrectHueAP1(vec3 incorrect_color_ap1, vec3 correct_color_ap1, float strength) { + if (strength == 0.0) return incorrect_color_ap1; + + // Convert both AP1 inputs to BT.709 for OkLab conversion + vec3 incorrect_color = AP1_TO_BT709_MAT * incorrect_color_ap1; + vec3 correct_color = AP1_TO_BT709_MAT * correct_color_ap1; + + vec3 correct_lab = okLabFromBT709(correct_color); + vec3 incorrect_lab = okLabFromBT709(incorrect_color); + + float chrominance_pre_adjust = length(incorrect_lab.yz); + + incorrect_lab.yz = mix(incorrect_lab.yz, correct_lab.yz, strength); + + float chrominance_post_adjust = length(incorrect_lab.yz); + + incorrect_lab.yz *= DivideSafe(chrominance_pre_adjust, + chrominance_post_adjust, + 1.0); + + vec3 color = bt709FromOKLab(incorrect_lab); + color = max(BT709_TO_AP1_MAT * color, vec3(0.0)); + + return color; +} + +vec3 SaturationAP1(vec3 ap1, float saturation) { + vec3 bt709 = AP1_TO_BT709_MAT * ap1; + + vec3 perceptual = okLabFromBT709(bt709); + perceptual.yz *= saturation; + + bt709 = bt709FromOKLab(perceptual); + return max(vec3(0.0), BT709_TO_AP1_MAT * bt709); +} + +vec3 SaturationBlowoutAP1(vec3 ap1, float y, float saturation, float dechroma) { + vec3 bt709 = AP1_TO_BT709_MAT * ap1; + + vec3 perceptual = okLabFromBT709(bt709); + perceptual.yz *= saturation; + + if (dechroma != 0.f) { + perceptual.yz *= mix(1.f, 0.f, clamp(pow(y / (10000.f / 100.f), (1.f - dechroma)), 0.0, 1.0)); + } + + bt709 = bt709FromOKLab(perceptual); + return max(vec3(0.0), BT709_TO_AP1_MAT * bt709); +} + +vec3 SaturationBlowoutAP1ICtCp(vec3 ap1, float y, float saturation, float dechroma) { + vec3 bt709 = AP1_TO_BT709_MAT * ap1; + + vec3 perceptual = IctcpFromBT709(bt709); + perceptual.yz *= saturation; + + if (dechroma != 0.f) { + perceptual.yz *= mix(1.f, 0.f, clamp(pow(y / (10000.f / 100.f), (1.f - dechroma)), 0.0, 1.0)); + } + + bt709 = BT709FromICtCp(perceptual); + return max(vec3(0.0), BT709_TO_AP1_MAT * bt709); +} + +vec3 ChrominanceOKLabAP1(vec3 incorrect_color_ap1, vec3 correct_color_ap1, float strength) { + if (strength == 0.0) return incorrect_color_ap1; + + // Convert both AP1 inputs to BT.709 for OkLab conversion + vec3 incorrect_color = AP1_TO_BT709_MAT * incorrect_color_ap1; + vec3 correct_color = AP1_TO_BT709_MAT * correct_color_ap1; + + vec3 incorrect_lab = okLabFromBT709(incorrect_color); + vec3 correct_lab = okLabFromBT709(correct_color); + + vec2 incorrect_ab = incorrect_lab.yz; + vec2 correct_ab = correct_lab.yz; + + // Compute chrominance (magnitude of the a–b vector) + float incorrect_chrominance = length(incorrect_ab); + float correct_chrominance = length(correct_ab); + + // Scale original chrominance vector toward target chrominance + float chrominance_ratio = DivideSafe(correct_chrominance, incorrect_chrominance, 1.0); + float scale = mix(1.0, chrominance_ratio, strength); + incorrect_lab.yz = incorrect_ab * scale; + + // Convert back to BT.709, then to AP1, clamp negatives + vec3 bt709 = bt709FromOKLab(incorrect_lab); + return max(vec3(0.0), BT709_TO_AP1_MAT * bt709); +} + +vec3 ChrominanceICtCp(vec3 incorrect_color_ap1, vec3 correct_color_ap1, float strength) { + if (strength == 0.0) return incorrect_color_ap1; + + // Convert both AP1 inputs to BT.709 for OkLab conversion + vec3 incorrect_color = AP1_TO_BT709_MAT * incorrect_color_ap1; + vec3 correct_color = AP1_TO_BT709_MAT * correct_color_ap1; + + vec3 incorrect_ictcp = IctcpFromBT709(incorrect_color); + vec3 correct_ictcp = IctcpFromBT709(correct_color); + + vec2 incorrect_ctcp = incorrect_ictcp.yz; + vec2 correct_ctcp = correct_ictcp.yz; + + // Compute chrominance (magnitude of the ct–cp vector) + float incorrect_chrominance = length(incorrect_ctcp); + float correct_chrominance = length(correct_ctcp); + + // Scale original chrominance vector toward target chrominance + float chrominance_ratio = DivideSafe(correct_chrominance, incorrect_chrominance, 1.0); + float scale = mix(1.0, chrominance_ratio, strength); + incorrect_ictcp.yz = incorrect_ctcp * scale; + + // Convert back to BT.709, then to AP1, clamp negatives + vec3 bt709 = BT709FromICtCp(incorrect_ictcp); + return max(vec3(0.0), BT709_TO_AP1_MAT * bt709); +} + +vec3 CorrectHueAndChrominanceOKLabAP1( + vec3 incorrect_color_ap1, + vec3 reference_color_ap1, + float hue_emulation_strength, + float chrominance_emulation_strength, + float hue_emulation_ramp_start, + float hue_emulation_ramp_end) { + if (hue_emulation_strength == 0.0 && chrominance_emulation_strength == 0.0) { + return incorrect_color_ap1; + } + + vec3 incorrect_color_bt709 = AP1_TO_BT709_MAT * incorrect_color_ap1; + vec3 reference_color_bt709 = AP1_TO_BT709_MAT * reference_color_ap1; + + vec3 perceptual_new = okLabFromBT709(incorrect_color_bt709); + vec3 perceptual_reference = okLabFromBT709(reference_color_bt709); + + float chrominance_current = length(perceptual_new.yz); + float chrominance_ratio = 1.0; + + if (hue_emulation_strength != 0.0) { + float ramp_denom = hue_emulation_ramp_end - hue_emulation_ramp_start; + float ramp_t = clamp(DivideSafe(perceptual_new.x - hue_emulation_ramp_start, ramp_denom, 0.0), 0.0, 1.0); + hue_emulation_strength *= ramp_t; + + float chrominance_pre = chrominance_current; + perceptual_new.yz = mix(perceptual_new.yz, perceptual_reference.yz, hue_emulation_strength); + float chrominance_post = length(perceptual_new.yz); + chrominance_ratio = DivideSafe(chrominance_pre, chrominance_post, 1.0); + chrominance_current = chrominance_post; + } + + if (chrominance_emulation_strength != 0.0) { + float reference_chrominance = length(perceptual_reference.yz); + float target_chrominance_ratio = DivideSafe(reference_chrominance, chrominance_current, 1.0); + chrominance_ratio = mix(chrominance_ratio, target_chrominance_ratio, chrominance_emulation_strength); + } + + perceptual_new.yz *= chrominance_ratio; + + vec3 corrected_color_bt709 = bt709FromOKLab(perceptual_new); + vec3 corrected_color_ap1 = max(BT709_TO_AP1_MAT * corrected_color_bt709, vec3(0.0)); + return corrected_color_ap1; +} + +// END INCLUDES diff --git a/src/games/rdr2vk/output/0x14BF23D4.frag.glsl b/src/games/rdr2vk/output/0x14BF23D4.frag.glsl new file mode 100644 index 0000000000..d06d863f1d --- /dev/null +++ b/src/games/rdr2vk/output/0x14BF23D4.frag.glsl @@ -0,0 +1,138 @@ +#version 450 + +#extension GL_GOOGLE_include_directive : require +#include "./output.glsl" + +#extension GL_EXT_scalar_block_layout : require + +struct _11 { + vec4 _m0; + ivec4 _m1; + vec4 _m2; + ivec4 _m3; + int _m4; + int _m5; + int _m6; + int _m7; + int _m8; + uint _m9; + float _m10; +}; + +vec3 _83; + +layout(set = 0, binding = 96, scalar) readonly buffer _10_12 { + _11 _m0[]; +} +_12; + +layout(set = 0, binding = 23, std140) uniform _15_16 { + float _m0; + float _m1; + uint _m2; + uint _m3; + uint _m4; + uint _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + uint _m16; + uint _m17; + uint _m18; + uint _m19; +} +_16; + +layout(set = 1, binding = 22, std140) uniform _17_18 { + vec4 _m0[2]; + vec4 _m1[2]; + vec4 _m2[2]; + vec4 _m3; + vec4 _m4; + vec4 _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; +} +_18; + +layout(set = 1, binding = 34) uniform sampler _8; +layout(set = 1, binding = 36) uniform sampler _9; +layout(set = 0, binding = 131) uniform texture3D _19; +layout(set = 1, binding = 135) uniform texture2D _20; + +layout(location = 0) in vec4 _4; +layout(location = 1) in vec2 _5; +layout(location = 0) out vec4 _6; + +void main() { + vec4 _92 = (_4 * _18._m5) + _18._m4; + _92.w = _92.w * texture(sampler2D(_20, _9), _5).x; + vec4 _113; + if (floatBitsToInt(_18._m10) != 0) { + vec4 _111 = textureLod(sampler3D(_19, _8), _92.xyz, 0.0); + _113 = vec4(_111.x, _111.y, _111.z, _92.w); + } else { + _113 = _92; + } + vec4 _163; + if (floatBitsToInt(_18._m7) != 0) { +#if 1 + _113.rgb = GammaSafe(_113.rgb); +#endif + + vec3 _125 = _113.xyz * mat3(vec3(0.6274039745330810546875, 0.329281985759735107421875, 0.043313600122928619384765625), vec3(0.06909699738025665283203125, 0.919539988040924072265625, 0.0113612003624439239501953125), vec3(0.01639159955084323883056640625, 0.0880132019519805908203125, 0.895595014095306396484375)); + float _136 = pow(abs((_125.x * _16._m0) / _16._m15), 0.1593017578125); + vec3 _143; + _143.x = pow((0.8359375 + (18.8515625 * _136)) / (1.0 + (18.6875 * _136)), 78.84375); + float _145 = pow(abs((_125.y * _16._m0) / _16._m15), 0.1593017578125); + _143.y = pow((0.8359375 + (18.8515625 * _145)) / (1.0 + (18.6875 * _145)), 78.84375); + float _154 = pow(abs((_125.z * _16._m0) / _16._m15), 0.1593017578125); + _143.z = pow((0.8359375 + (18.8515625 * _154)) / (1.0 + (18.6875 * _154)), 78.84375); + _163 = vec4(_143.x, _143.y, _143.z, _113.w); + } else { + _163 = _113; + } + vec3 _171 = mix(_163.xyz * _163.www, _163.xyz, bvec3(_18._m6 == 0.0)); + vec4 _172 = vec4(_171.x, _171.y, _171.z, _163.w); + float _176 = _12._m0[0u]._m0.w * _163.w; + _172.z = (_12._m0[0u]._m0.w != 1.0) ? (_176 * _176) : _171.z; + float _185 = _163.w * _12._m0[0u]._m0.x; + _172.w = _185; + vec4 _215; + if (floatBitsToInt(_18._m11) != 0) { + vec4 _201; + if (floatBitsToInt(_18._m8) != 0) { + vec4 _200 = _172; + _200.w = _185 * _18._m8; + _201 = _200; + } else { + _201 = _172; + } + vec4 _214; + if (floatBitsToInt(_18._m9) != 0) { + vec4 _213 = _201; + _213.w = (-0.5) * (cos(_201.w * 3.1415927410125732421875) - 1.0); + _214 = _213; + } else { + _214 = _201; + } + _215 = _214; + } else { + _215 = _172; + } + vec4 _218 = _215; + _218.w = clamp(_215.w, 0.0, 1.0); + _6 = _218; +} + diff --git a/src/games/rdr2vk/output/0x1B0D650C.frag.glsl b/src/games/rdr2vk/output/0x1B0D650C.frag.glsl new file mode 100644 index 0000000000..1e6bcd08a9 --- /dev/null +++ b/src/games/rdr2vk/output/0x1B0D650C.frag.glsl @@ -0,0 +1,133 @@ +#version 450 + +#extension GL_GOOGLE_include_directive : require +#include "./output.glsl" + +#extension GL_EXT_scalar_block_layout : require + +struct _9 { + vec4 _m0; + ivec4 _m1; + vec4 _m2; + ivec4 _m3; + int _m4; + int _m5; + int _m6; + int _m7; + int _m8; + uint _m9; + float _m10; +}; + +vec3 _75; + +layout(set = 0, binding = 96, scalar) readonly buffer _8_10 { + _9 _m0[]; +} +_10; + +layout(set = 0, binding = 23, std140) uniform _12_13 { + float _m0; + float _m1; + uint _m2; + uint _m3; + uint _m4; + uint _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + uint _m16; + uint _m17; + uint _m18; + uint _m19; +} +_13; + +layout(set = 1, binding = 22, std140) uniform _14_15 { + vec4 _m0[2]; + vec4 _m1[2]; + vec4 _m2[2]; + vec4 _m3; + vec4 _m4; + vec4 _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; +} +_15; + +layout(set = 1, binding = 34) uniform sampler _7; +layout(set = 0, binding = 131) uniform texture3D _16; + +layout(location = 0) in vec4 _4; +layout(location = 0) out vec4 _5; + +void main() { + vec4 _83 = (_4 * _15._m5) + _15._m4; + vec4 _96; + if (floatBitsToInt(_15._m10) != 0) { + vec4 _94 = textureLod(sampler3D(_16, _7), _83.xyz, 0.0); + _96 = vec4(_94.x, _94.y, _94.z, _83.w); + } else { + _96 = _83; + } + vec4 _146; + if (floatBitsToInt(_15._m7) != 0) { +#if 1 + _96.rgb = GammaSafe(_96.rgb); +#endif + vec3 _108 = _96.xyz * mat3(vec3(0.6274039745330810546875, 0.329281985759735107421875, 0.043313600122928619384765625), vec3(0.06909699738025665283203125, 0.919539988040924072265625, 0.0113612003624439239501953125), vec3(0.01639159955084323883056640625, 0.0880132019519805908203125, 0.895595014095306396484375)); + float _119 = pow(abs((_108.x * _13._m0) / _13._m15), 0.1593017578125); + vec3 _126; + _126.x = pow((0.8359375 + (18.8515625 * _119)) / (1.0 + (18.6875 * _119)), 78.84375); + float _128 = pow(abs((_108.y * _13._m0) / _13._m15), 0.1593017578125); + _126.y = pow((0.8359375 + (18.8515625 * _128)) / (1.0 + (18.6875 * _128)), 78.84375); + float _137 = pow(abs((_108.z * _13._m0) / _13._m15), 0.1593017578125); + _126.z = pow((0.8359375 + (18.8515625 * _137)) / (1.0 + (18.6875 * _137)), 78.84375); + _146 = vec4(_126.x, _126.y, _126.z, _96.w); + } else { + _146 = _96; + } + vec3 _154 = mix(_146.xyz * _146.www, _146.xyz, bvec3(_15._m6 == 0.0)); + vec4 _155 = vec4(_154.x, _154.y, _154.z, _146.w); + float _159 = _10._m0[0u]._m0.w * _146.w; + _155.z = (_10._m0[0u]._m0.w != 1.0) ? (_159 * _159) : _154.z; + float _168 = _146.w * _10._m0[0u]._m0.x; + _155.w = _168; + vec4 _198; + if (floatBitsToInt(_15._m11) != 0) { + vec4 _184; + if (floatBitsToInt(_15._m8) != 0) { + vec4 _183 = _155; + _183.w = _168 * _15._m8; + _184 = _183; + } else { + _184 = _155; + } + vec4 _197; + if (floatBitsToInt(_15._m9) != 0) { + vec4 _196 = _184; + _196.w = (-0.5) * (cos(_184.w * 3.1415927410125732421875) - 1.0); + _197 = _196; + } else { + _197 = _184; + } + _198 = _197; + } else { + _198 = _155; + } + vec4 _201 = _198; + _201.w = clamp(_198.w, 0.0, 1.0); + _5 = _201; +} + diff --git a/src/games/rdr2vk/output/0x26B3FAA9.frag.glsl b/src/games/rdr2vk/output/0x26B3FAA9.frag.glsl new file mode 100644 index 0000000000..88e9f87e48 --- /dev/null +++ b/src/games/rdr2vk/output/0x26B3FAA9.frag.glsl @@ -0,0 +1,137 @@ +#version 450 + +#extension GL_GOOGLE_include_directive : require +#include "./output.glsl" + +#extension GL_EXT_scalar_block_layout : require + +struct _9 { + vec4 _m0; + ivec4 _m1; + vec4 _m2; + ivec4 _m3; + int _m4; + int _m5; + int _m6; + int _m7; + int _m8; + uint _m9; + float _m10; +}; + +vec3 _82; + +layout(set = 0, binding = 96, scalar) readonly buffer _8_10 { + _9 _m0[]; +} +_10; + +layout(set = 0, binding = 23, std140) uniform _13_14 { + float _m0; + float _m1; + uint _m2; + uint _m3; + uint _m4; + uint _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + uint _m16; + uint _m17; + uint _m18; + uint _m19; +} +_14; + +layout(set = 1, binding = 22, std140) uniform _15_16 { + vec4 _m0[2]; + vec4 _m1[2]; + vec4 _m2[2]; + vec4 _m3; + vec4 _m4; + vec4 _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; +} +_16; + +layout(set = 1, binding = 34) uniform sampler _7; +layout(set = 1, binding = 37) uniform sampler _17; +layout(set = 1, binding = 128) uniform texture2D _18; +layout(set = 0, binding = 131) uniform texture3D _19; + +layout(location = 0) in vec2 _4; +layout(location = 0) out vec4 _5; + +void main() { + vec4 _88 = texture(sampler2D(_18, _17), _4); + vec4 _94 = (_88 * _16._m5) + _16._m4; + vec4 _107; + if (floatBitsToInt(_16._m10) != 0) { + vec4 _105 = textureLod(sampler3D(_19, _7), _94.xyz, 0.0); + _107 = vec4(_105.x, _105.y, _105.z, _94.w); + } else { + _107 = _94; + } + vec4 _157; + if (floatBitsToInt(_16._m7) != 0) { +#if 1 + _107.rgb = GammaSafe(_107.rgb); +#endif + + vec3 _119 = _107.xyz * mat3(vec3(0.6274039745330810546875, 0.329281985759735107421875, 0.043313600122928619384765625), vec3(0.06909699738025665283203125, 0.919539988040924072265625, 0.0113612003624439239501953125), vec3(0.01639159955084323883056640625, 0.0880132019519805908203125, 0.895595014095306396484375)); + float _130 = pow(abs((_119.x * _14._m0) / _14._m15), 0.1593017578125); + vec3 _137; + _137.x = pow((0.8359375 + (18.8515625 * _130)) / (1.0 + (18.6875 * _130)), 78.84375); + float _139 = pow(abs((_119.y * _14._m0) / _14._m15), 0.1593017578125); + _137.y = pow((0.8359375 + (18.8515625 * _139)) / (1.0 + (18.6875 * _139)), 78.84375); + float _148 = pow(abs((_119.z * _14._m0) / _14._m15), 0.1593017578125); + _137.z = pow((0.8359375 + (18.8515625 * _148)) / (1.0 + (18.6875 * _148)), 78.84375); + _157 = vec4(_137.x, _137.y, _137.z, _107.w); + } else { + _157 = _107; + } + vec3 _165 = mix(_157.xyz * _157.www, _157.xyz, bvec3(_16._m6 == 0.0)); + vec4 _166 = vec4(_165.x, _165.y, _165.z, _157.w); + float _170 = _10._m0[0u]._m0.w * _157.w; + _166.z = (_10._m0[0u]._m0.w != 1.0) ? (_170 * _170) : _165.z; + float _179 = _157.w * _10._m0[0u]._m0.x; + _166.w = _179; + vec4 _209; + if (floatBitsToInt(_16._m11) != 0) { + vec4 _195; + if (floatBitsToInt(_16._m8) != 0) { + vec4 _194 = _166; + _194.w = _179 * _16._m8; + _195 = _194; + } else { + _195 = _166; + } + vec4 _208; + if (floatBitsToInt(_16._m9) != 0) { + vec4 _207 = _195; + _207.w = (-0.5) * (cos(_195.w * 3.1415927410125732421875) - 1.0); + _208 = _207; + } else { + _208 = _195; + } + _209 = _208; + } else { + _209 = _166; + } + vec4 _212 = _209; + _212.w = clamp(_209.w, 0.0, 1.0); + _5 = _212; +} + diff --git a/src/games/rdr2vk/output/0x6032A998.frag.glsl b/src/games/rdr2vk/output/0x6032A998.frag.glsl new file mode 100644 index 0000000000..9ffda2abad --- /dev/null +++ b/src/games/rdr2vk/output/0x6032A998.frag.glsl @@ -0,0 +1,139 @@ +#version 450 + +#extension GL_GOOGLE_include_directive : require +#include "./output.glsl" + +#extension GL_EXT_scalar_block_layout : require + +struct _11 { + vec4 _m0; + ivec4 _m1; + vec4 _m2; + ivec4 _m3; + int _m4; + int _m5; + int _m6; + int _m7; + int _m8; + uint _m9; + float _m10; +}; + +vec3 _84; + +layout(set = 0, binding = 96, scalar) readonly buffer _10_12 { + _11 _m0[]; +} +_12; + +layout(set = 0, binding = 23, std140) uniform _15_16 { + float _m0; + float _m1; + uint _m2; + uint _m3; + uint _m4; + uint _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + uint _m16; + uint _m17; + uint _m18; + uint _m19; +} +_16; + +layout(set = 1, binding = 22, std140) uniform _17_18 { + vec4 _m0[2]; + vec4 _m1[2]; + vec4 _m2[2]; + vec4 _m3; + vec4 _m4; + vec4 _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; +} +_18; + +layout(set = 1, binding = 34) uniform sampler _9; +layout(set = 1, binding = 37) uniform sampler _19; +layout(set = 1, binding = 128) uniform texture2D _20; +layout(set = 0, binding = 131) uniform texture3D _21; + +layout(location = 0) in vec4 _4; +layout(location = 1) in vec4 _5; +layout(location = 2) in vec2 _6; +layout(location = 0) out vec4 _7; + +void main() { + vec4 _98 = (texture(sampler2D(_20, _19), _6).xxxx * _18._m5) + _18._m4; + _98.w = _98.w * _5.w; + vec4 _115; + if (floatBitsToInt(_18._m10) != 0) { + vec4 _113 = textureLod(sampler3D(_21, _9), _98.xyz, 0.0); + _115 = vec4(_113.x, _113.y, _113.z, _98.w); + } else { + _115 = _98; + } + vec4 _165; + if (floatBitsToInt(_18._m7) != 0) { +#if 1 + _115.rgb = GammaSafe(_115.rgb); +#endif + + vec3 _127 = _115.xyz * mat3(vec3(0.6274039745330810546875, 0.329281985759735107421875, 0.043313600122928619384765625), vec3(0.06909699738025665283203125, 0.919539988040924072265625, 0.0113612003624439239501953125), vec3(0.01639159955084323883056640625, 0.0880132019519805908203125, 0.895595014095306396484375)); + float _138 = pow(abs((_127.x * _16._m0) / _16._m15), 0.1593017578125); + vec3 _145; + _145.x = pow((0.8359375 + (18.8515625 * _138)) / (1.0 + (18.6875 * _138)), 78.84375); + float _147 = pow(abs((_127.y * _16._m0) / _16._m15), 0.1593017578125); + _145.y = pow((0.8359375 + (18.8515625 * _147)) / (1.0 + (18.6875 * _147)), 78.84375); + float _156 = pow(abs((_127.z * _16._m0) / _16._m15), 0.1593017578125); + _145.z = pow((0.8359375 + (18.8515625 * _156)) / (1.0 + (18.6875 * _156)), 78.84375); + _165 = vec4(_145.x, _145.y, _145.z, _115.w); + } else { + _165 = _115; + } + vec3 _173 = mix(_165.xyz * _165.www, _165.xyz, bvec3(_18._m6 == 0.0)); + vec4 _174 = vec4(_173.x, _173.y, _173.z, _165.w); + float _178 = _12._m0[0u]._m0.w * _165.w; + _174.z = (_12._m0[0u]._m0.w != 1.0) ? (_178 * _178) : _173.z; + float _187 = _165.w * _12._m0[0u]._m0.x; + _174.w = _187; + vec4 _217; + if (floatBitsToInt(_18._m11) != 0) { + vec4 _203; + if (floatBitsToInt(_18._m8) != 0) { + vec4 _202 = _174; + _202.w = _187 * _18._m8; + _203 = _202; + } else { + _203 = _174; + } + vec4 _216; + if (floatBitsToInt(_18._m9) != 0) { + vec4 _215 = _203; + _215.w = (-0.5) * (cos(_203.w * 3.1415927410125732421875) - 1.0); + _216 = _215; + } else { + _216 = _203; + } + _217 = _216; + } else { + _217 = _174; + } + vec4 _220 = _217; + _220.w = clamp(_217.w, 0.0, 1.0); + _7 = _220; +} + diff --git a/src/games/rdr2vk/output/0x76A78879.frag.glsl b/src/games/rdr2vk/output/0x76A78879.frag.glsl new file mode 100644 index 0000000000..8e8e6226ef --- /dev/null +++ b/src/games/rdr2vk/output/0x76A78879.frag.glsl @@ -0,0 +1,138 @@ +#version 450 + +#extension GL_GOOGLE_include_directive : require +#include "./output.glsl" + +#extension GL_EXT_scalar_block_layout : require + +struct _10 { + vec4 _m0; + ivec4 _m1; + vec4 _m2; + ivec4 _m3; + int _m4; + int _m5; + int _m6; + int _m7; + int _m8; + uint _m9; + float _m10; +}; + +vec3 _83; + +layout(set = 0, binding = 96, scalar) readonly buffer _9_11 { + _10 _m0[]; +} +_11; + +layout(set = 0, binding = 23, std140) uniform _14_15 { + float _m0; + float _m1; + uint _m2; + uint _m3; + uint _m4; + uint _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + uint _m16; + uint _m17; + uint _m18; + uint _m19; +} +_15; + +layout(set = 1, binding = 22, std140) uniform _16_17 { + vec4 _m0[2]; + vec4 _m1[2]; + vec4 _m2[2]; + vec4 _m3; + vec4 _m4; + vec4 _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; +} +_17; + +layout(set = 1, binding = 34) uniform sampler _8; +layout(set = 1, binding = 37) uniform sampler _18; +layout(set = 1, binding = 128) uniform texture2D _19; +layout(set = 0, binding = 131) uniform texture3D _20; + +layout(location = 0) in vec2 _4; +layout(location = 1) in vec4 _5; +layout(location = 0) out vec4 _6; + +void main() { + vec4 _92 = (_5 * _17._m5) + _17._m4; + _92.w = _92.w * texture(sampler2D(_19, _18), _4).w; + vec4 _113; + if (floatBitsToInt(_17._m10) != 0) { + vec4 _111 = textureLod(sampler3D(_20, _8), _92.xyz, 0.0); + _113 = vec4(_111.x, _111.y, _111.z, _92.w); + } else { + _113 = _92; + } + vec4 _163; + if (floatBitsToInt(_17._m7) != 0) { +#if 1 + _113.rgb = GammaSafe(_113.rgb); +#endif + + vec3 _125 = _113.xyz * mat3(vec3(0.6274039745330810546875, 0.329281985759735107421875, 0.043313600122928619384765625), vec3(0.06909699738025665283203125, 0.919539988040924072265625, 0.0113612003624439239501953125), vec3(0.01639159955084323883056640625, 0.0880132019519805908203125, 0.895595014095306396484375)); + float _136 = pow(abs((_125.x * _15._m0) / _15._m15), 0.1593017578125); + vec3 _143; + _143.x = pow((0.8359375 + (18.8515625 * _136)) / (1.0 + (18.6875 * _136)), 78.84375); + float _145 = pow(abs((_125.y * _15._m0) / _15._m15), 0.1593017578125); + _143.y = pow((0.8359375 + (18.8515625 * _145)) / (1.0 + (18.6875 * _145)), 78.84375); + float _154 = pow(abs((_125.z * _15._m0) / _15._m15), 0.1593017578125); + _143.z = pow((0.8359375 + (18.8515625 * _154)) / (1.0 + (18.6875 * _154)), 78.84375); + _163 = vec4(_143.x, _143.y, _143.z, _113.w); + } else { + _163 = _113; + } + vec3 _171 = mix(_163.xyz * _163.www, _163.xyz, bvec3(_17._m6 == 0.0)); + vec4 _172 = vec4(_171.x, _171.y, _171.z, _163.w); + float _176 = _11._m0[0u]._m0.w * _163.w; + _172.z = (_11._m0[0u]._m0.w != 1.0) ? (_176 * _176) : _171.z; + float _185 = _163.w * _11._m0[0u]._m0.x; + _172.w = _185; + vec4 _215; + if (floatBitsToInt(_17._m11) != 0) { + vec4 _201; + if (floatBitsToInt(_17._m8) != 0) { + vec4 _200 = _172; + _200.w = _185 * _17._m8; + _201 = _200; + } else { + _201 = _172; + } + vec4 _214; + if (floatBitsToInt(_17._m9) != 0) { + vec4 _213 = _201; + _213.w = (-0.5) * (cos(_201.w * 3.1415927410125732421875) - 1.0); + _214 = _213; + } else { + _214 = _201; + } + _215 = _214; + } else { + _215 = _172; + } + vec4 _218 = _215; + _218.w = clamp(_215.w, 0.0, 1.0); + _6 = _218; +} + diff --git a/src/games/rdr2vk/output/0x7BE28339.frag.glsl b/src/games/rdr2vk/output/0x7BE28339.frag.glsl new file mode 100644 index 0000000000..80830d1a61 --- /dev/null +++ b/src/games/rdr2vk/output/0x7BE28339.frag.glsl @@ -0,0 +1,133 @@ +#version 450 + +#extension GL_GOOGLE_include_directive : require +#include "./output.glsl" + +#extension GL_EXT_scalar_block_layout : require + +struct _7 { + vec4 _m0; + ivec4 _m1; + vec4 _m2; + ivec4 _m3; + int _m4; + int _m5; + int _m6; + int _m7; + int _m8; + uint _m9; + float _m10; +}; + +vec3 _72; + +layout(set = 0, binding = 96, scalar) readonly buffer _6_8 { + _7 _m0[]; +} +_8; + +layout(set = 0, binding = 23, std140) uniform _10_11 { + float _m0; + float _m1; + uint _m2; + uint _m3; + uint _m4; + uint _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + uint _m16; + uint _m17; + uint _m18; + uint _m19; +} +_11; + +layout(set = 1, binding = 22, std140) uniform _12_13 { + vec4 _m0[2]; + vec4 _m1[2]; + vec4 _m2[2]; + vec4 _m3; + vec4 _m4; + vec4 _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; +} +_13; + +layout(set = 1, binding = 34) uniform sampler _5; +layout(set = 0, binding = 131) uniform texture3D _14; + +layout(location = 0) out vec4 _3; + +void main() { + vec4 _81 = (_13._m3 * _13._m5) + _13._m4; + vec4 _94; + if (floatBitsToInt(_13._m10) != 0) { + vec4 _92 = textureLod(sampler3D(_14, _5), _81.xyz, 0.0); + _94 = vec4(_92.x, _92.y, _92.z, _81.w); + } else { + _94 = _81; + } + vec4 _144; + if (floatBitsToInt(_13._m7) != 0) { +#if 1 + _94.rgb = GammaSafe(_94.rgb); +#endif + + vec3 _106 = _94.xyz * mat3(vec3(0.6274039745330810546875, 0.329281985759735107421875, 0.043313600122928619384765625), vec3(0.06909699738025665283203125, 0.919539988040924072265625, 0.0113612003624439239501953125), vec3(0.01639159955084323883056640625, 0.0880132019519805908203125, 0.895595014095306396484375)); + float _117 = pow(abs((_106.x * _11._m0) / _11._m15), 0.1593017578125); + vec3 _124; + _124.x = pow((0.8359375 + (18.8515625 * _117)) / (1.0 + (18.6875 * _117)), 78.84375); + float _126 = pow(abs((_106.y * _11._m0) / _11._m15), 0.1593017578125); + _124.y = pow((0.8359375 + (18.8515625 * _126)) / (1.0 + (18.6875 * _126)), 78.84375); + float _135 = pow(abs((_106.z * _11._m0) / _11._m15), 0.1593017578125); + _124.z = pow((0.8359375 + (18.8515625 * _135)) / (1.0 + (18.6875 * _135)), 78.84375); + _144 = vec4(_124.x, _124.y, _124.z, _94.w); + } else { + _144 = _94; + } + vec3 _152 = mix(_144.xyz * _144.www, _144.xyz, bvec3(_13._m6 == 0.0)); + vec4 _153 = vec4(_152.x, _152.y, _152.z, _144.w); + float _157 = _8._m0[0u]._m0.w * _144.w; + _153.z = (_8._m0[0u]._m0.w != 1.0) ? (_157 * _157) : _152.z; + float _166 = _144.w * _8._m0[0u]._m0.x; + _153.w = _166; + vec4 _196; + if (floatBitsToInt(_13._m11) != 0) { + vec4 _182; + if (floatBitsToInt(_13._m8) != 0) { + vec4 _181 = _153; + _181.w = _166 * _13._m8; + _182 = _181; + } else { + _182 = _153; + } + vec4 _195; + if (floatBitsToInt(_13._m9) != 0) { + vec4 _194 = _182; + _194.w = (-0.5) * (cos(_182.w * 3.1415927410125732421875) - 1.0); + _195 = _194; + } else { + _195 = _182; + } + _196 = _195; + } else { + _196 = _153; + } + vec4 _199 = _196; + _199.w = clamp(_196.w, 0.0, 1.0); + _3 = _199; +} + diff --git a/src/games/rdr2vk/output/0x8B9C89F1.frag.glsl b/src/games/rdr2vk/output/0x8B9C89F1.frag.glsl new file mode 100644 index 0000000000..5a67a7bb7e --- /dev/null +++ b/src/games/rdr2vk/output/0x8B9C89F1.frag.glsl @@ -0,0 +1,1020 @@ +#version 450 + +#extension GL_GOOGLE_include_directive : require +#include "./output.glsl" + +#extension GL_EXT_scalar_block_layout : require + +struct _12 { + vec4 _m0; + ivec4 _m1; + vec4 _m2; + ivec4 _m3; + int _m4; + int _m5; + int _m6; + int _m7; + int _m8; + uint _m9; + float _m10; +}; + +vec2 _101; +vec2 _102; +vec3 _103; + +layout(set = 0, binding = 96, scalar) readonly buffer _11_13 { + _12 _m0[]; +} +_13; + +layout(set = 0, binding = 23, std140) uniform _16_17 { + float _m0; + float _m1; + uint _m2; + uint _m3; + uint _m4; + uint _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + uint _m16; + uint _m17; + uint _m18; + uint _m19; +} +_17; + +layout(set = 1, binding = 22, std140) uniform _18_19 { + vec4 _m0[2]; + vec4 _m1[2]; + vec4 _m2[2]; + vec4 _m3; + vec4 _m4; + vec4 _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; +} +_19; + +layout(set = 1, binding = 34) uniform sampler _10; +layout(set = 1, binding = 37) uniform sampler _20; +layout(set = 1, binding = 128) uniform texture2D _21; +layout(set = 0, binding = 131) uniform texture3D _22; + +layout(location = 0) in vec4 _4; +layout(location = 1) in vec4 _5; +layout(location = 2) in vec4 _6; +layout(location = 3) in vec4 _7; +layout(location = 0) out vec4 _8; + +void main() { + vec4 _926; + do { + vec2 _113; + _113.x = _6.x; + _113.y = _6.y; + vec4 _117 = textureLod(sampler2D(_21, _20), _113, 0.0); + float _118 = _117.y; + vec4 _120 = textureGather(sampler2D(_21, _20), _113, 1); + vec4 _122 = textureGatherOffset(sampler2D(_21, _20), _113, ivec2(-1), 1); + float _123 = _120.z; + float _124 = _120.x; + float _125 = _120.y; + float _126 = _122.w; + float _127 = _122.z; + float _128 = _122.x; + float _135 = max(max(_127, _128), max(_123, max(_124, _118))); + float _138 = _135 - min(min(_127, _128), min(_123, min(_124, _118))); + if (_138 < max(0.0, _135 * 0.063000001013278961181640625)) { + _926 = _117; + break; + } + vec4 _144 = textureLodOffset(sampler2D(_21, _20), _113, 0.0, ivec2(1, -1)); + float _145 = _144.y; + vec4 _147 = textureLodOffset(sampler2D(_21, _20), _113, 0.0, ivec2(-1, 1)); + float _148 = _147.y; + float _149 = _127 + _124; + float _150 = _128 + _123; + float _153 = (-2.0) * _118; + float _156 = _145 + _125; + float _162 = _126 + _148; + bool _182 = (abs(((-2.0) * _128) + _162) + ((abs(_153 + _149) * 2.0) + abs(((-2.0) * _123) + _156))) >= (abs(((-2.0) * _124) + (_148 + _125)) + ((abs(_153 + _150) * 2.0) + abs(((-2.0) * _127) + (_126 + _145)))); + bool _185 = !_182; + float _186 = _185 ? _128 : _127; + float _187 = _185 ? _123 : _124; + float _191; + if (_182) { + _191 = _6.w; + } else { + _191 = _6.z; + } + float _198 = abs(_186 - _118); + float _199 = abs(_187 - _118); + bool _200 = _198 >= _199; + float _205; + if (_200) { + _205 = -_191; + } else { + _205 = _191; + } + float _208 = clamp(abs(((((_149 + _150) * 2.0) + (_162 + _156)) * 0.083333335816860198974609375) - _118) * (1.0 / _138), 0.0, 1.0); + float _209 = _185 ? 0.0 : _6.z; + float _211 = _182 ? 0.0 : _6.w; + vec2 _217; + if (_185) { + vec2 _216 = _113; + _216.x = _6.x + (_205 * 0.5); + _217 = _216; + } else { + _217 = _113; + } + vec2 _224; + if (_182) { + vec2 _223 = _217; + _223.y = _217.y + (_205 * 0.5); + _224 = _223; + } else { + _224 = _217; + } + float _226 = _224.x - _209; + vec2 _227; + _227.x = _226; + _227.y = _224.y - _211; + float _231 = _224.x + _209; + vec2 _232; + _232.x = _231; + _232.y = _224.y + _211; + float _246 = max(_198, _199) * 0.25; + float _247 = ((!_200) ? (_187 + _118) : (_186 + _118)) * 0.5; + float _249 = (((-2.0) * _208) + 3.0) * (_208 * _208); + bool _250 = (_118 - _247) < 0.0; + float _251 = textureLod(sampler2D(_21, _20), _227, 0.0).y - _247; + float _252 = textureLod(sampler2D(_21, _20), _232, 0.0).y - _247; + bool _257 = !(abs(_251) >= _246); + vec2 _262; + if (_257) { + vec2 _261 = _227; + _261.x = _226 - _209; + _262 = _261; + } else { + _262 = _227; + } + vec2 _268; + if (_257) { + vec2 _267 = _262; + _267.y = _262.y - _211; + _268 = _267; + } else { + _268 = _262; + } + bool _269 = !(abs(_252) >= _246); + vec2 _275; + if (_269) { + vec2 _274 = _232; + _274.x = _231 + _209; + _275 = _274; + } else { + _275 = _232; + } + vec2 _281; + if (_269) { + vec2 _280 = _275; + _280.y = _275.y + _211; + _281 = _280; + } else { + _281 = _275; + } + vec2 _875; + vec2 _876; + float _877; + float _878; + if (_257 || _269) { + float _289; + if (_257) { + _289 = textureLod(sampler2D(_21, _20), _268, 0.0).y; + } else { + _289 = _251; + } + float _295; + if (_269) { + _295 = textureLod(sampler2D(_21, _20), _281, 0.0).y; + } else { + _295 = _252; + } + float _299; + if (_257) { + _299 = _289 - _247; + } else { + _299 = _289; + } + float _303; + if (_269) { + _303 = _295 - _247; + } else { + _303 = _295; + } + bool _308 = !(abs(_299) >= _246); + vec2 _314; + if (_308) { + vec2 _313 = _268; + _313.x = _268.x - _209; + _314 = _313; + } else { + _314 = _268; + } + vec2 _320; + if (_308) { + vec2 _319 = _314; + _319.y = _314.y - _211; + _320 = _319; + } else { + _320 = _314; + } + bool _321 = !(abs(_303) >= _246); + vec2 _328; + if (_321) { + vec2 _327 = _281; + _327.x = _281.x + _209; + _328 = _327; + } else { + _328 = _281; + } + vec2 _334; + if (_321) { + vec2 _333 = _328; + _333.y = _328.y + _211; + _334 = _333; + } else { + _334 = _328; + } + vec2 _871; + vec2 _872; + float _873; + float _874; + if (_308 || _321) { + float _342; + if (_308) { + _342 = textureLod(sampler2D(_21, _20), _320, 0.0).y; + } else { + _342 = _299; + } + float _348; + if (_321) { + _348 = textureLod(sampler2D(_21, _20), _334, 0.0).y; + } else { + _348 = _303; + } + float _352; + if (_308) { + _352 = _342 - _247; + } else { + _352 = _342; + } + float _356; + if (_321) { + _356 = _348 - _247; + } else { + _356 = _348; + } + bool _361 = !(abs(_352) >= _246); + vec2 _367; + if (_361) { + vec2 _366 = _320; + _366.x = _320.x - _209; + _367 = _366; + } else { + _367 = _320; + } + vec2 _373; + if (_361) { + vec2 _372 = _367; + _372.y = _367.y - _211; + _373 = _372; + } else { + _373 = _367; + } + bool _374 = !(abs(_356) >= _246); + vec2 _381; + if (_374) { + vec2 _380 = _334; + _380.x = _334.x + _209; + _381 = _380; + } else { + _381 = _334; + } + vec2 _387; + if (_374) { + vec2 _386 = _381; + _386.y = _381.y + _211; + _387 = _386; + } else { + _387 = _381; + } + vec2 _867; + vec2 _868; + float _869; + float _870; + if (_361 || _374) { + float _395; + if (_361) { + _395 = textureLod(sampler2D(_21, _20), _373, 0.0).y; + } else { + _395 = _352; + } + float _401; + if (_374) { + _401 = textureLod(sampler2D(_21, _20), _387, 0.0).y; + } else { + _401 = _356; + } + float _405; + if (_361) { + _405 = _395 - _247; + } else { + _405 = _395; + } + float _409; + if (_374) { + _409 = _401 - _247; + } else { + _409 = _401; + } + bool _414 = !(abs(_405) >= _246); + vec2 _420; + if (_414) { + vec2 _419 = _373; + _419.x = _373.x - _209; + _420 = _419; + } else { + _420 = _373; + } + vec2 _426; + if (_414) { + vec2 _425 = _420; + _425.y = _420.y - _211; + _426 = _425; + } else { + _426 = _420; + } + bool _427 = !(abs(_409) >= _246); + vec2 _434; + if (_427) { + vec2 _433 = _387; + _433.x = _387.x + _209; + _434 = _433; + } else { + _434 = _387; + } + vec2 _440; + if (_427) { + vec2 _439 = _434; + _439.y = _434.y + _211; + _440 = _439; + } else { + _440 = _434; + } + vec2 _863; + vec2 _864; + float _865; + float _866; + if (_414 || _427) { + float _448; + if (_414) { + _448 = textureLod(sampler2D(_21, _20), _426, 0.0).y; + } else { + _448 = _405; + } + float _454; + if (_427) { + _454 = textureLod(sampler2D(_21, _20), _440, 0.0).y; + } else { + _454 = _409; + } + float _458; + if (_414) { + _458 = _448 - _247; + } else { + _458 = _448; + } + float _462; + if (_427) { + _462 = _454 - _247; + } else { + _462 = _454; + } + bool _467 = !(abs(_458) >= _246); + vec2 _474; + if (_467) { + vec2 _473 = _426; + _473.x = _426.x - (_209 * 1.5); + _474 = _473; + } else { + _474 = _426; + } + vec2 _481; + if (_467) { + vec2 _480 = _474; + _480.y = _474.y - (_211 * 1.5); + _481 = _480; + } else { + _481 = _474; + } + bool _482 = !(abs(_462) >= _246); + vec2 _490; + if (_482) { + vec2 _489 = _440; + _489.x = _440.x + (_209 * 1.5); + _490 = _489; + } else { + _490 = _440; + } + vec2 _497; + if (_482) { + vec2 _496 = _490; + _496.y = _490.y + (_211 * 1.5); + _497 = _496; + } else { + _497 = _490; + } + vec2 _859; + vec2 _860; + float _861; + float _862; + if (_467 || _482) { + float _505; + if (_467) { + _505 = textureLod(sampler2D(_21, _20), _481, 0.0).y; + } else { + _505 = _458; + } + float _511; + if (_482) { + _511 = textureLod(sampler2D(_21, _20), _497, 0.0).y; + } else { + _511 = _462; + } + float _515; + if (_467) { + _515 = _505 - _247; + } else { + _515 = _505; + } + float _519; + if (_482) { + _519 = _511 - _247; + } else { + _519 = _511; + } + bool _524 = !(abs(_515) >= _246); + vec2 _531; + if (_524) { + vec2 _530 = _481; + _530.x = _481.x - (_209 * 2.0); + _531 = _530; + } else { + _531 = _481; + } + vec2 _538; + if (_524) { + vec2 _537 = _531; + _537.y = _531.y - (_211 * 2.0); + _538 = _537; + } else { + _538 = _531; + } + bool _539 = !(abs(_519) >= _246); + vec2 _547; + if (_539) { + vec2 _546 = _497; + _546.x = _497.x + (_209 * 2.0); + _547 = _546; + } else { + _547 = _497; + } + vec2 _554; + if (_539) { + vec2 _553 = _547; + _553.y = _547.y + (_211 * 2.0); + _554 = _553; + } else { + _554 = _547; + } + vec2 _855; + vec2 _856; + float _857; + float _858; + if (_524 || _539) { + float _562; + if (_524) { + _562 = textureLod(sampler2D(_21, _20), _538, 0.0).y; + } else { + _562 = _515; + } + float _568; + if (_539) { + _568 = textureLod(sampler2D(_21, _20), _554, 0.0).y; + } else { + _568 = _519; + } + float _572; + if (_524) { + _572 = _562 - _247; + } else { + _572 = _562; + } + float _576; + if (_539) { + _576 = _568 - _247; + } else { + _576 = _568; + } + bool _581 = !(abs(_572) >= _246); + vec2 _588; + if (_581) { + vec2 _587 = _538; + _587.x = _538.x - (_209 * 2.0); + _588 = _587; + } else { + _588 = _538; + } + vec2 _595; + if (_581) { + vec2 _594 = _588; + _594.y = _588.y - (_211 * 2.0); + _595 = _594; + } else { + _595 = _588; + } + bool _596 = !(abs(_576) >= _246); + vec2 _604; + if (_596) { + vec2 _603 = _554; + _603.x = _554.x + (_209 * 2.0); + _604 = _603; + } else { + _604 = _554; + } + vec2 _611; + if (_596) { + vec2 _610 = _604; + _610.y = _604.y + (_211 * 2.0); + _611 = _610; + } else { + _611 = _604; + } + vec2 _851; + vec2 _852; + float _853; + float _854; + if (_581 || _596) { + float _619; + if (_581) { + _619 = textureLod(sampler2D(_21, _20), _595, 0.0).y; + } else { + _619 = _572; + } + float _625; + if (_596) { + _625 = textureLod(sampler2D(_21, _20), _611, 0.0).y; + } else { + _625 = _576; + } + float _629; + if (_581) { + _629 = _619 - _247; + } else { + _629 = _619; + } + float _633; + if (_596) { + _633 = _625 - _247; + } else { + _633 = _625; + } + bool _638 = !(abs(_629) >= _246); + vec2 _645; + if (_638) { + vec2 _644 = _595; + _644.x = _595.x - (_209 * 2.0); + _645 = _644; + } else { + _645 = _595; + } + vec2 _652; + if (_638) { + vec2 _651 = _645; + _651.y = _645.y - (_211 * 2.0); + _652 = _651; + } else { + _652 = _645; + } + bool _653 = !(abs(_633) >= _246); + vec2 _661; + if (_653) { + vec2 _660 = _611; + _660.x = _611.x + (_209 * 2.0); + _661 = _660; + } else { + _661 = _611; + } + vec2 _668; + if (_653) { + vec2 _667 = _661; + _667.y = _661.y + (_211 * 2.0); + _668 = _667; + } else { + _668 = _661; + } + vec2 _847; + vec2 _848; + float _849; + float _850; + if (_638 || _653) { + float _676; + if (_638) { + _676 = textureLod(sampler2D(_21, _20), _652, 0.0).y; + } else { + _676 = _629; + } + float _682; + if (_653) { + _682 = textureLod(sampler2D(_21, _20), _668, 0.0).y; + } else { + _682 = _633; + } + float _686; + if (_638) { + _686 = _676 - _247; + } else { + _686 = _676; + } + float _690; + if (_653) { + _690 = _682 - _247; + } else { + _690 = _682; + } + bool _695 = !(abs(_686) >= _246); + vec2 _702; + if (_695) { + vec2 _701 = _652; + _701.x = _652.x - (_209 * 2.0); + _702 = _701; + } else { + _702 = _652; + } + vec2 _709; + if (_695) { + vec2 _708 = _702; + _708.y = _702.y - (_211 * 2.0); + _709 = _708; + } else { + _709 = _702; + } + bool _710 = !(abs(_690) >= _246); + vec2 _718; + if (_710) { + vec2 _717 = _668; + _717.x = _668.x + (_209 * 2.0); + _718 = _717; + } else { + _718 = _668; + } + vec2 _725; + if (_710) { + vec2 _724 = _718; + _724.y = _718.y + (_211 * 2.0); + _725 = _724; + } else { + _725 = _718; + } + vec2 _843; + vec2 _844; + float _845; + float _846; + if (_695 || _710) { + float _733; + if (_695) { + _733 = textureLod(sampler2D(_21, _20), _709, 0.0).y; + } else { + _733 = _686; + } + float _739; + if (_710) { + _739 = textureLod(sampler2D(_21, _20), _725, 0.0).y; + } else { + _739 = _690; + } + float _743; + if (_695) { + _743 = _733 - _247; + } else { + _743 = _733; + } + float _747; + if (_710) { + _747 = _739 - _247; + } else { + _747 = _739; + } + bool _752 = !(abs(_743) >= _246); + vec2 _759; + if (_752) { + vec2 _758 = _709; + _758.x = _709.x - (_209 * 4.0); + _759 = _758; + } else { + _759 = _709; + } + vec2 _766; + if (_752) { + vec2 _765 = _759; + _765.y = _759.y - (_211 * 4.0); + _766 = _765; + } else { + _766 = _759; + } + bool _767 = !(abs(_747) >= _246); + vec2 _775; + if (_767) { + vec2 _774 = _725; + _774.x = _725.x + (_209 * 4.0); + _775 = _774; + } else { + _775 = _725; + } + vec2 _782; + if (_767) { + vec2 _781 = _775; + _781.y = _775.y + (_211 * 4.0); + _782 = _781; + } else { + _782 = _775; + } + vec2 _839; + vec2 _840; + float _841; + float _842; + if (_752 || _767) { + float _790; + if (_752) { + _790 = textureLod(sampler2D(_21, _20), _766, 0.0).y; + } else { + _790 = _743; + } + float _796; + if (_767) { + _796 = textureLod(sampler2D(_21, _20), _782, 0.0).y; + } else { + _796 = _747; + } + float _800; + if (_752) { + _800 = _790 - _247; + } else { + _800 = _790; + } + float _804; + if (_767) { + _804 = _796 - _247; + } else { + _804 = _796; + } + bool _809 = !(abs(_800) >= _246); + vec2 _816; + if (_809) { + vec2 _815 = _766; + _815.x = _766.x - (_209 * 8.0); + _816 = _815; + } else { + _816 = _766; + } + vec2 _823; + if (_809) { + vec2 _822 = _816; + _822.y = _816.y - (_211 * 8.0); + _823 = _822; + } else { + _823 = _816; + } + bool _824 = !(abs(_804) >= _246); + vec2 _831; + if (_824) { + vec2 _830 = _782; + _830.x = _782.x + (_209 * 8.0); + _831 = _830; + } else { + _831 = _782; + } + vec2 _838; + if (_824) { + vec2 _837 = _831; + _837.y = _831.y + (_211 * 8.0); + _838 = _837; + } else { + _838 = _831; + } + _839 = _838; + _840 = _823; + _841 = _804; + _842 = _800; + } else { + _839 = _782; + _840 = _766; + _841 = _747; + _842 = _743; + } + _843 = _839; + _844 = _840; + _845 = _841; + _846 = _842; + } else { + _843 = _725; + _844 = _709; + _845 = _690; + _846 = _686; + } + _847 = _843; + _848 = _844; + _849 = _845; + _850 = _846; + } else { + _847 = _668; + _848 = _652; + _849 = _633; + _850 = _629; + } + _851 = _847; + _852 = _848; + _853 = _849; + _854 = _850; + } else { + _851 = _611; + _852 = _595; + _853 = _576; + _854 = _572; + } + _855 = _851; + _856 = _852; + _857 = _853; + _858 = _854; + } else { + _855 = _554; + _856 = _538; + _857 = _519; + _858 = _515; + } + _859 = _855; + _860 = _856; + _861 = _857; + _862 = _858; + } else { + _859 = _497; + _860 = _481; + _861 = _462; + _862 = _458; + } + _863 = _859; + _864 = _860; + _865 = _861; + _866 = _862; + } else { + _863 = _440; + _864 = _426; + _865 = _409; + _866 = _405; + } + _867 = _863; + _868 = _864; + _869 = _865; + _870 = _866; + } else { + _867 = _387; + _868 = _373; + _869 = _356; + _870 = _352; + } + _871 = _867; + _872 = _868; + _873 = _869; + _874 = _870; + } else { + _871 = _334; + _872 = _320; + _873 = _303; + _874 = _299; + } + _875 = _871; + _876 = _872; + _877 = _873; + _878 = _874; + } else { + _875 = _281; + _876 = _268; + _877 = _252; + _878 = _251; + } + float _887; + if (_185) { + _887 = _6.y - _876.y; + } else { + _887 = _6.x - _876.x; + } + float _892; + if (_185) { + _892 = _875.y - _6.y; + } else { + _892 = _875.x - _6.x; + } + float _906 = max(((_887 < _892) ? ((_878 < 0.0) != _250) : ((_877 < 0.0) != _250)) ? ((min(_887, _892) * ((-1.0) / (_892 + _887))) + 0.5) : 0.0, _249 * _249); + vec2 _912; + if (_185) { + vec2 _911 = _113; + _911.x = _6.x + (_906 * _205); + _912 = _911; + } else { + _912 = _113; + } + vec2 _919; + if (_182) { + vec2 _918 = _912; + _918.y = _912.y + (_906 * _205); + _919 = _918; + } else { + _919 = _912; + } + _926 = vec4(textureLod(sampler2D(_21, _20), _919, 0.0).xyz, _118); + break; + } while (false); + vec4 _939 = (vec4(_926.xyz, texture(sampler2D(_21, _20), _6.xy).w) * _19._m5) + _19._m4; + _939.w = _939.w * _5.w; + vec4 _956; + if (floatBitsToInt(_19._m10) != 0) { + vec4 _954 = textureLod(sampler3D(_22, _10), _939.xyz, 0.0); + _956 = vec4(_954.x, _954.y, _954.z, _939.w); + } else { + _956 = _939; + } + vec4 _1006; + if (floatBitsToInt(_19._m7) != 0) { +#if 1 + _956.rgb = GammaSafe(_956.rgb); +#endif + + vec3 _968 = _956.xyz * mat3(vec3(0.6274039745330810546875, 0.329281985759735107421875, 0.043313600122928619384765625), vec3(0.06909699738025665283203125, 0.919539988040924072265625, 0.0113612003624439239501953125), vec3(0.01639159955084323883056640625, 0.0880132019519805908203125, 0.895595014095306396484375)); + float _979 = pow(abs((_968.x * _17._m0) / _17._m15), 0.1593017578125); + vec3 _986; + _986.x = pow((0.8359375 + (18.8515625 * _979)) / (1.0 + (18.6875 * _979)), 78.84375); + float _988 = pow(abs((_968.y * _17._m0) / _17._m15), 0.1593017578125); + _986.y = pow((0.8359375 + (18.8515625 * _988)) / (1.0 + (18.6875 * _988)), 78.84375); + float _997 = pow(abs((_968.z * _17._m0) / _17._m15), 0.1593017578125); + _986.z = pow((0.8359375 + (18.8515625 * _997)) / (1.0 + (18.6875 * _997)), 78.84375); + _1006 = vec4(_986.x, _986.y, _986.z, _956.w); + } else { + _1006 = _956; + } + vec3 _1014 = mix(_1006.xyz * _1006.www, _1006.xyz, bvec3(_19._m6 == 0.0)); + vec4 _1015 = vec4(_1014.x, _1014.y, _1014.z, _1006.w); + float _1019 = _13._m0[0u]._m0.w * _1006.w; + _1015.z = (_13._m0[0u]._m0.w != 1.0) ? (_1019 * _1019) : _1014.z; + float _1028 = _1006.w * _13._m0[0u]._m0.x; + _1015.w = _1028; + vec4 _1058; + if (floatBitsToInt(_19._m11) != 0) { + vec4 _1044; + if (floatBitsToInt(_19._m8) != 0) { + vec4 _1043 = _1015; + _1043.w = _1028 * _19._m8; + _1044 = _1043; + } else { + _1044 = _1015; + } + vec4 _1057; + if (floatBitsToInt(_19._m9) != 0) { + vec4 _1056 = _1044; + _1056.w = (-0.5) * (cos(_1044.w * 3.1415927410125732421875) - 1.0); + _1057 = _1056; + } else { + _1057 = _1044; + } + _1058 = _1057; + } else { + _1058 = _1015; + } + vec4 _1061 = _1058; + _1061.w = clamp(_1058.w, 0.0, 1.0); + _8 = _1061; +} + diff --git a/src/games/rdr2vk/output/0xA383C448.frag.glsl b/src/games/rdr2vk/output/0xA383C448.frag.glsl new file mode 100644 index 0000000000..c35f705e04 --- /dev/null +++ b/src/games/rdr2vk/output/0xA383C448.frag.glsl @@ -0,0 +1,425 @@ +#version 450 + +#extension GL_GOOGLE_include_directive : require +#include "./output.glsl" + +#extension GL_EXT_scalar_block_layout : require +#extension GL_EXT_samplerless_texture_functions : require + +struct _12 { + float _m0; + vec3 _m1; + vec3 _m2; + vec3 _m3; + float _m4; + vec3 _m5; + vec3 _m6; + float _m7; + vec3 _m8; + vec3 _m9; + vec2 _m10; + vec3 _m11; + vec4 _m12; + vec4 _m13[4]; + vec4 _m14; + float _m15; + int _m16; +}; + +struct _13 { + float _m0; +}; + +struct _15 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + uint _m6; + uint _m7; + uvec4 _m8; +}; + +struct _14 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + _15 _m3; + vec2 _m4; +}; + +struct _17 { + float _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _18 { + int _m0; +}; + +struct _19 { + _18 _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _16 { + vec3 _m0; + vec3 _m1; + float _m2; + float _m3; + _17 _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + uint _m15; + _18 _m16; + _18 _m17; + _19 _m18; + vec4 _m19; + float _m20; + float _m21; + float _m22; + float _m23; + float _m24; + float _m25; + float _m26; + float _m27; +}; + +struct _21 { + vec3 _m0; + float _m1; +}; + +struct _22 { + vec4 _m0; + vec4 _m1; + vec4 _m2; +}; + +struct _23 { + vec2 _m0; + vec2 _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + vec2 _m8; + float _m9; +}; + +struct _24 { + float _m0; + _18 _m1; +}; + +struct _25 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _26 { + _18 _m0; + float _m1; + float _m2; +}; + +struct _28 { + int _m0; +}; + +struct _27 { + _18 _m0; + _28 _m1; + _28 _m2; +}; + +struct _29 { + _18 _m0; +}; + +struct _20 { + _21 _m0; + vec4 _m1; + mat4 _m2; + mat4 _m3; + _22 _m4; + _23 _m5; + _24 _m6; + _25 _m7; + _26 _m8; + _27 _m9; + _29 _m10; + float _m11; + float _m12; + float _m13; +}; + +struct _30 { + float _m0; + float _m1; + vec2 _m2; + vec2 _m3; + vec2 _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; +}; + +struct _31 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec3 _m3; + vec3 _m4; + vec3 _m5; + vec3 _m6; + vec3 _m7; +}; + +struct _32 { + vec4 _m0; + vec4 _m1; + vec3 _m2; +}; + +struct _33 { + vec4 _m0; + vec4 _m1; +}; + +struct _35 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; +}; + +struct _34 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + float _m16; + float _m17; + float _m18; + _35 _m19[2]; +}; + +struct _36 { + vec2 _m0; + vec2 _m1; + vec2 _m2; + float _m3; + float _m4; + float _m5; + vec2 _m6; +}; + +struct _37 { + vec4 _m0; + vec4 _m1; + vec2 _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _38 { + vec3 _m0; + float _m1; + float _m2; +}; + +struct _11 { + float _m0[32]; + float _m1[32]; + _12 _m2; + _12 _m3; + _13 _m4; + _14 _m5; + _16 _m6; + _20 _m7; + _30 _m8; + _31 _m9; + float _m10; + vec2 _m11; + _32 _m12; + _33 _m13; + float _m14; + float _m15; + vec4 _m16; + _34 _m17; + _36 _m18; + _37 _m19; + vec4 _m20; + float _m21; + uint _m22; + uvec2 _m23; + uvec2 _m24; + uint _m25; + float _m26; + float _m27; + float _m28; + float _m29; + _38 _m30; + int _m31; +}; + +vec3 _131; + +layout(set = 0, binding = 99, scalar) readonly buffer _10_39 { + _11 _m0[]; +} +_39; + +layout(set = 0, binding = 18, std140) uniform _44_45 { + float _m0; + float _m1; + uint _m2; + uint _m3; + uint _m4; + uint _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + uint _m16; + uint _m17; + uint _m18; + uint _m19; +} +_45; + +layout(set = 1, binding = 17, std140) uniform _46_47 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + float _m5; + float _m6; + float _m7; + vec4 _m8; + vec4 _m9; + vec4 _m10; +} +_47; + +layout(set = 1, binding = 32) uniform sampler _8; +layout(set = 1, binding = 34) uniform sampler _9; +layout(set = 0, binding = 123) uniform texture2DArray _43; +layout(set = 1, binding = 187) uniform texture2D _48; +layout(set = 1, binding = 207) uniform texture3D _49; + +layout(location = 0) in vec4 _4; +layout(location = 1) in vec2 _5; +layout(location = 0) out vec4 _6; + +void main() { + vec4 _133 = gl_FragCoord; + _133.w = 1.0 / _133.w; + vec4 _141 = textureLod(sampler2D(_48, _8), _5, 0.0); + vec3 _150 = _141.xyz; + vec3 _173 = mix(mix(pow((_150 + vec3(_45._m14)) / vec3(_45._m13), vec3(1.0 / _45._m12)), _150 / vec3(_45._m11), lessThan(_150, vec3(0.003130800090730190277099609375 / _45._m11))), _150, bvec3((_45._m3 != 0u) && (!(_45._m2 != 0u)))); + vec3 _245; + if (_45._m16 != 0u) { + uint _185 = uint(_47._m10.x); + vec3 _239; + if (_185 == 1u) { + _239 = (log2(_173 + vec3(1.0000000116860974230803549289703e-07)) * _47._m10.y) + vec3(_47._m10.z); + } else { + vec3 _238; + if (_185 == 2u) { + float _206 = pow(((_173.x * _47._m10.y) + _47._m10.z) * 9.9999997473787516355514526367188e-05, 0.1593017578125); + vec3 _213 = _173; + _213.x = pow((0.8359375 + (18.8515625 * _206)) / (1.0 + (18.6875 * _206)), 78.84375); + float _218 = pow(((_173.y * _47._m10.y) + _47._m10.z) * 9.9999997473787516355514526367188e-05, 0.1593017578125); + _213.y = pow((0.8359375 + (18.8515625 * _218)) / (1.0 + (18.6875 * _218)), 78.84375); + float _230 = pow(((_173.z * _47._m10.y) + _47._m10.z) * 9.9999997473787516355514526367188e-05, 0.1593017578125); + _213.z = pow((0.8359375 + (18.8515625 * _230)) / (1.0 + (18.6875 * _230)), 78.84375); + _238 = _213; + } else { + _238 = _173; + } + _239 = _238; + } + _245 = textureLod(sampler3D(_49, _9), _239, 0.0).xyz; + } else { + _245 = _173; + } + +#if 1 + _245.rgb = GammaSafe(_245.rgb); +#endif + + vec3 _246 = _245 * mat3(vec3(0.6274039745330810546875, 0.329281985759735107421875, 0.043313600122928619384765625), vec3(0.06909699738025665283203125, 0.919539988040924072265625, 0.0113612003624439239501953125), vec3(0.01639159955084323883056640625, 0.0880132019519805908203125, 0.895595014095306396484375)); + float _257 = pow(abs((_246.x * _45._m0) / _45._m15), 0.1593017578125); + vec3 _264; + _264.x = pow((0.8359375 + (18.8515625 * _257)) / (1.0 + (18.6875 * _257)), 78.84375); + float _266 = pow(abs((_246.y * _45._m0) / _45._m15), 0.1593017578125); + _264.y = pow((0.8359375 + (18.8515625 * _266)) / (1.0 + (18.6875 * _266)), 78.84375); + float _275 = pow(abs((_246.z * _45._m0) / _45._m15), 0.1593017578125); + _264.z = pow((0.8359375 + (18.8515625 * _275)) / (1.0 + (18.6875 * _275)), 78.84375); + vec3 _336; + if (floatBitsToInt(_47._m2.x) != 0) { + ivec4 _314 = ivec4(uvec4(uvec2(ivec2(uvec2(_133.xy))) & uvec2(63u), uint(int((floatBitsToInt(_47._m2.y) != 0) ? _39._m0[0u]._m22 : 63u) & 31), 0u)); + vec3 _322 = (vec3(texelFetch(_43, _314.xyz, _314.w).x) * 2.0) - vec3(1.0); + vec3 _333; + if (floatBitsToInt(_47._m2.z) != 0) { + _333 = vec3(ivec3(sign(_322))) * (vec3(1.0) - sqrt(vec3(1.0) - abs(_322))); + } else { + _333 = _322; + } + _336 = _264 + (_333 * vec3(_47._m2.w)); + } else { + _336 = _264; + } + _6 = vec4(_336, _141.w); +} + diff --git a/src/games/rdr2vk/output/0xBCF843ED.frag.glsl b/src/games/rdr2vk/output/0xBCF843ED.frag.glsl new file mode 100644 index 0000000000..84e380ac39 --- /dev/null +++ b/src/games/rdr2vk/output/0xBCF843ED.frag.glsl @@ -0,0 +1,140 @@ +#version 450 + +#extension GL_GOOGLE_include_directive : require +#include "./output.glsl" + +#extension GL_EXT_scalar_block_layout : require + +struct _9 { + vec4 _m0; + ivec4 _m1; + vec4 _m2; + ivec4 _m3; + int _m4; + int _m5; + int _m6; + int _m7; + int _m8; + uint _m9; + float _m10; +}; + +vec3 _82; + +layout(set = 0, binding = 96, scalar) readonly buffer _8_10 { + _9 _m0[]; +} +_10; + +layout(set = 0, binding = 23, std140) uniform _13_14 { + float _m0; + float _m1; + uint _m2; + uint _m3; + uint _m4; + uint _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + uint _m16; + uint _m17; + uint _m18; + uint _m19; +} +_14; + +layout(set = 1, binding = 22, std140) uniform _15_16 { + vec4 _m0[2]; + vec4 _m1[2]; + vec4 _m2[2]; + vec4 _m3; + vec4 _m4; + vec4 _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; +} +_16; + +layout(set = 1, binding = 34) uniform sampler _7; +layout(set = 1, binding = 37) uniform sampler _17; +layout(set = 1, binding = 128) uniform texture2D _18; +layout(set = 0, binding = 131) uniform texture3D _19; + +layout(location = 0) in vec2 _4; +layout(location = 0) out vec4 _5; + +void main() { + vec4 _88 = texture(sampler2D(_18, _17), _4); + vec4 _94 = (_88 * _16._m5) + _16._m4; + if (_94.w < 1.0) { + discard; + } + vec4 _111; + if (floatBitsToInt(_16._m10) != 0) { + vec4 _109 = textureLod(sampler3D(_19, _7), _94.xyz, 0.0); + _111 = vec4(_109.x, _109.y, _109.z, _94.w); + } else { + _111 = _94; + } + vec4 _161; + if (floatBitsToInt(_16._m7) != 0) { +#if 1 + _111.rgb = GammaSafe(_111.rgb); +#endif + + vec3 _123 = _111.xyz * mat3(vec3(0.6274039745330810546875, 0.329281985759735107421875, 0.043313600122928619384765625), vec3(0.06909699738025665283203125, 0.919539988040924072265625, 0.0113612003624439239501953125), vec3(0.01639159955084323883056640625, 0.0880132019519805908203125, 0.895595014095306396484375)); + float _134 = pow(abs((_123.x * _14._m0) / _14._m15), 0.1593017578125); + vec3 _141; + _141.x = pow((0.8359375 + (18.8515625 * _134)) / (1.0 + (18.6875 * _134)), 78.84375); + float _143 = pow(abs((_123.y * _14._m0) / _14._m15), 0.1593017578125); + _141.y = pow((0.8359375 + (18.8515625 * _143)) / (1.0 + (18.6875 * _143)), 78.84375); + float _152 = pow(abs((_123.z * _14._m0) / _14._m15), 0.1593017578125); + _141.z = pow((0.8359375 + (18.8515625 * _152)) / (1.0 + (18.6875 * _152)), 78.84375); + _161 = vec4(_141.x, _141.y, _141.z, _111.w); + } else { + _161 = _111; + } + vec3 _169 = mix(_161.xyz * _161.www, _161.xyz, bvec3(_16._m6 == 0.0)); + vec4 _170 = vec4(_169.x, _169.y, _169.z, _161.w); + float _174 = _10._m0[0u]._m0.w * _161.w; + _170.z = (_10._m0[0u]._m0.w != 1.0) ? (_174 * _174) : _169.z; + float _183 = _161.w * _10._m0[0u]._m0.x; + _170.w = _183; + vec4 _213; + if (floatBitsToInt(_16._m11) != 0) { + vec4 _199; + if (floatBitsToInt(_16._m8) != 0) { + vec4 _198 = _170; + _198.w = _183 * _16._m8; + _199 = _198; + } else { + _199 = _170; + } + vec4 _212; + if (floatBitsToInt(_16._m9) != 0) { + vec4 _211 = _199; + _211.w = (-0.5) * (cos(_199.w * 3.1415927410125732421875) - 1.0); + _212 = _211; + } else { + _212 = _199; + } + _213 = _212; + } else { + _213 = _170; + } + vec4 _216 = _213; + _216.w = clamp(_213.w, 0.0, 1.0); + _5 = _216; +} + diff --git a/src/games/rdr2vk/output/0xC235CFFA.comp.glsl b/src/games/rdr2vk/output/0xC235CFFA.comp.glsl new file mode 100644 index 0000000000..a4608af73d --- /dev/null +++ b/src/games/rdr2vk/output/0xC235CFFA.comp.glsl @@ -0,0 +1,91 @@ +#version 450 + +#extension GL_GOOGLE_include_directive : require +#include "./output.glsl" + +layout(local_size_x = 32, local_size_y = 32, local_size_z = 1) in; + +vec3 _50; +vec3 _58; + +layout(set = 0, binding = 23, std140) uniform _6_7 { + float _m0; + float _m1; + uint _m2; + uint _m3; + uint _m4; + uint _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + uint _m16; + uint _m17; + uint _m18; + uint _m19; +} +_7; + +layout(set = 0, binding = 19, std140) uniform _8_9 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + vec4 _m5; + vec4 _m6; + vec4 _m7; + vec4 _m8; + vec4 _m9; + vec4 _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + float _m16; + float _m17; + float _m18; + float _m19; + float _m20; + float _m21; + float _m22; + float _m23; + float _m24; + uint _m25; + uint _m26; +} +_9; + +layout(set = 1, binding = 64, rgba32f) uniform writeonly image3D _11; + +void main() { + uvec3 _65 = uvec3(gl_GlobalInvocationID.xy, gl_WorkGroupID.z); + vec3 _72 = vec3(_65) / vec3(float(_9._m26 - 1u)); + float _75 = pow(abs(_72.x), 0.0126833133399486541748046875); + vec3 _82; + _82.x = pow(max(_75 - 0.8359375, 0.0) / (18.8515625 - (18.6875 * _75)), 6.277394771575927734375); + float _85 = pow(abs(_72.y), 0.0126833133399486541748046875); + _82.y = pow(max(_85 - 0.8359375, 0.0) / (18.8515625 - (18.6875 * _85)), 6.277394771575927734375); + float _95 = pow(abs(_72.z), 0.0126833133399486541748046875); + _82.z = pow(max(_95 - 0.8359375, 0.0) / (18.8515625 - (18.6875 * _95)), 6.277394771575927734375); + vec3 _109 = (_82 * _7._m15) / vec3(_7._m0); + float _124 = _109.x; + float _125 = _109.y; + float _126 = _109.z; + float _129 = max(max(_124, max(_125, _126)), 5.9604644775390625e-08); + float _133 = pow(_129, _9._m1.x); + float _137 = _133 / ((pow(_133, _9._m1.y) * _9._m1.z) + _9._m1.w); + vec3 _160; + _160.x = pow(mix(pow(_124 / _129, _9._m2.x), 1.0, pow(_137, _9._m3.x)), _9._m4.x) * _137; + _160.y = pow(mix(pow(_125 / _129, _9._m2.y), 1.0, pow(_137, _9._m3.y)), _9._m4.y) * _137; + _160.z = pow(mix(pow(_126 / _129, _9._m2.z), 1.0, pow(_137, _9._m3.z)), _9._m4.z) * _137; + imageStore(_11, ivec3(_65), vec4(_160 * mat3(vec3(1.66049015522003173828125, -0.587639033794403076171875, -0.072851590812206268310546875), vec3(-0.124549962580204010009765625, 1.13289988040924072265625, -0.00834796018898487091064453125), vec3(-0.01815111003816127777099609375, -0.10057871043682098388671875, 1.11872971057891845703125)), 1.0)); +} + diff --git a/src/games/rdr2vk/output/0xFCD82342.frag.glsl b/src/games/rdr2vk/output/0xFCD82342.frag.glsl new file mode 100644 index 0000000000..dc5d9a0866 --- /dev/null +++ b/src/games/rdr2vk/output/0xFCD82342.frag.glsl @@ -0,0 +1,139 @@ +#version 450 + +#extension GL_GOOGLE_include_directive : require +#include "./output.glsl" + +#extension GL_EXT_scalar_block_layout : require + +struct _11 { + vec4 _m0; + ivec4 _m1; + vec4 _m2; + ivec4 _m3; + int _m4; + int _m5; + int _m6; + int _m7; + int _m8; + uint _m9; + float _m10; +}; + +vec3 _84; + +layout(set = 0, binding = 96, scalar) readonly buffer _10_12 { + _11 _m0[]; +} +_12; + +layout(set = 0, binding = 23, std140) uniform _15_16 { + float _m0; + float _m1; + uint _m2; + uint _m3; + uint _m4; + uint _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + uint _m16; + uint _m17; + uint _m18; + uint _m19; +} +_16; + +layout(set = 1, binding = 22, std140) uniform _17_18 { + vec4 _m0[2]; + vec4 _m1[2]; + vec4 _m2[2]; + vec4 _m3; + vec4 _m4; + vec4 _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; +} +_18; + +layout(set = 1, binding = 34) uniform sampler _9; +layout(set = 1, binding = 37) uniform sampler _19; +layout(set = 1, binding = 128) uniform texture2D _20; +layout(set = 0, binding = 131) uniform texture3D _21; + +layout(location = 0) in vec4 _4; +layout(location = 1) in vec4 _5; +layout(location = 2) in vec2 _6; +layout(location = 0) out vec4 _7; + +void main() { + vec4 _97 = (texture(sampler2D(_20, _19), _6) * _18._m5) + _18._m4; + _97.w = _97.w * _5.w; + vec4 _114; + if (floatBitsToInt(_18._m10) != 0) { + vec4 _112 = textureLod(sampler3D(_21, _9), _97.xyz, 0.0); + _114 = vec4(_112.x, _112.y, _112.z, _97.w); + } else { + _114 = _97; + } + vec4 _164; + if (floatBitsToInt(_18._m7) != 0) { +#if 1 + _114.rgb = GammaSafe(_114.rgb); +#endif + + vec3 _126 = _114.xyz * mat3(vec3(0.6274039745330810546875, 0.329281985759735107421875, 0.043313600122928619384765625), vec3(0.06909699738025665283203125, 0.919539988040924072265625, 0.0113612003624439239501953125), vec3(0.01639159955084323883056640625, 0.0880132019519805908203125, 0.895595014095306396484375)); + float _137 = pow(abs((_126.x * _16._m0) / _16._m15), 0.1593017578125); + vec3 _144; + _144.x = pow((0.8359375 + (18.8515625 * _137)) / (1.0 + (18.6875 * _137)), 78.84375); + float _146 = pow(abs((_126.y * _16._m0) / _16._m15), 0.1593017578125); + _144.y = pow((0.8359375 + (18.8515625 * _146)) / (1.0 + (18.6875 * _146)), 78.84375); + float _155 = pow(abs((_126.z * _16._m0) / _16._m15), 0.1593017578125); + _144.z = pow((0.8359375 + (18.8515625 * _155)) / (1.0 + (18.6875 * _155)), 78.84375); + _164 = vec4(_144.x, _144.y, _144.z, _114.w); + } else { + _164 = _114; + } + vec3 _172 = mix(_164.xyz * _164.www, _164.xyz, bvec3(_18._m6 == 0.0)); + vec4 _173 = vec4(_172.x, _172.y, _172.z, _164.w); + float _177 = _12._m0[0u]._m0.w * _164.w; + _173.z = (_12._m0[0u]._m0.w != 1.0) ? (_177 * _177) : _172.z; + float _186 = _164.w * _12._m0[0u]._m0.x; + _173.w = _186; + vec4 _216; + if (floatBitsToInt(_18._m11) != 0) { + vec4 _202; + if (floatBitsToInt(_18._m8) != 0) { + vec4 _201 = _173; + _201.w = _186 * _18._m8; + _202 = _201; + } else { + _202 = _173; + } + vec4 _215; + if (floatBitsToInt(_18._m9) != 0) { + vec4 _214 = _202; + _214.w = (-0.5) * (cos(_202.w * 3.1415927410125732421875) - 1.0); + _215 = _214; + } else { + _215 = _202; + } + _216 = _215; + } else { + _216 = _173; + } + vec4 _219 = _216; + _219.w = clamp(_216.w, 0.0, 1.0); + _7 = _219; +} + diff --git a/src/games/rdr2vk/output/compiled/0x14BF23D4.frag.spv b/src/games/rdr2vk/output/compiled/0x14BF23D4.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..b5c525375e20abc3d9a0d44a7e6626daee6adc55 GIT binary patch literal 19744 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 literal 0 HcmV?d00001 diff --git a/src/games/rdr2vk/output/compiled/0x1B0D650C.frag.spv b/src/games/rdr2vk/output/compiled/0x1B0D650C.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..a4a728a1569fda43a8cfa17834cbe230dd4130e5 GIT binary patch literal 19284 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 literal 0 HcmV?d00001 diff --git a/src/games/rdr2vk/output/compiled/0x26B3FAA9.frag.spv b/src/games/rdr2vk/output/compiled/0x26B3FAA9.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..ad0c2b16069560992b27451c8ed0fb498fff3efa GIT binary patch literal 19612 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 Zs2dyk$ZPp>g~^8>jGtPL>%_9g{{aV{bdCT3 literal 0 HcmV?d00001 diff --git a/src/games/rdr2vk/output/compiled/0x6032A998.frag.spv b/src/games/rdr2vk/output/compiled/0x6032A998.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..8a2b66fa65dcadc990bfda3bc2a445c3f0ebdc1c GIT binary patch literal 19844 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 ICzdt-56k0BoB#j- literal 0 HcmV?d00001 diff --git a/src/games/rdr2vk/output/compiled/0x8B9C89F1.frag.spv b/src/games/rdr2vk/output/compiled/0x8B9C89F1.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..a28b0e9ab4b429d8925986123424d5fe8a096ea9 GIT binary patch literal 63296 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 literal 0 HcmV?d00001 diff --git a/src/games/rdr2vk/output/compiled/0xA383C448.frag.spv b/src/games/rdr2vk/output/compiled/0xA383C448.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..b04ad19e2ab50e3a9499306817615e76ec8c390e GIT binary patch literal 30580 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 literal 0 HcmV?d00001 diff --git a/src/games/rdr2vk/output/output.glsl b/src/games/rdr2vk/output/output.glsl new file mode 100644 index 0000000000..bb3079ba27 --- /dev/null +++ b/src/games/rdr2vk/output/output.glsl @@ -0,0 +1,9 @@ +#include "../common.glsl" + +vec3 GammaSafe(vec3 x) { + if (RENODX_SDR_EOTF_EMULATION != 0.f) { + return CorrectGammaMismatch(x, false); + } else { + return x; + } +} diff --git a/src/games/rdr2vk/shared.h b/src/games/rdr2vk/shared.h new file mode 100644 index 0000000000..2fb2e00a09 --- /dev/null +++ b/src/games/rdr2vk/shared.h @@ -0,0 +1,29 @@ +#ifndef SRC_RDR2_SHARED_H_ +#define SRC_RDR2_SHARED_H_ + +#define CUSTOM_FILM_GRAIN_TYPE 1.f + +#define RENODX_TONE_MAP_TYPE 2.f +#define RENODX_PEAK_WHITE_NITS 400.f +#define RENODX_DIFFUSE_WHITE_NITS 100.f +#define RENODX_GRAPHICS_WHITE_NITS 100.f +#define RENODX_SDR_EOTF_EMULATION 1.f +#define RENODX_TONE_MAP_PER_CHANNEL 0.f +#define RENODX_TONE_MAP_BLOWOUT 0.f +#define RENODX_TONE_MAP_HUE_SHIFT 0.f + +#define RENODX_TONE_MAP_EXPOSURE 1.f +#define RENODX_TONE_MAP_HIGHLIGHTS 1.f +#define RENODX_TONE_MAP_SHADOWS 1.f +#define RENODX_TONE_MAP_CONTRAST 1.f +#define RENODX_TONE_MAP_SATURATION 1.f +#define RENODX_TONE_MAP_HIGHLIGHT_SATURATION 1.f +#define RENODX_TONE_MAP_FLARE 0.f +#define RENODX_TONE_MAP_DECHROMA 0.f + +#define CUSTOM_LUT_STRENGTH 1.f +#define CUSTOM_LUT_SCALING 1.f + +#define CUSTOM_LUT_ENCODING 2.f + +#endif // SRC_RDR2_SHARED_H_ \ No newline at end of file diff --git a/src/games/rdr2vk/tonemap/0x2B012EDD.frag.glsl b/src/games/rdr2vk/tonemap/0x2B012EDD.frag.glsl new file mode 100644 index 0000000000..0390bf679f --- /dev/null +++ b/src/games/rdr2vk/tonemap/0x2B012EDD.frag.glsl @@ -0,0 +1,229 @@ +#version 450 + +#extension GL_GOOGLE_include_directive : require +#include "./tonemap.glsl" + +struct _22 { + int _m0; + float _m1; + int _m2[2]; +}; + +struct _23 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; +}; + +struct _21 { + _22 _m0; + _23 _m1[11]; +}; + +layout(set = 0, binding = 20, std140) uniform _9_10 { + float _m0; + float _m1; + uint _m2; + uint _m3; + uint _m4; + uint _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + uint _m16; + uint _m17; + uint _m18; + uint _m19; +} +_10; + +layout(set = 1, binding = 16, std140) uniform _11_12 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + vec4 _m5; + vec4 _m6; + vec4 _m7; + vec4 _m8; + vec4 _m9; + vec4 _m10; + vec4 _m11; + vec4 _m12; + vec4 _m13; + vec4 _m14; + vec2 _m15; + vec4 _m16; + vec4 _m17; + vec4 _m18; + vec4 _m19; + vec4 _m20; + vec4 _m21; + vec4 _m22; + vec4 _m23; + vec4 _m24; + vec3 _m25; + vec3 _m26; + vec3 _m27; + vec4 _m28; + vec4 _m29; + vec4 _m30; + vec4 _m31; + vec4 _m32; + vec4 _m33; + vec4 _m34; + vec4 _m35; + vec4 _m36; + vec4 _m37; + vec3 _m38; + vec4 _m39; + vec4 _m40; + vec4 _m41; + vec4 _m42; + mat4 _m43; + vec4 _m44; + vec4 _m45; + vec4 _m46; + vec4 _m47; + vec4 _m48; + vec4 _m49; + vec4 _m50; + vec4 _m51; + vec4 _m52; + vec4 _m53; + vec4 _m54; + vec4 _m55; + vec4 _m56; + vec4 _m57; + float _m58; + vec4 _m59; + vec4 _m60; + float _m61; + vec4 _m62; + vec4 _m63; + vec2 _m64; + vec4 _m65; + vec4 _m66; + vec4 _m67; + vec4 _m68; + vec4 _m69; + vec4 _m70; + vec4 _m71; + vec4 _m72; + vec4 _m73; + vec4 _m74; + vec4 _m75; + vec4 _m76; + vec4 _m77; + vec3 _m78; + float _m79; + vec4 _m80; + vec4 _m81; + vec4 _m82; + vec4 _m83; + vec4 _m84; + vec4 _m85; +} +_12; + +layout(set = 0, binding = 214, std430) readonly buffer _20_24 { + _21 _m0[]; +} +_24; + +layout(set = 1, binding = 34) uniform sampler _7; +layout(set = 1, binding = 185) uniform texture1D _14; +layout(set = 1, binding = 40) uniform sampler _15; +layout(set = 1, binding = 186) uniform texture2D _16; +layout(set = 1, binding = 196) uniform texture2D _17; +layout(set = 1, binding = 202) uniform texture2D _18; +layout(set = 1, binding = 203) uniform texture2D _19; + +layout(location = 0) in vec4 _4; +layout(location = 0) out vec4 _5; + +void main() { + vec4 _112 = texture(sampler2D(_16, _15), _4.xy); + vec3 _113 = _112.xyz; + vec3 _158; + if (floatBitsToInt(_12._m47.w) != 0) { + vec2 _144 = ((_4.xy - _12._m46.xy) * mat2(vec2(_12._m48.x, _12._m48.y), vec2(_12._m48.z, _12._m48.w))) * _12._m46.zw; + _158 = mix(_113, _12._m47.xyz, vec3(_12._m47.w * texture(sampler1D(_14, _7), min(1.0, max((dot(_144, _144) - _12._m49.x) * _12._m49.w, 0.0))).w)); + } else { + _158 = _113; + } + vec4 _316; + if (floatBitsToInt(_12._m19.x) != 0) { + vec2 _171 = _4.xy * _12._m17.w; + float _237 = (((((((fract(sin(dot(_171 + vec2(0.070000000298023223876953125 * _12._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875) + fract(sin(dot(_171 + vec2(0.10999999940395355224609375 * _12._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_171 + vec2(0.12999999523162841796875 * _12._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_171 + vec2(0.17000000178813934326171875 * _12._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_171 + vec2(0.189999997615814208984375 * _12._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_171 + vec2(0.23000000417232513427734375 * _12._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_171 + vec2(0.2899999916553497314453125 * _12._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_171 + vec2(0.310000002384185791015625 * _12._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) * 0.125; + float _239 = clamp(_237 + _12._m17.z, 0.0, 1.0); + vec3 _314; + do { + if (!(floatBitsToInt(_12._m18.w) != 0)) { + _314 = vec3(_239); + break; + } + float _262; + if (floatBitsToInt(_12._m18.y) != 0) { + float _257 = dot(_158.xyz, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)); + _262 = mix(_239, _239 * 0.5, (_257 * _257) * _257); + } else { + _262 = _239; + } + vec3 _313; + if (floatBitsToInt(_12._m19.z) != 0) { + vec3 _277 = vec3(_262); + vec3 _279 = _277 * 2.0; + _313 = mix(_158.xyz, mix(((_158.xyz * 2.0) * (vec3(1.0) - _277)) + (sqrt(_158.xyz) * (_279 - vec3(1.0))), (_279 * _158.xyz) + ((_158.xyz * _158.xyz) * (vec3(1.0) - _279)), lessThan(_277, vec3(0.5))), vec3(_12._m18.x)); + } else { + vec3 _312; + if (floatBitsToInt(_12._m19.w) != 0) { + vec3 _300 = vec3(_262); + _312 = mix(_158.xyz, mix(vec3(1.0) - (((vec3(1.0) - _300) * 2.0) * (vec3(1.0) - _158.xyz)), (_300 * 2.0) * _158.xyz, lessThan(_158.xyz, vec3(0.5))), vec3(_12._m18.x)); + } else { + _312 = clamp(max(_158.xyz * 0.02500000037252902984619140625, _158.xyz + vec3((_262 - 0.5) * _12._m18.x)), vec3(0.0), vec3(1.0)); + } + _313 = _312; + } + _314 = _313; + break; + } while (false); + _316 = vec4(_314.x, _314.y, _314.z, _112.w); + } else { + _316 = vec4(_158.x, _158.y, _158.z, _112.w); + } + float _332 = max(max(_316.x, max(_316.y, _316.z)), 9.9999997473787516355514526367188e-05); + float _338 = (_10._m3 != 0u) ? (((_332 > _10._m7) ? ((_332 * _10._m8) + _10._m9) : _332) / _332) : 1.0; + vec3 _339 = _316.xyz * _338; + float _342 = _339.z; + float _344 = floor(_342 * 14.99989986419677734375); + float _350 = (_344 * 0.0625) + (_339.x * 0.05859375); + float _352 = _339.y * 0.9375; + vec4 _356 = texture(sampler2D(_18, _7), vec2(0.001953125, 0.03125) + vec2(_350, _352)); + vec4 _362 = texture(sampler2D(_18, _7), vec2(0.001953125, 0.03125) + vec2(_350 + 0.0625, _352)); + vec3 _365 = mix(_356.xyz, _362.xyz, vec3((_342 * 15.0) - _344)); + vec4 _406; + if (_24._m0[0u]._m0._m0 > 0) { + float _379 = _365.z; + float _381 = floor(_379 * 14.99989986419677734375); + float _387 = (_381 * 0.0625) + (_365.x * 0.05859375); + float _389 = _365.y * 0.9375; + vec3 _404 = mix(_365.xyz, mix(texture(sampler2D(_17, _7), vec2(0.001953125, 0.03125) + vec2(_387, _389)).xyz, texture(sampler2D(_17, _7), vec2(0.001953125, 0.03125) + vec2(_387 + 0.0625, _389)).xyz, vec3((_379 * 15.0) - _381)), vec3(dot(texture(sampler2D(_19, _7), _4.xy).xyz, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)))); + _406 = vec4(_404.x, _404.y, _404.z, _316.w); + } else { + _406 = vec4(_365.x, _365.y, _365.z, _316.w); + } + vec3 _409 = _406.xyz / vec3(_338); + _5 = vec4(_409.x, _409.y, _409.z, _406.w); +} + diff --git a/src/games/rdr2vk/tonemap/0x6B9382CA.frag.glsl b/src/games/rdr2vk/tonemap/0x6B9382CA.frag.glsl new file mode 100644 index 0000000000..30b9e71242 --- /dev/null +++ b/src/games/rdr2vk/tonemap/0x6B9382CA.frag.glsl @@ -0,0 +1,1012 @@ +#version 450 + +#extension GL_GOOGLE_include_directive : require +#include "./tonemap.glsl" + +#extension GL_EXT_scalar_block_layout : require +#if defined(GL_EXT_control_flow_attributes) +#extension GL_EXT_control_flow_attributes : require +#define SPIRV_CROSS_FLATTEN [[flatten]] +#define SPIRV_CROSS_BRANCH [[dont_flatten]] +#define SPIRV_CROSS_UNROLL [[unroll]] +#define SPIRV_CROSS_LOOP [[dont_unroll]] +#else +#define SPIRV_CROSS_FLATTEN +#define SPIRV_CROSS_BRANCH +#define SPIRV_CROSS_UNROLL +#define SPIRV_CROSS_LOOP +#endif +#extension GL_EXT_samplerless_texture_functions : require + +struct _13 { + float _m0; +}; + +struct _15 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; +}; + +struct _14 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + _15 _m5; +}; + +struct _17 { + vec4 _m0; + vec4 _m1; + mat4 _m2; +}; + +struct _18 { + vec4 _m0; + vec4 _m1; +}; + +struct _19 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + vec4 _m5; + vec4 _m6; +}; + +struct _20 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; +}; + +struct _16 { + _17 _m0[2]; + _18 _m1; + _19 _m2; + _20 _m3; + vec4 _m4[3]; + vec2 _m5; + vec2 _m6; + vec2 _m7; + float _m8; + vec4 _m9[4]; + vec2 _m10; + vec2 _m11; + vec4 _m12; + vec4 _m13; + vec4 _m14; + vec4 _m15[4]; + float _m16; + int _m17; + float _m18; + float _m19; +}; + +struct _22 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; +}; + +struct _23 { + float _m0; + float _m1; + float _m2; +}; + +struct _24 { + float _m0; + float _m1; + float _m2; + float _m3; + vec3 _m4; + int _m5; +}; + +struct _21 { + _22 _m0; + _23 _m1; + _24 _m2; + vec2 _m3; + vec2 _m4; + vec4 _m5; + float _m6; + float _m7; + uint _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + float _m16; + float _m17; +}; + +struct _25 { + vec4 _m0[5]; +}; + +struct _26 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _27 { + float _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _28 { + int _m0; + int _m1; +}; + +struct _29 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + vec2 _m6; + float _m7; + float _m8; + float _m9; + float _m10; +}; + +struct _12 { + float _m0; + vec4 _m1; + float _m2; + vec4 _m3; + uvec4 _m4; + uvec4 _m5; + vec4 _m6; + int _m7; + int _m8; + int _m9; + vec4 _m10; + vec4 _m11[8]; + uint _m12; + vec3 _m13; + vec3 _m14; + vec2 _m15; + vec2 _m16; + mat3 _m17; + vec3 _m18; + vec3 _m19; + float _m20; + float _m21; + vec3 _m22; + vec3 _m23; + vec3 _m24; + vec3 _m25; + vec4 _m26[13]; + int _m27; + vec4 _m28; + vec4 _m29; + vec4 _m30; + vec3 _m31; + vec3 _m32; + vec3 _m33; + vec3 _m34; + vec4 _m35; + float _m36; + float _m37; + float _m38; + float _m39; + mat4 _m40; + _13 _m41; + _14 _m42; + _16 _m43; + _21 _m44; + _25 _m45; + _26 _m46; + _27 _m47[5]; + vec4 _m48; + _28 _m49; + vec4 _m50; + _29 _m51; +}; + +struct _33 { + float _m0; + vec3 _m1; + vec3 _m2; + vec3 _m3; + float _m4; + vec3 _m5; + vec3 _m6; + float _m7; + vec3 _m8; + vec3 _m9; + vec2 _m10; + vec3 _m11; + vec4 _m12; + vec4 _m13[4]; + vec4 _m14; + float _m15; + int _m16; +}; + +struct _34 { + float _m0; +}; + +struct _36 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + uint _m6; + uint _m7; + uvec4 _m8; +}; + +struct _35 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + _36 _m3; + vec2 _m4; +}; + +struct _38 { + float _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _39 { + int _m0; +}; + +struct _40 { + _39 _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _37 { + vec3 _m0; + vec3 _m1; + float _m2; + float _m3; + _38 _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + uint _m15; + _39 _m16; + _39 _m17; + _40 _m18; + vec4 _m19; + float _m20; + float _m21; + float _m22; + float _m23; + float _m24; + float _m25; + float _m26; + float _m27; +}; + +struct _42 { + vec3 _m0; + float _m1; +}; + +struct _43 { + vec4 _m0; + vec4 _m1; + vec4 _m2; +}; + +struct _44 { + vec2 _m0; + vec2 _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + vec2 _m8; + float _m9; +}; + +struct _45 { + float _m0; + _39 _m1; +}; + +struct _46 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _47 { + _39 _m0; + float _m1; + float _m2; +}; + +struct _49 { + int _m0; +}; + +struct _48 { + _39 _m0; + _49 _m1; + _49 _m2; +}; + +struct _50 { + _39 _m0; +}; + +struct _41 { + _42 _m0; + vec4 _m1; + mat4 _m2; + mat4 _m3; + _43 _m4; + _44 _m5; + _45 _m6; + _46 _m7; + _47 _m8; + _48 _m9; + _50 _m10; + float _m11; + float _m12; + float _m13; +}; + +struct _51 { + float _m0; + float _m1; + vec2 _m2; + vec2 _m3; + vec2 _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; +}; + +struct _52 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec3 _m3; + vec3 _m4; + vec3 _m5; + vec3 _m6; + vec3 _m7; +}; + +struct _53 { + vec4 _m0; + vec4 _m1; + vec3 _m2; +}; + +struct _54 { + vec4 _m0; + vec4 _m1; +}; + +struct _56 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; +}; + +struct _55 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + float _m16; + float _m17; + float _m18; + _56 _m19[2]; +}; + +struct _57 { + vec2 _m0; + vec2 _m1; + vec2 _m2; + float _m3; + float _m4; + float _m5; + vec2 _m6; +}; + +struct _58 { + vec4 _m0; + vec4 _m1; + vec2 _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _59 { + vec3 _m0; + float _m1; + float _m2; +}; + +struct _32 { + float _m0[32]; + float _m1[32]; + _33 _m2; + _33 _m3; + _34 _m4; + _35 _m5; + _37 _m6; + _41 _m7; + _51 _m8; + _52 _m9; + float _m10; + vec2 _m11; + _53 _m12; + _54 _m13; + float _m14; + float _m15; + vec4 _m16; + _55 _m17; + _57 _m18; + _58 _m19; + vec4 _m20; + float _m21; + uint _m22; + uvec2 _m23; + uvec2 _m24; + uint _m25; + float _m26; + float _m27; + float _m28; + float _m29; + _59 _m30; + int _m31; +}; + +struct _98 { + int _m0; + float _m1; + int _m2[2]; +}; + +struct _99 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; +}; + +struct _97 { + _98 _m0; + _99 _m1[11]; +}; + +float _296; + +layout(set = 0, binding = 98, scalar) readonly buffer _11_30 { + _12 _m0[]; +} +_30; + +layout(set = 0, binding = 99, scalar) readonly buffer _31_60 { + _32 _m0[]; +} +_60; + +layout(set = 0, binding = 20, std140) uniform _66_67 { + float _m0; + float _m1; + uint _m2; + uint _m3; + uint _m4; + uint _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + uint _m16; + uint _m17; + uint _m18; + uint _m19; +} +_67; + +layout(set = 1, binding = 16, std140) uniform _68_69 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + vec4 _m5; + vec4 _m6; + vec4 _m7; + vec4 _m8; + vec4 _m9; + vec4 _m10; + vec4 _m11; + vec4 _m12; + vec4 _m13; + vec4 _m14; + vec2 _m15; + vec4 _m16; + vec4 _m17; + vec4 _m18; + vec4 _m19; + vec4 _m20; + vec4 _m21; + vec4 _m22; + vec4 _m23; + vec4 _m24; + vec3 _m25; + vec3 _m26; + vec3 _m27; + vec4 _m28; + vec4 _m29; + vec4 _m30; + vec4 _m31; + vec4 _m32; + vec4 _m33; + vec4 _m34; + vec4 _m35; + vec4 _m36; + vec4 _m37; + vec3 _m38; + vec4 _m39; + vec4 _m40; + vec4 _m41; + vec4 _m42; + mat4 _m43; + vec4 _m44; + vec4 _m45; + vec4 _m46; + vec4 _m47; + vec4 _m48; + vec4 _m49; + vec4 _m50; + vec4 _m51; + vec4 _m52; + vec4 _m53; + vec4 _m54; + vec4 _m55; + vec4 _m56; + vec4 _m57; + float _m58; + vec4 _m59; + vec4 _m60; + float _m61; + vec4 _m62; + vec4 _m63; + vec2 _m64; + vec4 _m65; + vec4 _m66; + vec4 _m67; + vec4 _m68; + vec4 _m69; + vec4 _m70; + vec4 _m71; + vec4 _m72; + vec4 _m73; + vec4 _m74; + vec4 _m75; + vec4 _m76; + vec4 _m77; + vec3 _m78; + float _m79; + vec4 _m80; + vec4 _m81; + vec4 _m82; + vec4 _m83; + vec4 _m84; + vec4 _m85; +} +_69; + +layout(set = 0, binding = 214, std430) readonly buffer _96_100 { + _97 _m0[]; +} +_100; + +layout(set = 1, binding = 32) uniform sampler _8; +layout(set = 1, binding = 33) uniform sampler _9; +layout(set = 1, binding = 34) uniform sampler _10; +layout(set = 0, binding = 121) uniform texture2DArray _63; +layout(set = 0, binding = 140) uniform texture2D _64; +layout(set = 1, binding = 173) uniform texture2D _70; +layout(set = 1, binding = 174) uniform texture2D _71; +layout(set = 1, binding = 177) uniform texture2D _72; +layout(set = 1, binding = 185) uniform texture1D _74; +layout(set = 1, binding = 40) uniform sampler _75; +layout(set = 1, binding = 186) uniform texture2D _76; +layout(set = 1, binding = 189) uniform texture2D _77; +layout(set = 1, binding = 190) uniform texture2D _78; +layout(set = 1, binding = 191) uniform texture2D _79; +layout(set = 1, binding = 194) uniform texture2D _80; +layout(set = 1, binding = 196) uniform texture2D _81; +layout(set = 1, binding = 197) uniform texture2D _82; +layout(set = 1, binding = 198) uniform texture2D _83; +layout(set = 1, binding = 199) uniform texture2D _84; +layout(set = 1, binding = 200) uniform texture2D _85; +layout(set = 1, binding = 201) uniform texture2D _86; +layout(set = 1, binding = 202) uniform texture2D _87; +layout(set = 1, binding = 203) uniform texture2D _88; +layout(set = 1, binding = 204) uniform texture2D _89; +layout(set = 1, binding = 205) uniform texture2D _90; +layout(set = 1, binding = 206) uniform texture2D _91; +layout(set = 1, binding = 207) uniform texture2D _92; +layout(set = 1, binding = 209) uniform texture2D _93; +layout(set = 1, binding = 210) uniform texture2D _94; +layout(set = 1, binding = 212) uniform samplerBuffer _95; + +layout(location = 0) in vec4 _4; +layout(location = 1) in float _5; +layout(location = 0) out vec4 _6; + +void main() { + vec4 _306 = texture(sampler2D(_91, _8), _4.xy); + vec2 _307 = _306.xy; + float _315 = 1.0 + _69._m0.w; + float _318 = _69._m0.z / (_315 - textureLod(sampler2D(_71, _8), _307, 0.0).x); + vec4 _322 = texture(sampler2D(_76, _75), _307); + vec4 _347 = textureLod(sampler2D(_94, _8), _307 * _69._m80.xy, 0.0) * 1.0; + float _348 = _347.z; + vec4 _505; + SPIRV_CROSS_BRANCH + if ((_348 >= 1.0) && (_347.w < 2.0)) { + float _366 = min(length(textureLod(sampler2D(_93, _8), _307, 0.0).xy * _69._m20.x), _69._m20.z); + float _369 = min(_348, 2.0); + vec2 _370 = (_347.xy / vec2(_348)) * _369; + int _373 = int(min(2.0, 1.0 + _369)); + vec2 _377 = _370 * _69._m63.xy; + float _379 = float(_373) - 0.5; + float _380 = _379 / _369; + vec2 _382 = (-_370) * _69._m63.xy; + vec2 _385 = vec2(uvec2(gl_FragCoord.xy) & uvec2(1u)); + float _399 = ((((_385.x * 2.0) - 1.0) * ((_385.y * 2.0) - 1.0)) * _69._m20.w) * clamp((_369 - 2.0) * 0.5, 0.0, 1.0); + float _400 = 0.5 + _399; + float _401 = 0.5 - _399; + vec4 _403; + _403 = vec4(0.0); + for (int _406 = 0; _406 < _373;) { + float _410 = float(_406); + float _411 = _410 + _400; + vec2 _414 = _307 + (_377 * (_411 / _379)); + float _420 = min(length(textureLod(sampler2D(_93, _8), _414, 0.0).xy * _69._m20.x), _69._m20.z); + float _426 = _69._m0.z / (_315 - textureLod(sampler2D(_70, _8), _414, 0.0).x); + float _431 = _366 * _380; + float _448 = _410 + _401; + vec2 _451 = _307 + (_382 * (_448 / _379)); + float _457 = min(length(textureLod(sampler2D(_93, _8), _451, 0.0).xy * _69._m20.x), _69._m20.z); + float _462 = _69._m0.z / (_315 - textureLod(sampler2D(_70, _8), _451, 0.0).x); + float _479 = (1.0 - clamp((1.0 - _457) * 8.0, 0.0, 1.0)) * dot(clamp(vec2(0.5) + (vec2(1.0, -1.0) * (_462 - _318)), vec2(0.0), vec2(1.0)), clamp(vec2(_431, _457 * _380) - vec2(max(_448 - 1.0, 0.0)), vec2(0.0), vec2(1.0))); + bvec2 _485 = bvec2(_426 > _462, _457 > _420); + float _487 = all(_485) ? _479 : ((1.0 - clamp((1.0 - _420) * 8.0, 0.0, 1.0)) * dot(clamp(vec2(0.5) + (vec2(1.0, -1.0) * (_426 - _318)), vec2(0.0), vec2(1.0)), clamp(vec2(_431, _420 * _380) - vec2(max(_411 - 1.0, 0.0)), vec2(0.0), vec2(1.0)))); + float _489 = any(_485) ? _479 : _487; + _403 = (_403 + vec4(textureLod(sampler2D(_78, _9), _451, 0.0).xyz * _489, _489)) + vec4(textureLod(sampler2D(_78, _9), _414, 0.0).xyz * _487, _487); + _406++; + continue; + } + _505 = _403 / vec4(float(2 * _373)); + } else { + _505 = vec4(0.0); + } + vec4 _513 = textureLod(sampler2D(_79, _9), _307, 0.0); + vec3 _518 = _513.xyz + ((_505.xyz + (vec4(vec4(_322.xyz, 0.0).xyz * _30._m0[0u]._m1.w, _296).xyz * (1.0 - _505.w))) * (1.0 - _513.w)); + vec4 _521 = texelFetch(_95, int(0u)); + vec4 _522 = texelFetch(_95, int(1u)); + float _527 = dot(_518 * texelFetch(_64, ivec2(0), 0).x, vec3(0.300000011920928955078125, 0.589999973773956298828125, 0.10999999940395355224609375)); + bool _552; + vec3 _553; + if (floatBitsToInt(_69._m61) != 0) { + vec4 _538 = texture(sampler2D(_90, _75), _4.xy); + float _539 = _538.w; + bool _541 = (_539 + 9.9999997473787516355514526367188e-05) >= 1.0; + vec3 _550; + if (_541) { + _550 = _538.xyz; + } else { + _550 = _538.xyz + (_518 * (1.0 - _539)); + } + _552 = _541 ? true : false; + _553 = _550; + } else { + _552 = false; + _553 = _518; + } + vec3 _557 = min(_553 * texelFetch(_64, ivec2(0), 0).x, vec3(65504.0)); + bool _558 = !_552; + float _694; + vec3 _695; + if (_558) { + float _617; + if (floatBitsToInt(_69._m70.x) != 0) { + float _580 = clamp(dot(texture(sampler2D(_72, _10), _307).xyz * texelFetch(_64, ivec2(0), 0).x, vec3(0.300000011920928955078125, 0.589999973773956298828125, 0.10999999940395355224609375)), _69._m72.z, _69._m72.w); + float _603 = clamp(((((_69._m70.y * log(_580 + _69._m72.x)) + _69._m70.z) - 10.0) + (_69._m72.y * _580)) + _69._m65.w, _69._m66.x, _69._m66.y); + _617 = pow(2.0, mix(_5, clamp(_603 + ((abs(_603) * _69._m66.z) * float(int(sign(_603)))), _69._m66.x, _69._m66.y), clamp(_69._m70.x, 0.0, 1.0))); + } else { + _617 = _4.z; + } + vec4 _630 = texture(sampler2D(_77, _10), fract(((_4.xy * vec2(1.60000002384185791015625, 0.89999997615814208984375)) * _69._m16.w) + _69._m16.xy)); + vec3 _640 = max(_557 * vec3(0.5), _557 + vec3((_527 * (_630.w - 0.5)) * _69._m16.z)); + vec3 _693; + if (floatBitsToInt(_69._m51.w) != 0) { + vec2 _669 = ((_4.xy - _69._m50.xy) * mat2(vec2(_69._m52.x, _69._m52.y), vec2(_69._m52.z, _69._m52.w))) * _69._m50.zw; + float _673 = max((dot(_669, _669) - _69._m53.x) * _69._m53.w, 0.0); + bool _674 = _673 < 1.0; + _693 = mix(_640, (_640 * _69._m51.xyz) * _69._m51.w, vec3(_674 ? (_674 ? (1.0 - pow(2.0, (-10.0) * _673)) : 1.0) : (0.9980499744415283203125 + (((_673 - 1.0) > 0.0) ? pow(2.0, 10.0 * (_673 - 2.0)) : 0.0)))); + } else { + _693 = _640; + } + _694 = _617; + _695 = _693; + } else { + _694 = _4.z; + _695 = _557; + } + vec3 _732 = _695 * mix(mix(_69._m54.xyz, _69._m56.xyz, vec3(clamp(clamp(_4.y * _69._m57.y, 0.0, 1.0) + _69._m54.w, 0.0, 1.0))), mix(_69._m56.xyz, _69._m55.xyz, vec3(clamp(clamp(clamp(_4.y - _69._m56.w, 0.0, 1.0) * _69._m57.x, 0.0, 1.0) - _69._m55.w, 0.0, 1.0))), vec3(_4.y)); + bool _735 = _67._m3 != 0u; + vec3 _798; + if (_735) { + vec3 _775 = max(vec3(0.0), _732 * (_694 / _67._m6)); + vec3 _778 = _775 * _521.x; + _798 = (((((_775 * (_778 + vec3(_522.x))) + vec3(_522.y)) / ((_775 * (_778 + vec3(_521.y))) + vec3(_522.z))) - vec3(_522.w)) * ((_67._m4 != 0u) ? _67._m10 : _521.z)) * _67._m6; + } else { + vec3 _741 = max(vec3(0.0), _732 * _694); + vec3 _744 = _741 * _521.x; + _798 = clamp(((((_741 * (_744 + vec3(_522.x))) + vec3(_522.y)) / ((_741 * (_744 + vec3(_521.y))) + vec3(_522.z))) - vec3(_522.w)) * _521.z, vec3(0.0), vec3(1.0)); + } + vec3 _846; + if (_558) { + vec3 _845; + if (floatBitsToInt(_69._m47.w) != 0) { + vec2 _831 = ((_4.xy - _69._m46.xy) * mat2(vec2(_69._m48.x, _69._m48.y), vec2(_69._m48.z, _69._m48.w))) * _69._m46.zw; + _845 = mix(_798, _69._m47.xyz, vec3(_69._m47.w * texture(sampler1D(_74, _10), min(1.0, max((dot(_831, _831) - _69._m49.x) * _69._m49.w, 0.0))).w)); + } else { + _845 = _798; + } + _846 = _845; + } else { + _846 = _798; + } + bool _867 = _735 && (!(_67._m2 != 0u)); +#if 1 + vec3 _869 = EncodeLUTInput(_846, _67._m11, _67._m12, _67._m13, _67._m14, _867); +#else + vec3 _869 = mix(mix((pow(_846, vec3(_67._m12)) * _67._m13) - vec3(_67._m14), _846 * _67._m11, lessThan(_846, vec3(0.003130800090730190277099609375))), _846, bvec3(_867)); +#endif + + + vec3 _1025; + if (_558 && (floatBitsToInt(_69._m19.x) != 0)) { + vec2 _881 = _4.xy * _69._m17.w; + float _947 = (((((((fract(sin(dot(_881 + vec2(0.070000000298023223876953125 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875) + fract(sin(dot(_881 + vec2(0.10999999940395355224609375 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_881 + vec2(0.12999999523162841796875 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_881 + vec2(0.17000000178813934326171875 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_881 + vec2(0.189999997615814208984375 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_881 + vec2(0.23000000417232513427734375 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_881 + vec2(0.2899999916553497314453125 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_881 + vec2(0.310000002384185791015625 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) * 0.125; + float _949 = clamp(_947 + _69._m17.z, 0.0, 1.0); + vec3 _1024; + do { + if (!(floatBitsToInt(_69._m18.w) != 0)) { + _1024 = vec3(_949); + break; + } + float _972; + if (floatBitsToInt(_69._m18.y) != 0) { + float _967 = dot(_869, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)); + _972 = mix(_949, _949 * 0.5, (_967 * _967) * _967); + } else { + _972 = _949; + } + vec3 _1023; + if (floatBitsToInt(_69._m19.z) != 0) { + vec3 _1005 = vec3(_972); + vec3 _1007 = _1005 * 2.0; + _1023 = mix(_869, mix(((_869 * 2.0) * (vec3(1.0) - _1005)) + (sqrt(_869) * (_1007 - vec3(1.0))), (_1007 * _869) + ((_869 * _869) * (vec3(1.0) - _1007)), lessThan(_1005, vec3(0.5))), vec3(_69._m18.x)); + } else { + vec3 _1004; + if (floatBitsToInt(_69._m19.w) != 0) { + vec3 _992 = vec3(_972); + _1004 = mix(_869, mix(vec3(1.0) - (((vec3(1.0) - _992) * 2.0) * (vec3(1.0) - _869)), (_992 * 2.0) * _869, lessThan(_869, vec3(0.5))), vec3(_69._m18.x)); + } else { + _1004 = clamp(max(_869 * 0.02500000037252902984619140625, _869 + vec3((_972 - 0.5) * _69._m18.x)), vec3(0.0), vec3(1.0)); + } + _1023 = _1004; + } + _1024 = _1023; + break; + } while (false); + _1025 = _1024; + } else { + _1025 = _869; + } + vec3 _1027 = max(_1025 * mat3(vec3(0.514900028705596923828125, 0.324400007724761962890625, 0.1606999933719635009765625), vec3(0.265399992465972900390625, 0.67040002346038818359375, 0.06419999897480010986328125), vec3(0.02480000071227550506591796875, 0.1247999966144561767578125, 0.85039997100830078125)), vec3(0.00999999977648258209228515625, 0.0, 0.0)); + float _1028 = _1027.y; + vec3 _1053 = mix(_1025, clamp((_69._m81.xyz * (_1028 * ((1.33000004291534423828125 * (1.0 + ((_1028 + _1027.z) / _1027.x))) - 1.67999994754791259765625))) * _69._m81.w, vec3(0.0), vec3(1.0)), vec3(clamp(((0.039999999105930328369140625 / (0.039999999105930328369140625 + _527)) * _69._m82.x) + _69._m82.y, 0.0, 1.0))); + vec3 _1083; + if (floatBitsToInt(_69._m84.w) != 0) { + _1083 = mix(_1053, texture(sampler2D(_92, _10), ((((_4.xy - vec2(0.5)) * _69._m84.z) / mix(_69._m85.wx, _69._m85.zy, _4.yx)) - _69._m84.xy) + vec2(0.5)).xyz, vec3(_69._m84.w)); + } else { + _1083 = _1053; + } + vec3 _1394; + if (_558) { + float _1102 = max(max(_1083.x, max(_1083.y, _1083.z)), 9.9999997473787516355514526367188e-05); + float _1108 = (_867 && (!(_67._m5 != 0u))) ? 1.0 : (((_1102 > _67._m7) ? ((_1102 * _67._m8) + _67._m9) : _1102) / _1102); + vec3 _1109 = _1083 * _1108; + float _1112 = _1109.z; + float _1114 = floor(_1112 * 14.99989986419677734375); + float _1120 = (_1114 * 0.0625) + (_1109.x * 0.05859375); + float _1122 = _1109.y * 0.9375; + vec4 _1126 = texture(sampler2D(_87, _10), vec2(0.001953125, 0.03125) + vec2(_1120, _1122)); + vec4 _1132 = texture(sampler2D(_87, _10), vec2(0.001953125, 0.03125) + vec2(_1120 + 0.0625, _1122)); + vec3 _1135 = mix(_1126.xyz, _1132.xyz, vec3((_1112 * 15.0) - _1114)); + vec3 _1391; + if (_100._m0[0u]._m0._m0 > 0) { + vec4 _1143 = texture(sampler2D(_80, _8), _307); + vec4 _1146 = _1143 * _100._m0[0u]._m0._m1; + vec4 _1149 = texture(sampler2D(_89, _10), _307); + float _1151 = dot(_1149.xyz, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)); + float _1153 = clamp(_1146.x, 0.0, 1.0); + float _1155 = _1151 * _1153; + vec3 _1185; + if (_1155 != 0.0) { + float _1159 = _1135.z; + float _1161 = floor(_1159 * 14.99989986419677734375); + float _1167 = (_1161 * 0.0625) + (_1135.x * 0.05859375); + float _1169 = _1135.y * 0.9375; + _1185 = mix(_1135, mix(texture(sampler2D(_83, _10), vec2(0.001953125, 0.03125) + vec2(_1167, _1169)).xyz, texture(sampler2D(_83, _10), vec2(0.001953125, 0.03125) + vec2(_1167 + 0.0625, _1169)).xyz, vec3((_1159 * 15.0) - _1161)), vec3(_1155)); + } else { + _1185 = _1135; + } + float _1187 = clamp(_1146.y, 0.0, 1.0); + float _1189 = _1151 * _1187; + vec3 _1219; + if (_1189 != 0.0) { + float _1195 = floor(_1185.z * 14.99989986419677734375); + float _1201 = (_1195 * 0.0625) + (_1185.x * 0.05859375); + float _1203 = _1185.y * 0.9375; + _1219 = mix(_1185, mix(texture(sampler2D(_84, _10), vec2(0.001953125, 0.03125) + vec2(_1201, _1203)).xyz, texture(sampler2D(_84, _10), vec2(0.001953125, 0.03125) + vec2(_1201 + 0.0625, _1203)).xyz, vec3((_1185.z * 15.0) - _1195)), vec3(_1189)); + } else { + _1219 = _1185; + } + float _1221 = clamp(_1146.z, 0.0, 1.0); + float _1223 = _1151 * _1221; + vec3 _1253; + if (_1223 != 0.0) { + float _1229 = floor(_1219.z * 14.99989986419677734375); + float _1235 = (_1229 * 0.0625) + (_1219.x * 0.05859375); + float _1237 = _1219.y * 0.9375; + _1253 = mix(_1219, mix(texture(sampler2D(_85, _10), vec2(0.001953125, 0.03125) + vec2(_1235, _1237)).xyz, texture(sampler2D(_85, _10), vec2(0.001953125, 0.03125) + vec2(_1235 + 0.0625, _1237)).xyz, vec3((_1219.z * 15.0) - _1229)), vec3(_1223)); + } else { + _1253 = _1219; + } + float _1255 = clamp(_1146.w, 0.0, 1.0); + float _1257 = _1151 * _1255; + vec3 _1287; + if (_1257 != 0.0) { + float _1263 = floor(_1253.z * 14.99989986419677734375); + float _1269 = (_1263 * 0.0625) + (_1253.x * 0.05859375); + float _1271 = _1253.y * 0.9375; + _1287 = mix(_1253, mix(texture(sampler2D(_86, _10), vec2(0.001953125, 0.03125) + vec2(_1269, _1271)).xyz, texture(sampler2D(_86, _10), vec2(0.001953125, 0.03125) + vec2(_1269 + 0.0625, _1271)).xyz, vec3((_1253.z * 15.0) - _1263)), vec3(_1257)); + } else { + _1287 = _1253; + } + float _1323 = floor(_1287.z * 14.99989986419677734375); + float _1329 = (_1323 * 0.0625) + (_1287.x * 0.05859375); + float _1331 = _1287.y * 0.9375; + vec3 _1346 = mix(_1287, mix(texture(sampler2D(_81, _10), vec2(0.001953125, 0.03125) + vec2(_1329, _1331)).xyz, texture(sampler2D(_81, _10), vec2(0.001953125, 0.03125) + vec2(_1329 + 0.0625, _1331)).xyz, vec3((_1287.z * 15.0) - _1323)), vec3(clamp(((_318 < _100._m0[0u]._m1[0]._m2) ? clamp((_318 - _100._m0[0u]._m1[0]._m0) * _100._m0[0u]._m1[0]._m1, 0.0, 1.0) : (1.0 - clamp((_318 - _100._m0[0u]._m1[0]._m2) * _100._m0[0u]._m1[0]._m3, 0.0, 1.0))) + _100._m0[0u]._m1[0]._m4, 0.0, 1.0))); + float _1358 = _1346.z; + float _1360 = floor(_1358 * 14.99989986419677734375); + float _1366 = (_1360 * 0.0625) + (_1346.x * 0.05859375); + float _1368 = _1346.y * 0.9375; + _1391 = mix(_1346, mix(_1346, mix(texture(sampler2D(_82, _10), vec2(0.001953125, 0.03125) + vec2(_1366, _1368)).xyz, texture(sampler2D(_82, _10), vec2(0.001953125, 0.03125) + vec2(_1366 + 0.0625, _1368)).xyz, vec3((_1358 * 15.0) - _1360)), vec3(clamp(((_318 < _100._m0[0u]._m1[1]._m2) ? clamp((_318 - _100._m0[0u]._m1[1]._m0) * _100._m0[0u]._m1[1]._m1, 0.0, 1.0) : (1.0 - clamp((_318 - _100._m0[0u]._m1[1]._m2) * _100._m0[0u]._m1[1]._m3, 0.0, 1.0))) + _100._m0[0u]._m1[1]._m4, 0.0, 1.0))), vec3(dot(texture(sampler2D(_88, _10), _307).xyz, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)) * (1.0 - clamp(((_1153 + _1187) + _1221) + _1255, 0.0, 1.0)))); + } else { + _1391 = _1135; + } + _1394 = _1391 / vec3(_1108); + } else { + _1394 = _1083; + } + +#if 1 + _1394 = DecodeLUTInput(_1394); +#endif + + vec4 _1399 = vec4(_1394, dot(_1394, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625))); + vec3 _1400 = _1399.xyz; + ivec4 _1442 = ivec4(uvec4(uvec2(ivec2(uvec2(gl_FragCoord.xy))) & uvec2(63u), uint(int(_60._m0[0u]._m22) & 31), 0u)); + vec3 _1450 = (vec3(texelFetch(_63, _1442.xyz, _1442.w).x) * 2.0) - vec3(1.0); + vec3 _1461; + if (_735) { + _1461 = vec3(ivec3(sign(_1450))) * (vec3(1.0) - sqrt(vec3(1.0) - abs(_1450))); + } else { + _1461 = _1450; + } + vec3 _1463 = _1400 + (_1461 * mix(_69._m39.xyz, _69._m40.xyz, pow(clamp((mix(vec3(max(_1394.x, max(_1394.y, _1394.z))), _1400, bvec3(floatBitsToInt(_69._m41.w) != 0)) - _69._m42.xyz) * _69._m41.xyz, vec3(0.0), vec3(1.0)), vec3(_69._m42.w)))); + vec4 _1464 = vec4(_1463.x, _1463.y, _1463.z, _1399.w); + vec4 _1469; + if (!_735) { + _1469 = clamp(_1464, vec4(0.0), vec4(1.0)); + } else { + _1469 = _1464; + } + _6 = _1469; +} + diff --git a/src/games/rdr2vk/tonemap/0x809F5852.frag.glsl b/src/games/rdr2vk/tonemap/0x809F5852.frag.glsl new file mode 100644 index 0000000000..186cf0962d --- /dev/null +++ b/src/games/rdr2vk/tonemap/0x809F5852.frag.glsl @@ -0,0 +1,852 @@ +#version 450 + +#extension GL_GOOGLE_include_directive : require +#include "./tonemap.glsl" + +#extension GL_EXT_scalar_block_layout : require +#extension GL_EXT_samplerless_texture_functions : require + +struct _12 { + float _m0; +}; + +struct _14 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; +}; + +struct _13 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + _14 _m5; +}; + +struct _16 { + vec4 _m0; + vec4 _m1; + mat4 _m2; +}; + +struct _17 { + vec4 _m0; + vec4 _m1; +}; + +struct _18 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + vec4 _m5; + vec4 _m6; +}; + +struct _19 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; +}; + +struct _15 { + _16 _m0[2]; + _17 _m1; + _18 _m2; + _19 _m3; + vec4 _m4[3]; + vec2 _m5; + vec2 _m6; + vec2 _m7; + float _m8; + vec4 _m9[4]; + vec2 _m10; + vec2 _m11; + vec4 _m12; + vec4 _m13; + vec4 _m14; + vec4 _m15[4]; + float _m16; + int _m17; + float _m18; + float _m19; +}; + +struct _21 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; +}; + +struct _22 { + float _m0; + float _m1; + float _m2; +}; + +struct _23 { + float _m0; + float _m1; + float _m2; + float _m3; + vec3 _m4; + int _m5; +}; + +struct _20 { + _21 _m0; + _22 _m1; + _23 _m2; + vec2 _m3; + vec2 _m4; + vec4 _m5; + float _m6; + float _m7; + uint _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + float _m16; + float _m17; +}; + +struct _24 { + vec4 _m0[5]; +}; + +struct _25 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _26 { + float _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _27 { + int _m0; + int _m1; +}; + +struct _28 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + vec2 _m6; + float _m7; + float _m8; + float _m9; + float _m10; +}; + +struct _11 { + float _m0; + vec4 _m1; + float _m2; + vec4 _m3; + uvec4 _m4; + uvec4 _m5; + vec4 _m6; + int _m7; + int _m8; + int _m9; + vec4 _m10; + vec4 _m11[8]; + uint _m12; + vec3 _m13; + vec3 _m14; + vec2 _m15; + vec2 _m16; + mat3 _m17; + vec3 _m18; + vec3 _m19; + float _m20; + float _m21; + vec3 _m22; + vec3 _m23; + vec3 _m24; + vec3 _m25; + vec4 _m26[13]; + int _m27; + vec4 _m28; + vec4 _m29; + vec4 _m30; + vec3 _m31; + vec3 _m32; + vec3 _m33; + vec3 _m34; + vec4 _m35; + float _m36; + float _m37; + float _m38; + float _m39; + mat4 _m40; + _12 _m41; + _13 _m42; + _15 _m43; + _20 _m44; + _24 _m45; + _25 _m46; + _26 _m47[5]; + vec4 _m48; + _27 _m49; + vec4 _m50; + _28 _m51; +}; + +struct _32 { + float _m0; + vec3 _m1; + vec3 _m2; + vec3 _m3; + float _m4; + vec3 _m5; + vec3 _m6; + float _m7; + vec3 _m8; + vec3 _m9; + vec2 _m10; + vec3 _m11; + vec4 _m12; + vec4 _m13[4]; + vec4 _m14; + float _m15; + int _m16; +}; + +struct _33 { + float _m0; +}; + +struct _35 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + uint _m6; + uint _m7; + uvec4 _m8; +}; + +struct _34 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + _35 _m3; + vec2 _m4; +}; + +struct _37 { + float _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _38 { + int _m0; +}; + +struct _39 { + _38 _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _36 { + vec3 _m0; + vec3 _m1; + float _m2; + float _m3; + _37 _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + uint _m15; + _38 _m16; + _38 _m17; + _39 _m18; + vec4 _m19; + float _m20; + float _m21; + float _m22; + float _m23; + float _m24; + float _m25; + float _m26; + float _m27; +}; + +struct _41 { + vec3 _m0; + float _m1; +}; + +struct _42 { + vec4 _m0; + vec4 _m1; + vec4 _m2; +}; + +struct _43 { + vec2 _m0; + vec2 _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + vec2 _m8; + float _m9; +}; + +struct _44 { + float _m0; + _38 _m1; +}; + +struct _45 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _46 { + _38 _m0; + float _m1; + float _m2; +}; + +struct _48 { + int _m0; +}; + +struct _47 { + _38 _m0; + _48 _m1; + _48 _m2; +}; + +struct _49 { + _38 _m0; +}; + +struct _40 { + _41 _m0; + vec4 _m1; + mat4 _m2; + mat4 _m3; + _42 _m4; + _43 _m5; + _44 _m6; + _45 _m7; + _46 _m8; + _47 _m9; + _49 _m10; + float _m11; + float _m12; + float _m13; +}; + +struct _50 { + float _m0; + float _m1; + vec2 _m2; + vec2 _m3; + vec2 _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; +}; + +struct _51 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec3 _m3; + vec3 _m4; + vec3 _m5; + vec3 _m6; + vec3 _m7; +}; + +struct _52 { + vec4 _m0; + vec4 _m1; + vec3 _m2; +}; + +struct _53 { + vec4 _m0; + vec4 _m1; +}; + +struct _55 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; +}; + +struct _54 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + float _m16; + float _m17; + float _m18; + _55 _m19[2]; +}; + +struct _56 { + vec2 _m0; + vec2 _m1; + vec2 _m2; + float _m3; + float _m4; + float _m5; + vec2 _m6; +}; + +struct _57 { + vec4 _m0; + vec4 _m1; + vec2 _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _58 { + vec3 _m0; + float _m1; + float _m2; +}; + +struct _31 { + float _m0[32]; + float _m1[32]; + _32 _m2; + _32 _m3; + _33 _m4; + _34 _m5; + _36 _m6; + _40 _m7; + _50 _m8; + _51 _m9; + float _m10; + vec2 _m11; + _52 _m12; + _53 _m13; + float _m14; + float _m15; + vec4 _m16; + _54 _m17; + _56 _m18; + _57 _m19; + vec4 _m20; + float _m21; + uint _m22; + uvec2 _m23; + uvec2 _m24; + uint _m25; + float _m26; + float _m27; + float _m28; + float _m29; + _58 _m30; + int _m31; +}; + +struct _85 { + int _m0; + float _m1; + int _m2[2]; +}; + +struct _86 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; +}; + +struct _84 { + _85 _m0; + _86 _m1[11]; +}; + +float _252; + +layout(set = 0, binding = 98, scalar) readonly buffer _10_29 { + _11 _m0[]; +} +_29; + +layout(set = 0, binding = 99, scalar) readonly buffer _30_59 { + _31 _m0[]; +} +_59; + +layout(set = 0, binding = 20, std140) uniform _65_66 { + float _m0; + float _m1; + uint _m2; + uint _m3; + uint _m4; + uint _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + uint _m16; + uint _m17; + uint _m18; + uint _m19; +} +_66; + +layout(set = 1, binding = 16, std140) uniform _67_68 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + vec4 _m5; + vec4 _m6; + vec4 _m7; + vec4 _m8; + vec4 _m9; + vec4 _m10; + vec4 _m11; + vec4 _m12; + vec4 _m13; + vec4 _m14; + vec2 _m15; + vec4 _m16; + vec4 _m17; + vec4 _m18; + vec4 _m19; + vec4 _m20; + vec4 _m21; + vec4 _m22; + vec4 _m23; + vec4 _m24; + vec3 _m25; + vec3 _m26; + vec3 _m27; + vec4 _m28; + vec4 _m29; + vec4 _m30; + vec4 _m31; + vec4 _m32; + vec4 _m33; + vec4 _m34; + vec4 _m35; + vec4 _m36; + vec4 _m37; + vec3 _m38; + vec4 _m39; + vec4 _m40; + vec4 _m41; + vec4 _m42; + mat4 _m43; + vec4 _m44; + vec4 _m45; + vec4 _m46; + vec4 _m47; + vec4 _m48; + vec4 _m49; + vec4 _m50; + vec4 _m51; + vec4 _m52; + vec4 _m53; + vec4 _m54; + vec4 _m55; + vec4 _m56; + vec4 _m57; + float _m58; + vec4 _m59; + vec4 _m60; + float _m61; + vec4 _m62; + vec4 _m63; + vec2 _m64; + vec4 _m65; + vec4 _m66; + vec4 _m67; + vec4 _m68; + vec4 _m69; + vec4 _m70; + vec4 _m71; + vec4 _m72; + vec4 _m73; + vec4 _m74; + vec4 _m75; + vec4 _m76; + vec4 _m77; + vec3 _m78; + float _m79; + vec4 _m80; + vec4 _m81; + vec4 _m82; + vec4 _m83; + vec4 _m84; + vec4 _m85; +} +_68; + +layout(set = 0, binding = 214, std430) readonly buffer _83_87 { + _84 _m0[]; +} +_87; + +layout(set = 1, binding = 32) uniform sampler _8; +layout(set = 1, binding = 34) uniform sampler _9; +layout(set = 0, binding = 121) uniform texture2DArray _62; +layout(set = 0, binding = 140) uniform texture2D _63; +layout(set = 1, binding = 174) uniform texture2D _69; +layout(set = 1, binding = 177) uniform texture2D _70; +layout(set = 1, binding = 185) uniform texture1D _72; +layout(set = 1, binding = 40) uniform sampler _73; +layout(set = 1, binding = 186) uniform texture2D _74; +layout(set = 1, binding = 196) uniform texture2D _75; +layout(set = 1, binding = 197) uniform texture2D _76; +layout(set = 1, binding = 202) uniform texture2D _77; +layout(set = 1, binding = 203) uniform texture2D _78; +layout(set = 1, binding = 205) uniform texture2D _79; +layout(set = 1, binding = 206) uniform texture2D _80; +layout(set = 1, binding = 207) uniform texture2D _81; +layout(set = 1, binding = 212) uniform samplerBuffer _82; + +layout(location = 0) in vec4 _4; +layout(location = 1) in float _5; +layout(location = 0) out vec4 _6; + +void main() { + vec4 _262 = texture(sampler2D(_80, _8), _4.xy); + vec2 _263 = _262.xy; + float _274 = _68._m0.z / ((1.0 + _68._m0.w) - textureLod(sampler2D(_69, _8), _263, 0.0).x); + vec4 _278 = texture(sampler2D(_74, _73), _263); + vec3 _292 = vec4(vec4(_278.xyz, 0.0).xyz * _29._m0[0u]._m1.w, _252).xyz; + vec4 _295 = texelFetch(_82, int(0u)); + vec4 _296 = texelFetch(_82, int(1u)); + bool _326; + vec3 _327; + if (floatBitsToInt(_68._m61) != 0) { + vec4 _312 = texture(sampler2D(_79, _73), _4.xy); + float _313 = _312.w; + bool _315 = (_313 + 9.9999997473787516355514526367188e-05) >= 1.0; + vec3 _324; + if (_315) { + _324 = _312.xyz; + } else { + _324 = _312.xyz + (_292 * (1.0 - _313)); + } + _326 = _315 ? true : false; + _327 = _324; + } else { + _326 = false; + _327 = _292; + } + vec3 _331 = min(_327 * texelFetch(_63, ivec2(0), 0).x, vec3(65504.0)); + bool _332 = !_326; + float _445; + vec3 _446; + if (_332) { + float _391; + if (floatBitsToInt(_68._m70.x) != 0) { + float _354 = clamp(dot(texture(sampler2D(_70, _9), _263).xyz * texelFetch(_63, ivec2(0), 0).x, vec3(0.300000011920928955078125, 0.589999973773956298828125, 0.10999999940395355224609375)), _68._m72.z, _68._m72.w); + float _377 = clamp(((((_68._m70.y * log(_354 + _68._m72.x)) + _68._m70.z) - 10.0) + (_68._m72.y * _354)) + _68._m65.w, _68._m66.x, _68._m66.y); + _391 = pow(2.0, mix(_5, clamp(_377 + ((abs(_377) * _68._m66.z) * float(int(sign(_377)))), _68._m66.x, _68._m66.y), clamp(_68._m70.x, 0.0, 1.0))); + } else { + _391 = _4.z; + } + vec3 _444; + if (floatBitsToInt(_68._m51.w) != 0) { + vec2 _420 = ((_4.xy - _68._m50.xy) * mat2(vec2(_68._m52.x, _68._m52.y), vec2(_68._m52.z, _68._m52.w))) * _68._m50.zw; + float _424 = max((dot(_420, _420) - _68._m53.x) * _68._m53.w, 0.0); + bool _425 = _424 < 1.0; + _444 = mix(_331, (_331 * _68._m51.xyz) * _68._m51.w, vec3(_425 ? (_425 ? (1.0 - pow(2.0, (-10.0) * _424)) : 1.0) : (0.9980499744415283203125 + (((_424 - 1.0) > 0.0) ? pow(2.0, 10.0 * (_424 - 2.0)) : 0.0)))); + } else { + _444 = _331; + } + _445 = _391; + _446 = _444; + } else { + _445 = _4.z; + _446 = _331; + } + vec3 _483 = _446 * mix(mix(_68._m54.xyz, _68._m56.xyz, vec3(clamp(clamp(_4.y * _68._m57.y, 0.0, 1.0) + _68._m54.w, 0.0, 1.0))), mix(_68._m56.xyz, _68._m55.xyz, vec3(clamp(clamp(clamp(_4.y - _68._m56.w, 0.0, 1.0) * _68._m57.x, 0.0, 1.0) - _68._m55.w, 0.0, 1.0))), vec3(_4.y)); + bool _486 = _66._m3 != 0u; + vec3 _549; + if (_486) { + vec3 _526 = max(vec3(0.0), _483 * (_445 / _66._m6)); + vec3 _529 = _526 * _295.x; + _549 = (((((_526 * (_529 + vec3(_296.x))) + vec3(_296.y)) / ((_526 * (_529 + vec3(_295.y))) + vec3(_296.z))) - vec3(_296.w)) * ((_66._m4 != 0u) ? _66._m10 : _295.z)) * _66._m6; + } else { + vec3 _492 = max(vec3(0.0), _483 * _445); + vec3 _495 = _492 * _295.x; + _549 = clamp(((((_492 * (_495 + vec3(_296.x))) + vec3(_296.y)) / ((_492 * (_495 + vec3(_295.y))) + vec3(_296.z))) - vec3(_296.w)) * _295.z, vec3(0.0), vec3(1.0)); + } + vec3 _597; + if (_332) { + vec3 _596; + if (floatBitsToInt(_68._m47.w) != 0) { + vec2 _582 = ((_4.xy - _68._m46.xy) * mat2(vec2(_68._m48.x, _68._m48.y), vec2(_68._m48.z, _68._m48.w))) * _68._m46.zw; + _596 = mix(_549, _68._m47.xyz, vec3(_68._m47.w * texture(sampler1D(_72, _9), min(1.0, max((dot(_582, _582) - _68._m49.x) * _68._m49.w, 0.0))).w)); + } else { + _596 = _549; + } + _597 = _596; + } else { + _597 = _549; + } + bool _618 = _486 && (!(_66._m2 != 0u)); + +#if 1 + vec3 _620 = EncodeLUTInput(_597, _66._m11, _66._m12, _66._m13, _66._m14, _618); +#else + vec3 _620 = mix(mix((pow(_597, vec3(_66._m12)) * _66._m13) - vec3(_66._m14), _597 * _66._m11, lessThan(_597, vec3(0.003130800090730190277099609375))), _597, bvec3(_618)); +#endif + + vec3 _622 = max(_620 * mat3(vec3(0.514900028705596923828125, 0.324400007724761962890625, 0.1606999933719635009765625), vec3(0.265399992465972900390625, 0.67040002346038818359375, 0.06419999897480010986328125), vec3(0.02480000071227550506591796875, 0.1247999966144561767578125, 0.85039997100830078125)), vec3(0.00999999977648258209228515625, 0.0, 0.0)); + float _623 = _622.y; + vec3 _648 = mix(_620, clamp((_68._m81.xyz * (_623 * ((1.33000004291534423828125 * (1.0 + ((_623 + _622.z) / _622.x))) - 1.67999994754791259765625))) * _68._m81.w, vec3(0.0), vec3(1.0)), vec3(clamp(((0.039999999105930328369140625 / (0.039999999105930328369140625 + dot(_292 * texelFetch(_63, ivec2(0), 0).x, vec3(0.300000011920928955078125, 0.589999973773956298828125, 0.10999999940395355224609375)))) * _68._m82.x) + _68._m82.y, 0.0, 1.0))); + vec3 _678; + if (floatBitsToInt(_68._m84.w) != 0) { + _678 = mix(_648, texture(sampler2D(_81, _9), ((((_4.xy - vec2(0.5)) * _68._m84.z) / mix(_68._m85.wx, _68._m85.zy, _4.yx)) - _68._m84.xy) + vec2(0.5)).xyz, vec3(_68._m84.w)); + } else { + _678 = _648; + } + vec3 _836; + if (_332) { + float _697 = max(max(_678.x, max(_678.y, _678.z)), 9.9999997473787516355514526367188e-05); + float _703 = (_618 && (!(_66._m5 != 0u))) ? 1.0 : (((_697 > _66._m7) ? ((_697 * _66._m8) + _66._m9) : _697) / _697); + vec3 _704 = _678 * _703; + float _707 = _704.z; + float _709 = floor(_707 * 14.99989986419677734375); + float _715 = (_709 * 0.0625) + (_704.x * 0.05859375); + float _717 = _704.y * 0.9375; + vec4 _721 = texture(sampler2D(_77, _9), vec2(0.001953125, 0.03125) + vec2(_715, _717)); + vec4 _727 = texture(sampler2D(_77, _9), vec2(0.001953125, 0.03125) + vec2(_715 + 0.0625, _717)); + vec3 _730 = mix(_721.xyz, _727.xyz, vec3((_707 * 15.0) - _709)); + vec3 _833; + if (_87._m0[0u]._m0._m0 > 0) { + float _764 = _730.z; + float _766 = floor(_764 * 14.99989986419677734375); + float _772 = (_766 * 0.0625) + (_730.x * 0.05859375); + float _774 = _730.y * 0.9375; + vec3 _789 = mix(_730, mix(texture(sampler2D(_75, _9), vec2(0.001953125, 0.03125) + vec2(_772, _774)).xyz, texture(sampler2D(_75, _9), vec2(0.001953125, 0.03125) + vec2(_772 + 0.0625, _774)).xyz, vec3((_764 * 15.0) - _766)), vec3(clamp(((_274 < _87._m0[0u]._m1[0]._m2) ? clamp((_274 - _87._m0[0u]._m1[0]._m0) * _87._m0[0u]._m1[0]._m1, 0.0, 1.0) : (1.0 - clamp((_274 - _87._m0[0u]._m1[0]._m2) * _87._m0[0u]._m1[0]._m3, 0.0, 1.0))) + _87._m0[0u]._m1[0]._m4, 0.0, 1.0))); + float _801 = _789.z; + float _803 = floor(_801 * 14.99989986419677734375); + float _809 = (_803 * 0.0625) + (_789.x * 0.05859375); + float _811 = _789.y * 0.9375; + _833 = mix(_789, mix(_789, mix(texture(sampler2D(_76, _9), vec2(0.001953125, 0.03125) + vec2(_809, _811)).xyz, texture(sampler2D(_76, _9), vec2(0.001953125, 0.03125) + vec2(_809 + 0.0625, _811)).xyz, vec3((_801 * 15.0) - _803)), vec3(clamp(((_274 < _87._m0[0u]._m1[1]._m2) ? clamp((_274 - _87._m0[0u]._m1[1]._m0) * _87._m0[0u]._m1[1]._m1, 0.0, 1.0) : (1.0 - clamp((_274 - _87._m0[0u]._m1[1]._m2) * _87._m0[0u]._m1[1]._m3, 0.0, 1.0))) + _87._m0[0u]._m1[1]._m4, 0.0, 1.0))), vec3(dot(texture(sampler2D(_78, _9), _263).xyz, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)))); + } else { + _833 = _730; + } + _836 = _833 / vec3(_703); + } else { + _836 = _678; + } + +#if 1 + _836 = DecodeLUTInput(_836); +#endif + + vec4 _841 = vec4(_836, dot(_836, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625))); + vec3 _842 = _841.xyz; + ivec4 _885 = ivec4(uvec4(uvec2(ivec2(uvec2(gl_FragCoord.xy))) & uvec2(63u), uint(int(_59._m0[0u]._m22) & 31), 0u)); + vec3 _893 = (vec3(texelFetch(_62, _885.xyz, _885.w).x) * 2.0) - vec3(1.0); + vec3 _904; + if (_486) { + _904 = vec3(ivec3(sign(_893))) * (vec3(1.0) - sqrt(vec3(1.0) - abs(_893))); + } else { + _904 = _893; + } + vec3 _906 = _842 + (_904 * mix(_68._m39.xyz, _68._m40.xyz, pow(clamp((mix(vec3(max(_836.x, max(_836.y, _836.z))), _842, bvec3(floatBitsToInt(_68._m41.w) != 0)) - _68._m42.xyz) * _68._m41.xyz, vec3(0.0), vec3(1.0)), vec3(_68._m42.w)))); + vec4 _907 = vec4(_906.x, _906.y, _906.z, _841.w); + vec4 _912; + if (!_486) { + _912 = clamp(_907, vec4(0.0), vec4(1.0)); + } else { + _912 = _907; + } + _6 = _912; +} + diff --git a/src/games/rdr2vk/tonemap/0x9B304112.frag.glsl b/src/games/rdr2vk/tonemap/0x9B304112.frag.glsl new file mode 100644 index 0000000000..cc0800ddd9 --- /dev/null +++ b/src/games/rdr2vk/tonemap/0x9B304112.frag.glsl @@ -0,0 +1,66 @@ +#version 450 + +#extension GL_GOOGLE_include_directive : require +#include "./tonemap.glsl" + +layout(set = 1, binding = 31, std140) uniform _6_7 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec2 _m3; + vec2 _m4; + vec4 _m5; + vec4 _m6; + float _m7; + float _m8; + float _m9; +} +_7; + +layout(set = 1, binding = 34) uniform sampler _9; +layout(set = 1, binding = 128) uniform texture2D _11; +layout(set = 1, binding = 129) uniform texture1D _13; +layout(set = 1, binding = 130) uniform texture2D _14; +layout(set = 1, binding = 131) uniform texture2D _15; +layout(set = 1, binding = 132) uniform texture2D _16; +layout(set = 1, binding = 133) uniform texture2D _17; + +layout(location = 0) in vec2 _4; +layout(location = 0) out vec4 _5; + +void main() { + vec2 _88 = ((_4 - _7._m3) * mat2(vec2(_7._m5.x, _7._m5.y), vec2(_7._m5.z, _7._m5.w))) * _7._m4; + vec3 _104 = mix(texture(sampler2D(_11, _9), _4).xyz, _7._m6.xyz, vec3(texture(sampler1D(_13, _9), min(1.0, max((dot(_88, _88) - _7._m7) * _7._m8, 0.0))).w * _7._m6.w)); + float _106 = _104.z; + float _108 = floor(_106 * 14.99989986419677734375); + float _114 = (_108 * 0.0625) + (_104.x * 0.05859375); + float _116 = _104.y * 0.9375; + vec3 _129 = mix(texture(sampler2D(_16, _9), vec2(0.001953125, 0.03125) + vec2(_114, _116)).xyz, texture(sampler2D(_16, _9), vec2(0.001953125, 0.03125) + vec2(_114 + 0.0625, _116)).xyz, vec3((_106 * 15.0) - _108)); + vec4 _132 = texture(sampler2D(_17, _9), _4); + float _133 = _132.x; + float _135 = _129.z; + float _137 = floor(_135 * 14.99989986419677734375); + float _143 = (_137 * 0.0625) + (_129.x * 0.05859375); + float _145 = _129.y * 0.9375; + vec2 _147 = vec2(0.001953125, 0.03125) + vec2(_143, _145); + vec4 _149 = texture(sampler2D(_14, _9), _147); + vec2 _153 = vec2(0.001953125, 0.03125) + vec2(_143 + 0.0625, _145); + vec4 _155 = texture(sampler2D(_14, _9), _153); + vec3 _157 = vec3((_135 * 15.0) - _137); + vec3 _158 = mix(_149.xyz, _155.xyz, _157); + vec4 _161 = texture(sampler2D(_15, _9), _147); + vec4 _164 = texture(sampler2D(_15, _9), _153); + vec3 _166 = mix(_161.xyz, _164.xyz, _157); + vec3 _179; + vec3 _180; + if (floatBitsToInt(_7._m9) != 0) { + float _173 = _7._m9 * _133; + _179 = _166 * ((1.0 + _173) - _7._m9); + _180 = _158 * (1.0 - _173); + } else { + _179 = _166; + _180 = _158; + } + _5 = vec4(mix(_180, _179, vec3(_133)), 1.0); +} + diff --git a/src/games/rdr2vk/tonemap/0x9F191B0B.frag.glsl b/src/games/rdr2vk/tonemap/0x9F191B0B.frag.glsl new file mode 100644 index 0000000000..a57116bc30 --- /dev/null +++ b/src/games/rdr2vk/tonemap/0x9F191B0B.frag.glsl @@ -0,0 +1,848 @@ +#version 450 + +#extension GL_GOOGLE_include_directive : require +#include "./tonemap.glsl" + +#extension GL_EXT_scalar_block_layout : require +#extension GL_EXT_samplerless_texture_functions : require + +struct _12 { + float _m0; +}; + +struct _14 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; +}; + +struct _13 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + _14 _m5; +}; + +struct _16 { + vec4 _m0; + vec4 _m1; + mat4 _m2; +}; + +struct _17 { + vec4 _m0; + vec4 _m1; +}; + +struct _18 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + vec4 _m5; + vec4 _m6; +}; + +struct _19 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; +}; + +struct _15 { + _16 _m0[2]; + _17 _m1; + _18 _m2; + _19 _m3; + vec4 _m4[3]; + vec2 _m5; + vec2 _m6; + vec2 _m7; + float _m8; + vec4 _m9[4]; + vec2 _m10; + vec2 _m11; + vec4 _m12; + vec4 _m13; + vec4 _m14; + vec4 _m15[4]; + float _m16; + int _m17; + float _m18; + float _m19; +}; + +struct _21 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; +}; + +struct _22 { + float _m0; + float _m1; + float _m2; +}; + +struct _23 { + float _m0; + float _m1; + float _m2; + float _m3; + vec3 _m4; + int _m5; +}; + +struct _20 { + _21 _m0; + _22 _m1; + _23 _m2; + vec2 _m3; + vec2 _m4; + vec4 _m5; + float _m6; + float _m7; + uint _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + float _m16; + float _m17; +}; + +struct _24 { + vec4 _m0[5]; +}; + +struct _25 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _26 { + float _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _27 { + int _m0; + int _m1; +}; + +struct _28 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + vec2 _m6; + float _m7; + float _m8; + float _m9; + float _m10; +}; + +struct _11 { + float _m0; + vec4 _m1; + float _m2; + vec4 _m3; + uvec4 _m4; + uvec4 _m5; + vec4 _m6; + int _m7; + int _m8; + int _m9; + vec4 _m10; + vec4 _m11[8]; + uint _m12; + vec3 _m13; + vec3 _m14; + vec2 _m15; + vec2 _m16; + mat3 _m17; + vec3 _m18; + vec3 _m19; + float _m20; + float _m21; + vec3 _m22; + vec3 _m23; + vec3 _m24; + vec3 _m25; + vec4 _m26[13]; + int _m27; + vec4 _m28; + vec4 _m29; + vec4 _m30; + vec3 _m31; + vec3 _m32; + vec3 _m33; + vec3 _m34; + vec4 _m35; + float _m36; + float _m37; + float _m38; + float _m39; + mat4 _m40; + _12 _m41; + _13 _m42; + _15 _m43; + _20 _m44; + _24 _m45; + _25 _m46; + _26 _m47[5]; + vec4 _m48; + _27 _m49; + vec4 _m50; + _28 _m51; +}; + +struct _32 { + float _m0; + vec3 _m1; + vec3 _m2; + vec3 _m3; + float _m4; + vec3 _m5; + vec3 _m6; + float _m7; + vec3 _m8; + vec3 _m9; + vec2 _m10; + vec3 _m11; + vec4 _m12; + vec4 _m13[4]; + vec4 _m14; + float _m15; + int _m16; +}; + +struct _33 { + float _m0; +}; + +struct _35 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + uint _m6; + uint _m7; + uvec4 _m8; +}; + +struct _34 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + _35 _m3; + vec2 _m4; +}; + +struct _37 { + float _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _38 { + int _m0; +}; + +struct _39 { + _38 _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _36 { + vec3 _m0; + vec3 _m1; + float _m2; + float _m3; + _37 _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + uint _m15; + _38 _m16; + _38 _m17; + _39 _m18; + vec4 _m19; + float _m20; + float _m21; + float _m22; + float _m23; + float _m24; + float _m25; + float _m26; + float _m27; +}; + +struct _41 { + vec3 _m0; + float _m1; +}; + +struct _42 { + vec4 _m0; + vec4 _m1; + vec4 _m2; +}; + +struct _43 { + vec2 _m0; + vec2 _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + vec2 _m8; + float _m9; +}; + +struct _44 { + float _m0; + _38 _m1; +}; + +struct _45 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _46 { + _38 _m0; + float _m1; + float _m2; +}; + +struct _48 { + int _m0; +}; + +struct _47 { + _38 _m0; + _48 _m1; + _48 _m2; +}; + +struct _49 { + _38 _m0; +}; + +struct _40 { + _41 _m0; + vec4 _m1; + mat4 _m2; + mat4 _m3; + _42 _m4; + _43 _m5; + _44 _m6; + _45 _m7; + _46 _m8; + _47 _m9; + _49 _m10; + float _m11; + float _m12; + float _m13; +}; + +struct _50 { + float _m0; + float _m1; + vec2 _m2; + vec2 _m3; + vec2 _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; +}; + +struct _51 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec3 _m3; + vec3 _m4; + vec3 _m5; + vec3 _m6; + vec3 _m7; +}; + +struct _52 { + vec4 _m0; + vec4 _m1; + vec3 _m2; +}; + +struct _53 { + vec4 _m0; + vec4 _m1; +}; + +struct _55 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; +}; + +struct _54 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + float _m16; + float _m17; + float _m18; + _55 _m19[2]; +}; + +struct _56 { + vec2 _m0; + vec2 _m1; + vec2 _m2; + float _m3; + float _m4; + float _m5; + vec2 _m6; +}; + +struct _57 { + vec4 _m0; + vec4 _m1; + vec2 _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _58 { + vec3 _m0; + float _m1; + float _m2; +}; + +struct _31 { + float _m0[32]; + float _m1[32]; + _32 _m2; + _32 _m3; + _33 _m4; + _34 _m5; + _36 _m6; + _40 _m7; + _50 _m8; + _51 _m9; + float _m10; + vec2 _m11; + _52 _m12; + _53 _m13; + float _m14; + float _m15; + vec4 _m16; + _54 _m17; + _56 _m18; + _57 _m19; + vec4 _m20; + float _m21; + uint _m22; + uvec2 _m23; + uvec2 _m24; + uint _m25; + float _m26; + float _m27; + float _m28; + float _m29; + _58 _m30; + int _m31; +}; + +struct _84 { + int _m0; + float _m1; + int _m2[2]; +}; + +struct _85 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; +}; + +struct _83 { + _84 _m0; + _85 _m1[11]; +}; + +float _251; + +layout(set = 0, binding = 98, scalar) readonly buffer _10_29 { + _11 _m0[]; +} +_29; + +layout(set = 0, binding = 99, scalar) readonly buffer _30_59 { + _31 _m0[]; +} +_59; + +layout(set = 0, binding = 20, std140) uniform _65_66 { + float _m0; + float _m1; + uint _m2; + uint _m3; + uint _m4; + uint _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + uint _m16; + uint _m17; + uint _m18; + uint _m19; +} +_66; + +layout(set = 1, binding = 16, std140) uniform _67_68 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + vec4 _m5; + vec4 _m6; + vec4 _m7; + vec4 _m8; + vec4 _m9; + vec4 _m10; + vec4 _m11; + vec4 _m12; + vec4 _m13; + vec4 _m14; + vec2 _m15; + vec4 _m16; + vec4 _m17; + vec4 _m18; + vec4 _m19; + vec4 _m20; + vec4 _m21; + vec4 _m22; + vec4 _m23; + vec4 _m24; + vec3 _m25; + vec3 _m26; + vec3 _m27; + vec4 _m28; + vec4 _m29; + vec4 _m30; + vec4 _m31; + vec4 _m32; + vec4 _m33; + vec4 _m34; + vec4 _m35; + vec4 _m36; + vec4 _m37; + vec3 _m38; + vec4 _m39; + vec4 _m40; + vec4 _m41; + vec4 _m42; + mat4 _m43; + vec4 _m44; + vec4 _m45; + vec4 _m46; + vec4 _m47; + vec4 _m48; + vec4 _m49; + vec4 _m50; + vec4 _m51; + vec4 _m52; + vec4 _m53; + vec4 _m54; + vec4 _m55; + vec4 _m56; + vec4 _m57; + float _m58; + vec4 _m59; + vec4 _m60; + float _m61; + vec4 _m62; + vec4 _m63; + vec2 _m64; + vec4 _m65; + vec4 _m66; + vec4 _m67; + vec4 _m68; + vec4 _m69; + vec4 _m70; + vec4 _m71; + vec4 _m72; + vec4 _m73; + vec4 _m74; + vec4 _m75; + vec4 _m76; + vec4 _m77; + vec3 _m78; + float _m79; + vec4 _m80; + vec4 _m81; + vec4 _m82; + vec4 _m83; + vec4 _m84; + vec4 _m85; +} +_68; + +layout(set = 0, binding = 214, std430) readonly buffer _82_86 { + _83 _m0[]; +} +_86; + +layout(set = 1, binding = 32) uniform sampler _8; +layout(set = 1, binding = 34) uniform sampler _9; +layout(set = 0, binding = 121) uniform texture2DArray _62; +layout(set = 0, binding = 140) uniform texture2D _63; +layout(set = 1, binding = 174) uniform texture2D _69; +layout(set = 1, binding = 177) uniform texture2D _70; +layout(set = 1, binding = 185) uniform texture1D _72; +layout(set = 1, binding = 40) uniform sampler _73; +layout(set = 1, binding = 186) uniform texture2D _74; +layout(set = 1, binding = 196) uniform texture2D _75; +layout(set = 1, binding = 197) uniform texture2D _76; +layout(set = 1, binding = 202) uniform texture2D _77; +layout(set = 1, binding = 203) uniform texture2D _78; +layout(set = 1, binding = 205) uniform texture2D _79; +layout(set = 1, binding = 207) uniform texture2D _80; +layout(set = 1, binding = 212) uniform samplerBuffer _81; + +layout(location = 0) in vec4 _4; +layout(location = 1) in float _5; +layout(location = 0) out vec4 _6; + +void main() { + float _269 = _68._m0.z / ((1.0 + _68._m0.w) - textureLod(sampler2D(_69, _8), _4.xy, 0.0).x); + vec4 _273 = texture(sampler2D(_74, _73), _4.xy); + vec3 _287 = vec4(vec4(_273.xyz, 0.0).xyz * _29._m0[0u]._m1.w, _251).xyz; + vec4 _290 = texelFetch(_81, int(0u)); + vec4 _291 = texelFetch(_81, int(1u)); + bool _321; + vec3 _322; + if (floatBitsToInt(_68._m61) != 0) { + vec4 _307 = texture(sampler2D(_79, _73), _4.xy); + float _308 = _307.w; + bool _310 = (_308 + 9.9999997473787516355514526367188e-05) >= 1.0; + vec3 _319; + if (_310) { + _319 = _307.xyz; + } else { + _319 = _307.xyz + (_287 * (1.0 - _308)); + } + _321 = _310 ? true : false; + _322 = _319; + } else { + _321 = false; + _322 = _287; + } + vec3 _326 = min(_322 * texelFetch(_63, ivec2(0), 0).x, vec3(65504.0)); + bool _327 = !_321; + float _440; + vec3 _441; + if (_327) { + float _386; + if (floatBitsToInt(_68._m70.x) != 0) { + float _349 = clamp(dot(texture(sampler2D(_70, _9), _4.xy).xyz * texelFetch(_63, ivec2(0), 0).x, vec3(0.300000011920928955078125, 0.589999973773956298828125, 0.10999999940395355224609375)), _68._m72.z, _68._m72.w); + float _372 = clamp(((((_68._m70.y * log(_349 + _68._m72.x)) + _68._m70.z) - 10.0) + (_68._m72.y * _349)) + _68._m65.w, _68._m66.x, _68._m66.y); + _386 = pow(2.0, mix(_5, clamp(_372 + ((abs(_372) * _68._m66.z) * float(int(sign(_372)))), _68._m66.x, _68._m66.y), clamp(_68._m70.x, 0.0, 1.0))); + } else { + _386 = _4.z; + } + vec3 _439; + if (floatBitsToInt(_68._m51.w) != 0) { + vec2 _415 = ((_4.xy - _68._m50.xy) * mat2(vec2(_68._m52.x, _68._m52.y), vec2(_68._m52.z, _68._m52.w))) * _68._m50.zw; + float _419 = max((dot(_415, _415) - _68._m53.x) * _68._m53.w, 0.0); + bool _420 = _419 < 1.0; + _439 = mix(_326, (_326 * _68._m51.xyz) * _68._m51.w, vec3(_420 ? (_420 ? (1.0 - pow(2.0, (-10.0) * _419)) : 1.0) : (0.9980499744415283203125 + (((_419 - 1.0) > 0.0) ? pow(2.0, 10.0 * (_419 - 2.0)) : 0.0)))); + } else { + _439 = _326; + } + _440 = _386; + _441 = _439; + } else { + _440 = _4.z; + _441 = _326; + } + vec3 _478 = _441 * mix(mix(_68._m54.xyz, _68._m56.xyz, vec3(clamp(clamp(_4.y * _68._m57.y, 0.0, 1.0) + _68._m54.w, 0.0, 1.0))), mix(_68._m56.xyz, _68._m55.xyz, vec3(clamp(clamp(clamp(_4.y - _68._m56.w, 0.0, 1.0) * _68._m57.x, 0.0, 1.0) - _68._m55.w, 0.0, 1.0))), vec3(_4.y)); + bool _481 = _66._m3 != 0u; + vec3 _544; + if (_481) { + vec3 _521 = max(vec3(0.0), _478 * (_440 / _66._m6)); + vec3 _524 = _521 * _290.x; + _544 = (((((_521 * (_524 + vec3(_291.x))) + vec3(_291.y)) / ((_521 * (_524 + vec3(_290.y))) + vec3(_291.z))) - vec3(_291.w)) * ((_66._m4 != 0u) ? _66._m10 : _290.z)) * _66._m6; + } else { + vec3 _487 = max(vec3(0.0), _478 * _440); + vec3 _490 = _487 * _290.x; + _544 = clamp(((((_487 * (_490 + vec3(_291.x))) + vec3(_291.y)) / ((_487 * (_490 + vec3(_290.y))) + vec3(_291.z))) - vec3(_291.w)) * _290.z, vec3(0.0), vec3(1.0)); + } + vec3 _592; + if (_327) { + vec3 _591; + if (floatBitsToInt(_68._m47.w) != 0) { + vec2 _577 = ((_4.xy - _68._m46.xy) * mat2(vec2(_68._m48.x, _68._m48.y), vec2(_68._m48.z, _68._m48.w))) * _68._m46.zw; + _591 = mix(_544, _68._m47.xyz, vec3(_68._m47.w * texture(sampler1D(_72, _9), min(1.0, max((dot(_577, _577) - _68._m49.x) * _68._m49.w, 0.0))).w)); + } else { + _591 = _544; + } + _592 = _591; + } else { + _592 = _544; + } + bool _613 = _481 && (!(_66._m2 != 0u)); +#if 1 + vec3 _615 = EncodeLUTInput(_592, _66._m11, _66._m12, _66._m13, _66._m14, _613); +#else + vec3 _615 = mix(mix((pow(_592, vec3(_66._m12)) * _66._m13) - vec3(_66._m14), _592 * _66._m11, lessThan(_592, vec3(0.003130800090730190277099609375))), _592, bvec3(_613)); +#endif + + vec3 _617 = max(_615 * mat3(vec3(0.514900028705596923828125, 0.324400007724761962890625, 0.1606999933719635009765625), vec3(0.265399992465972900390625, 0.67040002346038818359375, 0.06419999897480010986328125), vec3(0.02480000071227550506591796875, 0.1247999966144561767578125, 0.85039997100830078125)), vec3(0.00999999977648258209228515625, 0.0, 0.0)); + float _618 = _617.y; + vec3 _643 = mix(_615, clamp((_68._m81.xyz * (_618 * ((1.33000004291534423828125 * (1.0 + ((_618 + _617.z) / _617.x))) - 1.67999994754791259765625))) * _68._m81.w, vec3(0.0), vec3(1.0)), vec3(clamp(((0.039999999105930328369140625 / (0.039999999105930328369140625 + dot(_287 * texelFetch(_63, ivec2(0), 0).x, vec3(0.300000011920928955078125, 0.589999973773956298828125, 0.10999999940395355224609375)))) * _68._m82.x) + _68._m82.y, 0.0, 1.0))); + vec3 _673; + if (floatBitsToInt(_68._m84.w) != 0) { + _673 = mix(_643, texture(sampler2D(_80, _9), ((((_4.xy - vec2(0.5)) * _68._m84.z) / mix(_68._m85.wx, _68._m85.zy, _4.yx)) - _68._m84.xy) + vec2(0.5)).xyz, vec3(_68._m84.w)); + } else { + _673 = _643; + } + vec3 _831; + if (_327) { + float _692 = max(max(_673.x, max(_673.y, _673.z)), 9.9999997473787516355514526367188e-05); + float _698 = (_613 && (!(_66._m5 != 0u))) ? 1.0 : (((_692 > _66._m7) ? ((_692 * _66._m8) + _66._m9) : _692) / _692); + vec3 _699 = _673 * _698; + float _702 = _699.z; + float _704 = floor(_702 * 14.99989986419677734375); + float _710 = (_704 * 0.0625) + (_699.x * 0.05859375); + float _712 = _699.y * 0.9375; + vec4 _716 = texture(sampler2D(_77, _9), vec2(0.001953125, 0.03125) + vec2(_710, _712)); + vec4 _722 = texture(sampler2D(_77, _9), vec2(0.001953125, 0.03125) + vec2(_710 + 0.0625, _712)); + vec3 _725 = mix(_716.xyz, _722.xyz, vec3((_702 * 15.0) - _704)); + vec3 _828; + if (_86._m0[0u]._m0._m0 > 0) { + float _759 = _725.z; + float _761 = floor(_759 * 14.99989986419677734375); + float _767 = (_761 * 0.0625) + (_725.x * 0.05859375); + float _769 = _725.y * 0.9375; + vec3 _784 = mix(_725, mix(texture(sampler2D(_75, _9), vec2(0.001953125, 0.03125) + vec2(_767, _769)).xyz, texture(sampler2D(_75, _9), vec2(0.001953125, 0.03125) + vec2(_767 + 0.0625, _769)).xyz, vec3((_759 * 15.0) - _761)), vec3(clamp(((_269 < _86._m0[0u]._m1[0]._m2) ? clamp((_269 - _86._m0[0u]._m1[0]._m0) * _86._m0[0u]._m1[0]._m1, 0.0, 1.0) : (1.0 - clamp((_269 - _86._m0[0u]._m1[0]._m2) * _86._m0[0u]._m1[0]._m3, 0.0, 1.0))) + _86._m0[0u]._m1[0]._m4, 0.0, 1.0))); + float _796 = _784.z; + float _798 = floor(_796 * 14.99989986419677734375); + float _804 = (_798 * 0.0625) + (_784.x * 0.05859375); + float _806 = _784.y * 0.9375; + _828 = mix(_784, mix(_784, mix(texture(sampler2D(_76, _9), vec2(0.001953125, 0.03125) + vec2(_804, _806)).xyz, texture(sampler2D(_76, _9), vec2(0.001953125, 0.03125) + vec2(_804 + 0.0625, _806)).xyz, vec3((_796 * 15.0) - _798)), vec3(clamp(((_269 < _86._m0[0u]._m1[1]._m2) ? clamp((_269 - _86._m0[0u]._m1[1]._m0) * _86._m0[0u]._m1[1]._m1, 0.0, 1.0) : (1.0 - clamp((_269 - _86._m0[0u]._m1[1]._m2) * _86._m0[0u]._m1[1]._m3, 0.0, 1.0))) + _86._m0[0u]._m1[1]._m4, 0.0, 1.0))), vec3(dot(texture(sampler2D(_78, _9), _4.xy).xyz, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)))); + } else { + _828 = _725; + } + _831 = _828 / vec3(_698); + } else { + _831 = _673; + } + +#if 1 + _831 = DecodeLUTInput(_831); +#endif + + vec4 _836 = vec4(_831, dot(_831, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625))); + vec3 _837 = _836.xyz; + ivec4 _880 = ivec4(uvec4(uvec2(ivec2(uvec2(gl_FragCoord.xy))) & uvec2(63u), uint(int(_59._m0[0u]._m22) & 31), 0u)); + vec3 _888 = (vec3(texelFetch(_62, _880.xyz, _880.w).x) * 2.0) - vec3(1.0); + vec3 _899; + if (_481) { + _899 = vec3(ivec3(sign(_888))) * (vec3(1.0) - sqrt(vec3(1.0) - abs(_888))); + } else { + _899 = _888; + } + vec3 _901 = _837 + (_899 * mix(_68._m39.xyz, _68._m40.xyz, pow(clamp((mix(vec3(max(_831.x, max(_831.y, _831.z))), _837, bvec3(floatBitsToInt(_68._m41.w) != 0)) - _68._m42.xyz) * _68._m41.xyz, vec3(0.0), vec3(1.0)), vec3(_68._m42.w)))); + vec4 _902 = vec4(_901.x, _901.y, _901.z, _836.w); + vec4 _907; + if (!_481) { + _907 = clamp(_902, vec4(0.0), vec4(1.0)); + } else { + _907 = _902; + } + _6 = _907; +} + diff --git a/src/games/rdr2vk/tonemap/0xA2ED1CB7.frag.glsl b/src/games/rdr2vk/tonemap/0xA2ED1CB7.frag.glsl new file mode 100644 index 0000000000..11a003a31f --- /dev/null +++ b/src/games/rdr2vk/tonemap/0xA2ED1CB7.frag.glsl @@ -0,0 +1,958 @@ +#version 450 + +#extension GL_GOOGLE_include_directive : require +#include "./tonemap.glsl" + +#extension GL_EXT_scalar_block_layout : require +#if defined(GL_EXT_control_flow_attributes) +#extension GL_EXT_control_flow_attributes : require +#define SPIRV_CROSS_FLATTEN [[flatten]] +#define SPIRV_CROSS_BRANCH [[dont_flatten]] +#define SPIRV_CROSS_UNROLL [[unroll]] +#define SPIRV_CROSS_LOOP [[dont_unroll]] +#else +#define SPIRV_CROSS_FLATTEN +#define SPIRV_CROSS_BRANCH +#define SPIRV_CROSS_UNROLL +#define SPIRV_CROSS_LOOP +#endif +#extension GL_EXT_samplerless_texture_functions : require + +struct _13 { + float _m0; +}; + +struct _15 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; +}; + +struct _14 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + _15 _m5; +}; + +struct _17 { + vec4 _m0; + vec4 _m1; + mat4 _m2; +}; + +struct _18 { + vec4 _m0; + vec4 _m1; +}; + +struct _19 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + vec4 _m5; + vec4 _m6; +}; + +struct _20 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; +}; + +struct _16 { + _17 _m0[2]; + _18 _m1; + _19 _m2; + _20 _m3; + vec4 _m4[3]; + vec2 _m5; + vec2 _m6; + vec2 _m7; + float _m8; + vec4 _m9[4]; + vec2 _m10; + vec2 _m11; + vec4 _m12; + vec4 _m13; + vec4 _m14; + vec4 _m15[4]; + float _m16; + int _m17; + float _m18; + float _m19; +}; + +struct _22 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; +}; + +struct _23 { + float _m0; + float _m1; + float _m2; +}; + +struct _24 { + float _m0; + float _m1; + float _m2; + float _m3; + vec3 _m4; + int _m5; +}; + +struct _21 { + _22 _m0; + _23 _m1; + _24 _m2; + vec2 _m3; + vec2 _m4; + vec4 _m5; + float _m6; + float _m7; + uint _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + float _m16; + float _m17; +}; + +struct _25 { + vec4 _m0[5]; +}; + +struct _26 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _27 { + float _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _28 { + int _m0; + int _m1; +}; + +struct _29 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + vec2 _m6; + float _m7; + float _m8; + float _m9; + float _m10; +}; + +struct _12 { + float _m0; + vec4 _m1; + float _m2; + vec4 _m3; + uvec4 _m4; + uvec4 _m5; + vec4 _m6; + int _m7; + int _m8; + int _m9; + vec4 _m10; + vec4 _m11[8]; + uint _m12; + vec3 _m13; + vec3 _m14; + vec2 _m15; + vec2 _m16; + mat3 _m17; + vec3 _m18; + vec3 _m19; + float _m20; + float _m21; + vec3 _m22; + vec3 _m23; + vec3 _m24; + vec3 _m25; + vec4 _m26[13]; + int _m27; + vec4 _m28; + vec4 _m29; + vec4 _m30; + vec3 _m31; + vec3 _m32; + vec3 _m33; + vec3 _m34; + vec4 _m35; + float _m36; + float _m37; + float _m38; + float _m39; + mat4 _m40; + _13 _m41; + _14 _m42; + _16 _m43; + _21 _m44; + _25 _m45; + _26 _m46; + _27 _m47[5]; + vec4 _m48; + _28 _m49; + vec4 _m50; + _29 _m51; +}; + +struct _33 { + float _m0; + vec3 _m1; + vec3 _m2; + vec3 _m3; + float _m4; + vec3 _m5; + vec3 _m6; + float _m7; + vec3 _m8; + vec3 _m9; + vec2 _m10; + vec3 _m11; + vec4 _m12; + vec4 _m13[4]; + vec4 _m14; + float _m15; + int _m16; +}; + +struct _34 { + float _m0; +}; + +struct _36 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + uint _m6; + uint _m7; + uvec4 _m8; +}; + +struct _35 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + _36 _m3; + vec2 _m4; +}; + +struct _38 { + float _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _39 { + int _m0; +}; + +struct _40 { + _39 _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _37 { + vec3 _m0; + vec3 _m1; + float _m2; + float _m3; + _38 _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + uint _m15; + _39 _m16; + _39 _m17; + _40 _m18; + vec4 _m19; + float _m20; + float _m21; + float _m22; + float _m23; + float _m24; + float _m25; + float _m26; + float _m27; +}; + +struct _42 { + vec3 _m0; + float _m1; +}; + +struct _43 { + vec4 _m0; + vec4 _m1; + vec4 _m2; +}; + +struct _44 { + vec2 _m0; + vec2 _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + vec2 _m8; + float _m9; +}; + +struct _45 { + float _m0; + _39 _m1; +}; + +struct _46 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _47 { + _39 _m0; + float _m1; + float _m2; +}; + +struct _49 { + int _m0; +}; + +struct _48 { + _39 _m0; + _49 _m1; + _49 _m2; +}; + +struct _50 { + _39 _m0; +}; + +struct _41 { + _42 _m0; + vec4 _m1; + mat4 _m2; + mat4 _m3; + _43 _m4; + _44 _m5; + _45 _m6; + _46 _m7; + _47 _m8; + _48 _m9; + _50 _m10; + float _m11; + float _m12; + float _m13; +}; + +struct _51 { + float _m0; + float _m1; + vec2 _m2; + vec2 _m3; + vec2 _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; +}; + +struct _52 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec3 _m3; + vec3 _m4; + vec3 _m5; + vec3 _m6; + vec3 _m7; +}; + +struct _53 { + vec4 _m0; + vec4 _m1; + vec3 _m2; +}; + +struct _54 { + vec4 _m0; + vec4 _m1; +}; + +struct _56 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; +}; + +struct _55 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + float _m16; + float _m17; + float _m18; + _56 _m19[2]; +}; + +struct _57 { + vec2 _m0; + vec2 _m1; + vec2 _m2; + float _m3; + float _m4; + float _m5; + vec2 _m6; +}; + +struct _58 { + vec4 _m0; + vec4 _m1; + vec2 _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _59 { + vec3 _m0; + float _m1; + float _m2; +}; + +struct _32 { + float _m0[32]; + float _m1[32]; + _33 _m2; + _33 _m3; + _34 _m4; + _35 _m5; + _37 _m6; + _41 _m7; + _51 _m8; + _52 _m9; + float _m10; + vec2 _m11; + _53 _m12; + _54 _m13; + float _m14; + float _m15; + vec4 _m16; + _55 _m17; + _57 _m18; + _58 _m19; + vec4 _m20; + float _m21; + uint _m22; + uvec2 _m23; + uvec2 _m24; + uint _m25; + float _m26; + float _m27; + float _m28; + float _m29; + _59 _m30; + int _m31; +}; + +struct _92 { + int _m0; + float _m1; + int _m2[2]; +}; + +struct _93 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; +}; + +struct _91 { + _92 _m0; + _93 _m1[11]; +}; + +float _290; + +layout(set = 0, binding = 98, scalar) readonly buffer _11_30 { + _12 _m0[]; +} +_30; + +layout(set = 0, binding = 99, scalar) readonly buffer _31_60 { + _32 _m0[]; +} +_60; + +layout(set = 0, binding = 20, std140) uniform _66_67 { + float _m0; + float _m1; + uint _m2; + uint _m3; + uint _m4; + uint _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + uint _m16; + uint _m17; + uint _m18; + uint _m19; +} +_67; + +layout(set = 1, binding = 16, std140) uniform _68_69 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + vec4 _m5; + vec4 _m6; + vec4 _m7; + vec4 _m8; + vec4 _m9; + vec4 _m10; + vec4 _m11; + vec4 _m12; + vec4 _m13; + vec4 _m14; + vec2 _m15; + vec4 _m16; + vec4 _m17; + vec4 _m18; + vec4 _m19; + vec4 _m20; + vec4 _m21; + vec4 _m22; + vec4 _m23; + vec4 _m24; + vec3 _m25; + vec3 _m26; + vec3 _m27; + vec4 _m28; + vec4 _m29; + vec4 _m30; + vec4 _m31; + vec4 _m32; + vec4 _m33; + vec4 _m34; + vec4 _m35; + vec4 _m36; + vec4 _m37; + vec3 _m38; + vec4 _m39; + vec4 _m40; + vec4 _m41; + vec4 _m42; + mat4 _m43; + vec4 _m44; + vec4 _m45; + vec4 _m46; + vec4 _m47; + vec4 _m48; + vec4 _m49; + vec4 _m50; + vec4 _m51; + vec4 _m52; + vec4 _m53; + vec4 _m54; + vec4 _m55; + vec4 _m56; + vec4 _m57; + float _m58; + vec4 _m59; + vec4 _m60; + float _m61; + vec4 _m62; + vec4 _m63; + vec2 _m64; + vec4 _m65; + vec4 _m66; + vec4 _m67; + vec4 _m68; + vec4 _m69; + vec4 _m70; + vec4 _m71; + vec4 _m72; + vec4 _m73; + vec4 _m74; + vec4 _m75; + vec4 _m76; + vec4 _m77; + vec3 _m78; + float _m79; + vec4 _m80; + vec4 _m81; + vec4 _m82; + vec4 _m83; + vec4 _m84; + vec4 _m85; +} +_69; + +layout(set = 0, binding = 214, std430) readonly buffer _90_94 { + _91 _m0[]; +} +_94; + +layout(set = 1, binding = 32) uniform sampler _8; +layout(set = 1, binding = 33) uniform sampler _9; +layout(set = 1, binding = 34) uniform sampler _10; +layout(set = 0, binding = 121) uniform texture2DArray _63; +layout(set = 0, binding = 140) uniform texture2D _64; +layout(set = 1, binding = 173) uniform texture2D _70; +layout(set = 1, binding = 174) uniform texture2D _71; +layout(set = 1, binding = 177) uniform texture2D _72; +layout(set = 1, binding = 185) uniform texture1D _74; +layout(set = 1, binding = 40) uniform sampler _75; +layout(set = 1, binding = 186) uniform texture2D _76; +layout(set = 1, binding = 189) uniform texture2D _77; +layout(set = 1, binding = 190) uniform texture2D _78; +layout(set = 1, binding = 191) uniform texture2D _79; +layout(set = 1, binding = 196) uniform texture2D _80; +layout(set = 1, binding = 197) uniform texture2D _81; +layout(set = 1, binding = 202) uniform texture2D _82; +layout(set = 1, binding = 203) uniform texture2D _83; +layout(set = 1, binding = 205) uniform texture2D _84; +layout(set = 1, binding = 206) uniform texture2D _85; +layout(set = 1, binding = 207) uniform texture2D _86; +layout(set = 1, binding = 209) uniform texture2D _87; +layout(set = 1, binding = 210) uniform texture2D _88; +layout(set = 1, binding = 212) uniform samplerBuffer _89; + +layout(location = 0) in vec4 _4; +layout(location = 1) in float _5; +layout(location = 0) out vec4 _6; + +void main() { + vec4 _300 = texture(sampler2D(_85, _8), _4.xy); + vec2 _301 = _300.xy; + float _309 = 1.0 + _69._m0.w; + float _312 = _69._m0.z / (_309 - textureLod(sampler2D(_71, _8), _301, 0.0).x); + vec4 _316 = texture(sampler2D(_76, _75), _301); + vec4 _341 = textureLod(sampler2D(_88, _8), _301 * _69._m80.xy, 0.0) * 1.0; + float _342 = _341.z; + vec4 _499; + SPIRV_CROSS_BRANCH + if ((_342 >= 1.0) && (_341.w < 2.0)) { + float _360 = min(length(textureLod(sampler2D(_87, _8), _301, 0.0).xy * _69._m20.x), _69._m20.z); + float _363 = min(_342, 2.0); + vec2 _364 = (_341.xy / vec2(_342)) * _363; + int _367 = int(min(2.0, 1.0 + _363)); + vec2 _371 = _364 * _69._m63.xy; + float _373 = float(_367) - 0.5; + float _374 = _373 / _363; + vec2 _376 = (-_364) * _69._m63.xy; + vec2 _379 = vec2(uvec2(gl_FragCoord.xy) & uvec2(1u)); + float _393 = ((((_379.x * 2.0) - 1.0) * ((_379.y * 2.0) - 1.0)) * _69._m20.w) * clamp((_363 - 2.0) * 0.5, 0.0, 1.0); + float _394 = 0.5 + _393; + float _395 = 0.5 - _393; + vec4 _397; + _397 = vec4(0.0); + for (int _400 = 0; _400 < _367;) { + float _404 = float(_400); + float _405 = _404 + _394; + vec2 _408 = _301 + (_371 * (_405 / _373)); + float _414 = min(length(textureLod(sampler2D(_87, _8), _408, 0.0).xy * _69._m20.x), _69._m20.z); + float _420 = _69._m0.z / (_309 - textureLod(sampler2D(_70, _8), _408, 0.0).x); + float _425 = _360 * _374; + float _442 = _404 + _395; + vec2 _445 = _301 + (_376 * (_442 / _373)); + float _451 = min(length(textureLod(sampler2D(_87, _8), _445, 0.0).xy * _69._m20.x), _69._m20.z); + float _456 = _69._m0.z / (_309 - textureLod(sampler2D(_70, _8), _445, 0.0).x); + float _473 = (1.0 - clamp((1.0 - _451) * 8.0, 0.0, 1.0)) * dot(clamp(vec2(0.5) + (vec2(1.0, -1.0) * (_456 - _312)), vec2(0.0), vec2(1.0)), clamp(vec2(_425, _451 * _374) - vec2(max(_442 - 1.0, 0.0)), vec2(0.0), vec2(1.0))); + bvec2 _479 = bvec2(_420 > _456, _451 > _414); + float _481 = all(_479) ? _473 : ((1.0 - clamp((1.0 - _414) * 8.0, 0.0, 1.0)) * dot(clamp(vec2(0.5) + (vec2(1.0, -1.0) * (_420 - _312)), vec2(0.0), vec2(1.0)), clamp(vec2(_425, _414 * _374) - vec2(max(_405 - 1.0, 0.0)), vec2(0.0), vec2(1.0)))); + float _483 = any(_479) ? _473 : _481; + _397 = (_397 + vec4(textureLod(sampler2D(_78, _9), _445, 0.0).xyz * _483, _483)) + vec4(textureLod(sampler2D(_78, _9), _408, 0.0).xyz * _481, _481); + _400++; + continue; + } + _499 = _397 / vec4(float(2 * _367)); + } else { + _499 = vec4(0.0); + } + vec4 _507 = textureLod(sampler2D(_79, _9), _301, 0.0); + vec3 _512 = _507.xyz + ((_499.xyz + (vec4(vec4(_316.xyz, 0.0).xyz * _30._m0[0u]._m1.w, _290).xyz * (1.0 - _499.w))) * (1.0 - _507.w)); + vec4 _515 = texelFetch(_89, int(0u)); + vec4 _516 = texelFetch(_89, int(1u)); + float _521 = dot(_512 * texelFetch(_64, ivec2(0), 0).x, vec3(0.300000011920928955078125, 0.589999973773956298828125, 0.10999999940395355224609375)); + bool _546; + vec3 _547; + if (floatBitsToInt(_69._m61) != 0) { + vec4 _532 = texture(sampler2D(_84, _75), _4.xy); + float _533 = _532.w; + bool _535 = (_533 + 9.9999997473787516355514526367188e-05) >= 1.0; + vec3 _544; + if (_535) { + _544 = _532.xyz; + } else { + _544 = _532.xyz + (_512 * (1.0 - _533)); + } + _546 = _535 ? true : false; + _547 = _544; + } else { + _546 = false; + _547 = _512; + } + vec3 _551 = min(_547 * texelFetch(_64, ivec2(0), 0).x, vec3(65504.0)); + bool _552 = !_546; + float _688; + vec3 _689; + if (_552) { + float _611; + if (floatBitsToInt(_69._m70.x) != 0) { + float _574 = clamp(dot(texture(sampler2D(_72, _10), _301).xyz * texelFetch(_64, ivec2(0), 0).x, vec3(0.300000011920928955078125, 0.589999973773956298828125, 0.10999999940395355224609375)), _69._m72.z, _69._m72.w); + float _597 = clamp(((((_69._m70.y * log(_574 + _69._m72.x)) + _69._m70.z) - 10.0) + (_69._m72.y * _574)) + _69._m65.w, _69._m66.x, _69._m66.y); + _611 = pow(2.0, mix(_5, clamp(_597 + ((abs(_597) * _69._m66.z) * float(int(sign(_597)))), _69._m66.x, _69._m66.y), clamp(_69._m70.x, 0.0, 1.0))); + } else { + _611 = _4.z; + } + vec4 _624 = texture(sampler2D(_77, _10), fract(((_4.xy * vec2(1.60000002384185791015625, 0.89999997615814208984375)) * _69._m16.w) + _69._m16.xy)); + vec3 _634 = max(_551 * vec3(0.5), _551 + vec3((_521 * (_624.w - 0.5)) * _69._m16.z)); + vec3 _687; + if (floatBitsToInt(_69._m51.w) != 0) { + vec2 _663 = ((_4.xy - _69._m50.xy) * mat2(vec2(_69._m52.x, _69._m52.y), vec2(_69._m52.z, _69._m52.w))) * _69._m50.zw; + float _667 = max((dot(_663, _663) - _69._m53.x) * _69._m53.w, 0.0); + bool _668 = _667 < 1.0; + _687 = mix(_634, (_634 * _69._m51.xyz) * _69._m51.w, vec3(_668 ? (_668 ? (1.0 - pow(2.0, (-10.0) * _667)) : 1.0) : (0.9980499744415283203125 + (((_667 - 1.0) > 0.0) ? pow(2.0, 10.0 * (_667 - 2.0)) : 0.0)))); + } else { + _687 = _634; + } + _688 = _611; + _689 = _687; + } else { + _688 = _4.z; + _689 = _551; + } + vec3 _726 = _689 * mix(mix(_69._m54.xyz, _69._m56.xyz, vec3(clamp(clamp(_4.y * _69._m57.y, 0.0, 1.0) + _69._m54.w, 0.0, 1.0))), mix(_69._m56.xyz, _69._m55.xyz, vec3(clamp(clamp(clamp(_4.y - _69._m56.w, 0.0, 1.0) * _69._m57.x, 0.0, 1.0) - _69._m55.w, 0.0, 1.0))), vec3(_4.y)); + bool _729 = _67._m3 != 0u; + vec3 _792; + if (_729) { + vec3 _769 = max(vec3(0.0), _726 * (_688 / _67._m6)); + vec3 _772 = _769 * _515.x; + _792 = (((((_769 * (_772 + vec3(_516.x))) + vec3(_516.y)) / ((_769 * (_772 + vec3(_515.y))) + vec3(_516.z))) - vec3(_516.w)) * ((_67._m4 != 0u) ? _67._m10 : _515.z)) * _67._m6; + } else { + vec3 _735 = max(vec3(0.0), _726 * _688); + vec3 _738 = _735 * _515.x; + _792 = clamp(((((_735 * (_738 + vec3(_516.x))) + vec3(_516.y)) / ((_735 * (_738 + vec3(_515.y))) + vec3(_516.z))) - vec3(_516.w)) * _515.z, vec3(0.0), vec3(1.0)); + } + vec3 _840; + if (_552) { + vec3 _839; + if (floatBitsToInt(_69._m47.w) != 0) { + vec2 _825 = ((_4.xy - _69._m46.xy) * mat2(vec2(_69._m48.x, _69._m48.y), vec2(_69._m48.z, _69._m48.w))) * _69._m46.zw; + _839 = mix(_792, _69._m47.xyz, vec3(_69._m47.w * texture(sampler1D(_74, _10), min(1.0, max((dot(_825, _825) - _69._m49.x) * _69._m49.w, 0.0))).w)); + } else { + _839 = _792; + } + _840 = _839; + } else { + _840 = _792; + } + bool _861 = _729 && (!(_67._m2 != 0u)); + +#if 1 + vec3 _863 = EncodeLUTInput(_840, _67._m11, _67._m12, _67._m13, _67._m14, _861); +#else + vec3 _863 = mix(mix((pow(_840, vec3(_67._m12)) * _67._m13) - vec3(_67._m14), _840 * _67._m11, lessThan(_840, vec3(0.003130800090730190277099609375))), _840, bvec3(_861)); +#endif + + vec3 _1019; + if (_552 && (floatBitsToInt(_69._m19.x) != 0)) { + vec2 _875 = _4.xy * _69._m17.w; + float _941 = (((((((fract(sin(dot(_875 + vec2(0.070000000298023223876953125 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875) + fract(sin(dot(_875 + vec2(0.10999999940395355224609375 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_875 + vec2(0.12999999523162841796875 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_875 + vec2(0.17000000178813934326171875 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_875 + vec2(0.189999997615814208984375 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_875 + vec2(0.23000000417232513427734375 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_875 + vec2(0.2899999916553497314453125 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_875 + vec2(0.310000002384185791015625 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) * 0.125; + float _943 = clamp(_941 + _69._m17.z, 0.0, 1.0); + vec3 _1018; + do { + if (!(floatBitsToInt(_69._m18.w) != 0)) { + _1018 = vec3(_943); + break; + } + float _966; + if (floatBitsToInt(_69._m18.y) != 0) { + float _961 = dot(_863, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)); + _966 = mix(_943, _943 * 0.5, (_961 * _961) * _961); + } else { + _966 = _943; + } + vec3 _1017; + if (floatBitsToInt(_69._m19.z) != 0) { + vec3 _999 = vec3(_966); + vec3 _1001 = _999 * 2.0; + _1017 = mix(_863, mix(((_863 * 2.0) * (vec3(1.0) - _999)) + (sqrt(_863) * (_1001 - vec3(1.0))), (_1001 * _863) + ((_863 * _863) * (vec3(1.0) - _1001)), lessThan(_999, vec3(0.5))), vec3(_69._m18.x)); + } else { + vec3 _998; + if (floatBitsToInt(_69._m19.w) != 0) { + vec3 _986 = vec3(_966); + _998 = mix(_863, mix(vec3(1.0) - (((vec3(1.0) - _986) * 2.0) * (vec3(1.0) - _863)), (_986 * 2.0) * _863, lessThan(_863, vec3(0.5))), vec3(_69._m18.x)); + } else { + _998 = clamp(max(_863 * 0.02500000037252902984619140625, _863 + vec3((_966 - 0.5) * _69._m18.x)), vec3(0.0), vec3(1.0)); + } + _1017 = _998; + } + _1018 = _1017; + break; + } while (false); + _1019 = _1018; + } else { + _1019 = _863; + } + vec3 _1021 = max(_1019 * mat3(vec3(0.514900028705596923828125, 0.324400007724761962890625, 0.1606999933719635009765625), vec3(0.265399992465972900390625, 0.67040002346038818359375, 0.06419999897480010986328125), vec3(0.02480000071227550506591796875, 0.1247999966144561767578125, 0.85039997100830078125)), vec3(0.00999999977648258209228515625, 0.0, 0.0)); + float _1022 = _1021.y; + vec3 _1047 = mix(_1019, clamp((_69._m81.xyz * (_1022 * ((1.33000004291534423828125 * (1.0 + ((_1022 + _1021.z) / _1021.x))) - 1.67999994754791259765625))) * _69._m81.w, vec3(0.0), vec3(1.0)), vec3(clamp(((0.039999999105930328369140625 / (0.039999999105930328369140625 + _521)) * _69._m82.x) + _69._m82.y, 0.0, 1.0))); + vec3 _1077; + if (floatBitsToInt(_69._m84.w) != 0) { + _1077 = mix(_1047, texture(sampler2D(_86, _10), ((((_4.xy - vec2(0.5)) * _69._m84.z) / mix(_69._m85.wx, _69._m85.zy, _4.yx)) - _69._m84.xy) + vec2(0.5)).xyz, vec3(_69._m84.w)); + } else { + _1077 = _1047; + } + vec3 _1235; + if (_552) { + float _1096 = max(max(_1077.x, max(_1077.y, _1077.z)), 9.9999997473787516355514526367188e-05); + float _1102 = (_861 && (!(_67._m5 != 0u))) ? 1.0 : (((_1096 > _67._m7) ? ((_1096 * _67._m8) + _67._m9) : _1096) / _1096); + vec3 _1103 = _1077 * _1102; + float _1106 = _1103.z; + float _1108 = floor(_1106 * 14.99989986419677734375); + float _1114 = (_1108 * 0.0625) + (_1103.x * 0.05859375); + float _1116 = _1103.y * 0.9375; + vec4 _1120 = texture(sampler2D(_82, _10), vec2(0.001953125, 0.03125) + vec2(_1114, _1116)); + vec4 _1126 = texture(sampler2D(_82, _10), vec2(0.001953125, 0.03125) + vec2(_1114 + 0.0625, _1116)); + vec3 _1129 = mix(_1120.xyz, _1126.xyz, vec3((_1106 * 15.0) - _1108)); + vec3 _1232; + if (_94._m0[0u]._m0._m0 > 0) { + float _1163 = _1129.z; + float _1165 = floor(_1163 * 14.99989986419677734375); + float _1171 = (_1165 * 0.0625) + (_1129.x * 0.05859375); + float _1173 = _1129.y * 0.9375; + vec3 _1188 = mix(_1129, mix(texture(sampler2D(_80, _10), vec2(0.001953125, 0.03125) + vec2(_1171, _1173)).xyz, texture(sampler2D(_80, _10), vec2(0.001953125, 0.03125) + vec2(_1171 + 0.0625, _1173)).xyz, vec3((_1163 * 15.0) - _1165)), vec3(clamp(((_312 < _94._m0[0u]._m1[0]._m2) ? clamp((_312 - _94._m0[0u]._m1[0]._m0) * _94._m0[0u]._m1[0]._m1, 0.0, 1.0) : (1.0 - clamp((_312 - _94._m0[0u]._m1[0]._m2) * _94._m0[0u]._m1[0]._m3, 0.0, 1.0))) + _94._m0[0u]._m1[0]._m4, 0.0, 1.0))); + float _1200 = _1188.z; + float _1202 = floor(_1200 * 14.99989986419677734375); + float _1208 = (_1202 * 0.0625) + (_1188.x * 0.05859375); + float _1210 = _1188.y * 0.9375; + _1232 = mix(_1188, mix(_1188, mix(texture(sampler2D(_81, _10), vec2(0.001953125, 0.03125) + vec2(_1208, _1210)).xyz, texture(sampler2D(_81, _10), vec2(0.001953125, 0.03125) + vec2(_1208 + 0.0625, _1210)).xyz, vec3((_1200 * 15.0) - _1202)), vec3(clamp(((_312 < _94._m0[0u]._m1[1]._m2) ? clamp((_312 - _94._m0[0u]._m1[1]._m0) * _94._m0[0u]._m1[1]._m1, 0.0, 1.0) : (1.0 - clamp((_312 - _94._m0[0u]._m1[1]._m2) * _94._m0[0u]._m1[1]._m3, 0.0, 1.0))) + _94._m0[0u]._m1[1]._m4, 0.0, 1.0))), vec3(dot(texture(sampler2D(_83, _10), _301).xyz, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)))); + } else { + _1232 = _1129; + } + _1235 = _1232 / vec3(_1102); + } else { + _1235 = _1077; + } + +#if 1 + _1235 = DecodeLUTInput(_1235); +#endif + + vec4 _1240 = vec4(_1235, dot(_1235, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625))); + vec3 _1241 = _1240.xyz; + ivec4 _1283 = ivec4(uvec4(uvec2(ivec2(uvec2(gl_FragCoord.xy))) & uvec2(63u), uint(int(_60._m0[0u]._m22) & 31), 0u)); + vec3 _1291 = (vec3(texelFetch(_63, _1283.xyz, _1283.w).x) * 2.0) - vec3(1.0); + vec3 _1302; + if (_729) { + _1302 = vec3(ivec3(sign(_1291))) * (vec3(1.0) - sqrt(vec3(1.0) - abs(_1291))); + } else { + _1302 = _1291; + } + vec3 _1304 = _1241 + (_1302 * mix(_69._m39.xyz, _69._m40.xyz, pow(clamp((mix(vec3(max(_1235.x, max(_1235.y, _1235.z))), _1241, bvec3(floatBitsToInt(_69._m41.w) != 0)) - _69._m42.xyz) * _69._m41.xyz, vec3(0.0), vec3(1.0)), vec3(_69._m42.w)))); + vec4 _1305 = vec4(_1304.x, _1304.y, _1304.z, _1240.w); + vec4 _1310; + if (!_729) { + _1310 = clamp(_1305, vec4(0.0), vec4(1.0)); + } else { + _1310 = _1305; + } + _6 = _1310; +} + diff --git a/src/games/rdr2vk/tonemap/0xCD6F15F2.frag.glsl b/src/games/rdr2vk/tonemap/0xCD6F15F2.frag.glsl new file mode 100644 index 0000000000..27b139a54a --- /dev/null +++ b/src/games/rdr2vk/tonemap/0xCD6F15F2.frag.glsl @@ -0,0 +1,66 @@ +#version 450 + +#extension GL_GOOGLE_include_directive : require +#include "./tonemap.glsl" + +layout(set = 1, binding = 31, std140) uniform _6_7 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec2 _m3; + vec2 _m4; + vec4 _m5; + vec4 _m6; + float _m7; + float _m8; + float _m9; +} +_7; + +layout(set = 1, binding = 34) uniform sampler _9; +layout(set = 1, binding = 128) uniform texture2D _11; +layout(set = 1, binding = 130) uniform texture2D _12; +layout(set = 1, binding = 131) uniform texture2D _13; +layout(set = 1, binding = 132) uniform texture2D _14; +layout(set = 1, binding = 133) uniform texture2D _15; + +layout(location = 0) in vec2 _4; +layout(location = 0) out vec4 _5; + +void main() { + vec4 _48 = texture(sampler2D(_11, _9), _4); + float _50 = _48.z; + float _52 = floor(_50 * 14.99989986419677734375); + float _58 = (_52 * 0.0625) + (_48.x * 0.05859375); + float _60 = _48.y * 0.9375; + vec4 _64 = texture(sampler2D(_14, _9), vec2(0.001953125, 0.03125) + vec2(_58, _60)); + vec4 _70 = texture(sampler2D(_14, _9), vec2(0.001953125, 0.03125) + vec2(_58 + 0.0625, _60)); + vec3 _73 = mix(_64.xyz, _70.xyz, vec3((_50 * 15.0) - _52)); + vec4 _76 = texture(sampler2D(_15, _9), _4); + float _77 = _76.x; + float _79 = _73.z; + float _81 = floor(_79 * 14.99989986419677734375); + float _87 = (_81 * 0.0625) + (_73.x * 0.05859375); + float _89 = _73.y * 0.9375; + vec2 _91 = vec2(0.001953125, 0.03125) + vec2(_87, _89); + vec4 _93 = texture(sampler2D(_12, _9), _91); + vec2 _97 = vec2(0.001953125, 0.03125) + vec2(_87 + 0.0625, _89); + vec4 _99 = texture(sampler2D(_12, _9), _97); + vec3 _101 = vec3((_79 * 15.0) - _81); + vec3 _102 = mix(_93.xyz, _99.xyz, _101); + vec4 _105 = texture(sampler2D(_13, _9), _91); + vec4 _108 = texture(sampler2D(_13, _9), _97); + vec3 _110 = mix(_105.xyz, _108.xyz, _101); + vec3 _123; + vec3 _124; + if (floatBitsToInt(_7._m9) != 0) { + float _117 = _7._m9 * _77; + _123 = _110 * ((1.0 + _117) - _7._m9); + _124 = _102 * (1.0 - _117); + } else { + _123 = _110; + _124 = _102; + } + _5 = vec4(mix(_124, _123, vec3(_77)), 1.0); +} + diff --git a/src/games/rdr2vk/tonemap/0xCF7FE0D7.frag.glsl b/src/games/rdr2vk/tonemap/0xCF7FE0D7.frag.glsl new file mode 100644 index 0000000000..b8ec9dec82 --- /dev/null +++ b/src/games/rdr2vk/tonemap/0xCF7FE0D7.frag.glsl @@ -0,0 +1,893 @@ +#version 450 + +#extension GL_GOOGLE_include_directive : require +#include "./tonemap.glsl" + +#extension GL_EXT_scalar_block_layout : require +#extension GL_EXT_samplerless_texture_functions : require + +struct _12 { + float _m0; +}; + +struct _14 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; +}; + +struct _13 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + _14 _m5; +}; + +struct _16 { + vec4 _m0; + vec4 _m1; + mat4 _m2; +}; + +struct _17 { + vec4 _m0; + vec4 _m1; +}; + +struct _18 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + vec4 _m5; + vec4 _m6; +}; + +struct _19 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; +}; + +struct _15 { + _16 _m0[2]; + _17 _m1; + _18 _m2; + _19 _m3; + vec4 _m4[3]; + vec2 _m5; + vec2 _m6; + vec2 _m7; + float _m8; + vec4 _m9[4]; + vec2 _m10; + vec2 _m11; + vec4 _m12; + vec4 _m13; + vec4 _m14; + vec4 _m15[4]; + float _m16; + int _m17; + float _m18; + float _m19; +}; + +struct _21 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; +}; + +struct _22 { + float _m0; + float _m1; + float _m2; +}; + +struct _23 { + float _m0; + float _m1; + float _m2; + float _m3; + vec3 _m4; + int _m5; +}; + +struct _20 { + _21 _m0; + _22 _m1; + _23 _m2; + vec2 _m3; + vec2 _m4; + vec4 _m5; + float _m6; + float _m7; + uint _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + float _m16; + float _m17; +}; + +struct _24 { + vec4 _m0[5]; +}; + +struct _25 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _26 { + float _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _27 { + int _m0; + int _m1; +}; + +struct _28 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + vec2 _m6; + float _m7; + float _m8; + float _m9; + float _m10; +}; + +struct _11 { + float _m0; + vec4 _m1; + float _m2; + vec4 _m3; + uvec4 _m4; + uvec4 _m5; + vec4 _m6; + int _m7; + int _m8; + int _m9; + vec4 _m10; + vec4 _m11[8]; + uint _m12; + vec3 _m13; + vec3 _m14; + vec2 _m15; + vec2 _m16; + mat3 _m17; + vec3 _m18; + vec3 _m19; + float _m20; + float _m21; + vec3 _m22; + vec3 _m23; + vec3 _m24; + vec3 _m25; + vec4 _m26[13]; + int _m27; + vec4 _m28; + vec4 _m29; + vec4 _m30; + vec3 _m31; + vec3 _m32; + vec3 _m33; + vec3 _m34; + vec4 _m35; + float _m36; + float _m37; + float _m38; + float _m39; + mat4 _m40; + _12 _m41; + _13 _m42; + _15 _m43; + _20 _m44; + _24 _m45; + _25 _m46; + _26 _m47[5]; + vec4 _m48; + _27 _m49; + vec4 _m50; + _28 _m51; +}; + +struct _32 { + float _m0; + vec3 _m1; + vec3 _m2; + vec3 _m3; + float _m4; + vec3 _m5; + vec3 _m6; + float _m7; + vec3 _m8; + vec3 _m9; + vec2 _m10; + vec3 _m11; + vec4 _m12; + vec4 _m13[4]; + vec4 _m14; + float _m15; + int _m16; +}; + +struct _33 { + float _m0; +}; + +struct _35 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + uint _m6; + uint _m7; + uvec4 _m8; +}; + +struct _34 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + _35 _m3; + vec2 _m4; +}; + +struct _37 { + float _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _38 { + int _m0; +}; + +struct _39 { + _38 _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _36 { + vec3 _m0; + vec3 _m1; + float _m2; + float _m3; + _37 _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + uint _m15; + _38 _m16; + _38 _m17; + _39 _m18; + vec4 _m19; + float _m20; + float _m21; + float _m22; + float _m23; + float _m24; + float _m25; + float _m26; + float _m27; +}; + +struct _41 { + vec3 _m0; + float _m1; +}; + +struct _42 { + vec4 _m0; + vec4 _m1; + vec4 _m2; +}; + +struct _43 { + vec2 _m0; + vec2 _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + vec2 _m8; + float _m9; +}; + +struct _44 { + float _m0; + _38 _m1; +}; + +struct _45 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _46 { + _38 _m0; + float _m1; + float _m2; +}; + +struct _48 { + int _m0; +}; + +struct _47 { + _38 _m0; + _48 _m1; + _48 _m2; +}; + +struct _49 { + _38 _m0; +}; + +struct _40 { + _41 _m0; + vec4 _m1; + mat4 _m2; + mat4 _m3; + _42 _m4; + _43 _m5; + _44 _m6; + _45 _m7; + _46 _m8; + _47 _m9; + _49 _m10; + float _m11; + float _m12; + float _m13; +}; + +struct _50 { + float _m0; + float _m1; + vec2 _m2; + vec2 _m3; + vec2 _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; +}; + +struct _51 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec3 _m3; + vec3 _m4; + vec3 _m5; + vec3 _m6; + vec3 _m7; +}; + +struct _52 { + vec4 _m0; + vec4 _m1; + vec3 _m2; +}; + +struct _53 { + vec4 _m0; + vec4 _m1; +}; + +struct _55 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; +}; + +struct _54 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + float _m16; + float _m17; + float _m18; + _55 _m19[2]; +}; + +struct _56 { + vec2 _m0; + vec2 _m1; + vec2 _m2; + float _m3; + float _m4; + float _m5; + vec2 _m6; +}; + +struct _57 { + vec4 _m0; + vec4 _m1; + vec2 _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _58 { + vec3 _m0; + float _m1; + float _m2; +}; + +struct _31 { + float _m0[32]; + float _m1[32]; + _32 _m2; + _32 _m3; + _33 _m4; + _34 _m5; + _36 _m6; + _40 _m7; + _50 _m8; + _51 _m9; + float _m10; + vec2 _m11; + _52 _m12; + _53 _m13; + float _m14; + float _m15; + vec4 _m16; + _54 _m17; + _56 _m18; + _57 _m19; + vec4 _m20; + float _m21; + uint _m22; + uvec2 _m23; + uvec2 _m24; + uint _m25; + float _m26; + float _m27; + float _m28; + float _m29; + _58 _m30; + int _m31; +}; + +struct _85 { + int _m0; + float _m1; + int _m2[2]; +}; + +struct _86 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; +}; + +struct _84 { + _85 _m0; + _86 _m1[11]; +}; + +float _273; + +layout(set = 0, binding = 98, scalar) readonly buffer _10_29 { + _11 _m0[]; +} +_29; + +layout(set = 0, binding = 99, scalar) readonly buffer _30_59 { + _31 _m0[]; +} +_59; + +layout(set = 0, binding = 20, std140) uniform _65_66 { + float _m0; + float _m1; + uint _m2; + uint _m3; + uint _m4; + uint _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + uint _m16; + uint _m17; + uint _m18; + uint _m19; +} +_66; + +layout(set = 1, binding = 16, std140) uniform _67_68 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + vec4 _m5; + vec4 _m6; + vec4 _m7; + vec4 _m8; + vec4 _m9; + vec4 _m10; + vec4 _m11; + vec4 _m12; + vec4 _m13; + vec4 _m14; + vec2 _m15; + vec4 _m16; + vec4 _m17; + vec4 _m18; + vec4 _m19; + vec4 _m20; + vec4 _m21; + vec4 _m22; + vec4 _m23; + vec4 _m24; + vec3 _m25; + vec3 _m26; + vec3 _m27; + vec4 _m28; + vec4 _m29; + vec4 _m30; + vec4 _m31; + vec4 _m32; + vec4 _m33; + vec4 _m34; + vec4 _m35; + vec4 _m36; + vec4 _m37; + vec3 _m38; + vec4 _m39; + vec4 _m40; + vec4 _m41; + vec4 _m42; + mat4 _m43; + vec4 _m44; + vec4 _m45; + vec4 _m46; + vec4 _m47; + vec4 _m48; + vec4 _m49; + vec4 _m50; + vec4 _m51; + vec4 _m52; + vec4 _m53; + vec4 _m54; + vec4 _m55; + vec4 _m56; + vec4 _m57; + float _m58; + vec4 _m59; + vec4 _m60; + float _m61; + vec4 _m62; + vec4 _m63; + vec2 _m64; + vec4 _m65; + vec4 _m66; + vec4 _m67; + vec4 _m68; + vec4 _m69; + vec4 _m70; + vec4 _m71; + vec4 _m72; + vec4 _m73; + vec4 _m74; + vec4 _m75; + vec4 _m76; + vec4 _m77; + vec3 _m78; + float _m79; + vec4 _m80; + vec4 _m81; + vec4 _m82; + vec4 _m83; + vec4 _m84; + vec4 _m85; +} +_68; + +layout(set = 0, binding = 214, std430) readonly buffer _83_87 { + _84 _m0[]; +} +_87; + +layout(set = 1, binding = 32) uniform sampler _8; +layout(set = 1, binding = 34) uniform sampler _9; +layout(set = 0, binding = 121) uniform texture2DArray _62; +layout(set = 0, binding = 140) uniform texture2D _63; +layout(set = 1, binding = 174) uniform texture2D _69; +layout(set = 1, binding = 177) uniform texture2D _70; +layout(set = 1, binding = 185) uniform texture1D _72; +layout(set = 1, binding = 40) uniform sampler _73; +layout(set = 1, binding = 186) uniform texture2D _74; +layout(set = 1, binding = 189) uniform texture2D _75; +layout(set = 1, binding = 196) uniform texture2D _76; +layout(set = 1, binding = 197) uniform texture2D _77; +layout(set = 1, binding = 202) uniform texture2D _78; +layout(set = 1, binding = 203) uniform texture2D _79; +layout(set = 1, binding = 205) uniform texture2D _80; +layout(set = 1, binding = 207) uniform texture2D _81; +layout(set = 1, binding = 212) uniform samplerBuffer _82; + +layout(location = 0) in vec4 _4; +layout(location = 1) in float _5; +layout(location = 0) out vec4 _6; + +void main() { + float _291 = _68._m0.z / ((1.0 + _68._m0.w) - textureLod(sampler2D(_69, _8), _4.xy, 0.0).x); + vec4 _295 = texture(sampler2D(_74, _73), _4.xy); + vec3 _309 = vec4(vec4(_295.xyz, 0.0).xyz * _29._m0[0u]._m1.w, _273).xyz; + vec4 _312 = texelFetch(_82, int(0u)); + vec4 _313 = texelFetch(_82, int(1u)); + float _318 = dot(_309 * texelFetch(_63, ivec2(0), 0).x, vec3(0.300000011920928955078125, 0.589999973773956298828125, 0.10999999940395355224609375)); + bool _343; + vec3 _344; + if (floatBitsToInt(_68._m61) != 0) { + vec4 _329 = texture(sampler2D(_80, _73), _4.xy); + float _330 = _329.w; + bool _332 = (_330 + 9.9999997473787516355514526367188e-05) >= 1.0; + vec3 _341; + if (_332) { + _341 = _329.xyz; + } else { + _341 = _329.xyz + (_309 * (1.0 - _330)); + } + _343 = _332 ? true : false; + _344 = _341; + } else { + _343 = false; + _344 = _309; + } + vec3 _348 = min(_344 * texelFetch(_63, ivec2(0), 0).x, vec3(65504.0)); + bool _349 = !_343; + float _485; + vec3 _486; + if (_349) { + float _408; + if (floatBitsToInt(_68._m70.x) != 0) { + float _371 = clamp(dot(texture(sampler2D(_70, _9), _4.xy).xyz * texelFetch(_63, ivec2(0), 0).x, vec3(0.300000011920928955078125, 0.589999973773956298828125, 0.10999999940395355224609375)), _68._m72.z, _68._m72.w); + float _394 = clamp(((((_68._m70.y * log(_371 + _68._m72.x)) + _68._m70.z) - 10.0) + (_68._m72.y * _371)) + _68._m65.w, _68._m66.x, _68._m66.y); + _408 = pow(2.0, mix(_5, clamp(_394 + ((abs(_394) * _68._m66.z) * float(int(sign(_394)))), _68._m66.x, _68._m66.y), clamp(_68._m70.x, 0.0, 1.0))); + } else { + _408 = _4.z; + } + vec4 _421 = texture(sampler2D(_75, _9), fract(((_4.xy * vec2(1.60000002384185791015625, 0.89999997615814208984375)) * _68._m16.w) + _68._m16.xy)); + vec3 _431 = max(_348 * vec3(0.5), _348 + vec3((_318 * (_421.w - 0.5)) * _68._m16.z)); + vec3 _484; + if (floatBitsToInt(_68._m51.w) != 0) { + vec2 _460 = ((_4.xy - _68._m50.xy) * mat2(vec2(_68._m52.x, _68._m52.y), vec2(_68._m52.z, _68._m52.w))) * _68._m50.zw; + float _464 = max((dot(_460, _460) - _68._m53.x) * _68._m53.w, 0.0); + bool _465 = _464 < 1.0; + _484 = mix(_431, (_431 * _68._m51.xyz) * _68._m51.w, vec3(_465 ? (_465 ? (1.0 - pow(2.0, (-10.0) * _464)) : 1.0) : (0.9980499744415283203125 + (((_464 - 1.0) > 0.0) ? pow(2.0, 10.0 * (_464 - 2.0)) : 0.0)))); + } else { + _484 = _431; + } + _485 = _408; + _486 = _484; + } else { + _485 = _4.z; + _486 = _348; + } + vec3 _523 = _486 * mix(mix(_68._m54.xyz, _68._m56.xyz, vec3(clamp(clamp(_4.y * _68._m57.y, 0.0, 1.0) + _68._m54.w, 0.0, 1.0))), mix(_68._m56.xyz, _68._m55.xyz, vec3(clamp(clamp(clamp(_4.y - _68._m56.w, 0.0, 1.0) * _68._m57.x, 0.0, 1.0) - _68._m55.w, 0.0, 1.0))), vec3(_4.y)); + bool _526 = _66._m3 != 0u; + vec3 _589; + if (_526) { + vec3 _566 = max(vec3(0.0), _523 * (_485 / _66._m6)); + vec3 _569 = _566 * _312.x; + _589 = (((((_566 * (_569 + vec3(_313.x))) + vec3(_313.y)) / ((_566 * (_569 + vec3(_312.y))) + vec3(_313.z))) - vec3(_313.w)) * ((_66._m4 != 0u) ? _66._m10 : _312.z)) * _66._m6; + } else { + vec3 _532 = max(vec3(0.0), _523 * _485); + vec3 _535 = _532 * _312.x; + _589 = clamp(((((_532 * (_535 + vec3(_313.x))) + vec3(_313.y)) / ((_532 * (_535 + vec3(_312.y))) + vec3(_313.z))) - vec3(_313.w)) * _312.z, vec3(0.0), vec3(1.0)); + } + vec3 _637; + if (_349) { + vec3 _636; + if (floatBitsToInt(_68._m47.w) != 0) { + vec2 _622 = ((_4.xy - _68._m46.xy) * mat2(vec2(_68._m48.x, _68._m48.y), vec2(_68._m48.z, _68._m48.w))) * _68._m46.zw; + _636 = mix(_589, _68._m47.xyz, vec3(_68._m47.w * texture(sampler1D(_72, _9), min(1.0, max((dot(_622, _622) - _68._m49.x) * _68._m49.w, 0.0))).w)); + } else { + _636 = _589; + } + _637 = _636; + } else { + _637 = _589; + } + bool _658 = _526 && (!(_66._m2 != 0u)); + +#if 1 + vec3 _660 = EncodeLUTInput(_637, _66._m11, _66._m12, _66._m13, _66._m14, _658); +#else + vec3 _660 = mix(mix((pow(_637, vec3(_66._m12)) * _66._m13) - vec3(_66._m14), _637 * _66._m11, lessThan(_637, vec3(0.003130800090730190277099609375))), _637, bvec3(_658)); +#endif + + vec3 _816; + if (_349 && (floatBitsToInt(_68._m19.x) != 0)) { + vec2 _672 = _4.xy * _68._m17.w; + float _738 = (((((((fract(sin(dot(_672 + vec2(0.070000000298023223876953125 * _68._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875) + fract(sin(dot(_672 + vec2(0.10999999940395355224609375 * _68._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_672 + vec2(0.12999999523162841796875 * _68._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_672 + vec2(0.17000000178813934326171875 * _68._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_672 + vec2(0.189999997615814208984375 * _68._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_672 + vec2(0.23000000417232513427734375 * _68._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_672 + vec2(0.2899999916553497314453125 * _68._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_672 + vec2(0.310000002384185791015625 * _68._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) * 0.125; + float _740 = clamp(_738 + _68._m17.z, 0.0, 1.0); + vec3 _815; + do { + if (!(floatBitsToInt(_68._m18.w) != 0)) { + _815 = vec3(_740); + break; + } + float _763; + if (floatBitsToInt(_68._m18.y) != 0) { + float _758 = dot(_660, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)); + _763 = mix(_740, _740 * 0.5, (_758 * _758) * _758); + } else { + _763 = _740; + } + vec3 _814; + if (floatBitsToInt(_68._m19.z) != 0) { + vec3 _796 = vec3(_763); + vec3 _798 = _796 * 2.0; + _814 = mix(_660, mix(((_660 * 2.0) * (vec3(1.0) - _796)) + (sqrt(_660) * (_798 - vec3(1.0))), (_798 * _660) + ((_660 * _660) * (vec3(1.0) - _798)), lessThan(_796, vec3(0.5))), vec3(_68._m18.x)); + } else { + vec3 _795; + if (floatBitsToInt(_68._m19.w) != 0) { + vec3 _783 = vec3(_763); + _795 = mix(_660, mix(vec3(1.0) - (((vec3(1.0) - _783) * 2.0) * (vec3(1.0) - _660)), (_783 * 2.0) * _660, lessThan(_660, vec3(0.5))), vec3(_68._m18.x)); + } else { + _795 = clamp(max(_660 * 0.02500000037252902984619140625, _660 + vec3((_763 - 0.5) * _68._m18.x)), vec3(0.0), vec3(1.0)); + } + _814 = _795; + } + _815 = _814; + break; + } while (false); + _816 = _815; + } else { + _816 = _660; + } + vec3 _818 = max(_816 * mat3(vec3(0.514900028705596923828125, 0.324400007724761962890625, 0.1606999933719635009765625), vec3(0.265399992465972900390625, 0.67040002346038818359375, 0.06419999897480010986328125), vec3(0.02480000071227550506591796875, 0.1247999966144561767578125, 0.85039997100830078125)), vec3(0.00999999977648258209228515625, 0.0, 0.0)); + float _819 = _818.y; + vec3 _844 = mix(_816, clamp((_68._m81.xyz * (_819 * ((1.33000004291534423828125 * (1.0 + ((_819 + _818.z) / _818.x))) - 1.67999994754791259765625))) * _68._m81.w, vec3(0.0), vec3(1.0)), vec3(clamp(((0.039999999105930328369140625 / (0.039999999105930328369140625 + _318)) * _68._m82.x) + _68._m82.y, 0.0, 1.0))); + vec3 _874; + if (floatBitsToInt(_68._m84.w) != 0) { + _874 = mix(_844, texture(sampler2D(_81, _9), ((((_4.xy - vec2(0.5)) * _68._m84.z) / mix(_68._m85.wx, _68._m85.zy, _4.yx)) - _68._m84.xy) + vec2(0.5)).xyz, vec3(_68._m84.w)); + } else { + _874 = _844; + } + vec3 _1032; + if (_349) { + float _893 = max(max(_874.x, max(_874.y, _874.z)), 9.9999997473787516355514526367188e-05); + float _899 = (_658 && (!(_66._m5 != 0u))) ? 1.0 : (((_893 > _66._m7) ? ((_893 * _66._m8) + _66._m9) : _893) / _893); + vec3 _900 = _874 * _899; + float _903 = _900.z; + float _905 = floor(_903 * 14.99989986419677734375); + float _911 = (_905 * 0.0625) + (_900.x * 0.05859375); + float _913 = _900.y * 0.9375; + vec4 _917 = texture(sampler2D(_78, _9), vec2(0.001953125, 0.03125) + vec2(_911, _913)); + vec4 _923 = texture(sampler2D(_78, _9), vec2(0.001953125, 0.03125) + vec2(_911 + 0.0625, _913)); + vec3 _926 = mix(_917.xyz, _923.xyz, vec3((_903 * 15.0) - _905)); + vec3 _1029; + if (_87._m0[0u]._m0._m0 > 0) { + float _960 = _926.z; + float _962 = floor(_960 * 14.99989986419677734375); + float _968 = (_962 * 0.0625) + (_926.x * 0.05859375); + float _970 = _926.y * 0.9375; + vec3 _985 = mix(_926, mix(texture(sampler2D(_76, _9), vec2(0.001953125, 0.03125) + vec2(_968, _970)).xyz, texture(sampler2D(_76, _9), vec2(0.001953125, 0.03125) + vec2(_968 + 0.0625, _970)).xyz, vec3((_960 * 15.0) - _962)), vec3(clamp(((_291 < _87._m0[0u]._m1[0]._m2) ? clamp((_291 - _87._m0[0u]._m1[0]._m0) * _87._m0[0u]._m1[0]._m1, 0.0, 1.0) : (1.0 - clamp((_291 - _87._m0[0u]._m1[0]._m2) * _87._m0[0u]._m1[0]._m3, 0.0, 1.0))) + _87._m0[0u]._m1[0]._m4, 0.0, 1.0))); + float _997 = _985.z; + float _999 = floor(_997 * 14.99989986419677734375); + float _1005 = (_999 * 0.0625) + (_985.x * 0.05859375); + float _1007 = _985.y * 0.9375; + _1029 = mix(_985, mix(_985, mix(texture(sampler2D(_77, _9), vec2(0.001953125, 0.03125) + vec2(_1005, _1007)).xyz, texture(sampler2D(_77, _9), vec2(0.001953125, 0.03125) + vec2(_1005 + 0.0625, _1007)).xyz, vec3((_997 * 15.0) - _999)), vec3(clamp(((_291 < _87._m0[0u]._m1[1]._m2) ? clamp((_291 - _87._m0[0u]._m1[1]._m0) * _87._m0[0u]._m1[1]._m1, 0.0, 1.0) : (1.0 - clamp((_291 - _87._m0[0u]._m1[1]._m2) * _87._m0[0u]._m1[1]._m3, 0.0, 1.0))) + _87._m0[0u]._m1[1]._m4, 0.0, 1.0))), vec3(dot(texture(sampler2D(_79, _9), _4.xy).xyz, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)))); + } else { + _1029 = _926; + } + _1032 = _1029 / vec3(_899); + } else { + _1032 = _874; + } + +#if 1 + _1032 = DecodeLUTInput(_1032); +#endif + + vec4 _1037 = vec4(_1032, dot(_1032, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625))); + vec3 _1038 = _1037.xyz; + ivec4 _1081 = ivec4(uvec4(uvec2(ivec2(uvec2(gl_FragCoord.xy))) & uvec2(63u), uint(int(_59._m0[0u]._m22) & 31), 0u)); + vec3 _1089 = (vec3(texelFetch(_62, _1081.xyz, _1081.w).x) * 2.0) - vec3(1.0); + vec3 _1100; + if (_526) { + _1100 = vec3(ivec3(sign(_1089))) * (vec3(1.0) - sqrt(vec3(1.0) - abs(_1089))); + } else { + _1100 = _1089; + } + vec3 _1102 = _1038 + (_1100 * mix(_68._m39.xyz, _68._m40.xyz, pow(clamp((mix(vec3(max(_1032.x, max(_1032.y, _1032.z))), _1038, bvec3(floatBitsToInt(_68._m41.w) != 0)) - _68._m42.xyz) * _68._m41.xyz, vec3(0.0), vec3(1.0)), vec3(_68._m42.w)))); + vec4 _1103 = vec4(_1102.x, _1102.y, _1102.z, _1037.w); + vec4 _1108; + if (!_526) { + _1108 = clamp(_1103, vec4(0.0), vec4(1.0)); + } else { + _1108 = _1103; + } + _6 = _1108; +} + diff --git a/src/games/rdr2vk/tonemap/0xDA9A5AA0.frag.glsl b/src/games/rdr2vk/tonemap/0xDA9A5AA0.frag.glsl new file mode 100644 index 0000000000..7cb0e34a68 --- /dev/null +++ b/src/games/rdr2vk/tonemap/0xDA9A5AA0.frag.glsl @@ -0,0 +1,947 @@ +#version 450 + +#extension GL_GOOGLE_include_directive : require +#include "./tonemap.glsl" + +#extension GL_EXT_scalar_block_layout : require +#extension GL_EXT_samplerless_texture_functions : require + +struct _12 { + float _m0; +}; + +struct _14 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; +}; + +struct _13 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + _14 _m5; +}; + +struct _16 { + vec4 _m0; + vec4 _m1; + mat4 _m2; +}; + +struct _17 { + vec4 _m0; + vec4 _m1; +}; + +struct _18 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + vec4 _m5; + vec4 _m6; +}; + +struct _19 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; +}; + +struct _15 { + _16 _m0[2]; + _17 _m1; + _18 _m2; + _19 _m3; + vec4 _m4[3]; + vec2 _m5; + vec2 _m6; + vec2 _m7; + float _m8; + vec4 _m9[4]; + vec2 _m10; + vec2 _m11; + vec4 _m12; + vec4 _m13; + vec4 _m14; + vec4 _m15[4]; + float _m16; + int _m17; + float _m18; + float _m19; +}; + +struct _21 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; +}; + +struct _22 { + float _m0; + float _m1; + float _m2; +}; + +struct _23 { + float _m0; + float _m1; + float _m2; + float _m3; + vec3 _m4; + int _m5; +}; + +struct _20 { + _21 _m0; + _22 _m1; + _23 _m2; + vec2 _m3; + vec2 _m4; + vec4 _m5; + float _m6; + float _m7; + uint _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + float _m16; + float _m17; +}; + +struct _24 { + vec4 _m0[5]; +}; + +struct _25 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _26 { + float _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _27 { + int _m0; + int _m1; +}; + +struct _28 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + vec2 _m6; + float _m7; + float _m8; + float _m9; + float _m10; +}; + +struct _11 { + float _m0; + vec4 _m1; + float _m2; + vec4 _m3; + uvec4 _m4; + uvec4 _m5; + vec4 _m6; + int _m7; + int _m8; + int _m9; + vec4 _m10; + vec4 _m11[8]; + uint _m12; + vec3 _m13; + vec3 _m14; + vec2 _m15; + vec2 _m16; + mat3 _m17; + vec3 _m18; + vec3 _m19; + float _m20; + float _m21; + vec3 _m22; + vec3 _m23; + vec3 _m24; + vec3 _m25; + vec4 _m26[13]; + int _m27; + vec4 _m28; + vec4 _m29; + vec4 _m30; + vec3 _m31; + vec3 _m32; + vec3 _m33; + vec3 _m34; + vec4 _m35; + float _m36; + float _m37; + float _m38; + float _m39; + mat4 _m40; + _12 _m41; + _13 _m42; + _15 _m43; + _20 _m44; + _24 _m45; + _25 _m46; + _26 _m47[5]; + vec4 _m48; + _27 _m49; + vec4 _m50; + _28 _m51; +}; + +struct _32 { + float _m0; + vec3 _m1; + vec3 _m2; + vec3 _m3; + float _m4; + vec3 _m5; + vec3 _m6; + float _m7; + vec3 _m8; + vec3 _m9; + vec2 _m10; + vec3 _m11; + vec4 _m12; + vec4 _m13[4]; + vec4 _m14; + float _m15; + int _m16; +}; + +struct _33 { + float _m0; +}; + +struct _35 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + uint _m6; + uint _m7; + uvec4 _m8; +}; + +struct _34 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + _35 _m3; + vec2 _m4; +}; + +struct _37 { + float _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _38 { + int _m0; +}; + +struct _39 { + _38 _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _36 { + vec3 _m0; + vec3 _m1; + float _m2; + float _m3; + _37 _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + uint _m15; + _38 _m16; + _38 _m17; + _39 _m18; + vec4 _m19; + float _m20; + float _m21; + float _m22; + float _m23; + float _m24; + float _m25; + float _m26; + float _m27; +}; + +struct _41 { + vec3 _m0; + float _m1; +}; + +struct _42 { + vec4 _m0; + vec4 _m1; + vec4 _m2; +}; + +struct _43 { + vec2 _m0; + vec2 _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + vec2 _m8; + float _m9; +}; + +struct _44 { + float _m0; + _38 _m1; +}; + +struct _45 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _46 { + _38 _m0; + float _m1; + float _m2; +}; + +struct _48 { + int _m0; +}; + +struct _47 { + _38 _m0; + _48 _m1; + _48 _m2; +}; + +struct _49 { + _38 _m0; +}; + +struct _40 { + _41 _m0; + vec4 _m1; + mat4 _m2; + mat4 _m3; + _42 _m4; + _43 _m5; + _44 _m6; + _45 _m7; + _46 _m8; + _47 _m9; + _49 _m10; + float _m11; + float _m12; + float _m13; +}; + +struct _50 { + float _m0; + float _m1; + vec2 _m2; + vec2 _m3; + vec2 _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; +}; + +struct _51 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec3 _m3; + vec3 _m4; + vec3 _m5; + vec3 _m6; + vec3 _m7; +}; + +struct _52 { + vec4 _m0; + vec4 _m1; + vec3 _m2; +}; + +struct _53 { + vec4 _m0; + vec4 _m1; +}; + +struct _55 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; +}; + +struct _54 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + float _m16; + float _m17; + float _m18; + _55 _m19[2]; +}; + +struct _56 { + vec2 _m0; + vec2 _m1; + vec2 _m2; + float _m3; + float _m4; + float _m5; + vec2 _m6; +}; + +struct _57 { + vec4 _m0; + vec4 _m1; + vec2 _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _58 { + vec3 _m0; + float _m1; + float _m2; +}; + +struct _31 { + float _m0[32]; + float _m1[32]; + _32 _m2; + _32 _m3; + _33 _m4; + _34 _m5; + _36 _m6; + _40 _m7; + _50 _m8; + _51 _m9; + float _m10; + vec2 _m11; + _52 _m12; + _53 _m13; + float _m14; + float _m15; + vec4 _m16; + _54 _m17; + _56 _m18; + _57 _m19; + vec4 _m20; + float _m21; + uint _m22; + uvec2 _m23; + uvec2 _m24; + uint _m25; + float _m26; + float _m27; + float _m28; + float _m29; + _58 _m30; + int _m31; +}; + +struct _91 { + int _m0; + float _m1; + int _m2[2]; +}; + +struct _92 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; +}; + +struct _90 { + _91 _m0; + _92 _m1[11]; +}; + +float _279; + +layout(set = 0, binding = 98, scalar) readonly buffer _10_29 { + _11 _m0[]; +} +_29; + +layout(set = 0, binding = 99, scalar) readonly buffer _30_59 { + _31 _m0[]; +} +_59; + +layout(set = 0, binding = 20, std140) uniform _65_66 { + float _m0; + float _m1; + uint _m2; + uint _m3; + uint _m4; + uint _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + uint _m16; + uint _m17; + uint _m18; + uint _m19; +} +_66; + +layout(set = 1, binding = 16, std140) uniform _67_68 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + vec4 _m5; + vec4 _m6; + vec4 _m7; + vec4 _m8; + vec4 _m9; + vec4 _m10; + vec4 _m11; + vec4 _m12; + vec4 _m13; + vec4 _m14; + vec2 _m15; + vec4 _m16; + vec4 _m17; + vec4 _m18; + vec4 _m19; + vec4 _m20; + vec4 _m21; + vec4 _m22; + vec4 _m23; + vec4 _m24; + vec3 _m25; + vec3 _m26; + vec3 _m27; + vec4 _m28; + vec4 _m29; + vec4 _m30; + vec4 _m31; + vec4 _m32; + vec4 _m33; + vec4 _m34; + vec4 _m35; + vec4 _m36; + vec4 _m37; + vec3 _m38; + vec4 _m39; + vec4 _m40; + vec4 _m41; + vec4 _m42; + mat4 _m43; + vec4 _m44; + vec4 _m45; + vec4 _m46; + vec4 _m47; + vec4 _m48; + vec4 _m49; + vec4 _m50; + vec4 _m51; + vec4 _m52; + vec4 _m53; + vec4 _m54; + vec4 _m55; + vec4 _m56; + vec4 _m57; + float _m58; + vec4 _m59; + vec4 _m60; + float _m61; + vec4 _m62; + vec4 _m63; + vec2 _m64; + vec4 _m65; + vec4 _m66; + vec4 _m67; + vec4 _m68; + vec4 _m69; + vec4 _m70; + vec4 _m71; + vec4 _m72; + vec4 _m73; + vec4 _m74; + vec4 _m75; + vec4 _m76; + vec4 _m77; + vec3 _m78; + float _m79; + vec4 _m80; + vec4 _m81; + vec4 _m82; + vec4 _m83; + vec4 _m84; + vec4 _m85; +} +_68; + +layout(set = 0, binding = 214, std430) readonly buffer _89_93 { + _90 _m0[]; +} +_93; + +layout(set = 1, binding = 32) uniform sampler _8; +layout(set = 1, binding = 34) uniform sampler _9; +layout(set = 0, binding = 121) uniform texture2DArray _62; +layout(set = 0, binding = 140) uniform texture2D _63; +layout(set = 1, binding = 174) uniform texture2D _69; +layout(set = 1, binding = 177) uniform texture2D _70; +layout(set = 1, binding = 185) uniform texture1D _72; +layout(set = 1, binding = 40) uniform sampler _73; +layout(set = 1, binding = 186) uniform texture2D _74; +layout(set = 1, binding = 189) uniform texture2D _75; +layout(set = 1, binding = 194) uniform texture2D _76; +layout(set = 1, binding = 196) uniform texture2D _77; +layout(set = 1, binding = 197) uniform texture2D _78; +layout(set = 1, binding = 198) uniform texture2D _79; +layout(set = 1, binding = 199) uniform texture2D _80; +layout(set = 1, binding = 200) uniform texture2D _81; +layout(set = 1, binding = 201) uniform texture2D _82; +layout(set = 1, binding = 202) uniform texture2D _83; +layout(set = 1, binding = 203) uniform texture2D _84; +layout(set = 1, binding = 204) uniform texture2D _85; +layout(set = 1, binding = 205) uniform texture2D _86; +layout(set = 1, binding = 207) uniform texture2D _87; +layout(set = 1, binding = 212) uniform samplerBuffer _88; + +layout(location = 0) in vec4 _4; +layout(location = 1) in float _5; +layout(location = 0) out vec4 _6; + +void main() { + float _297 = _68._m0.z / ((1.0 + _68._m0.w) - textureLod(sampler2D(_69, _8), _4.xy, 0.0).x); + vec4 _301 = texture(sampler2D(_74, _73), _4.xy); + vec3 _315 = vec4(vec4(_301.xyz, 0.0).xyz * _29._m0[0u]._m1.w, _279).xyz; + vec4 _318 = texelFetch(_88, int(0u)); + vec4 _319 = texelFetch(_88, int(1u)); + float _324 = dot(_315 * texelFetch(_63, ivec2(0), 0).x, vec3(0.300000011920928955078125, 0.589999973773956298828125, 0.10999999940395355224609375)); + bool _349; + vec3 _350; + if (floatBitsToInt(_68._m61) != 0) { + vec4 _335 = texture(sampler2D(_86, _73), _4.xy); + float _336 = _335.w; + bool _338 = (_336 + 9.9999997473787516355514526367188e-05) >= 1.0; + vec3 _347; + if (_338) { + _347 = _335.xyz; + } else { + _347 = _335.xyz + (_315 * (1.0 - _336)); + } + _349 = _338 ? true : false; + _350 = _347; + } else { + _349 = false; + _350 = _315; + } + vec3 _354 = min(_350 * texelFetch(_63, ivec2(0), 0).x, vec3(65504.0)); + bool _355 = !_349; + float _491; + vec3 _492; + if (_355) { + float _414; + if (floatBitsToInt(_68._m70.x) != 0) { + float _377 = clamp(dot(texture(sampler2D(_70, _9), _4.xy).xyz * texelFetch(_63, ivec2(0), 0).x, vec3(0.300000011920928955078125, 0.589999973773956298828125, 0.10999999940395355224609375)), _68._m72.z, _68._m72.w); + float _400 = clamp(((((_68._m70.y * log(_377 + _68._m72.x)) + _68._m70.z) - 10.0) + (_68._m72.y * _377)) + _68._m65.w, _68._m66.x, _68._m66.y); + _414 = pow(2.0, mix(_5, clamp(_400 + ((abs(_400) * _68._m66.z) * float(int(sign(_400)))), _68._m66.x, _68._m66.y), clamp(_68._m70.x, 0.0, 1.0))); + } else { + _414 = _4.z; + } + vec4 _427 = texture(sampler2D(_75, _9), fract(((_4.xy * vec2(1.60000002384185791015625, 0.89999997615814208984375)) * _68._m16.w) + _68._m16.xy)); + vec3 _437 = max(_354 * vec3(0.5), _354 + vec3((_324 * (_427.w - 0.5)) * _68._m16.z)); + vec3 _490; + if (floatBitsToInt(_68._m51.w) != 0) { + vec2 _466 = ((_4.xy - _68._m50.xy) * mat2(vec2(_68._m52.x, _68._m52.y), vec2(_68._m52.z, _68._m52.w))) * _68._m50.zw; + float _470 = max((dot(_466, _466) - _68._m53.x) * _68._m53.w, 0.0); + bool _471 = _470 < 1.0; + _490 = mix(_437, (_437 * _68._m51.xyz) * _68._m51.w, vec3(_471 ? (_471 ? (1.0 - pow(2.0, (-10.0) * _470)) : 1.0) : (0.9980499744415283203125 + (((_470 - 1.0) > 0.0) ? pow(2.0, 10.0 * (_470 - 2.0)) : 0.0)))); + } else { + _490 = _437; + } + _491 = _414; + _492 = _490; + } else { + _491 = _4.z; + _492 = _354; + } + vec3 _529 = _492 * mix(mix(_68._m54.xyz, _68._m56.xyz, vec3(clamp(clamp(_4.y * _68._m57.y, 0.0, 1.0) + _68._m54.w, 0.0, 1.0))), mix(_68._m56.xyz, _68._m55.xyz, vec3(clamp(clamp(clamp(_4.y - _68._m56.w, 0.0, 1.0) * _68._m57.x, 0.0, 1.0) - _68._m55.w, 0.0, 1.0))), vec3(_4.y)); + bool _532 = _66._m3 != 0u; + vec3 _595; + if (_532) { + vec3 _572 = max(vec3(0.0), _529 * (_491 / _66._m6)); + vec3 _575 = _572 * _318.x; + _595 = (((((_572 * (_575 + vec3(_319.x))) + vec3(_319.y)) / ((_572 * (_575 + vec3(_318.y))) + vec3(_319.z))) - vec3(_319.w)) * ((_66._m4 != 0u) ? _66._m10 : _318.z)) * _66._m6; + } else { + vec3 _538 = max(vec3(0.0), _529 * _491); + vec3 _541 = _538 * _318.x; + _595 = clamp(((((_538 * (_541 + vec3(_319.x))) + vec3(_319.y)) / ((_538 * (_541 + vec3(_318.y))) + vec3(_319.z))) - vec3(_319.w)) * _318.z, vec3(0.0), vec3(1.0)); + } + vec3 _643; + if (_355) { + vec3 _642; + if (floatBitsToInt(_68._m47.w) != 0) { + vec2 _628 = ((_4.xy - _68._m46.xy) * mat2(vec2(_68._m48.x, _68._m48.y), vec2(_68._m48.z, _68._m48.w))) * _68._m46.zw; + _642 = mix(_595, _68._m47.xyz, vec3(_68._m47.w * texture(sampler1D(_72, _9), min(1.0, max((dot(_628, _628) - _68._m49.x) * _68._m49.w, 0.0))).w)); + } else { + _642 = _595; + } + _643 = _642; + } else { + _643 = _595; + } + bool _664 = _532 && (!(_66._m2 != 0u)); + +#if 1 + vec3 _666 = EncodeLUTInput(_643, _66._m11, _66._m12, _66._m13, _66._m14, _664); +#else + vec3 _666 = mix(mix((pow(_643, vec3(_66._m12)) * _66._m13) - vec3(_66._m14), _643 * _66._m11, lessThan(_643, vec3(0.003130800090730190277099609375))), _643, bvec3(_664)); +#endif + + vec3 _822; + if (_355 && (floatBitsToInt(_68._m19.x) != 0)) { + vec2 _678 = _4.xy * _68._m17.w; + float _744 = (((((((fract(sin(dot(_678 + vec2(0.070000000298023223876953125 * _68._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875) + fract(sin(dot(_678 + vec2(0.10999999940395355224609375 * _68._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_678 + vec2(0.12999999523162841796875 * _68._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_678 + vec2(0.17000000178813934326171875 * _68._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_678 + vec2(0.189999997615814208984375 * _68._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_678 + vec2(0.23000000417232513427734375 * _68._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_678 + vec2(0.2899999916553497314453125 * _68._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_678 + vec2(0.310000002384185791015625 * _68._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) * 0.125; + float _746 = clamp(_744 + _68._m17.z, 0.0, 1.0); + vec3 _821; + do { + if (!(floatBitsToInt(_68._m18.w) != 0)) { + _821 = vec3(_746); + break; + } + float _769; + if (floatBitsToInt(_68._m18.y) != 0) { + float _764 = dot(_666, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)); + _769 = mix(_746, _746 * 0.5, (_764 * _764) * _764); + } else { + _769 = _746; + } + vec3 _820; + if (floatBitsToInt(_68._m19.z) != 0) { + vec3 _802 = vec3(_769); + vec3 _804 = _802 * 2.0; + _820 = mix(_666, mix(((_666 * 2.0) * (vec3(1.0) - _802)) + (sqrt(_666) * (_804 - vec3(1.0))), (_804 * _666) + ((_666 * _666) * (vec3(1.0) - _804)), lessThan(_802, vec3(0.5))), vec3(_68._m18.x)); + } else { + vec3 _801; + if (floatBitsToInt(_68._m19.w) != 0) { + vec3 _789 = vec3(_769); + _801 = mix(_666, mix(vec3(1.0) - (((vec3(1.0) - _789) * 2.0) * (vec3(1.0) - _666)), (_789 * 2.0) * _666, lessThan(_666, vec3(0.5))), vec3(_68._m18.x)); + } else { + _801 = clamp(max(_666 * 0.02500000037252902984619140625, _666 + vec3((_769 - 0.5) * _68._m18.x)), vec3(0.0), vec3(1.0)); + } + _820 = _801; + } + _821 = _820; + break; + } while (false); + _822 = _821; + } else { + _822 = _666; + } + vec3 _824 = max(_822 * mat3(vec3(0.514900028705596923828125, 0.324400007724761962890625, 0.1606999933719635009765625), vec3(0.265399992465972900390625, 0.67040002346038818359375, 0.06419999897480010986328125), vec3(0.02480000071227550506591796875, 0.1247999966144561767578125, 0.85039997100830078125)), vec3(0.00999999977648258209228515625, 0.0, 0.0)); + float _825 = _824.y; + vec3 _850 = mix(_822, clamp((_68._m81.xyz * (_825 * ((1.33000004291534423828125 * (1.0 + ((_825 + _824.z) / _824.x))) - 1.67999994754791259765625))) * _68._m81.w, vec3(0.0), vec3(1.0)), vec3(clamp(((0.039999999105930328369140625 / (0.039999999105930328369140625 + _324)) * _68._m82.x) + _68._m82.y, 0.0, 1.0))); + vec3 _880; + if (floatBitsToInt(_68._m84.w) != 0) { + _880 = mix(_850, texture(sampler2D(_87, _9), ((((_4.xy - vec2(0.5)) * _68._m84.z) / mix(_68._m85.wx, _68._m85.zy, _4.yx)) - _68._m84.xy) + vec2(0.5)).xyz, vec3(_68._m84.w)); + } else { + _880 = _850; + } + vec3 _1191; + if (_355) { + float _899 = max(max(_880.x, max(_880.y, _880.z)), 9.9999997473787516355514526367188e-05); + float _905 = (_664 && (!(_66._m5 != 0u))) ? 1.0 : (((_899 > _66._m7) ? ((_899 * _66._m8) + _66._m9) : _899) / _899); + vec3 _906 = _880 * _905; + float _909 = _906.z; + float _911 = floor(_909 * 14.99989986419677734375); + float _917 = (_911 * 0.0625) + (_906.x * 0.05859375); + float _919 = _906.y * 0.9375; + vec4 _923 = texture(sampler2D(_83, _9), vec2(0.001953125, 0.03125) + vec2(_917, _919)); + vec4 _929 = texture(sampler2D(_83, _9), vec2(0.001953125, 0.03125) + vec2(_917 + 0.0625, _919)); + vec3 _932 = mix(_923.xyz, _929.xyz, vec3((_909 * 15.0) - _911)); + vec3 _1188; + if (_93._m0[0u]._m0._m0 > 0) { + vec4 _940 = texture(sampler2D(_76, _8), _4.xy); + vec4 _943 = _940 * _93._m0[0u]._m0._m1; + vec4 _946 = texture(sampler2D(_85, _9), _4.xy); + float _948 = dot(_946.xyz, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)); + float _950 = clamp(_943.x, 0.0, 1.0); + float _952 = _948 * _950; + vec3 _982; + if (_952 != 0.0) { + float _956 = _932.z; + float _958 = floor(_956 * 14.99989986419677734375); + float _964 = (_958 * 0.0625) + (_932.x * 0.05859375); + float _966 = _932.y * 0.9375; + _982 = mix(_932, mix(texture(sampler2D(_79, _9), vec2(0.001953125, 0.03125) + vec2(_964, _966)).xyz, texture(sampler2D(_79, _9), vec2(0.001953125, 0.03125) + vec2(_964 + 0.0625, _966)).xyz, vec3((_956 * 15.0) - _958)), vec3(_952)); + } else { + _982 = _932; + } + float _984 = clamp(_943.y, 0.0, 1.0); + float _986 = _948 * _984; + vec3 _1016; + if (_986 != 0.0) { + float _992 = floor(_982.z * 14.99989986419677734375); + float _998 = (_992 * 0.0625) + (_982.x * 0.05859375); + float _1000 = _982.y * 0.9375; + _1016 = mix(_982, mix(texture(sampler2D(_80, _9), vec2(0.001953125, 0.03125) + vec2(_998, _1000)).xyz, texture(sampler2D(_80, _9), vec2(0.001953125, 0.03125) + vec2(_998 + 0.0625, _1000)).xyz, vec3((_982.z * 15.0) - _992)), vec3(_986)); + } else { + _1016 = _982; + } + float _1018 = clamp(_943.z, 0.0, 1.0); + float _1020 = _948 * _1018; + vec3 _1050; + if (_1020 != 0.0) { + float _1026 = floor(_1016.z * 14.99989986419677734375); + float _1032 = (_1026 * 0.0625) + (_1016.x * 0.05859375); + float _1034 = _1016.y * 0.9375; + _1050 = mix(_1016, mix(texture(sampler2D(_81, _9), vec2(0.001953125, 0.03125) + vec2(_1032, _1034)).xyz, texture(sampler2D(_81, _9), vec2(0.001953125, 0.03125) + vec2(_1032 + 0.0625, _1034)).xyz, vec3((_1016.z * 15.0) - _1026)), vec3(_1020)); + } else { + _1050 = _1016; + } + float _1052 = clamp(_943.w, 0.0, 1.0); + float _1054 = _948 * _1052; + vec3 _1084; + if (_1054 != 0.0) { + float _1060 = floor(_1050.z * 14.99989986419677734375); + float _1066 = (_1060 * 0.0625) + (_1050.x * 0.05859375); + float _1068 = _1050.y * 0.9375; + _1084 = mix(_1050, mix(texture(sampler2D(_82, _9), vec2(0.001953125, 0.03125) + vec2(_1066, _1068)).xyz, texture(sampler2D(_82, _9), vec2(0.001953125, 0.03125) + vec2(_1066 + 0.0625, _1068)).xyz, vec3((_1050.z * 15.0) - _1060)), vec3(_1054)); + } else { + _1084 = _1050; + } + float _1120 = floor(_1084.z * 14.99989986419677734375); + float _1126 = (_1120 * 0.0625) + (_1084.x * 0.05859375); + float _1128 = _1084.y * 0.9375; + vec3 _1143 = mix(_1084, mix(texture(sampler2D(_77, _9), vec2(0.001953125, 0.03125) + vec2(_1126, _1128)).xyz, texture(sampler2D(_77, _9), vec2(0.001953125, 0.03125) + vec2(_1126 + 0.0625, _1128)).xyz, vec3((_1084.z * 15.0) - _1120)), vec3(clamp(((_297 < _93._m0[0u]._m1[0]._m2) ? clamp((_297 - _93._m0[0u]._m1[0]._m0) * _93._m0[0u]._m1[0]._m1, 0.0, 1.0) : (1.0 - clamp((_297 - _93._m0[0u]._m1[0]._m2) * _93._m0[0u]._m1[0]._m3, 0.0, 1.0))) + _93._m0[0u]._m1[0]._m4, 0.0, 1.0))); + float _1155 = _1143.z; + float _1157 = floor(_1155 * 14.99989986419677734375); + float _1163 = (_1157 * 0.0625) + (_1143.x * 0.05859375); + float _1165 = _1143.y * 0.9375; + _1188 = mix(_1143, mix(_1143, mix(texture(sampler2D(_78, _9), vec2(0.001953125, 0.03125) + vec2(_1163, _1165)).xyz, texture(sampler2D(_78, _9), vec2(0.001953125, 0.03125) + vec2(_1163 + 0.0625, _1165)).xyz, vec3((_1155 * 15.0) - _1157)), vec3(clamp(((_297 < _93._m0[0u]._m1[1]._m2) ? clamp((_297 - _93._m0[0u]._m1[1]._m0) * _93._m0[0u]._m1[1]._m1, 0.0, 1.0) : (1.0 - clamp((_297 - _93._m0[0u]._m1[1]._m2) * _93._m0[0u]._m1[1]._m3, 0.0, 1.0))) + _93._m0[0u]._m1[1]._m4, 0.0, 1.0))), vec3(dot(texture(sampler2D(_84, _9), _4.xy).xyz, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)) * (1.0 - clamp(((_950 + _984) + _1018) + _1052, 0.0, 1.0)))); + } else { + _1188 = _932; + } + _1191 = _1188 / vec3(_905); + } else { + _1191 = _880; + } + +#if 1 + _1191 = DecodeLUTInput(_1191); +#endif + + vec4 _1196 = vec4(_1191, dot(_1191, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625))); + vec3 _1197 = _1196.xyz; + ivec4 _1240 = ivec4(uvec4(uvec2(ivec2(uvec2(gl_FragCoord.xy))) & uvec2(63u), uint(int(_59._m0[0u]._m22) & 31), 0u)); + vec3 _1248 = (vec3(texelFetch(_62, _1240.xyz, _1240.w).x) * 2.0) - vec3(1.0); + vec3 _1259; + if (_532) { + _1259 = vec3(ivec3(sign(_1248))) * (vec3(1.0) - sqrt(vec3(1.0) - abs(_1248))); + } else { + _1259 = _1248; + } + vec3 _1261 = _1197 + (_1259 * mix(_68._m39.xyz, _68._m40.xyz, pow(clamp((mix(vec3(max(_1191.x, max(_1191.y, _1191.z))), _1197, bvec3(floatBitsToInt(_68._m41.w) != 0)) - _68._m42.xyz) * _68._m41.xyz, vec3(0.0), vec3(1.0)), vec3(_68._m42.w)))); + vec4 _1262 = vec4(_1261.x, _1261.y, _1261.z, _1196.w); + vec4 _1267; + if (!_532) { + _1267 = clamp(_1262, vec4(0.0), vec4(1.0)); + } else { + _1267 = _1262; + } + _6 = _1267; +} + diff --git a/src/games/rdr2vk/tonemap/0xDD04030E.frag.glsl b/src/games/rdr2vk/tonemap/0xDD04030E.frag.glsl new file mode 100644 index 0000000000..06abcece19 --- /dev/null +++ b/src/games/rdr2vk/tonemap/0xDD04030E.frag.glsl @@ -0,0 +1,1008 @@ +#version 450 + +#extension GL_GOOGLE_include_directive : require +#include "./tonemap.glsl" + +#extension GL_EXT_scalar_block_layout : require +#if defined(GL_EXT_control_flow_attributes) +#extension GL_EXT_control_flow_attributes : require +#define SPIRV_CROSS_FLATTEN [[flatten]] +#define SPIRV_CROSS_BRANCH [[dont_flatten]] +#define SPIRV_CROSS_UNROLL [[unroll]] +#define SPIRV_CROSS_LOOP [[dont_unroll]] +#else +#define SPIRV_CROSS_FLATTEN +#define SPIRV_CROSS_BRANCH +#define SPIRV_CROSS_UNROLL +#define SPIRV_CROSS_LOOP +#endif +#extension GL_EXT_samplerless_texture_functions : require + +struct _13 { + float _m0; +}; + +struct _15 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; +}; + +struct _14 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + _15 _m5; +}; + +struct _17 { + vec4 _m0; + vec4 _m1; + mat4 _m2; +}; + +struct _18 { + vec4 _m0; + vec4 _m1; +}; + +struct _19 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + vec4 _m5; + vec4 _m6; +}; + +struct _20 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; +}; + +struct _16 { + _17 _m0[2]; + _18 _m1; + _19 _m2; + _20 _m3; + vec4 _m4[3]; + vec2 _m5; + vec2 _m6; + vec2 _m7; + float _m8; + vec4 _m9[4]; + vec2 _m10; + vec2 _m11; + vec4 _m12; + vec4 _m13; + vec4 _m14; + vec4 _m15[4]; + float _m16; + int _m17; + float _m18; + float _m19; +}; + +struct _22 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; +}; + +struct _23 { + float _m0; + float _m1; + float _m2; +}; + +struct _24 { + float _m0; + float _m1; + float _m2; + float _m3; + vec3 _m4; + int _m5; +}; + +struct _21 { + _22 _m0; + _23 _m1; + _24 _m2; + vec2 _m3; + vec2 _m4; + vec4 _m5; + float _m6; + float _m7; + uint _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + float _m16; + float _m17; +}; + +struct _25 { + vec4 _m0[5]; +}; + +struct _26 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _27 { + float _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _28 { + int _m0; + int _m1; +}; + +struct _29 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + vec2 _m6; + float _m7; + float _m8; + float _m9; + float _m10; +}; + +struct _12 { + float _m0; + vec4 _m1; + float _m2; + vec4 _m3; + uvec4 _m4; + uvec4 _m5; + vec4 _m6; + int _m7; + int _m8; + int _m9; + vec4 _m10; + vec4 _m11[8]; + uint _m12; + vec3 _m13; + vec3 _m14; + vec2 _m15; + vec2 _m16; + mat3 _m17; + vec3 _m18; + vec3 _m19; + float _m20; + float _m21; + vec3 _m22; + vec3 _m23; + vec3 _m24; + vec3 _m25; + vec4 _m26[13]; + int _m27; + vec4 _m28; + vec4 _m29; + vec4 _m30; + vec3 _m31; + vec3 _m32; + vec3 _m33; + vec3 _m34; + vec4 _m35; + float _m36; + float _m37; + float _m38; + float _m39; + mat4 _m40; + _13 _m41; + _14 _m42; + _16 _m43; + _21 _m44; + _25 _m45; + _26 _m46; + _27 _m47[5]; + vec4 _m48; + _28 _m49; + vec4 _m50; + _29 _m51; +}; + +struct _33 { + float _m0; + vec3 _m1; + vec3 _m2; + vec3 _m3; + float _m4; + vec3 _m5; + vec3 _m6; + float _m7; + vec3 _m8; + vec3 _m9; + vec2 _m10; + vec3 _m11; + vec4 _m12; + vec4 _m13[4]; + vec4 _m14; + float _m15; + int _m16; +}; + +struct _34 { + float _m0; +}; + +struct _36 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + uint _m6; + uint _m7; + uvec4 _m8; +}; + +struct _35 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + _36 _m3; + vec2 _m4; +}; + +struct _38 { + float _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _39 { + int _m0; +}; + +struct _40 { + _39 _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _37 { + vec3 _m0; + vec3 _m1; + float _m2; + float _m3; + _38 _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + uint _m15; + _39 _m16; + _39 _m17; + _40 _m18; + vec4 _m19; + float _m20; + float _m21; + float _m22; + float _m23; + float _m24; + float _m25; + float _m26; + float _m27; +}; + +struct _42 { + vec3 _m0; + float _m1; +}; + +struct _43 { + vec4 _m0; + vec4 _m1; + vec4 _m2; +}; + +struct _44 { + vec2 _m0; + vec2 _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + vec2 _m8; + float _m9; +}; + +struct _45 { + float _m0; + _39 _m1; +}; + +struct _46 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _47 { + _39 _m0; + float _m1; + float _m2; +}; + +struct _49 { + int _m0; +}; + +struct _48 { + _39 _m0; + _49 _m1; + _49 _m2; +}; + +struct _50 { + _39 _m0; +}; + +struct _41 { + _42 _m0; + vec4 _m1; + mat4 _m2; + mat4 _m3; + _43 _m4; + _44 _m5; + _45 _m6; + _46 _m7; + _47 _m8; + _48 _m9; + _50 _m10; + float _m11; + float _m12; + float _m13; +}; + +struct _51 { + float _m0; + float _m1; + vec2 _m2; + vec2 _m3; + vec2 _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; +}; + +struct _52 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec3 _m3; + vec3 _m4; + vec3 _m5; + vec3 _m6; + vec3 _m7; +}; + +struct _53 { + vec4 _m0; + vec4 _m1; + vec3 _m2; +}; + +struct _54 { + vec4 _m0; + vec4 _m1; +}; + +struct _56 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; +}; + +struct _55 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + float _m16; + float _m17; + float _m18; + _56 _m19[2]; +}; + +struct _57 { + vec2 _m0; + vec2 _m1; + vec2 _m2; + float _m3; + float _m4; + float _m5; + vec2 _m6; +}; + +struct _58 { + vec4 _m0; + vec4 _m1; + vec2 _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _59 { + vec3 _m0; + float _m1; + float _m2; +}; + +struct _32 { + float _m0[32]; + float _m1[32]; + _33 _m2; + _33 _m3; + _34 _m4; + _35 _m5; + _37 _m6; + _41 _m7; + _51 _m8; + _52 _m9; + float _m10; + vec2 _m11; + _53 _m12; + _54 _m13; + float _m14; + float _m15; + vec4 _m16; + _55 _m17; + _57 _m18; + _58 _m19; + vec4 _m20; + float _m21; + uint _m22; + uvec2 _m23; + uvec2 _m24; + uint _m25; + float _m26; + float _m27; + float _m28; + float _m29; + _59 _m30; + int _m31; +}; + +struct _97 { + int _m0; + float _m1; + int _m2[2]; +}; + +struct _98 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; +}; + +struct _96 { + _97 _m0; + _98 _m1[11]; +}; + +float _295; + +layout(set = 0, binding = 98, scalar) readonly buffer _11_30 { + _12 _m0[]; +} +_30; + +layout(set = 0, binding = 99, scalar) readonly buffer _31_60 { + _32 _m0[]; +} +_60; + +layout(set = 0, binding = 20, std140) uniform _66_67 { + float _m0; + float _m1; + uint _m2; + uint _m3; + uint _m4; + uint _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + uint _m16; + uint _m17; + uint _m18; + uint _m19; +} +_67; + +layout(set = 1, binding = 16, std140) uniform _68_69 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + vec4 _m5; + vec4 _m6; + vec4 _m7; + vec4 _m8; + vec4 _m9; + vec4 _m10; + vec4 _m11; + vec4 _m12; + vec4 _m13; + vec4 _m14; + vec2 _m15; + vec4 _m16; + vec4 _m17; + vec4 _m18; + vec4 _m19; + vec4 _m20; + vec4 _m21; + vec4 _m22; + vec4 _m23; + vec4 _m24; + vec3 _m25; + vec3 _m26; + vec3 _m27; + vec4 _m28; + vec4 _m29; + vec4 _m30; + vec4 _m31; + vec4 _m32; + vec4 _m33; + vec4 _m34; + vec4 _m35; + vec4 _m36; + vec4 _m37; + vec3 _m38; + vec4 _m39; + vec4 _m40; + vec4 _m41; + vec4 _m42; + mat4 _m43; + vec4 _m44; + vec4 _m45; + vec4 _m46; + vec4 _m47; + vec4 _m48; + vec4 _m49; + vec4 _m50; + vec4 _m51; + vec4 _m52; + vec4 _m53; + vec4 _m54; + vec4 _m55; + vec4 _m56; + vec4 _m57; + float _m58; + vec4 _m59; + vec4 _m60; + float _m61; + vec4 _m62; + vec4 _m63; + vec2 _m64; + vec4 _m65; + vec4 _m66; + vec4 _m67; + vec4 _m68; + vec4 _m69; + vec4 _m70; + vec4 _m71; + vec4 _m72; + vec4 _m73; + vec4 _m74; + vec4 _m75; + vec4 _m76; + vec4 _m77; + vec3 _m78; + float _m79; + vec4 _m80; + vec4 _m81; + vec4 _m82; + vec4 _m83; + vec4 _m84; + vec4 _m85; +} +_69; + +layout(set = 0, binding = 214, std430) readonly buffer _95_99 { + _96 _m0[]; +} +_99; + +layout(set = 1, binding = 32) uniform sampler _8; +layout(set = 1, binding = 33) uniform sampler _9; +layout(set = 1, binding = 34) uniform sampler _10; +layout(set = 0, binding = 121) uniform texture2DArray _63; +layout(set = 0, binding = 140) uniform texture2D _64; +layout(set = 1, binding = 173) uniform texture2D _70; +layout(set = 1, binding = 174) uniform texture2D _71; +layout(set = 1, binding = 177) uniform texture2D _72; +layout(set = 1, binding = 185) uniform texture1D _74; +layout(set = 1, binding = 40) uniform sampler _75; +layout(set = 1, binding = 186) uniform texture2D _76; +layout(set = 1, binding = 189) uniform texture2D _77; +layout(set = 1, binding = 190) uniform texture2D _78; +layout(set = 1, binding = 191) uniform texture2D _79; +layout(set = 1, binding = 194) uniform texture2D _80; +layout(set = 1, binding = 196) uniform texture2D _81; +layout(set = 1, binding = 197) uniform texture2D _82; +layout(set = 1, binding = 198) uniform texture2D _83; +layout(set = 1, binding = 199) uniform texture2D _84; +layout(set = 1, binding = 200) uniform texture2D _85; +layout(set = 1, binding = 201) uniform texture2D _86; +layout(set = 1, binding = 202) uniform texture2D _87; +layout(set = 1, binding = 203) uniform texture2D _88; +layout(set = 1, binding = 204) uniform texture2D _89; +layout(set = 1, binding = 205) uniform texture2D _90; +layout(set = 1, binding = 207) uniform texture2D _91; +layout(set = 1, binding = 209) uniform texture2D _92; +layout(set = 1, binding = 210) uniform texture2D _93; +layout(set = 1, binding = 212) uniform samplerBuffer _94; + +layout(location = 0) in vec4 _4; +layout(location = 1) in float _5; +layout(location = 0) out vec4 _6; + +void main() { + float _310 = 1.0 + _69._m0.w; + float _313 = _69._m0.z / (_310 - textureLod(sampler2D(_71, _8), _4.xy, 0.0).x); + vec4 _317 = texture(sampler2D(_76, _75), _4.xy); + vec4 _342 = textureLod(sampler2D(_93, _8), _4.xy * _69._m80.xy, 0.0) * 1.0; + float _343 = _342.z; + vec4 _500; + SPIRV_CROSS_BRANCH + if ((_343 >= 1.0) && (_342.w < 2.0)) { + float _361 = min(length(textureLod(sampler2D(_92, _8), _4.xy, 0.0).xy * _69._m20.x), _69._m20.z); + float _364 = min(_343, 2.0); + vec2 _365 = (_342.xy / vec2(_343)) * _364; + int _368 = int(min(2.0, 1.0 + _364)); + vec2 _372 = _365 * _69._m63.xy; + float _374 = float(_368) - 0.5; + float _375 = _374 / _364; + vec2 _377 = (-_365) * _69._m63.xy; + vec2 _380 = vec2(uvec2(gl_FragCoord.xy) & uvec2(1u)); + float _394 = ((((_380.x * 2.0) - 1.0) * ((_380.y * 2.0) - 1.0)) * _69._m20.w) * clamp((_364 - 2.0) * 0.5, 0.0, 1.0); + float _395 = 0.5 + _394; + float _396 = 0.5 - _394; + vec4 _398; + _398 = vec4(0.0); + for (int _401 = 0; _401 < _368;) { + float _405 = float(_401); + float _406 = _405 + _395; + vec2 _409 = _4.xy + (_372 * (_406 / _374)); + float _415 = min(length(textureLod(sampler2D(_92, _8), _409, 0.0).xy * _69._m20.x), _69._m20.z); + float _421 = _69._m0.z / (_310 - textureLod(sampler2D(_70, _8), _409, 0.0).x); + float _426 = _361 * _375; + float _443 = _405 + _396; + vec2 _446 = _4.xy + (_377 * (_443 / _374)); + float _452 = min(length(textureLod(sampler2D(_92, _8), _446, 0.0).xy * _69._m20.x), _69._m20.z); + float _457 = _69._m0.z / (_310 - textureLod(sampler2D(_70, _8), _446, 0.0).x); + float _474 = (1.0 - clamp((1.0 - _452) * 8.0, 0.0, 1.0)) * dot(clamp(vec2(0.5) + (vec2(1.0, -1.0) * (_457 - _313)), vec2(0.0), vec2(1.0)), clamp(vec2(_426, _452 * _375) - vec2(max(_443 - 1.0, 0.0)), vec2(0.0), vec2(1.0))); + bvec2 _480 = bvec2(_421 > _457, _452 > _415); + float _482 = all(_480) ? _474 : ((1.0 - clamp((1.0 - _415) * 8.0, 0.0, 1.0)) * dot(clamp(vec2(0.5) + (vec2(1.0, -1.0) * (_421 - _313)), vec2(0.0), vec2(1.0)), clamp(vec2(_426, _415 * _375) - vec2(max(_406 - 1.0, 0.0)), vec2(0.0), vec2(1.0)))); + float _484 = any(_480) ? _474 : _482; + _398 = (_398 + vec4(textureLod(sampler2D(_78, _9), _446, 0.0).xyz * _484, _484)) + vec4(textureLod(sampler2D(_78, _9), _409, 0.0).xyz * _482, _482); + _401++; + continue; + } + _500 = _398 / vec4(float(2 * _368)); + } else { + _500 = vec4(0.0); + } + vec4 _508 = textureLod(sampler2D(_79, _9), _4.xy, 0.0); + vec3 _513 = _508.xyz + ((_500.xyz + (vec4(vec4(_317.xyz, 0.0).xyz * _30._m0[0u]._m1.w, _295).xyz * (1.0 - _500.w))) * (1.0 - _508.w)); + vec4 _516 = texelFetch(_94, int(0u)); + vec4 _517 = texelFetch(_94, int(1u)); + float _522 = dot(_513 * texelFetch(_64, ivec2(0), 0).x, vec3(0.300000011920928955078125, 0.589999973773956298828125, 0.10999999940395355224609375)); + bool _547; + vec3 _548; + if (floatBitsToInt(_69._m61) != 0) { + vec4 _533 = texture(sampler2D(_90, _75), _4.xy); + float _534 = _533.w; + bool _536 = (_534 + 9.9999997473787516355514526367188e-05) >= 1.0; + vec3 _545; + if (_536) { + _545 = _533.xyz; + } else { + _545 = _533.xyz + (_513 * (1.0 - _534)); + } + _547 = _536 ? true : false; + _548 = _545; + } else { + _547 = false; + _548 = _513; + } + vec3 _552 = min(_548 * texelFetch(_64, ivec2(0), 0).x, vec3(65504.0)); + bool _553 = !_547; + float _689; + vec3 _690; + if (_553) { + float _612; + if (floatBitsToInt(_69._m70.x) != 0) { + float _575 = clamp(dot(texture(sampler2D(_72, _10), _4.xy).xyz * texelFetch(_64, ivec2(0), 0).x, vec3(0.300000011920928955078125, 0.589999973773956298828125, 0.10999999940395355224609375)), _69._m72.z, _69._m72.w); + float _598 = clamp(((((_69._m70.y * log(_575 + _69._m72.x)) + _69._m70.z) - 10.0) + (_69._m72.y * _575)) + _69._m65.w, _69._m66.x, _69._m66.y); + _612 = pow(2.0, mix(_5, clamp(_598 + ((abs(_598) * _69._m66.z) * float(int(sign(_598)))), _69._m66.x, _69._m66.y), clamp(_69._m70.x, 0.0, 1.0))); + } else { + _612 = _4.z; + } + vec4 _625 = texture(sampler2D(_77, _10), fract(((_4.xy * vec2(1.60000002384185791015625, 0.89999997615814208984375)) * _69._m16.w) + _69._m16.xy)); + vec3 _635 = max(_552 * vec3(0.5), _552 + vec3((_522 * (_625.w - 0.5)) * _69._m16.z)); + vec3 _688; + if (floatBitsToInt(_69._m51.w) != 0) { + vec2 _664 = ((_4.xy - _69._m50.xy) * mat2(vec2(_69._m52.x, _69._m52.y), vec2(_69._m52.z, _69._m52.w))) * _69._m50.zw; + float _668 = max((dot(_664, _664) - _69._m53.x) * _69._m53.w, 0.0); + bool _669 = _668 < 1.0; + _688 = mix(_635, (_635 * _69._m51.xyz) * _69._m51.w, vec3(_669 ? (_669 ? (1.0 - pow(2.0, (-10.0) * _668)) : 1.0) : (0.9980499744415283203125 + (((_668 - 1.0) > 0.0) ? pow(2.0, 10.0 * (_668 - 2.0)) : 0.0)))); + } else { + _688 = _635; + } + _689 = _612; + _690 = _688; + } else { + _689 = _4.z; + _690 = _552; + } + vec3 _727 = _690 * mix(mix(_69._m54.xyz, _69._m56.xyz, vec3(clamp(clamp(_4.y * _69._m57.y, 0.0, 1.0) + _69._m54.w, 0.0, 1.0))), mix(_69._m56.xyz, _69._m55.xyz, vec3(clamp(clamp(clamp(_4.y - _69._m56.w, 0.0, 1.0) * _69._m57.x, 0.0, 1.0) - _69._m55.w, 0.0, 1.0))), vec3(_4.y)); + bool _730 = _67._m3 != 0u; + vec3 _793; + if (_730) { + vec3 _770 = max(vec3(0.0), _727 * (_689 / _67._m6)); + vec3 _773 = _770 * _516.x; + _793 = (((((_770 * (_773 + vec3(_517.x))) + vec3(_517.y)) / ((_770 * (_773 + vec3(_516.y))) + vec3(_517.z))) - vec3(_517.w)) * ((_67._m4 != 0u) ? _67._m10 : _516.z)) * _67._m6; + } else { + vec3 _736 = max(vec3(0.0), _727 * _689); + vec3 _739 = _736 * _516.x; + _793 = clamp(((((_736 * (_739 + vec3(_517.x))) + vec3(_517.y)) / ((_736 * (_739 + vec3(_516.y))) + vec3(_517.z))) - vec3(_517.w)) * _516.z, vec3(0.0), vec3(1.0)); + } + vec3 _841; + if (_553) { + vec3 _840; + if (floatBitsToInt(_69._m47.w) != 0) { + vec2 _826 = ((_4.xy - _69._m46.xy) * mat2(vec2(_69._m48.x, _69._m48.y), vec2(_69._m48.z, _69._m48.w))) * _69._m46.zw; + _840 = mix(_793, _69._m47.xyz, vec3(_69._m47.w * texture(sampler1D(_74, _10), min(1.0, max((dot(_826, _826) - _69._m49.x) * _69._m49.w, 0.0))).w)); + } else { + _840 = _793; + } + _841 = _840; + } else { + _841 = _793; + } + bool _862 = _730 && (!(_67._m2 != 0u)); +#if 1 + vec3 _864 = EncodeLUTInput(_841, _67._m11, _67._m12, _67._m13, _67._m14, _862); +#else + vec3 _864 = mix(mix((pow(_841, vec3(_67._m12)) * _67._m13) - vec3(_67._m14), _841 * _67._m11, lessThan(_841, vec3(0.003130800090730190277099609375))), _841, bvec3(_862)); +#endif + + vec3 _1020; + if (_553 && (floatBitsToInt(_69._m19.x) != 0)) { + vec2 _876 = _4.xy * _69._m17.w; + float _942 = (((((((fract(sin(dot(_876 + vec2(0.070000000298023223876953125 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875) + fract(sin(dot(_876 + vec2(0.10999999940395355224609375 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_876 + vec2(0.12999999523162841796875 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_876 + vec2(0.17000000178813934326171875 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_876 + vec2(0.189999997615814208984375 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_876 + vec2(0.23000000417232513427734375 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_876 + vec2(0.2899999916553497314453125 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_876 + vec2(0.310000002384185791015625 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) * 0.125; + float _944 = clamp(_942 + _69._m17.z, 0.0, 1.0); + vec3 _1019; + do { + if (!(floatBitsToInt(_69._m18.w) != 0)) { + _1019 = vec3(_944); + break; + } + float _967; + if (floatBitsToInt(_69._m18.y) != 0) { + float _962 = dot(_864, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)); + _967 = mix(_944, _944 * 0.5, (_962 * _962) * _962); + } else { + _967 = _944; + } + vec3 _1018; + if (floatBitsToInt(_69._m19.z) != 0) { + vec3 _1000 = vec3(_967); + vec3 _1002 = _1000 * 2.0; + _1018 = mix(_864, mix(((_864 * 2.0) * (vec3(1.0) - _1000)) + (sqrt(_864) * (_1002 - vec3(1.0))), (_1002 * _864) + ((_864 * _864) * (vec3(1.0) - _1002)), lessThan(_1000, vec3(0.5))), vec3(_69._m18.x)); + } else { + vec3 _999; + if (floatBitsToInt(_69._m19.w) != 0) { + vec3 _987 = vec3(_967); + _999 = mix(_864, mix(vec3(1.0) - (((vec3(1.0) - _987) * 2.0) * (vec3(1.0) - _864)), (_987 * 2.0) * _864, lessThan(_864, vec3(0.5))), vec3(_69._m18.x)); + } else { + _999 = clamp(max(_864 * 0.02500000037252902984619140625, _864 + vec3((_967 - 0.5) * _69._m18.x)), vec3(0.0), vec3(1.0)); + } + _1018 = _999; + } + _1019 = _1018; + break; + } while (false); + _1020 = _1019; + } else { + _1020 = _864; + } + vec3 _1022 = max(_1020 * mat3(vec3(0.514900028705596923828125, 0.324400007724761962890625, 0.1606999933719635009765625), vec3(0.265399992465972900390625, 0.67040002346038818359375, 0.06419999897480010986328125), vec3(0.02480000071227550506591796875, 0.1247999966144561767578125, 0.85039997100830078125)), vec3(0.00999999977648258209228515625, 0.0, 0.0)); + float _1023 = _1022.y; + vec3 _1048 = mix(_1020, clamp((_69._m81.xyz * (_1023 * ((1.33000004291534423828125 * (1.0 + ((_1023 + _1022.z) / _1022.x))) - 1.67999994754791259765625))) * _69._m81.w, vec3(0.0), vec3(1.0)), vec3(clamp(((0.039999999105930328369140625 / (0.039999999105930328369140625 + _522)) * _69._m82.x) + _69._m82.y, 0.0, 1.0))); + vec3 _1078; + if (floatBitsToInt(_69._m84.w) != 0) { + _1078 = mix(_1048, texture(sampler2D(_91, _10), ((((_4.xy - vec2(0.5)) * _69._m84.z) / mix(_69._m85.wx, _69._m85.zy, _4.yx)) - _69._m84.xy) + vec2(0.5)).xyz, vec3(_69._m84.w)); + } else { + _1078 = _1048; + } + vec3 _1389; + if (_553) { + float _1097 = max(max(_1078.x, max(_1078.y, _1078.z)), 9.9999997473787516355514526367188e-05); + float _1103 = (_862 && (!(_67._m5 != 0u))) ? 1.0 : (((_1097 > _67._m7) ? ((_1097 * _67._m8) + _67._m9) : _1097) / _1097); + vec3 _1104 = _1078 * _1103; + float _1107 = _1104.z; + float _1109 = floor(_1107 * 14.99989986419677734375); + float _1115 = (_1109 * 0.0625) + (_1104.x * 0.05859375); + float _1117 = _1104.y * 0.9375; + vec4 _1121 = texture(sampler2D(_87, _10), vec2(0.001953125, 0.03125) + vec2(_1115, _1117)); + vec4 _1127 = texture(sampler2D(_87, _10), vec2(0.001953125, 0.03125) + vec2(_1115 + 0.0625, _1117)); + vec3 _1130 = mix(_1121.xyz, _1127.xyz, vec3((_1107 * 15.0) - _1109)); + vec3 _1386; + if (_99._m0[0u]._m0._m0 > 0) { + vec4 _1138 = texture(sampler2D(_80, _8), _4.xy); + vec4 _1141 = _1138 * _99._m0[0u]._m0._m1; + vec4 _1144 = texture(sampler2D(_89, _10), _4.xy); + float _1146 = dot(_1144.xyz, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)); + float _1148 = clamp(_1141.x, 0.0, 1.0); + float _1150 = _1146 * _1148; + vec3 _1180; + if (_1150 != 0.0) { + float _1154 = _1130.z; + float _1156 = floor(_1154 * 14.99989986419677734375); + float _1162 = (_1156 * 0.0625) + (_1130.x * 0.05859375); + float _1164 = _1130.y * 0.9375; + _1180 = mix(_1130, mix(texture(sampler2D(_83, _10), vec2(0.001953125, 0.03125) + vec2(_1162, _1164)).xyz, texture(sampler2D(_83, _10), vec2(0.001953125, 0.03125) + vec2(_1162 + 0.0625, _1164)).xyz, vec3((_1154 * 15.0) - _1156)), vec3(_1150)); + } else { + _1180 = _1130; + } + float _1182 = clamp(_1141.y, 0.0, 1.0); + float _1184 = _1146 * _1182; + vec3 _1214; + if (_1184 != 0.0) { + float _1190 = floor(_1180.z * 14.99989986419677734375); + float _1196 = (_1190 * 0.0625) + (_1180.x * 0.05859375); + float _1198 = _1180.y * 0.9375; + _1214 = mix(_1180, mix(texture(sampler2D(_84, _10), vec2(0.001953125, 0.03125) + vec2(_1196, _1198)).xyz, texture(sampler2D(_84, _10), vec2(0.001953125, 0.03125) + vec2(_1196 + 0.0625, _1198)).xyz, vec3((_1180.z * 15.0) - _1190)), vec3(_1184)); + } else { + _1214 = _1180; + } + float _1216 = clamp(_1141.z, 0.0, 1.0); + float _1218 = _1146 * _1216; + vec3 _1248; + if (_1218 != 0.0) { + float _1224 = floor(_1214.z * 14.99989986419677734375); + float _1230 = (_1224 * 0.0625) + (_1214.x * 0.05859375); + float _1232 = _1214.y * 0.9375; + _1248 = mix(_1214, mix(texture(sampler2D(_85, _10), vec2(0.001953125, 0.03125) + vec2(_1230, _1232)).xyz, texture(sampler2D(_85, _10), vec2(0.001953125, 0.03125) + vec2(_1230 + 0.0625, _1232)).xyz, vec3((_1214.z * 15.0) - _1224)), vec3(_1218)); + } else { + _1248 = _1214; + } + float _1250 = clamp(_1141.w, 0.0, 1.0); + float _1252 = _1146 * _1250; + vec3 _1282; + if (_1252 != 0.0) { + float _1258 = floor(_1248.z * 14.99989986419677734375); + float _1264 = (_1258 * 0.0625) + (_1248.x * 0.05859375); + float _1266 = _1248.y * 0.9375; + _1282 = mix(_1248, mix(texture(sampler2D(_86, _10), vec2(0.001953125, 0.03125) + vec2(_1264, _1266)).xyz, texture(sampler2D(_86, _10), vec2(0.001953125, 0.03125) + vec2(_1264 + 0.0625, _1266)).xyz, vec3((_1248.z * 15.0) - _1258)), vec3(_1252)); + } else { + _1282 = _1248; + } + float _1318 = floor(_1282.z * 14.99989986419677734375); + float _1324 = (_1318 * 0.0625) + (_1282.x * 0.05859375); + float _1326 = _1282.y * 0.9375; + vec3 _1341 = mix(_1282, mix(texture(sampler2D(_81, _10), vec2(0.001953125, 0.03125) + vec2(_1324, _1326)).xyz, texture(sampler2D(_81, _10), vec2(0.001953125, 0.03125) + vec2(_1324 + 0.0625, _1326)).xyz, vec3((_1282.z * 15.0) - _1318)), vec3(clamp(((_313 < _99._m0[0u]._m1[0]._m2) ? clamp((_313 - _99._m0[0u]._m1[0]._m0) * _99._m0[0u]._m1[0]._m1, 0.0, 1.0) : (1.0 - clamp((_313 - _99._m0[0u]._m1[0]._m2) * _99._m0[0u]._m1[0]._m3, 0.0, 1.0))) + _99._m0[0u]._m1[0]._m4, 0.0, 1.0))); + float _1353 = _1341.z; + float _1355 = floor(_1353 * 14.99989986419677734375); + float _1361 = (_1355 * 0.0625) + (_1341.x * 0.05859375); + float _1363 = _1341.y * 0.9375; + _1386 = mix(_1341, mix(_1341, mix(texture(sampler2D(_82, _10), vec2(0.001953125, 0.03125) + vec2(_1361, _1363)).xyz, texture(sampler2D(_82, _10), vec2(0.001953125, 0.03125) + vec2(_1361 + 0.0625, _1363)).xyz, vec3((_1353 * 15.0) - _1355)), vec3(clamp(((_313 < _99._m0[0u]._m1[1]._m2) ? clamp((_313 - _99._m0[0u]._m1[1]._m0) * _99._m0[0u]._m1[1]._m1, 0.0, 1.0) : (1.0 - clamp((_313 - _99._m0[0u]._m1[1]._m2) * _99._m0[0u]._m1[1]._m3, 0.0, 1.0))) + _99._m0[0u]._m1[1]._m4, 0.0, 1.0))), vec3(dot(texture(sampler2D(_88, _10), _4.xy).xyz, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)) * (1.0 - clamp(((_1148 + _1182) + _1216) + _1250, 0.0, 1.0)))); + } else { + _1386 = _1130; + } + _1389 = _1386 / vec3(_1103); + } else { + _1389 = _1078; + } + +#if 1 + _1389 = DecodeLUTInput(_1389); +#endif + + vec4 _1394 = vec4(_1389, dot(_1389, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625))); + vec3 _1395 = _1394.xyz; + ivec4 _1437 = ivec4(uvec4(uvec2(ivec2(uvec2(gl_FragCoord.xy))) & uvec2(63u), uint(int(_60._m0[0u]._m22) & 31), 0u)); + vec3 _1445 = (vec3(texelFetch(_63, _1437.xyz, _1437.w).x) * 2.0) - vec3(1.0); + vec3 _1456; + if (_730) { + _1456 = vec3(ivec3(sign(_1445))) * (vec3(1.0) - sqrt(vec3(1.0) - abs(_1445))); + } else { + _1456 = _1445; + } + vec3 _1458 = _1395 + (_1456 * mix(_69._m39.xyz, _69._m40.xyz, pow(clamp((mix(vec3(max(_1389.x, max(_1389.y, _1389.z))), _1395, bvec3(floatBitsToInt(_69._m41.w) != 0)) - _69._m42.xyz) * _69._m41.xyz, vec3(0.0), vec3(1.0)), vec3(_69._m42.w)))); + vec4 _1459 = vec4(_1458.x, _1458.y, _1458.z, _1394.w); + vec4 _1464; + if (!_730) { + _1464 = clamp(_1459, vec4(0.0), vec4(1.0)); + } else { + _1464 = _1459; + } + _6 = _1464; +} + diff --git a/src/games/rdr2vk/tonemap/0xE3E0B5C4.frag.glsl b/src/games/rdr2vk/tonemap/0xE3E0B5C4.frag.glsl new file mode 100644 index 0000000000..173e002523 --- /dev/null +++ b/src/games/rdr2vk/tonemap/0xE3E0B5C4.frag.glsl @@ -0,0 +1,950 @@ +#version 450 + +#extension GL_GOOGLE_include_directive : require +#include "./tonemap.glsl" + +#extension GL_EXT_scalar_block_layout : require +#extension GL_EXT_samplerless_texture_functions : require + +struct _12 { + float _m0; +}; + +struct _14 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; +}; + +struct _13 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + _14 _m5; +}; + +struct _16 { + vec4 _m0; + vec4 _m1; + mat4 _m2; +}; + +struct _17 { + vec4 _m0; + vec4 _m1; +}; + +struct _18 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + vec4 _m5; + vec4 _m6; +}; + +struct _19 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; +}; + +struct _15 { + _16 _m0[2]; + _17 _m1; + _18 _m2; + _19 _m3; + vec4 _m4[3]; + vec2 _m5; + vec2 _m6; + vec2 _m7; + float _m8; + vec4 _m9[4]; + vec2 _m10; + vec2 _m11; + vec4 _m12; + vec4 _m13; + vec4 _m14; + vec4 _m15[4]; + float _m16; + int _m17; + float _m18; + float _m19; +}; + +struct _21 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; +}; + +struct _22 { + float _m0; + float _m1; + float _m2; +}; + +struct _23 { + float _m0; + float _m1; + float _m2; + float _m3; + vec3 _m4; + int _m5; +}; + +struct _20 { + _21 _m0; + _22 _m1; + _23 _m2; + vec2 _m3; + vec2 _m4; + vec4 _m5; + float _m6; + float _m7; + uint _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + float _m16; + float _m17; +}; + +struct _24 { + vec4 _m0[5]; +}; + +struct _25 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _26 { + float _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _27 { + int _m0; + int _m1; +}; + +struct _28 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + vec2 _m6; + float _m7; + float _m8; + float _m9; + float _m10; +}; + +struct _11 { + float _m0; + vec4 _m1; + float _m2; + vec4 _m3; + uvec4 _m4; + uvec4 _m5; + vec4 _m6; + int _m7; + int _m8; + int _m9; + vec4 _m10; + vec4 _m11[8]; + uint _m12; + vec3 _m13; + vec3 _m14; + vec2 _m15; + vec2 _m16; + mat3 _m17; + vec3 _m18; + vec3 _m19; + float _m20; + float _m21; + vec3 _m22; + vec3 _m23; + vec3 _m24; + vec3 _m25; + vec4 _m26[13]; + int _m27; + vec4 _m28; + vec4 _m29; + vec4 _m30; + vec3 _m31; + vec3 _m32; + vec3 _m33; + vec3 _m34; + vec4 _m35; + float _m36; + float _m37; + float _m38; + float _m39; + mat4 _m40; + _12 _m41; + _13 _m42; + _15 _m43; + _20 _m44; + _24 _m45; + _25 _m46; + _26 _m47[5]; + vec4 _m48; + _27 _m49; + vec4 _m50; + _28 _m51; +}; + +struct _32 { + float _m0; + vec3 _m1; + vec3 _m2; + vec3 _m3; + float _m4; + vec3 _m5; + vec3 _m6; + float _m7; + vec3 _m8; + vec3 _m9; + vec2 _m10; + vec3 _m11; + vec4 _m12; + vec4 _m13[4]; + vec4 _m14; + float _m15; + int _m16; +}; + +struct _33 { + float _m0; +}; + +struct _35 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + uint _m6; + uint _m7; + uvec4 _m8; +}; + +struct _34 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + _35 _m3; + vec2 _m4; +}; + +struct _37 { + float _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _38 { + int _m0; +}; + +struct _39 { + _38 _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _36 { + vec3 _m0; + vec3 _m1; + float _m2; + float _m3; + _37 _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + uint _m15; + _38 _m16; + _38 _m17; + _39 _m18; + vec4 _m19; + float _m20; + float _m21; + float _m22; + float _m23; + float _m24; + float _m25; + float _m26; + float _m27; +}; + +struct _41 { + vec3 _m0; + float _m1; +}; + +struct _42 { + vec4 _m0; + vec4 _m1; + vec4 _m2; +}; + +struct _43 { + vec2 _m0; + vec2 _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + vec2 _m8; + float _m9; +}; + +struct _44 { + float _m0; + _38 _m1; +}; + +struct _45 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _46 { + _38 _m0; + float _m1; + float _m2; +}; + +struct _48 { + int _m0; +}; + +struct _47 { + _38 _m0; + _48 _m1; + _48 _m2; +}; + +struct _49 { + _38 _m0; +}; + +struct _40 { + _41 _m0; + vec4 _m1; + mat4 _m2; + mat4 _m3; + _42 _m4; + _43 _m5; + _44 _m6; + _45 _m7; + _46 _m8; + _47 _m9; + _49 _m10; + float _m11; + float _m12; + float _m13; +}; + +struct _50 { + float _m0; + float _m1; + vec2 _m2; + vec2 _m3; + vec2 _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; +}; + +struct _51 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec3 _m3; + vec3 _m4; + vec3 _m5; + vec3 _m6; + vec3 _m7; +}; + +struct _52 { + vec4 _m0; + vec4 _m1; + vec3 _m2; +}; + +struct _53 { + vec4 _m0; + vec4 _m1; +}; + +struct _55 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; +}; + +struct _54 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + float _m16; + float _m17; + float _m18; + _55 _m19[2]; +}; + +struct _56 { + vec2 _m0; + vec2 _m1; + vec2 _m2; + float _m3; + float _m4; + float _m5; + vec2 _m6; +}; + +struct _57 { + vec4 _m0; + vec4 _m1; + vec2 _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _58 { + vec3 _m0; + float _m1; + float _m2; +}; + +struct _31 { + float _m0[32]; + float _m1[32]; + _32 _m2; + _32 _m3; + _33 _m4; + _34 _m5; + _36 _m6; + _40 _m7; + _50 _m8; + _51 _m9; + float _m10; + vec2 _m11; + _52 _m12; + _53 _m13; + float _m14; + float _m15; + vec4 _m16; + _54 _m17; + _56 _m18; + _57 _m19; + vec4 _m20; + float _m21; + uint _m22; + uvec2 _m23; + uvec2 _m24; + uint _m25; + float _m26; + float _m27; + float _m28; + float _m29; + _58 _m30; + int _m31; +}; + +struct _92 { + int _m0; + float _m1; + int _m2[2]; +}; + +struct _93 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; +}; + +struct _91 { + _92 _m0; + _93 _m1[11]; +}; + +float _280; + +layout(set = 0, binding = 98, scalar) readonly buffer _10_29 { + _11 _m0[]; +} +_29; + +layout(set = 0, binding = 99, scalar) readonly buffer _30_59 { + _31 _m0[]; +} +_59; + +layout(set = 0, binding = 20, std140) uniform _65_66 { + float _m0; + float _m1; + uint _m2; + uint _m3; + uint _m4; + uint _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + uint _m16; + uint _m17; + uint _m18; + uint _m19; +} +_66; + +layout(set = 1, binding = 16, std140) uniform _67_68 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + vec4 _m5; + vec4 _m6; + vec4 _m7; + vec4 _m8; + vec4 _m9; + vec4 _m10; + vec4 _m11; + vec4 _m12; + vec4 _m13; + vec4 _m14; + vec2 _m15; + vec4 _m16; + vec4 _m17; + vec4 _m18; + vec4 _m19; + vec4 _m20; + vec4 _m21; + vec4 _m22; + vec4 _m23; + vec4 _m24; + vec3 _m25; + vec3 _m26; + vec3 _m27; + vec4 _m28; + vec4 _m29; + vec4 _m30; + vec4 _m31; + vec4 _m32; + vec4 _m33; + vec4 _m34; + vec4 _m35; + vec4 _m36; + vec4 _m37; + vec3 _m38; + vec4 _m39; + vec4 _m40; + vec4 _m41; + vec4 _m42; + mat4 _m43; + vec4 _m44; + vec4 _m45; + vec4 _m46; + vec4 _m47; + vec4 _m48; + vec4 _m49; + vec4 _m50; + vec4 _m51; + vec4 _m52; + vec4 _m53; + vec4 _m54; + vec4 _m55; + vec4 _m56; + vec4 _m57; + float _m58; + vec4 _m59; + vec4 _m60; + float _m61; + vec4 _m62; + vec4 _m63; + vec2 _m64; + vec4 _m65; + vec4 _m66; + vec4 _m67; + vec4 _m68; + vec4 _m69; + vec4 _m70; + vec4 _m71; + vec4 _m72; + vec4 _m73; + vec4 _m74; + vec4 _m75; + vec4 _m76; + vec4 _m77; + vec3 _m78; + float _m79; + vec4 _m80; + vec4 _m81; + vec4 _m82; + vec4 _m83; + vec4 _m84; + vec4 _m85; +} +_68; + +layout(set = 0, binding = 214, std430) readonly buffer _90_94 { + _91 _m0[]; +} +_94; + +layout(set = 1, binding = 32) uniform sampler _8; +layout(set = 1, binding = 34) uniform sampler _9; +layout(set = 0, binding = 121) uniform texture2DArray _62; +layout(set = 0, binding = 140) uniform texture2D _63; +layout(set = 1, binding = 174) uniform texture2D _69; +layout(set = 1, binding = 177) uniform texture2D _70; +layout(set = 1, binding = 185) uniform texture1D _72; +layout(set = 1, binding = 40) uniform sampler _73; +layout(set = 1, binding = 186) uniform texture2D _74; +layout(set = 1, binding = 189) uniform texture2D _75; +layout(set = 1, binding = 194) uniform texture2D _76; +layout(set = 1, binding = 196) uniform texture2D _77; +layout(set = 1, binding = 197) uniform texture2D _78; +layout(set = 1, binding = 198) uniform texture2D _79; +layout(set = 1, binding = 199) uniform texture2D _80; +layout(set = 1, binding = 200) uniform texture2D _81; +layout(set = 1, binding = 201) uniform texture2D _82; +layout(set = 1, binding = 202) uniform texture2D _83; +layout(set = 1, binding = 203) uniform texture2D _84; +layout(set = 1, binding = 204) uniform texture2D _85; +layout(set = 1, binding = 205) uniform texture2D _86; +layout(set = 1, binding = 206) uniform texture2D _87; +layout(set = 1, binding = 207) uniform texture2D _88; +layout(set = 1, binding = 212) uniform samplerBuffer _89; + +layout(location = 0) in vec4 _4; +layout(location = 1) in float _5; +layout(location = 0) out vec4 _6; + +void main() { + vec4 _290 = texture(sampler2D(_87, _8), _4.xy); + vec2 _291 = _290.xy; + float _302 = _68._m0.z / ((1.0 + _68._m0.w) - textureLod(sampler2D(_69, _8), _291, 0.0).x); + vec4 _306 = texture(sampler2D(_74, _73), _291); + vec3 _320 = vec4(vec4(_306.xyz, 0.0).xyz * _29._m0[0u]._m1.w, _280).xyz; + vec4 _323 = texelFetch(_89, int(0u)); + vec4 _324 = texelFetch(_89, int(1u)); + float _329 = dot(_320 * texelFetch(_63, ivec2(0), 0).x, vec3(0.300000011920928955078125, 0.589999973773956298828125, 0.10999999940395355224609375)); + bool _354; + vec3 _355; + if (floatBitsToInt(_68._m61) != 0) { + vec4 _340 = texture(sampler2D(_86, _73), _4.xy); + float _341 = _340.w; + bool _343 = (_341 + 9.9999997473787516355514526367188e-05) >= 1.0; + vec3 _352; + if (_343) { + _352 = _340.xyz; + } else { + _352 = _340.xyz + (_320 * (1.0 - _341)); + } + _354 = _343 ? true : false; + _355 = _352; + } else { + _354 = false; + _355 = _320; + } + vec3 _359 = min(_355 * texelFetch(_63, ivec2(0), 0).x, vec3(65504.0)); + bool _360 = !_354; + float _496; + vec3 _497; + if (_360) { + float _419; + if (floatBitsToInt(_68._m70.x) != 0) { + float _382 = clamp(dot(texture(sampler2D(_70, _9), _291).xyz * texelFetch(_63, ivec2(0), 0).x, vec3(0.300000011920928955078125, 0.589999973773956298828125, 0.10999999940395355224609375)), _68._m72.z, _68._m72.w); + float _405 = clamp(((((_68._m70.y * log(_382 + _68._m72.x)) + _68._m70.z) - 10.0) + (_68._m72.y * _382)) + _68._m65.w, _68._m66.x, _68._m66.y); + _419 = pow(2.0, mix(_5, clamp(_405 + ((abs(_405) * _68._m66.z) * float(int(sign(_405)))), _68._m66.x, _68._m66.y), clamp(_68._m70.x, 0.0, 1.0))); + } else { + _419 = _4.z; + } + vec4 _432 = texture(sampler2D(_75, _9), fract(((_4.xy * vec2(1.60000002384185791015625, 0.89999997615814208984375)) * _68._m16.w) + _68._m16.xy)); + vec3 _442 = max(_359 * vec3(0.5), _359 + vec3((_329 * (_432.w - 0.5)) * _68._m16.z)); + vec3 _495; + if (floatBitsToInt(_68._m51.w) != 0) { + vec2 _471 = ((_4.xy - _68._m50.xy) * mat2(vec2(_68._m52.x, _68._m52.y), vec2(_68._m52.z, _68._m52.w))) * _68._m50.zw; + float _475 = max((dot(_471, _471) - _68._m53.x) * _68._m53.w, 0.0); + bool _476 = _475 < 1.0; + _495 = mix(_442, (_442 * _68._m51.xyz) * _68._m51.w, vec3(_476 ? (_476 ? (1.0 - pow(2.0, (-10.0) * _475)) : 1.0) : (0.9980499744415283203125 + (((_475 - 1.0) > 0.0) ? pow(2.0, 10.0 * (_475 - 2.0)) : 0.0)))); + } else { + _495 = _442; + } + _496 = _419; + _497 = _495; + } else { + _496 = _4.z; + _497 = _359; + } + vec3 _534 = _497 * mix(mix(_68._m54.xyz, _68._m56.xyz, vec3(clamp(clamp(_4.y * _68._m57.y, 0.0, 1.0) + _68._m54.w, 0.0, 1.0))), mix(_68._m56.xyz, _68._m55.xyz, vec3(clamp(clamp(clamp(_4.y - _68._m56.w, 0.0, 1.0) * _68._m57.x, 0.0, 1.0) - _68._m55.w, 0.0, 1.0))), vec3(_4.y)); + bool _537 = _66._m3 != 0u; + vec3 _600; + if (_537) { + vec3 _577 = max(vec3(0.0), _534 * (_496 / _66._m6)); + vec3 _580 = _577 * _323.x; + _600 = (((((_577 * (_580 + vec3(_324.x))) + vec3(_324.y)) / ((_577 * (_580 + vec3(_323.y))) + vec3(_324.z))) - vec3(_324.w)) * ((_66._m4 != 0u) ? _66._m10 : _323.z)) * _66._m6; + } else { + vec3 _543 = max(vec3(0.0), _534 * _496); + vec3 _546 = _543 * _323.x; + _600 = clamp(((((_543 * (_546 + vec3(_324.x))) + vec3(_324.y)) / ((_543 * (_546 + vec3(_323.y))) + vec3(_324.z))) - vec3(_324.w)) * _323.z, vec3(0.0), vec3(1.0)); + } + vec3 _648; + if (_360) { + vec3 _647; + if (floatBitsToInt(_68._m47.w) != 0) { + vec2 _633 = ((_4.xy - _68._m46.xy) * mat2(vec2(_68._m48.x, _68._m48.y), vec2(_68._m48.z, _68._m48.w))) * _68._m46.zw; + _647 = mix(_600, _68._m47.xyz, vec3(_68._m47.w * texture(sampler1D(_72, _9), min(1.0, max((dot(_633, _633) - _68._m49.x) * _68._m49.w, 0.0))).w)); + } else { + _647 = _600; + } + _648 = _647; + } else { + _648 = _600; + } + bool _669 = _537 && (!(_66._m2 != 0u)); + +#if 1 + vec3 _671 = EncodeLUTInput(_648, _66._m11, _66._m12, _66._m13, _66._m14, _669); +#else + vec3 _671 = mix(mix((pow(_648, vec3(_66._m12)) * _66._m13) - vec3(_66._m14), _648 * _66._m11, lessThan(_648, vec3(0.003130800090730190277099609375))), _648, bvec3(_669)); +#endif + + vec3 _827; + if (_360 && (floatBitsToInt(_68._m19.x) != 0)) { + vec2 _683 = _4.xy * _68._m17.w; + float _749 = (((((((fract(sin(dot(_683 + vec2(0.070000000298023223876953125 * _68._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875) + fract(sin(dot(_683 + vec2(0.10999999940395355224609375 * _68._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_683 + vec2(0.12999999523162841796875 * _68._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_683 + vec2(0.17000000178813934326171875 * _68._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_683 + vec2(0.189999997615814208984375 * _68._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_683 + vec2(0.23000000417232513427734375 * _68._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_683 + vec2(0.2899999916553497314453125 * _68._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_683 + vec2(0.310000002384185791015625 * _68._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) * 0.125; + float _751 = clamp(_749 + _68._m17.z, 0.0, 1.0); + vec3 _826; + do { + if (!(floatBitsToInt(_68._m18.w) != 0)) { + _826 = vec3(_751); + break; + } + float _774; + if (floatBitsToInt(_68._m18.y) != 0) { + float _769 = dot(_671, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)); + _774 = mix(_751, _751 * 0.5, (_769 * _769) * _769); + } else { + _774 = _751; + } + vec3 _825; + if (floatBitsToInt(_68._m19.z) != 0) { + vec3 _807 = vec3(_774); + vec3 _809 = _807 * 2.0; + _825 = mix(_671, mix(((_671 * 2.0) * (vec3(1.0) - _807)) + (sqrt(_671) * (_809 - vec3(1.0))), (_809 * _671) + ((_671 * _671) * (vec3(1.0) - _809)), lessThan(_807, vec3(0.5))), vec3(_68._m18.x)); + } else { + vec3 _806; + if (floatBitsToInt(_68._m19.w) != 0) { + vec3 _794 = vec3(_774); + _806 = mix(_671, mix(vec3(1.0) - (((vec3(1.0) - _794) * 2.0) * (vec3(1.0) - _671)), (_794 * 2.0) * _671, lessThan(_671, vec3(0.5))), vec3(_68._m18.x)); + } else { + _806 = clamp(max(_671 * 0.02500000037252902984619140625, _671 + vec3((_774 - 0.5) * _68._m18.x)), vec3(0.0), vec3(1.0)); + } + _825 = _806; + } + _826 = _825; + break; + } while (false); + _827 = _826; + } else { + _827 = _671; + } + vec3 _829 = max(_827 * mat3(vec3(0.514900028705596923828125, 0.324400007724761962890625, 0.1606999933719635009765625), vec3(0.265399992465972900390625, 0.67040002346038818359375, 0.06419999897480010986328125), vec3(0.02480000071227550506591796875, 0.1247999966144561767578125, 0.85039997100830078125)), vec3(0.00999999977648258209228515625, 0.0, 0.0)); + float _830 = _829.y; + vec3 _855 = mix(_827, clamp((_68._m81.xyz * (_830 * ((1.33000004291534423828125 * (1.0 + ((_830 + _829.z) / _829.x))) - 1.67999994754791259765625))) * _68._m81.w, vec3(0.0), vec3(1.0)), vec3(clamp(((0.039999999105930328369140625 / (0.039999999105930328369140625 + _329)) * _68._m82.x) + _68._m82.y, 0.0, 1.0))); + vec3 _885; + if (floatBitsToInt(_68._m84.w) != 0) { + _885 = mix(_855, texture(sampler2D(_88, _9), ((((_4.xy - vec2(0.5)) * _68._m84.z) / mix(_68._m85.wx, _68._m85.zy, _4.yx)) - _68._m84.xy) + vec2(0.5)).xyz, vec3(_68._m84.w)); + } else { + _885 = _855; + } + vec3 _1196; + if (_360) { + float _904 = max(max(_885.x, max(_885.y, _885.z)), 9.9999997473787516355514526367188e-05); + float _910 = (_669 && (!(_66._m5 != 0u))) ? 1.0 : (((_904 > _66._m7) ? ((_904 * _66._m8) + _66._m9) : _904) / _904); + vec3 _911 = _885 * _910; + float _914 = _911.z; + float _916 = floor(_914 * 14.99989986419677734375); + float _922 = (_916 * 0.0625) + (_911.x * 0.05859375); + float _924 = _911.y * 0.9375; + vec4 _928 = texture(sampler2D(_83, _9), vec2(0.001953125, 0.03125) + vec2(_922, _924)); + vec4 _934 = texture(sampler2D(_83, _9), vec2(0.001953125, 0.03125) + vec2(_922 + 0.0625, _924)); + vec3 _937 = mix(_928.xyz, _934.xyz, vec3((_914 * 15.0) - _916)); + vec3 _1193; + if (_94._m0[0u]._m0._m0 > 0) { + vec4 _945 = texture(sampler2D(_76, _8), _291); + vec4 _948 = _945 * _94._m0[0u]._m0._m1; + vec4 _951 = texture(sampler2D(_85, _9), _291); + float _953 = dot(_951.xyz, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)); + float _955 = clamp(_948.x, 0.0, 1.0); + float _957 = _953 * _955; + vec3 _987; + if (_957 != 0.0) { + float _961 = _937.z; + float _963 = floor(_961 * 14.99989986419677734375); + float _969 = (_963 * 0.0625) + (_937.x * 0.05859375); + float _971 = _937.y * 0.9375; + _987 = mix(_937, mix(texture(sampler2D(_79, _9), vec2(0.001953125, 0.03125) + vec2(_969, _971)).xyz, texture(sampler2D(_79, _9), vec2(0.001953125, 0.03125) + vec2(_969 + 0.0625, _971)).xyz, vec3((_961 * 15.0) - _963)), vec3(_957)); + } else { + _987 = _937; + } + float _989 = clamp(_948.y, 0.0, 1.0); + float _991 = _953 * _989; + vec3 _1021; + if (_991 != 0.0) { + float _997 = floor(_987.z * 14.99989986419677734375); + float _1003 = (_997 * 0.0625) + (_987.x * 0.05859375); + float _1005 = _987.y * 0.9375; + _1021 = mix(_987, mix(texture(sampler2D(_80, _9), vec2(0.001953125, 0.03125) + vec2(_1003, _1005)).xyz, texture(sampler2D(_80, _9), vec2(0.001953125, 0.03125) + vec2(_1003 + 0.0625, _1005)).xyz, vec3((_987.z * 15.0) - _997)), vec3(_991)); + } else { + _1021 = _987; + } + float _1023 = clamp(_948.z, 0.0, 1.0); + float _1025 = _953 * _1023; + vec3 _1055; + if (_1025 != 0.0) { + float _1031 = floor(_1021.z * 14.99989986419677734375); + float _1037 = (_1031 * 0.0625) + (_1021.x * 0.05859375); + float _1039 = _1021.y * 0.9375; + _1055 = mix(_1021, mix(texture(sampler2D(_81, _9), vec2(0.001953125, 0.03125) + vec2(_1037, _1039)).xyz, texture(sampler2D(_81, _9), vec2(0.001953125, 0.03125) + vec2(_1037 + 0.0625, _1039)).xyz, vec3((_1021.z * 15.0) - _1031)), vec3(_1025)); + } else { + _1055 = _1021; + } + float _1057 = clamp(_948.w, 0.0, 1.0); + float _1059 = _953 * _1057; + vec3 _1089; + if (_1059 != 0.0) { + float _1065 = floor(_1055.z * 14.99989986419677734375); + float _1071 = (_1065 * 0.0625) + (_1055.x * 0.05859375); + float _1073 = _1055.y * 0.9375; + _1089 = mix(_1055, mix(texture(sampler2D(_82, _9), vec2(0.001953125, 0.03125) + vec2(_1071, _1073)).xyz, texture(sampler2D(_82, _9), vec2(0.001953125, 0.03125) + vec2(_1071 + 0.0625, _1073)).xyz, vec3((_1055.z * 15.0) - _1065)), vec3(_1059)); + } else { + _1089 = _1055; + } + float _1125 = floor(_1089.z * 14.99989986419677734375); + float _1131 = (_1125 * 0.0625) + (_1089.x * 0.05859375); + float _1133 = _1089.y * 0.9375; + vec3 _1148 = mix(_1089, mix(texture(sampler2D(_77, _9), vec2(0.001953125, 0.03125) + vec2(_1131, _1133)).xyz, texture(sampler2D(_77, _9), vec2(0.001953125, 0.03125) + vec2(_1131 + 0.0625, _1133)).xyz, vec3((_1089.z * 15.0) - _1125)), vec3(clamp(((_302 < _94._m0[0u]._m1[0]._m2) ? clamp((_302 - _94._m0[0u]._m1[0]._m0) * _94._m0[0u]._m1[0]._m1, 0.0, 1.0) : (1.0 - clamp((_302 - _94._m0[0u]._m1[0]._m2) * _94._m0[0u]._m1[0]._m3, 0.0, 1.0))) + _94._m0[0u]._m1[0]._m4, 0.0, 1.0))); + float _1160 = _1148.z; + float _1162 = floor(_1160 * 14.99989986419677734375); + float _1168 = (_1162 * 0.0625) + (_1148.x * 0.05859375); + float _1170 = _1148.y * 0.9375; + _1193 = mix(_1148, mix(_1148, mix(texture(sampler2D(_78, _9), vec2(0.001953125, 0.03125) + vec2(_1168, _1170)).xyz, texture(sampler2D(_78, _9), vec2(0.001953125, 0.03125) + vec2(_1168 + 0.0625, _1170)).xyz, vec3((_1160 * 15.0) - _1162)), vec3(clamp(((_302 < _94._m0[0u]._m1[1]._m2) ? clamp((_302 - _94._m0[0u]._m1[1]._m0) * _94._m0[0u]._m1[1]._m1, 0.0, 1.0) : (1.0 - clamp((_302 - _94._m0[0u]._m1[1]._m2) * _94._m0[0u]._m1[1]._m3, 0.0, 1.0))) + _94._m0[0u]._m1[1]._m4, 0.0, 1.0))), vec3(dot(texture(sampler2D(_84, _9), _291).xyz, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)) * (1.0 - clamp(((_955 + _989) + _1023) + _1057, 0.0, 1.0)))); + } else { + _1193 = _937; + } + _1196 = _1193 / vec3(_910); + } else { + _1196 = _885; + } + +#if 1 + _1196 = DecodeLUTInput(_1196); +#endif + + vec4 _1201 = vec4(_1196, dot(_1196, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625))); + vec3 _1202 = _1201.xyz; + ivec4 _1245 = ivec4(uvec4(uvec2(ivec2(uvec2(gl_FragCoord.xy))) & uvec2(63u), uint(int(_59._m0[0u]._m22) & 31), 0u)); + vec3 _1253 = (vec3(texelFetch(_62, _1245.xyz, _1245.w).x) * 2.0) - vec3(1.0); + vec3 _1264; + if (_537) { + _1264 = vec3(ivec3(sign(_1253))) * (vec3(1.0) - sqrt(vec3(1.0) - abs(_1253))); + } else { + _1264 = _1253; + } + vec3 _1266 = _1202 + (_1264 * mix(_68._m39.xyz, _68._m40.xyz, pow(clamp((mix(vec3(max(_1196.x, max(_1196.y, _1196.z))), _1202, bvec3(floatBitsToInt(_68._m41.w) != 0)) - _68._m42.xyz) * _68._m41.xyz, vec3(0.0), vec3(1.0)), vec3(_68._m42.w)))); + vec4 _1267 = vec4(_1266.x, _1266.y, _1266.z, _1201.w); + vec4 _1272; + if (!_537) { + _1272 = clamp(_1267, vec4(0.0), vec4(1.0)); + } else { + _1272 = _1267; + } + _6 = _1272; +} + diff --git a/src/games/rdr2vk/tonemap/compiled/0x0C1275BE.frag.spv b/src/games/rdr2vk/tonemap/compiled/0x0C1275BE.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..2b13cc9ba51496ce4bed7dcc78625aeb71e0f315 GIT binary patch literal 67920 zcmb`w2bdLA_Ql&|1w|yIh)qxd0m(E7+9(Pt3M%H%AfTco0TnZtvzW7D&Waf`D(0N? zcoB@_j5(*bepR)q_pNc>f4=v<`Z(5JYlpM85M- zinxF<(Jst+iSkwYF;Q)Yed2 zQ?0$)T528C)>f-j>!{XAt(h_)ANsAA$&abP`pRJB=$g%T9#=DQ#`HO}W=yTwd+LmX zYbMN@Gi%CT2hN#18=EG!nLT0J%&C)SO`SY@cFmm0bLSj5YjVxr2Tq?jXUdG}vcz_! z+;-xGsS{?^>@{`9#QkfgPB>)7fpgF|Mn7`Qn31D5tC=`+X3gw5hfJMZGj+=J$u*Ov z%$lrF2Tji7WOh@gPn>$-q-fAUk*H@{GP;awlZwv5n@yiMW76c&JB-_6`pg68bUkSA zejD!Hr}ocYeKy3lUPTw#&Q&AMI=a_P>(fWK1h1RozQ*gNxSw&?6!%YY!-{SaX74{` zX3bA7B+Q1yMPHLtN$}wxTW?EH_S+_OQ z1`9Vx@?#AvpJXqXV@-Qp&9TPCCAFGk&5KLM*BpC5Tr$Sy*c0Lg=$7}(9uYS%a_kv# zgCfTs5?2+u7AdDuu8qeY(>RvZ!JZSBtPkhH9u!wr2YXUnSsm?8@rk3=vmW2m4K2Ssm;v zabS7B9qAtHS5`;5&-#_sk?ytrWp%LMw3f^2V6TZQtAjlzuB?t^uTAS;R!6em zru8qYgR@?~Wp!+ja%FXpnC!~xATe=eb�$TUi|>Ca$aw5))Te2Z@O*tAoVEmDNFF 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 literal 0 HcmV?d00001 diff --git a/src/games/rdr2vk/tonemap/compiled/0x2B012EDD.frag.spv b/src/games/rdr2vk/tonemap/compiled/0x2B012EDD.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..a76ab23a54786aa427ac44063a17ea2905b0d58d GIT binary patch literal 26320 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
4A(_^;xli(#KB{Kc!Aw_Z}IevKi~QH5oRqM zRrvFLQeScK{tmvMWH=g^Of(90{q+}5Kkk1(ft}-K!sHm=4K^1C&-x+ffs*lqx8D|$ z@r&p6mg3<3J0~@g@r8G+L6Z5N8=cqkV97^|L+8D*m1Ov1#M^F&F!iAGxieHUV}Q)Vcasd~XXx&dxp;=6+e2-f z8fP!E_sO1;$pOsY|Jh5pMS=PGQLXUm!u~s)@Z^LcoPWOy1EapTV< z4;Am+;#xgSJUZ`-!zIJHd0!kMj+l%G>yZAiWnb`b7@_Cc!dhnCvVIu@o+U?0X5HEr z9BuKz_IueJC3!pD`3!%wWG?mv{4r{C)rgPGxPK@8Jjvt`&zEDx!P{njVH3}h)UuIm%T!TaZyCrV}%xA9sOf#-N`|RT?YkWJdRQvbgust$& zs2_fT8XWZ_llKV4IZbji*&Q#LIQ*RNbaC)LbIyT6HP7HlrCJx@uqst}Z2k#sgNyhJ_ z;CF>M_<5>>x~`OrFFfNgT;l-8IFK*7k)w0FN;0|G794HyvF&2X#52CS@b&Ze8eweU zJqK`c4wwu3Un`k;!uDw807l22y-qTF%C^@FW8-&-8-%fe$Nw1V;210RtnJ>Gui8XZroZ*ucBy2PBh=@q@y|_4n5g31b6KE%g-lVaaFcj?T}OWs-@H zj@*t@3^?cZh~${tqrx$_$AqzgcP@`hCO41a6T)!Jhi#q|j`=<%j2*o5eOfa4qI15_ zNTyG8*OI?qa`20tU86NaO4$wa%c&i;Av#IXGf!f-UMXwP1MQT$xpJ-06j z!!4AdYkOIEo^1Sn|B5hn@P6jLDjD9*&)nC<(I?Mbawi{bsr3YL==pb`&X&>Zl3R-7 zoiaA^Xdvzl>9M(4^UrhkP04V62YpL27iTHDx7FTJ$*p7uW_`XVtdEiD zo%4NRY~ZnB9zKw)Kj|IlF9L8hE}5h`{ZJe+u%XUVrGs;bhS)~vt#|5iLUQ>7r@>C(aZO!}K-YK&*ycjDk# zXN=MJl8M_%4V^zL5$}vbPkz|`AU%B;|6Ldx?}2{^V*`)>Lh0aa|D$BMdx~}VlQ0~8 z@=X6(G8gL*-9Od-rN%l$c3rA>#ySIKbB^EY9*_=lbi9X z!t~?kO=Dqf;C+6tCYkdaozL$kl8KMb>wR^}@H8&Dq%)d)n~IP5t|1)rZ6=Hjyz^@= znS9BGHQYiNEvS=U17NR z+-NP#I`ea5Jz?zN{oH6H8Q#s$jrGORC(jMWlYFrCcvMSf4?0d;VK_I(X(!HcSU1GQ zmbH1V{L%An$)06@vQO!Qb+&W6AN1>L84b_ee)!Y~ac7eCgoqzlmfxpHZEJ;e1AQmdwQ&g|3TQS2e}}*>!Cy znQ@9|R5x+(&ZWC#xOfir5T;hnA@t;Ufn<2+*i$l`x*GI8U44G;(KxSL6a^Eq^p?BTpVHkV8cF#CF-@Hz$N9NI!S z?&~e_RfG2!)JP^b<3Ymo<8x@RFgEbs!&^ya52N!Q9wM3e=)8xAN`|L#F&}f z<8lq2$1&o|>vMZ?@SevVB*VqCX-8q!p3kPS!q~z4OxZ~?yqnLIoyCy{XA@&gj@WvP zc9G29bDUj;;oKZ&H*t=`S|TpCtk;X>kDl{}y~@61f6@nM)9#X~+qU3ni;u@>56PTO zaSx9Z2k*0KPs!xM*@P~hO_zv6@A~$V9M7g&VQf6!G%nZRc|1`(a}d|(N#fu=k0(opi)Yg*!mK@? zO{WTD2k$dwfn<0$pDCw_BM;6d#+V$j^%$KlnZ4&YX9&Z&InF|Hj>B3aF1D=KE98%! z^M<|3zGQ#W2WQinlBwIa;Ao4F$LK7{oK35$Gv|1=IC!5;=SU_O&L(v6Y`Rh$di$O$ zIi5}D31j2&K3^Ccc=EeSIyn1ZAQ{eQ(}lutKASF*%*EM+?qan|)EEO~*LA66#wpJI zW#ZtS%jJ^c;@PxFm|8iT(39h0$?(qc3dwMebEPm`Je#h9lTAFE7K?+o-_?@g;@NbK zF!9jQ_tlC4=en+yOx$=jT_+CSaj%yQ=d*EH=!~kPy+jxr_<6+a(hpo%i(}lHqAwa;Z3*?i3&M zy-PUed$%w)@XqfZ$>d8eoJ~uG;o{kJuW+p4K4I+OUBms7sR5m9ctA3JqH_%oN`|L# zxdzYUL*lOxAJ^x@;@~}x%Ou0av*{6G)}GI%M}@J2_nGpTWOz59DUXXI56&jWm>jY7 z7(F4Gz2`Vj3d6ZM&QszXhqXjpY+0|@${#)F4SSV+$^N7d*51>SsoS>TXp4`>=o!h^ z$~KPCv*O@AM$buxi+lKaVe(@Sqo=RyB*VMb7bL?u&WpluaSy*Fe64Ka9)4LIy!~F0 z3>WwCtHQ)XN8i^g2Au19P4czk;vRlo9K7ScAsNnl_y*a-c^u!Ae62Vzd-yHk^$N@$ zep@*1iFbstf%h1^E1BGk-xH=E@8S1_v4Qvc|3EV9AD!3#UnCPBo!9?|lHqAw%t!p} z^O5+N@5jP1-%o_Gfp>nNN+w@&VGn;M3>WwC=fbguFNCp!cMV@krUrDb;Va4XiOw~A zEg7E1jY782w#x7wHD+|LDN~+ubV@A~1cdOz!i+ zbK8*TsK7^u)PYGQ8ugDH+ajS_;F(XG$w!a*NND zwZy^OZ*9qN@tLxYF!9jQ_brM6=bG1*Ox*ZPX)O-kao3X!=V!{TvWFvop3Q9}6T^7@ zfO*DL3%4osJY(7l$1}T~FgEZWlMN)3t8sf_`t>trLt$*-SvU0*cO%K1&**$UZ!DSk z=zKnRkPJ`bl1s%irla_n?^vp2ihx_^WVF@o{bT5{8Sm)CcEo(z@^b{>nZBoim&i)Z2x;pN4N&y%6D!OnYUm}FwX`z#wSnX&7nhTdlx z`*UlZo#;7Vsh8TQ(Y1|`9BbQJczHR+aot8X*txcCB@+kU=k!R)%Zn4AC!=J8oom}p zGO^%Y+i1zI4ZUk~-($q_Ji*TO!o_;2+x2cQnK5ymI|wf?&-gsqQ8w6lFOHQ=9C+us zlVs{!e_|Fc!KbG z!XC4|g|UIR%|yw3Uu>I6!q~yvX0l|yx3SF>VeH^N_WMXCN7g@jkGNCVbB7ijb71bUf@59! z|2=oOIQ+3kPki#aLpJEhgZ*)YWH_()BZc8;T=YX+eDBm9y?u|8TrJLf>u6y(8W+CP z)Xzl{juD5R-<@wOJXbOt82voSa8GGG!N*F5yF~IJ?cGJX&lhg1m^@o(m#dKrzZZL) zbm;xN`NvC!BVGgPPmm0Eg=B2-IZ+s%aRi?vnSQyA22yyDcu6e?ZknxJxv%J#(uHz>B4X{E>YRo4^nXG*3YVli*%y-v=OjGoK;=xkwlH~${!IpWaq_un`>*jwic!;cb2eg98WXS!Tv z5rkpH0J4b4zALDZQ2yW-cne$uSCg9%*%vhg;>wN+sE7h82q6SyUlc_{LJ~+I3p`J1 z-m3Yky1uvH?&+SdXQt0NRp-=cFPwAf27iccJ$K(vYyf-tenS2uWFulv5Ie@0o504& z?@>3S6Mn2`YxBQqtj!j%Hvg-}aa+N1iL(t{$Jvfr`D;(koyFJJ7VYuf zReZJEE6w{c*xcHz!KK34Gkj*B&*#j%J^?$g_^Q{wj*0K5V9!|e7Ifpg{{GHlH##rZ z<66M_cz#>qE3%b(%$JasL9f!CI`ISrPJxSpP^GjPWD`xoZYFS*Yao9{c^q!@5_wS=33fkFN5u~`MpOcx}1IY3U@F2uKZQxPh{-9829Xl zYhdGAU;D^)bZhV0YTJv_hM2z-PP=`}_{K73V%-26E57QruVdnS6Kp(v-{G!4Lgo*U zHD%r2h4*@lti`X3`+Ei3TUJzfWrZ6n+*EK6_f?2mk_r zB-elF=30$BN3`d>{9kOI7w2s}{YQC5Z9c2dY(2WTds&Ym?vK#Bi;p<@d%)&bw?{rk zxBhvSUUa!g=Gh0AnixaB#OMb%5+gN!g08=Oe4c_`&*T|Emy4ukgK&=5o;g1Q*K>Z3 z?*2)>A#{D@GiDgBpi%RAn@)>Y2BTD!!00j~4=r_OcFUO^xGqvvu@ z&BmjrX2#Gj^>`KBSUp1ny8iOYBZdF7J5rX6$ru^4Z_sK=;f#cVAa$pvy(F25-V?bG)%#13A~gJ^g|T ziaqb*y2se(yn2!JnD@c@&m@NDVitF=^oiN%b4q-1=06wg*wlI+x;-M2&!+R?_0^uS z3&8c*h3M%8-kVELTm-ML_T*U%wwFYbX9>Li+OwaQg0r8rk1{TEcnjS*#P{vuYhQ7Y i_Vkry#b#ged5o*Swby3-tWjbw2OC?vSi5!2db|YL2;K_- literal 0 HcmV?d00001 diff --git a/src/games/rdr2vk/tonemap/compiled/0xDD04030E.frag.spv b/src/games/rdr2vk/tonemap/compiled/0xDD04030E.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..8444419aa55e0bf4ac54781a6e0ad3a3cdad73df GIT binary patch literal 80812 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 literal 0 HcmV?d00001 diff --git a/src/games/rdr2vk/tonemap/compiled/0xE3E0B5C4.frag.spv b/src/games/rdr2vk/tonemap/compiled/0xE3E0B5C4.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..eb1aef61b179f4f8714228bbcd0cde7757572ddd GIT binary patch literal 72804 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 1.0) && (_314.w < 2.0)) { + float _333 = min(length(textureLod(sampler2D(_85, _8), _4.xy, 0.0).xy * _69._m20.x), _69._m20.z); + float _336 = min(_315, 2.0); + vec2 _337 = (_314.xy / vec2(_315)) * _336; + int _340 = int(min(2.0, 1.0 + _336)); + vec2 _344 = _337 * _69._m63.xy; + float _346 = float(_340) - 0.5; + float _347 = _346 / _336; + vec2 _349 = (-_337) * _69._m63.xy; + vec2 _352 = vec2(uvec2(gl_FragCoord.xy) & uvec2(1u)); + float _366 = ((((_352.x * 2.0) - 1.0) * ((_352.y * 2.0) - 1.0)) * _69._m20.w) * clamp((_336 - 2.0) * 0.5, 0.0, 1.0); + float _367 = 0.5 + _366; + float _368 = 0.5 - _366; + vec4 _370; + _370 = vec4(0.0); + for (int _373 = 0; _373 < _340;) { + float _377 = float(_373); + float _378 = _377 + _367; + vec2 _381 = _4.xy + (_344 * (_378 / _346)); + float _387 = min(length(textureLod(sampler2D(_85, _8), _381, 0.0).xy * _69._m20.x), _69._m20.z); + float _393 = _69._m0.z / (_282 - textureLod(sampler2D(_70, _8), _381, 0.0).x); + float _398 = _333 * _347; + float _415 = _377 + _368; + vec2 _418 = _4.xy + (_349 * (_415 / _346)); + float _424 = min(length(textureLod(sampler2D(_85, _8), _418, 0.0).xy * _69._m20.x), _69._m20.z); + float _429 = _69._m0.z / (_282 - textureLod(sampler2D(_70, _8), _418, 0.0).x); + float _446 = (1.0 - clamp((1.0 - _424) * 8.0, 0.0, 1.0)) * dot(clamp(vec2(0.5) + (vec2(1.0, -1.0) * (_429 - _285)), vec2(0.0), vec2(1.0)), clamp(vec2(_398, _424 * _347) - vec2(max(_415 - 1.0, 0.0)), vec2(0.0), vec2(1.0))); + bvec2 _452 = bvec2(_393 > _429, _424 > _387); + float _454 = all(_452) ? _446 : ((1.0 - clamp((1.0 - _387) * 8.0, 0.0, 1.0)) * dot(clamp(vec2(0.5) + (vec2(1.0, -1.0) * (_393 - _285)), vec2(0.0), vec2(1.0)), clamp(vec2(_398, _387 * _347) - vec2(max(_378 - 1.0, 0.0)), vec2(0.0), vec2(1.0)))); + float _456 = any(_452) ? _446 : _454; + _370 = (_370 + vec4(textureLod(sampler2D(_77, _9), _418, 0.0).xyz * _456, _456)) + vec4(textureLod(sampler2D(_77, _9), _381, 0.0).xyz * _454, _454); + _373++; + continue; + } + _472 = _370 / vec4(float(2 * _340)); + } else { + _472 = vec4(0.0); + } + vec4 _480 = textureLod(sampler2D(_78, _9), _4.xy, 0.0); + vec3 _485 = _480.xyz + ((_472.xyz + (vec4(vec4(_289.xyz, 0.0).xyz * _30._m0[0u]._m1.w, _267).xyz * (1.0 - _472.w))) * (1.0 - _480.w)); + vec4 _488 = texelFetch(_87, int(0u)); + vec4 _489 = texelFetch(_87, int(1u)); + bool _519; + vec3 _520; + if (floatBitsToInt(_69._m61) != 0) { + vec4 _505 = texture(sampler2D(_83, _75), _4.xy); + float _506 = _505.w; + bool _508 = (_506 + 9.9999997473787516355514526367188e-05) >= 1.0; + vec3 _517; + if (_508) { + _517 = _505.xyz; + } else { + _517 = _505.xyz + (_485 * (1.0 - _506)); + } + _519 = _508 ? true : false; + _520 = _517; + } else { + _519 = false; + _520 = _485; + } + vec3 _524 = min(_520 * texelFetch(_64, ivec2(0), 0).x, vec3(65504.0)); + bool _525 = !_519; + float _638; + vec3 _639; + if (_525) { + float _584; + if (floatBitsToInt(_69._m70.x) != 0) { + float _547 = clamp(dot(texture(sampler2D(_72, _10), _4.xy).xyz * texelFetch(_64, ivec2(0), 0).x, vec3(0.300000011920928955078125, 0.589999973773956298828125, 0.10999999940395355224609375)), _69._m72.z, _69._m72.w); + float _570 = clamp(((((_69._m70.y * log(_547 + _69._m72.x)) + _69._m70.z) - 10.0) + (_69._m72.y * _547)) + _69._m65.w, _69._m66.x, _69._m66.y); + _584 = pow(2.0, mix(_5, clamp(_570 + ((abs(_570) * _69._m66.z) * float(int(sign(_570)))), _69._m66.x, _69._m66.y), clamp(_69._m70.x, 0.0, 1.0))); + } else { + _584 = _4.z; + } + vec3 _637; + if (floatBitsToInt(_69._m51.w) != 0) { + vec2 _613 = ((_4.xy - _69._m50.xy) * mat2(vec2(_69._m52.x, _69._m52.y), vec2(_69._m52.z, _69._m52.w))) * _69._m50.zw; + float _617 = max((dot(_613, _613) - _69._m53.x) * _69._m53.w, 0.0); + bool _618 = _617 < 1.0; + _637 = mix(_524, (_524 * _69._m51.xyz) * _69._m51.w, vec3(_618 ? (_618 ? (1.0 - pow(2.0, (-10.0) * _617)) : 1.0) : (0.9980499744415283203125 + (((_617 - 1.0) > 0.0) ? pow(2.0, 10.0 * (_617 - 2.0)) : 0.0)))); + } else { + _637 = _524; + } + _638 = _584; + _639 = _637; + } else { + _638 = _4.z; + _639 = _524; + } + vec3 _676 = _639 * mix(mix(_69._m54.xyz, _69._m56.xyz, vec3(clamp(clamp(_4.y * _69._m57.y, 0.0, 1.0) + _69._m54.w, 0.0, 1.0))), mix(_69._m56.xyz, _69._m55.xyz, vec3(clamp(clamp(clamp(_4.y - _69._m56.w, 0.0, 1.0) * _69._m57.x, 0.0, 1.0) - _69._m55.w, 0.0, 1.0))), vec3(_4.y)); + bool _679 = _67._m3 != 0u; + vec3 _742; + if (_679) { + vec3 _719 = max(vec3(0.0), _676 * (_638 / _67._m6)); + vec3 _722 = _719 * _488.x; + _742 = (((((_719 * (_722 + vec3(_489.x))) + vec3(_489.y)) / ((_719 * (_722 + vec3(_488.y))) + vec3(_489.z))) - vec3(_489.w)) * ((_67._m4 != 0u) ? _67._m10 : _488.z)) * _67._m6; + } else { + vec3 _685 = max(vec3(0.0), _676 * _638); + vec3 _688 = _685 * _488.x; + _742 = clamp(((((_685 * (_688 + vec3(_489.x))) + vec3(_489.y)) / ((_685 * (_688 + vec3(_488.y))) + vec3(_489.z))) - vec3(_489.w)) * _488.z, vec3(0.0), vec3(1.0)); + } + vec3 _790; + if (_525) { + vec3 _789; + if (floatBitsToInt(_69._m47.w) != 0) { + vec2 _775 = ((_4.xy - _69._m46.xy) * mat2(vec2(_69._m48.x, _69._m48.y), vec2(_69._m48.z, _69._m48.w))) * _69._m46.zw; + _789 = mix(_742, _69._m47.xyz, vec3(_69._m47.w * texture(sampler1D(_74, _10), min(1.0, max((dot(_775, _775) - _69._m49.x) * _69._m49.w, 0.0))).w)); + } else { + _789 = _742; + } + _790 = _789; + } else { + _790 = _742; + } + bool _811 = _679 && (!(_67._m2 != 0u)); + +#if 1 + vec3 _813 = EncodeLUTInput(_790, _67._m11, _67._m12, _67._m13, _67._m14, _811); +#else + vec3 _813 = mix(mix((pow(_790, vec3(_67._m12)) * _67._m13) - vec3(_67._m14), _790 * _67._m11, lessThan(_790, vec3(0.003130800090730190277099609375))), _790, bvec3(_811)); +#endif + + vec3 _815 = max(_813 * mat3(vec3(0.514900028705596923828125, 0.324400007724761962890625, 0.1606999933719635009765625), vec3(0.265399992465972900390625, 0.67040002346038818359375, 0.06419999897480010986328125), vec3(0.02480000071227550506591796875, 0.1247999966144561767578125, 0.85039997100830078125)), vec3(0.00999999977648258209228515625, 0.0, 0.0)); + float _816 = _815.y; + vec3 _841 = mix(_813, clamp((_69._m81.xyz * (_816 * ((1.33000004291534423828125 * (1.0 + ((_816 + _815.z) / _815.x))) - 1.67999994754791259765625))) * _69._m81.w, vec3(0.0), vec3(1.0)), vec3(clamp(((0.039999999105930328369140625 / (0.039999999105930328369140625 + dot(_485 * texelFetch(_64, ivec2(0), 0).x, vec3(0.300000011920928955078125, 0.589999973773956298828125, 0.10999999940395355224609375)))) * _69._m82.x) + _69._m82.y, 0.0, 1.0))); + vec3 _871; + if (floatBitsToInt(_69._m84.w) != 0) { + _871 = mix(_841, texture(sampler2D(_84, _10), ((((_4.xy - vec2(0.5)) * _69._m84.z) / mix(_69._m85.wx, _69._m85.zy, _4.yx)) - _69._m84.xy) + vec2(0.5)).xyz, vec3(_69._m84.w)); + } else { + _871 = _841; + } + vec3 _1029; + if (_525) { + float _890 = max(max(_871.x, max(_871.y, _871.z)), 9.9999997473787516355514526367188e-05); + float _896 = (_811 && (!(_67._m5 != 0u))) ? 1.0 : (((_890 > _67._m7) ? ((_890 * _67._m8) + _67._m9) : _890) / _890); + vec3 _897 = _871 * _896; + float _900 = _897.z; + float _902 = floor(_900 * 14.99989986419677734375); + float _908 = (_902 * 0.0625) + (_897.x * 0.05859375); + float _910 = _897.y * 0.9375; + vec4 _914 = texture(sampler2D(_81, _10), vec2(0.001953125, 0.03125) + vec2(_908, _910)); + vec4 _920 = texture(sampler2D(_81, _10), vec2(0.001953125, 0.03125) + vec2(_908 + 0.0625, _910)); + vec3 _923 = mix(_914.xyz, _920.xyz, vec3((_900 * 15.0) - _902)); + vec3 _1026; + if (_92._m0[0u]._m0._m0 > 0) { + float _957 = _923.z; + float _959 = floor(_957 * 14.99989986419677734375); + float _965 = (_959 * 0.0625) + (_923.x * 0.05859375); + float _967 = _923.y * 0.9375; + vec3 _982 = mix(_923, mix(texture(sampler2D(_79, _10), vec2(0.001953125, 0.03125) + vec2(_965, _967)).xyz, texture(sampler2D(_79, _10), vec2(0.001953125, 0.03125) + vec2(_965 + 0.0625, _967)).xyz, vec3((_957 * 15.0) - _959)), vec3(clamp(((_285 < _92._m0[0u]._m1[0]._m2) ? clamp((_285 - _92._m0[0u]._m1[0]._m0) * _92._m0[0u]._m1[0]._m1, 0.0, 1.0) : (1.0 - clamp((_285 - _92._m0[0u]._m1[0]._m2) * _92._m0[0u]._m1[0]._m3, 0.0, 1.0))) + _92._m0[0u]._m1[0]._m4, 0.0, 1.0))); + float _994 = _982.z; + float _996 = floor(_994 * 14.99989986419677734375); + float _1002 = (_996 * 0.0625) + (_982.x * 0.05859375); + float _1004 = _982.y * 0.9375; + _1026 = mix(_982, mix(_982, mix(texture(sampler2D(_80, _10), vec2(0.001953125, 0.03125) + vec2(_1002, _1004)).xyz, texture(sampler2D(_80, _10), vec2(0.001953125, 0.03125) + vec2(_1002 + 0.0625, _1004)).xyz, vec3((_994 * 15.0) - _996)), vec3(clamp(((_285 < _92._m0[0u]._m1[1]._m2) ? clamp((_285 - _92._m0[0u]._m1[1]._m0) * _92._m0[0u]._m1[1]._m1, 0.0, 1.0) : (1.0 - clamp((_285 - _92._m0[0u]._m1[1]._m2) * _92._m0[0u]._m1[1]._m3, 0.0, 1.0))) + _92._m0[0u]._m1[1]._m4, 0.0, 1.0))), vec3(dot(texture(sampler2D(_82, _10), _4.xy).xyz, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)))); + } else { + _1026 = _923; + } + _1029 = _1026 / vec3(_896); + } else { + _1029 = _871; + } + +#if 1 + _1029 = DecodeLUTInput(_1029); +#endif + vec4 _1034 = vec4(_1029, dot(_1029, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625))); + vec3 _1035 = _1034.xyz; + ivec4 _1077 = ivec4(uvec4(uvec2(ivec2(uvec2(gl_FragCoord.xy))) & uvec2(63u), uint(int(_60._m0[0u]._m22) & 31), 0u)); + vec3 _1085 = (vec3(texelFetch(_63, _1077.xyz, _1077.w).x) * 2.0) - vec3(1.0); + vec3 _1096; + if (_679) { + _1096 = vec3(ivec3(sign(_1085))) * (vec3(1.0) - sqrt(vec3(1.0) - abs(_1085))); + } else { + _1096 = _1085; + } + vec3 _1098 = _1035 + (_1096 * mix(_69._m39.xyz, _69._m40.xyz, pow(clamp((mix(vec3(max(_1029.x, max(_1029.y, _1029.z))), _1035, bvec3(floatBitsToInt(_69._m41.w) != 0)) - _69._m42.xyz) * _69._m41.xyz, vec3(0.0), vec3(1.0)), vec3(_69._m42.w)))); + vec4 _1099 = vec4(_1098.x, _1098.y, _1098.z, _1034.w); + vec4 _1104; + if (!_679) { + _1104 = clamp(_1099, vec4(0.0), vec4(1.0)); + } else { + _1104 = _1099; + } + _6 = _1104; +} + diff --git a/src/games/rdr2vk/tonemap/tonemap_0x4205843B.frag.glsl b/src/games/rdr2vk/tonemap/tonemap_0x4205843B.frag.glsl new file mode 100644 index 0000000000..30f578b675 --- /dev/null +++ b/src/games/rdr2vk/tonemap/tonemap_0x4205843B.frag.glsl @@ -0,0 +1,955 @@ +#version 450 + +#extension GL_GOOGLE_include_directive : require +#include "./tonemap.glsl" + +#extension GL_EXT_scalar_block_layout : require +#if defined(GL_EXT_control_flow_attributes) +#extension GL_EXT_control_flow_attributes : require +#define SPIRV_CROSS_FLATTEN [[flatten]] +#define SPIRV_CROSS_BRANCH [[dont_flatten]] +#define SPIRV_CROSS_UNROLL [[unroll]] +#define SPIRV_CROSS_LOOP [[dont_unroll]] +#else +#define SPIRV_CROSS_FLATTEN +#define SPIRV_CROSS_BRANCH +#define SPIRV_CROSS_UNROLL +#define SPIRV_CROSS_LOOP +#endif +#extension GL_EXT_samplerless_texture_functions : require + +struct _13 { + float _m0; +}; + +struct _15 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; +}; + +struct _14 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + _15 _m5; +}; + +struct _17 { + vec4 _m0; + vec4 _m1; + mat4 _m2; +}; + +struct _18 { + vec4 _m0; + vec4 _m1; +}; + +struct _19 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + vec4 _m5; + vec4 _m6; +}; + +struct _20 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; +}; + +struct _16 { + _17 _m0[2]; + _18 _m1; + _19 _m2; + _20 _m3; + vec4 _m4[3]; + vec2 _m5; + vec2 _m6; + vec2 _m7; + float _m8; + vec4 _m9[4]; + vec2 _m10; + vec2 _m11; + vec4 _m12; + vec4 _m13; + vec4 _m14; + vec4 _m15[4]; + float _m16; + int _m17; + float _m18; + float _m19; +}; + +struct _22 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; +}; + +struct _23 { + float _m0; + float _m1; + float _m2; +}; + +struct _24 { + float _m0; + float _m1; + float _m2; + float _m3; + vec3 _m4; + int _m5; +}; + +struct _21 { + _22 _m0; + _23 _m1; + _24 _m2; + vec2 _m3; + vec2 _m4; + vec4 _m5; + float _m6; + float _m7; + uint _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + float _m16; + float _m17; +}; + +struct _25 { + vec4 _m0[5]; +}; + +struct _26 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _27 { + float _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _28 { + int _m0; + int _m1; +}; + +struct _29 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + vec2 _m6; + float _m7; + float _m8; + float _m9; + float _m10; +}; + +struct _12 { + float _m0; + vec4 _m1; + float _m2; + vec4 _m3; + uvec4 _m4; + uvec4 _m5; + vec4 _m6; + int _m7; + int _m8; + int _m9; + vec4 _m10; + vec4 _m11[8]; + uint _m12; + vec3 _m13; + vec3 _m14; + vec2 _m15; + vec2 _m16; + mat3 _m17; + vec3 _m18; + vec3 _m19; + float _m20; + float _m21; + vec3 _m22; + vec3 _m23; + vec3 _m24; + vec3 _m25; + vec4 _m26[13]; + int _m27; + vec4 _m28; + vec4 _m29; + vec4 _m30; + vec3 _m31; + vec3 _m32; + vec3 _m33; + vec3 _m34; + vec4 _m35; + float _m36; + float _m37; + float _m38; + float _m39; + mat4 _m40; + _13 _m41; + _14 _m42; + _16 _m43; + _21 _m44; + _25 _m45; + _26 _m46; + _27 _m47[5]; + vec4 _m48; + _28 _m49; + vec4 _m50; + _29 _m51; +}; + +struct _33 { + float _m0; + vec3 _m1; + vec3 _m2; + vec3 _m3; + float _m4; + vec3 _m5; + vec3 _m6; + float _m7; + vec3 _m8; + vec3 _m9; + vec2 _m10; + vec3 _m11; + vec4 _m12; + vec4 _m13[4]; + vec4 _m14; + float _m15; + int _m16; +}; + +struct _34 { + float _m0; +}; + +struct _36 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + uint _m6; + uint _m7; + uvec4 _m8; +}; + +struct _35 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + _36 _m3; + vec2 _m4; +}; + +struct _38 { + float _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _39 { + int _m0; +}; + +struct _40 { + _39 _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _37 { + vec3 _m0; + vec3 _m1; + float _m2; + float _m3; + _38 _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + uint _m15; + _39 _m16; + _39 _m17; + _40 _m18; + vec4 _m19; + float _m20; + float _m21; + float _m22; + float _m23; + float _m24; + float _m25; + float _m26; + float _m27; +}; + +struct _42 { + vec3 _m0; + float _m1; +}; + +struct _43 { + vec4 _m0; + vec4 _m1; + vec4 _m2; +}; + +struct _44 { + vec2 _m0; + vec2 _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + vec2 _m8; + float _m9; +}; + +struct _45 { + float _m0; + _39 _m1; +}; + +struct _46 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _47 { + _39 _m0; + float _m1; + float _m2; +}; + +struct _49 { + int _m0; +}; + +struct _48 { + _39 _m0; + _49 _m1; + _49 _m2; +}; + +struct _50 { + _39 _m0; +}; + +struct _41 { + _42 _m0; + vec4 _m1; + mat4 _m2; + mat4 _m3; + _43 _m4; + _44 _m5; + _45 _m6; + _46 _m7; + _47 _m8; + _48 _m9; + _50 _m10; + float _m11; + float _m12; + float _m13; +}; + +struct _51 { + float _m0; + float _m1; + vec2 _m2; + vec2 _m3; + vec2 _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; +}; + +struct _52 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec3 _m3; + vec3 _m4; + vec3 _m5; + vec3 _m6; + vec3 _m7; +}; + +struct _53 { + vec4 _m0; + vec4 _m1; + vec3 _m2; +}; + +struct _54 { + vec4 _m0; + vec4 _m1; +}; + +struct _56 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; +}; + +struct _55 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + float _m16; + float _m17; + float _m18; + _56 _m19[2]; +}; + +struct _57 { + vec2 _m0; + vec2 _m1; + vec2 _m2; + float _m3; + float _m4; + float _m5; + vec2 _m6; +}; + +struct _58 { + vec4 _m0; + vec4 _m1; + vec2 _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _59 { + vec3 _m0; + float _m1; + float _m2; +}; + +struct _32 { + float _m0[32]; + float _m1[32]; + _33 _m2; + _33 _m3; + _34 _m4; + _35 _m5; + _37 _m6; + _41 _m7; + _51 _m8; + _52 _m9; + float _m10; + vec2 _m11; + _53 _m12; + _54 _m13; + float _m14; + float _m15; + vec4 _m16; + _55 _m17; + _57 _m18; + _58 _m19; + vec4 _m20; + float _m21; + uint _m22; + uvec2 _m23; + uvec2 _m24; + uint _m25; + float _m26; + float _m27; + float _m28; + float _m29; + _59 _m30; + int _m31; +}; + +struct _91 { + int _m0; + float _m1; + int _m2[2]; +}; + +struct _92 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; +}; + +struct _90 { + _91 _m0; + _92 _m1[11]; +}; + +float _289; + +layout(set = 0, binding = 98, scalar) readonly buffer _11_30 { + _12 _m0[]; +} +_30; + +layout(set = 0, binding = 99, scalar) readonly buffer _31_60 { + _32 _m0[]; +} +_60; + +layout(set = 0, binding = 20, std140) uniform _66_67 { + float _m0; + float _m1; + uint _m2; + uint _m3; + uint _m4; + uint _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + uint _m16; + uint _m17; + uint _m18; + uint _m19; +} +_67; + +layout(set = 1, binding = 16, std140) uniform _68_69 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + vec4 _m5; + vec4 _m6; + vec4 _m7; + vec4 _m8; + vec4 _m9; + vec4 _m10; + vec4 _m11; + vec4 _m12; + vec4 _m13; + vec4 _m14; + vec2 _m15; + vec4 _m16; + vec4 _m17; + vec4 _m18; + vec4 _m19; + vec4 _m20; + vec4 _m21; + vec4 _m22; + vec4 _m23; + vec4 _m24; + vec3 _m25; + vec3 _m26; + vec3 _m27; + vec4 _m28; + vec4 _m29; + vec4 _m30; + vec4 _m31; + vec4 _m32; + vec4 _m33; + vec4 _m34; + vec4 _m35; + vec4 _m36; + vec4 _m37; + vec3 _m38; + vec4 _m39; + vec4 _m40; + vec4 _m41; + vec4 _m42; + mat4 _m43; + vec4 _m44; + vec4 _m45; + vec4 _m46; + vec4 _m47; + vec4 _m48; + vec4 _m49; + vec4 _m50; + vec4 _m51; + vec4 _m52; + vec4 _m53; + vec4 _m54; + vec4 _m55; + vec4 _m56; + vec4 _m57; + float _m58; + vec4 _m59; + vec4 _m60; + float _m61; + vec4 _m62; + vec4 _m63; + vec2 _m64; + vec4 _m65; + vec4 _m66; + vec4 _m67; + vec4 _m68; + vec4 _m69; + vec4 _m70; + vec4 _m71; + vec4 _m72; + vec4 _m73; + vec4 _m74; + vec4 _m75; + vec4 _m76; + vec4 _m77; + vec3 _m78; + float _m79; + vec4 _m80; + vec4 _m81; + vec4 _m82; + vec4 _m83; + vec4 _m84; + vec4 _m85; +} +_69; + +layout(set = 0, binding = 214, std430) readonly buffer _89_93 { + _90 _m0[]; +} +_93; + +layout(set = 1, binding = 32) uniform sampler _8; +layout(set = 1, binding = 33) uniform sampler _9; +layout(set = 1, binding = 34) uniform sampler _10; +layout(set = 0, binding = 121) uniform texture2DArray _63; +layout(set = 0, binding = 140) uniform texture2D _64; +layout(set = 1, binding = 173) uniform texture2D _70; +layout(set = 1, binding = 174) uniform texture2D _71; +layout(set = 1, binding = 177) uniform texture2D _72; +layout(set = 1, binding = 185) uniform texture1D _74; +layout(set = 1, binding = 40) uniform sampler _75; +layout(set = 1, binding = 186) uniform texture2D _76; +layout(set = 1, binding = 189) uniform texture2D _77; +layout(set = 1, binding = 190) uniform texture2D _78; +layout(set = 1, binding = 191) uniform texture2D _79; +layout(set = 1, binding = 196) uniform texture2D _80; +layout(set = 1, binding = 197) uniform texture2D _81; +layout(set = 1, binding = 202) uniform texture2D _82; +layout(set = 1, binding = 203) uniform texture2D _83; +layout(set = 1, binding = 205) uniform texture2D _84; +layout(set = 1, binding = 207) uniform texture2D _85; +layout(set = 1, binding = 209) uniform texture2D _86; +layout(set = 1, binding = 210) uniform texture2D _87; +layout(set = 1, binding = 212) uniform samplerBuffer _88; + +layout(location = 0) in vec4 _4; +layout(location = 1) in float _5; +layout(location = 0) out vec4 _6; + +void main() { + float _304 = 1.0 + _69._m0.w; + float _307 = _69._m0.z / (_304 - textureLod(sampler2D(_71, _8), _4.xy, 0.0).x); + vec4 _311 = texture(sampler2D(_76, _75), _4.xy); + vec4 _336 = textureLod(sampler2D(_87, _8), _4.xy * _69._m80.xy, 0.0) * 1.0; + float _337 = _336.z; + vec4 _494; + SPIRV_CROSS_BRANCH + if ((_337 >= 1.0) && (_336.w < 2.0)) { + float _355 = min(length(textureLod(sampler2D(_86, _8), _4.xy, 0.0).xy * _69._m20.x), _69._m20.z); + float _358 = min(_337, 2.0); + vec2 _359 = (_336.xy / vec2(_337)) * _358; + int _362 = int(min(2.0, 1.0 + _358)); + vec2 _366 = _359 * _69._m63.xy; + float _368 = float(_362) - 0.5; + float _369 = _368 / _358; + vec2 _371 = (-_359) * _69._m63.xy; + vec2 _374 = vec2(uvec2(gl_FragCoord.xy) & uvec2(1u)); + float _388 = ((((_374.x * 2.0) - 1.0) * ((_374.y * 2.0) - 1.0)) * _69._m20.w) * clamp((_358 - 2.0) * 0.5, 0.0, 1.0); + float _389 = 0.5 + _388; + float _390 = 0.5 - _388; + vec4 _392; + _392 = vec4(0.0); + for (int _395 = 0; _395 < _362;) { + float _399 = float(_395); + float _400 = _399 + _389; + vec2 _403 = _4.xy + (_366 * (_400 / _368)); + float _409 = min(length(textureLod(sampler2D(_86, _8), _403, 0.0).xy * _69._m20.x), _69._m20.z); + float _415 = _69._m0.z / (_304 - textureLod(sampler2D(_70, _8), _403, 0.0).x); + float _420 = _355 * _369; + float _437 = _399 + _390; + vec2 _440 = _4.xy + (_371 * (_437 / _368)); + float _446 = min(length(textureLod(sampler2D(_86, _8), _440, 0.0).xy * _69._m20.x), _69._m20.z); + float _451 = _69._m0.z / (_304 - textureLod(sampler2D(_70, _8), _440, 0.0).x); + float _468 = (1.0 - clamp((1.0 - _446) * 8.0, 0.0, 1.0)) * dot(clamp(vec2(0.5) + (vec2(1.0, -1.0) * (_451 - _307)), vec2(0.0), vec2(1.0)), clamp(vec2(_420, _446 * _369) - vec2(max(_437 - 1.0, 0.0)), vec2(0.0), vec2(1.0))); + bvec2 _474 = bvec2(_415 > _451, _446 > _409); + float _476 = all(_474) ? _468 : ((1.0 - clamp((1.0 - _409) * 8.0, 0.0, 1.0)) * dot(clamp(vec2(0.5) + (vec2(1.0, -1.0) * (_415 - _307)), vec2(0.0), vec2(1.0)), clamp(vec2(_420, _409 * _369) - vec2(max(_400 - 1.0, 0.0)), vec2(0.0), vec2(1.0)))); + float _478 = any(_474) ? _468 : _476; + _392 = (_392 + vec4(textureLod(sampler2D(_78, _9), _440, 0.0).xyz * _478, _478)) + vec4(textureLod(sampler2D(_78, _9), _403, 0.0).xyz * _476, _476); + _395++; + continue; + } + _494 = _392 / vec4(float(2 * _362)); + } else { + _494 = vec4(0.0); + } + vec4 _502 = textureLod(sampler2D(_79, _9), _4.xy, 0.0); + vec3 _507 = _502.xyz + ((_494.xyz + (vec4(vec4(_311.xyz, 0.0).xyz * _30._m0[0u]._m1.w, _289).xyz * (1.0 - _494.w))) * (1.0 - _502.w)); + vec4 _510 = texelFetch(_88, int(0u)); + vec4 _511 = texelFetch(_88, int(1u)); + float _516 = dot(_507 * texelFetch(_64, ivec2(0), 0).x, vec3(0.300000011920928955078125, 0.589999973773956298828125, 0.10999999940395355224609375)); + bool _541; + vec3 _542; + if (floatBitsToInt(_69._m61) != 0) { + vec4 _527 = texture(sampler2D(_84, _75), _4.xy); + float _528 = _527.w; + bool _530 = (_528 + 9.9999997473787516355514526367188e-05) >= 1.0; + vec3 _539; + if (_530) { + _539 = _527.xyz; + } else { + _539 = _527.xyz + (_507 * (1.0 - _528)); + } + _541 = _530 ? true : false; + _542 = _539; + } else { + _541 = false; + _542 = _507; + } + vec3 _546 = min(_542 * texelFetch(_64, ivec2(0), 0).x, vec3(65504.0)); + bool _547 = !_541; + float _683; + vec3 _684; + if (_547) { + float _606; + if (floatBitsToInt(_69._m70.x) != 0) { + float _569 = clamp(dot(texture(sampler2D(_72, _10), _4.xy).xyz * texelFetch(_64, ivec2(0), 0).x, vec3(0.300000011920928955078125, 0.589999973773956298828125, 0.10999999940395355224609375)), _69._m72.z, _69._m72.w); + float _592 = clamp(((((_69._m70.y * log(_569 + _69._m72.x)) + _69._m70.z) - 10.0) + (_69._m72.y * _569)) + _69._m65.w, _69._m66.x, _69._m66.y); + _606 = pow(2.0, mix(_5, clamp(_592 + ((abs(_592) * _69._m66.z) * float(int(sign(_592)))), _69._m66.x, _69._m66.y), clamp(_69._m70.x, 0.0, 1.0))); + } else { + _606 = _4.z; + } + vec4 _619 = texture(sampler2D(_77, _10), fract(((_4.xy * vec2(1.60000002384185791015625, 0.89999997615814208984375)) * _69._m16.w) + _69._m16.xy)); + vec3 _629 = max(_546 * vec3(0.5), _546 + vec3((_516 * (_619.w - 0.5)) * _69._m16.z)); + vec3 _682; + if (floatBitsToInt(_69._m51.w) != 0) { + vec2 _658 = ((_4.xy - _69._m50.xy) * mat2(vec2(_69._m52.x, _69._m52.y), vec2(_69._m52.z, _69._m52.w))) * _69._m50.zw; + float _662 = max((dot(_658, _658) - _69._m53.x) * _69._m53.w, 0.0); + bool _663 = _662 < 1.0; + _682 = mix(_629, (_629 * _69._m51.xyz) * _69._m51.w, vec3(_663 ? (_663 ? (1.0 - pow(2.0, (-10.0) * _662)) : 1.0) : (0.9980499744415283203125 + (((_662 - 1.0) > 0.0) ? pow(2.0, 10.0 * (_662 - 2.0)) : 0.0)))); + } else { + _682 = _629; + } + _683 = _606; + _684 = _682; + } else { + _683 = _4.z; + _684 = _546; + } + vec3 _721 = _684 * mix(mix(_69._m54.xyz, _69._m56.xyz, vec3(clamp(clamp(_4.y * _69._m57.y, 0.0, 1.0) + _69._m54.w, 0.0, 1.0))), mix(_69._m56.xyz, _69._m55.xyz, vec3(clamp(clamp(clamp(_4.y - _69._m56.w, 0.0, 1.0) * _69._m57.x, 0.0, 1.0) - _69._m55.w, 0.0, 1.0))), vec3(_4.y)); + bool _724 = _67._m3 != 0u; + vec3 _787; + if (_724) { + vec3 _764 = max(vec3(0.0), _721 * (_683 / _67._m6)); + vec3 _767 = _764 * _510.x; + _787 = (((((_764 * (_767 + vec3(_511.x))) + vec3(_511.y)) / ((_764 * (_767 + vec3(_510.y))) + vec3(_511.z))) - vec3(_511.w)) * ((_67._m4 != 0u) ? _67._m10 : _510.z)) * _67._m6; + } else { + vec3 _730 = max(vec3(0.0), _721 * _683); + vec3 _733 = _730 * _510.x; + _787 = clamp(((((_730 * (_733 + vec3(_511.x))) + vec3(_511.y)) / ((_730 * (_733 + vec3(_510.y))) + vec3(_511.z))) - vec3(_511.w)) * _510.z, vec3(0.0), vec3(1.0)); + } + vec3 _835; + if (_547) { + vec3 _834; + if (floatBitsToInt(_69._m47.w) != 0) { + vec2 _820 = ((_4.xy - _69._m46.xy) * mat2(vec2(_69._m48.x, _69._m48.y), vec2(_69._m48.z, _69._m48.w))) * _69._m46.zw; + _834 = mix(_787, _69._m47.xyz, vec3(_69._m47.w * texture(sampler1D(_74, _10), min(1.0, max((dot(_820, _820) - _69._m49.x) * _69._m49.w, 0.0))).w)); + } else { + _834 = _787; + } + _835 = _834; + } else { + _835 = _787; + } + bool _856 = _724 && (!(_67._m2 != 0u)); + +#if 1 + vec3 _858 = EncodeLUTInput(_835, _67._m11, _67._m12, _67._m13, _67._m14, _856); +#else + vec3 _858 = mix(mix((pow(_835, vec3(_67._m12)) * _67._m13) - vec3(_67._m14), _835 * _67._m11, lessThan(_835, vec3(0.003130800090730190277099609375))), _835, bvec3(_856)); +#endif + + vec3 _1014; + if (_547 && (floatBitsToInt(_69._m19.x) != 0)) { + vec2 _870 = _4.xy * _69._m17.w; + float _936 = (((((((fract(sin(dot(_870 + vec2(0.070000000298023223876953125 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875) + fract(sin(dot(_870 + vec2(0.10999999940395355224609375 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_870 + vec2(0.12999999523162841796875 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_870 + vec2(0.17000000178813934326171875 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_870 + vec2(0.189999997615814208984375 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_870 + vec2(0.23000000417232513427734375 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_870 + vec2(0.2899999916553497314453125 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) + fract(sin(dot(_870 + vec2(0.310000002384185791015625 * _69._m17.x), vec2(12.98980045318603515625, 78.233001708984375))) * 43758.546875)) * 0.125; + float _938 = clamp(_936 + _69._m17.z, 0.0, 1.0); + vec3 _1013; + do { + if (!(floatBitsToInt(_69._m18.w) != 0)) { + _1013 = vec3(_938); + break; + } + float _961; + if (floatBitsToInt(_69._m18.y) != 0) { + float _956 = dot(_858, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)); + _961 = mix(_938, _938 * 0.5, (_956 * _956) * _956); + } else { + _961 = _938; + } + vec3 _1012; + if (floatBitsToInt(_69._m19.z) != 0) { + vec3 _994 = vec3(_961); + vec3 _996 = _994 * 2.0; + _1012 = mix(_858, mix(((_858 * 2.0) * (vec3(1.0) - _994)) + (sqrt(_858) * (_996 - vec3(1.0))), (_996 * _858) + ((_858 * _858) * (vec3(1.0) - _996)), lessThan(_994, vec3(0.5))), vec3(_69._m18.x)); + } else { + vec3 _993; + if (floatBitsToInt(_69._m19.w) != 0) { + vec3 _981 = vec3(_961); + _993 = mix(_858, mix(vec3(1.0) - (((vec3(1.0) - _981) * 2.0) * (vec3(1.0) - _858)), (_981 * 2.0) * _858, lessThan(_858, vec3(0.5))), vec3(_69._m18.x)); + } else { + _993 = clamp(max(_858 * 0.02500000037252902984619140625, _858 + vec3((_961 - 0.5) * _69._m18.x)), vec3(0.0), vec3(1.0)); + } + _1012 = _993; + } + _1013 = _1012; + break; + } while (false); + _1014 = _1013; + } else { + _1014 = _858; + } + vec3 _1016 = max(_1014 * mat3(vec3(0.514900028705596923828125, 0.324400007724761962890625, 0.1606999933719635009765625), vec3(0.265399992465972900390625, 0.67040002346038818359375, 0.06419999897480010986328125), vec3(0.02480000071227550506591796875, 0.1247999966144561767578125, 0.85039997100830078125)), vec3(0.00999999977648258209228515625, 0.0, 0.0)); + float _1017 = _1016.y; + vec3 _1042 = mix(_1014, clamp((_69._m81.xyz * (_1017 * ((1.33000004291534423828125 * (1.0 + ((_1017 + _1016.z) / _1016.x))) - 1.67999994754791259765625))) * _69._m81.w, vec3(0.0), vec3(1.0)), vec3(clamp(((0.039999999105930328369140625 / (0.039999999105930328369140625 + _516)) * _69._m82.x) + _69._m82.y, 0.0, 1.0))); + vec3 _1072; + if (floatBitsToInt(_69._m84.w) != 0) { + _1072 = mix(_1042, texture(sampler2D(_85, _10), ((((_4.xy - vec2(0.5)) * _69._m84.z) / mix(_69._m85.wx, _69._m85.zy, _4.yx)) - _69._m84.xy) + vec2(0.5)).xyz, vec3(_69._m84.w)); + } else { + _1072 = _1042; + } + vec3 _1230; + if (_547) { + float _1091 = max(max(_1072.x, max(_1072.y, _1072.z)), 9.9999997473787516355514526367188e-05); + float _1097 = (_856 && (!(_67._m5 != 0u))) ? 1.0 : (((_1091 > _67._m7) ? ((_1091 * _67._m8) + _67._m9) : _1091) / _1091); + vec3 _1098 = _1072 * _1097; + float _1101 = _1098.z; + float _1103 = floor(_1101 * 14.99989986419677734375); + float _1109 = (_1103 * 0.0625) + (_1098.x * 0.05859375); + float _1111 = _1098.y * 0.9375; + vec4 _1115 = texture(sampler2D(_82, _10), vec2(0.001953125, 0.03125) + vec2(_1109, _1111)); + vec4 _1121 = texture(sampler2D(_82, _10), vec2(0.001953125, 0.03125) + vec2(_1109 + 0.0625, _1111)); + vec3 _1124 = mix(_1115.xyz, _1121.xyz, vec3((_1101 * 15.0) - _1103)); + vec3 _1227; + if (_93._m0[0u]._m0._m0 > 0) { + float _1158 = _1124.z; + float _1160 = floor(_1158 * 14.99989986419677734375); + float _1166 = (_1160 * 0.0625) + (_1124.x * 0.05859375); + float _1168 = _1124.y * 0.9375; + vec3 _1183 = mix(_1124, mix(texture(sampler2D(_80, _10), vec2(0.001953125, 0.03125) + vec2(_1166, _1168)).xyz, texture(sampler2D(_80, _10), vec2(0.001953125, 0.03125) + vec2(_1166 + 0.0625, _1168)).xyz, vec3((_1158 * 15.0) - _1160)), vec3(clamp(((_307 < _93._m0[0u]._m1[0]._m2) ? clamp((_307 - _93._m0[0u]._m1[0]._m0) * _93._m0[0u]._m1[0]._m1, 0.0, 1.0) : (1.0 - clamp((_307 - _93._m0[0u]._m1[0]._m2) * _93._m0[0u]._m1[0]._m3, 0.0, 1.0))) + _93._m0[0u]._m1[0]._m4, 0.0, 1.0))); + float _1195 = _1183.z; + float _1197 = floor(_1195 * 14.99989986419677734375); + float _1203 = (_1197 * 0.0625) + (_1183.x * 0.05859375); + float _1205 = _1183.y * 0.9375; + _1227 = mix(_1183, mix(_1183, mix(texture(sampler2D(_81, _10), vec2(0.001953125, 0.03125) + vec2(_1203, _1205)).xyz, texture(sampler2D(_81, _10), vec2(0.001953125, 0.03125) + vec2(_1203 + 0.0625, _1205)).xyz, vec3((_1195 * 15.0) - _1197)), vec3(clamp(((_307 < _93._m0[0u]._m1[1]._m2) ? clamp((_307 - _93._m0[0u]._m1[1]._m0) * _93._m0[0u]._m1[1]._m1, 0.0, 1.0) : (1.0 - clamp((_307 - _93._m0[0u]._m1[1]._m2) * _93._m0[0u]._m1[1]._m3, 0.0, 1.0))) + _93._m0[0u]._m1[1]._m4, 0.0, 1.0))), vec3(dot(texture(sampler2D(_83, _10), _4.xy).xyz, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)))); + } else { + _1227 = _1124; + } + _1230 = _1227 / vec3(_1097); + } else { + _1230 = _1072; + } + +#if 1 + _1230 = DecodeLUTInput(_1230); +#endif + + vec4 _1235 = vec4(_1230, dot(_1230, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625))); + vec3 _1236 = _1235.xyz; + ivec4 _1278 = ivec4(uvec4(uvec2(ivec2(uvec2(gl_FragCoord.xy))) & uvec2(63u), uint(int(_60._m0[0u]._m22) & 31), 0u)); + vec3 _1286 = (vec3(texelFetch(_63, _1278.xyz, _1278.w).x) * 2.0) - vec3(1.0); + vec3 _1297; + if (_724) { + _1297 = vec3(ivec3(sign(_1286))) * (vec3(1.0) - sqrt(vec3(1.0) - abs(_1286))); + } else { + _1297 = _1286; + } + vec3 _1299 = _1236 + (_1297 * mix(_69._m39.xyz, _69._m40.xyz, pow(clamp((mix(vec3(max(_1230.x, max(_1230.y, _1230.z))), _1236, bvec3(floatBitsToInt(_69._m41.w) != 0)) - _69._m42.xyz) * _69._m41.xyz, vec3(0.0), vec3(1.0)), vec3(_69._m42.w)))); + vec4 _1300 = vec4(_1299.x, _1299.y, _1299.z, _1235.w); + vec4 _1305; + if (!_724) { + _1305 = clamp(_1300, vec4(0.0), vec4(1.0)); + } else { + _1305 = _1300; + } + _6 = _1305; +} + diff --git a/src/games/rdr2vk/tonemap/tonemap_0x54F0BD84.frag.glsl b/src/games/rdr2vk/tonemap/tonemap_0x54F0BD84.frag.glsl new file mode 100644 index 0000000000..b4a493e197 --- /dev/null +++ b/src/games/rdr2vk/tonemap/tonemap_0x54F0BD84.frag.glsl @@ -0,0 +1,915 @@ +#version 450 + +#extension GL_GOOGLE_include_directive : require +#include "./tonemap.glsl" + +#extension GL_EXT_scalar_block_layout : require +#if defined(GL_EXT_control_flow_attributes) +#extension GL_EXT_control_flow_attributes : require +#define SPIRV_CROSS_FLATTEN [[flatten]] +#define SPIRV_CROSS_BRANCH [[dont_flatten]] +#define SPIRV_CROSS_UNROLL [[unroll]] +#define SPIRV_CROSS_LOOP [[dont_unroll]] +#else +#define SPIRV_CROSS_FLATTEN +#define SPIRV_CROSS_BRANCH +#define SPIRV_CROSS_UNROLL +#define SPIRV_CROSS_LOOP +#endif +#extension GL_EXT_samplerless_texture_functions : require + +struct _13 { + float _m0; +}; + +struct _15 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; +}; + +struct _14 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + _15 _m5; +}; + +struct _17 { + vec4 _m0; + vec4 _m1; + mat4 _m2; +}; + +struct _18 { + vec4 _m0; + vec4 _m1; +}; + +struct _19 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + vec4 _m5; + vec4 _m6; +}; + +struct _20 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; +}; + +struct _16 { + _17 _m0[2]; + _18 _m1; + _19 _m2; + _20 _m3; + vec4 _m4[3]; + vec2 _m5; + vec2 _m6; + vec2 _m7; + float _m8; + vec4 _m9[4]; + vec2 _m10; + vec2 _m11; + vec4 _m12; + vec4 _m13; + vec4 _m14; + vec4 _m15[4]; + float _m16; + int _m17; + float _m18; + float _m19; +}; + +struct _22 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; +}; + +struct _23 { + float _m0; + float _m1; + float _m2; +}; + +struct _24 { + float _m0; + float _m1; + float _m2; + float _m3; + vec3 _m4; + int _m5; +}; + +struct _21 { + _22 _m0; + _23 _m1; + _24 _m2; + vec2 _m3; + vec2 _m4; + vec4 _m5; + float _m6; + float _m7; + uint _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + float _m16; + float _m17; +}; + +struct _25 { + vec4 _m0[5]; +}; + +struct _26 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _27 { + float _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _28 { + int _m0; + int _m1; +}; + +struct _29 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + vec2 _m6; + float _m7; + float _m8; + float _m9; + float _m10; +}; + +struct _12 { + float _m0; + vec4 _m1; + float _m2; + vec4 _m3; + uvec4 _m4; + uvec4 _m5; + vec4 _m6; + int _m7; + int _m8; + int _m9; + vec4 _m10; + vec4 _m11[8]; + uint _m12; + vec3 _m13; + vec3 _m14; + vec2 _m15; + vec2 _m16; + mat3 _m17; + vec3 _m18; + vec3 _m19; + float _m20; + float _m21; + vec3 _m22; + vec3 _m23; + vec3 _m24; + vec3 _m25; + vec4 _m26[13]; + int _m27; + vec4 _m28; + vec4 _m29; + vec4 _m30; + vec3 _m31; + vec3 _m32; + vec3 _m33; + vec3 _m34; + vec4 _m35; + float _m36; + float _m37; + float _m38; + float _m39; + mat4 _m40; + _13 _m41; + _14 _m42; + _16 _m43; + _21 _m44; + _25 _m45; + _26 _m46; + _27 _m47[5]; + vec4 _m48; + _28 _m49; + vec4 _m50; + _29 _m51; +}; + +struct _33 { + float _m0; + vec3 _m1; + vec3 _m2; + vec3 _m3; + float _m4; + vec3 _m5; + vec3 _m6; + float _m7; + vec3 _m8; + vec3 _m9; + vec2 _m10; + vec3 _m11; + vec4 _m12; + vec4 _m13[4]; + vec4 _m14; + float _m15; + int _m16; +}; + +struct _34 { + float _m0; +}; + +struct _36 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + uint _m6; + uint _m7; + uvec4 _m8; +}; + +struct _35 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + _36 _m3; + vec2 _m4; +}; + +struct _38 { + float _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _39 { + int _m0; +}; + +struct _40 { + _39 _m0; + float _m1; + float _m2; + float _m3; +}; + +struct _37 { + vec3 _m0; + vec3 _m1; + float _m2; + float _m3; + _38 _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + uint _m15; + _39 _m16; + _39 _m17; + _40 _m18; + vec4 _m19; + float _m20; + float _m21; + float _m22; + float _m23; + float _m24; + float _m25; + float _m26; + float _m27; +}; + +struct _42 { + vec3 _m0; + float _m1; +}; + +struct _43 { + vec4 _m0; + vec4 _m1; + vec4 _m2; +}; + +struct _44 { + vec2 _m0; + vec2 _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + vec2 _m8; + float _m9; +}; + +struct _45 { + float _m0; + _39 _m1; +}; + +struct _46 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _47 { + _39 _m0; + float _m1; + float _m2; +}; + +struct _49 { + int _m0; +}; + +struct _48 { + _39 _m0; + _49 _m1; + _49 _m2; +}; + +struct _50 { + _39 _m0; +}; + +struct _41 { + _42 _m0; + vec4 _m1; + mat4 _m2; + mat4 _m3; + _43 _m4; + _44 _m5; + _45 _m6; + _46 _m7; + _47 _m8; + _48 _m9; + _50 _m10; + float _m11; + float _m12; + float _m13; +}; + +struct _51 { + float _m0; + float _m1; + vec2 _m2; + vec2 _m3; + vec2 _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; +}; + +struct _52 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec3 _m3; + vec3 _m4; + vec3 _m5; + vec3 _m6; + vec3 _m7; +}; + +struct _53 { + vec4 _m0; + vec4 _m1; + vec3 _m2; +}; + +struct _54 { + vec4 _m0; + vec4 _m1; +}; + +struct _56 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; +}; + +struct _55 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; + float _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + float _m16; + float _m17; + float _m18; + _56 _m19[2]; +}; + +struct _57 { + vec2 _m0; + vec2 _m1; + vec2 _m2; + float _m3; + float _m4; + float _m5; + vec2 _m6; +}; + +struct _58 { + vec4 _m0; + vec4 _m1; + vec2 _m2; + float _m3; + float _m4; + float _m5; +}; + +struct _59 { + vec3 _m0; + float _m1; + float _m2; +}; + +struct _32 { + float _m0[32]; + float _m1[32]; + _33 _m2; + _33 _m3; + _34 _m4; + _35 _m5; + _37 _m6; + _41 _m7; + _51 _m8; + _52 _m9; + float _m10; + vec2 _m11; + _53 _m12; + _54 _m13; + float _m14; + float _m15; + vec4 _m16; + _55 _m17; + _57 _m18; + _58 _m19; + vec4 _m20; + float _m21; + uint _m22; + uvec2 _m23; + uvec2 _m24; + uint _m25; + float _m26; + float _m27; + float _m28; + float _m29; + _59 _m30; + int _m31; +}; + +struct _91 { + int _m0; + float _m1; + int _m2[2]; +}; + +struct _92 { + float _m0; + float _m1; + float _m2; + float _m3; + float _m4; +}; + +struct _90 { + _91 _m0; + _92 _m1[11]; +}; + +float _268; + +layout(set = 0, binding = 98, scalar) readonly buffer _11_30 { + _12 _m0[]; +} +_30; + +layout(set = 0, binding = 99, scalar) readonly buffer _31_60 { + _32 _m0[]; +} +_60; + +layout(set = 0, binding = 20, std140) uniform _66_67 { + float _m0; + float _m1; + uint _m2; + uint _m3; + uint _m4; + uint _m5; + float _m6; + float _m7; + float _m8; + float _m9; + float _m10; + float _m11; + float _m12; + float _m13; + float _m14; + float _m15; + uint _m16; + uint _m17; + uint _m18; + uint _m19; +} +_67; + +layout(set = 1, binding = 16, std140) uniform _68_69 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec4 _m3; + vec4 _m4; + vec4 _m5; + vec4 _m6; + vec4 _m7; + vec4 _m8; + vec4 _m9; + vec4 _m10; + vec4 _m11; + vec4 _m12; + vec4 _m13; + vec4 _m14; + vec2 _m15; + vec4 _m16; + vec4 _m17; + vec4 _m18; + vec4 _m19; + vec4 _m20; + vec4 _m21; + vec4 _m22; + vec4 _m23; + vec4 _m24; + vec3 _m25; + vec3 _m26; + vec3 _m27; + vec4 _m28; + vec4 _m29; + vec4 _m30; + vec4 _m31; + vec4 _m32; + vec4 _m33; + vec4 _m34; + vec4 _m35; + vec4 _m36; + vec4 _m37; + vec3 _m38; + vec4 _m39; + vec4 _m40; + vec4 _m41; + vec4 _m42; + mat4 _m43; + vec4 _m44; + vec4 _m45; + vec4 _m46; + vec4 _m47; + vec4 _m48; + vec4 _m49; + vec4 _m50; + vec4 _m51; + vec4 _m52; + vec4 _m53; + vec4 _m54; + vec4 _m55; + vec4 _m56; + vec4 _m57; + float _m58; + vec4 _m59; + vec4 _m60; + float _m61; + vec4 _m62; + vec4 _m63; + vec2 _m64; + vec4 _m65; + vec4 _m66; + vec4 _m67; + vec4 _m68; + vec4 _m69; + vec4 _m70; + vec4 _m71; + vec4 _m72; + vec4 _m73; + vec4 _m74; + vec4 _m75; + vec4 _m76; + vec4 _m77; + vec3 _m78; + float _m79; + vec4 _m80; + vec4 _m81; + vec4 _m82; + vec4 _m83; + vec4 _m84; + vec4 _m85; +} +_69; + +layout(set = 0, binding = 214, std430) readonly buffer _89_93 { + _90 _m0[]; +} +_93; + +layout(set = 1, binding = 32) uniform sampler _8; +layout(set = 1, binding = 33) uniform sampler _9; +layout(set = 1, binding = 34) uniform sampler _10; +layout(set = 0, binding = 121) uniform texture2DArray _63; +layout(set = 0, binding = 140) uniform texture2D _64; +layout(set = 1, binding = 173) uniform texture2D _70; +layout(set = 1, binding = 174) uniform texture2D _71; +layout(set = 1, binding = 177) uniform texture2D _72; +layout(set = 1, binding = 185) uniform texture1D _74; +layout(set = 1, binding = 40) uniform sampler _75; +layout(set = 1, binding = 186) uniform texture2D _76; +layout(set = 1, binding = 190) uniform texture2D _77; +layout(set = 1, binding = 191) uniform texture2D _78; +layout(set = 1, binding = 196) uniform texture2D _79; +layout(set = 1, binding = 197) uniform texture2D _80; +layout(set = 1, binding = 202) uniform texture2D _81; +layout(set = 1, binding = 203) uniform texture2D _82; +layout(set = 1, binding = 205) uniform texture2D _83; +layout(set = 1, binding = 206) uniform texture2D _84; +layout(set = 1, binding = 207) uniform texture2D _85; +layout(set = 1, binding = 209) uniform texture2D _86; +layout(set = 1, binding = 210) uniform texture2D _87; +layout(set = 1, binding = 212) uniform samplerBuffer _88; + +layout(location = 0) in vec4 _4; +layout(location = 1) in float _5; +layout(location = 0) out vec4 _6; + +void main() { + vec4 _278 = texture(sampler2D(_84, _8), _4.xy); + vec2 _279 = _278.xy; + float _287 = 1.0 + _69._m0.w; + float _290 = _69._m0.z / (_287 - textureLod(sampler2D(_71, _8), _279, 0.0).x); + vec4 _294 = texture(sampler2D(_76, _75), _279); + vec4 _319 = textureLod(sampler2D(_87, _8), _279 * _69._m80.xy, 0.0) * 1.0; + float _320 = _319.z; + vec4 _477; + SPIRV_CROSS_BRANCH + if ((_320 >= 1.0) && (_319.w < 2.0)) { + float _338 = min(length(textureLod(sampler2D(_86, _8), _279, 0.0).xy * _69._m20.x), _69._m20.z); + float _341 = min(_320, 2.0); + vec2 _342 = (_319.xy / vec2(_320)) * _341; + int _345 = int(min(2.0, 1.0 + _341)); + vec2 _349 = _342 * _69._m63.xy; + float _351 = float(_345) - 0.5; + float _352 = _351 / _341; + vec2 _354 = (-_342) * _69._m63.xy; + vec2 _357 = vec2(uvec2(gl_FragCoord.xy) & uvec2(1u)); + float _371 = ((((_357.x * 2.0) - 1.0) * ((_357.y * 2.0) - 1.0)) * _69._m20.w) * clamp((_341 - 2.0) * 0.5, 0.0, 1.0); + float _372 = 0.5 + _371; + float _373 = 0.5 - _371; + vec4 _375; + _375 = vec4(0.0); + for (int _378 = 0; _378 < _345;) { + float _382 = float(_378); + float _383 = _382 + _372; + vec2 _386 = _279 + (_349 * (_383 / _351)); + float _392 = min(length(textureLod(sampler2D(_86, _8), _386, 0.0).xy * _69._m20.x), _69._m20.z); + float _398 = _69._m0.z / (_287 - textureLod(sampler2D(_70, _8), _386, 0.0).x); + float _403 = _338 * _352; + float _420 = _382 + _373; + vec2 _423 = _279 + (_354 * (_420 / _351)); + float _429 = min(length(textureLod(sampler2D(_86, _8), _423, 0.0).xy * _69._m20.x), _69._m20.z); + float _434 = _69._m0.z / (_287 - textureLod(sampler2D(_70, _8), _423, 0.0).x); + float _451 = (1.0 - clamp((1.0 - _429) * 8.0, 0.0, 1.0)) * dot(clamp(vec2(0.5) + (vec2(1.0, -1.0) * (_434 - _290)), vec2(0.0), vec2(1.0)), clamp(vec2(_403, _429 * _352) - vec2(max(_420 - 1.0, 0.0)), vec2(0.0), vec2(1.0))); + bvec2 _457 = bvec2(_398 > _434, _429 > _392); + float _459 = all(_457) ? _451 : ((1.0 - clamp((1.0 - _392) * 8.0, 0.0, 1.0)) * dot(clamp(vec2(0.5) + (vec2(1.0, -1.0) * (_398 - _290)), vec2(0.0), vec2(1.0)), clamp(vec2(_403, _392 * _352) - vec2(max(_383 - 1.0, 0.0)), vec2(0.0), vec2(1.0)))); + float _461 = any(_457) ? _451 : _459; + _375 = (_375 + vec4(textureLod(sampler2D(_77, _9), _423, 0.0).xyz * _461, _461)) + vec4(textureLod(sampler2D(_77, _9), _386, 0.0).xyz * _459, _459); + _378++; + continue; + } + _477 = _375 / vec4(float(2 * _345)); + } else { + _477 = vec4(0.0); + } + vec4 _485 = textureLod(sampler2D(_78, _9), _279, 0.0); + vec3 _490 = _485.xyz + ((_477.xyz + (vec4(vec4(_294.xyz, 0.0).xyz * _30._m0[0u]._m1.w, _268).xyz * (1.0 - _477.w))) * (1.0 - _485.w)); + vec4 _493 = texelFetch(_88, int(0u)); + vec4 _494 = texelFetch(_88, int(1u)); + bool _524; + vec3 _525; + if (floatBitsToInt(_69._m61) != 0) { + vec4 _510 = texture(sampler2D(_83, _75), _4.xy); + float _511 = _510.w; + bool _513 = (_511 + 9.9999997473787516355514526367188e-05) >= 1.0; + vec3 _522; + if (_513) { + _522 = _510.xyz; + } else { + _522 = _510.xyz + (_490 * (1.0 - _511)); + } + _524 = _513 ? true : false; + _525 = _522; + } else { + _524 = false; + _525 = _490; + } + vec3 _529 = min(_525 * texelFetch(_64, ivec2(0), 0).x, vec3(65504.0)); + bool _530 = !_524; + float _643; + vec3 _644; + if (_530) { + float _589; + if (floatBitsToInt(_69._m70.x) != 0) { + float _552 = clamp(dot(texture(sampler2D(_72, _10), _279).xyz * texelFetch(_64, ivec2(0), 0).x, vec3(0.300000011920928955078125, 0.589999973773956298828125, 0.10999999940395355224609375)), _69._m72.z, _69._m72.w); + float _575 = clamp(((((_69._m70.y * log(_552 + _69._m72.x)) + _69._m70.z) - 10.0) + (_69._m72.y * _552)) + _69._m65.w, _69._m66.x, _69._m66.y); + _589 = pow(2.0, mix(_5, clamp(_575 + ((abs(_575) * _69._m66.z) * float(int(sign(_575)))), _69._m66.x, _69._m66.y), clamp(_69._m70.x, 0.0, 1.0))); + } else { + _589 = _4.z; + } + vec3 _642; + if (floatBitsToInt(_69._m51.w) != 0) { + vec2 _618 = ((_4.xy - _69._m50.xy) * mat2(vec2(_69._m52.x, _69._m52.y), vec2(_69._m52.z, _69._m52.w))) * _69._m50.zw; + float _622 = max((dot(_618, _618) - _69._m53.x) * _69._m53.w, 0.0); + bool _623 = _622 < 1.0; + _642 = mix(_529, (_529 * _69._m51.xyz) * _69._m51.w, vec3(_623 ? (_623 ? (1.0 - pow(2.0, (-10.0) * _622)) : 1.0) : (0.9980499744415283203125 + (((_622 - 1.0) > 0.0) ? pow(2.0, 10.0 * (_622 - 2.0)) : 0.0)))); + } else { + _642 = _529; + } + _643 = _589; + _644 = _642; + } else { + _643 = _4.z; + _644 = _529; + } + vec3 _681 = _644 * mix(mix(_69._m54.xyz, _69._m56.xyz, vec3(clamp(clamp(_4.y * _69._m57.y, 0.0, 1.0) + _69._m54.w, 0.0, 1.0))), mix(_69._m56.xyz, _69._m55.xyz, vec3(clamp(clamp(clamp(_4.y - _69._m56.w, 0.0, 1.0) * _69._m57.x, 0.0, 1.0) - _69._m55.w, 0.0, 1.0))), vec3(_4.y)); + bool _684 = _67._m3 != 0u; + vec3 _747; + if (_684) { + vec3 _724 = max(vec3(0.0), _681 * (_643 / _67._m6)); + vec3 _727 = _724 * _493.x; + _747 = (((((_724 * (_727 + vec3(_494.x))) + vec3(_494.y)) / ((_724 * (_727 + vec3(_493.y))) + vec3(_494.z))) - vec3(_494.w)) * ((_67._m4 != 0u) ? _67._m10 : _493.z)) * _67._m6; + } else { + vec3 _690 = max(vec3(0.0), _681 * _643); + vec3 _693 = _690 * _493.x; + _747 = clamp(((((_690 * (_693 + vec3(_494.x))) + vec3(_494.y)) / ((_690 * (_693 + vec3(_493.y))) + vec3(_494.z))) - vec3(_494.w)) * _493.z, vec3(0.0), vec3(1.0)); + } + vec3 _795; + if (_530) { + vec3 _794; + if (floatBitsToInt(_69._m47.w) != 0) { + vec2 _780 = ((_4.xy - _69._m46.xy) * mat2(vec2(_69._m48.x, _69._m48.y), vec2(_69._m48.z, _69._m48.w))) * _69._m46.zw; + _794 = mix(_747, _69._m47.xyz, vec3(_69._m47.w * texture(sampler1D(_74, _10), min(1.0, max((dot(_780, _780) - _69._m49.x) * _69._m49.w, 0.0))).w)); + } else { + _794 = _747; + } + _795 = _794; + } else { + _795 = _747; + } + bool _816 = _684 && (!(_67._m2 != 0u)); + +#if 1 + vec3 _818 = EncodeLUTInput(_795, _67._m11, _67._m12, _67._m13, _67._m14, _816); +#else + vec3 _818 = mix(mix((pow(_795, vec3(_67._m12)) * _67._m13) - vec3(_67._m14), _795 * _67._m11, lessThan(_795, vec3(0.003130800090730190277099609375))), _795, bvec3(_816)); +#endif + + vec3 _820 = max(_818 * mat3(vec3(0.514900028705596923828125, 0.324400007724761962890625, 0.1606999933719635009765625), vec3(0.265399992465972900390625, 0.67040002346038818359375, 0.06419999897480010986328125), vec3(0.02480000071227550506591796875, 0.1247999966144561767578125, 0.85039997100830078125)), + vec3(0.00999999977648258209228515625, 0.0, 0.0)); + float _821 = _820.y; + vec3 _846 = mix(_818, clamp((_69._m81.xyz * (_821 * ((1.33000004291534423828125 * (1.0 + ((_821 + _820.z) / _820.x))) - 1.67999994754791259765625))) * _69._m81.w, vec3(0.0), vec3(1.0)), vec3(clamp(((0.039999999105930328369140625 / (0.039999999105930328369140625 + dot(_490 * texelFetch(_64, ivec2(0), 0).x, vec3(0.300000011920928955078125, 0.589999973773956298828125, 0.10999999940395355224609375)))) * _69._m82.x) + _69._m82.y, 0.0, 1.0))); + vec3 _876; + if (floatBitsToInt(_69._m84.w) != 0) { + _876 = mix(_846, texture(sampler2D(_85, _10), ((((_4.xy - vec2(0.5)) * _69._m84.z) / mix(_69._m85.wx, _69._m85.zy, _4.yx)) - _69._m84.xy) + vec2(0.5)).xyz, vec3(_69._m84.w)); + } else { + _876 = _846; + } + vec3 _1034; + if (_530) { + float _895 = max(max(_876.x, max(_876.y, _876.z)), 9.9999997473787516355514526367188e-05); + float _901 = (_816 && (!(_67._m5 != 0u))) ? 1.0 : (((_895 > _67._m7) ? ((_895 * _67._m8) + _67._m9) : _895) / _895); + vec3 _902 = _876 * _901; + float _905 = _902.z; + float _907 = floor(_905 * 14.99989986419677734375); + float _913 = (_907 * 0.0625) + (_902.x * 0.05859375); + float _915 = _902.y * 0.9375; + vec4 _919 = texture(sampler2D(_81, _10), vec2(0.001953125, 0.03125) + vec2(_913, _915)); + vec4 _925 = texture(sampler2D(_81, _10), vec2(0.001953125, 0.03125) + vec2(_913 + 0.0625, _915)); + vec3 _928 = mix(_919.xyz, _925.xyz, vec3((_905 * 15.0) - _907)); + vec3 _1031; + if (_93._m0[0u]._m0._m0 > 0) { + float _962 = _928.z; + float _964 = floor(_962 * 14.99989986419677734375); + float _970 = (_964 * 0.0625) + (_928.x * 0.05859375); + float _972 = _928.y * 0.9375; + vec3 _987 = mix(_928, mix(texture(sampler2D(_79, _10), vec2(0.001953125, 0.03125) + vec2(_970, _972)).xyz, texture(sampler2D(_79, _10), vec2(0.001953125, 0.03125) + vec2(_970 + 0.0625, _972)).xyz, vec3((_962 * 15.0) - _964)), vec3(clamp(((_290 < _93._m0[0u]._m1[0]._m2) ? clamp((_290 - _93._m0[0u]._m1[0]._m0) * _93._m0[0u]._m1[0]._m1, 0.0, 1.0) : (1.0 - clamp((_290 - _93._m0[0u]._m1[0]._m2) * _93._m0[0u]._m1[0]._m3, 0.0, 1.0))) + _93._m0[0u]._m1[0]._m4, 0.0, 1.0))); + float _999 = _987.z; + float _1001 = floor(_999 * 14.99989986419677734375); + float _1007 = (_1001 * 0.0625) + (_987.x * 0.05859375); + float _1009 = _987.y * 0.9375; + _1031 = mix(_987, mix(_987, mix(texture(sampler2D(_80, _10), vec2(0.001953125, 0.03125) + vec2(_1007, _1009)).xyz, texture(sampler2D(_80, _10), vec2(0.001953125, 0.03125) + vec2(_1007 + 0.0625, _1009)).xyz, vec3((_999 * 15.0) - _1001)), vec3(clamp(((_290 < _93._m0[0u]._m1[1]._m2) ? clamp((_290 - _93._m0[0u]._m1[1]._m0) * _93._m0[0u]._m1[1]._m1, 0.0, 1.0) : (1.0 - clamp((_290 - _93._m0[0u]._m1[1]._m2) * _93._m0[0u]._m1[1]._m3, 0.0, 1.0))) + _93._m0[0u]._m1[1]._m4, 0.0, 1.0))), vec3(dot(texture(sampler2D(_82, _10), _279).xyz, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)))); + } else { + _1031 = _928; + } + _1034 = _1031 / vec3(_901); + } else { + _1034 = _876; + } + +#if 1 + _1034 = DecodeLUTInput(_1034); +#endif + + vec4 _1039 = vec4(_1034, dot(_1034, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625))); + vec3 _1040 = _1039.xyz; + ivec4 _1082 = ivec4(uvec4(uvec2(ivec2(uvec2(gl_FragCoord.xy))) & uvec2(63u), uint(int(_60._m0[0u]._m22) & 31), 0u)); + vec3 _1090 = (vec3(texelFetch(_63, _1082.xyz, _1082.w).x) * 2.0) - vec3(1.0); + vec3 _1101; + if (_684) { + _1101 = vec3(ivec3(sign(_1090))) * (vec3(1.0) - sqrt(vec3(1.0) - abs(_1090))); + } else { + _1101 = _1090; + } + vec3 _1103 = _1040 + (_1101 * mix(_69._m39.xyz, _69._m40.xyz, pow(clamp((mix(vec3(max(_1034.x, max(_1034.y, _1034.z))), _1040, bvec3(floatBitsToInt(_69._m41.w) != 0)) - _69._m42.xyz) * _69._m41.xyz, vec3(0.0), vec3(1.0)), vec3(_69._m42.w)))); + vec4 _1104 = vec4(_1103.x, _1103.y, _1103.z, _1039.w); + vec4 _1109; + if (!_684) { + _1109 = clamp(_1104, vec4(0.0), vec4(1.0)); + } else { + _1109 = _1104; + } + _6 = _1109; +} + From 5b71ce087ad71ffe416d9a8eb1f53d34d91fc85e Mon Sep 17 00:00:00 2001 From: Musa Haji Date: Wed, 25 Feb 2026 20:27:51 -0500 Subject: [PATCH 13/30] fix(rdr2vk): disable lut gamma encoding with deadeye/eagle eye --- src/games/rdr2vk/addon.cpp | 9 +++++++++ .../output/compiled/0x14BF23D4.frag.spv | Bin 19744 -> 19744 bytes .../output/compiled/0x1B0D650C.frag.spv | Bin 19284 -> 19284 bytes .../output/compiled/0x26B3FAA9.frag.spv | Bin 19612 -> 19612 bytes .../output/compiled/0x6032A998.frag.spv | Bin 19844 -> 19844 bytes .../output/compiled/0x76A78879.frag.spv | Bin 19744 -> 19744 bytes .../output/compiled/0x7BE28339.frag.spv | Bin 19256 -> 19256 bytes .../output/compiled/0x8B9C89F1.frag.spv | Bin 63296 -> 63296 bytes .../output/compiled/0xA383C448.frag.spv | Bin 30580 -> 30580 bytes .../output/compiled/0xBCF843ED.frag.spv | Bin 19716 -> 19716 bytes .../output/compiled/0xC235CFFA.comp.spv | Bin 14936 -> 14936 bytes .../output/compiled/0xFCD82342.frag.spv | Bin 19808 -> 19808 bytes src/games/rdr2vk/shared.h | 18 ++++++++++-------- .../tonemap/compiled/0x0C1275BE.frag.spv | Bin 67920 -> 67920 bytes .../tonemap/compiled/0x2B012EDD.frag.spv | Bin 26320 -> 26320 bytes .../tonemap/compiled/0x4205843B.frag.spv | Bin 74184 -> 74184 bytes .../tonemap/compiled/0x54F0BD84.frag.spv | Bin 67980 -> 67980 bytes .../tonemap/compiled/0x6B9382CA.frag.spv | Bin 80820 -> 80820 bytes .../tonemap/compiled/0x809F5852.frag.spv | Bin 59968 -> 59968 bytes .../tonemap/compiled/0x9B304112.frag.spv | Bin 14564 -> 14564 bytes .../tonemap/compiled/0x9F191B0B.frag.spv | Bin 59768 -> 59768 bytes .../tonemap/compiled/0xA2ED1CB7.frag.spv | Bin 74244 -> 74244 bytes .../tonemap/compiled/0xCD6F15F2.frag.spv | Bin 13276 -> 13276 bytes .../tonemap/compiled/0xCF7FE0D7.frag.spv | Bin 66032 -> 66032 bytes .../tonemap/compiled/0xDA9A5AA0.frag.spv | Bin 72660 -> 70612 bytes .../tonemap/compiled/0xDD04030E.frag.spv | Bin 80812 -> 80812 bytes .../tonemap/compiled/0xE3E0B5C4.frag.spv | Bin 72804 -> 72804 bytes ...frag.glsl => deadeye_0xDA9A5AA0.frag.glsl} | 4 ++-- ...frag.glsl => tonemap_0x9F191B0B.frag.glsl} | 0 29 files changed, 21 insertions(+), 10 deletions(-) rename src/games/rdr2vk/tonemap/{0xDA9A5AA0.frag.glsl => deadeye_0xDA9A5AA0.frag.glsl} (99%) rename src/games/rdr2vk/tonemap/{0x9F191B0B.frag.glsl => tonemap_0x9F191B0B.frag.glsl} (100%) diff --git a/src/games/rdr2vk/addon.cpp b/src/games/rdr2vk/addon.cpp index df1c4621f3..faae03d1ba 100644 --- a/src/games/rdr2vk/addon.cpp +++ b/src/games/rdr2vk/addon.cpp @@ -15,6 +15,7 @@ #include "../../mods/shader.hpp" #include "../../utils/date.hpp" #include "../../utils/settings.hpp" +#include "./shared.h" namespace { @@ -51,6 +52,7 @@ renodx::mods::shader::CustomShaders custom_shaders = { }; +#if USE_SHADER_TOGGLE namespace shader_toggle { namespace runtime { float g_use_shaders = 1.f; // Controlled by slider @@ -115,9 +117,12 @@ renodx::utils::settings::Setting* GetSetting() { } } // namespace runtime } // namespace shader_toggle +#endif renodx::utils::settings::Settings settings = { +#if USE_SHADER_TOGGLE shader_toggle::runtime::GetSetting(), +#endif new renodx::utils::settings::Setting{ .value_type = renodx::utils::settings::SettingValueType::BUTTON, .label = "RenoDX Discord", @@ -198,10 +203,14 @@ BOOL APIENTRY DllMain(HMODULE h_module, DWORD fdw_reason, LPVOID lpv_reserved) { renodx::utils::settings::use_presets = false; renodx::mods::shader::force_pipeline_cloning = true; renodx::utils::shader::use_replace_async = true; +#if USE_SHADER_TOGGLE shader_toggle::runtime::RegisterEvents(); +#endif break; case DLL_PROCESS_DETACH: +#if USE_SHADER_TOGGLE shader_toggle::runtime::UnregisterEvents(); +#endif reshade::unregister_addon(h_module); break; } diff --git a/src/games/rdr2vk/output/compiled/0x14BF23D4.frag.spv b/src/games/rdr2vk/output/compiled/0x14BF23D4.frag.spv index b5c525375e20abc3d9a0d44a7e6626daee6adc55..1d91988f2c64a95a252f4492083b7c90e40a1249 100644 GIT binary patch literal 19744 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 literal 19744 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 diff --git a/src/games/rdr2vk/output/compiled/0x1B0D650C.frag.spv b/src/games/rdr2vk/output/compiled/0x1B0D650C.frag.spv index a4a728a1569fda43a8cfa17834cbe230dd4130e5..cc5584706622a0630dd55864592dcc5e8151e349 100644 GIT binary patch literal 19284 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 bp}|Mp*vLm-%Qsh;eE7lmspXVTA9MU4H@8gx literal 19284 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 diff --git a/src/games/rdr2vk/output/compiled/0x26B3FAA9.frag.spv b/src/games/rdr2vk/output/compiled/0x26B3FAA9.frag.spv index ad0c2b16069560992b27451c8ed0fb498fff3efa..0d345d7e5e67945ff169b9529b362be19f0e97ec 100644 GIT binary patch literal 19612 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 literal 19612 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 Zs2dyk$ZPp>g~^8>jGtPL>%_9g{{aV{bdCT3 diff --git a/src/games/rdr2vk/output/compiled/0x6032A998.frag.spv b/src/games/rdr2vk/output/compiled/0x6032A998.frag.spv index 8a2b66fa65dcadc990bfda3bc2a445c3f0ebdc1c..7220e99759c1531408965518e8806f0ad1ce32ae 100644 GIT binary patch literal 19844 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 auu(TU@{!l_%@igdb})8oIj7Ud8vh6V;fSRG literal 19844 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 literal 19744 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 Mc4|4L)5jYB2lX0CB>(^b literal 19256 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 ICzdt-56k0BoB#j- diff --git a/src/games/rdr2vk/output/compiled/0x8B9C89F1.frag.spv b/src/games/rdr2vk/output/compiled/0x8B9C89F1.frag.spv index a28b0e9ab4b429d8925986123424d5fe8a096ea9..b1f986d533e7b43f3ada1d6417169259f4094927 100644 GIT binary patch literal 63296 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 literal 63296 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 diff --git a/src/games/rdr2vk/output/compiled/0xA383C448.frag.spv b/src/games/rdr2vk/output/compiled/0xA383C448.frag.spv index b04ad19e2ab50e3a9499306817615e76ec8c390e..4f3787dda7279c8d314bfe26eb75748c15252da4 100644 GIT binary patch literal 30580 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 R2$K&x7(2C`*6Cx7{{zizfhhn0 literal 19716 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 z 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 diff --git a/src/games/rdr2vk/shared.h b/src/games/rdr2vk/shared.h index 2fb2e00a09..f7f5563225 100644 --- a/src/games/rdr2vk/shared.h +++ b/src/games/rdr2vk/shared.h @@ -1,16 +1,18 @@ #ifndef SRC_RDR2_SHARED_H_ #define SRC_RDR2_SHARED_H_ +#define USE_SHADER_TOGGLE 1 + #define CUSTOM_FILM_GRAIN_TYPE 1.f -#define RENODX_TONE_MAP_TYPE 2.f -#define RENODX_PEAK_WHITE_NITS 400.f -#define RENODX_DIFFUSE_WHITE_NITS 100.f -#define RENODX_GRAPHICS_WHITE_NITS 100.f -#define RENODX_SDR_EOTF_EMULATION 1.f -#define RENODX_TONE_MAP_PER_CHANNEL 0.f -#define RENODX_TONE_MAP_BLOWOUT 0.f -#define RENODX_TONE_MAP_HUE_SHIFT 0.f +#define RENODX_TONE_MAP_TYPE 2.f +#define RENODX_PEAK_WHITE_NITS 400.f +#define RENODX_DIFFUSE_WHITE_NITS 100.f +#define RENODX_GRAPHICS_WHITE_NITS 100.f +#define RENODX_SDR_EOTF_EMULATION 1.f +#define RENODX_TONE_MAP_PER_CHANNEL 0.f +#define RENODX_TONE_MAP_BLOWOUT 0.f +#define RENODX_TONE_MAP_HUE_SHIFT 0.f #define RENODX_TONE_MAP_EXPOSURE 1.f #define RENODX_TONE_MAP_HIGHLIGHTS 1.f diff --git a/src/games/rdr2vk/tonemap/compiled/0x0C1275BE.frag.spv b/src/games/rdr2vk/tonemap/compiled/0x0C1275BE.frag.spv index 2b13cc9ba51496ce4bed7dcc78625aeb71e0f315..02bb153c246ab0e92bdfcd08bff528162504106f 100644 GIT binary patch literal 67920 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�$TUi|>Ca$aw5))Te2Z@O*tAoVEmDNFF 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 diff --git a/src/games/rdr2vk/tonemap/compiled/0x2B012EDD.frag.spv b/src/games/rdr2vk/tonemap/compiled/0x2B012EDD.frag.spv index a76ab23a54786aa427ac44063a17ea2905b0d58d..ac34f73cd2be30efbee97130a05805eadeda0dac 100644 GIT binary patch literal 26320 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%0Do-c|oZvRfWu3r+T4}RDj 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 KR?S2wwf_TOef($u literal 26320 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 W?zNd4bClR;f{m?Rtlhk3KK=!D#_$OM literal 74184 zcmbTf2b>jE*2UY>pooeH2r8)wDj=bOCJNdh2r3F9VnQ1vC`uAgF@p)Sn6qNeiWxI1 z=A840IgDd=%;Q`Cs#?|i*6@Ard#`?;slCjI%P22H_PtbbYH7%^@JZja;K5q=FXekt*UpW=(2`o<=hh8x@DV`)snrl zwvk#3wU%nF)LN^xQL9jEtJY4fy;>t>K~D5tp2?4@$hyj6_{f@JyN<1yG;8L(IkTqM zOr1XK;F^i^=FOS5_kr`K%*AFc+svIfWA^kZbEZ$3JGW-ul=<@xoHM0n>VY#S&6_rB zrYy0opW9BFIDO)rn!TsbnzVn-^ofVeI&dEP2Iz;68Z~_6u$oD;XV=V~cgXZ9HPfff zoKiD++MFp0bMHqpIiMvor4C3w>m_cZR9;$Fs`Qe2hd)yq0d zn7jY9*)>z>eA>)?gzIUfSvy0g{8v6n|6QbW|6L{5^s3C_)h%PK)%59C)2Bb{CB>qY zV`Yw6pUOGMj780io;hYk*39UYW7c2IjH(>77Heko&N1t}zo)b+FIHmDIt$7gtgT=YZzFqz=vnaV2$Bq+CfIoEx$$se^MwTuB|A zE8HuB481&-E&)Bi(nsO6o}WUR6mQ>He!Kse?VJ^<7d2`%hd+9qc=C zC3PhGZ$?!~9myV?QB_h$_tdwf4iZzmk~&CCTuB`yru|k@2Z@O*se{DCmDE9E;!5fu zF>xhzkeIlVI!H`hNgX66uB46uDOXa5j!NuG>KK@CeM;&WlyW6?Y>{#$b!?e(C3RG% zTuB{+Q?8_rAt_f<$5tsew#jO6nMyawTL2?2vLLb&N{6k~&5wT)&b!c1*dFI>w}2NgX?-TuB{cQ?8_r zol`EUgJ);*Y|+DsXJ@h}dQ~R5qf4GMeS0L&xa1k53gDCHi=yH~vNgT@ye&`ONoxA` zN$is6OyAy#9R<|%O3xBvB+s0FeG?spNSF0nw~QicdZlY0+vIuFkC=7KC`P(uEWs2a zoQxwl*-O3pBx3_6Xicv^$sB=k6wdu|6wdvVz0*rY>%u^Bmk~dd=2z zChoJ(fs?&aRXe81zNqq;)h$c*M3okWF6@*2P}MgZtMcSsxkivY zlXnGGfnBmks`_VRU$<;DW7NAc8?*A{-MXf4x^|O&(z|x;j=@&1A-r=TbMekaAIV

+IT_yD;W)4KuADzV;F7Z-ytl&@ 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 bjH}+<>oYgzD6!828(Y6vzj^i9_&ojvJYAwg diff --git a/src/games/rdr2vk/tonemap/compiled/0x54F0BD84.frag.spv b/src/games/rdr2vk/tonemap/compiled/0x54F0BD84.frag.spv index c51e13b5cb2d7e0c0940c79a32ad130874485261..5f54e271b4ba2e5283e44cbc426aa300b2b30e41 100644 GIT binary patch literal 67980 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 literal 67980 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 diff --git a/src/games/rdr2vk/tonemap/compiled/0x6B9382CA.frag.spv b/src/games/rdr2vk/tonemap/compiled/0x6B9382CA.frag.spv index a0407b6e9a658bb7368a11583296b69b7e76f3de..07de61d1240253215c8df0fbd034834e7530627c 100644 GIT binary patch literal 80820 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 HdOrRSYHDPubK=-Gt^jjO7uGTq8m8&uVoOxg9I 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 literal 72660 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 J#?|xj{{bU`eeD1M literal 59968 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 Qdz@r^qen*1xOzVR4?U(Cvj6}9 literal 59768 zcmbWA2bdOB)~#Ejf+7L}0%D`6sHo(mXrm+*1r#&dAfTco0doQ|M-&rA%vmw#oO8|z z%sS5K7-o#)U2j#b)BCI8zxRJ`J$W5HHPTJj zDpmEWV7PBk+&9v_X;q_)A2wo#5gW~#J#nL6y}OC7YF1UBTc%sNYK^J}lIyAMwEwo_ zCr_)&v~Ug8=%TUO@@gxnHBoD-wxZffYR%MER%@=didqY`mTIlkR#j`Q)<&(Z+G=X; z)Y_|cP;0K9=$H8Q3;8h>(m*{78&NxCmoc@o#!sCwWzx(klV;7TojvK0*$2*?RJ-?q z(d)0)lTh}FzZV>C(KyXPVJE}E2?&C&xBb&wNrZ~%v!3Q+B;#^RqfP139|-j zr}j;l^;SEzU&5@t+Nu488)o^j4wX-~p3Si?J+9_hr{c1)HOIOYmyNGE*0H#3jLosG z#r4)L^~*XJ*C%qUdvSdu$376J5v}uOUx>@b-F>i6G>#Q@uy4d=>%(^JBXJdVu&=~b z)X_HQD(Yb0$*!Uf_My0nI@p)uD(YaLimRxDbuX@>4%WBkzoL$Oo%gJ$qdK>%s3TwR zJuB+S*L=^4I#~DWqoNMhyts-wSnJ{{>d4mo)SeY}Wb1xv&x$&_WWK#B>R2!5D(YB2 z=PK&p?A4mDsH1DnRn)Oz&Q;XGc`e_HIyTO^iaJP4b`^Dyn7E2MNKE^!q7D)hS5XIv ziL0oC#Kcw9L1N-6>L4+36?Kr9xQaSROk71B19GmS4jq-)Rn)O*#`USFV_?oz)UjF4 zRn)P0&Q;V=lXDey49dBRI=0BUiaNH;xr#al=Uhb{LvpU7j-eUXx1x?=Iag7~@SLlt zW2>C2sAKD#tEgj}oU5o~M9x*zv2D&()UjR8Rn##u=PK$Lm2v$l>KL7K6?JT%a}{;$ zkaHDvjLEr*I(E#ttPY-?*|S9tC*p6tRHmQv!!pZ z%r1MbNQGUtuY2^%#sRx*PwP>^GZ2}JXCS(4Z|m`Z4w=i(M{s;Tg5&cM9G{P1KOc#m zoe_E*5gVDyvB5DmIK~FY*kH$YJU@HsD?5Ai_(F%w<-WkNFR=TsV@+V!WP86)&^L>-R*zY9*+K;u?=s-nH#qhUj(vk; z-{9CcIQGpZsMRY2eP4);Mg}f_6?4GgWb3Li||cWzJ>i67x+`wR&A*46+0>eg5tWj$;mvV-AjE4vu3Ej$;mvV-AjE4vu3Ej$;lk zk2zc%b82ExYxTNEP1yj0i**E!HGy3dz6^e?UJLQfCL;KPqc7OLwvXe1K8^?2<3V3c zYOP*h@y#X}T;vIkeSu?N;Mf;9_62rdjvvP!eH?pm9D8sadvJN|;o{h{2jI%<9j?6I z;mYeBuDssi%Ih62u6M?g%~0DTf5v1R1FW$`$EK*&D?HLUetW*Zh}qIbX6#~RVQM(g8RLLb)>IIbmdTub1%mdHPQf7Qo&;v;i8e{jqn9P|#I?)0^bDil z_BqFvN_OSX(AbqfL&KFnL&KFnL&H_8>GN$x9i4KnqK-9luA+{$a;~C|&N)|6$J#kp zQO7zt#}-eut($Wd^U)>a>OMo0^LjZ~F(2#aTtyulvd7KFi_CXE|K?EQc$f<#6S*94?!;@O>!UDr!2n)1HHCk#lL! z!L`h}VqWX#ej0S(=O)9A{?$`W-Wzp9$cdz`gugzCqQ_8TQ_4P_;{D-#4w> zT{GiaWq5aRpZxn`^kZ|Joju?^glCMOIeuzkzh?>8mhiX|9$&(H zmGA^%^`CN|nB%m5CuKPQ-jRIv&T!rLAK5tTD;sqCWV-&TwtaJ)VolC*+H3oP`*utA z`{y{#!;}oyoi&U>ZQuO+cKVx^va%k)gnzthHcMvjYdtzUHjxL^K0jLhXd z2#$LY>^;cYGZWi>`TH_5mwmy}7i?elJ2>uNu=g*qX9?H#%RgTsb2&EHv8ib`x_&)s zIq8TE=E9y>t0GH@?SaUB^Y1^w2W7ZVcil4m!8uOr;E)`rxjHn%8ZceNZk^%YneSnl z+`pKI233dWIL-SJ;C|f--v(7j<~Z3OmErvN0K{&S`IC43?00*$I!?*?=*%wv&L2ES zIPQ(Pxjw}`Cda9!c^S^XUu>umTTOVMDYZjqj^Ag?>C25NezO7Y^DqHmPx^Us;! zIHq8aDS4lOt$rOuZpd8D4IFa=$K1d%H?VUf_KCu^`gIYpk+~cj9AkrHY_MY!>m+>j zYbIhLb9sDEM%HTzI%F>Q1CITGV?W^7&nfuo*IvXz=5j1>j0KLdz>Z~qkB4!bE9~Q3 zfg7v&_qE{VGo05Aj_V)XB-7V@&j{Bv=d$yS&t7ol^$%BG|8V8?4_99QaB=;+k5$CS z_Y>?|*DABC`>Y9-02qz4G%Dnaj3d+p-?OUO)Jr zj;&rd&>?f#7aV=T_O*Rnd+6iZ1IM)oj%yDb*B&^oJ+Rjvxt<|htJg&OM&@#^VCRbM ze02Iqi7hghZNav+KGuak)&-7rfn67Uohe+akE+B%=5k-)*caG+;d>Ug`uK`3G8ew+ z79i{6E;?i`#|6i@;28I8Z1qtNUt})FJqKAIsn8*FIW9QH1v{?o|F3&h^_uCfjW@6>+f2OnVS46aSAKTGHP7w(=%yO-epku4zL6_GyYX$A+x5qe zF~10`KTDxTWG;_6IF30ujyX7vIXI3vIF32kV@}@}3)kw;U+5c|%YB1m-{9CcIQ9*W zeS_UMeO)44+dF?YAal7daO?~0zVN*iTYYpRPh>9pf}=0kzP68fqK|okou}uC0u!3!j;!0TzOr>mDeR)d0oQAb;+8BYo(_5y>7Z` z>~n6_oJ-Ft>{{ns58aYoo1Dv@RrYP0b7_C!yIRim)-CzA%el0_uxp=lX@9|W$hm&H zCEwL^F56%3w`0cD{S6?#Yvf#32j2%Q0{84z%eNfNJD7`g#v06Wk`mj?;QRH<`bC%J z)+hgt?($66zu4ams;&U{@0R+xGRN6i5$mcPXLS)Pt4Wm)lf15UtmWbA6`5aGeXTCU9#P+^E2R2aoEDm2^@zl-2A|CD8VfX z9ETp<;=pm(!95bV0R{I;;5I3^C4t+t;Jy#sz=G59n8t6jf@>bQ%?qwNa5V+jEpUSh zt|o9>6x^u5ZCP;R0ynteW(00X!OaQW(1M#ExM2miC~(6IZgJqYD!4}iw{^k261Z&& zZb{%q6x{cL+qU3X&|bUS6SroY3i#uN7!q|Yf9G9lVO#X>2D4=>J=u_R~LG4)bsq}jN>9c`I z97E4}f;~9uuNEez^Svfu#+&nnYpwj2%>m~LSDB+mIBLWfyLtsjzvdVt?06=c!v~H$ z;5du8;JD1Wk7(yUs)L>T=oUElQ4=`Emp(=n9OoTZ>=&-G-~8`-=@)-;!v-ABS#!jy zR%86H)t&Jkr-mPADOcF;}^9cS*c?8@VTUHzgDj|W_NJmAXX0Y|>{J5G(9 ziNO_ffpadNe>msj`G<2Zo_{#!(p<9pa4x)?m~$??Uof86=^oeb^(A~mz{JR2Ud6@S z;hg&;l5OYQmjuqakCKD!ocol(IrobK=iILh9P5Q#ZVVh_1$Rf_{O);A;F=V6zXYyn z!7=d8k8vj6@_}2a;MxYRS;2J)+{y*lFL2Be@eT>xDg}2$;Qa16CvblEJhtF?_Hz-B zi=5$9QpR~L!O11BLwDQNFF3Cy>^vV{OK_eKuO&Fo2W!dkJRiJon)7^A2hQ`+IdGnj zE`jrWaGnv5_ZqHPFI>4^xN^O`|8PZLxUw(YvV6;9g#;JjxR1_**vmN9nOmj>eExMv@(m%({17*~9;^IR}C z<~$eFXAU3w@P5J9bJ41><6W66<^osl7p~kdT|H|*tOvJOu-dvgDckt=h{3! zaIVey!MQf~3+LLH7wUj>ZNmfS+I9(?Yx7>l*R_occCKw=;JnXf2hRKKr@(oi{Sr9u zvj!Rr=j?sfJaFD;Z8I+a8*%m-HQNtNZQcXa;JsKKVzm&@TnrAJpI?6dvh)yR!q=zThTmfw=U?m0=IU-eGs^H3T{c@)-AZt zGA^HQ)_R<8F!Sy6jojeq^Q#bRy@Kmfzi#Z-FSxFO+o0h5{Q~jW!^CT=jpT9Pu;88u z9PjqnwNgU1;~g8WYv8&S+!2B6UT~)dj`tXR&kh{#4schB~HkMLT0Y_3V2P)T3=-&t!y_RUEXV0O3G2p0Y@1sAp z(1T-q&H?nd7J6{>=S)BkM?T=FXAQ8KB~P72^5)_1c5;`OCRsU*?B+o(JqST^YyzwH^IoR~lZkmzpNSiQYUsbf%DlqIB+c_V>di-K3hkKWA5-{E*U3d=8_9c z4D|N~jGp;IPdxN52ORapMgLr(2S@!a!pw{3{Q${a>=$|k2;Hc+0$vS6k67M$M zJ%`}iOZbigGZu{5vAT1)K6B&;=Q+l%Ucp7*`UU4biyc1rdN0EH4CpG^eUK-1{Q~DR zU~u4AQ`mX$5YK18m|*8KU|isQ2J9O+))euWTj%04fY|1I20Rfsp8;b7rv$;9)1z^*~Tc|PDg&aEWdw^3oo+A-&G_PpWiajq`x zPSBkz)&b|7-7lPTu9i$6aL&0~;GFZgf;&-nuGj~h`@o)faPEUV&AAVc%SqC4#ds&@ z)PHg1KCmnI0axzhlx4(&b3Eq)=Xf4_ILGtY!+Bh)B~u%m=hEW`=eg_^>>5j^UhgC9 z7$Z18tKht6Y9zZ4@0r1YYbqJv;eqp>84)<|nNflBo*5H3@0nc!$J(Kfv4P|H2RANo zEedX8;CRkqH#=~wcerB%=g%ap9oOs6B&P<>pGoEij`Dhkoh#M>=Q_xVT$n4aXa~0}JJ;(mz|Qrq zDB1B`Z}Y&pUXRO}(s9Lp;mZBOmHRylM_ti(K~DV_SB{5WIUZ}1E5o*L zj_38%IdEw`1u6|+X zF^2QFc%Q*}T&g9z506XdzCP2vgL7@p8P2s;OC~=! z*VZj?uFcOO>|ERMVCUM#1kSaMD>%+wu9zQOIX}2^ehYEb6@B5#z87Rxm3DBp^ZdfO z55}7@fb$smT!Hf#c>Lfz20mBdJO*9|a2^Anw{V`{YRSCg->EykUKbZi=8Cn#m1}@2 z*8o?p0j^vFT)76gat(0h8sK6Lj2)cUXsp9)w2Sn%^WOFP#@Bn-YY)zQ*XtXunHuBL zPtEcCe&RKX9dm_UjhgNJelj?4em@x=IKQ8aD7cGs=Zf-mAe zc|Cs>ILw@bR?AjDuufVakiMMIs{JuRnaP11a;el&ka3cc8 zz98PHz^z_zV*)uIy+@m{kYsvTOUai(f@$S}W{PBqm+fMR%M0eY)rylWrRBZ$4i2s<{ z_V;Wz$oO&LflW@>-1rIM9d~?lv#uI#;ykGa=VrU7#N9k>{6OQUg*$At?I!knMi|a* z{UVoV#W5z&=}vBpiDNu3`GSS3)i}lr!fu_$r^Y;k-%#U1|EBKM0A1+8Z>ix={I?64JiJcc zkz7?ZCtKUtzpF-{t7$L2r#rUv7cXOCzF#P?C1)_}g{z%<{y=x^KFpY^3}Xk@;~~4+ ztH+Nd5d+(gb*B%;23s)a8l3Z9BALr|F3n-)|B2+rYW625Fqix0ImpGj|5SHsCvV65 zOfohd#9pmCvEbMjpX<(idSBxEg&NO2?61)sd$^9WT3>g@v7@rsppe0_byRP>m*7`! z_;l20Z5VW{ZTh-acX;Nxqwq$$+rOjcaN~f@$2&INWD|2K%k*60!dknvlJ^O$$yHR&)hGX6I(H)N5`s)5a#p|fu z(Qg@gV%{VkT^=+4cL=E`uW6<1?`;03xYSqHbyQZH6g;`2=guCYAv->IF#CsbVJvAL zH}4}j_hTF1*-MT?EShz`!`a_=_6PfpJ;mB%?if$Tkukxie{mn6`|29+n{}r)#(q=X z!JJ25>%O8I9Onmkg@R)q$?qFA&L`~uR_MqD{H^Yd)WGZ7O$yG~^9_IIop9JCDoXgMRhN`)*W|FzUoc$|js4nimgfCdQa5MMwZ{dMW+N5`` zUxaTSwluxZ{3?tOcIe#iZ<2=>m^Jsi8sq4=e@NDdX76^?`={CGi- zRl^(*h*+LSKyzU@`!6TZQyBYtk{e5Ay<1;j9A^l6zBgpNS&P;;6vx@ZbB6z`6MV6; zzOgvgGMGG;7gn@KjaR^b&e7SpQC|~b*1i3k3UeM9^F3w%fL9V`k8oyhuRDFv7|Ynq z|G)0h2bsE?sSj!*KI;LzisV@5%HnvwV$a`^p~K(nZWVD$gxy?E3-RnVeM^U8g0CVbvs)3Y;>8aEfNs+yC= zx+cRj5+0P}&0Rw)%yl{57MZ?k6XPv&tU1qX;`bETz}sd>W;0_D?o2;+kt zI>*^o@(Hc$o|oGRUp}ODiZfF9%|pIUarnDfe6T~uGk>)1)WZ2lecKDOj^L?>&t0pj z31;>?NMNje4k3>bx4G`jHToUZ;Aozkog`PwhPk;-cjgcde0vGsAEfu7wyZdC))DiJ!j4?{yfXj);zyrnN*~9BF*{3KK4uNGf4>Pm91Z>1y65qmXTRU2 z4sw3AXw*U8lD0kFb!+Emv7;*R9#XGf~AMDUEJ_`fK z`ny0l#{ZvW_Q;*G#XdhDTW7z6`k(Coe|X~aJ-|h}dmOmOSYYP$V%1HF9(g@azH39iL5bv5^mJ zigW)i-N}Wuv`BX_=ibip=Uj*5+yl3h496LU|1RQM>yG`dg*|;+zni!ZU)Xat?;%XTeh1!Dn6nwqeb$OwH{fx?T>>62yk5Y239m2QRgoCa z3BpTskIlM?()pd(ck-Sjo}BO}Z*T|6aO6eZdy6~e;_CD)+DCZlF{h>XiG7849(H_s z7n>}M4|eDrXFti$o_B3}R_-rcwa@-3?iAteYwk$TxT(VUV293erb%u(xqIq=y6|%A z4M^{r{5Kx=51EwSEe{aJ2Rn3rx11@NTi-Dg z1}`lCfb~ZTpVZ@wRPRy3_+W?5^&TymTNgaMl^Lv6YKG>mioD(Jg{Bpk(=Op1X-(8UA z`()vkJIzYB75JACl(j4B9gQP!q~ts3H$zH;n}TQ zrFpnSc=(wcrZ|@h-|@@mXpeXpyb};j!*eNBwY37pJ|^wEQ}3& z%1d!M-__4{a{hmUrT37zIENhTNi z!N&2Pmb~!X^-})N2+tpXN?PB~3ZHhvUH21*ccRZ zeNp(!m5)omUw%m#AMDUM&dZXo|89*G=M~|TzurC7`>OEs+tpg7!Tf*H|s!99nZDD+{Lub2pBwsS(>a;K374G(U-Trz{ z_>lV>Kj3kDUlmiy-OsMEB#>O z_)8^s*!;az?w@|mrSnogN@_= zL-K&_=B2#86P`1z#r@WQFWh9$>$BdGUfH7@Yd(%zl-KQ@+aZy z4PQ><_OmcP*r9Wre@Py*#)GNGE5&mPzyj1V6!uVi^&h`E#nOx}y8^`}$ z@=rf@NcH|9eBYyIr2X=z@baHro7VGxgz>=+o#Xr^`L{Q3O8bs4QZ_huzZ7>l;f{MR zN$(N$gz>=+o#WJ({B!dyQvVHvXYDgKt>=cqU2oho)!RrIAM7$+@m*BD{W&i_VFmCeIH&m;TFP6k31yR+fo=G?9h3BTS+EY`oYHWSC!o9 zhPf%P*22>V{gL9g5uVh0Kw8gjh4H}-o#U(~`Qm2JB)@jTm!FXTE{65oUihEKEllIq zK^PzG&^gZPk{1s@Fzt(u!Y_P!<^9&LAw2!YDXHFSVSKPd=XyIyCRh5w#{O$czU#gt zQoU;lKmPkKDSl_+t@qd}<+-*nKG>mioOL80Hu{<5x32JCo7U~$F2arexH^s7dcyc% zht6@l;foKiThC*J@xczA>)lZ@xzZ0dj<=KK1#On5=g7{&cYbhpdLHZ| zJmW`#hEM87JKSr@H6Scwv07L+5(;l1#4jgN@@)ko@>F_oloi3J-YZqO^Y|3D2%s zKGnOoFh1C!bDVu7FWI>6J#b&)+fF|>#hont{tZv2`Q1+#AMDUM&i;}&Z9O)fA5(-s zTl0mK&s5=^_B%T5-)X}5V2952PM1us^n;D#&yd_@g&rxd1BB-u);EpkOyPrC+?n#6 zC5#Vt=p1LZ$Lg@-{E7o8lZQeDpPs zr+f|*-mv?eRPW)!_+W?5^&TOaTGBcl&(Cp<@xlzxc+~iU49_2Ae4%iYx35U+;G#@l zvxW5+gKIhrHNGU%&q@7VD*W!j@2dX%_tlGpv4J;tnPl=HSGYzRm&+w%i_WpHko--L zy1x&&QdnbK<2Y9dV*_vQYRS}0U5)(N@(TBEpZ3c=!r%Y! ze!}+(Z#A@2+6VUu6&%^^XbPKVf*v^KoH(utR6NCnUc#?YQ*b^rUdVJHANy zJtaJ@;mEXapBBakJ9Mu18Oh{IKiD|_vyz|v_PG@AIpI^gz4M^;&kG;E<=yG~%NMX$ z!w#M8UX*;@?_*P(mxOw?-NhVkN!N&d{OaAT0y5EZ| z5q^8|;1qwU@JWAunV#F92;+ktI>-4`a?QDQ?-8E~Px;`~v@SmvK6%K(^nUk+Fh1C! zbDS?FH?Q9^&F5FbYwdYK+IL?I*L=2fs`ndVe6U03djBSwTw{_kot;6qx@xczA{l1sH^Rw5bb@5N(4n6D6nIDATnYwj~^P@06*r9Wr zpCqrdV29NI&%*1iI3U&kFX5Wz=cjuAEsPI#=v?nFlF5~Ruz~0E$FGv-YMmdac9I(Z zPm*_w7oA=A=zo6^`b`ACV|_q)9ks@4;7@et_q@jUOXl~y#^?u@@Ma~<-|X0)_%#7P zBzaK4#NQ%d^jijuesBp72^jmK0n^{G5*}W{TLoNCW3+X^_-_+1@kazqKHCP2{qOZE z>;0pI|19C{f3?*<*zZunV@i0(fXVMap?~~$3VQI)0W%)E1dM*y65cIf z^4mRN?8lby9s!fjo+Vsc!sAMKe8BX#SHSc)Azf{S65cyt?Dr|*eM|VSFn-wc z2MJ!^#GhQU->-!CFX1UAJT>4?Bu^{h=>gNzpR8WFX1Z!CjONr zd{u!5=}diFa((5ipX|R?cuV(zIw$$gwE?`E?HUHVcY|Fc@#yC2EXJ>~WIpG>6YD+6 z%S&!h_xTs-g^-sO6#SsG=`sXY*qUo!aQKcY#8$uIu~55Wo>czV~?KLu4Ns`=xJQ8h4JUT z06jVVUGln;o9bR$%oqQrDjaoU&wB%$?bj>WuP+S8cwoPo?r?(?kA1j-Wc^fqr{;0s z-)MzDLOJmFYa2?2yFoq=3U4GCjvW3i?~NsM{U&>K-PF3P@lJ$HT=ruR$^4BTn6=zf zIIiVh!q~uL!}{zkIj-eC!f-S$#?EWGuQ+00L#@0s!BHz`WIxGpab5Hm2akP?bYPFe z0LgGZV>S_n`(E5b#aL`A4A0p^j6u4?5reTBC>f4%+DtMR;{?CCT8$dxgzTCJp_850 z%ND|LG_JT_wh%`Dt6~tJSj2R!EhWcTgN5N}T#ki3`(lWA)*zTYF;uulcb{RygsBzY zduh02{LnF0#Mw$ReW7Dq$P+H+Nxt;MIBhMNak@^k4chW)k`PmT5iM?d^+yPafWgIU8Pg;&zOwm7p!3B&y$uAUlu!e_;3 z@#wicR@(~`6Wxl6!C37enR!@S4gF8LliQF&N8gOe80ogu{n`TWC=7?~Q1M{f?j#wG zb+@x*F4i6VE^51~F-FLK*6t=*KUF`gEmb2HYhZVg=zJcGl?>?ORi?tZpS5XJ@`8_t7?lH++WNf?gC#W?yr*jpSiu<>5n zM>0H(3w!3xIqfSx&hKPlxMj`ne&W${d4Bg7rVn&yYcDWQGa{JZXsIZGru z*FAi=zLBdEE!+;6*XJrcZg*2>!61IxMFM$l}x|r-Opi?^^@fn z-wh8JiO&5TAsK&opHD|hhW|tUj(3!>ezLq{y+?~g=X&Qzre5bZR~Q?3_j!zD`atLS z^Cash`)^a@933kXoqdm!j6b}6kC&{Us{g3PF+D*fI@_HX>|zZkiAU#kaI$2t1NtKl zHmrl;>I1#&Jwfp zA+}Q3sf%kYnCs{vL zjaA3e!k4}GyhwC@2E8B|e|Y=8C|N(5Z=9=_M56OK_OfLB;k~zCk<3_kQA58(cWT;3 zcXVEZuS$lyN8`%-;%mZi{%pc`u5j4%-ub#@-Z72eD6r??O=10Hdm9_}-&-Q!{XX@! zWH=fZc`_H&Lm%&mCoXm#i+3gK=fBR3_e7%eyVU!V@rS2>YWhGjb?{#Mp=2)34ET@K zK33z*K(@~k$@W<)**@@}sC}x24>CT?>1UD|OV7*a!po~Tc+blhlBw5cE;e2RUrJ`& zv0<+G{u+*RlpN@feyzhc>acMxUrELvTfP?uV@v(Sp=R5DEt$NX$2Y=o#J{gt7k?9m zUm}ii{8lm-YX49pHnL-XCppIcUKoz&jmPPq!n}K-^Emw=IgS%H)WUc8=%|Gp z=#PG_TcS8ohmCXjQ8NB>RTJ~|lkf`a1m5EW7srY5vj5ML8Ou?6ny^m)B@E}ra~J;K z;>exnF8hTwi7kC>Tj=TIT5;rmz3%jZ?=O;U4I-fWXDEdj@?O|$0z2!rg(JDdo9Vtf_LoBk{uhp zV|(7$7Ke?S=Y5^Rk9lYQ7=LWN|JRjV9`7#V;2nEC$#8Cty}medA~x%bzOZGCIL|ha z%o%_kXUV97qwnT&>?(d0aVtw^ocZsqHxvi&_x_C}!!4DL82la<4tt*O8%u`cxztTE z7tba5?rJ^MIP;M4A+Mg2$;ETqOPDj1y!ej0w=j9NDDq<8_Ynv0-^28kj32z;Kl(`~ zHaebV^wnRo!esAat4P3xI{5uDI_ES%G8{QPp!+77u5t}-Dh}TL4U~)@JTb?}56&?+ zlT1wG&4saXA2pd@WgmmY!F%qvkPPQGx0u^4#Sss^=XYyRlusPby~M%W9~}LO!Al6l+ixGq_`=igj*1OOznm@P&3WRrxUb}Rj!YKj9C5t;gt3A5d9c4^4O2P~u%WM= z#G!NSDU#tlMpH9g9k{T(eC&dvSJ5l1}qu4%4h`b6iNj*(nG59W!3cOS<}hI4Zt$B82*dY=c! zOQu$I?&Ac><@4Y~aq#ZrB*}1YJ`YY7M@;mNcZ%flo;y_>yw}rdlJSN2GyinStY6-r z(DO{=Z#unS(8vA4zG1F-R-YkxsP3FC^Cfd}w!ojMc9t4@4B78`3ncT-)LMPSv+!*3 z==^=*Ig;UgmYpjZ&fgcFCz*@>(4DWgP>ueO$&t?^7f9xP$ln=VC=5sAqISlR?+Y&y zM{aE-+y7#5@b7F+)V|Co%^_195IPu?iR`TV-Lsog^ML)i*9}~&bLZttkHSyZj)S|yW7RVd+zR# z3`gU04)&Y_%-x;hh>Hztf0u$|zIX=TC7$Pp`@35hf7Y?r%01%X{n_YV$#66->d!x4 z<$nWppLoZJ^Krj;bi`dvP7g?KAz$zZx<4qqvhMtzw7v8X31b6~4fQ-MnHr2ADX_oa zd{h`4c(0GgB$H1E#avqWvQ{4#kItWGo{)?`ynUaPY~NVRQ{vGv&cu3JGXC)Xe&`v= z>N0zVqF*A}x@QaB+T!?Jhpm6V`Cb0)tonTss@ALO< z$#6@h^WPu5BMeV2j?4XLeO4lucO}y=`C&_+)Vq73bA9iLr!I7R=nf_~-bLS+Ol}>E z+*m^&h=a#|&jQ>2!@_=zVE>UgcO!DfwQ!{mt+c-61V2jUK-LdmneJ&Y}vyd2H2*Yip zeEd%OrLbVOpU`&`Al3wN=%|Iyq+dyfi_e>{#ld4gQ97{u{zfu=6&&k;oQR7(YaRXilBp3p=eL1mkB$56Dh}THZ73Oz z#zns#?~TL}7n`|7KO0MiXAb-x)J>SVMdx$3yJUD87jdcI^VUPWbBk-Wr+9SU7ri9I zxp`mo7Dr6RgLO!M*s?G77Kfhq0@gC?mi5aR@XYEXd6Mq71xH(au;m@1ujHY+^FGs0 zG8g*-zQ5W4HR2;P?mX8vkxULt)riCX-&7pDZ3Y%L@f_Jq9K3BdFKptvt`P_C_tQa= z83%qhk3V|rwg@`<$JV+ngATjz@mG!e=#I|y50=dP1N9G)%tih1L)GA@ADO&)pBpBb zccuZ7iNpKcaB=WHbGDKU#~As2Zfjw9=E8Bg`+aU3$@I%uV@sdpH9~hT^1^0Ywe8f% z3z@q3?|nFLiH$uvY&<_BB~v>!@ZL8{m>M=IYG4jWi-Y&?vA36uA3S;NpgR|Npc|vM zqZ)l7yRV%j$G&zJrmsyyU%QBd_w#61$@sxL$K533H!%3^E)IUK>LBN_lJSLS9Qc7_ z9LSg4$kDm&A(`B43y!w<*mh6J#51lfeEs|#CyWie=KwCw0dryh@sgP*Z1+`YFgo_^ zUXs~Uww)l1jo%X{3S$G0|77Xl7%TSVB*}1bFYPT39{c^I13UgclHol5`wGKtrm^8v%fIh=5lmyQ-sNFsha(!ii5Y`G|6x^^7GtI7bYG$ z`ko?xILDnKnYi(cIY1n|4?$M9%jIOfAPbA)5QbA_>kcfQ9+CSP>Ucb;VWL`S~U)ejtTdDl5sGBx-ad7LmD zjZ5LQ8|&lV)$-=Bhe~vgs7&~}Bb5E5F@8)Oj zY2xUUXD+#u54O}gLmYbkd#K?uI$iRr;&`Wwjj?!L+!@kibCc$u=j?pRaM*H|o++7& zvlQJ~Y75jjuaLdQ&z4NzabKS!4xYRYln(5H{)xB>Bsy0T48M9 zy>G6Q%)UYAeRI8J;-m9gzdcS?q*am5PjxVT^M5oVovzuqg1 z9lZDJeUjnbykGAZN1yCh#*=)o^>{oWc^&Bn>Azh3o9+(^$36RvIQFBzmm}wgWP_dm z#`9sx#DQnuKB7Ap`xf1!YLBV0Z;{>iKo^QzpJMYD}B@+kUdA=jrd7^ioUia^c!^X|){=LGF zbx(_A8d3-+-hKtXSkA=yb=LdS? z94;B&ah6DibDX8ZaPj%^i7>e>RkPox;^6J~nPj*cb?CADT$p(1==%uy!@1@!BojA2 zKfV+P@3>z{hV%2|NZG@Y$9eJM zoiP3SdGft5Ht^K?igf>!%vp@iXYmh`iI2`_@sE<>Xe@cd@am5<$75xf#-R$yzX2)PtdKP)mnl8FQF zI4etDR-E`e;s2u^JMW!UBohnXXITr$j2+Jt^h}ua*E@+s%)@xZLK8}2i|eofEAZ9p-~epK2O@p20Pcbnq*?ZyS8?cT^sr(ia~Ae zyS+FtcAQ7l3m5C9Zr9sEGB(b0b>U^@8J{N|WrLmf;u?~P1MfVmB|A^_&eQ9@lQ?YL zyzbX5{8;y#bL<0b$(OTkEy-biv zJ`1{tBL+4;3)YhiPvgR#^US{^SzkOhBcyPB8wkU@xxTLA@TWe`b?U{IxjIT5dgkg( z=~$Z!bf*rU0~<=m=Lp+^qb)wR-AFp(fjO@>7Unw~=hsab&W-Pp=%c$he9_a-(FI38 z{fe9hgnoL+Zg1Jx794HyaZWv@BObPMbO-k@`t2pTvp9Iig0pY$!q>P@fjtL(h2chN zaQ*iI{eIQ+3kPki#4D;sp=!P?qXGMv}SKw&r<7yS?y z-(z$~Z{N)%uO`mxa&uug8W+A()z1zRYQ&-E_e%d1KS(kh82uKK;hxrbg13|mx1;1i zTKBu^K3KS&e0>J(B92_%6gNaV^!~loP|0w_<2!_5lHqof4>tG=7lvmX!COhDUoLZ7 z7o6O(vHeu{ZNy=Vju=bD5p%SRMhK&4yyl4qljH8vZ7aFGI54)`31h?9?;$)=7>>pz zDjWMj%5P7BQHA}x;)y|Bqs77d-+0(wGW`&Xc|-4YvV&ywT;4}xgyG%%9qEqZ(ETM_ z&Sv)3PQvj1o4d;jj$HU&W@qU}>&~-y7s*^ai{W=w+f9u#0T~}+?k<@)d`}7*`l}Ygu)g* z&oug-D4D*|F~^q|9A^eKQy+CYuSt^0%eLTXi;r#hmYnUeqQ-rMiO>8uP|o`b>rq!# zD;Xd5?__cC-oN`vhNE%GG+PIbvA=j?j0-WQh=X^GsgmJnTrtK2!qdca4lY$A56MWIC$I4ENtTEsafLS{kx~xlIg#T8vf|5J22?zA6u{MgCwJO^B5m2 zjxqM{77r0-JjSaN?cI?v5XlHuH#PsZtFal~(@Mqk*u?^6mL z?;Wgh)+qMQ_f*O37wqO1d-XKQ>?w5YzboVm=k<5GWVoejUdLyMgSXB6!X~ccGsVH% z=B&aduHyyb;B9lZ|dX;Qh=#S2Fz*AAj`ZeWm=+kt65qd6GG2{kzcfh2c1N z7wXQ%xeI@R+J$PIOUPai7fB{A6sE6kYR{;l_kOvl(6L|0n|Rp&M>V3O zR%&KEZq}WP@pxAETZ9)EHpuS(R>|}a=8U{exLSADa=S2`oAbOwoX3P1*g3|Xk~=Ae z$M`N`?BQ*5w`Ati{oErA=jJiHR~-K6o%4N?W6t*rvwqy)1H#zA+vh>a`0zag=lVm! zaE!6f^oNDv@uy$L6^?Ob>>TS6$+7=Og{u|EwLB&a=jJhcT%5;@7}$9{o{${J>`7tl z;cfGjZn9hpJ^@y6!n6)Ki z|GMni7jNj!<#Xaq;kVSVL3aLcOUBo8`i?MXgquH`zAGME^!9yEa`b&)_$m3i%`MKv z55!}O-u-+inX|;r{d^=Id-PsUA4~RnLjQvNoWl}fawXV&0Mi6 zJ65Y&wrUwkoHs4b?Q~wLYPpObG<2t-?Pkmz*RD&~4peAZRm~~Wty;BlRXxd+UH0E@ z%)}{GRR>BwROKj@Q&cWcxl-k7l^a!_Qdw3F4pVtqO_EWh+ zZHnqNmCE5jF~xe`oz5toH>35HY?d?#+b>|CXJsyY5a^C zm6_uYnR(#!@s$Y&P8mCM;?ya!#CC;bJ9f;ZG1Du1PntS*|H`B>hfY0kCi({G2MrrG zXz0Mo*lE)$GiDw-X?$hU#3|z|<0eiYFINYRPksu!iBrZ-I&fSxs4q{kpX)2e#%h1y zl(AFCjUT%6h;61!J8)*}gC=y|d_u?CpS?S7UR70J`L80|Lsan7Q0L0zjvaN%@TxiP zWZWpnosCz^ahDt~SGBr?8T(J1RvAy@6Q}GWTwguiRObQX|6lQB?KhFm?N66n>D(ck zPsGNYsr2ZY*)ex2J@S~DLlw13%*W()Qq0HaxTj8;{v>d>9+hrlmXkf0qcXWe!Ww?^ zPMA4SncOL1W_D$A=Y;9+%H%EyYuX8SO<2=TxLd-^waVn~39pdh9tpGLDwBH(*U#c> zkl~J5KbTu7=dwJ_t(reUwq0eO+AYSnTjYu{?jAYDS#4-E zYU?uR#AW^NHrB|vPIdBFGw15$!5mP3*U5u9Bd$&!Yvo*>Jl4*+I(e*g2&SKy$uM9&K~3P9B@(T%A1Hf}LS;_Bof}LS;_Bof|vz<9gJ|V~3oplgExZS0|61a;{DuBXX`z9y{k;mIv23?uEEGaVs39O;e7sK`&4GzJ+pl?*Jb(O_njPPxqv^(an{e^FEgxQb%4LiajO4wj#K^Lb6n(8 zuWA`xge#r9XX8;{S0wHQ_nB1Ldit1swwgM1`Z$?qepkxudM3Z?Q%MNajM@j$EkkT9A|Tfy!vFgW3nHT;rtp$A9DX%(Ne&6WUfoTMrF85 z>i^L>PWpW_obO@OKPbnkkB-i8_munPIWGFFUe$FO?vcjenH(4P)!BV@r8{$>I=jEF zs3z_Fl-c!6e*Ok`?NIbtb#@O9UpGgUuC;TtDOk4~+*=`YaBoE$Yh}9pz6jYm zY{6`$%n9vq+HWR4mRtdkz9Igv?U2NCOY`G7tm&wr%}A z*fuz}4UTPt-8Q*`_BlBA zIXLz?IQBU>_BlBAIk?>CaIw#s!yAgL=pzF;A#*qzK6`=w!pD1FeYvb9NPlNw!m(SegMb52gkk#$G!*0 zz6Y249xnDha}lmQ-{H#h9j-jz;mY$Jt~}r2;(VtsHxXCqlwV_zIp|Atn`XLvUqQBx zegVgR24muW2FHE|$9@L8pJ}VDaHUgzjX;iVfn!@>OxzaOZQ-k(aHUgz%|MR6!1jf0 z`^+}KW*|pfux-g1jEUO?yIt#Jj_94E^>Hqtk8=qe=Mp&1C2*We#NR<&MYj|9M~?A> zWBg!D96vb5503GJWBlM4KRCt@j`4$I{NNZr^B%6e7U0Tj0j|6j;L2+OuDllD%4-2G zt_8MgoXhSXZPz5{vU^r@O>-{0uQaz-&Sm$-=GM-+?EcnV z`PmHZmY>bQm7mSPm7mSPm7mSPm7mSP)nu`Bu9HWLoU4<^202$JkCr)CCy!P+m#)RM zv0=`oYcbqLIhU@*a2w}bb}e?lw9dHNXEWHf$+*By}Svi`)+%p4bO)~h-q!(FnzMSpybQ@bbSIO{+3^D2yO=YqDuob-2Q z_T4Jo<9N=N$qx&fw&pV5QkbpRZ%1K@Za0LSY9I9><9@j3u5UkBjI z*8#ZlbpWn>9e^ue2jI%r0k}q4p8Bw)gS`W8wVcbw!`$jQm-Zd(8s}Wm@73A&W^_99 zU;#9;g-m zuLk$@GqrkEt7tL_r+C%}ckGaTAwv9ZGJS3Q9dexJfBy{EK5rSA*Y7~W)E}HWXCrs)m~GtPxdmq8f{)K}_D~i) zufQIwGjgn_!`N46-w%+Uq|4| z*Ack#bp)<_9f6D25yoUkaTVPXkS8(+{f2I*Oqb_~Y#p}X*r(vwr{LJ9;Mk|&*r(vw zr(pf0J_Wl^iEV^%MYD%kkYjA%7#ldo29B|T9UH!P7Ov=$hHvEP8ytOuqi?W%<7*e; ziY|ZnLbfk-yQ0$!M~7^kacl>DYzG|M8HumX`TRqUzQEBJIQjzH7j1*xAI5R4(8sX? z>nDvB*kk4TasHz(&wse`{D&*gf4K7ehbzy2xbpmmi}Rm*Cb;r_6x`}rKDF;Uz%|af z>|Vxo*T}fqcO9@>Gv~7V7~3_;Ikr*tUEXffoMQ`1+*&!8-J{!X?VQW*OU#u&Pt$Jv zJk9*tOo|$dF{~EMQ^{>$G$-y`v&a3v3(qK^!iC-4vu3E_L#F?z~%i0uDsvC zmG>LCxZjZbSaEt5k>!pYa|g%V!7+Dm%pDwa2glsOF?XVJj=2;6IB^xd z9z)+E$N0f9esGK*9ODPa_`xxLaEu?UpDcc2881-LYdOS%9Ag2;Sip{jx)ZXx`M!f3 z>w;Yu+kGX5p5yI*uXJ1 zaEuKcV*|(7z%e#(j18=x6dTyFIi5J5(8u}2`hqL3CAjihf{Sa(b<5Xo?8?_}xbn3d zu6*r=D_^_e;~nDJb8zf)aO`t%>~paDoVNEDu5``!WaQX3 zIJOOrZG&Um;Mg|UZPV5y;fh{ABTwYm7C5#Ac3ae)OkI7Fqb_o+3yyWcu50@kC;AvC z*m2t4ePk??G%vA_^Aa5ACAd5<;mY$8t~@W{%JUMgJTKwO^AfH+FX77b60STi;o`hx zJ;0UkDdEcZlyK#HO1SbpC0zNQ60Uqt30J=4ZOj>G{;f1?EPYx=$6@ z&q&_Laq-+j&%VHVz%)p<2dYjBmFHB9H;~MH2Op|4`kH{F{wVR}&M`=Fo}@EtW3VDY z=4hFp5{GX%=92BG16LC`))bt&E7`HG;Q9uRwFNgkaI7!5(ScLi88kY0Z zaI81D4uNC6!SxLs>kV#r;8<^PqXWl!gPRsO)*IaHz_H%o<_C`T2Dcz^tT(uu1IK!U zdnj^r7$J}>pVCFb;CUWF(bMVzxIP0gt zZB}qv!l`b%f@>7G_61iHxDEx^A#m(lEmiskjt2s8!vn_y0l3kDV;_T?7C81YxY>cz z7M5}I1IP1y>=p!$=eKY-2d-zqJruZJ1@}VWHZQpM1J}FYz6~7jw6|2zmYMo*i-Kzu zINoW;t|oAO3$8=p`W0N?!1XV<;ep$#;6?{-K*3E5+`xjH9k{IvZhqhf72JZr4KBEw z1Gi1VJruZY3+{!$4Jo+y12?qbz75=V1;>Q;+}*z58U=1x!8Hrq@Pexe+ztiD_fqz^ zW5M+e+)f2IJa8ilZgk*wE;zoI;<|W>F#8B=&3FUJ+Ilj4fzIe}3^?kqEcEvjdT`WV zUFg{#@DGl9{Nn$mLJyAmrwaXxg&rLBynD{|i)#-4d8ZqHHv}B*`TvUOA1L(TsOSGO zqNm^w9QFJ^M|2MsdT`V?UN-;S;Qnk9FyrU$;5&fpZ&u1E*<~wK2Tl{0??(*Y9E1##gV( z?_yJ*HjU$Tz#R2zR2ZLi73^}7N2^fJ?`_BS{O)#bd-c;h+tJSNZI|uJ{o(hwv2%a; z9d5Y3MJ#@g8_xX!N4#*ORfw5)tU2H~%z11){@7uPoyQ-py5Kzia2}gR!Jo&5dndQy zSh)Y8Ki5}XIO>60l<)=t#;j%AH7x8}2hR7#JpxBx z-BE#ayW;}qb|(eS zV{}B|JVvtv=P^1aa2}%*0_QP0C2$_2`GKR4$m6WQdCi;`IIo$D0_QceAaGtYivs60 zbG113t~TmC?`8Cz-#L%{&b#3pWzJ(kzfu=Fj|F{W&ST*@fE{)4=k)^TvG98Fd*`uT zzk3encK!Z2oZIy~=y0@4uA8Zin5*AKkN*8Wdi2kG-W<^muADy{rr0?Sxaxv){&3~| z;mY~Lc`katfb(3ekze{4j`nD`Rp2}qTL;c_v2DS1P+g9g8(cXzI83qg_`o?g#|P)! z+%BAR>!JF@4CmYi2hO>T44iZGTBfdZ8y)PN+ql4aoy`m!<3Jui2F~m3*T8w5)l+9U zX0NkGf%7_BE93I_{#j?_?0R5w^Bf=tuf>|+%h#^~f%Emt*MI6V2IRp1!E_sbwlg|# zezr3%aOGz^_+$L=cSNxBvz-$H=Vv=-1tOkX;%2#H*kKo<7+tW`q|D2!OqWi z&I?>k;crpkS`^&Pf!mjdtNz-?G??*wk6f_p!38yDQi8JCYYb3KkX znDO@hMy_zQ`FZfwrr=sv*Y@2e1=lukn--j(f8dWbjK8(CklgQ^72J}*wJW$a6p-!O z7hK!Gbtt$a0@tzNP6=G6f;%g4ezvnn9D8j?#mD-7CBxO(JMyB`e(n45%sJxW{do>@ z;o#Xa@64me7cyhLcfcD+=0MLo^XOj*7`>)wrsq9*^rr+I>+`NW`ezG07`^LXQRr_e z^x&xHop$QO5f3=(Ul(Sc+aK?)V}E~P53aSZ&fb9*mGuqpIdiyg=r1^Y!LiqxqYfPV zr8${qocA5-dVluZg!BH)zT&!!AO1W}*l9R3j`eLj+QY6UaNeI;XSVbH%sMdV{h7IJ zj#%->d^G3%xl7=@Klccn_vhY$BTxMG4V?Gh0fF=0J2-IOdxwf+Z28?xj2-=C%-C^& zc@G@@-2tO#ywLMIozOoYaMbhrp3py4=)qAxO_*_E4Cx!c7fgN}=4cNt+AUjfo*%r| z%Mt6smFvPSt**KvtLwRi9qr+dJ}2Lq;`Ed58T`I*Y}4-y$9e}9^}fpdRA=uI69fB) z-y!zAG`3In58f;G{((%NzLxpY_gupCDF-p~yS30S2^c;7fSz}K(LWY&)UT&Sf&S@2 z503inh2=t?a(}~0czA)m9(kXY!}&0#aKr=WF@;;U;9}kCg7X^1&g0^>2j?~4R`za# zIBCOc3OoH|+<;)m9Kz0P1v{_#5y8%Destix=JyR8a|nMk1Lrk=OyIocmjuph{*}Oa z&A(A_eg~K~ILMcGZ#l|bxu3CfKa;oXRu^?W|FLsFdpzLW&+Hkl>wfke#!f$3EFL#F z_j65Amv?$OV$5)k+3mtP<{H`4E}UcT5IDy?y5Rh7aBRcx2g6~HKffak=YH{f!f@^v zzaJd^`MuyW=RDko-w%#$_#NTc2JeY-M1OGh=UCv}FYbG|>Y}du9?tzzBOUp|c`V(3 za30Gp!A^7*i`Nl$9!p=F;Jjw~hPqxe0|MtYGdOTwGeZOCH8VVLUNa*C=QT4jaLgV0 zZ&cuXog5uFUnj=}&ezGAfn&bo@0h^(Gs+2p^JkP(0_V>t^8?3t;qR=#`7_FSf%9jS zivs7*C<_YC?+xRRgYosd!*HH2erGt^`MqH{`i#1McNngw;CM%uBi4oUob;N3^PIFl zxay)V{YV>do|E*2InPPYUF<~Tg?E2B zq8*&`jdsr0eSn?wb>G7|U-t`~^L4-Yz2exe-z|>u`Tb%zx9j(cW8KkegQLuq^T4j0 zhu~wocFlif%6{MH*m}a+VJxb+VvhcxUl10U=Hj! zhy_mSjPtyMD~}gkbz$c|hI7Aoox!-U>uUEV9^h<0%91CKA9`+)wY58$ecy53jd+y{;i&VAs01t%M zEEey#a30?p>G;gBZ&BCtf_HT}Vh(WS9N@}1z?E}=E9U@L&H=8R1Dt;96~G z{$yyu@$NE591l2;2Yo?qa2^lO6*!NF=LMX{!}9{p<53g*c|6>wyxYtXV}WxlZWqq6 z)X1Lr;2ev`1J1E{Jm4IQ$AkBxIbyqTZkO?+4LG;!Sa|1^Bi4m;-PzJn7tVE2nsdzW z1kN!pRt4KRW^WwmHKHnEO&*vq9^L+j` zaGuYN6sX(vd|o4P^d<56`7OD5KDQ2bp3nCM&hz>6z_D-PubKR~UEgoF4V>?{`M=4w z^Zj<0z%jS+*E?{&-yRS+-)|2NobR`X299-sKc08EU4JLQXH#?jPJqux=KP%ibCLaZ ziq1;CYFdV?v-hi+XWS3@U2CsRW7_86`OpEXhaO+ZEhLW(cmv5C=;svrLj#U_-mxZT zj>ekp#L+@+RO^h~L=v&qs5F&7nP(V%jWF{Rjsj+m+GY)TV1B|gC*i>@WW{_0Q=dAq zVB11<7=PQeQ5@7|3^$dInCSl<7jNIsn11fl;P@?#TL|yG^Q&95l{J3I8_vac8;ZMe z(3n2P>_yGmZMV7WwGoDM*`$c2y*T=0OPz_0KCutRW}(1#^8z1OaO-HC4wj7FAq5A< z4$R!)SXUVyt}{NcJyK`dAP#K7M-?1#&yq}B%p>gQ>P+15&i@3-RaLXMTub^BCE<%a zn^%p@-pdF7-xk{WU+NN*%l~4Jjr%{^JO0T1uQL5)+bI99Ik>LR#25XT_nGlHSvHK# zNh*vV_>_WMQ}|TLH7blT;{~3l!h!xYoofI((1YizRIA|sbe-`}9M+#xaGrw~2y=Ko zT$;mVzp%izzcOIv=G6f+$8RjKxZkZ+0WMS4Jyt&gQyFGJf6n5CMz84C! z?~xDvbD1#x1Mm2F|CR&Hc=5h1hx_k)VJPEY1n}qjyno9* zVBYt{9^714d*1CNR^lTj+QcVw$%S_DV;tl4`=hK8$Jbn+lKlRlx&P%%U-DjGw59)f z=Pq){UYE_aT6wRI_Na?(jMMd)JC^^y&hEq3@}t}2tj~DwjGW<^H@tTSM{K+c_J8u% zTpHf(D(e{s-tR(}`_%73mrNg0nrp`TeX4R@F!`1F=2hL&drHKLo-=ERf^7es!K|Nb zPm)Z3y5GEx;M@*!EUYE_!51a!k>On5XVwSnjy1*HW9;Zp`jI}N4t>FyK3Grv&HEYo z`#1T!8DRFG&N_2n$vYYBA7I|UfJ5K4kZBv-Q`m7}5AIcP+*b`PWX3%n#g>%$*iJSa z*y01sI~^R}!+3{-gFS4dWcmq;eHFZ$3fEN%^NpDH6nDY-=Wk)WmvEm3P1C(?Mfk=+ zAEf)n(ZbZh4juJqXK%@UbapJfAHre32MIU5>%|_%XQ6+8)*#=Ho-GXLV!s!Q+ghgf z%X=jpVD@?5BjK?9t-^x~Onyr;eNA@nPMl8*_Y3yV3-=dhoL-YmpHmP2VBSlCbNfFC zb2yLRgr9xpnbcpu3s0CZVM|}j{t(6n-ZB0qxsiN0_Z4;F@U_#|PhxERpA+#}$5!aW1N zNVvN&`#JBu&<2II9gF$@zjLgE%$VFIzvP5}#sJLwB{9#th4qu!-&5$Q@BV#6+@-=U z&hIht#AN)Hu&?>_#}C5Xci7LyQgTn?;(Bexw-0{03AYP)bKwrcto7X_(`NZ#j&YFl z?y}*)mYl)7GsD4WqrD`fbNgc@ca+X}jxe8XjgJ;)Z!(@Myh^~w2saG)eBs6cFA`p@ zz{Gy7aGO!5rO&baKe(Q+4NISoZxJ4P@J0Q-25uF`2A&x3afjqnzTRYz@e<+1&FiOq zi2pNp_!{jJen)uJY5f!aTzLIs_fPmo;SUZwD`768J1)K?;g#~uHN%W;Q(>MNx&2Lr zU$||zWZzbJx2E0Gy53Cqym!w``(Qg^>R^Y?evXr@{h+t;g~CU^P@Vi-B>YIzD^oic z3!gNvReE-Ci7<7rLuWsiNJc-zD0ruZ%srVe)K?B{aHl{QbO z_!bGbI`^M6mRAU?AGCkv&oZtQrVe)K;MdUNyGk;#(hfHEe~sh@uea>&`qv7>mDk=a z;&urAf2Z&PeXdRUJS5zw!RrY>AuPXHoQ&Ty!aElA!LJFA(AoPm?~rj27y2)RcMf=U zO+rkpUr(5O2jdNex!*T#BfMgPC06y;Kj;24HO={ckX5r&KMu_Bw1kJ`IQzUdQR^YC`=kCk6N9#m zEbgs@^^@`Lk8MS4DULDVGxHE(IErnylUySk`poaJ!GZk_n=#LHxxcK@`f08mmiNI( zRi{)Uj`FO+hWhq{o*Wnh-rWK>*9h`X6!Ovv<4ob+oH@ZWWqi6&m$vu}!Fx(&AGF20 zN_o4>Wxu-+9POH`HqWK?lNIZh=FhtFnHcd);aw);E8CPY^OW~f^pn~0xsG>EoEzun znu)yoL5`HN4`b`_$$K2|#KLDU-mkD-`AnO3aI7h~Wv9N(pzbDqw}d^|VTT@K%G$9@t_<7b)N_>S6k z@bnMgN1J2*`8(m*#?oZg2;Tu?pYK~uvhP!uX8V83;h$$3e9!oQ>I-7Fk!UfxT525BirJ@Jk=kXU>T>`Rh?Odu|V9$0WT769q_HfZ34bqcoShi zyL?O7_vJnl%fH3b4t-24;P(p7*OL!~PrkS&T|Yh){^00S)3y5};avwEm+omkMz4Y$ zI{W!V@{{LYo$k>-6|UN6|K#^G;T`+lo~}!u3sVO>boTRw7MOB z!uJjwpYGAV5~dDz=zNd%U&+KuJJ{I&*OGrd>6H}MH^Muv@z4F%e=GdO&1c=`d${j} zse>Il+kG$j%Bf8rH2y*O-DOWtet#4m_UE(r+s{wJ)WHs&>-{WwSf{g7`@aa+duE0E ztp8Q`#7?KBe18+B4tD6A@9&a{m3FXk{XZms)avClE`JI)c%b%P|1aTd_qZgD@881I z!494M{3ChDns+5X+#n8Fv-UH>GQ#7V{g}pgSz+p6ht7VgCI9q%kL0JG@ab=!nZ~=m zaN}KOqpcdt1ljZ*{Rz1|s{;#^6XI@qCe zy_F^Z_QaA@Zx!L&*Z($+Z$sf--W&da$9Gj>>R^Y?ei}*sVw-;+FkVgg@~)etd{-BK zW833XzKw;cgB?2OyM|<9r5$YSZ%xTJt=clh)kJvF?BmjBs;0u&z+bB2aJ{vJXEs?Q zjlR^Y?ews<%;G4F|&w9dpd^$bl*IanibG7-cFH9Zm z&^f;v$;3)K*w}vy$-VA@v)zW04`1ibG!7dH zzy0}h$?wL(eLA#H>$SBob+AKcKW!xUx_eIYvx#tn&E};2X;b0rH#;DWXIo+FV2956 zZYG&nX$KqoZzuWCw`Qcc+6z~j-JHg=gD^JmaXdQ;uQjn(YPVCNhmUrhg?Bh`NqQF9 zMYz{JXQut9t8n`kbCREK!qmYIo#XE=nOJBC8^_;6a@WzvrTBXaSAF(ZS|`1Pv4M|q zZ7zKG6E~%Hdl!26XxB&hylKxYc6(b0uioj&G~c!qzU7f4lb^oA)WHs&bk27V$;3)K*x3Il z$<4NWE9JYV@V8^?r}p*|zWK5xDb9*8b+AKcKcgi-w%PirpT-D(T>p&ZcW>bX8r4hl zeylKcutR4*<0LPfdu>{O7oUIJ$H8OMZ_KZa(4tbRTh~FmFn$NR^+g`s{%6E=1b+F5H+Glv?c(gFF(hfHEKUebNGY(C0 z9V7hDYYo%0v}1)g>2z`0XO0u54tD75=XlA(<}FBZoglp5+ean8CkpTN%M+>JP7NpYPn zJhk7S$^RL`R^Y?e$JA7alp!M9TLP z;Ya`YHTl0(c-uX}R3m!*+Ng)w@jipWe0W_j2Lo{=72v+ah7=V293r zu8@4l%}1wsa;5OuSKXNU@haiDGfztSUM)-=?9e&iYa|mZ?Oe3S5z{cAs;-7I|9lB%>n-y%#M?9jR1 zt&-=ix+v|>w+XlF(lCwp?ZQt_I3eYGhcI=pL+5<&luWF&gN^;)C3(_r$EJK23y;6( zoqMdmTe$w6*QRl~N0>U;p|jn+lE?hjKE-vP@INcnj_>`#^A5W^_1go&)WHs&{X8i7 zfSQlfJb6fX@tKQLJP!*ueX92J*(1W#!494CeN-~B(hfHEzeMsDjce!gW5V~gZJPZ5 zOL(uvAN9Zw_g9Y#QwKYA_Va|~pO#-e<@==Yf)i`=eM(}*rBtZXC!}L zd8e20v%;5-9hu^JPWa-(Yv=Rx!qmYIo%4M`GO^MQHum?TR^Y?em(@Zue}faNch%y=On)$3%`BcV`+Rp5vC4y=-P&`>R^Y?`F<&xSZN0v`~Q#R)+=^OaeXB`=dkXnKmRLy(CT-j zIKLLA4tD75=NrjuG;EZ{8;?qUzZ3rAlewFFU3@Q09qiEA&kvG^JiBr7^P}*r zs~%19{3N_t$Jr_0pM|M|9XjXxi)3P@9c=9XSIO;8IV8pPoAAZ^c1q*H6}I@Xo^yO7-|+5*rFS$G?ntV!ctjT>ip+QY_cWO#l*<28jFyncBa_a>RXZ-48X zg8Mex+IX!@KRdOzw(y$=zxklQ3tmSU8+dc;N+u3sh2wpoW|FZ*XW#2d{<2f;_v+1s zwfpw9pY?^Yfj3tpnViYXzFSDf7M*=>Ao-IQYCr$A6n^-rg{dD~319NfRS9n>{QBj! z`}an|`<}jC(r+xR|1XhnYhk^smT(*4TN>6r*WE;T^S?%>b-$_bSFhJTZ*MD19qiCK z?#(1O-EPI?x1I1#{o5tnUU+7o`L)lVgsFoaI{WD;dBwYTOzWeQ@VDQ;op5L2ZMJTa z=6x4o>R^Y?^Rg?lN(U8e?7y4j9p~(t^6M_#u>D^t&K|-_>jw%SzSUjndF9r^)WHs&?FLD{ z=8sXy&tT!-A3Hkv*+zK6uq#rW+X_<$J9Lh7h-BUYqaAGQf2ic^W**(wcst?EMqT!x z@%F+y%{nn%|Aq-u2Rn4O8!q{jTXuTLcn9GD%Wa(e?kK!P<1Q)AorI}_9Xi(=A$jk) zlTyAr3-9;vjSpDAi*WNZ-%8`Vt1xx2L+5-)N+wp?!N&D>ll=P+wcms6F8un<1Cswe zgirkIvvi#vB}^Uc(Am$PlKY-hd*85^@T7N6N%OKIeA2-4)BW6NVd`Lq&VI&7ZdBbk zjpyFNE%&-0t-G zwbhU`4<`y!2Rn4Gx1Z!)pS&i`i~WV0b*|lKCJDbWdE4Y?vM_b9LuWrzByV))PO1H= z!fjUWmGYk^+_%wrDc=Kxse>Il=Q~|8vCG<(CI$-?mTfzsG@X-PD|8Xu4nEKb1@Qo$>Ou+QVPbK_!z}&vp*93ID z*bgb;9RjBP5dmXAF<|ru1k5{cGXti*BLYT$e8A{WD&ctnV}EYIw6~~)7nks>0Tb`{ z0n^^{)wTIEUd;o>{}ut${pNBj)eT8xtRYZ{8UD*(J>1o41~L z_=I_l%JU?LCe~aCE{J$SC{+E$5>f4lXhk)si&H>|Z%Ye6%JRo57 zN0spW623TK{6AH~ZxpzX?jQJn-v_Di|Hi@mAMwLf`2XR%=&pnR8-9ceHt^W+e%EXj z{$KboWjageIV!V@qEnSFDOJ0wKDI}z-~*d2bVtMe3!Hr&D;dtdj*|>W;lLO5j?o!i zKixZ>uJaixr>O9MtmdoWPeW04rV6?_Y9D--$_Xm)_&L7d?B`rz`#DFl{hTKmo$>jS zsSBpxE>z+FI)mxAi&SF2T`Y_ZJT~;xB`V}GQvF8XEKtD?UYDWlnaK`C+?NS2P~n(c zaF%A@6_0Tak z)O%BBbkt+sy{p3bx*z^saPS=Xa2xMQrj6l6zVAzhqp<$zgAY{j@xF@deJGiB-A^A$ z#txpC-q9J(_Mb||-h1X}l9{*g&hK-{&X3%%nWCId)%gn*^!Way!1yM<|ESQO*ZF@X zGY(&=U_+mLtpe{p`KI9DIcV4G{9DQR#D@01)EN$6#PYogF-#R^Jbx%S@1Z{x+>bg_ z|2v)G+!wz{hBN+EGJWIy_BYAcz*GNco#C)2-#=8ycUFP_EI8-?mvA}%zs12j|9>RI zQ8;4$0DNLY`@a_kv`=4FOTVm&ebti;M=4CJCd-z0-Ir5A|G4H7c*TO_cUDX*;%`v! zw8dv}u=gr{*CO0PId*@oA`H)X(fmkc+j=*#sb;~yS-o_)aCzJ+A$ z9p?s;v4_XLMrSzWmO8g8=QQ<(pNulRVyR5lQCF8@m ztz_2VEsC3K(PqNfz;oRJZ>)lE+Cp~S_LA}C_1i%*95M5(2JC!0Nrp4-ESWxWe|3?J z4LtREwgZPfYqgu?V{|s|F3f&ne?5e$W870RdxQ6aUc%VGd#~MGGJenz2krEhOk3!P zgJ()`_~lx=h2(gx-BS2a@xDjvD~t`iW9=syKfc!Xmy8{J`C7Y`IP??_PF@!S1iUU5 zig&I9#iMgxTT8|dysx!`Bh74I#32x9|J{gFDu*?v#SaUJX> zT%+Q3P?3xcJoQKE4CkE3NRI1ZZ(*)0_CHpbI>zH9$8|7X7#n!cmkE;bgU;(Y%9qcC@$7_FKY~UUHB+2;kI+!dOJ9v+muZ2^@p{H$@UrN?M(6LybcbOte} zr%0xK<5MM{9paxSj19cU{xr!agH=4I=Sx0O1s(CQ-=8U2KUqBJPgglZ#ciD>nKf*D zwq)`)K1Xs~|K|#01MklQ=Sjv7I@dd2GV9cNUmzKd+&$MW6xL5wYZdhLm3>|$jGlrI za=BPCZJ~31mq^x6mLGcOcUEzqa;Z4_06UM{0?CX6I>!EJo#7n&BFXHF##cyYeD0A? z?jf#}j19bPu96)4?P_!?u5*oKY~aapq0ZN;;0qmbTwZYaM1Q>s+=arldqctT+4*M4 z9Nfde-=uP@3imL`j_Vf5mCT$+=Q)3$Wad0N&x!jb>nDo`z2}76 zen8wv72^ky1Aa(yobwM0V*~H``G{ovptGMxC3jSD|1FUW7w7zA!urYPJo-52|0Rr` z;yM4gWZFXK{GO1kpDaK0&d+oHNpbW6b{@B9Xi^0MrU~H@Y(St$t?@a_4pOZ zFBh2mr`IIEs^a_7*Ck^Ej}P{XHzbc%@%8vk$=JdBx-m@q|9mN#I`HnF z|47Ehd4DAtI}UUIEjVa%Ul&~LpKrubAA9upcK>`UnLfgXxy3w!BMv?zekXZDmD%b~ z@DGyVzE{B>9UN<;jn3?ooWUCvxV6ssV?2JA?751+UxoS1c}(H|H{oAY;Qd+hcggS` z?>{8N#lpP`{{IwD8`u!vPddX9&l9w#^It*Ns-(k)SeYj>t@=lLFzaX;;W$s0rIS_Q zv0)umOXi;3^Q4|IcJTVi_Aui5TYk~GUzU>$=QXyxFdT(Ls;s{4R}fEbwqH>gj>1v4 zZy^2(@wQ({7>>eWd(Wel#bd)^Zk2+=)?CAa!_?!mssQz|N6)_Pb{h$!r*OF4e%f33 zy@1_Rx~TA(k-|KiuQPeGA9gQnymopB;}hOCn@i^R2Rg>ylCk43*QelOE?X2Frp{$c z0qSFq9^cNTuVnNTj@n%E?;`q%XN+R}{l&riy0?{Nu6gjzX@F#Wqhp=2hYpm?7^CYa zj_*3Qmdu=q{s)PJxBtPC@egnR+epSAI{V*NGII_c^ON^U;OJ9+r{XXbexG8cSZBiv zjxoZX_f6nzzoX=6zmqVW_YK}hfy18sc9u+=VAkHQl6O(56np&clHvFrjrz&vhR1Rb z5$HLb<0xT#qVu(WjAZ!HD#Xk?FmUwe>8d+cGN04-)|oh%Z{sAxA0fqMR5Ja?u`hKqA&hA=$#y#E7sKO86-j`>2r94r~`AQgXi zc8Fwn<{LhEX9x}-^wpt~;pnHsb>^U-;15%or9wX;JLe-M6Q|eQQIg>(9A0y@cZ4|f z?DhD^7e4K4w&dt*jxZc0`of+$d9--XNphYmOdoh{9V3}s;XUt;l}tT!UR%c@tDtk7 za4}Bebw8aTnSSCPkbXN+GThpd+pFN?cwu*2%oP8Cm% zt_P0wsBhcTB;y;*8l5jWuF=zl;g+^W&k&EE!+mw8Fh0@oIhQ^^M>1o&p$hu5Rfuh# z&gf{HJ~>Y^eQx8j`_j&5NfAU=-ajlytC8^fE#qv!A#-YiTT=)BL~ zA{l%>fw+o}Q-5tR$?oD@!N5|(n#^El>tJiFML2Ub>aPN@j=PN*GvVyKU+Q|nRd~; zorfhmzSuX9h)3sk9+gaec<(`vNrqpdVt@aV?6_mTkBdj=e4mg^zK-ol$=JZV&8H;O z20HtHMl$}N);W&Rv%=_H_c_Vbhj-lnuUVIC~j8NKs;L-OkZzbP3T>)$G{$M9`oeAiP!=h)tn>>T2Fy(=D_`}5zD@d58P z-jht5ZsUE)w85N4=kMk}kc`fsfj*QBXWt)5#y`CK`(w%EgwC;kBH6LV{{B=vI@^5~ z>|%d^E*_ox`wPkLZ`#8THum$SWZJt}=h)tVgwfg0SCZ`q9iI`nmRkScLf=jt<3_vG z@$=BH3;jCMFHymsF@IHObX>zO*O`5m{kEU(TVB)oTNUo1;<$ZR@U9Pz_3^{_an1Wt z@(%@OpZ-bmRVv=6f0m35JaxEl`$clRZ~Ijkj>17dFs|(Be~Lr@hl>03Z^`uOUpmM2 z_Kz?+_G0QP{j5Gb`Q9#S8F8-bc$O6h@B7GV$#4`7;$cqVvmTrZHq2SL`jWBXI*i`e zpXDTzKYIG|d&zLL%e8$4$@9dKE4YC$9KYY&HY*i2VAjOS!Xt`&_{_74Fn(h{G!zH# zJ#kgZaD0dE_0mWfU+CPgt4Vg>#QCtgcyzAYSTgnDhbt;#Uqdpy3;hMZrZ{py?|Ygi zlIgG3D&&j}{lh!!=p4^ll8J}kYaa7kTNs`1Io6R3=X;KICByliV?D_n+;gC7rgDf1 zYXRBwV13DPUe*Z1Q8aQ_vy)`n<}lZ};OGN$UBpqJ!(7*b!_IAV6NgWHnCmW?`q;zq|5tmcV2f^k(a$|4 z)7R)ccD*E*$8K|R@E*I~lHn*?UYeb?dr}_({9?nr<^NW|F+B)fb@r0%I`Dg{j8mZwGIiL)M@yzJJuYJ;S5)9VE_+KRUtiC$@f;W{nSRHH zz8|GC9M@=Kpgr2P4%?{1#<7f-Onq!e>I}w~{P9E1w%u1UaXXHQlHu_0?<)5bhG!np zkCP>H(2wXQsZ3YFH?nY#Lhh(>xDUq zEp2S4GkV%sPiNvkL}%Kd?xB)dU$zBDTk1HT!zFVci0xsL!S-{cWZFV^gwA06TqJwi zJW7}~%e~?($>n>++2Y{s8*JZmBy)db-{9z*Hf%drI@Pj}yh?;{=`U<0Q%O_HnXgI0{GfLC&X$C+B#bJyjgM_ngzfvYDrIw3{!C z&hz(l$<&4Sef=4dX_L=u=$V(SC;L8Aockf}XJ?5==Q(<|WPHKf_c@a78@+vdUY;us z8yC;Z^NM=ROZu2T!q)wIzT|ShULX$M{d%EfI0{GXSMI|v7LSjMboSU>A{pL3E|m;N z;fOvMn+4*_W3x~ky!-Dm$&NMl-{s=bc`sWenY!@qzbhoW|IoYt?E6Y__-5P}>P#N& z7gq_R^SECv8DH@BeT`)MMql=QtvL5jjQcwA=p6U;lJNy^-#19MZ}j%p-*w1d4%pQOp`^C{Z z!_oFVI^V0ZSmkaN`uQ}~xv$`T-+#X_9AklxJ0!zl&-MKQ$#7hk9@3eE>k|BfDu1i6 z=OI&vxE_^EEFRk>k`GfMF1{oAmt^94OvN^jONRIRVoyk>9=z{Ao|KGlbpBlQlw|s- zwaO!su_2F#bw=lyo{kMa~FG|Lz@k^4i zaT_m7-l5dSE8^fi_OD8YbD2|&?Q7!jhu-7;x@6i!=QiGuOdD|zeN!B~+jvVdoQvCd zTO2;oJBN29$DH03jye5Xn0|}xy(bRd?Y%D<&c*G0AP#@%ozsVsX%n4u`baW4#m`zF zi-UI?pGbytaT}kC!zX&?67%sh$>fU8ZG0}7HsU_S_p#>Q=|B)PmFtSk=Rb8Z#Ma4vI- zIoD7e{?L2vtSXr{(YcLAlFR$SYU1GC#_E#cT--)uari{<9M+H=b6Qh4=F~*EydN|b z2k-XQk__kK_SP1MKlILN9m%wb&N;0sxx61V69?}$){_k9;x?L#!zX(02kT2FS9ETp zMsj&SXdw>XZEPSJ&c*vdOL6!_Z-1>Mm)G2e;@~}>Hj+$Tcwh5dOJ@FZZ;PI58ov+8 z>jiyWFRUBJifeTn>CV+UXK&e5G6#DL{3a>~s<6h8eLuFDWbT>x`+9LNY$uG)&kNg2 zhVx$5K{DJt)up{ok~wG(T}PDzRA>*G7^g|!MKbq8erD8F7>>e0?(`w|yWPbR8-MH1 z^?OK$cm1A{;V2x`XIy6K+)Et(v2nh=CF7I77r0Po{IZ|+5k_abErMOV)@>;sou8@o zl}ufD*X<|SZNxpdKQ_T`t6&%Vet>v%ZeyTi>cab(-`0|8o5S3of};=24Hidz4s+WS z9CmJFTXFcrhq)n=sgFHeN6odNlCecMzv$=fB-7XEJa*elE|1+Xaqu3y;mAeNwAC!i z_W{Ok2l4pDhPmHaXE?@-Yw%8zxqi645yG^`Joa4KSu(so8|@+)j>19ywCi!(RlI$~ z@fax{9e#Jyd6Wu&D-z82H+xF<_cwb)&>UKpJ}&rFa^eR$X1N3!e2T=o@@j{TN-KT$IE;r)DQKgskB*HH9)7P4;tLdUxm zeCEd1-`z}-Ozzltu1%H<@3E!LDZ=zAI`6GhCBwUTKb$6xSojRYm@|ghGAH=`Gw9h5 z*?-t;*mLM(=E!u(%n{pyqb+r8J5%zGD%j4@8I0|wI^*|1oo#!NWc$Sy9BrwCEqn4I zlJ8Iq?2(5_=3tM6KU4({|H#Z`?j;YG%)J!vu;Pb%$s@$Ud;dLBG92^5@2?ys3{Ncf z%h|sdV3uUsB|dCvlY9@>8J+VxPBM9+J62~fv2ibYf@ETwqcir5=ZTWxu|HmCu~0g zlP|h6bq4p8hWT=~de*|JNr9Fvah-4N#t>1je8|mbTNW=F84`>r#P4UCDR5v=kkDL z_?XLs!p;S~+j&Sbx|qwug)OABYNleyyTeQi^5CG z?Q}ey>P|r#Qb?CDR5v=l7aq_?X}8!p;x9+j&DWx|rXag)RA^cYbe4 zCP(zn?`_F3zjuX~mfyd{qjS6ONq$EK-ub;R8J^<&K9Ecs=$zk&lHp^19|=1@^ls;4 z$>?H!pA@#_hu-;pDw!P7JHO8)$Nat!URr)%ibv;m|0DTx6?o_Om1KB|^ZT!4+Cb<0 zzLpFh^ZQ2F`Js0^-%3Uo^ZTx_B|r4e?|aGQh~D}AAUWpulkn2=`&m3XxBH9aA64L; z->;J4DbDXV$+Usa`TZ^#KIZp_u=7LjcK(!%F6Q@FVM~7Ko!{S*$q~Kt`$uxjZy8;q zmX_bL;?cR?YRTHRs^FbpJ<0GC=T~1cZJ=|0%Snch`7JN({Ls6d6(pmJ`K?&kk{^2K z*FZ8kqIdn3CByT#(zzC1Ej=9hv*$LH4Cia%s>04cewJ(`9-Z4-O)_=ixp&6b>XONU zX9?)JkLRA9cKO|h=(&$*tTXp0ocX;UYwFxYg#-N>g`TtHT1zr<@i*S%wSR44biRjK zM>3r6Vb+xl$32YiTbl{PbDz>&XAbUD;MY@uBR*vJQ;lSD@aKmXlHpv)k>BSCPY&dS z4}3X?mXe)A{EXj9JUZvFp=3Dcu#sdqKl^Ac*)gNrSf!T=?I9C0_m`VUo~^O9>UncdoJ~q z%v|Dg7;(`ycEru^#Y9g((--7T{`SAQWb&{rINDOjW71nPV{*RwDbDvk;?a3bwvY_x zG1*cwoX4b}WDe#Ly1ptCREQ1Pv27)p_&tvXNQQGEW`55nJarhyttG?xIo=@2a7(1a zexPJH+ixS8aW~$!z^*?;7>@e387fR0e#W?+YNesgI6*27ek`$+csi2Lro;?a41Oq2}g^|7C1IIoXMk~vr(==N7RMuql}ozoP_aeYh`hI1k2 z$-?mN+XEys{>IaVvGH7+A(?T5_ZpZf8Geaka=inE@#A_22~!W=<9)DX>Y}sVA(F8} zXJ3a(CI+{6m}I!v-r>TuXWvH%V+U_PM;11oH%AG>#d$MJ7@qpX;<1}8d1>=zj(BvQ zH%Ci`bMd^HE6($VKBgUP8G~s$qi5bQwu~d=>9~)TOm5EqcwxBXg3Sqq4Rx5$Ckiw6 z^egxz$#7h6oYTp|OUvmL@#yGF>Ygf@`tZ(ko@96zuh-MW5es^MuQy*Zx${ht*s*cH zoL=a-&%rK!XF|WAkNrabxL?kYjE&bGIIca`pl#2TJh-r3UuQ73YwApYHz{!A0>iuR zIg+VEJ7?<*rtSib33bmEw(WV687td@qb+r8dx3QLo3DOm&$?PN+*K;>yXz#o@6cbX zg75QnM%Pbuc_-oq$#C&r=tg09?621u?6z-~Oxx7w`po$4zjJcG zWa`4(*8`be&sTKzTz*jUohsBhVwP_Ey-}chQ1@2gKH?dw^ja8VLc;zo%~xe zF@X91KkrL^ufTkN^nql5e{{I;hr-yvQ-^i*k>vPX_G4i<3I~10T%4uzC*shbDAGB9 zD(sx&+WAa8I_4O4KbK5>c-9W<`b){w{X%EQ^B>9Z{x0t;$#4|iLS={R|5seO{@3E* zUH==&a1{0f@^M?=ii^2_Ck#iyj)QqX{NEQG^MIJ}i#>B4{ST7K5j)5Cqh$Au+x$r! zyyN>>G8}~?_V+L1@QV#|n|6Mc49^(&`?24I8C!JT4}X^oPvO8X`Fq^{5bxOHT>Vo# zI)gJ(iKq z--A@Mkae&w;FnctCx`e)rr){V)R#;Q3nk-6uxdH|18Qj2uwTyp4ydVQ+NH0trA^{m zM`sS=!e(uibybK9nY{R$5IiHoH}>eT@%S{8Ozz~s_kqnNlf!z!W_`)<{{Ia%lBowz z94&R`AP#gJsBES}TgYy!mE_pgM#8kUVX)a)GQ6)xttC?r-Z5?>nR;z>w(m_P!_QG3 zI#spRKh%Y%ANX4saP$N55*snPemlv;W?OKyrH*aeOU9pZ2g%g+^|zyBY~VcxaB&P6 z3)k-?nQ_9lq0V4*tl2J-SyQ&{DvXWqA-YM%2A=x-jSo2biZ$6oGF)6sJ%!=1=Wl?3 z?SFI0aPI#;lHq!*_`9+#B(wHbP(hEMUYu3zr>|r<`{^$kt{Mbi}ru&Tx)x56LmM zQNl5{J%zD>cPx8JCN}qBMKT=YVVlvCW4vR8v4eNKdrKx>bdGndWZFbWyu0fRhhOe> z#!Ds#Un3_-hNEyWm$*jSejoApu>HQ0;V2x@9%`cgiF0;;VYvNNoZBSH%tznfPnL`w zysx=aB*VM-nmbh-ZF0>ecH+U7T*v8*p5IkH9$pM{nxKc80qH_*cNrtCz#2lcm)<1DB zULy<_*Xy;y%rmdo>m*|b@AZ1UWOx^^*BivqChL{{Bpz&?>y486U8((ah3u-0=O*E} zX8C<&*?QF3b#9gocK*M=w@AhhJnQy$ojF*y=x$TFUxoV&Wc#^8a%}rf;ia`r`>u1B zY_M}*ES8KPc;|4p@7x}dyfi;|>mJZ;KPnsSoZAw~ z_=0zCk4biJ=$)I}{+Bp%#m@P{#eB)zZ9XoUK5?8+NM2f;{y!vAS3RkJu=84cN-}=n z9p}@M9VdFn>3RQ*IBZ-z@1HH|G4I*uSO?gW%NaVO?^o>6&r61j*N+#3;jw>CXRvd9 zNiv-K_hrd&y;XeucttXCbNxV%pBHt8x1ZM}!`aX4lHu5k9NQa`iEW|$xZaz>@UHik zWVnGU?#s6&;}0Eezp68w{k|(1zw!F@B**>vQ(YB zdV=128EcEbuZW)gm3+yK93AH>l4EWSg_jmn?AKLggPn70B>Deo>%4xfs-iG{qVWY2 zbm)o{VL+O|&}3-NC{<9g#x4?!V)Vh@C8OAT@8Z~d?+P}sg9YpwdGOz`{C<=DCHsMs zth>MUt+m%)yPSRIo^$73kBrPeEQZ8oW5yK-_mw}IIk!A zrN44@f9-erI{@sMB+r519pzbHPX^(mU(Urnz{ZhJo_m6mr}pHTbw3zRpGemIUZtMv z-hIyVKwtB9?-&XmQgrvaVc>f27>=%wymj2S_6Dz|%=tb7T|fDp?<2wTiif$oXXSG? zt?>Fx#aF%d-MQod z-L&yyJbnGGQuX%I?iBDqeB={LF6~SMTQ~ajqGt|fq06-+`QMP)VC#8=n^QRFAl%%- zIj8wf<#}+{*I&Ew&CB0Z)n*>vOXvX0Wvz6A+M}Ki+$}8Jz#+xfSf;^;Z5C z^T;F9oYEJzt0)F!9MGHwD@@bJ_eT0`TICnPVuPMkTITwH^vi`wquN^!19UlG+0jY zsAG5!{2BPMNH^FR&egN%^5&|~bH%5AZ}2>ve0*LgKJ|O17vbddeCZ{y?Tn|1vPSbHR6`YK${K1S9)pLreK@pz3g=av0=16^D8lQ+R~dG7QUSk8UOHutA| z8(lt<&&j<5r_Hv_EA#mt*tXxL%v`(=md{*#0G3lcG8b8+>*0;BU*c{6r%#FdA)I{T zegu|N>bP0wAHy44zg+u20o%TRduq>TDe^4#Q@He}9?OmJ+A=qrz;Y4i6Set_7vuZ= zWVWSW+Wx%Q{JX<7?i$rU`F;Ujhv?T;&ebo$o>SU9{~o54%li8oEZ0rUtmALc<>Rxt z_|)ro3!Hp>zAZlWI{pq$K0e=rry}*Z{D3Z>YxY*K?Hk|v+RghbN^R!oKD!O?fDI==1!zk@Tk+FDV5qqO~BD7Cw98Q)mOOsqe_ z#)_|c?Q5O*ZU-Ar-@ho;|DolX$c!>?eS3OfZajy;&-)+#&zac0rFVsQtMKj>ZYg+I z%07rW_oH--22*-CMt&7;@$~#Z1`S{EP zJD+K%9V{2gn9YK-zV_ri8(il+2i^6P_U3~1kx!j@VC&>FtQ}xE$2fa>C%6N#zU?}$ za*ml}mss<`b^8m@>oHr1E*Hs|ErQFK8AHE}$6|0jW=qiZmygdu;CjrKqRT}xX3OBL zuRS>*46buN1ic=!L(%n-Po3pp>txIh1IyK8b~w7c^=&tGj{v8=Uf?4U&spc&>*`U3 zlUFhaM;Dv*jqM!BIR|Z&|1pAM&v$XX$M{~&qd$^8W&l|KL6n{s$5DD@pEwqLCZdlx z`5zCqZr0}sVE2ef-kY8Xr?2+ZJqcXbJsG{;54y^pxB^~Z?P=!}uzN`)?W}}bfoRWq zIu)Gtq{cU&_c F{{!9nICB61 literal 74244 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 diff --git a/src/games/rdr2vk/tonemap/compiled/0xCD6F15F2.frag.spv b/src/games/rdr2vk/tonemap/compiled/0xCD6F15F2.frag.spv index 0905cb2dc3cfb278576c8051ec45a77d1abbe358..05860c4a27743033078d8470bb8a4bcafcf20b46 100644 GIT binary patch literal 13276 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

4A(_^;xli(#KB{Kc!Aw_Z}IevKi~QH5oRqM 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 diff --git a/src/games/rdr2vk/tonemap/compiled/0xDD04030E.frag.spv b/src/games/rdr2vk/tonemap/compiled/0xDD04030E.frag.spv index 8444419aa55e0bf4ac54781a6e0ad3a3cdad73df..28d602104ac99a40f9cae3ec62246c1ef46df418 100644 GIT binary patch literal 80812 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 literal 26320 zcmbW93Ak5N`~HvSl0=gsISoo_I;T>aoQ_f|nkYk@lu#;3W^s}vLdg^%^N=Bg1}TIh zWFE?^%)DMQkG=iw&))l9XMMZ6uK#=ex7M}q`+lDFtmj#4?csdS_b6Ykapk;9JLT=1 zS0!(!3VF$~TVA=morE|ap!3dol@i{&|B(Kz&zyWx>-HVm;#ecEJg3CAtGww>8+zK| zCytqrmsef5rdl1fMrtF}MylPe;2YH{my@p6Rc)kNO~s>sWwrA9Pg36V@~e=cl}cD3xS~bCis4 z8@S34F9@94O2!uk&P;=g>TH86*3Ums7$$X4Y=f{4#q<%^L)@r1hW~i+1uBp}`){;3LuL+L)c1!&_ z#@gz~oH`n(T238JQZ1*B z{ZcKbj;5)WQ%AE@%c*1kL~EZ@NApz6siQ@z<*%c-Mvs^!$t zCe?E4ATf=RQwNDj%c+CJO2()6Iqw$|la^BliAl?;gT$oe)Inm>a_S&4X*qR}n6#Wa zNK9Hz9i3Axr;aYEmQzR9L_08NJ-Ve@P95D-EvJryQ!S^CqEySNqerUc)KQ#jIdvS8 zYB_cEOtqXkdZk)U9fu}b$DBHPr&>-OeNru_j>A$dr;fgm}s4H>KK%2Idu$9wVXPJq*_iLN2Xd%9Y>{FQU}kpJn9nUumLuOmc)@4lit%%mMuSlqa>qc_}DqR}jXj z1}{waF!tRNeqd4`yh*}4hIq|V9^xGUZ&&ur9g^_2$vo13Xlf7frldSsH|%o~-Y(eZ zr#!2>Lf)D~9$Iozh z{0xV0{|ral{uz$8{WBbG`)4@X_Rny%?VsUjHPd+r*96*bsg|rC_e-?hQ!QK*Xth!; zTi5c*yCAd98m*GOq+PqP<}W6^eOR+KDGz(>6nE19WDb$SN54S(Dc>l(TZw+v}j$!V1OL(Vnz1K;3xIXKr zJox9s+qccuM)w?eK}W?dpS<6f6daU{(>wJG*X4035Bq_i14^_Cy_FODwxQZGHS8rMGB#7N`%M=Omq?g41CBaQn2+JZ>qK7h6;(wI-QRguPh0BwDw zaUVe26lvTC(6&Tc%}irKJO|td@T(bV+y~I|BaQn2TH8pgooPjp#v0-`Fw*K~+K5Q2 zmuV9tZI4VVjkG;8ZFZ#bF3%VXB8_)>v_+A|yFA*eNaI}|ZGEJ%=g>Aq8t?LGTOut# z)7X@rzlNDsGtwGm8rPWph(&7~X-zV%DAM-Jw1JV7-?Krj8PhCyvw7_ zjx^ro(H10H`tvXE^6Y)*3ulkBXJUyzirJi8S8#(R9lU^T+!>TFpq~eIG49(uy*zZKUc;BavRguQ~KHB<7>z8Sp zBCUU>ZHYAA_vy=q_TD`r(`rT<@B8@GkFrTiE|&}S~Ew}tta6lbjH3k;<0^XW=Eqxyv$xcdABPkjk(~Rjw6{Lovk6G zX&Qq@A2gn8_A8%hJe#c12S48{7(=Bc8qWy(`8mpc-WvB9`f{(f=I3aBr1?48B+~pG z<-X^>evWcqvPQ0q!M(+rpQGF#tob?0HEzw%QLa;K)JeReNb_^FXQcT#%AR*$KS$ZO ztkvzBtA@hNlR0b00q1j9?5{)|yX3_FUjgRT>*jY~^5bA!zyG4ee%r5a9)gazFB)UT zebIK*w|wU3y@3!0c?dr$Vh@_Vym z;?KJ?cIFh!oW2+FM#3D}c^AgMI^x)w2kdk2Uk z`D*pZM`y2LzBv0Ijkc$Lie#T-XZ-jurw{v{1K%zgXB{~9QU>g8{MgSNaQxt`4aeTf zi#Wf8NRHi@t|A?^JO1M1#De<&$!>|DVSA z|4To{cl%%b@xgz4U+2HQ{=abM#eOmVUu$q*pUE$dW8G)wzoC3sn|w9a58g-(t&TX? zN50xlY6oPziEtY=?EC4Quf~BL-c-%&+f0~PW-iMqwc@?V>gMG&Rma*XYlOOLGd3mJ=oA*t4dVQTBjL-H5 z@j1w`B!zkSGMDfXnda+gWX8FUP7=nK@tEf^YP`pqpC`<-z;=ZQbkdvl0+kNA=X z6}#L1nD_;?TL->EeE2oRfv*+cclv38zbn4^{ObbWEIxS2ZGm&|){$`L*IDPQL<~X&5b%cJ+Q(okLZN%9RZq|EB zr>`6Lv|i%u(+I3zjMUdPi`&bO`i*;yU)$S^`3sSQv;JEF+y~6QxlM7|^TcOQ!g;^&b-)r^zl zE8;h9J3Z{fH^lSuO2eLdJK+-p|1jkTlONA4-fuWOPn%NS#e8$hwdU!*{!|wm%*9T!lN<5MF?nie4a9jj;e85yAI&81 zC1?$VdGCNTx0Q6RuC8d*3g^884SSUglbh$Fku(l--ZMDxKT){6Fl&PyJ~Gp|=ZzEQ zn!v~NGG5x1x8{fIV1oGOORfrQak}`h-j{`a%x4Mo!4I3`oFTmS#{0u{IY~V4l+!}o zGsOoNEe_Y^WO4f7hs|-$65e@CK^XsR@tvA??rQrv;>&xDKG@gQx#IM}4;wmlo~K5x zjDwH+pD+B!74L++E)XAFd)o@zFBJb~(RI%_{uFWg;D^nA7YW~cdfk=g7mI&fZcd0> zDn8(!*H$>rRB`&?ht2&i5gt%@eHee5c!hOUp0WK>@tK9!gnFlo(+59nuJvFkxwP(xjpEJcDJnpuzzE_CT2S03%bER;D=Z1BiH@Skf|hkob+f@KKNmCy$giNm2vQKygP&+-L-MZ z>rU~zOE2s0yzUam2c2h+``s-*xo+*S4)=)nnbRu7xmSGgA76xhai2JS@WbXf_X{`r zp=F5kfcSA=P73usC_eo4vicT^(+59nuJ0jXa%CKR9RFeA&dWE1ydDvMdtr-}wm&L< z_SD%S&qd<&!4I4L9uvM`ucyK~JTAWB>(@ivC&at8Z4<87#p3kA51ZpWDcpJK)DY(> z@oKH6hWpdg;t#btBdq5Var)qg&Gjx7CRfJ6$MKg5pZC$3A+P1)CG{7D^?XJgAM|)V zSBUR1rgIqg+02d}`>hlobk^!l9&eR+=Vf!l{pUIHHVvnSIM0jI2S04i{{>-kVH|uM zZ?$lT5toJhUlh;#YHPSoUJ}O#J8DaBbLc zuZlnR{FD%9oj85)!{+>76DAkN!N>7l7oK-R^N{}=;XFgW$X2!IDPQL=6XL8CRfJ6$MH7^*VyH)kk>}>H@;}T()N$V+wM{nuCITI(+59n z_WMNmw*L2q>td65+ZW2Nug&7;F0cHI>-|)mKKNmCoX>;@?KvsL`CNQ{&za%+`a*nC z<+AntQk*{cVROA-36m@1;N$pT3)esRqfqZR;#*Fv7{>cne9@h&L!SQ@rw@ME9OpaX z7hCNc=IKA;pI5v##Qk3UjG7g~zW+g-KKNmCoGrq4OnWd~e?N+Ec&lZ2{{JLC@4C5R zKmROFAN;Vn-d}{tm2vQK{9lDTA2BWD^_zIlE@vcqx3VfURKbxk7dU;u; z4}REO?@rRmm2vQK{Bpv-{9HfOTV8zGb7emhR}ioA>HT3pR}`lYe%KtRlJH;eJ{+#Q z%Ghog8{$?GZ*cOa@E%cBoIdzrbDV0zzt$`c*Xz#WXPz=V?C0v@Egw1|)Vqr~eeg?c z+52n_adKrGd>nsQ;U(9e7xJnpzU{pl;b)`W#9I{J8tyZ@i_-@`Y>rb)c)-;QLSD7S z$8NYN#H}NK!tZOsyww$_4}RDjr=IZ7V;6_<_YgmIWu3tH6yH4M+)(dc;`G4}o7Z=5 zVRB_0d>p^NaKnXDLtgucpWfr25Wj)==nkF3e%@D{KKNmCoP6P1Ype;YEGU3fIMc;_E)Ud%5jR#ZP}|T&TC1IDPQL=6d%RCRfJ6 z$NifNKeg<_kXH-w7ykYu#6Lj1@9~F)JX?y>2S03%(@OaKL2E+4*5cc`mR-MX#4G)C zZh)Z1R1KKNmCy&b@6jDwHkA1J(R z-p8Tdj^g{gTq)e2JBbfJWNo<593)O3{IEGrXW=<_?zPgqi};k{vY*eoia)(NFWjHI ziPHx^Z0^@xc-pRahx_xv;;q})2hkAR6(+59nuD4j2Tp0%+$3H}P+%eNb zy*Mr_Fm!@pL#H?%c0`*!4I4LdJCVpwN1#YkNCEo%hvZW@vF~Y8s@F9IDPQL z<~aR?&&dBg?34cDOXe;K`5Z1@@0GHj&yEnM4}REO?*L(PWgL7Qf1q&pT4norkofYJ z^+No?;wLQmtP^o~zZxP=AN;U6&XK~uR^C0-dzAQsnPv437619W!Z2^c#OZ?{Hpe+y z_@|PMoz0ICzkSrvA)jN#Z@r*wKOZMfAN;Vn-r>UJ$~gEq-toe7>unCtkrTw9-1u~O z9+ZfeK7LKOuZ|F>4}RDj=S1N>>a7lOMvBkrHZbg)QR34leIA}iCyCPsKWvUOTKK^` zJA^nVi$8bZOCg_A#P|NC?0IymIDPQL=6c5nlPlxko@Y>qQYxNF_v;r?-^ z_~(t*g?uK94;_1PxPH$Prw@MET<_V!Gc=6!CAqnAXMD#YN)u!4I3`TrAx0wPqnssrbeB zy%6%5D&DG~G}L#2odJuef-2c71AGlUy| zx-mRAE*HP$feS+(GsW>i=j?u02#$i3%>{AY{fgHCh5Il`~@>JjGgTJewfKR@I#R~#R7&hB@e@PNb54*6d% zzPj4!q2CSS_|UL9{~LwLg}C@Q-c7<x&!+7_Ke|XM^sz3d#|2}bi(5>AsOdjNl#_#$b5XKjqV?QYTZQ=W& zwuR!F+akw#NE{z@YYz)kGj%!kBf|J%bL>ZjzgS=P^WY-!=U%xZjP;oKZ9m)>_~YX5 z-&J-$e?t7!Ifn=PV(~|MpBVU);y2Hm7x+`+kJTvqocC$*E?bWd_kkti-@RY<`TJ6F z`rwDnc`p;LcX-thce(hG;?{vbBR;v??C^Qi3UT`2hs|-G6|TB;aJXJpif{R8L*T2# z4?DDBxDK8Zrw@MEyf2>@CRfJ6$MIhf9z1nesBg7+jW%0Do-c|oZvRfWu3r+T4}RDj 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 KR?S2wwf_TOef($u diff --git a/src/games/rdr2vk/tonemap/compiled/0x4205843B.frag.spv b/src/games/rdr2vk/tonemap/compiled/0x4205843B.frag.spv index 847b0fbc77e08ffd48de1a7b483d2d941f609a10..77be19ac043248b37a5507410f9879306fd567e5 100644 GIT binary patch literal 141780 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 literal 74184 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 W?zNd4bClR;f{m?Rtlhk3KK=!D#_$OM diff --git a/src/games/rdr2vk/tonemap/compiled/0x54F0BD84.frag.spv b/src/games/rdr2vk/tonemap/compiled/0x54F0BD84.frag.spv index 5f54e271b4ba2e5283e44cbc426aa300b2b30e41..92c2d89cbdbf89f5ee036731d043ad7305d9b5e4 100644 GIT binary patch literal 135708 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 N-|EHcUDw=??*UsUujv2) literal 80812 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 diff --git a/src/games/rdr2vk/tonemap/compiled/0xE3E0B5C4.frag.spv b/src/games/rdr2vk/tonemap/compiled/0xE3E0B5C4.frag.spv index eb1aef61b179f4f8714228bbcd0cde7757572ddd..c186a5cac1defc8cddec4bcc37a46145c38bb507 100644 GIT binary patch literal 72804 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 literal 72804 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 Date: Thu, 26 Feb 2026 19:23:11 -0500 Subject: [PATCH 14/30] feat(rdr2): add sliders and finish up shaders --- src/games/rdr2vk/addon.cpp | 415 +++++-- src/games/rdr2vk/common.glsl | 1007 +---------------- src/games/rdr2vk/macleod_boynton.glsl | 751 ++++++++++++ src/games/rdr2vk/output/0x14BF23D4.frag.glsl | 14 + src/games/rdr2vk/output/0x1B0D650C.frag.glsl | 15 + src/games/rdr2vk/output/0x26B3FAA9.frag.glsl | 14 + src/games/rdr2vk/output/0x6032A998.frag.glsl | 14 + src/games/rdr2vk/output/0x76A78879.frag.glsl | 14 + src/games/rdr2vk/output/0x7BE28339.frag.glsl | 14 + src/games/rdr2vk/output/0x8B9C89F1.frag.glsl | 14 + src/games/rdr2vk/output/0xBCF843ED.frag.glsl | 14 + src/games/rdr2vk/output/0xC235CFFA.comp.glsl | 91 -- src/games/rdr2vk/output/0xFCD82342.frag.glsl | 14 + .../output/compiled/0x14BF23D4.frag.spv | Bin 19744 -> 28924 bytes .../output/compiled/0x1B0D650C.frag.spv | Bin 19284 -> 28464 bytes .../output/compiled/0x26B3FAA9.frag.spv | Bin 19612 -> 28792 bytes .../output/compiled/0x6032A998.frag.spv | Bin 19844 -> 29024 bytes .../output/compiled/0x76A78879.frag.spv | Bin 19744 -> 28924 bytes .../output/compiled/0x7BE28339.frag.spv | Bin 19256 -> 28420 bytes .../output/compiled/0x8B9C89F1.frag.spv | Bin 63296 -> 72476 bytes .../output/compiled/0xA383C448.frag.spv | Bin 30580 -> 39728 bytes .../output/compiled/0xBCF843ED.frag.spv | Bin 19716 -> 28896 bytes .../output/compiled/0xC235CFFA.comp.spv | Bin 14936 -> 0 bytes .../output/compiled/0xFCD82342.frag.spv | Bin 19808 -> 28988 bytes src/games/rdr2vk/output/output.glsl | 40 +- ....glsl => output_main_0xA383C448.frag.glsl} | 14 + src/games/rdr2vk/shared.h | 102 +- src/games/rdr2vk/tonemap/0x6B9382CA.frag.glsl | 20 +- src/games/rdr2vk/tonemap/0x809F5852.frag.glsl | 20 +- src/games/rdr2vk/tonemap/0x9B304112.frag.glsl | 134 +-- src/games/rdr2vk/tonemap/0xA2ED1CB7.frag.glsl | 20 +- src/games/rdr2vk/tonemap/0xCD6F15F2.frag.glsl | 134 +-- src/games/rdr2vk/tonemap/0xCF7FE0D7.frag.glsl | 20 +- src/games/rdr2vk/tonemap/0xDD04030E.frag.glsl | 20 +- src/games/rdr2vk/tonemap/0xE3E0B5C4.frag.glsl | 20 +- .../tonemap/compiled/0x0C1275BE.frag.spv | Bin 67920 -> 135648 bytes .../tonemap/compiled/0x2B012EDD.frag.spv | Bin 26320 -> 73436 bytes .../tonemap/compiled/0x4205843B.frag.spv | Bin 74184 -> 141780 bytes .../tonemap/compiled/0x54F0BD84.frag.spv | Bin 67980 -> 135708 bytes .../tonemap/compiled/0x6B9382CA.frag.spv | Bin 80820 -> 148416 bytes .../tonemap/compiled/0x809F5852.frag.spv | Bin 59968 -> 127732 bytes .../tonemap/compiled/0x9B304112.frag.spv | Bin 14564 -> 59380 bytes .../tonemap/compiled/0x9F191B0B.frag.spv | Bin 59768 -> 127532 bytes .../tonemap/compiled/0xA2ED1CB7.frag.spv | Bin 74244 -> 141840 bytes .../tonemap/compiled/0xCD6F15F2.frag.spv | Bin 13276 -> 58172 bytes .../tonemap/compiled/0xCF7FE0D7.frag.spv | Bin 66032 -> 133664 bytes .../tonemap/compiled/0xDA9A5AA0.frag.spv | Bin 70612 -> 137820 bytes .../tonemap/compiled/0xDD04030E.frag.spv | Bin 80812 -> 148408 bytes .../tonemap/compiled/0xE3E0B5C4.frag.spv | Bin 72804 -> 140436 bytes .../tonemap/deadeye_0xDA9A5AA0.frag.glsl | 20 +- src/games/rdr2vk/tonemap/filmgrain.glsl | 68 ++ ...D.frag.glsl => pause_0x2B012EDD.frag.glsl} | 458 ++++---- src/games/rdr2vk/tonemap/tonemap.glsl | 211 +++- .../tonemap/tonemap_0x0C1275BE.frag.glsl | 18 +- .../tonemap/tonemap_0x4205843B.frag.glsl | 20 +- .../tonemap/tonemap_0x54F0BD84.frag.glsl | 20 +- .../tonemap/tonemap_0x9F191B0B.frag.glsl | 20 +- .../rdr2vk/tonemap/tonemaprdr2extended.glsl | 118 ++ 58 files changed, 2265 insertions(+), 1623 deletions(-) create mode 100644 src/games/rdr2vk/macleod_boynton.glsl delete mode 100644 src/games/rdr2vk/output/0xC235CFFA.comp.glsl delete mode 100644 src/games/rdr2vk/output/compiled/0xC235CFFA.comp.spv rename src/games/rdr2vk/output/{0xA383C448.frag.glsl => output_main_0xA383C448.frag.glsl} (92%) create mode 100644 src/games/rdr2vk/tonemap/filmgrain.glsl rename src/games/rdr2vk/tonemap/{0x2B012EDD.frag.glsl => pause_0x2B012EDD.frag.glsl} (94%) create mode 100644 src/games/rdr2vk/tonemap/tonemaprdr2extended.glsl diff --git a/src/games/rdr2vk/addon.cpp b/src/games/rdr2vk/addon.cpp index faae03d1ba..f57352cb79 100644 --- a/src/games/rdr2vk/addon.cpp +++ b/src/games/rdr2vk/addon.cpp @@ -14,28 +14,34 @@ #include "../../mods/shader.hpp" #include "../../utils/date.hpp" +#include "../../utils/random.hpp" #include "../../utils/settings.hpp" #include "./shared.h" namespace { -renodx::mods::shader::CustomShaders custom_shaders = { +ShaderInjectData shader_injection; + +void OnTonemapShaderDrawn(reshade::api::command_list*) { + shader_injection.is_tonemapped = 1.f; +} +renodx::mods::shader::CustomShaders custom_shaders = { // tonemap - CustomShaderEntry(0x0C1275BE), - CustomShaderEntry(0x2B012EDD), - CustomShaderEntry(0x4205843B), - CustomShaderEntry(0x54F0BD84), - CustomShaderEntry(0x6B9382CA), - CustomShaderEntry(0x809F5852), - CustomShaderEntry(0x9B304112), - CustomShaderEntry(0x9F191B0B), - CustomShaderEntry(0xA2ED1CB7), - CustomShaderEntry(0xCD6F15F2), - CustomShaderEntry(0xCF7FE0D7), - CustomShaderEntry(0xDA9A5AA0), - CustomShaderEntry(0xDD04030E), - CustomShaderEntry(0xE3E0B5C4), + {0x0C1275BE, {.crc32 = 0x0C1275BE, .code = __0x0C1275BE, .on_drawn = &OnTonemapShaderDrawn}}, + {0x2B012EDD, {.crc32 = 0x2B012EDD, .code = __0x2B012EDD, .on_drawn = &OnTonemapShaderDrawn}}, + {0x4205843B, {.crc32 = 0x4205843B, .code = __0x4205843B, .on_drawn = &OnTonemapShaderDrawn}}, + {0x54F0BD84, {.crc32 = 0x54F0BD84, .code = __0x54F0BD84, .on_drawn = &OnTonemapShaderDrawn}}, + {0x6B9382CA, {.crc32 = 0x6B9382CA, .code = __0x6B9382CA, .on_drawn = &OnTonemapShaderDrawn}}, + {0x809F5852, {.crc32 = 0x809F5852, .code = __0x809F5852, .on_drawn = &OnTonemapShaderDrawn}}, + {0x9B304112, {.crc32 = 0x9B304112, .code = __0x9B304112, .on_drawn = &OnTonemapShaderDrawn}}, + {0x9F191B0B, {.crc32 = 0x9F191B0B, .code = __0x9F191B0B, .on_drawn = &OnTonemapShaderDrawn}}, + {0xA2ED1CB7, {.crc32 = 0xA2ED1CB7, .code = __0xA2ED1CB7, .on_drawn = &OnTonemapShaderDrawn}}, + {0xCD6F15F2, {.crc32 = 0xCD6F15F2, .code = __0xCD6F15F2, .on_drawn = &OnTonemapShaderDrawn}}, + {0xCF7FE0D7, {.crc32 = 0xCF7FE0D7, .code = __0xCF7FE0D7, .on_drawn = &OnTonemapShaderDrawn}}, + {0xDA9A5AA0, {.crc32 = 0xDA9A5AA0, .code = __0xDA9A5AA0, .on_drawn = &OnTonemapShaderDrawn}}, + {0xDD04030E, {.crc32 = 0xDD04030E, .code = __0xDD04030E, .on_drawn = &OnTonemapShaderDrawn}}, + {0xE3E0B5C4, {.crc32 = 0xE3E0B5C4, .code = __0xE3E0B5C4, .on_drawn = &OnTonemapShaderDrawn}}, // output CustomShaderEntry(0x14BF23D4), @@ -47,82 +53,274 @@ renodx::mods::shader::CustomShaders custom_shaders = { CustomShaderEntry(0x8B9C89F1), CustomShaderEntry(0xA383C448), CustomShaderEntry(0xBCF843ED), - CustomShaderEntry(0xC235CFFA), CustomShaderEntry(0xFCD82342), - }; -#if USE_SHADER_TOGGLE -namespace shader_toggle { -namespace runtime { -float g_use_shaders = 1.f; // Controlled by slider -float g_current_use_shaders = 1.f; // Will be overridden on startup - void OnPresent( reshade::api::command_queue*, - reshade::api::swapchain* swapchain, + reshade::api::swapchain*, const reshade::api::rect*, const reshade::api::rect*, uint32_t, const reshade::api::rect*) { - if (g_use_shaders != g_current_use_shaders) { - reshade::log::message( - reshade::log::level::info, - (g_use_shaders != 0.f) ? "Enabling shaders (toggle)" : "Disabling shaders (toggle)"); - - auto* device = swapchain->get_device(); - if (device == nullptr) { - reshade::log::message(reshade::log::level::error, "Device is null in OnPresent"); - g_current_use_shaders = g_use_shaders; - return; - } - - if (g_use_shaders != 0.f) { - for (const auto& [hash, shader] : custom_shaders) { - renodx::utils::shader::AddRuntimeReplacement(device, hash, shader.code); - } - reshade::log::message( - reshade::log::level::info, - ("Injected " + std::to_string(custom_shaders.size()) + " shaders").c_str()); - } else { - renodx::utils::shader::RemoveRuntimeReplacements(device); - reshade::log::message(reshade::log::level::info, "Removed all shader replacements."); - } - - g_current_use_shaders = g_use_shaders; - } -} - -void RegisterEvents() { - g_current_use_shaders = -1.0f; - reshade::register_event(OnPresent); + shader_injection.is_tonemapped = 0.f; } -void UnregisterEvents() { - reshade::unregister_event(OnPresent); -} - -renodx::utils::settings::Setting* GetSetting() { - return new renodx::utils::settings::Setting{ - .key = "", - .binding = &g_use_shaders, - .value_type = renodx::utils::settings::SettingValueType::BOOLEAN, - .default_value = 1.f, - .label = "Enable Mod", - .section = "Options", - .on_change = []() { - g_current_use_shaders = -1.f; - }, - }; -} -} // namespace runtime -} // namespace shader_toggle -#endif - renodx::utils::settings::Settings settings = { -#if USE_SHADER_TOGGLE - shader_toggle::runtime::GetSetting(), -#endif + new renodx::utils::settings::Setting{ + .key = "ToneMapType", + .binding = &shader_injection.tone_map_type, + .value_type = renodx::utils::settings::SettingValueType::INTEGER, + .default_value = 2.f, + .label = "Tone Mapper", + .section = "Tone Mapping", + .tooltip = "Sets the tone mapper type", + .labels = {"Vanilla", "None", "RenoDX", "SDR"}, + }, + new renodx::utils::settings::Setting{ + .key = "ToneMapPeakNits", + .binding = &shader_injection.peak_white_nits, + .default_value = 1000.f, + .can_reset = false, + .label = "Peak Brightness", + .section = "Tone Mapping", + .tooltip = "Sets the value of peak white in nits", + .min = 48.f, + .max = 4000.f, + .is_enabled = []() { return shader_injection.tone_map_type == 2.f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ToneMapGameNits", + .binding = &shader_injection.diffuse_white_nits, + .default_value = 203.f, + .label = "Game Brightness", + .section = "Tone Mapping", + .tooltip = "Sets the value of 100% white in nits", + .min = 48.f, + .max = 500.f, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ToneMapUINits", + .binding = &shader_injection.graphics_white_nits, + .default_value = 203.f, + .label = "UI Brightness", + .section = "Tone Mapping", + .tooltip = "Sets the brightness of UI and HUD elements in nits", + .min = 48.f, + .max = 500.f, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f; }, + }, + new renodx::utils::settings::Setting{ + .key = "GammaCorrection", + .binding = &shader_injection.sdr_eotf_emulation, + .value_type = renodx::utils::settings::SettingValueType::INTEGER, + .default_value = 2.f, + .label = "SDR EOTF Emulation", + .section = "Tone Mapping", + .tooltip = "Emulates a 2.2 EOTF", + .labels = {"Off", "2.2 (Per Channel)", "2.2 (By Luminosity)"}, + }, + new renodx::utils::settings::Setting{ + .key = "ToneMapScaling", + .binding = &shader_injection.tone_map_per_channel, + .value_type = renodx::utils::settings::SettingValueType::INTEGER, + .default_value = 0.f, + .label = "Scaling", + .section = "Tone Mapping", + .tooltip = "Luminance scales colors consistently while per-channel blows out and hue shifts", + .labels = {"Luminance", "Per Channel"}, + .is_enabled = []() { return shader_injection.tone_map_type == 2.f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ToneMapHueShift", + .binding = &shader_injection.tone_map_hue_shift, + .default_value = 100.f, + .label = "Hue Shift", + .section = "Tone Mapping", + .tooltip = "Emulates hue shifting per channel tonemapping", + .max = 100.f, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f && shader_injection.tone_map_type != 3.f; }, + .parse = [](float value) { return value * 0.01f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ToneMapBlowout", + .binding = &shader_injection.tone_map_blowout, + .default_value = 100.f, + .label = "Blowout", + .section = "Tone Mapping", + .tooltip = "Emulates blowout from per channel tonemapping", + .min = 0.f, + .max = 100.f, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f && shader_injection.tone_map_type != 3.f; }, + .parse = [](float value) { return value * 0.01f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ColorGradeExposure", + .binding = &shader_injection.tone_map_exposure, + .default_value = 1.f, + .label = "Exposure", + .section = "Color Grading", + .max = 2.f, + .format = "%.2f", + .is_enabled = []() { return shader_injection.tone_map_type != 0.f && shader_injection.tone_map_type != 3.f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ColorGradeHighlights", + .binding = &shader_injection.tone_map_highlights, + .default_value = 50.f, + .label = "Highlights", + .section = "Color Grading", + .max = 100.f, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f && shader_injection.tone_map_type != 3.f; }, + .parse = [](float value) { return value * 0.02f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ColorGradeShadows", + .binding = &shader_injection.tone_map_shadows, + .default_value = 75.f, + .label = "Shadows", + .section = "Color Grading", + .max = 100.f, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f && shader_injection.tone_map_type != 3.f; }, + .parse = [](float value) { return value * 0.02f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ColorGradeContrast", + .binding = &shader_injection.tone_map_contrast, + .default_value = 50.f, + .label = "Contrast", + .section = "Color Grading", + .max = 100.f, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f && shader_injection.tone_map_type != 3.f; }, + .parse = [](float value) { return value * 0.02f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ColorGradeSaturation", + .binding = &shader_injection.tone_map_saturation, + .default_value = 50.f, + .label = "Saturation", + .section = "Color Grading", + .max = 100.f, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f && shader_injection.tone_map_type != 3.f; }, + .parse = [](float value) { return value * 0.02f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ColorGradeHighlightSaturation", + .binding = &shader_injection.tone_map_highlight_saturation, + .default_value = 50.f, + .label = "Highlight Saturation", + .section = "Color Grading", + .tooltip = "Adds or removes highlight color.", + .max = 100.f, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f && shader_injection.tone_map_type != 3.f; }, + .parse = [](float value) { return value * 0.02f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ColorGradeDechroma", + .binding = &shader_injection.tone_map_dechroma, + .default_value = 0.f, + .label = "Dechroma", + .section = "Color Grading", + .tooltip = "Controls highlight desaturation due to overexposure.", + .max = 100.f, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f && shader_injection.tone_map_type != 3.f; }, + .parse = [](float value) { return value * 0.01f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ColorGradeFlare", + .binding = &shader_injection.tone_map_flare, + .default_value = 0.f, + .label = "Flare", + .section = "Color Grading", + .tooltip = "Flare/Glare Compensation", + .max = 100.f, + .is_enabled = []() { return shader_injection.tone_map_type != 0.f && shader_injection.tone_map_type != 3.f; }, + .parse = [](float value) { return value * 0.02f; }, + }, + new renodx::utils::settings::Setting{ + .key = "ColorGradeLUTStrength", + .binding = &shader_injection.custom_lut_strength, + .default_value = 100.f, + .label = "LUT Strength", + .section = "Color Grading", + .max = 100.f, + .parse = [](float value) { return value * 0.01f; }, + }, + new renodx::utils::settings::Setting{ + .key = "FxVignette", + .binding = &shader_injection.custom_vignette, + .default_value = 100.f, + .label = "Vignette", + .section = "Effects", + .max = 100.f, + .parse = [](float value) { return value * 0.01f; }, + }, + new renodx::utils::settings::Setting{ + .key = "FxDithering", + .binding = &shader_injection.custom_dithering, + .default_value = 100.f, + .label = "Dithering", + .section = "Effects", + .parse = [](float value) { return value * 0.01f; }, + }, + new renodx::utils::settings::Setting{ + .key = "FxGrainStrength", + .binding = &shader_injection.custom_grain_strength, + .default_value = 0.f, + .label = "Film Grain", + .section = "Effects", + .max = 100.f, + .parse = [](float value) { return value * 0.02f; }, + }, + new renodx::utils::settings::Setting{ + .key = "UnclampLighting", + .binding = &shader_injection.custom_unclamp_highlights, + .value_type = renodx::utils::settings::SettingValueType::BOOLEAN, + .default_value = 1.f, + .label = "Unclamp Lighting", + .section = "Advanced", + .tooltip = "Removes clamp on brightness", + }, + new renodx::utils::settings::Setting{ + .key = "CustomLUTEncoding", + .binding = &shader_injection.custom_lut_encoding, + .value_type = renodx::utils::settings::SettingValueType::INTEGER, + .default_value = 2.f, + .label = "LUT Encoding", + .section = "Advanced", + .tooltip = "Use Vanilla HDR's broken LUT encoding, SDR's sRGB-like encoding (controlled by the SDR brightness slider), or sRGB.", + .labels = {"Vanilla HDR (Linear)", "Vanilla SDR (SDR brightness slider)", "sRGB"}, + }, + new renodx::utils::settings::Setting{ + .value_type = renodx::utils::settings::SettingValueType::BUTTON, + .label = "Reset All", + .section = "Options", + .group = "button-line-1", + .on_change = []() { + for (auto* setting : settings) { + if (setting->key.empty()) continue; + if (!setting->can_reset) continue; + renodx::utils::settings::UpdateSetting(setting->key, setting->default_value); + } + }, + }, + new renodx::utils::settings::Setting{ + .value_type = renodx::utils::settings::SettingValueType::BUTTON, + .label = "Match SDR", + .section = "Options", + .group = "button-line-1", + .on_change = []() { + renodx::utils::settings::ResetSettings(); + renodx::utils::settings::UpdateSettings({ + {"GammaCorrection", 1.f}, + {"ToneMapScaling", 1.f}, + {"ColorGradeShadows", 50.f}, + {"UnclampLighting", 0.f}, + {"CustomLUTEncoding", 1.f}, + }); + }, + }, new renodx::utils::settings::Setting{ .value_type = renodx::utils::settings::SettingValueType::BUTTON, .label = "RenoDX Discord", @@ -191,6 +389,37 @@ renodx::utils::settings::Settings settings = { }, }; +void OnPresetOff() { + renodx::utils::settings::UpdateSettings({ + {"ToneMapType", 0.f}, + {"ToneMapPeakNits", 203.f}, + {"ToneMapGameNits", 203.f}, + {"ToneMapUINits", 203.f}, + {"GammaCorrection", 0.f}, + {"ToneMapScaling", 1.f}, + {"ToneMapHueShift", 100.f}, + {"ToneMapBlowout", 100.f}, + {"ColorGradeExposure", 1.f}, + {"ColorGradeHighlights", 50.f}, + {"ColorGradeShadows", 50.f}, + {"ColorGradeContrast", 50.f}, + {"ColorGradeSaturation", 50.f}, + {"ColorGradeHighlightSaturation", 50.f}, + {"ColorGradeDechroma", 0.f}, + {"ColorGradeFlare", 0.f}, + {"ColorGradeLUTStrength", 100.f}, + {"FxVignette", 100.f}, + {"FxDithering", 100.f}, + {"FxGrainStrength", 0.f}, + {"UnclampLighting", 0.f}, + {"CustomLUTEncoding", 0.f}, + }); +} + +bool fired_on_init_swapchain = false; + +bool initialized = false; + } // namespace extern "C" __declspec(dllexport) constexpr const char* NAME = "RenoDX"; @@ -200,23 +429,29 @@ BOOL APIENTRY DllMain(HMODULE h_module, DWORD fdw_reason, LPVOID lpv_reserved) { switch (fdw_reason) { case DLL_PROCESS_ATTACH: if (!reshade::register_addon(h_module)) return FALSE; - renodx::utils::settings::use_presets = false; - renodx::mods::shader::force_pipeline_cloning = true; - renodx::utils::shader::use_replace_async = true; -#if USE_SHADER_TOGGLE - shader_toggle::runtime::RegisterEvents(); -#endif + + if (!initialized) { + renodx::mods::shader::allow_multiple_push_constants = true; + renodx::mods::shader::force_pipeline_cloning = true; + renodx::utils::shader::use_replace_async = true; + + initialized = true; + } + + renodx::utils::random::binds.push_back(&shader_injection.custom_random); // film grain + reshade::register_event(OnPresent); + break; case DLL_PROCESS_DETACH: -#if USE_SHADER_TOGGLE - shader_toggle::runtime::UnregisterEvents(); -#endif + reshade::unregister_event(OnPresent); + reshade::unregister_addon(h_module); break; } - renodx::utils::settings::Use(fdw_reason, &settings); - renodx::mods::shader::Use(fdw_reason, custom_shaders); + renodx::utils::random::Use(fdw_reason); + renodx::utils::settings::Use(fdw_reason, &settings, &OnPresetOff); + renodx::mods::shader::Use(fdw_reason, custom_shaders, &shader_injection); return TRUE; } diff --git a/src/games/rdr2vk/common.glsl b/src/games/rdr2vk/common.glsl index dd7eff85d3..96564e5b01 100644 --- a/src/games/rdr2vk/common.glsl +++ b/src/games/rdr2vk/common.glsl @@ -1,5 +1,7 @@ +#include "./macleod_boynton.glsl" #include "./shared.h" + // START INCLUDES // --- sRGB ENCODING --- @@ -86,685 +88,6 @@ vec3 BT709FromBT2020(vec3 bt2020) { return BT2020_TO_BT709_MAT * bt2020; } -// START ACES INCLUDE - -// color conversion matrices -const mat3 BT709_TO_XYZ_MAT = mat3( - vec3(0.4123907993, 0.2126390059, 0.0193308187), - vec3(0.3575843394, 0.7151686788, 0.1191947798), - vec3(0.1804807884, 0.0721923154, 0.9505321522)); - -const mat3 XYZ_TO_BT709_MAT = mat3( - vec3(3.2409699419, -0.9692436363, 0.0556300797), - vec3(-1.5373831776, 1.8759675015, -0.2039769589), - vec3(-0.4986107603, 0.0415550574, 1.0569715142)); - -const mat3 BT2020_TO_XYZ_MAT = mat3( - vec3(0.6369580483, 0.2627002120, 0.0000000000), - vec3(0.1446169036, 0.6779980715, 0.0280726930), - vec3(0.1688809752, 0.0593017165, 1.0609850577)); - -const mat3 XYZ_TO_BT2020_MAT = mat3( - vec3(1.7166511880, -0.6666843518, 0.0176398574), - vec3(-0.3556707838, 1.6164812366, -0.0427706133), - vec3(-0.2533662814, 0.0157685458, 0.9421031212)); - -const mat3 AP0_TO_XYZ_MAT = mat3( - vec3(0.9525523959, 0.3439664498, 0.0000000000), - vec3(0.0000000000, 0.7281660966, 0.0000000000), - vec3(0.0000936786, -0.0721325464, 1.0088251844)); - -const mat3 XYZ_TO_AP0_MAT = mat3( - vec3(1.0498110175, -0.4959030231, 0.0000000000), - vec3(0.0000000000, 1.3733130458, 0.0000000000), - vec3(-0.0000974845, 0.0982400361, 0.9912520182)); - -const mat3 AP1_TO_XYZ_MAT = mat3( - vec3(0.6624541811, 0.2722287168, -0.0055746495), - vec3(0.1340042065, 0.6740817658, 0.0040607335), - vec3(0.1561876870, 0.0536895174, 1.0103391003)); - -const mat3 XYZ_TO_AP1_MAT = mat3( - vec3(1.6410233797, -0.6636628587, 0.0117218943), - vec3(-0.3248032942, 1.6153315917, -0.0082844420), - vec3(-0.2364246952, 0.0167563477, 0.9883948585)); - -// With Bradford -const mat3 AP1_TO_BT709_MAT = mat3( - vec3(1.7050509927, -0.1302564175, -0.0240033568), - vec3(-0.6217921207, 1.1408047366, -0.1289689761), - vec3(-0.0832588720, -0.0105483191, 1.1529723329)); - -// With Bradford -const mat3 AP1_TO_BT2020_MAT = mat3( - vec3(1.0258247477, -0.0022343695, -0.0050133515), - vec3(-0.0200531908, 1.0045865019, -0.0252900718), - vec3(-0.0057715568, -0.0023521324, 1.0303034233)); - -const mat3 BT709_TO_AP1_MAT = mat3( - vec3(0.6130974024, 0.0701937225, 0.0206155929), - vec3(0.3395231462, 0.9163538791, 0.1095697729), - vec3(0.0473794514, 0.0134523985, 0.8698146342)); - -// With Bradford -const mat3 BT2020_TO_AP1_MAT = mat3( - vec3(0.9748949779, 0.0021795628, 0.0047972397), - vec3(0.0195991086, 0.9955354689, 0.0245320166), - vec3(0.0055059134, 0.0022849683, 0.9706707437)); - -// chromatic adaptation method: von Kries -// chromatic adaptation transform: Bradford -const mat3 D65_TO_D60_CAT = mat3( - vec3(1.01303493, 0.00769822997, -0.00284131732), - vec3(0.00610525766, 0.998163342, 0.00468515651), - vec3(-0.0149709433, -0.00503203831, 0.924506127)); - -// chromatic adaptation method: von Kries -// chromatic adaptation transform: Bradford -const mat3 D60_TO_D65_MAT = mat3( - vec3(0.987223982, -0.00759837171, 0.00307257706), - vec3(-0.00611322838, 1.00186145, -0.00509596150), - vec3(0.0159532874, 0.00533003592, 1.08168065)); - -const mat3 AP1_TO_BT709D60_MAT = XYZ_TO_BT709_MAT * AP1_TO_XYZ_MAT; -const mat3 AP1_TO_BT2020D60_MAT = XYZ_TO_BT2020_MAT * AP1_TO_XYZ_MAT; -const mat3 AP1_TO_AP1D65_MAT = XYZ_TO_AP1_MAT * (D60_TO_D65_MAT * AP1_TO_XYZ_MAT); - -const mat3 BT709_TO_AP0_MAT = XYZ_TO_AP0_MAT * (D65_TO_D60_CAT * BT709_TO_XYZ_MAT); - -const mat3 AP0_TO_AP1_MAT = XYZ_TO_AP1_MAT * AP0_TO_XYZ_MAT; -const mat3 AP1_TO_AP0_MAT = XYZ_TO_AP0_MAT * AP1_TO_XYZ_MAT; - -const mat3 RRT_SAT_MAT = mat3( - vec3(0.9708890, 0.0108892, 0.0108892), - vec3(0.0269633, 0.9869630, 0.0269633), - vec3(0.00214758, 0.00214758, 0.96214800)); - -const mat3 ODT_SAT_MAT = mat3( - vec3(0.949056, 0.019056, 0.019056), - vec3(0.0471857, 0.9771860, 0.0471857), - vec3(0.00375827, 0.00375827, 0.93375800)); - -const mat3 M = mat3( - vec3(0.5, -1.0, 0.5), - vec3(-1.0, 1.0, 0.5), - vec3(0.5, 0.0, 0.0)); - -// Define log10 function for single float -float log10(float x) { - return log(x) / log(10.0); -} - -// Define log10 function for vec2 -vec2 log10(vec2 v) { - return log(v) / log(10.0); -} - -float Rgb2Yc(vec3 rgb) { - const float yc_radius_weight = 1.75; - // Converts RGB to a luminance proxy, here called YC - // YC is ~ Y + K * Chroma - // Constant YC is a cone-shaped surface in RGB space, with the tip on the - // neutral axis, towards white. - // YC is normalized: RGB 1 1 1 maps to YC = 1 - // - // ycRadiusWeight defaults to 1.75, although can be overridden in function - // call to rgb_2_yc - // ycRadiusWeight = 1 -> YC for pure cyan, magenta, yellow == YC for neutral - // of same value - // ycRadiusWeight = 2 -> YC for pure red, green, blue == YC for neutral of - // same value. - - float r = rgb[0]; - float g = rgb[1]; - float b = rgb[2]; - - float chroma = sqrt(b * (b - g) + g * (g - r) + r * (r - b)); - - return (b + g + r + yc_radius_weight * chroma) / 3.0; -} - -float Rgb2Saturation(vec3 rgb) { - float minrgb = min(min(rgb.r, rgb.g), rgb.b); - float maxrgb = max(max(rgb.r, rgb.g), rgb.b); - return (max(maxrgb, 1e-10) - max(minrgb, 1e-10)) / max(maxrgb, 1e-2); -} - -// Sigmoid function in the range 0 to 1 spanning -2 to +2. -float SigmoidShaper(float x) { - float t = max(1.0 - abs(0.5 * x), 0.0); - float y = 1.0 + sign(x) * (1.0 - t * t); - return 0.5 * y; -} - -float GlowFwd(float yc_in, float glow_gain_in, float glow_mid) { - float glow_gain_out; - - if (yc_in <= 2.0 / 3.0 * glow_mid) { - glow_gain_out = glow_gain_in; - } else if (yc_in >= 2.0 * glow_mid) { - glow_gain_out = 0.0; - } else { - glow_gain_out = glow_gain_in * (glow_mid / yc_in - 0.5); - } - - return glow_gain_out; -} - -// Transformations from RGB to other color representations -float Rgb2Hue(vec3 rgb) { - const float aces_pi = 3.14159265359; - // Returns a geometric hue angle in degrees (0-360) based on RGB values. - // For neutral colors, hue is undefined and the function will return a quiet NaN value. - float hue; - if (rgb.r == rgb.g && rgb.g == rgb.b) { - hue = 0.0; // RGB triplets where RGB are equal have an undefined hue - } else { - hue = (180.0 / aces_pi) * atan(sqrt(3.0) * (rgb.g - rgb.b), 2.0 * rgb.r - rgb.g - rgb.b); - } - - if (hue < 0.0) { - hue = hue + 360.0; - } - - return clamp(hue, 0.0, 360.0); -} - -float CenterHue(float hue, float center_h) { - float hue_centered = hue - center_h; - if (hue_centered < -180.0) { - hue_centered += 360.0; - } else if (hue_centered > 180.0) { - hue_centered -= 360.0; - } - return hue_centered; -} - -vec3 YToLinCV(vec3 y, float y_max, float y_min) { - return (y - y_min) / (y_max - y_min); -} - -vec4 YToLinCV(vec4 y, float y_max, float y_min) { - return (y - y_min) / (y_max - y_min); -} - -// Transformations between CIE XYZ tristimulus values and CIE x,y -// chromaticity coordinates -vec3 XYZToXyY(vec3 xyz) { - vec3 xy_y; - float divisor = (xyz[0] + xyz[1] + xyz[2]); - if (divisor == 0.0) - divisor = 1e-10; - xy_y[0] = xyz[0] / divisor; - xy_y[1] = xyz[1] / divisor; - xy_y[2] = xyz[1]; - - return xy_y; -} - -vec3 XyYToXYZ(vec3 xy_y) { - vec3 xyz; - xyz[0] = xy_y[0] * xy_y[2] / max(xy_y[1], 1e-10); - xyz[1] = xy_y[2]; - xyz[2] = (1.0 - xy_y[0] - xy_y[1]) * xy_y[2] / max(xy_y[1], 1e-10); - - return xyz; -} - -const float DIM_SURROUND_GAMMA = 0.9811; - -vec3 DarkToDim(vec3 xyz, float dim_surround_gamma) { - vec3 xy_y = XYZToXyY(xyz); - xy_y.z = clamp(xy_y.z, 0.0, 65504.0); - xy_y.z = pow(xy_y.z, DIM_SURROUND_GAMMA); - return XyYToXYZ(xy_y); -} - -const float MIN_STOP_SDR = -6.5; -const float MAX_STOP_SDR = 6.5; - -const float MIN_STOP_RRT = -15.0; -const float MAX_STOP_RRT = 18.0; - -const float MIN_LUM_SDR = 0.02; -const float MAX_LUM_SDR = 48.0; - -const float MIN_LUM_RRT = 0.0001; -const float MAX_LUM_RRT = 10000.0; - -const mat2 MIN_LUM_TABLE = mat2( - -4.0000000, -1.6989700, /* log10(0.0001), log10(0.02) */ - MIN_STOP_RRT, MIN_STOP_SDR); - -const mat2 MAX_LUM_TABLE = mat2( - 1.6812413, 4.0000000, /* log10(48.0), log10(10000) */ - MAX_STOP_SDR, MAX_STOP_RRT); - -float Interpolate1D(mat2 table, float p) { - float x0 = table[0][0]; - float x1 = table[0][1]; - float y0 = table[1][0]; - float y1 = table[1][1]; - - if (p < x0) return y0; - if (p >= x1) return y1; - - float s = (p - x0) / (x1 - x0); // 0-to-1 mix factor - return mix(y0, y1, s); -} - -vec3 LinCv2Y(vec3 lin_cv, float y_max, float y_min) { - return lin_cv * (y_max - y_min) + y_min; -} - -float LookUpAcesMin(float min_lum_log10) { - return 0.18 * exp2(Interpolate1D(MIN_LUM_TABLE, min_lum_log10)); -} - -float LookUpAcesMax(float max_lum_log10) { - return 0.18 * exp2(Interpolate1D(MAX_LUM_TABLE, max_lum_log10)); -} - -float SSTS( - float x, - vec3 y_min, vec3 y_mid, vec3 y_max, - vec3 coefs_low_a, vec3 coefs_low_b, - vec3 coefs_high_a, vec3 coefs_high_b) { - const int N_KNOTS_LOW = 4; - const int N_KNOTS_HIGH = 4; - - float coefs_low[6]; - - coefs_low[0] = coefs_low_a.x; - coefs_low[1] = coefs_low_a.y; - coefs_low[2] = coefs_low_a.z; - coefs_low[3] = coefs_low_b.x; - coefs_low[4] = coefs_low_b.y; - coefs_low[5] = coefs_low_b.z; - float coefs_high[6]; - coefs_high[0] = coefs_high_a.x; - coefs_high[1] = coefs_high_a.y; - coefs_high[2] = coefs_high_a.z; - coefs_high[3] = coefs_high_b.x; - coefs_high[4] = coefs_high_b.y; - coefs_high[5] = coefs_high_b.z; - - // Check for negatives or zero before taking the log. If negative or zero, - // set to HALF_MIN. - float log_x = log10(max(x, 1.17549435082228750797e-38)); // equivalent to asfloat(0x00800000) - - float log_y; - - if (log_x > y_max.x) { - // Above max breakpoint (overshoot) - // If MAX_PT slope is 0, this is just a straight line and always returns - // maxLum - // y = mx+b - // log_y = computeGraphY(C.Max.z, log_x, (C.Max.y) - (C.Max.z * (C.Max.x))); - log_y = y_max.y; - } else if (log_x >= y_mid.x) { - // Part of Midtones area (Must have slope) - float knot_coord = float(N_KNOTS_HIGH - 1) * (log_x - y_mid.x) / (y_max.x - y_mid.x); - int j = int(knot_coord); - float t = knot_coord - float(j); - - vec3 cf = vec3(coefs_high[j], coefs_high[j + 1], coefs_high[j + 2]); - - vec3 monomials = vec3(t * t, t, 1.0); - log_y = dot(monomials, M * cf); - } else if (log_x > y_min.x) { - float knot_coord = float(N_KNOTS_LOW - 1) * (log_x - y_min.x) / (y_mid.x - y_min.x); - int j = int(knot_coord); - float t = knot_coord - float(j); - - vec3 cf = vec3(coefs_low[j], coefs_low[j + 1], coefs_low[j + 2]); - - vec3 monomials = vec3(t * t, t, 1.0); - log_y = dot(monomials, M * cf); - } else { //(log_x <= (C.Min.x)) - // Below min breakpoint (undershoot) - // log_y = computeGraphY(C.Min.z, log_x, ((C.Min.y) - C.Min.z * (C.Min.x))); - log_y = y_min.y; - } - - return pow(10.0, log_y); -} - -const float LIM_CYAN = 1.147; -const float LIM_MAGENTA = 1.264; -const float LIM_YELLOW = 1.312; -const float THR_CYAN = 0.815; -const float THR_MAGENTA = 0.803; -const float THR_YELLOW = 0.880; -const float PWR = 1.2; - -float GamutCompressChannel(float dist, float lim, float thr, float pwr) { - float compr_dist; - float scl; - float nd; - float p; - - if (dist < thr) { - compr_dist = dist; // No compression below threshold - } else { - // Calculate scale factor for y = 1 intersect - scl = (lim - thr) / pow(pow((1.0 - thr) / (lim - thr), -pwr) - 1.0, 1.0 / pwr); - - // Normalize distance outside threshold by scale factor - nd = (dist - thr) / scl; - p = pow(nd, pwr); - - compr_dist = thr + scl * nd / (pow(1.0 + p, 1.0 / pwr)); // Compress - } - - return compr_dist; -} - -vec3 GamutCompress(vec3 lin_ap1) { - // Achromatic axis - float ach = max(lin_ap1.r, max(lin_ap1.g, lin_ap1.b)); - float abs_ach = abs(ach); - // Distance from the achromatic axis for each color component aka inverse RGB ratios - vec3 dist = ach != 0.0 ? (ach - lin_ap1) / abs_ach : vec3(0.0); - - // Compress distance with parameterized shaper function - vec3 compr_dist = vec3( - GamutCompressChannel(dist.r, LIM_CYAN, THR_CYAN, PWR), - GamutCompressChannel(dist.g, LIM_MAGENTA, THR_MAGENTA, PWR), - GamutCompressChannel(dist.b, LIM_YELLOW, THR_YELLOW, PWR)); - - // Recalculate RGB from compressed distance and achromatic - vec3 compr_lin_ap1 = ach - compr_dist * abs_ach; - - return compr_lin_ap1; -} - -vec3 RRT(vec3 aces) { - const vec3 AP1_RGB2Y = vec3(0.2722287168, 0.6740817658, 0.0536895174); - - // --- Glow module --- // - // "Glow" module constants - const float RRT_GLOW_GAIN = 0.05; - const float RRT_GLOW_MID = 0.08; - float saturation = Rgb2Saturation(aces); - float yc_in = Rgb2Yc(aces); - const float s = SigmoidShaper((saturation - 0.4) / 0.2); - float added_glow = 1.0 + GlowFwd(yc_in, RRT_GLOW_GAIN * s, RRT_GLOW_MID); - aces *= added_glow; - - // --- Red modifier --- // - // Red modifier constants - const float RRT_RED_SCALE = 0.82; - const float RRT_RED_PIVOT = 0.03; - const float RRT_RED_HUE = 0.0; - const float RRT_RED_WIDTH = 135.0; - float hue = Rgb2Hue(aces); - const float centered_hue = CenterHue(hue, RRT_RED_HUE); - float hue_weight; - { - // hueWeight = cubic_basis_shaper(centeredHue, RRT_RED_WIDTH); - hue_weight = smoothstep(0.0, 1.0, 1.0 - abs(2.0 * centered_hue / RRT_RED_WIDTH)); - hue_weight *= hue_weight; - } - - aces.r += hue_weight * saturation * (RRT_RED_PIVOT - aces.r) * (1.0 - RRT_RED_SCALE); - - // --- ACES to RGB rendering space --- // - aces = clamp(aces, 0.0, 65535.0); - vec3 rgb_pre = AP0_TO_AP1_MAT * aces; - rgb_pre = clamp(rgb_pre, 0.0, 65504.0); - - // --- Global desaturation --- // - // rgb_pre = RRT_SAT_MAT * rgb_pre; - const float RRT_SAT_FACTOR = 0.96; - rgb_pre = mix(vec3(dot(rgb_pre, AP1_RGB2Y)), rgb_pre, RRT_SAT_FACTOR); - - return rgb_pre; -} - -vec3 ODTToneMap(vec3 rgb_pre, float min_y, float max_y) { - // Aces-dev has more expensive version - // AcesParams PARAMS = init_aces_params(minY, maxY); - - const mat2 BENDS_LOW_TABLE = mat2( - MIN_STOP_RRT, MIN_STOP_SDR, - 0.18, 0.35); - - const mat2 BENDS_HIGH_TABLE = mat2( - MAX_STOP_SDR, MAX_STOP_RRT, - 0.89, 0.90); - - float min_lum_log10 = log10(min_y); - float max_lum_log10 = log10(max_y); - float aces_min = LookUpAcesMin(min_lum_log10); - float aces_max = LookUpAcesMax(max_lum_log10); - - // float3 MIN_PT = vec3(lookup_ACESmin(minLum), minLum, 0.0); - const vec3 MID_PT = vec3(0.18, 4.8, 1.55); - // float3 MAX_PT = vec3(lookup_ACESmax(maxLum), maxLum, 0.0); - - vec3 coefs_low_a; - vec3 coefs_low_b; - vec3 coefs_high_a; - vec3 coefs_high_b; - - vec2 log_min = vec2(log10(aces_min), min_lum_log10); - vec2 LOG_MID = vec2(log10(MID_PT.xy)); - vec2 log_max = vec2(log10(aces_max), max_lum_log10); - - float knot_inc_low = (LOG_MID.x - log_min.x) / 3.0; - - // Determine two lowest coefficients (straddling minPt) - coefs_low_a.x = log_min.y; - coefs_low_a.y = coefs_low_a.x; - - // Determine two highest coefficients (straddling midPt) - float min_coef = (LOG_MID.y - MID_PT.z * LOG_MID.x); - coefs_low_b.x = (MID_PT.z * (LOG_MID.x - 0.5 * knot_inc_low)) + (LOG_MID.y - MID_PT.z * LOG_MID.x); - coefs_low_b.y = (MID_PT.z * (LOG_MID.x + 0.5 * knot_inc_low)) + (LOG_MID.y - MID_PT.z * LOG_MID.x); - coefs_low_b.z = coefs_low_b.y; - - // Middle coefficient (which defines the "sharpness of the bend") is linearly interpolated - float pct_low = Interpolate1D(BENDS_LOW_TABLE, log2(aces_min / 0.18)); - coefs_low_a.z = log_min.y + pct_low * (LOG_MID.y - log_min.y); - - float knot_inc_high = (log_max.x - LOG_MID.x) / 3.0; - - // Determine two lowest coefficients (straddling midPt) - // float minCoef = ( logMid.y - MID_PT.z * logMid.x); - coefs_high_a.x = (MID_PT.z * (LOG_MID.x - 0.5 * knot_inc_high)) + min_coef; - coefs_high_a.y = (MID_PT.z * (LOG_MID.x + 0.5 * knot_inc_high)) + min_coef; - - // Determine two highest coefficients (straddling maxPt) - // coefs_high[3] = (MAX_PT.z * (log_max.x-0.5*knotIncHigh)) + ( log_max.y - MAX_PT.z * log_max.x); - // coefs_high[4] = (MAX_PT.z * (log_max.x+0.5*knotIncHigh)) + ( log_max.y - MAX_PT.z * log_max.x); - // NOTE: if slope=0, then the above becomes just - coefs_high_b.x = log_max.y; - coefs_high_b.y = coefs_high_b.x; - coefs_high_b.z = coefs_high_b.y; - // leaving it as a variable for now in case we decide we need non-zero slope extensions - - // Middle coefficient (which defines the "sharpness of the bend") is linearly interpolated - - float pct_high = Interpolate1D(BENDS_HIGH_TABLE, log2(aces_max / 0.18)); - coefs_high_a.z = LOG_MID.y + pct_high * (log_max.y - LOG_MID.y); - - vec3 rgb_post = vec3( - SSTS(rgb_pre.x, vec3(log_min.x, log_min.y, 0.0), vec3(LOG_MID.x, LOG_MID.y, MID_PT.z), vec3(log_max.x, log_max.y, 0.0), coefs_low_a, coefs_low_b, coefs_high_a, coefs_high_b), - SSTS(rgb_pre.y, vec3(log_min.x, log_min.y, 0.0), vec3(LOG_MID.x, LOG_MID.y, MID_PT.z), vec3(log_max.x, log_max.y, 0.0), coefs_low_a, coefs_low_b, coefs_high_a, coefs_high_b), - SSTS(rgb_pre.z, vec3(log_min.x, log_min.y, 0.0), vec3(LOG_MID.x, LOG_MID.y, MID_PT.z), vec3(log_max.x, log_max.y, 0.0), coefs_low_a, coefs_low_b, coefs_high_a, coefs_high_b)); - - // Nits to Linear - vec3 linear_cv = YToLinCV(rgb_post, max_y, min_y); - return clamp(rgb_post, 0.0, 65535.0); -} - -vec4 ODTToneMap(vec4 rgb_pre, float min_y, float max_y) { - // Aces-dev has more expensive version - // AcesParams PARAMS = init_aces_params(minY, maxY); - - const mat2 BENDS_LOW_TABLE = mat2( - MIN_STOP_RRT, MIN_STOP_SDR, - 0.18, 0.35); - - const mat2 BENDS_HIGH_TABLE = mat2( - MAX_STOP_SDR, MAX_STOP_RRT, - 0.89, 0.90); - - float min_lum_log10 = log10(min_y); - float max_lum_log10 = log10(max_y); - float aces_min = LookUpAcesMin(min_lum_log10); - float aces_max = LookUpAcesMax(max_lum_log10); - - // float3 MIN_PT = vec3(lookup_ACESmin(minLum), minLum, 0.0); - const vec3 MID_PT = vec3(0.18, 4.8, 1.55); - // float3 MAX_PT = vec3(lookup_ACESmax(maxLum), maxLum, 0.0); - - vec3 coefs_low_a; - vec3 coefs_low_b; - vec3 coefs_high_a; - vec3 coefs_high_b; - - vec2 log_min = vec2(log10(aces_min), min_lum_log10); - vec2 LOG_MID = vec2(log10(MID_PT.xy)); - vec2 log_max = vec2(log10(aces_max), max_lum_log10); - - float knot_inc_low = (LOG_MID.x - log_min.x) / 3.0; - - // Determine two lowest coefficients (straddling minPt) - coefs_low_a.x = log_min.y; - coefs_low_a.y = coefs_low_a.x; - - // Determine two highest coefficients (straddling midPt) - float min_coef = (LOG_MID.y - MID_PT.z * LOG_MID.x); - coefs_low_b.x = (MID_PT.z * (LOG_MID.x - 0.5 * knot_inc_low)) + (LOG_MID.y - MID_PT.z * LOG_MID.x); - coefs_low_b.y = (MID_PT.z * (LOG_MID.x + 0.5 * knot_inc_low)) + (LOG_MID.y - MID_PT.z * LOG_MID.x); - coefs_low_b.z = coefs_low_b.y; - - // Middle coefficient (which defines the "sharpness of the bend") is linearly interpolated - float pct_low = Interpolate1D(BENDS_LOW_TABLE, log2(aces_min / 0.18)); - coefs_low_a.z = log_min.y + pct_low * (LOG_MID.y - log_min.y); - - float knot_inc_high = (log_max.x - LOG_MID.x) / 3.0; - - // Determine two lowest coefficients (straddling midPt) - // float minCoef = ( logMid.y - MID_PT.z * logMid.x); - coefs_high_a.x = (MID_PT.z * (LOG_MID.x - 0.5 * knot_inc_high)) + min_coef; - coefs_high_a.y = (MID_PT.z * (LOG_MID.x + 0.5 * knot_inc_high)) + min_coef; - - // Determine two highest coefficients (straddling maxPt) - // coefs_high[3] = (MAX_PT.z * (log_max.x-0.5*knotIncHigh)) + ( log_max.y - MAX_PT.z * log_max.x); - // coefs_high[4] = (MAX_PT.z * (log_max.x+0.5*knotIncHigh)) + ( log_max.y - MAX_PT.z * log_max.x); - // NOTE: if slope=0, then the above becomes just - coefs_high_b.x = log_max.y; - coefs_high_b.y = coefs_high_b.x; - coefs_high_b.z = coefs_high_b.y; - // leaving it as a variable for now in case we decide we need non-zero slope extensions - - // Middle coefficient (which defines the "sharpness of the bend") is linearly interpolated - - float pct_high = Interpolate1D(BENDS_HIGH_TABLE, log2(aces_max / 0.18)); - coefs_high_a.z = LOG_MID.y + pct_high * (log_max.y - LOG_MID.y); - - vec4 rgb_post = vec4( - SSTS(rgb_pre.x, vec3(log_min.x, log_min.y, 0.0), vec3(LOG_MID.x, LOG_MID.y, MID_PT.z), vec3(log_max.x, log_max.y, 0.0), coefs_low_a, coefs_low_b, coefs_high_a, coefs_high_b), - SSTS(rgb_pre.y, vec3(log_min.x, log_min.y, 0.0), vec3(LOG_MID.x, LOG_MID.y, MID_PT.z), vec3(log_max.x, log_max.y, 0.0), coefs_low_a, coefs_low_b, coefs_high_a, coefs_high_b), - SSTS(rgb_pre.z, vec3(log_min.x, log_min.y, 0.0), vec3(LOG_MID.x, LOG_MID.y, MID_PT.z), vec3(log_max.x, log_max.y, 0.0), coefs_low_a, coefs_low_b, coefs_high_a, coefs_high_b), - SSTS(rgb_pre.w, vec3(log_min.x, log_min.y, 0.0), vec3(LOG_MID.x, LOG_MID.y, MID_PT.z), vec3(log_max.x, log_max.y, 0.0), coefs_low_a, coefs_low_b, coefs_high_a, coefs_high_b)); - - // Nits to Linear - vec4 linear_cv = YToLinCV(rgb_post, max_y, min_y); - return clamp(rgb_post, 0.0, 65535.0); -} - -vec3 ODT(vec3 rgb_pre, float min_y, float max_y, mat3 odt_matrix) { - vec3 tonescaled = ODTToneMap(rgb_pre, min_y, max_y); - vec3 output_color = odt_matrix * tonescaled; - return output_color; -} - -vec4 ODT(vec4 rgb_pre, float min_y, float max_y, mat3 odt_matrix) { - vec4 tonescaled = ODTToneMap(rgb_pre, min_y, max_y); - vec4 output_color = vec4(odt_matrix * tonescaled.rgb, tonescaled.a); - return output_color; -} - -vec3 RRTAndODT(vec3 color, float min_y, float max_y, mat3 odt_matrix) { - color = BT709_TO_AP0_MAT * color; - color = RRT(color); - color = ODT(color, min_y, max_y, odt_matrix); - return color; -} - -vec3 RGCAndRRTAndODT(vec3 color, float min_y, float max_y, mat3 odt_matrix) { - color = BT709_TO_AP1_MAT * color; // BT709 to AP1 - color = GamutCompress(color); // Compresses to AP1 - color = AP1_TO_AP0_MAT * color; // Convert to AP0 - color = RRT(color); // RRT AP0 => AP1 - color = ODT(color, min_y, max_y, odt_matrix); // ODT AP1 => Matrix - return color; -} - -// END ACES INCLUDE - -const mat3 BT709_TO_OKLAB_LMS = mat3( - 0.4122214708, 0.2119034982, 0.0883024619, - 0.5363325363, 0.6806995451, 0.2817188376, - 0.0514459929, 0.1073969566, 0.6299787005); - -const mat3 OKLAB_LMS_TO_OKLAB = mat3( - 0.2104542553, 1.9779984951, 0.0259040371, - 0.7936177850, -2.4285922050, 0.7827717662, - -0.0040720468, 0.4505937099, -0.8086757660); - -const mat3 OKLAB_TO_OKLAB_LMS = mat3( - 1.0000000000, 1.0000000000, 1.0000000000, - 0.3963377774, -0.1055613458, -0.0894841775, - 0.2158037573, -0.0638541728, -1.2914855480); - -const mat3 OKLAB_LMS_TO_BT709 = mat3( - 4.0767416621, -1.2684380046, -0.0041960863, - -3.3077115913, 2.6097574011, -0.7034186147, - 0.2309699292, -0.3413193965, 1.7076147010); - -vec3 okLabFromBT709(vec3 bt709) { - vec3 lms = BT709_TO_OKLAB_LMS * bt709; - lms = sign(lms) * pow(abs(lms), vec3(1.0 / 3.0)); // cube-root with sign - return OKLAB_LMS_TO_OKLAB * lms; -} - -vec3 bt709FromOKLab(vec3 okLab) { - vec3 lms = OKLAB_TO_OKLAB_LMS * okLab; - lms *= lms * lms; // cube - return OKLAB_LMS_TO_BT709 * lms; -} - -vec3 okLChFromOKLab(vec3 okLab) { - float L = okLab.x; - float a = okLab.y; - float b = okLab.z; - return vec3(L, - length(okLab.yz), // C - atan(b, a)); // h (radians) -} - -vec3 okLabFromOKLCh(vec3 okLCh) { - float L = okLCh.x; - float C = okLCh.y; - float h = okLCh.z; - return vec3(L, - C * cos(h), - C * sin(h)); -} - -vec3 okLChFromBT709(vec3 bt709) { - return okLChFromOKLab(okLabFromBT709(bt709)); -} - -vec3 bt709FromOKLCh(vec3 okLCh) { - return bt709FromOKLab(okLabFromOKLCh(okLCh)); -} - vec3 EncodePQ(vec3 color, float scaling) { float M1 = 2610.f / 16384.f; // 0.1593017578125f; float M2 = 128.f * (2523.f / 4096.f); // 78.84375f; @@ -795,65 +118,6 @@ vec3 DecodePQ(vec3 color) { return DecodePQ(color, 10000.f); } -// const mat3 XYZ_TO_LMS_MAT = -// mat3(0.3592832590121217f, 0.6976051147779502f, -0.0358915932320290f, -// -0.1920808463704993f, 1.1004767970374321f, 0.0753748658519118f, -// 0.0070797844607479f, 0.0748396662186362f, 0.8433265453898765f); - -// const mat3 LMS_TO_XYZ_MAT = -// mat3(2.07018005669561320, -1.32645687610302100, 0.206616006847855170, -// 0.36498825003265756, 0.68046736285223520, -0.045421753075853236, -// -0.04959554223893212, -0.04942116118675749, 1.187995941732803400); -const mat3 XYZ_TO_LMS_MAT = mat3( - 0.3592832590121217, -0.1920808463704993, 0.0070797844607479, - 0.6976051147779502, 1.1004767970374321, 0.0748396662186362, - -0.0358915932320290, 0.0753748658519118, 0.8433265453898765); - -const mat3 LMS_TO_XYZ_MAT = mat3( - 2.0701800566956132, 0.36498825003265756, -0.04959554223893212, - -1.3264568761030210, 0.68046736285223520, -0.04942116118675749, - 0.20661600684785517, -0.045421753075853236, 1.1879959417328034); - -vec3 IctcpFromBT709(vec3 bt709_color) { - vec3 xyz_color = BT709_TO_XYZ_MAT * bt709_color; - vec3 lms_color = XYZ_TO_LMS_MAT * xyz_color; - - // mat3 mat = mat3( - // 0.5000, 0.5000, 0.0000, - // 1.6137, -3.3234, 1.7097, - // 4.3780, -4.2455, -0.1325); - const mat3 ICTCP_LMS_TO_ICTCP_MAT = mat3( - 0.5000, 1.6137, 4.3780, - 0.5000, -3.3234, -4.2455, - 0.0000, 1.7097, -0.1325); - - return ICTCP_LMS_TO_ICTCP_MAT * EncodePQ(lms_color, 100.0f); -} - -vec3 BT709FromICtCp(vec3 col) { - // mat3 mat = mat3(1.0, 0.00860514569398152, 0.11103560447547328, 1.0, - // -0.00860514569398152, -0.11103560447547328, 1.0, - // 0.56004885956263900, -0.32063747023212210); - const mat3 ICTCP_TO_LMS_MAT = mat3( - 1.0, 1.0, 1.0, - 0.008605146, -0.008605146, 0.56004886, - 0.11103560, -0.11103560, -0.32063747); - col = ICTCP_TO_LMS_MAT * col; - - // 1.0f = 100 nits, 100.0f = 10k nits - col = DecodePQ(col, 100.f); - col = LMS_TO_XYZ_MAT * col; - return XYZ_TO_BT709_MAT * col; -} - -const vec3 BT709_LUMA = vec3(0.2126390059, - 0.7151686788, - 0.0721923154); - -float luminanceBT709(vec3 c) { - return dot(c, BT709_LUMA); -} - // Safe divide (float & vec2 versions) float DivideSafe(float a, float b, float fallback) { return (b == 0.0) ? fallback : a / b; @@ -868,271 +132,4 @@ vec2 DivideSafe(vec2 a, vec2 b) { return DivideSafe(a, b, vec2(3.4028235e38)); } -vec3 ApplyPerChannelCorrection( - vec3 untonemapped, - vec3 per_channel_color, - float blowout_restoration, - float hue_correction_strength, - float chrominance_correction_strength, - float hue_shift_strength) { - const float tonemapped_luminance = luminanceBT709(abs(per_channel_color)); - - const float AUTO_CORRECT_BLACK = 0.02; - // Fix near black - const float untonemapped_luminance = luminanceBT709(abs(untonemapped)); - float ratio = tonemapped_luminance / untonemapped_luminance; - float auto_correct_ratio = mix(ratio, 1.0, - clamp(untonemapped_luminance / AUTO_CORRECT_BLACK, 0.0, 1.0)); - untonemapped *= auto_correct_ratio; - - const vec3 tonemapped_perceptual = IctcpFromBT709(per_channel_color); - const vec3 untonemapped_perceptual = IctcpFromBT709(untonemapped); - - vec2 untonemapped_chromas = untonemapped_perceptual.yz; - vec2 tonemapped_chromas = tonemapped_perceptual.yz; - - float untonemapped_chrominance = length(untonemapped_perceptual.yz); // eg: 0.80 - float tonemapped_chrominance = length(tonemapped_perceptual.yz); // eg: 0.20 - - // clamp saturation loss - float chrominance_ratio = min(DivideSafe(tonemapped_chrominance, - untonemapped_chrominance, 1.0), - 1.0); - chrominance_ratio = max(chrominance_ratio, blowout_restoration); - - // Untonemapped hue, tonemapped chrominance (with limit) - vec2 reduced_untonemapped_chromas = untonemapped_chromas * chrominance_ratio; - - // pick chroma based on per-channel luminance (supports not oversaturating crushed areas) - const vec2 reduced_hue_shifted = mix( - tonemapped_chromas, - reduced_untonemapped_chromas, - clamp(tonemapped_luminance / 0.36, 0.0, 1.0)); - - // Tonemapped hue, restored chrominance (with limit) - const vec2 blowout_restored_chromas = tonemapped_chromas * DivideSafe(length(reduced_hue_shifted), length(tonemapped_chromas), 1.0); - - const vec2 hue_shifted_chromas = mix(reduced_hue_shifted, - blowout_restored_chromas, - hue_shift_strength); - - // Pick untonemapped hues for shadows/midtones - const vec2 hue_correct_chromas = untonemapped_chromas * DivideSafe(length(hue_shifted_chromas), length(untonemapped_chromas), 1.0); - - const vec2 selectable_hue_correct_range = mix( - hue_correct_chromas, - hue_shifted_chromas, - clamp(tonemapped_luminance / 0.36, 0.0, 1.0)); - - const vec2 hue_corrected_chromas = mix(hue_shifted_chromas, - selectable_hue_correct_range, - hue_correction_strength); - - const vec2 chroma_correct_chromas = hue_corrected_chromas * DivideSafe(length(untonemapped_chromas), length(hue_corrected_chromas), 1.0); - - const vec2 selectable_chroma_correct_range = mix( - chroma_correct_chromas, - hue_corrected_chromas, - clamp(tonemapped_luminance / 0.36, 0.0, 1.0)); - - const vec2 chroma_corrected_chromas = mix( - hue_correct_chromas, - selectable_chroma_correct_range, - chrominance_correction_strength); - - vec2 final_chromas = chroma_corrected_chromas; - - const vec3 final_color = BT709FromICtCp(vec3( - tonemapped_perceptual.x, - final_chromas)); - - return final_color; -} - -vec3 CorrectHue(vec3 incorrect_color, vec3 correct_color, float strength) { - if (strength == 0.0) return incorrect_color; - - vec3 correct_lab = okLabFromBT709(correct_color); - vec3 incorrect_lab = okLabFromBT709(incorrect_color); - - float chrominance_pre_adjust = length(incorrect_lab.yz); - - incorrect_lab.yz = mix(incorrect_lab.yz, correct_lab.yz, strength); - - float chrominance_post_adjust = length(incorrect_lab.yz); - - incorrect_lab.yz *= DivideSafe(chrominance_pre_adjust, - chrominance_post_adjust, - 1.0); - - vec3 color = bt709FromOKLab(incorrect_lab); - color = AP1_TO_BT709_MAT * // convert to ap1, clamp negatives, convert back to bt709 - max(BT709_TO_AP1_MAT * color, vec3(0.0)); - - return color; -} - -vec3 CorrectHueAP1(vec3 incorrect_color_ap1, vec3 correct_color_ap1, float strength) { - if (strength == 0.0) return incorrect_color_ap1; - - // Convert both AP1 inputs to BT.709 for OkLab conversion - vec3 incorrect_color = AP1_TO_BT709_MAT * incorrect_color_ap1; - vec3 correct_color = AP1_TO_BT709_MAT * correct_color_ap1; - - vec3 correct_lab = okLabFromBT709(correct_color); - vec3 incorrect_lab = okLabFromBT709(incorrect_color); - - float chrominance_pre_adjust = length(incorrect_lab.yz); - - incorrect_lab.yz = mix(incorrect_lab.yz, correct_lab.yz, strength); - - float chrominance_post_adjust = length(incorrect_lab.yz); - - incorrect_lab.yz *= DivideSafe(chrominance_pre_adjust, - chrominance_post_adjust, - 1.0); - - vec3 color = bt709FromOKLab(incorrect_lab); - color = max(BT709_TO_AP1_MAT * color, vec3(0.0)); - - return color; -} - -vec3 SaturationAP1(vec3 ap1, float saturation) { - vec3 bt709 = AP1_TO_BT709_MAT * ap1; - - vec3 perceptual = okLabFromBT709(bt709); - perceptual.yz *= saturation; - - bt709 = bt709FromOKLab(perceptual); - return max(vec3(0.0), BT709_TO_AP1_MAT * bt709); -} - -vec3 SaturationBlowoutAP1(vec3 ap1, float y, float saturation, float dechroma) { - vec3 bt709 = AP1_TO_BT709_MAT * ap1; - - vec3 perceptual = okLabFromBT709(bt709); - perceptual.yz *= saturation; - - if (dechroma != 0.f) { - perceptual.yz *= mix(1.f, 0.f, clamp(pow(y / (10000.f / 100.f), (1.f - dechroma)), 0.0, 1.0)); - } - - bt709 = bt709FromOKLab(perceptual); - return max(vec3(0.0), BT709_TO_AP1_MAT * bt709); -} - -vec3 SaturationBlowoutAP1ICtCp(vec3 ap1, float y, float saturation, float dechroma) { - vec3 bt709 = AP1_TO_BT709_MAT * ap1; - - vec3 perceptual = IctcpFromBT709(bt709); - perceptual.yz *= saturation; - - if (dechroma != 0.f) { - perceptual.yz *= mix(1.f, 0.f, clamp(pow(y / (10000.f / 100.f), (1.f - dechroma)), 0.0, 1.0)); - } - - bt709 = BT709FromICtCp(perceptual); - return max(vec3(0.0), BT709_TO_AP1_MAT * bt709); -} - -vec3 ChrominanceOKLabAP1(vec3 incorrect_color_ap1, vec3 correct_color_ap1, float strength) { - if (strength == 0.0) return incorrect_color_ap1; - - // Convert both AP1 inputs to BT.709 for OkLab conversion - vec3 incorrect_color = AP1_TO_BT709_MAT * incorrect_color_ap1; - vec3 correct_color = AP1_TO_BT709_MAT * correct_color_ap1; - - vec3 incorrect_lab = okLabFromBT709(incorrect_color); - vec3 correct_lab = okLabFromBT709(correct_color); - - vec2 incorrect_ab = incorrect_lab.yz; - vec2 correct_ab = correct_lab.yz; - - // Compute chrominance (magnitude of the a–b vector) - float incorrect_chrominance = length(incorrect_ab); - float correct_chrominance = length(correct_ab); - - // Scale original chrominance vector toward target chrominance - float chrominance_ratio = DivideSafe(correct_chrominance, incorrect_chrominance, 1.0); - float scale = mix(1.0, chrominance_ratio, strength); - incorrect_lab.yz = incorrect_ab * scale; - - // Convert back to BT.709, then to AP1, clamp negatives - vec3 bt709 = bt709FromOKLab(incorrect_lab); - return max(vec3(0.0), BT709_TO_AP1_MAT * bt709); -} - -vec3 ChrominanceICtCp(vec3 incorrect_color_ap1, vec3 correct_color_ap1, float strength) { - if (strength == 0.0) return incorrect_color_ap1; - - // Convert both AP1 inputs to BT.709 for OkLab conversion - vec3 incorrect_color = AP1_TO_BT709_MAT * incorrect_color_ap1; - vec3 correct_color = AP1_TO_BT709_MAT * correct_color_ap1; - - vec3 incorrect_ictcp = IctcpFromBT709(incorrect_color); - vec3 correct_ictcp = IctcpFromBT709(correct_color); - - vec2 incorrect_ctcp = incorrect_ictcp.yz; - vec2 correct_ctcp = correct_ictcp.yz; - - // Compute chrominance (magnitude of the ct–cp vector) - float incorrect_chrominance = length(incorrect_ctcp); - float correct_chrominance = length(correct_ctcp); - - // Scale original chrominance vector toward target chrominance - float chrominance_ratio = DivideSafe(correct_chrominance, incorrect_chrominance, 1.0); - float scale = mix(1.0, chrominance_ratio, strength); - incorrect_ictcp.yz = incorrect_ctcp * scale; - - // Convert back to BT.709, then to AP1, clamp negatives - vec3 bt709 = BT709FromICtCp(incorrect_ictcp); - return max(vec3(0.0), BT709_TO_AP1_MAT * bt709); -} - -vec3 CorrectHueAndChrominanceOKLabAP1( - vec3 incorrect_color_ap1, - vec3 reference_color_ap1, - float hue_emulation_strength, - float chrominance_emulation_strength, - float hue_emulation_ramp_start, - float hue_emulation_ramp_end) { - if (hue_emulation_strength == 0.0 && chrominance_emulation_strength == 0.0) { - return incorrect_color_ap1; - } - - vec3 incorrect_color_bt709 = AP1_TO_BT709_MAT * incorrect_color_ap1; - vec3 reference_color_bt709 = AP1_TO_BT709_MAT * reference_color_ap1; - - vec3 perceptual_new = okLabFromBT709(incorrect_color_bt709); - vec3 perceptual_reference = okLabFromBT709(reference_color_bt709); - - float chrominance_current = length(perceptual_new.yz); - float chrominance_ratio = 1.0; - - if (hue_emulation_strength != 0.0) { - float ramp_denom = hue_emulation_ramp_end - hue_emulation_ramp_start; - float ramp_t = clamp(DivideSafe(perceptual_new.x - hue_emulation_ramp_start, ramp_denom, 0.0), 0.0, 1.0); - hue_emulation_strength *= ramp_t; - - float chrominance_pre = chrominance_current; - perceptual_new.yz = mix(perceptual_new.yz, perceptual_reference.yz, hue_emulation_strength); - float chrominance_post = length(perceptual_new.yz); - chrominance_ratio = DivideSafe(chrominance_pre, chrominance_post, 1.0); - chrominance_current = chrominance_post; - } - - if (chrominance_emulation_strength != 0.0) { - float reference_chrominance = length(perceptual_reference.yz); - float target_chrominance_ratio = DivideSafe(reference_chrominance, chrominance_current, 1.0); - chrominance_ratio = mix(chrominance_ratio, target_chrominance_ratio, chrominance_emulation_strength); - } - - perceptual_new.yz *= chrominance_ratio; - - vec3 corrected_color_bt709 = bt709FromOKLab(perceptual_new); - vec3 corrected_color_ap1 = max(BT709_TO_AP1_MAT * corrected_color_bt709, vec3(0.0)); - return corrected_color_ap1; -} - // END INCLUDES diff --git a/src/games/rdr2vk/macleod_boynton.glsl b/src/games/rdr2vk/macleod_boynton.glsl new file mode 100644 index 0000000000..e7d1a2f3ca --- /dev/null +++ b/src/games/rdr2vk/macleod_boynton.glsl @@ -0,0 +1,751 @@ +#ifndef SRC_GAMES_RDR2VK_MACLEOD_BOYNTON_GLSL_ +#define SRC_GAMES_RDR2VK_MACLEOD_BOYNTON_GLSL_ + +// Self-contained GLSL port of macleod_boynton.hlsli. +// Names are prefixed to replace HLSL namespaces. + +const mat3 renodx_color_macleod_boynton_XYZ_TO_LMS_2006 = mat3( + vec3(0.185082982238733, -0.134433056469973, 0.000789456671966863), + vec3(0.584081279463687, 0.405752392775348, -0.000912281325916184), + vec3(-0.0240722415044404, 0.0358252602217631, 0.0198490812339463)); + +const mat3 renodx_color_macleod_boynton_LMS_TO_XYZ_2006 = mat3( + vec3(2.628474773947687, 0.8765342837340055, -0.06425592569153735), + vec3(-3.761263499279893, 1.2003038085515867, 0.20476359921126536), + vec3(9.9763571339745, -1.1033785928646218, 49.93266413348867)); + +const mat3 renodx_color_macleod_boynton_BT709_TO_XYZ_MAT = mat3( + vec3(0.4123907993, 0.2126390059, 0.0193308187), + vec3(0.3575843394, 0.7151686788, 0.1191947798), + vec3(0.1804807884, 0.0721923154, 0.9505321522)); + +const mat3 renodx_color_macleod_boynton_XYZ_TO_BT709_MAT = mat3( + vec3(3.2409699419, -0.9692436363, 0.0556300797), + vec3(-1.5373831776, 1.8759675015, -0.2039769589), + vec3(-0.4986107603, 0.0415550574, 1.0569715142)); + +const mat3 renodx_color_macleod_boynton_BT2020_TO_XYZ_MAT = mat3( + vec3(0.6369580483, 0.2627002120, 0.0000000000), + vec3(0.1446169036, 0.6779980715, 0.0280726930), + vec3(0.1688809752, 0.0593017165, 1.0609850577)); + +const mat3 renodx_color_macleod_boynton_XYZ_TO_BT2020_MAT = mat3( + vec3(1.7166511880, -0.6666843518, 0.0176398574), + vec3(-0.3556707838, 1.6164812366, -0.0427706133), + vec3(-0.2533662814, 0.0157685458, 0.9421031212)); + +const vec2 renodx_color_macleod_boynton_WHITE_POINT_D65 = vec2(0.31272, 0.32903); + +const float renodx_color_macleod_boynton_EPSILON = 1e-20; +const float renodx_color_macleod_boynton_INTERVAL_MAX = 1e30; +const float renodx_color_macleod_boynton_MB_NEAR_WHITE_EPSILON = 1e-14; +const float renodx_color_macleod_boynton_ONE_MINUS_EPSILON = 1.0 - 1e-6; + +const int renodx_color_macleod_boynton_MB_PURITY_MODE_DISTANCE = 0; +const int renodx_color_macleod_boynton_MB_PURITY_MODE_NORMALIZED = 1; +const int renodx_color_macleod_boynton_MB_PURITY_MODE_SCALE_NEUTWO = 2; +const int renodx_color_macleod_boynton_MB_PURITY_ADJUST_NONE = 0; +const int renodx_color_macleod_boynton_MB_PURITY_ADJUST_CLIP_MAX = 1; + +float renodx_color_macleod_boynton_DivideSafe(float a, float b, float fallback) { + return (b == 0.0) ? fallback : (a / b); +} + +float renodx_color_macleod_boynton_saturate(float x) { + return clamp(x, 0.0, 1.0); +} + +vec3 renodx_color_macleod_boynton_xyz_from_xyY(vec3 xyY) { + float x = xyY.x; + float y = xyY.y; + float Y = xyY.z; + float safe_y = max(y, 1e-10); + + float X = x * Y / safe_y; + float Z = (1.0 - x - y) * Y / safe_y; + return vec3(X, Y, Z); +} + +float renodx_color_macleod_boynton_Neutwo(float x) { + float denominator_squared = x * x + 1.0; + return x * inversesqrt(denominator_squared); +} + +float renodx_color_macleod_boynton_InverseNeutwo(float x) { + float clamped = min(max(x, 0.0), renodx_color_macleod_boynton_ONE_MINUS_EPSILON); + float denominator_squared = 1.0 - clamped * clamped; + return clamped * inversesqrt(denominator_squared); +} + +vec2 renodx_color_macleod_boynton_MB_From_LMS(vec3 lms) { + float t = lms.x + lms.y; + if (t <= 0.0) { + return vec2(0.0); + } + + return vec2( + renodx_color_macleod_boynton_DivideSafe(lms.x, t, 0.0), + renodx_color_macleod_boynton_DivideSafe(lms.z, t, 0.0)); +} + +vec3 renodx_color_macleod_boynton_LMS_From_MB_T(vec2 mb, float t) { + float r = mb.x; + float b = mb.y; + return vec3(r * t, (1.0 - r) * t, b * t); +} + +vec2 renodx_color_macleod_boynton_MB_White_D65() { + vec3 d65_xyz = renodx_color_macleod_boynton_xyz_from_xyY( + vec3(renodx_color_macleod_boynton_WHITE_POINT_D65, 1.0)); + vec3 d65_lms = renodx_color_macleod_boynton_XYZ_TO_LMS_2006 * d65_xyz; + return renodx_color_macleod_boynton_MB_From_LMS(d65_lms); +} + +vec3 renodx_color_macleod_boynton_TransferPurityBT2020( + vec3 rgb_target_bt2020_linear, vec3 rgb_source_bt2020_linear, float strength) { + if (strength <= 0.0) { + return max(rgb_target_bt2020_linear, vec3(0.0)); + } + + const float t_min = 1e-7; + vec2 white = renodx_color_macleod_boynton_MB_White_D65(); + + vec3 xyz_target = renodx_color_macleod_boynton_BT2020_TO_XYZ_MAT * rgb_target_bt2020_linear; + vec3 lms_target = renodx_color_macleod_boynton_XYZ_TO_LMS_2006 * xyz_target; + float target_t = lms_target.x + lms_target.y; + if (target_t <= t_min) { + return max(rgb_target_bt2020_linear, vec3(0.0)); + } + + vec3 xyz_source = renodx_color_macleod_boynton_BT2020_TO_XYZ_MAT * rgb_source_bt2020_linear; + vec3 lms_source = renodx_color_macleod_boynton_XYZ_TO_LMS_2006 * xyz_source; + float source_t = lms_source.x + lms_source.y; + if (source_t <= t_min) { + return max(rgb_target_bt2020_linear, vec3(0.0)); + } + + vec2 mb_target = renodx_color_macleod_boynton_MB_From_LMS(lms_target); + vec2 mb_source = renodx_color_macleod_boynton_MB_From_LMS(lms_source); + + vec2 target_offset = mb_target - white; + float target_len = length(target_offset); + if (target_len < renodx_color_macleod_boynton_MB_NEAR_WHITE_EPSILON) { + return max(rgb_target_bt2020_linear, vec3(0.0)); + } + + float source_len = length(mb_source - white); + float out_len = (strength >= 1.0) + ? source_len + : mix(target_len, source_len, clamp(strength, 0.0, 1.0)); + + vec2 target_dir = target_offset / target_len; + vec2 mb_out = white + target_dir * out_len; + vec3 lms_out = renodx_color_macleod_boynton_LMS_From_MB_T(mb_out, target_t); + vec3 xyz_out = renodx_color_macleod_boynton_LMS_TO_XYZ_2006 * lms_out; + vec3 rgb_out = renodx_color_macleod_boynton_XYZ_TO_BT2020_MAT * xyz_out; + return max(rgb_out, vec3(0.0)); +} + +void renodx_color_macleod_boynton_IntervalLower0(float a, float b, out float lo, out float hi) { + if (abs(a) < renodx_color_macleod_boynton_EPSILON) { + if (b >= 0.0) { + lo = -renodx_color_macleod_boynton_INTERVAL_MAX; + hi = renodx_color_macleod_boynton_INTERVAL_MAX; + } else { + lo = 1.0; + hi = 0.0; + } + return; + } + + float t0 = renodx_color_macleod_boynton_DivideSafe(-b, a, 0.0); + if (a > 0.0) { + lo = t0; + hi = renodx_color_macleod_boynton_INTERVAL_MAX; + } else { + lo = -renodx_color_macleod_boynton_INTERVAL_MAX; + hi = t0; + } +} + +struct renodx_color_macleod_boynton_MBPurityDebug { + vec3 rgbOut; + vec3 rgbT0; + vec3 rgbEdgeGamut; + float tMaxGamut; + float tFinal; + float purityCur01; + float purity01_in; + float purity01_used; +}; + +renodx_color_macleod_boynton_MBPurityDebug renodx_color_macleod_boynton_ApplyInternal( + vec3 rgb_linear, float purity_value, int purity_input_mode, float curve_gamma, + vec2 mb_white_override, float t_min, int purity_adjust_mode, + mat3 rgb_to_xyz_mat, mat3 xyz_to_rgb_mat) { + renodx_color_macleod_boynton_MBPurityDebug result; + result.rgbOut = rgb_linear; + result.rgbT0 = rgb_linear; + result.rgbEdgeGamut = rgb_linear; + result.tMaxGamut = 0.0; + result.tFinal = 0.0; + result.purityCur01 = 0.0; + result.purity01_in = 0.0; + result.purity01_used = 0.0; + + vec3 xyz = rgb_to_xyz_mat * rgb_linear; + vec3 lms = renodx_color_macleod_boynton_XYZ_TO_LMS_2006 * xyz; + + float t = lms.x + lms.y; + if (t <= t_min) { + return result; + } + + vec2 white = (mb_white_override.x >= 0.0 && mb_white_override.y >= 0.0) + ? mb_white_override + : renodx_color_macleod_boynton_MB_White_D65(); + + vec2 mb0 = renodx_color_macleod_boynton_MB_From_LMS(lms); + vec2 direction = mb0 - white; + if (dot(direction, direction) < renodx_color_macleod_boynton_MB_NEAR_WHITE_EPSILON) { + return result; + } + + vec3 lms_t0 = renodx_color_macleod_boynton_LMS_From_MB_T(white, t); + vec3 xyz_t0 = renodx_color_macleod_boynton_LMS_TO_XYZ_2006 * lms_t0; + vec3 rgb_t0 = xyz_to_rgb_mat * xyz_t0; + result.rgbT0 = rgb_t0; + + vec3 a = rgb_linear - rgb_t0; + + float t_lo = 0.0; + float t_hi = renodx_color_macleod_boynton_INTERVAL_MAX; + float lo; + float hi; + + renodx_color_macleod_boynton_IntervalLower0(a.x, rgb_t0.x, lo, hi); + t_lo = max(t_lo, lo); + t_hi = min(t_hi, hi); + renodx_color_macleod_boynton_IntervalLower0(a.y, rgb_t0.y, lo, hi); + t_lo = max(t_lo, lo); + t_hi = min(t_hi, hi); + renodx_color_macleod_boynton_IntervalLower0(a.z, rgb_t0.z, lo, hi); + t_lo = max(t_lo, lo); + t_hi = min(t_hi, hi); + + if (t_hi < t_lo) { + result.rgbOut = max(rgb_linear, vec3(0.0)); + result.rgbEdgeGamut = rgb_t0; + return result; + } + + float t_max = max(0.0, t_hi); + result.tMaxGamut = t_max; + + float p_cur = (t_max > renodx_color_macleod_boynton_EPSILON) + ? renodx_color_macleod_boynton_DivideSafe(1.0, t_max, 0.0) + : 0.0; + result.purityCur01 = renodx_color_macleod_boynton_saturate(p_cur); + result.rgbEdgeGamut = a * t_max + rgb_t0; + + float t_final = 0.0; + if (purity_adjust_mode == renodx_color_macleod_boynton_MB_PURITY_ADJUST_CLIP_MAX) { + result.purity01_used = 1.0; + result.purity01_in = 1.0; + t_final = t_max; + } else if (purity_input_mode == renodx_color_macleod_boynton_MB_PURITY_MODE_NORMALIZED) { + result.purity01_in = renodx_color_macleod_boynton_saturate(purity_value); + float gamma = max(curve_gamma, 1e-6); + float purity01 = pow(result.purity01_in, gamma); + result.purity01_used = purity01; + t_final = purity01 * t_max; + } else if (purity_input_mode == renodx_color_macleod_boynton_MB_PURITY_MODE_SCALE_NEUTWO) { + float saturation_scale = max(purity_value, 0.0); + float purity01_target; + if (result.purityCur01 >= renodx_color_macleod_boynton_ONE_MINUS_EPSILON && saturation_scale >= 1.0) { + purity01_target = 1.0; + } else { + float z = renodx_color_macleod_boynton_InverseNeutwo(result.purityCur01); + float z_scaled = z * saturation_scale; + purity01_target = renodx_color_macleod_boynton_saturate( + renodx_color_macleod_boynton_Neutwo(z_scaled)); + } + result.purity01_in = result.purityCur01; + result.purity01_used = purity01_target; + t_final = purity01_target * t_max; + } else { + float t_user = max(purity_value, 0.0); + t_final = min(t_user, t_max); + result.purity01_used = (t_max > renodx_color_macleod_boynton_EPSILON) + ? renodx_color_macleod_boynton_saturate( + renodx_color_macleod_boynton_DivideSafe(t_final, t_max, 0.0)) + : 0.0; + result.purity01_in = result.purity01_used; + } + + result.tFinal = t_final; + + vec2 mb_final = white + t_final * direction; + vec3 lms_final = renodx_color_macleod_boynton_LMS_From_MB_T(mb_final, t); + vec3 xyz_final = renodx_color_macleod_boynton_LMS_TO_XYZ_2006 * lms_final; + vec3 rgb_final = xyz_to_rgb_mat * xyz_final; + result.rgbOut = max(rgb_final, vec3(0.0)); + return result; +} + +renodx_color_macleod_boynton_MBPurityDebug renodx_color_macleod_boynton_ApplyBT709( + vec3 rgb709_linear, float purity01, float curve_gamma, vec2 mb_white_override, + float t_min, int purity_adjust_mode) { + return renodx_color_macleod_boynton_ApplyInternal( + rgb709_linear, purity01, + renodx_color_macleod_boynton_MB_PURITY_MODE_NORMALIZED, + curve_gamma, mb_white_override, t_min, purity_adjust_mode, + renodx_color_macleod_boynton_BT709_TO_XYZ_MAT, + renodx_color_macleod_boynton_XYZ_TO_BT709_MAT); +} + +renodx_color_macleod_boynton_MBPurityDebug renodx_color_macleod_boynton_ApplyBT709(vec3 rgb709_linear, float purity01) { + return renodx_color_macleod_boynton_ApplyBT709( + rgb709_linear, purity01, 1.0, vec2(-1.0), 1e-6, + renodx_color_macleod_boynton_MB_PURITY_ADJUST_NONE); +} + +renodx_color_macleod_boynton_MBPurityDebug renodx_color_macleod_boynton_ApplyBT2020( + vec3 rgb2020_linear, float purity01, float curve_gamma, vec2 mb_white_override, + float t_min, int purity_adjust_mode) { + return renodx_color_macleod_boynton_ApplyInternal( + rgb2020_linear, purity01, + renodx_color_macleod_boynton_MB_PURITY_MODE_NORMALIZED, + curve_gamma, mb_white_override, t_min, purity_adjust_mode, + renodx_color_macleod_boynton_BT2020_TO_XYZ_MAT, + renodx_color_macleod_boynton_XYZ_TO_BT2020_MAT); +} + +renodx_color_macleod_boynton_MBPurityDebug renodx_color_macleod_boynton_ApplyBT2020(vec3 rgb2020_linear, float purity01) { + return renodx_color_macleod_boynton_ApplyBT2020( + rgb2020_linear, purity01, 1.0, vec2(-1.0), 1e-6, + renodx_color_macleod_boynton_MB_PURITY_ADJUST_NONE); +} + +renodx_color_macleod_boynton_MBPurityDebug renodx_color_macleod_boynton_ApplyScaleBT709( + vec3 rgb709_linear, float saturation_scale, vec2 mb_white_override, float t_min, + int purity_adjust_mode) { + return renodx_color_macleod_boynton_ApplyInternal( + rgb709_linear, saturation_scale, + renodx_color_macleod_boynton_MB_PURITY_MODE_SCALE_NEUTWO, + 1.0, mb_white_override, t_min, purity_adjust_mode, + renodx_color_macleod_boynton_BT709_TO_XYZ_MAT, + renodx_color_macleod_boynton_XYZ_TO_BT709_MAT); +} + +renodx_color_macleod_boynton_MBPurityDebug renodx_color_macleod_boynton_ApplyScaleBT709(vec3 rgb709_linear, float saturation_scale) { + return renodx_color_macleod_boynton_ApplyScaleBT709( + rgb709_linear, saturation_scale, vec2(-1.0), 1e-6, + renodx_color_macleod_boynton_MB_PURITY_ADJUST_NONE); +} + +renodx_color_macleod_boynton_MBPurityDebug renodx_color_macleod_boynton_ApplyScaleBT2020( + vec3 rgb2020_linear, float saturation_scale, vec2 mb_white_override, float t_min, + int purity_adjust_mode) { + return renodx_color_macleod_boynton_ApplyInternal( + rgb2020_linear, saturation_scale, + renodx_color_macleod_boynton_MB_PURITY_MODE_SCALE_NEUTWO, + 1.0, mb_white_override, t_min, purity_adjust_mode, + renodx_color_macleod_boynton_BT2020_TO_XYZ_MAT, + renodx_color_macleod_boynton_XYZ_TO_BT2020_MAT); +} + +renodx_color_macleod_boynton_MBPurityDebug renodx_color_macleod_boynton_ApplyScaleBT2020(vec3 rgb2020_linear, float saturation_scale) { + return renodx_color_macleod_boynton_ApplyScaleBT2020( + rgb2020_linear, saturation_scale, vec2(-1.0), 1e-6, + renodx_color_macleod_boynton_MB_PURITY_ADJUST_NONE); +} + +vec3 renodx_color_macleod_boynton_BT709(vec3 rgb709_linear, float purity_scale, vec2 mb_white) { + return renodx_color_macleod_boynton_ApplyInternal( + rgb709_linear, purity_scale, + renodx_color_macleod_boynton_MB_PURITY_MODE_DISTANCE, + 1.0, mb_white, 0.0, + renodx_color_macleod_boynton_MB_PURITY_ADJUST_NONE, + renodx_color_macleod_boynton_BT709_TO_XYZ_MAT, + renodx_color_macleod_boynton_XYZ_TO_BT709_MAT) + .rgbOut; +} + +vec3 renodx_color_macleod_boynton_BT2020(vec3 rgb2020_linear, float purity_scale, vec2 mb_white) { + return renodx_color_macleod_boynton_ApplyInternal( + rgb2020_linear, purity_scale, + renodx_color_macleod_boynton_MB_PURITY_MODE_DISTANCE, + 1.0, mb_white, 0.0, + renodx_color_macleod_boynton_MB_PURITY_ADJUST_NONE, + renodx_color_macleod_boynton_BT2020_TO_XYZ_MAT, + renodx_color_macleod_boynton_XYZ_TO_BT2020_MAT) + .rgbOut; +} + +vec3 renodx_color_macleod_boynton_BT709MaxPurity(vec3 rgb709_linear, vec2 mb_white) { + return renodx_color_macleod_boynton_ApplyInternal( + rgb709_linear, 0.0, + renodx_color_macleod_boynton_MB_PURITY_MODE_DISTANCE, + 1.0, mb_white, 0.0, + renodx_color_macleod_boynton_MB_PURITY_ADJUST_CLIP_MAX, + renodx_color_macleod_boynton_BT709_TO_XYZ_MAT, + renodx_color_macleod_boynton_XYZ_TO_BT709_MAT) + .rgbOut; +} + +vec3 renodx_color_macleod_boynton_BT2020MaxPurity(vec3 rgb2020_linear, vec2 mb_white) { + return renodx_color_macleod_boynton_ApplyInternal( + rgb2020_linear, 0.0, + renodx_color_macleod_boynton_MB_PURITY_MODE_DISTANCE, + 1.0, mb_white, 0.0, + renodx_color_macleod_boynton_MB_PURITY_ADJUST_CLIP_MAX, + renodx_color_macleod_boynton_BT2020_TO_XYZ_MAT, + renodx_color_macleod_boynton_XYZ_TO_BT2020_MAT) + .rgbOut; +} + +vec3 renodx_color_macleod_boynton_GamutCompressBT709(vec3 rgb709_linear, vec2 mb_white, float t_min) { + return renodx_color_macleod_boynton_ApplyInternal( + rgb709_linear, 1.0, + renodx_color_macleod_boynton_MB_PURITY_MODE_DISTANCE, + 1.0, mb_white, t_min, + renodx_color_macleod_boynton_MB_PURITY_ADJUST_NONE, + renodx_color_macleod_boynton_BT709_TO_XYZ_MAT, + renodx_color_macleod_boynton_XYZ_TO_BT709_MAT) + .rgbOut; +} + +vec3 renodx_color_macleod_boynton_GamutCompressBT709(vec3 rgb709_linear) { + return renodx_color_macleod_boynton_GamutCompressBT709(rgb709_linear, vec2(-1.0), 1e-6); +} + +vec3 renodx_color_macleod_boynton_GamutCompressBT2020(vec3 rgb2020_linear, vec2 mb_white, float t_min) { + return renodx_color_macleod_boynton_ApplyInternal( + rgb2020_linear, 1.0, + renodx_color_macleod_boynton_MB_PURITY_MODE_DISTANCE, + 1.0, mb_white, t_min, + renodx_color_macleod_boynton_MB_PURITY_ADJUST_NONE, + renodx_color_macleod_boynton_BT2020_TO_XYZ_MAT, + renodx_color_macleod_boynton_XYZ_TO_BT2020_MAT) + .rgbOut; +} + +vec3 renodx_color_macleod_boynton_GamutCompressBT2020(vec3 rgb2020_linear) { + return renodx_color_macleod_boynton_GamutCompressBT2020(rgb2020_linear, vec2(-1.0), 1e-6); +} + +vec3 renodx_color_macleod_boynton_GamutCompressAddWhiteInternal( + vec3 rgb_linear, vec2 mb_white_override, float t_min, mat3 rgb_to_xyz_mat, mat3 xyz_to_rgb_mat) { + vec3 xyz = rgb_to_xyz_mat * rgb_linear; + vec3 lms = renodx_color_macleod_boynton_XYZ_TO_LMS_2006 * xyz; + float t = lms.x + lms.y; + if (t <= t_min) { + return max(rgb_linear, vec3(0.0)); + } + + vec2 white = (mb_white_override.x >= 0.0 && mb_white_override.y >= 0.0) + ? mb_white_override + : renodx_color_macleod_boynton_MB_White_D65(); + vec2 mb0 = renodx_color_macleod_boynton_MB_From_LMS(lms); + vec2 direction = mb0 - white; + if (dot(direction, direction) < renodx_color_macleod_boynton_MB_NEAR_WHITE_EPSILON) { + return max(rgb_linear, vec3(0.0)); + } + + vec3 lms_t0 = renodx_color_macleod_boynton_LMS_From_MB_T(white, t); + vec3 xyz_t0 = renodx_color_macleod_boynton_LMS_TO_XYZ_2006 * lms_t0; + vec3 rgb_t0 = xyz_to_rgb_mat * xyz_t0; + vec3 ray_a = rgb_linear - rgb_t0; + + float t_lo = 0.0; + float t_hi = renodx_color_macleod_boynton_INTERVAL_MAX; + float lo; + float hi; + + renodx_color_macleod_boynton_IntervalLower0(ray_a.x, rgb_t0.x, lo, hi); + t_lo = max(t_lo, lo); + t_hi = min(t_hi, hi); + renodx_color_macleod_boynton_IntervalLower0(ray_a.y, rgb_t0.y, lo, hi); + t_lo = max(t_lo, lo); + t_hi = min(t_hi, hi); + renodx_color_macleod_boynton_IntervalLower0(ray_a.z, rgb_t0.z, lo, hi); + t_lo = max(t_lo, lo); + t_hi = min(t_hi, hi); + + if (t_hi < t_lo) { + return max(rgb_linear, vec3(0.0)); + } + + float t_max = max(0.0, t_hi); + float white_ratio = max( + renodx_color_macleod_boynton_DivideSafe(1.0 - t_max, t_max, 0.0), 0.0); + float white_add = t * white_ratio; + + vec3 white_unit_lms = renodx_color_macleod_boynton_LMS_From_MB_T(white, 1.0); + vec3 lms_out = lms + white_unit_lms * white_add; + vec3 xyz_out = renodx_color_macleod_boynton_LMS_TO_XYZ_2006 * lms_out; + vec3 rgb_out = xyz_to_rgb_mat * xyz_out; + return max(rgb_out, vec3(0.0)); +} + +vec3 renodx_color_macleod_boynton_GamutCompressAddWhiteBT709( + vec3 rgb709_linear, vec2 mb_white, float t_min) { + return renodx_color_macleod_boynton_GamutCompressAddWhiteInternal( + rgb709_linear, mb_white, t_min, + renodx_color_macleod_boynton_BT709_TO_XYZ_MAT, + renodx_color_macleod_boynton_XYZ_TO_BT709_MAT); +} + +vec3 renodx_color_macleod_boynton_GamutCompressAddWhiteBT709(vec3 rgb709_linear) { + return renodx_color_macleod_boynton_GamutCompressAddWhiteBT709(rgb709_linear, vec2(-1.0), 1e-6); +} + +vec3 renodx_color_macleod_boynton_GamutCompressAddWhiteBT2020( + vec3 rgb2020_linear, vec2 mb_white, float t_min) { + return renodx_color_macleod_boynton_GamutCompressAddWhiteInternal( + rgb2020_linear, mb_white, t_min, + renodx_color_macleod_boynton_BT2020_TO_XYZ_MAT, + renodx_color_macleod_boynton_XYZ_TO_BT2020_MAT); +} + +vec3 renodx_color_macleod_boynton_GamutCompressAddWhiteBT2020(vec3 rgb2020_linear) { + return renodx_color_macleod_boynton_GamutCompressAddWhiteBT2020(rgb2020_linear, vec2(-1.0), 1e-6); +} + +float renodx_color_macleod_boynton_LuminosityFromBT709(vec3 bt709_linear) { + vec3 xyz = renodx_color_macleod_boynton_BT709_TO_XYZ_MAT * bt709_linear; + vec3 lms = renodx_color_macleod_boynton_XYZ_TO_LMS_2006 * xyz; + return 1.55 * lms.x + lms.y; +} + +float renodx_color_macleod_boynton_LuminosityFromBT709LuminanceNormalized(vec3 bt709_linear) { + float luminosity = renodx_color_macleod_boynton_LuminosityFromBT709(bt709_linear); + return luminosity / renodx_color_macleod_boynton_LuminosityFromBT709(vec3(1.0)); +} + +float renodx_color_macleod_boynton_LuminosityFromBT2020(vec3 bt2020_linear) { + vec3 xyz = renodx_color_macleod_boynton_BT2020_TO_XYZ_MAT * bt2020_linear; + vec3 lms = renodx_color_macleod_boynton_XYZ_TO_LMS_2006 * xyz; + return 1.55 * lms.x + lms.y; +} + +float renodx_color_macleod_boynton_LuminosityFromBT2020LuminanceNormalized(vec3 bt2020_linear) { + float luminosity = renodx_color_macleod_boynton_LuminosityFromBT2020(bt2020_linear); + return luminosity / renodx_color_macleod_boynton_LuminosityFromBT2020(vec3(1.0)); +} + +struct UserGradingConfig { + float exposure; + float highlights; + float shadows; + float contrast; + float flare; + float gamma; + float saturation; + float dechroma; + float highlight_saturation; + float hue_emulation; + float purity_emulation; +}; + +float renodx_usergrading_DivideSafe(float a, float b, float fallback) { + return (b == 0.0) ? fallback : (a / b); +} + +float renodx_usergrading_SafeDivision(float quotient, float divisor, float fallback) { + return renodx_usergrading_DivideSafe(quotient, divisor, fallback); +} + +float renodx_usergrading_saturate(float x) { + return clamp(x, 0.0, 1.0); +} + +vec3 renodx_usergrading_Luminance(vec3 color, float incorrect_y, float correct_y, float strength) { + float ratio = renodx_usergrading_DivideSafe(correct_y, incorrect_y, 1.0); + return color * mix(1.0, ratio, strength); +} + +float Highlights(float x, float highlights, float mid_gray) { + if (highlights == 1.0) return x; + + if (highlights > 1.0) { + return max(x, mix(x, mid_gray * pow(x / mid_gray, highlights), min(x, 1.0))); + } else { + x /= mid_gray; + return mix(x, pow(x, highlights), step(1.0, x)) * mid_gray; + } +} + +float Shadows(float x, float shadows, float mid_gray) { + if (shadows == 1.0) return x; + + float ratio = max(renodx_usergrading_DivideSafe(x, mid_gray, 0.0), 0.0); + float base_term = x * mid_gray; + float base_scale = renodx_usergrading_DivideSafe(base_term, ratio, 0.0); + + if (shadows > 1.0) { + float raised = x * (1.0 + renodx_usergrading_DivideSafe(base_term, pow(ratio, shadows), 0.0)); + float reference = x * (1.0 + base_scale); + return max(x, x + (raised - reference)); + } else { + float lowered = x * (1.0 + renodx_usergrading_DivideSafe(-base_term, pow(ratio, 2.0 - shadows), 0.0)); + float reference = x * (1.0 - base_scale); + return clamp(x + (lowered - reference), 0.0, x); + } +} + +vec3 ApplyLuminosityGrading(vec3 untonemapped, float lum, UserGradingConfig config, float mid_gray) { + if (config.exposure == 1.0 && config.shadows == 1.0 && config.highlights == 1.0 && config.contrast == 1.0 && config.flare == 0.0 && config.gamma == 1.0) { + return untonemapped; + } + + vec3 color = untonemapped; + color *= config.exposure; + + float lum_gamma_adjusted = (lum < 1.0) ? pow(lum, config.gamma) : lum; + + float lum_normalized = lum_gamma_adjusted / mid_gray; + float flare = renodx_usergrading_DivideSafe(lum_normalized + config.flare, lum_normalized, 1.0); + float exponent = config.contrast * flare; + float lum_contrasted = pow(lum_normalized, exponent) * mid_gray; + + float lum_highlighted = Highlights(lum_contrasted, config.highlights, mid_gray); + float lum_shadowed = Shadows(lum_highlighted, config.shadows, mid_gray); + float lum_final = lum_shadowed; + + color = renodx_usergrading_Luminance(color, lum, lum_final, 1.0); + return color; +} + +vec3 ApplyHueAndPurityGrading( + vec3 ungraded_bt2020, + vec3 reference_bt2020, + float lum, + UserGradingConfig config) { + vec3 color_bt2020 = ungraded_bt2020; + if (config.saturation == 1.0 && config.dechroma == 0.0 && config.hue_emulation == 0.0 && config.purity_emulation == 0.0 && config.highlight_saturation == 0.0) { + return color_bt2020; + } + + float curve_gamma = 1.0; + vec2 mb_white_override = vec2(-1.0); + float t_min = 1e-7; + + float kNearWhiteEpsilon = renodx_color_macleod_boynton_MB_NEAR_WHITE_EPSILON; + vec2 white = (mb_white_override.x >= 0.0 && mb_white_override.y >= 0.0) + ? mb_white_override + : renodx_color_macleod_boynton_MB_White_D65(); + + float color_purity01 = renodx_color_macleod_boynton_ApplyBT2020( + color_bt2020, 1.0, 1.0, mb_white_override, t_min, + renodx_color_macleod_boynton_MB_PURITY_ADJUST_NONE) + .purityCur01; + + if (config.hue_emulation != 0.0 || config.purity_emulation != 0.0) { + float reference_purity01 = renodx_color_macleod_boynton_ApplyBT2020( + reference_bt2020, 1.0, 1.0, mb_white_override, t_min, + renodx_color_macleod_boynton_MB_PURITY_ADJUST_NONE) + .purityCur01; + + float purity_current = color_purity01; + float purity_ratio = 1.0; + vec3 hue_seed_bt2020 = color_bt2020; + + if (config.hue_emulation != 0.0) { + vec3 target_lms = + renodx_color_macleod_boynton_XYZ_TO_LMS_2006 * (renodx_color_macleod_boynton_BT2020_TO_XYZ_MAT * color_bt2020); + vec3 reference_lms = + renodx_color_macleod_boynton_XYZ_TO_LMS_2006 * (renodx_color_macleod_boynton_BT2020_TO_XYZ_MAT * reference_bt2020); + + float target_t = target_lms.x + target_lms.y; + if (target_t > t_min) { + vec2 target_direction = renodx_color_macleod_boynton_MB_From_LMS(target_lms) - white; + vec2 reference_direction = renodx_color_macleod_boynton_MB_From_LMS(reference_lms) - white; + + float target_len_sq = dot(target_direction, target_direction); + float reference_len_sq = dot(reference_direction, reference_direction); + + if (target_len_sq > kNearWhiteEpsilon || reference_len_sq > kNearWhiteEpsilon) { + vec2 target_unit = (target_len_sq > kNearWhiteEpsilon) + ? target_direction * inversesqrt(target_len_sq) + : vec2(0.0); + vec2 reference_unit = (reference_len_sq > kNearWhiteEpsilon) + ? reference_direction * inversesqrt(reference_len_sq) + : target_unit; + + if (target_len_sq <= kNearWhiteEpsilon) { + target_unit = reference_unit; + } + + vec2 blended_unit = mix(target_unit, reference_unit, config.hue_emulation); + float blended_len_sq = dot(blended_unit, blended_unit); + if (blended_len_sq <= kNearWhiteEpsilon) { + blended_unit = (config.hue_emulation >= 0.5) ? reference_unit : target_unit; + blended_len_sq = dot(blended_unit, blended_unit); + } + blended_unit *= inversesqrt(max(blended_len_sq, 1e-20)); + + float seed_len = sqrt(max(target_len_sq, 0.0)); + if (seed_len <= 1e-6) { + seed_len = sqrt(max(reference_len_sq, 0.0)); + } + seed_len = max(seed_len, 1e-6); + + hue_seed_bt2020 = + renodx_color_macleod_boynton_XYZ_TO_BT2020_MAT * (renodx_color_macleod_boynton_LMS_TO_XYZ_2006 * renodx_color_macleod_boynton_LMS_From_MB_T(white + blended_unit * seed_len, target_t)); + + float purity_post = renodx_color_macleod_boynton_ApplyBT2020( + hue_seed_bt2020, 1.0, 1.0, mb_white_override, t_min, + renodx_color_macleod_boynton_MB_PURITY_ADJUST_NONE) + .purityCur01; + purity_ratio = renodx_usergrading_SafeDivision(purity_current, purity_post, 1.0); + purity_current = purity_post; + } + } + } + + if (config.purity_emulation != 0.0) { + float target_purity_ratio = renodx_usergrading_SafeDivision(reference_purity01, purity_current, 1.0); + purity_ratio = mix(purity_ratio, target_purity_ratio, config.purity_emulation); + } + + float applied_purity01 = renodx_usergrading_saturate(purity_current * max(purity_ratio, 0.0)); + color_bt2020 = renodx_color_macleod_boynton_ApplyBT2020( + hue_seed_bt2020, applied_purity01, curve_gamma, mb_white_override, t_min, + renodx_color_macleod_boynton_MB_PURITY_ADJUST_NONE) + .rgbOut; + color_purity01 = applied_purity01; + } + + float purity_scale = 1.0; + + if (config.dechroma != 0.0) { + purity_scale *= mix(1.0, 0.0, renodx_usergrading_saturate(pow(lum / (10000.0 / 100.0), (1.0 - config.dechroma)))); + } + + if (config.highlight_saturation != 0.0) { + float percent_max = renodx_usergrading_saturate(lum * 100.0 / 10000.0); + float blowout_strength = 100.0; + float blowout_change = pow(1.0 - percent_max, blowout_strength * abs(config.highlight_saturation)); + if (config.highlight_saturation < 0.0) { + blowout_change = 2.0 - blowout_change; + } + + purity_scale *= blowout_change; + } + + purity_scale *= config.saturation; + + if (purity_scale != 1.0) { + float scaled_purity01 = renodx_usergrading_saturate(color_purity01 * max(purity_scale, 0.0)); + color_bt2020 = renodx_color_macleod_boynton_ApplyBT2020( + color_bt2020, scaled_purity01, curve_gamma, mb_white_override, t_min, + renodx_color_macleod_boynton_MB_PURITY_ADJUST_NONE) + .rgbOut; + } + + return color_bt2020; +} + +#endif // SRC_GAMES_RDR2VK_MACLEOD_BOYNTON_GLSL_ diff --git a/src/games/rdr2vk/output/0x14BF23D4.frag.glsl b/src/games/rdr2vk/output/0x14BF23D4.frag.glsl index d06d863f1d..296b4e62de 100644 --- a/src/games/rdr2vk/output/0x14BF23D4.frag.glsl +++ b/src/games/rdr2vk/output/0x14BF23D4.frag.glsl @@ -92,6 +92,19 @@ void main() { #endif vec3 _125 = _113.xyz * mat3(vec3(0.6274039745330810546875, 0.329281985759735107421875, 0.043313600122928619384765625), vec3(0.06909699738025665283203125, 0.919539988040924072265625, 0.0113612003624439239501953125), vec3(0.01639159955084323883056640625, 0.0880132019519805908203125, 0.895595014095306396484375)); +#if 1 + vec3 _143; + if (RENODX_TONE_MAP_TYPE != 0.f) { + _143 = PQEncodeUI(_125); + } else { + float _136 = pow(abs((_125.x * _16._m0) / _16._m15), 0.1593017578125); + _143.x = pow((0.8359375 + (18.8515625 * _136)) / (1.0 + (18.6875 * _136)), 78.84375); + float _145 = pow(abs((_125.y * _16._m0) / _16._m15), 0.1593017578125); + _143.y = pow((0.8359375 + (18.8515625 * _145)) / (1.0 + (18.6875 * _145)), 78.84375); + float _154 = pow(abs((_125.z * _16._m0) / _16._m15), 0.1593017578125); + _143.z = pow((0.8359375 + (18.8515625 * _154)) / (1.0 + (18.6875 * _154)), 78.84375); + } +#else float _136 = pow(abs((_125.x * _16._m0) / _16._m15), 0.1593017578125); vec3 _143; _143.x = pow((0.8359375 + (18.8515625 * _136)) / (1.0 + (18.6875 * _136)), 78.84375); @@ -99,6 +112,7 @@ void main() { _143.y = pow((0.8359375 + (18.8515625 * _145)) / (1.0 + (18.6875 * _145)), 78.84375); float _154 = pow(abs((_125.z * _16._m0) / _16._m15), 0.1593017578125); _143.z = pow((0.8359375 + (18.8515625 * _154)) / (1.0 + (18.6875 * _154)), 78.84375); +#endif _163 = vec4(_143.x, _143.y, _143.z, _113.w); } else { _163 = _113; diff --git a/src/games/rdr2vk/output/0x1B0D650C.frag.glsl b/src/games/rdr2vk/output/0x1B0D650C.frag.glsl index 1e6bcd08a9..8bc2c652bb 100644 --- a/src/games/rdr2vk/output/0x1B0D650C.frag.glsl +++ b/src/games/rdr2vk/output/0x1B0D650C.frag.glsl @@ -87,6 +87,20 @@ void main() { _96.rgb = GammaSafe(_96.rgb); #endif vec3 _108 = _96.xyz * mat3(vec3(0.6274039745330810546875, 0.329281985759735107421875, 0.043313600122928619384765625), vec3(0.06909699738025665283203125, 0.919539988040924072265625, 0.0113612003624439239501953125), vec3(0.01639159955084323883056640625, 0.0880132019519805908203125, 0.895595014095306396484375)); + +#if 1 + vec3 _126; + if (RENODX_TONE_MAP_TYPE != 0.f) { + _126 = PQEncodeUI(_108); + } else { + float _119 = pow(abs((_108.x * _13._m0) / _13._m15), 0.1593017578125); + _126.x = pow((0.8359375 + (18.8515625 * _119)) / (1.0 + (18.6875 * _119)), 78.84375); + float _128 = pow(abs((_108.y * _13._m0) / _13._m15), 0.1593017578125); + _126.y = pow((0.8359375 + (18.8515625 * _128)) / (1.0 + (18.6875 * _128)), 78.84375); + float _137 = pow(abs((_108.z * _13._m0) / _13._m15), 0.1593017578125); + _126.z = pow((0.8359375 + (18.8515625 * _137)) / (1.0 + (18.6875 * _137)), 78.84375); + } +#else float _119 = pow(abs((_108.x * _13._m0) / _13._m15), 0.1593017578125); vec3 _126; _126.x = pow((0.8359375 + (18.8515625 * _119)) / (1.0 + (18.6875 * _119)), 78.84375); @@ -94,6 +108,7 @@ void main() { _126.y = pow((0.8359375 + (18.8515625 * _128)) / (1.0 + (18.6875 * _128)), 78.84375); float _137 = pow(abs((_108.z * _13._m0) / _13._m15), 0.1593017578125); _126.z = pow((0.8359375 + (18.8515625 * _137)) / (1.0 + (18.6875 * _137)), 78.84375); +#endif _146 = vec4(_126.x, _126.y, _126.z, _96.w); } else { _146 = _96; diff --git a/src/games/rdr2vk/output/0x26B3FAA9.frag.glsl b/src/games/rdr2vk/output/0x26B3FAA9.frag.glsl index 88e9f87e48..4b83ea2c99 100644 --- a/src/games/rdr2vk/output/0x26B3FAA9.frag.glsl +++ b/src/games/rdr2vk/output/0x26B3FAA9.frag.glsl @@ -91,6 +91,19 @@ void main() { #endif vec3 _119 = _107.xyz * mat3(vec3(0.6274039745330810546875, 0.329281985759735107421875, 0.043313600122928619384765625), vec3(0.06909699738025665283203125, 0.919539988040924072265625, 0.0113612003624439239501953125), vec3(0.01639159955084323883056640625, 0.0880132019519805908203125, 0.895595014095306396484375)); +#if 1 + vec3 _137; + if (RENODX_TONE_MAP_TYPE != 0.f) { + _137 = PQEncodeUI(_119); + } else { + float _130 = pow(abs((_119.x * _14._m0) / _14._m15), 0.1593017578125); + _137.x = pow((0.8359375 + (18.8515625 * _130)) / (1.0 + (18.6875 * _130)), 78.84375); + float _139 = pow(abs((_119.y * _14._m0) / _14._m15), 0.1593017578125); + _137.y = pow((0.8359375 + (18.8515625 * _139)) / (1.0 + (18.6875 * _139)), 78.84375); + float _148 = pow(abs((_119.z * _14._m0) / _14._m15), 0.1593017578125); + _137.z = pow((0.8359375 + (18.8515625 * _148)) / (1.0 + (18.6875 * _148)), 78.84375); + } +#else float _130 = pow(abs((_119.x * _14._m0) / _14._m15), 0.1593017578125); vec3 _137; _137.x = pow((0.8359375 + (18.8515625 * _130)) / (1.0 + (18.6875 * _130)), 78.84375); @@ -98,6 +111,7 @@ void main() { _137.y = pow((0.8359375 + (18.8515625 * _139)) / (1.0 + (18.6875 * _139)), 78.84375); float _148 = pow(abs((_119.z * _14._m0) / _14._m15), 0.1593017578125); _137.z = pow((0.8359375 + (18.8515625 * _148)) / (1.0 + (18.6875 * _148)), 78.84375); +#endif _157 = vec4(_137.x, _137.y, _137.z, _107.w); } else { _157 = _107; diff --git a/src/games/rdr2vk/output/0x6032A998.frag.glsl b/src/games/rdr2vk/output/0x6032A998.frag.glsl index 9ffda2abad..25a2dea903 100644 --- a/src/games/rdr2vk/output/0x6032A998.frag.glsl +++ b/src/games/rdr2vk/output/0x6032A998.frag.glsl @@ -93,6 +93,19 @@ void main() { #endif vec3 _127 = _115.xyz * mat3(vec3(0.6274039745330810546875, 0.329281985759735107421875, 0.043313600122928619384765625), vec3(0.06909699738025665283203125, 0.919539988040924072265625, 0.0113612003624439239501953125), vec3(0.01639159955084323883056640625, 0.0880132019519805908203125, 0.895595014095306396484375)); +#if 1 + vec3 _145; + if (RENODX_TONE_MAP_TYPE != 0.f) { + _145 = PQEncodeUI(_127); + } else { + float _138 = pow(abs((_127.x * _16._m0) / _16._m15), 0.1593017578125); + _145.x = pow((0.8359375 + (18.8515625 * _138)) / (1.0 + (18.6875 * _138)), 78.84375); + float _147 = pow(abs((_127.y * _16._m0) / _16._m15), 0.1593017578125); + _145.y = pow((0.8359375 + (18.8515625 * _147)) / (1.0 + (18.6875 * _147)), 78.84375); + float _156 = pow(abs((_127.z * _16._m0) / _16._m15), 0.1593017578125); + _145.z = pow((0.8359375 + (18.8515625 * _156)) / (1.0 + (18.6875 * _156)), 78.84375); + } +#else float _138 = pow(abs((_127.x * _16._m0) / _16._m15), 0.1593017578125); vec3 _145; _145.x = pow((0.8359375 + (18.8515625 * _138)) / (1.0 + (18.6875 * _138)), 78.84375); @@ -100,6 +113,7 @@ void main() { _145.y = pow((0.8359375 + (18.8515625 * _147)) / (1.0 + (18.6875 * _147)), 78.84375); float _156 = pow(abs((_127.z * _16._m0) / _16._m15), 0.1593017578125); _145.z = pow((0.8359375 + (18.8515625 * _156)) / (1.0 + (18.6875 * _156)), 78.84375); +#endif _165 = vec4(_145.x, _145.y, _145.z, _115.w); } else { _165 = _115; diff --git a/src/games/rdr2vk/output/0x76A78879.frag.glsl b/src/games/rdr2vk/output/0x76A78879.frag.glsl index 8e8e6226ef..3376f401bd 100644 --- a/src/games/rdr2vk/output/0x76A78879.frag.glsl +++ b/src/games/rdr2vk/output/0x76A78879.frag.glsl @@ -92,6 +92,19 @@ void main() { #endif vec3 _125 = _113.xyz * mat3(vec3(0.6274039745330810546875, 0.329281985759735107421875, 0.043313600122928619384765625), vec3(0.06909699738025665283203125, 0.919539988040924072265625, 0.0113612003624439239501953125), vec3(0.01639159955084323883056640625, 0.0880132019519805908203125, 0.895595014095306396484375)); +#if 1 + vec3 _143; + if (RENODX_TONE_MAP_TYPE != 0.f) { + _143 = PQEncodeUI(_125); + } else { + float _136 = pow(abs((_125.x * _15._m0) / _15._m15), 0.1593017578125); + _143.x = pow((0.8359375 + (18.8515625 * _136)) / (1.0 + (18.6875 * _136)), 78.84375); + float _145 = pow(abs((_125.y * _15._m0) / _15._m15), 0.1593017578125); + _143.y = pow((0.8359375 + (18.8515625 * _145)) / (1.0 + (18.6875 * _145)), 78.84375); + float _154 = pow(abs((_125.z * _15._m0) / _15._m15), 0.1593017578125); + _143.z = pow((0.8359375 + (18.8515625 * _154)) / (1.0 + (18.6875 * _154)), 78.84375); + } +#else float _136 = pow(abs((_125.x * _15._m0) / _15._m15), 0.1593017578125); vec3 _143; _143.x = pow((0.8359375 + (18.8515625 * _136)) / (1.0 + (18.6875 * _136)), 78.84375); @@ -99,6 +112,7 @@ void main() { _143.y = pow((0.8359375 + (18.8515625 * _145)) / (1.0 + (18.6875 * _145)), 78.84375); float _154 = pow(abs((_125.z * _15._m0) / _15._m15), 0.1593017578125); _143.z = pow((0.8359375 + (18.8515625 * _154)) / (1.0 + (18.6875 * _154)), 78.84375); +#endif _163 = vec4(_143.x, _143.y, _143.z, _113.w); } else { _163 = _113; diff --git a/src/games/rdr2vk/output/0x7BE28339.frag.glsl b/src/games/rdr2vk/output/0x7BE28339.frag.glsl index 80830d1a61..090b9f3ef2 100644 --- a/src/games/rdr2vk/output/0x7BE28339.frag.glsl +++ b/src/games/rdr2vk/output/0x7BE28339.frag.glsl @@ -87,6 +87,19 @@ void main() { #endif vec3 _106 = _94.xyz * mat3(vec3(0.6274039745330810546875, 0.329281985759735107421875, 0.043313600122928619384765625), vec3(0.06909699738025665283203125, 0.919539988040924072265625, 0.0113612003624439239501953125), vec3(0.01639159955084323883056640625, 0.0880132019519805908203125, 0.895595014095306396484375)); +#if 1 + vec3 _124; + if (RENODX_TONE_MAP_TYPE != 0.f) { + _124 = PQEncodeUI(_106); + } else { + float _117 = pow(abs((_106.x * _11._m0) / _11._m15), 0.1593017578125); + _124.x = pow((0.8359375 + (18.8515625 * _117)) / (1.0 + (18.6875 * _117)), 78.84375); + float _126 = pow(abs((_106.y * _11._m0) / _11._m15), 0.1593017578125); + _124.y = pow((0.8359375 + (18.8515625 * _126)) / (1.0 + (18.6875 * _126)), 78.84375); + float _135 = pow(abs((_106.z * _11._m0) / _11._m15), 0.1593017578125); + _124.z = pow((0.8359375 + (18.8515625 * _135)) / (1.0 + (18.6875 * _135)), 78.84375); + } +#else float _117 = pow(abs((_106.x * _11._m0) / _11._m15), 0.1593017578125); vec3 _124; _124.x = pow((0.8359375 + (18.8515625 * _117)) / (1.0 + (18.6875 * _117)), 78.84375); @@ -94,6 +107,7 @@ void main() { _124.y = pow((0.8359375 + (18.8515625 * _126)) / (1.0 + (18.6875 * _126)), 78.84375); float _135 = pow(abs((_106.z * _11._m0) / _11._m15), 0.1593017578125); _124.z = pow((0.8359375 + (18.8515625 * _135)) / (1.0 + (18.6875 * _135)), 78.84375); +#endif _144 = vec4(_124.x, _124.y, _124.z, _94.w); } else { _144 = _94; diff --git a/src/games/rdr2vk/output/0x8B9C89F1.frag.glsl b/src/games/rdr2vk/output/0x8B9C89F1.frag.glsl index 5a67a7bb7e..abaa2a69a5 100644 --- a/src/games/rdr2vk/output/0x8B9C89F1.frag.glsl +++ b/src/games/rdr2vk/output/0x8B9C89F1.frag.glsl @@ -974,6 +974,19 @@ void main() { #endif vec3 _968 = _956.xyz * mat3(vec3(0.6274039745330810546875, 0.329281985759735107421875, 0.043313600122928619384765625), vec3(0.06909699738025665283203125, 0.919539988040924072265625, 0.0113612003624439239501953125), vec3(0.01639159955084323883056640625, 0.0880132019519805908203125, 0.895595014095306396484375)); +#if 1 + vec3 _986; + if (RENODX_TONE_MAP_TYPE != 0.f) { + _986 = PQEncodeUI(_968); + } else { + float _979 = pow(abs((_968.x * _17._m0) / _17._m15), 0.1593017578125); + _986.x = pow((0.8359375 + (18.8515625 * _979)) / (1.0 + (18.6875 * _979)), 78.84375); + float _988 = pow(abs((_968.y * _17._m0) / _17._m15), 0.1593017578125); + _986.y = pow((0.8359375 + (18.8515625 * _988)) / (1.0 + (18.6875 * _988)), 78.84375); + float _997 = pow(abs((_968.z * _17._m0) / _17._m15), 0.1593017578125); + _986.z = pow((0.8359375 + (18.8515625 * _997)) / (1.0 + (18.6875 * _997)), 78.84375); + } +#else float _979 = pow(abs((_968.x * _17._m0) / _17._m15), 0.1593017578125); vec3 _986; _986.x = pow((0.8359375 + (18.8515625 * _979)) / (1.0 + (18.6875 * _979)), 78.84375); @@ -981,6 +994,7 @@ void main() { _986.y = pow((0.8359375 + (18.8515625 * _988)) / (1.0 + (18.6875 * _988)), 78.84375); float _997 = pow(abs((_968.z * _17._m0) / _17._m15), 0.1593017578125); _986.z = pow((0.8359375 + (18.8515625 * _997)) / (1.0 + (18.6875 * _997)), 78.84375); +#endif _1006 = vec4(_986.x, _986.y, _986.z, _956.w); } else { _1006 = _956; diff --git a/src/games/rdr2vk/output/0xBCF843ED.frag.glsl b/src/games/rdr2vk/output/0xBCF843ED.frag.glsl index 84e380ac39..09d9110e19 100644 --- a/src/games/rdr2vk/output/0xBCF843ED.frag.glsl +++ b/src/games/rdr2vk/output/0xBCF843ED.frag.glsl @@ -94,6 +94,19 @@ void main() { #endif vec3 _123 = _111.xyz * mat3(vec3(0.6274039745330810546875, 0.329281985759735107421875, 0.043313600122928619384765625), vec3(0.06909699738025665283203125, 0.919539988040924072265625, 0.0113612003624439239501953125), vec3(0.01639159955084323883056640625, 0.0880132019519805908203125, 0.895595014095306396484375)); +#if 1 + vec3 _141; + if (RENODX_TONE_MAP_TYPE != 0.f) { + _141 = PQEncodeUI(_123); + } else { + float _134 = pow(abs((_123.x * _14._m0) / _14._m15), 0.1593017578125); + _141.x = pow((0.8359375 + (18.8515625 * _134)) / (1.0 + (18.6875 * _134)), 78.84375); + float _143 = pow(abs((_123.y * _14._m0) / _14._m15), 0.1593017578125); + _141.y = pow((0.8359375 + (18.8515625 * _143)) / (1.0 + (18.6875 * _143)), 78.84375); + float _152 = pow(abs((_123.z * _14._m0) / _14._m15), 0.1593017578125); + _141.z = pow((0.8359375 + (18.8515625 * _152)) / (1.0 + (18.6875 * _152)), 78.84375); + } +#else float _134 = pow(abs((_123.x * _14._m0) / _14._m15), 0.1593017578125); vec3 _141; _141.x = pow((0.8359375 + (18.8515625 * _134)) / (1.0 + (18.6875 * _134)), 78.84375); @@ -101,6 +114,7 @@ void main() { _141.y = pow((0.8359375 + (18.8515625 * _143)) / (1.0 + (18.6875 * _143)), 78.84375); float _152 = pow(abs((_123.z * _14._m0) / _14._m15), 0.1593017578125); _141.z = pow((0.8359375 + (18.8515625 * _152)) / (1.0 + (18.6875 * _152)), 78.84375); +#endif _161 = vec4(_141.x, _141.y, _141.z, _111.w); } else { _161 = _111; diff --git a/src/games/rdr2vk/output/0xC235CFFA.comp.glsl b/src/games/rdr2vk/output/0xC235CFFA.comp.glsl deleted file mode 100644 index a4608af73d..0000000000 --- a/src/games/rdr2vk/output/0xC235CFFA.comp.glsl +++ /dev/null @@ -1,91 +0,0 @@ -#version 450 - -#extension GL_GOOGLE_include_directive : require -#include "./output.glsl" - -layout(local_size_x = 32, local_size_y = 32, local_size_z = 1) in; - -vec3 _50; -vec3 _58; - -layout(set = 0, binding = 23, std140) uniform _6_7 { - float _m0; - float _m1; - uint _m2; - uint _m3; - uint _m4; - uint _m5; - float _m6; - float _m7; - float _m8; - float _m9; - float _m10; - float _m11; - float _m12; - float _m13; - float _m14; - float _m15; - uint _m16; - uint _m17; - uint _m18; - uint _m19; -} -_7; - -layout(set = 0, binding = 19, std140) uniform _8_9 { - vec4 _m0; - vec4 _m1; - vec4 _m2; - vec4 _m3; - vec4 _m4; - vec4 _m5; - vec4 _m6; - vec4 _m7; - vec4 _m8; - vec4 _m9; - vec4 _m10; - float _m11; - float _m12; - float _m13; - float _m14; - float _m15; - float _m16; - float _m17; - float _m18; - float _m19; - float _m20; - float _m21; - float _m22; - float _m23; - float _m24; - uint _m25; - uint _m26; -} -_9; - -layout(set = 1, binding = 64, rgba32f) uniform writeonly image3D _11; - -void main() { - uvec3 _65 = uvec3(gl_GlobalInvocationID.xy, gl_WorkGroupID.z); - vec3 _72 = vec3(_65) / vec3(float(_9._m26 - 1u)); - float _75 = pow(abs(_72.x), 0.0126833133399486541748046875); - vec3 _82; - _82.x = pow(max(_75 - 0.8359375, 0.0) / (18.8515625 - (18.6875 * _75)), 6.277394771575927734375); - float _85 = pow(abs(_72.y), 0.0126833133399486541748046875); - _82.y = pow(max(_85 - 0.8359375, 0.0) / (18.8515625 - (18.6875 * _85)), 6.277394771575927734375); - float _95 = pow(abs(_72.z), 0.0126833133399486541748046875); - _82.z = pow(max(_95 - 0.8359375, 0.0) / (18.8515625 - (18.6875 * _95)), 6.277394771575927734375); - vec3 _109 = (_82 * _7._m15) / vec3(_7._m0); - float _124 = _109.x; - float _125 = _109.y; - float _126 = _109.z; - float _129 = max(max(_124, max(_125, _126)), 5.9604644775390625e-08); - float _133 = pow(_129, _9._m1.x); - float _137 = _133 / ((pow(_133, _9._m1.y) * _9._m1.z) + _9._m1.w); - vec3 _160; - _160.x = pow(mix(pow(_124 / _129, _9._m2.x), 1.0, pow(_137, _9._m3.x)), _9._m4.x) * _137; - _160.y = pow(mix(pow(_125 / _129, _9._m2.y), 1.0, pow(_137, _9._m3.y)), _9._m4.y) * _137; - _160.z = pow(mix(pow(_126 / _129, _9._m2.z), 1.0, pow(_137, _9._m3.z)), _9._m4.z) * _137; - imageStore(_11, ivec3(_65), vec4(_160 * mat3(vec3(1.66049015522003173828125, -0.587639033794403076171875, -0.072851590812206268310546875), vec3(-0.124549962580204010009765625, 1.13289988040924072265625, -0.00834796018898487091064453125), vec3(-0.01815111003816127777099609375, -0.10057871043682098388671875, 1.11872971057891845703125)), 1.0)); -} - diff --git a/src/games/rdr2vk/output/0xFCD82342.frag.glsl b/src/games/rdr2vk/output/0xFCD82342.frag.glsl index dc5d9a0866..7690d20b55 100644 --- a/src/games/rdr2vk/output/0xFCD82342.frag.glsl +++ b/src/games/rdr2vk/output/0xFCD82342.frag.glsl @@ -93,6 +93,19 @@ void main() { #endif vec3 _126 = _114.xyz * mat3(vec3(0.6274039745330810546875, 0.329281985759735107421875, 0.043313600122928619384765625), vec3(0.06909699738025665283203125, 0.919539988040924072265625, 0.0113612003624439239501953125), vec3(0.01639159955084323883056640625, 0.0880132019519805908203125, 0.895595014095306396484375)); +#if 1 + vec3 _144; + if (RENODX_TONE_MAP_TYPE != 0.f) { + _144 = PQEncodeUI(_126); + } else { + float _137 = pow(abs((_126.x * _16._m0) / _16._m15), 0.1593017578125); + _144.x = pow((0.8359375 + (18.8515625 * _137)) / (1.0 + (18.6875 * _137)), 78.84375); + float _146 = pow(abs((_126.y * _16._m0) / _16._m15), 0.1593017578125); + _144.y = pow((0.8359375 + (18.8515625 * _146)) / (1.0 + (18.6875 * _146)), 78.84375); + float _155 = pow(abs((_126.z * _16._m0) / _16._m15), 0.1593017578125); + _144.z = pow((0.8359375 + (18.8515625 * _155)) / (1.0 + (18.6875 * _155)), 78.84375); + } +#else float _137 = pow(abs((_126.x * _16._m0) / _16._m15), 0.1593017578125); vec3 _144; _144.x = pow((0.8359375 + (18.8515625 * _137)) / (1.0 + (18.6875 * _137)), 78.84375); @@ -100,6 +113,7 @@ void main() { _144.y = pow((0.8359375 + (18.8515625 * _146)) / (1.0 + (18.6875 * _146)), 78.84375); float _155 = pow(abs((_126.z * _16._m0) / _16._m15), 0.1593017578125); _144.z = pow((0.8359375 + (18.8515625 * _155)) / (1.0 + (18.6875 * _155)), 78.84375); +#endif _164 = vec4(_144.x, _144.y, _144.z, _114.w); } else { _164 = _114; diff --git a/src/games/rdr2vk/output/compiled/0x14BF23D4.frag.spv b/src/games/rdr2vk/output/compiled/0x14BF23D4.frag.spv index 1d91988f2c64a95a252f4492083b7c90e40a1249..12f61aa97099e1826fa8f30364205e37cc01f861 100644 GIT binary patch literal 28924 zcmcJX2bdMr`TqxYsiN3GQAC=Eh)C}!O)1hr>|U4MyG6FS1;LKJw^*_F7EvRyi#EE9pSkm$Jv(X7^M9WIWKYif{l4YA=RIf6%)N_S)V5!TsC}DggQ#P) zZ*de~n?!A+Hj*}o+Q2MRGIG>V3^t02VmoZQMw>*q(UvZsTT)dUMUS?P zqD^JeLv4Gt9o2@aO;MYsc9PoXYSZPkkJ`qHhkpmPBK=S9(W44ptej@d$?dlHl3ZhH zNp(p>Zdr9*>GE84$*Q{MCiI=r&zL`d#+==9rS#->%(`CN5XZ9Z34)sQc3s#=jx z<0N)fwWZa~WuZYkMGEt8r&)DT4h{L*y0VqI(z@!phFncaX?4D?EVry~Rc%vUZEkwi zimI~w;*#?G!17@e3P18`r~EsqFG=Li>X*fGJJmCa%1f%Nmz9(*mnhqfqD|HR*Kt;^ zIxJV-P*;;%xoV$*E6PVqD2%a*{KUjDw)kH$=1$G+PKY^k7bhX&JiE)Ux~5Tb*Jzvn z6+^y-APTlbQHC?;LM~g&w?>m>?mZ=IX(VqL^;Z91=cZ75RaQ0SbJItU8i>!P(SZNu zv!tPOFC6K_7&ctl_`M)LIhzs4CI*o<#&lg1gB+H{C^m0ZYYMoCRg zNpepWa+;Ld6-T>BuE0WlJDnKQGk)F$YgFhl)w%0x_n5TD|=-B=M^@SU& zuoj$ig*9BTFy4fP+cCC1NV@nSRnJ(gABTEXZACm*h46nkQl&47%B1(1sv|u;Q_Cf{ zK2tkK2aAh~oD_U!bACZXzA@jhLZc;j2QjN;=e=HIpZG+Nw`e?Wb!yWws+T;ix}>Il zZpq4Nl_j;c`Rd?aD~{@3&oPD*s=39}!N*QjURkZ)FBID3nuyCm0_G?Xwe>V0np-=Dz`X7Ixq{Aep& z6g?@-JQ(+B^{hSPyso}%^e8>84vX>I!eJioB>KX0r#SjLqyJI(P@W0u+v$J2fba+` zoZ|(qt2p_$;x-kRob{9-_U)bc7S8tq*Dvu6xdGymXF%#ZLR^g>A91|mXr#E7xwMPM z6l@$Sp6}RJHtnMc!bx6r<>ig}!uqs}c5UIS^Ll4uuCv7@c_dtMG+&%vc5)Ed9MIyY zHyr$mqh;chYy3_Gt`w#|5a24|mb{Cj;ioa5aZ{RP5djW160UcXB+`pa73qUef(eH`nmR=VQonhd_K6)uWy6fV`9 z5P96xN>?1+(h7HoZpF6n%**S=IerE6oYuCoEspNU;B^`N%M8A&6>b;ZBb<(v)a~9@ zHXWjegcnzql;s;{)gG(|@$`}=wujzy3OZ!H+UNDIU!QAQRnHk@owjjQpD$USiw~z< zZBD(%t^SQ>#s&ZL4hmN5> zzp}orvALlz|H2&kOw;0DRZ&^37Sy0~sBct}>kj2MOyl#}C-pC_t8Hp1X(U09-zC&H zmNYdt6pGMZpPHz_hM~UFf;EckE4C^ed_=YV%EcQrUOY7F}6YQ)Rw^mm6L7-K<5g4>4tRJe$47o44q+ zRjO)RMsCTiTZ;|3<#~N)i1vCvq(*$6OLA}4hg`j=wyT5lgC_R~6ql@$ST@DE_REp7Y>Y`G@Dys~P-S27d_FJyq~; z7kw&RQ=$*t$@V5@v2LC)W~U79+zJ;(8w=;g4Uco^PQ(JAI0%+-uZG51`qW^9VN z$8t5}gxkgWaZf29K9Z#z_mQ~d*-#XJ$HJso3%+Z~4IdiIeCLuIS6Cyyd&!L|)L|Fo zVJ-fACzBgCF81NOnVjlF-Del<^h7G)1BAnMsEGB$6}6y0GR7lQ`=c`U$Hw{*d@PLP zpAh3wxnW|cH<-)o0S?y#9Igi#7q166Tn})#9^i02z~Op;!}S1%>jBQL2VA%wtQ#C> znbt^8_QJZsaej%5>tj34DRJ7NEq0tw;^Mm6jx$MITsw1|L*n@O9q$ds;QSG%6>Q-) zD{$Hg)T1c=?v0|e#%tu08#Xds!?iIU73YKg(HM_T*Yvp@rN1&8Yk4%ZhPt}i%TUvRj-;BbAx;rcS4PsQbi4b8EV z>`^cmbD)-dhlvu~wn|R-VOq;A!NZ5f_b&Qv3plOapcohS1Nu<~oYsC^0jKdM6>z+^ zjLmnaIaL~&?@)7NM?^D)cn)y&D|9JGt>I*va+tzV7yD{TF~=S@hYxn_Lvz#~Zu5Yn z{%~6c9BTl__k#9iJh;BXZeYN1zrhU-IC6!f*dBxX4UU4E<9>sqh~~K8 z;3ftf^MsomaNKWj(*utC4Q^(@algUM2{>v5w;z;6X2OQ68eD_zIp|$22 z&AO34G8cNT8CqSQdA$lS#+wVXF3bsiw+!yy3KzxC9mn@GvR@L9G2y(IdW$!Q4|bCS zPNp$;P{4UF)d!sS(lG(&y>xcKc`uz8aNbK71)TTNr2*%?bY;MKFI_8++VJ~|K9X4n zUrj(XAff!4)r{TSsTZjlGq=Y*n_d>!k_0c@!*VG;uXcunzquh z2Auy~{R&;mF%}$kw;euk)Xp64aK7(}=e1(**v@Oko;K&T@_mo5*UI-joY$&%;On)b zW{&5z8W?b1E8q9T%ii~J+4~+Yd*8!l?|V4r*-ve9FmCp~$1Z!{!-e-fYju)1){gtv zn6=|#o;+{3`W3pA^Ln}F*m=Er%htZQ<2y9qyk3(7&g(Tj;JjWl1J3K^bBl4kUJC*{ zub0m)KR3yRbBnotB45VvnZfylnv(~N$I=DU6+aGR6`C+p{jjNmR@#=d6bfE{I5Th1+ig24ie}-i0 z<#^{x{^^4^h8SNW97V_MI#@YSw{>caNwduxl3(e0SeRgaFfwcj5l=TDrJ#(7Wp#Tz@VxBgGUr~YN$c*lKT7$5A=+3o|$`<~csSK|+b zpIrZZ8uugNK?CaUbDWQb@xczA{XUUAV8jy-7=J2!?1P(5GX6~X)HPR6bezwH@xcxq zJoEfQja(TA8{7XN*|iMo*+vU=Ti1SR{%wV?J?6x;o<+jgz=wXt!cE;bPv_ZAc;-1f zrE&C645D@4zMtmXK^PzG(0N`RCHMVua2ltR@O~dOr1S19y#I42X-^c^cLQO3utVp0 zcaco4jDwBi_mF)4L$8c5o+kWe|B(ZY>x91;J8-gbz3>@j2c`2kMEKH+j(gDKHwfc{ z9Xk6pN&oT zUGAST)%hGIj1P9`T#v&glPlw3WB;QikH7zoG_PZXU%F*b8h^F$iq&VQ>vpU#KG>mi zoZ}=PzSUjn{c^nU8y`KF#yvrJ($JmLx}7MD4|eDr=OoGF?_Hh7Ia#>#POB$ce~R$W zcRD0p|5JtW!4940dzxf&WgKkm|1-(&^?xbdU*`#TUcXO@&lkRVzsuA4ULcGQcIX`E zLdkn{yF2x}D8^&b`CcrX@A=nBUY9k(_+W?5aW0Ykx97*EaV`};=e3`u`~5QE&6YN% z^SxXcAMDV1zE?;lSH{7{@voCyUjD1p|4w1fK{wmoCw|dA^U{6xfbgWwC#CaQFTCfT zzf1FcM0o9tk~Gi9gnJH|JHhjPMi?JA^Dl_Q*3IL;DQ?ZhJtiB!E&RdS?b7;vCX9`n z<9#6xTQ~b}tOv`p&vZ%S?J9iQWxdn+Ocs9k*fY}nrwH#g@Ysv=d*p5 zjQ13NtL-^y+@-?v|M6^kU+*Q14|eG6x3}c^!_QC0-$%IknU3l6ZC~M2hM$$rcRyi# zutVqh?k|~K83!B3UnV)~-7j62GVtw}O|`xp94$@rt_1(~f^@$h3_j-k6jy^M_uPGu z-V)|XTqE2|Z*6?P!n@D^&(=$0KCE#Vi+8j~)brjAHzC1~CLHfxkHvN^?^fW))wq~H z_zAUQVdDKtGVz#$>+@8>e)0~3HSVcwnM_hbpgaqOqJLf^v8?uD_K8!XYUkkCxP*pM|c?%V*tjwuw_gz-yv{qrIB}#jNPDw z17io~y92JRHR4W^iGl6T>KTLgVQj&CuK?$Hj27lIH1=a8Ge>eI?_GtF;lc}lE_^1- zh6`K908dFc=f`&wT;#W#WNbbDQpxNAFk>Aoe0p&9E*HK&I76$2*XS(tSyUs84|eDr zr&jWP!I@nr{9Sp=*;_BXr2qKz3_nB|AMDUMPJ`rIb=Dg<3QyOWZQLY$cX0ML3*&0)4!d+#ITJ>Sj1 zkt>+b@o?zBNMzzT*Un0W?|6(i5$3bGaX(?sEHHk9g>|LRrJaS}=sIgM@ux}F5b-=1 zA3Qzb?7zG4hSl>Y8_y8lxA)34-b~>G-z-h{VLk{VILV z%n@GthXw1sx91AugB?1@nJ4+@k*z>-he}UdDS0KmF%fhZrvv{_>}z`#8?%&PSc+O5y)p?fnRO5NaGtM^KB>V}o!KarRe(?6&Rx*CPKiIFg zF#PJoua9JW;djxU$J)XXgPi(FhU5834E9KW$?#yFZ3ESKHiCH$4p!SyZK-1L{2QW% z4LmkH|At8(s$8gEm!7miYI3py(b1_f2k;06R&N+^f>>QZ`7(4VlL&vI72cE5- z!?=V$Liuoij2DKxMLwLh6C}g&F7}OLPLj;^z3kCVR9m9Py@5@~2>B608wlDrp7W_;q~kDk0a zFVKCb*-&R{N^M=AJtY&{w&2hfAM#+W_fli6d5>`(dndftdLLmpul2r?;k?%SOXgy& z(e0=9j2d|%JFf#Jle^a~CmD{$<#i+P1H_@{Uu&?&2T86`5APb5NG2ZZ<$GY6Ft%L8 z!3NGgrIPVs{p?dFj1S}EgAJU0@{;jkJ?&F2j1T(>A8g<}*GkFZT&slPXk4D_*~$D4 z6^{+?S;VVQ4>v`3F`r>pO6GGAHK%#4R*6Sr`R<;O%$1Wc*H3a}Car41cm>bLO2X8DID=V&Kk_OwIM^i1l4`kHMdv@cfPf z8$Mez$73a<^BCtyhI4M`O6GGl{OV-fpGoGkH#+;BCpq*xUzpF|@bq5=RAB?^Amq=z!!gK3VVR&pDQ-6YJKz}xR;$*c)F&*2uy#6#y?e=gZ;f<9c6TZLH@YR;N~v8QgV z*=>?5)WYY)?ZWV`?H!V-ZFryjLKxojzEd)O@b+6L8Ncv8`K2(t=W~~2eBr$&cT4t~ zp!YoQNqE)-8?VV)$>?0$dnLm;xBDcsCh)H9{gPP|boP5da_IMq4tWJYxVntUnd)$g|7+2@hn`R)BbhIZ>Yh$-6Woz-b{3iOMcYp zIrZ>fpSLB$g?r%-!tl0vC$S0l!n@+&ZS%*(Cfp0}iG#PzpCnU{zG|M|`;y_k7e0{8 z_{7H_J$b*S9^DkZAAh0#OSR9{I78gRxL+kU9{X$I?AU)62k-m(FOun(LVb;Uv4Hz5iizH`jT`UgXwQMIj zTgz|{wwE3o&$)wSV!)Gg{CQlmbL=P?&N+0FOpfdc?7`Te=U&@Dau4-#o*Ejj@o4yOGA|A(?qIXTGBVd(5pQyGGPtYxJ4CdWwU0-M5j9AG~YZOER%t zTQGLcp?9Ju2fh~pv$vQ7`I5J7`$~4c*n&e_d|b!=lF7H9de3P)$?&e@0LgH!7vs*O=2FJ$Mnqh#`74t$pb_WXBBbj;s*3=s$Kx($^Kx3ikxLxxG_%;#)I zf1LIr@9V=QqvM>g{|Mp1YUn)fNXg{lx`VNE&Z84OIrDuJm|8Mt=Epp3J65vihb=g? z#mBbeC1XQezPAEn%l;=Wd)~GaC3`)w1&6ly*mf7m*btZRzrddBu8A(J@nmuEUGxl~ zZc`*v&mGm!@l2$Kjxkjnaa}JkJ|2I!M9=usC4>K|h-20G4wNzY&YO$xvd74d_oq&Q z%Wa?skat5EC!Dnaic^SMW!Cw0lg&8+|rko@U&m0*aZ2MCsV;{cb zoF)v9J^6ucf2L&Y!)NMQ!tmIWKiD-pM=~+|KL0bx?A?KC==isD_%Tm(_B&rPxf)*} znbeXFD$>eK%on*!^zFsmuybH7cZcxJqJ9O+(IPX!u zciuvctDBnlXm`o%(Jj?`Pu?uKLxAtf;CnOp{tSLFgCEY|M-%Klb&D{0gnRbq!tl1a zHL(fz=~{8{tCKV9Hp%$GQ&Z*v=bGIv8SVku&r^Sg8r%xCZ)AU`dM?f&biYu8qdv&g zbX|hso!i}#v-#g64xT)yAJ}=^Cz(9ZQA;o~btIQ@s(yR*52$rf!yh~J9&^29#tiSn zhlJsY#TtM;<|C3l=EIV~*s&Jjn2!lFCjJkrp@UOTG8nlaj-|_H=?h&tD4@BitKL3B!{={$ShxMl$x{K6yqM9(&@0 zU6*Gi6T|p9$>iyC=6T83z}x1xlJW7G@Pgz^)ZlINqU12nOTyT}+va7-j39worp-&S1}( z*aOtK`l|VC>leuV6PdYhr$$}2S5IBor$4HpbDeldg}7^g;rY8Ap}uzp_X{v~0|Lx= zBLd7ij0`aPF#$$DHo)ll`y3vhp1;cx;@KHIKZ6$qn0Wks4*P?b1(@+G1B|{Z!1yf> zF!uay4#xu@m0<7nzl&oXd=`Hr8E%CdXYqIHxj2i_eX9n?x*>bdd@q@G=KX?w@DDW& z6~AAg`$3KU0*@~-#wjLy>L<0{YV0@GAMCgrDhP4CcQ+E|-)6&O&meHN-&iu7?KhFk zUWdn?{R8K7YBR}j;kmZCFuZNLB{tz%)?FO@YTXw+Besx?A3Wo*FX3G0EhWRb&Ra=_ z>!C)Sd#dN6&giyQgQHf+p5Hc-!#ej8)=yk#bgnZzzQnL^AIaQ*u1#NIY6(xyz173n zzQ1HR+ixeCTEb(`y#?nwZ7&%vtmQyqc-!od*o3tlBo5xS+)*-q@QlMf3+Gx6mJH`w z?j#w`wcJ@U7qvt;L=BF5AbWm8C5N>fCaj;hmgrndczlUr-%*m;H{{2e0rnX=S~6!O zJbKO;IQx#1Or6kio`CH;UNXM$=sADj@a0~aD4BT1lO%J`@C-!1i!e6u_;WtN*?zKQ zIDaQFMY4XPscPu(;S7VvhrK;jGTc2HW1jGI$#B!u*t@%{=c3-|c2k3+X2`_hOqd}# ztoKY|{lxV~=X%5AOAP0|hh%DDJV$ak@43R*z=oPQB$Kz_ zLl2S+N8_^|J|&XzLr2U5)WbPusbtp8xJ(!ukCB&59%m-;$|Yk1&-uU@6_SaAjxm<0 zhjYw>CBvcP`3QFWYRR0#=$5Mo^A|JNpEZ(scg6=DHkIn(@yF%}$#6askCc448a(#3 z>fvmEx@0)ppCS1)HF)fgQV(bQGbO|MIeM04{lxbOI^QGke(&NQ9i+y^=lL;;%d>t5 zHTK?)>is@-uKdFHfvXej@vjud&-q>@e1#f3`Qi^}`)ee_+5TF|U&tRGd*Z|S{J&l@ zT=k{l5+%8NU=8G+u^PF|LLo#avkDl0Y_@e)XWH@xhy;IG;zm$wGyuVAi zOENy_m?Jox<1pEC?X1Q=U>-x&nB#Eu9`|1P!Mo=73&Y)~W}62S8-Hi?kg$H@&z0!b ztJ(iy$q%Su`=8_o?=^d0m^r&K zFXDY54qNp0{ZMk~`;oBMnw~o0`>|wf(R-XvBvT_dkMpTG?9qEKd@fl(asAMLrsf>J zluQn`{YqFras9rKfZqG&>qJNWm=AHWr+(;MKh}CzHLi(jK0hV}@-C98U*TvOCsquGhf`M-x6W6xFZ8nsspY@AC6VeDLw zj>2$mu162KgHEw?0G6-}(%3 zw+!ZQeTI7e)@O+MTc2R&JWqWWVecq-$-o>HF89Doi>%sJa}G{9~hb3 z_-{semt_8%OXgm}1|2r!3-9N9cgdX7@aUO89PjGn!`S5Dv3p4N*vu8|SX)Wv*$+=F z<_?FSci8nNZM`ZBm0OL0%!OWLA^%Z6ge3k_F6K3DD zw&WIK$cM4X!DEkK%8E{NVk0XRa{+4K+M*!C~A3Wy=-DJwTYaIrWZvfc)Sc_dwzO z;nau=4&yG9EmwHvA0+IvwnQ>xl&bf6TA~=fN9ap4IG@248C(@$?y>p=vmV4=riM)1 zvP33kc_I_9GLebJzeQ#K+*8XXle3@EHNtS!i4AL5EBPSxe)p~uhQpR|(ZRW1SM{WH>iJ^oMhJD@s5`a=jIxpAkH-=4tDHwc<*!eMTHtyM>X&5vOvxUa=B#oe5HEt z`BN2-z3%)@7RJZ_{^b;5xE10!gHM;t#Tkt5G_^C;h>PqvXGmr|_61{rIk)h~79ZQ5 zC7GO!&lV;J@AY$pv4M9yxG)}Z?SHOh#-v`zt{3;n!D?LLc~d1!PRrH1F6Yb7X94%} z1p$V?ID;<<@Ol!qk=ZqIO`vi(Mp{@0#GzQ)@V{-=&h_&{0<~GBsVJ=6A@; zCG#GQ4LWRC7kKA!rDXDO?5l;b!Im`uTX(HwkIQ<1v12W`-~I0$t{1Kl#veQMK67u7 z%$V5V%euokpPMDSF03IKJJ!#0qkcaZ=DiUcbl9*5;2rBW$;3y;`hxwgal2%m+3>di zg=Au2&-#OHf2U;Z;nA}nh=I&rK#$Bma4pF5Zs7syvBwTQcI-cN9{WDYaOl`8V2^#j zWZnbd(X+SU?E8RZIPPcU@P4k5A6IxkR||7L*Q)pX^t19~9~-|KVD6vS672u>?MdNB z)gD)SLXBKFZ+|TrozKUoCBr?X#`*Y+dM?gKbiYx1L5+NnJ*Vd+lPB{fH?ZsRykyQP zc;*bopE%C%Malmzzn8?LbAB&NhGWgh?-j{h2H*YaJ-==|RU{82I-&$=7*UOZ3zpM>GxQ=@(#sOO@7=-yX@BPV2!`LSe= z`H^Ig`H5t7)RMfxQ#2NNe&&9#p=8MGUl)&aoaq#|L(2XFtsNVY$*&^w>MN+xgH{!OxN@k7ttSOawS`@3ZPjK7hLji2$~O2!5r z8_t&RB$KPp*6)Skuw@K%F{j#l4e0IvgJf*jbI9S|Y81~E?yUx4*0D*w&xzuqmc7+g ze5U}jW}Or4b^l4@c-?tVx_5|T*Q`;r074zG(Im|s_Mz@8}BiENPNoZ zyn?*K_^5(Oqpyq?gch-#G^E^F4l3T#>6^OW3`3HO`MirI3+(=S3U6{cyQjB z{KV3On7SU55*sEwMMAENH74p#ja@2Sm_Oy}0`-S|9W6dNuP|>y;F}s#JO0A2NaEv@ zIC0T<9j(9cnMwS*zwngUeDQeute{TLWW05vu3N#GZR45kV(MgS49*pw(9*e%pm?Tp z&SiW;mUHfa_=Hx@IYaRYt(~U@yp8kX0YBF{=RH25t@DxrZ|A&Jz}t(b1@&?ER8MgK znT~TRU8aU$jofoAioUD?XSED4_h7tz!iRe?-X^gR+rgPd@!X^F%=SSH_i9}GLmyvC z__fjy@WUFTeK{7`vy?Sq|0Uq9&Ncpfz}v(#rD4C}T(;lv=zhba`wfroH$1xE@aTTS zqx%hy?l(NT-|*;u!;|+LU39qy2_Q`wfrw8y@X9Jlb#8Ge)|2X3IF8<;=plSOa^@I}9VfvjW`C_i`CLt7UMn zVqclyzIP7>JaIm-Z%T0A`^^dN`L-r_&}-)A-5J+TgL#L>+qH`2D$fGd$Mc*EezQjQ zg);?ToWyVW3r`82GxVXSGTSq;zBrfZG<6JJMnp#px}1nkWd*v+B074A-{gpnKBAiw z(NQzHB@rF{M0ZC-M^Dk+9nsNObgLpddW&vNM9001Zk>d^VXnH8su5mKnDt^`qY*oM zY&>cw5B3J39Uisw+@&{`k7q6Z^CaYh`HLN$@uGYw!Lz5BZ1ja^4j1d;G97cF zOO5D=LC4;iUrMOsS!Oz7@Z;>5&U#fjqO)FAkLavdwIVv}RYpW-y<*R74(nB;h|YS| zG@_$c>T4O%@!Unnjb!1BqT{)Xu6snsa~ECDh>qtjy1o*6 zbwVS(sLm^FGZMGTRVQ%ubhaV^~>tV&-!KcqqBZd zztv*>8W7Q0zlKC~*015xvDW->ju8P*37(s*p{H#247Iaj-1Z?ie6C_A7th$b!k0z3 z?IU)cgZ8|uq@7}(y2`=+fU63z-V8}K`Lj+q_6%{>hz_YM&icUUvC{{OsjI$m9?Xud zvSz6f`qm6>aC|xY=8Nqd zQyR%dPP0EF%*8r)XtenPW%ysr$wiK56EN_l1~~6fE?dv;1dXwtJ;LN=K6391ZC3Bg z;^en_-Vx?ZR+s-*A*K%&|F!Vq)fs;7zY$-5*TbF7{!j6h<1+pJ`Bt15{IHqdzl676 ze~aJ8{}%sk%$1(^JMke6vOC&+_`NtW_+hg=KL|gTdt*oAKZMg8tb_Z7rj*xU z>q?_Z8TEaiOTuGAeZNY<-&pR?*K+VVcRH^K-?X}`B>a- zV)2p@ey@0`kQ4WixUSu{cN@eHm+zHB{$0YXlXWmZocAd@^WP(WbL5Qkz1*jfv-*Pg zFr7I&Q+vgU!4I3|*(ZD;a&NpS9=oFGjK3s4NN3gZ>=!2nKWvugfN&YzQ^sEwKdo`L zpZQnBcSO$kL2+X6!)9mvRbgsn9(*j{Yr?-SddJVw>*9kdpW12mH^jf*bjPz+=bPfh z;D^op-V$CvsjBb$+u|P;Tk3h=5$}KE)t#2-U2$UY!)AHj6YigNr_X;#JoRA7XU+b; z_`=e^N++gTyn4X_aEZK;D^of zd@S6j$`+6NB;aj*y`PHb*ZSG}`#&;+2L@@%4To zP7Hq7Y`tF!Q!De}WBI=lE?3Y$$N1Oc7iUcOK7AuT^2lhf^Pl3x;D^oPz7_s$|6Y&# zm-yy7-}`$1Ek5+)0lTcf--#20A2!SLz3|t)PVF-OgZKk&n)rHu6o0?>0$=Y>;>6&G z&DQ&~FtsudK9=ve@Dt_hdtLt#UpMDQ|7`h-I6mlkA6ne6;!~?u_CEY3-g9X)&-1(Z z=3kHbx%fkz82qqVo)g0LzH91vPKsahMWL_nPw^426|L`-I5GHPv-Rkw>LJ~ZT1xLX>*r&ovGr);D^op(uA+A@r?JOxcK3(Uh}*q#5=WY;rDAv zabobpW_d~pXK$P9c}k0yZZ_ASPi4d(ZFZISv#dBV_+hj4mJ_B{=E2AErwh;caEjMe zUOZlFllQZNI6mm3{XAW~`nYVLw_<2VAN8vwKJeLgZbJ>kv{~6-3FHib?QbQac^wGL%if`NhgwI_+ zZ`t_F4)XBX@hov-@WW<#&K4fiu9U|$6u)mtQ_tH-{LAw5{b#wx;>6&G&GIx6-tb)= z&vTCWqOULU^)?lMWl&MSnu!yGA2wTWb75*_9(*i+3*q!~Z+TrU#a}Uz#aouk z@%t-FoEZGDnO`g6d;6~U`=T{IFBIKhZN#VVDDkZA+qvSz;D^ofv=ttBMxp0vC%&rt zLchP-ix-wC>Tk9z@ZR_4LS@^=)jb>4@*-cI7*=cW04oy9k;-RpIpCr%80 z*ep+u@V;hse4o0AA5FX6^L7=#szR!t`)=aI;D^ofbQivV-Uh$_dWau>tEs>L&lg{D z$1*?9x#Gm&ht1a8QPIpR`rV(`Oec}5B!uh7-!kBd*aVuYXP%fy>LI?~shCr%80flbdD zer6jbPOZ#?kL4dNy!G}OUf1Q~r`}8NVD^0RCRwZfIWtC_82qrA-xb3BZ(ZYcjTIk% z_-~$focPFJ_WQn#7bgZkY?kLr;h)BD_W29&*7y-t`~nFk+>pC$av z_UpW^zlp!_$FH7$ws`MLdwHF6#EHQVo8_4+JagcFkGo#{RL7$Gcb<6h6YG87ZV)F1 zKWvs~zVP%-*ZVoSQT)z_9`}7*fdAA*zTTU}iNOz>t#_d?wK5MrmVc4(_7xxbdT$m# z^QGecd|oU*qT2y~&fFqS41U-w&#l5s*Vfo={5J7fU5kD`TOz(?Z_J<1OT~%751Yl^ zE^7Y;+P7Hq7Y`x2csg-%~vHW)l7hE*o*L$~k{;DI} z&AviB?U@bUmzCng;D^op?h(#A*~05uC4Q<*QGZv9-#T-f@7ulN#Nda`^4uqURmM?2 zCu_vFF5Bw$+%I13<)WX@)`}B@A2wU>1H#nGJos4tb;6x16`kh?#dkEV=K0r)kKFos zJM!@P>LGDr@WW<#9u_`cqN1<&5%Dz(i`KhA{HJfTeBU;T6N4W%%k!x4kMSef#vc>E zZ}f1l=W+4X*A|`UC&Y=t51XxblQ6Y14?dRfN#SMHKK1v=Q{qn_+2Zemzl+a#>NbC_ zZWbp7KWvugY2oVC_IjRY#Fus&;OAzG`2517{yy3&P7Hq7EYCLK4QtzYp6%j$&VAAA z*&$x@=c4z~v*N_yht1ZzQpCbtcV=7P&sW8#Reaj(d`+Af{IFS`*M%#m zSMa{PAwIU!2+#Yb_}9ngb+G&5EpcM-!)AHj7Vh(EL(lV$`0R&X@Os`AZjUxCW3#-UABy9H9i?%O zwU8Gd%lECYF0cPz0iUzm&c(mQ@j=gM`tL$rZv{v7--mwujE&g*KS)n5;_$Kge-w^4 zzSigeNnEG!IkW$q;5o*R2Ym7#IbP36@ei)~K>L#x`2H!54|>y`5~fbpf{wg=Nsccz z%YB-3-((%~wHM=y^w^vn%abCG4|>z33bQAy+j6H#hc7nEU0nFs8$~}qmJr|b^8G$n zN%4EXd&qey@k0+3J^xFKk6qf&?PbLEyJP2N#aFIa;k=yqlj%j@3#W^BI62&(8|B5n zJyi64eFbr1@WW{JMVMR2L@(KWuhx&k&|o=E2AE*AN~wcbKoQrg(ablU`>n@y)H@@#nyq z;>6&G&GOV1Uf86M$JG%}pIGxbvuB9!7~RwBtSe3oe%Q>fp73iE=lkcZ`r_?2f8q5t z5Wg&~zu(tqi4%h#He2u6!qmz<_}Km4P?&q&#O7@z{ef>^_IVnMFK+q%PO~==zqZ>J z{~q)labobpW`0eDANga1=V>PX`@ZWvPjm4x{U7xDTZj{bA2zGMr7*QJ4?dPZQ+VUl z>vN1}i8mXucDM0X;)7=|^!I9OabobpW`1pi7e6`pIpgPwcQ4-1^R^Z5T&cC!*-o4o z{IFSEd*M;@3VglU;^X%`zRT<##A`46(EHv|oEZGD*?Kz(Q!De}WAUAZfB&iI_bca# zAKKL2^XG^!Jo%-+|GS72gC91_(-pqF=<`T7@q#0Z{k(P;U({oTe@^TnP7Hq7EYJDE z6;djBKXb+Fk6h{ZV^8s%qr-f?y~K&Z51XyGw=lIb4?dQ^kMKLQQge*=72o;scHiHA z;!ic`KWvs~u<+T-2K)R& z#2c5*_Vr&Vo>Sp&U+++HV(`Oe>m4Rct;~ZDdVY=>F3j)L_GNeshQpbLkCQT#0H)xzMu~_)_B>qx_^E>3jN&HxZR}kiJx-B36B~+(z z>{XI@;|OQ|P7zLguL#FJJi^I0Dv1{+@mUd0{IVp@-`rY#*dI*do02$xa~t*F8uCus z&v}Z!NwPrFMZ3)3?c5<*BH{0O%;(NfKVLq?ESC_6-s0{SCXT=JvA7k&=;wxUD}{+g z-#M1}-!Y&g2Ya(hLVxd(kb`rwT7n+V-|gHlSrhWL8XuIblMGdk^%@_N;Der+hc#}L zY>*5K>v&WcKlB5oW1hz)=($)Yx+f&ekIib_By2UZ1~`7$`TL*0OW21eCANmmq5eA6 z!{1aqEkUdalzYT)37tcxf+aUI0 zkH+UE_&g`Uhu*y)q5l5*3k%N0-cX00OUEO)2Zzgw|BDjx;8#qtPr|yn@37gv>=#DI z-$&WH4+x_-pI3zOd0ApU2Zhm_&#S`tERvYdYr^Qw=XGK0f%&{49r^)b-ERsrKlzEr zPTenQ#P*w3!#=a8>@9g%@7oe`n=d@-OAK|;>vtve`W=bY@m{F6ULO)iXT5%37@hU{ zLt!p@jqL+Tu9`qyV5{qhFtuCXJ`zTUa9Q7|n`a(&{ueLw_#cvb67;r*9}AO@e%U?n zi7>ugObq?An9qcXVSZxpL1!_a3ll>>E#{~&F`Or2@Ihy5{X&=+TkDs? z=nyVj>ymJN|B()#;}Y^6(}>P$_*EEP^lbhnjvgO+c~WvhLSL+xe};N{9-I;<4!y;l zrecVrD2pp5jQ%F&E-q7wFtO;%N`o#HAI8vLR-Hm$Jk-|+ebU5P(=VaT<|r*aI;*XW zcqs|`x#7HJg-c4XSzNksG_Jfje@lkm;wlLDR&H#zhSP<~hs|oOB&>hIGYor03Hwq( zy2`@5OWAYkhvRSds>1Yyvt+eZlMX#T^rX6Qa!<~X4!y0rhA?sHEv}|;a!+bWhu+q6 zrZBPSttYjG^)KiNc3WqiP)|?rv7YeR0GrjHA&kyyt1C=T(9aEfQcswkV6(XT!qK<} z;`9W)#hoQgPq5h<&K4#gHmkLvu>J)-!5-~NBXN4dp3@UJ{_Gn)Ya&cf7D=qObEHFW zd)rhvxhKt}LvQPDE=(MHi)$gA+>@5lp||y93KNUodXgoqe?d>M+d5l?dU}G7^@Pu7 z*sT86!sx8FHp27-z3uI}!t?~2#kCcV#J~^QeeYN_#NQd5hx`sZ{-gc7?z4>$(=D8dF z{MAD`^!8poUzqvHPds+&=5sJM-j%%5cz@-JQxEUep2FldUwG7)81wB-oW!30eT2~= zTnxNB%)hS`QU8A8=#UionQ#V5h+iN*Iq|a`{lOBOa{xFLh4`H870;$YvhnU8sF55z zy9W!S-z*=_mMQkPf}w#}kE#L(iO}G@`RPCkg*wb552WpDkgpt`bJqTQ%|- ze5x=PpUbdKkxZ9xuEEyxtA&}{__UB)o!5xtgPuAIHKOC}GY9#|Yipk&Opl|znJJFm z;^EPF^4R>>3Nwf0yH1#XkdJscK4$-$aPnTymJYq`R>KX#)X15@AC3=p?zJ0*x!2}vv>XeB(c9xo#KcVlHe;C95RN1tu@g#5;sp zH)~#|5pHwdDQtVh9xNA6uIn!8(A&P>EleDG+uIewNeli!d5T7@Te~_wvYD-Q}4YRZB1*0(c3=WFO1Iiajh^q+sAdnT+qaFv=r%~~bH}5?`WO8FVPK!9v&b|4F=1>xCoKMP z@rNYXY~Ck?sm1mkj-S>1WN4@6O~P>Yk~OnF)@ijUkH{UJ7)=zxlQD0)rcbhOiNiE+RCq_#?lhjT~;Hx@M{q2 zZw=$l4s~Zmd>Vy5e1;>2x;16+UdPr%V)0Fdu{V_Pp2xqrq*+8bKj>RX@W*cTWC>HJ z&DBbnxmrpxCD_?V;#*6w5l`LZ!~ajM5nFUW(#5%=`%zAu{V1=|=5H&E-fC|r%wCxA z*_OH6OYp^RvDw1W*bd^+b^Tyvp}R0O zm~RhZ+rMtY*lqvL4{hup>me`x>>sx1{#6#|I$dJtsbYvLXsje*FRN&@T6ziN123+z zj|4ya`Jk^b=N`T7LqB2kCbo_Xq_Z`X7eDGmAFZ>xI9IgJs^Zj4oz*1Nd4@)-bD%Ij zR_7pL{H&(I!stw_rXkWW{7KQtSzCY42^uZ&%HWK!Z|a3 zaT32YiN}-p=m=-s`4LY3E0Xy5Bt9X+iJus9+q2=~tbum~bzUT4FX%Hio=vO)y~SK2 z9E}+vP7L4sU?YZgq9>+?#*q^C=NH-XG;;9{M1PrNoP@mt+dP*GlZSll102jAjFRyG zxI@ijB%Et}u;IhLpttV}#|o!Q&|_zx(eZAe9_FS7oBK*(o0~m_Tdo4(G7|LUVvo^* z+23ewlf*g8_+YcS(MRW|2Ag}bF!kZf`GA}4Dq;Fzyigb)-rMZO6bU})Im7Vi8LlVJ zRZ3!KxUMkkudmV0=}ckr!8zO4g`ECP7v`dW(==WqnJpm)*lN30nB1&`d~h(iW=O1m fvxMtN@WDpi=*UN2%Qr`ueAvO*spXVTA8Y&{1zCIT diff --git a/src/games/rdr2vk/output/compiled/0x1B0D650C.frag.spv b/src/games/rdr2vk/output/compiled/0x1B0D650C.frag.spv index cc5584706622a0630dd55864592dcc5e8151e349..5c21558f28f39c0f139d78c9cdb4dd801e6710ef 100644 GIT binary patch literal 28464 zcmcJX2bdMr`TqxYsiIf_1rb3I5drBPsR}AhMeJTLyLZ`@ZEitOqhjwZ_TFo3k=PK# z7NfDm5{)$)V~fU;W=r(<{mh;3?Ab|Tp6CBO|H+=5_xpXzdCz;!oSAzUx1??V4pI9y z(FRe+XxGvxzBY;4Mr|Z*5Veo{*>m@rJFKy(eAwtQ!!g(>Dv9l|=_-U9ZSk^s`KsC| zdbDj6Z7P$VYD3jVs4Z7}Q*D$C=csM082EHhE7AYt5b>%B^Wp&kc4Y`_pS#_bVJh!B7Wo=VkZEjZ8@~ZN} zUipf`po$Tbia+vcr~Esq&nI$c^-E&8ooX0G75VDwCHb;t5@owlw5j?Z9cRVLBXSiD zbv3yaEB70;ykgX(;uxFAPfQ$R^ZylN-i+KXgqS;TuOvjAXAk*R*ECA*8g2EzV#v1` zM8Os*%1Gv1%wp(bBlbwr`uLurofqapustoG3e@jKU+)oBawIeP|M zxVV1Y)GO5R9o^a{-h8a_sK92Na^ z{Ys;KB)7!q7#$#7ykY)rTgtaI+F$y3U#f4Xv-jZGUi-9Yp5AGqWBY^D7jLZMT5!%4 z*Kpw;@g^+ZjPEi3J~(&!xZ zje5}Jq(pbVF#7@dQuVAG@~!HNXK!hAujKlCL!Nn2?*}q?O$M*c;Pn~&Xe(S2Jt@pQ z824%QtUcqruD*Qi7(K0yi1FLPVIJ=!`r>n^H2N~5|6cfTo(byP>3_U*@CYoP<3+Bk zIQh5YHWing^^_p??VI=(&-WtNKk*H@f#Q;9KJ_Ubx>j;=?b=0mAg7PI zVlH=z3&&cW!JD*gt=}wzyJzqg8N6i%_ilwtqJF~McjP)iaz0tR?Ii0AXs*@*P?I68 z{7R!?89Y3LM`iHX3?A1CmqdBtd3wl_M;Y?SqFj(XGvSvaCwvvM9<1b6FL`CIMpi|9 zfw1bF<9!yZ&Z=%4(B#Ze}h`1>UWAwyal- zh0TqXE%!yon3FnUNwxE;;u|O4o%oc*pYPFg9y}}m@LYN|gI~+w55c;pivI1QPlRjo z`oNuRZ(^3}<_TkV%HYnea7nbWaBlplI5)m`$c--MwmI^M(YX<0s6%N4=E~I!Pcip6 z$FB8CM|fn4amm$;N-_6su4Z(KxleO7V^YjLnX4I_V(!6Q&A1eE&*f^yrY1BrO{l; zVQm-3KEuZ|9{TDSkL06VjB7IXhsF946RdA4+UG{-IYte^T&^)VtT8yOF&G!u7#!9Z z9M%{d))*Yt7#!9Z9M%||tub6!W7YzW^GS8r)4I48aGXivG}{)AvqzkET?@yVBThT7 zh2xwN7uVKfaJGo!BXzvqjKP^AE?yJcagK;f>Ru9mpGMJHvs2}h8!<9n!z*GuDvpW% z?ii0w*K}=+$He)ff2N4zT*0ptaXQxTz(TAqGMCpE9Ih`oTwgFQUSDvyzTj|u!QuLX z!}SG+>kAIo7aXoH^LbrdZhS7jsh9(pi#c$A@Vz8jY`=`E56!9aXn(%28`LnWh}3 zaMZ=VnnujAht1)G9sAH6wTJ5#aMT}ei-2Pd;P|f3zKjRgH{e(cxB&sjdcX||IPN#N zApu9Oa2$RfgZmARf}7)hgQKYCxZmI=2ORT+n-*}~Z*a2$j{6O6PQY=$!OaagY6Q11 z;JPQ=qJZm>aQg<_<_UM8`q^4*p1Z6Y`6F`?n`^dKm*-fYB8+i2Vb+B?q3@o-JzC+C z_*vrke(v>8;xQ(i_flW+=J3I8TENLP<_-xs@1^>H^IkeO;Jla42{`Yi^8?O%>EeL% zUb;NsyqB&HIPazF#Zeo6@6b;&>tMW%WabOzIf?%G0HfzZ&$AOfoN{5=g;HZ=B@PT8l=5UAeeM&snmbJE>Ys(%q=i2%{#n-jYp+W`UR z+71dh*Vgwb@v`?RT=qVN%igDO+4~fZdG=SE7L1#{PqEA1r*PqY%3ASzCf1Jo&6u_0 zqHa7NxcV2nl=FJI=Gb|?`pVY6xZ^uK;JjYb0?z9-E8x6da{|um<#UE{y#0vz9wJB@EOB%jycSc&d)sW6=VFlIFon|q9+zIbvz`%t|NM$TRxvQ(g^A=gZ!{ruEy0}_yqNR0lLtGPmECuK2^9)pg&VG^>V!P zB>(Wi8^eq*6ON)|rw&mL)NQpIW72H%hU8azU%iv@o5EKuzj>!2%8;DjQo{zGcv~p9 zch#d~ZSD65$%T`qq;cL8e(~l`>#YBy@M(XYKhbgD7sdxWbhi6I^8P1vpKAP}@RRGF zPvd?hJa}N;gO2mDFh1C!v)`X24;=NxL&l#7AGdbXDaM})pLXfBlO5;J!uVi^4xV{_ zrbe!egN^OKlk8fC^=zXBy0dHlH2=23*B^UQTF(+;Y~Vw`QsJf^-O_os6P|PK&@_&I zwI8ki`u#ND4#N0ghtBirD0!RDhoo^j2_Nu5Lptxy!UsNgvi3xAeK!!s2Rn40cNfXz z$~f3Keox64Jp9Tiix!-Oxt`1rLRzd;xu?9kb- zQS#~c*RMBj5I8 z?@RqIj`6s3zLy9WdjD;T*X2@Se6U03IG0KO`}5<|IF}2b``S;_{eFe;W{Vrs`CciE z4|eE0->W2(E8}3}_%}$dsQ6{-e~&QdpquR;6u;;F^V5CyknohwC#UmSC%pIGzfJRe zMEH)``83bRgnJL0H_7vTMi?JA^Dl_Q*3IL;DelrsdQLNbTlj-JwoU8zsW3Kfj`x{3 zY~Ad?u^ueXKGP+QH&yubEBdDMnI`=1ac8FaPZ!>2_DSiw&k)83J9LgaQ}R<6-JI58 zmTu z5-%0*qqjD`58>VC|7Yu?G1qGx#^N3A5%s)x!%a%?qY1~m*JH6=%exi$aWyXH4}LePwFf#GNi+OV4GekCA*pdU7?*O=Z$#X}^*bPrO zFm_xJ>xI;Or|G z#s@oeJ_`zx$(3=i>7#F2_$=;yKyAWi{(tqM4>D`gthlT#@mUivpYg-}bA)hL*)Wgz zo)cy)?vtk^bB?Hs@v9QBDHZOcZ!P#7&0d3dk3QSThnQO_5}&j2-c*<~1B~C6B(5XMxR3A~U3Z;E{E?CsE}jSD zgZZ2eXZtb28&)rvW;|AS|Gq2Ic;kc*ezPpyljDW)!494MCP@C~SC6ND6NOiA{Y84t zPZD1I`-SVgw(TFT*vn(_c5L&{PbUTJ9Nb8#SISnRVcE zEHwu6y*(ViVZ%-^zNq`xVmRBd<&5Tcm7EdA{QfS)<3lXFxf#4TgR3)`-`6=F{b3o* z?}|eG6#*u{yF)DhwIP=LOn`~=N(O(B!CwZL`20S_s{1X zYu*8z$LxgnTF()N^IGpJ8P03HyJRlb8r^PcYt+aK*?G;AOzvK{`I6yiTwXWw=KMfE zL3y&q3nbU5hj$GZN+urbwTJAe;U2=+auEj`IQ#4=86VcqK6?q{!}$1M181K_lJQ|Z z?X$NqKI|uauz~Yj_mLdVbzfmP8kgsKPBOm=@!0T=LOjk(xapb|@83%$^A1nVXm)bI1|B_UHynG4 z_{1Wn>(wBcSmAxtC=8Dc`|fbHVBh*}jqa?$hlKA~Z zGQRL#6p2_zOQz;Jb|ds%bdSLwlkj}Mjt!p+nd4!S(RqwxCBr$lRg(Ek2)`;B_c+OX zZbWCl<0XfFCkXS|5#D|$O6L0&be_XWl8J}Txt=VUIgl&*a>b!8oL#2~vo6$}{K42; zf0|_0Bs{lH7ly}%H912qyC!EQyytzEFn;j%J6m#gP0kSq@A;f78DDs>$$65!Cg?rS zpC&x>#KvoKs$_Jo?fH`7oZAJGSrhnG$(md!nKeOYzl$V?eisX~Ch+#VL^5lF&U3g_ zGV#zk*UKb(P0)vHa=9>TLd{tdF!t1qHM>&sVzux&ag{Kkp zd#hyD1fBhElN|c}Oqex+x8LoOSrc@g!yS@|ht9d)DcNg+K3tQ#gjo}6&YFO+56`k? z!qky9`nhE6!?WxjVR+lDPHe(^>lfnSZF6s86R!1r;^1v_zvS_1Q`KCT2PDJ$o!~*q zj8A<0(KC;`)uUq`yQ}9+UZb8k8>xRtjo7vYhqn0GcAaG6`8oZtWH=fZwbjz3_Upxm z_Kyg|(e#rx_5{!JM@147JCFI8FG;2z;a+%I7~Xr~w~`s3`1qqI?`PDbo38icx75F__NE$Vh+7!<_lb?i zen&Vv_PgTXeP91UGJf!k`HFftkNKYD9~<+J(qrTImiHyYaewpP@{wdN-doUpsP?HE z`x@D6{;_1nHvUtBo#!XQ*uazL2kPP2`;0+6;(G3XmdqN5Yx9{fy#2wUKXE+%=aL!2 z@xGAEdicBnV`KeaBxh^=S8?#J<=-S{YZ>mrze|se=ll=J#DFK~FV(|2$FC&AIft($ zlOuZqdoVWWx!1l`<6iql%`v`9cz;Itr!bs9Bm7G;9Q%#+{6VtU6W#Y}gY_~-{gFLZ z8*z-qi<-x3D;eHnl}Lv3Sf!HTJXU+j9t&MNwT;yn3z@hZX^f7NnKyIh^F7#Oc9QHG zQG?FH*}OIo2k*Lfk&GX_YrCOjV!O6r?3_c_L{AQUrvPSeF$eM`Z`*Dn+4*7%4sG#q z9XFFqzI+eoIdzi^?>csu4CgxbkPPQKZXwxqM7O!xKsEA0c3!YsqkYC+PQ(zLGifIh)ZRuf53odOykNI4A7CjWFLYqVu@@C6kNm4#v(o zZ=2}JneS@A)RH+fKjvxM?Ie4C*n&e_d~CbDWNe7bcRpZj+5g04&)aqf$zD%v!J#ca zwjC-RHpJz-Be3T>EYXEE-ccNU7d->0+i=O$a|bnaJQJy*V~h|-T-OVXkH;UK=oz2y zX2Jhb#PMo;f5;eoU(Ch#z~f}c`%|Yt=650H`R$@nkevAUfv(H(lBtXFDH(i52A`9`=V$Px z3HI8bB+R(sGv#Dqc;?9XVB4Q28T;@Z=X7Cs?8y&o`?DltA3jsh7KX>3{K2l-xsr+D z_xYbnX73JCL&v}S!jE~Pv)=`h$<_Em$;9?Kagk(f;B9lUWa4;zFOiHLJY!HhINM(? znK67GT_KtK2;MeVN+y5XTqPMhc-vepIn3=EVeH^-bFJhsx9fzlgC{rE5zhA4OD13A z8zeJ^@r{!4;a!;hcas`E*r8*O!g-H&lf1baS9dk<(H@f7qg$x=p1f6ZhXCK3!4G8c znhai>!Rs^l(FA)>-6l*P;hz1OFuZMUPi(?{dWSgpRmqukr)2!#sVVb-bItCO4EK=i z=c~V44Q{#GSF*oHJr`#Xx}U4TQ6FS#x;nw|&h0+Q+5GPp2TvZ<59~Z1luRDzs3jPg zI+Du-RlmLZht#^L;g219kGW1VV}|$P!@}^yVhz9^^AX7&bG>9RcC1A>=3~N)iT`>v z^b1ul_Rr&LZQj1>ZyLqL}owrR-=}E)O)WzDLLG0Pbb*({FN{< z!oBg7Fg*F=54QcUC1W4%lV^nCu_r#*b$M1YF^r#+OrAbxo|lXbyls9X86TesFG#*j z4c;~{N)F?^B#a%rZC;j4KE}V59QwQ>j19c+^H(L46YZuF+^m{dQ zt`iTb5O)nQJb(8g)c4Kc{sG2rV1OBKRDfBB(E&z3F2Lx=2N*qn-@)V4^LHIWyjun@ z$lyH#Og#R+gZ;rv0?hc80Y+aHVEmQ^7<>M>tSm!>%`ibj| z&UJ>zml*c#Cz<=twb@3PTEdfaU-fXdA0Qdd_S;IPmhjkfZ^5}v+ewBCYdJ_5-ZtAO zHeoFXi-UJ9caV%9JmYZB!nu}1B*VFuLnXtxmOD!3qL%1}slibXWY2H7?JO2!u+J?9S`zT7L5 zB@@qhie&B?o`L9h62=A|f6ga3+fS1W=kEljOV&>`Lk%51oMG_zu(xMOhPz*5%om;| z8E&Q;dv_Q0T+|!g&T4Sf44F8b39}`K^`0ZFpSa%WTyJ=MiQ&9=mrN~;=SmLeJx>@L zc+YLVWc|c*L(kkekKsMHg_1e{)+KY>Lm2Kdam;OzWG?20ZZEaPYUGFPID1PbHe+z6 zgZcc5KeqVTb|1;q(|BLW_!{pgnVkGR!~VkhiN9w+$JtDN)*q1QhlwLL@$hjj=)+vd z$zvTTnS8NbpdO5ly>zf-_KIzDlF8fep@&F@qw!e}pS)!J&=K<>^>B_^CYg0JE*Hke zV-zHl$5~0d3dz{Ob3QP}QpvfvmEhGaO~pDFotHF)fgRu5uaHTK>P>is@-p8Uf1fol`&@vj!f&-q>>e3cqJ z`Qi^}`|Bjb+5URTpUEE{d*Z|S{J&8$T=d~Vz-4DaX0 zZIbbY=UoFF)@Z2m;tFdtM3@?J?@%LZbBFxG8r_+}s}t-R+$BsL=8G+u^PF|LTQX|{ zkDl0Y_@e*0WH@xhy+_TyzmSYCyuVAiS28~6m?Jox;|SSv?Wo2+U>?KOnBz$G9`^zH z!Mo;bgy9}kv(4JX#@`t|EUcgSb0xZUYW80*`5`rI{CVtA$?%V;Ip*V%8P_qN5Y|u3 zJthIY&$VABI@X5#h=)D%M(25RUyfGe+E~r|f0ShAJw`p_WA~K&;5lEwPYc6&-f+K8 zY8zz~&iHAM)K<9d}ug0lyh5KNvF!dO(-s|zI{NTO6ekTm)dJyZi#K!m8>%wr% z&wg)6hNli*+qWd^C$1a%H`P4u?VIZeIS@^6ZPjq%@wvGd;ehcNFe@Lun)BZ{*g2nn3X>1K*X3W5;oV%<@5SjS&Xc&< zkte+Kq;7N6xWc;aBJ4b8OD4}<)jO{?ZS|fU;I_ipxke?z9vfTqj1BLxsnJ|DuIXy7 z(Qb*%`M2$mu16Bscw<1H#---k?=lSZp2$RQGdQNtg z%*A^?{6=b$It4=E3ut{J_ZM#((d~yCn1PCYgH)8+6!^FT9`cJtT8Z!=q>Z zaJ;LN4`Y*q$L=ZFV>4H zUTgN>zG_^1t9kz|PGr`4A2sH(pL)NC_EQY6O;_;)GI+ZT-ado*`cbw~K{6M65Pq=QNHuDQ>~V%lCJyna0~nbac%8|4M`6xSY|vptUEtX_*o=_OGZP*? zb%tXfkPl;%gU22%*<({vuw#t@D;7Mls4*Ne^$l|yFU+}x4LXkvAC6599(#gh^23(> z0k&?UWY)uYl4NXnKV_biC1V569tMYd_yE~(h3^gf3p4)%)jRH7`N8}1&OBlM`(JqC zg2T86%a$vQdyp`3bLt)UAo;;N?!m$b!l@A#9L8NDTdwfTKSbDPZC)~Cl&SZ5npX_p zBlKk%T*%<18C(@$?y>p=vmV4=qJ~V|@7!AVY>1SM{WH>iJ^ykyqj@lKEo=jIxpD9$w|4tDHw zc<*!e#Zon{j%wc9<$+uX1t=G5f|BU&Xmk}>++W$Psj7hza zT`%sDL)Ey#^QKCeoR+C~T`rKH&jRk{3j+*)Nd{jQ;04lO5n%kU3NZfHWbkzvd_#co zzd3_%2{7Z`7GUge&)_>U`0fl|ox#5dF!|maVB+7O!4D*uHK5KH2~$_ri`s$xE_ShG zzH5RB>%tm>v19!_H|qB@Vcr|D zL5B@{0N%0gluUedtS{K_8h1(NnGJ9IpGzhN_N+hH_V-A}9v(gWff&f_1@y@51J{B) z?-L%V9((N2W5@nO=dmA@42O=r0`}NzB=a5skDk2+XWxe;!*M?&hxc=h{J6sVxmuX} zxmLa3r=OJ{``Gx^0CWGmmSF$4Z%+z8s`j|r6KdqbdHXBL=zKmtEg9}9HO|Lp)N^q@ zqWiVl3u@$p>^VIrnLL>R8 zB0qG$ReMv7_{h%hcaohSwE~kXbqe?C>%#0)Y|xP}9Px&#T zIb7R%64e#1ZJjXohpG2j{h@rlw)CGQ*tL2`*tKFky_WAvM(6(?;181Fc-Gyd_u~2L z|0oRqo*MQ0Ks^`rL-)QK962F-%#S5|%#S2{%s)v+M=i-4JY8dv_otGX--&9r|FbxF z+kBSToEq4CE)L$`i+mxOcZWf0_@lS~my#Ld%)tLI;^6K7SIPD#7JBFNH_7B}+rLY; zEq>^k8*6~he*ch+pYd0cvGFthYsuKaW5e08o(z3U@itiL))~s`az3x9~9IyNLNiLilN;g91_r5m5 zaBj}ItvK@VJ8p?E9QMo^9h~jkNrpp5u3(=d?Im*$!P^(kz8xgv>vztM!d}bo#G}WL bIio{nzQyyu__==r;U%)g1|7AAqt^ciV$Kjs literal 19284 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 bp}|Mp*vLm-%Qsh;eE7lmspXVTA9MU4H@8gx diff --git a/src/games/rdr2vk/output/compiled/0x26B3FAA9.frag.spv b/src/games/rdr2vk/output/compiled/0x26B3FAA9.frag.spv index 0d345d7e5e67945ff169b9529b362be19f0e97ec..6060e471da85ea2ccdfa65e98e4f0a4fff93bcf4 100644 GIT binary patch literal 28792 zcmcJX2bdMr`Ts|DsiI&(EQlb8fQa;t(iB8G2=?n`_b$7#&D{k-je@~OPV$M`+nxmclPY0J#SJ#wpA<9|Ku7ytiYwpXX=dHu6r%WHJ0V8 z^9{Mh)pcb{bJh8kb<3L2cR)XN_Ux%McFmR5*XJ6WR#q2s)m62HTzOSPp{%KDc_EFH z*j3e*RWB z$_w-J6@|VPgU1$scEf06_5XF86)O+T zRW#JqdNoU~xbpdo|eNl}|PCBYi(Jbw(z{E zli0$=_2cGVp@#3UmNxO`V~vLfHX|iZDg0}k5rNH^mNsde(Wy<_Xcx)Fe5U4WYVyfF zRm^F8YF8TVEO`kQ>Rao?n3D1HE+EfIf#2ke-!$Q3-v2t@Zh_y_jNgomUpU_Mz;BNh ze(j_A!jtP7IFsT5XI3@V>neY`K#x7OKvKy0slS~O4ZG|{pB{_2Z2R&gyj z=Zb4MXKuU+i??HJd!TgjL8_jySU(Q+s@f&-SWATe!;va|NmMSq&r}`h>6uy~x#gMK zAv#E0T;!zS)0P$HG!z;O4a+rJa(583N_O7sHTH>5^mvQL<5s6O?V@_gldJPJ^)vG; zCRgTbYYWxEy;d64N#8ujHc_MSoVmq{?74fbBg-CW4Sas zLw%zjG&w2Joh{6MK)z5t>xO)z`r_GJ8r>Y_@F6@C)VJ3Ec=_NFSUksz zTqkkzZ^3OWE;;KdLG0Tj@hzV3MXp!k8*+WbCC`A=cc{1;KR)7krO_~P&2woTjV#(Y zR6O5NEo|CEV}+Bv>MAN43&r(m9qrQ0R~PiY#9XI~OY%s#(rC6gz3k*5u-U)aPj5K* zl}3xjDcAU&2wW*leIUS9!p(V?MoTleR+t*w{s>{7okd&{omJE;R!MZFg>7kcdj_w`;NN8Moh@+d=x*V3tfX%Dw6JL# zJs>>4GGAV3*uC~3J&32|o7f(D(<$nZ^=eo{ud1k6)>sJDsa_v-q9qOa`pT-Z#?Zk2eD-K8Z^#wunksUInq}4brm8xv zbsN3MlCw_1=Dg|)4Y{)7!$)*FMw`$^ACnGYGX#1*TcvZWTvo_6R#sKW!a1}H^@SDn zb&bm!it{hdkE{#8pVtJQ)UbO`m0DstT++=gjGtWq!NYy#^$OD-8a~ypCtH*Lc%rowiC< zZS%;@xpir_A-4jr?+npK?}yZg&vQxc%k&{vFDkjTQY?n^;PYaY9-rFk+UfNL-mQ4H zJg69RmNiy3-xuv-PU?sy)y}JmZ=85{;!_fT&PUIA@T~m9bLq7Vem#Rf2J4{&m)lgSMp9m{+-lhX$}>?RlO_;?rNMZ)1a-e|HvZF z4c0nPOE8yf4GwD!4r>j@#kB^9wFZZ^28Xoo%YajHNw$N3~KULVKfOcJME*=)x-BrdME?KpqLjSB5JbHpX@E znak@74%ZhPt}hrDuP-=UUvRj-;BbAx;rfEZ^#zCP3l7(p`FtoYH!2t3T+9K?#T>YI z_zn{-wm-)5$h4LlD_PxF@!F!_qKMPl^#%_al-72qB2H^Rw20GqBV%0LQ;f}br#VGK z<~!8fs3FlbA)W(Vy^3ARQENDvrW~el)WyDUz_Au^y#tQ*fa@D@+;4CL0*+ka*mxd;`wfl-FvtA{N0H5Ozrl?QIOYjA zA>g>*;HCr|_Z!@_fa89Hn-Or-2yRZmbxF7d0mt(jyS)OgYr^fPeyY}*XEf_Z{>WVT za81?f^33Zgc~yY7mCX91@0#eh3vj6KCVhA5xUlaj%(_w&@U|J;s|D6)E@9{A=Vvd1 z=^|%1@5LSghYxlW0#2qecVNJIFV+W~_u{I6^Ikk7;Jg>l4mj_{^8?O%@#28itYuh*ATwCAg#LM32 zaM}ADE_Y0a9*zo0q6Ca5^!FxX#wZ;@;Sx0UavWUo!86f6n0)O&MD^lfjGwS z8O3vwIZTtz&rI(X<6hEpai;McMNceb>Udy)T}Sjh_k2EWqEQ&9r((!0mN%0`EJ_j7%V>2%I1mnPgcSwyk#PxbbP+d+QVELY>|B7BVc9sphF!N&{$f<$3C8upr&f{R=i_bs$evjWEj1P9`?AIvyV$I*oIJaEBdNkF)+n;a}}|aJv2{3FCtuI?wlH z$>hp7*x3J{l7$5A=InH^K_vmt0>UVyON2c?= zK)BHDZ{xi#7YgHp9XiLkNb=vGAC<f0^$0ON2LB*qF}uQek|sL+ANkCYf9r z2OGz~Msh{PAFu6#s@oejyqZMQ|Dcu)?tcpv}9=-cUR$g z6V{}8?>Df3*&}E>r|{dY&P?Mj6rTO# zv*~@kNEjdN(AjS<$+L%?la9Z)aOpGc(&yVg!Y2+nJ)Q5q!uVi^&hy<*GPyDiHjcko za@3<&x-RA5+b)@8eFZpLnC4vxe&O77zaIo%bxw+_!4tae)?aT4vm{<9++A;Ne4oO* z&;QTXU1L6|aTtqtw1?F5-VHZ4!4D@K?_Q6@cFpfr;78TCm_PV2wNhc?JuaDe%)#|} zs%SrlQ8d-8>-(zqimGu@eeO!^4VB6T-Y){ zFyC8nZ5g$Sx=6-uvxEa<2j=?=uC0{O7Ltj9?N;g;gZD;k!F-ni*G;&mWOC#k6wLP+ zA?_96?s{9~dkTE8vkrUOf7%P=v7Pjk7Ju>p^SuC^>$|;hYhmpBCOYC;zmsG>W1%0E z=oypxjuJ*DUU)H2E__DIh6`JA0P|e~m+Q!P4P4Z5XUW(y{xRaFOGfQ{<_NIHV8$*N zJ|#F?3&Ph1XJm!&g*xke)+`am2Rn3*Qz`l0;7qO({;s0=Y&}SLLGLl?8NE~(AMDUM zPPOElb(R~~2v5$8^`n^g*(Z{_yu9c;y!#uGUt@K82?cMKBdCl^{oh>)7ew-?$Ku( z`4Dq!MfyOt_;DV6s2)tNAF1cN7dUbSf1GgWKS^ZbIM-4o!gn~v>kISQ+jwhX&Ll8? zeS~$T&z*k4Z+6;!0`bR7))4VL7$3~{0C4u7AiP2K>8&E@1A@#_1jf=%{E`9&yn4P7ye<+I`8eN!uVi^&T*zm{&e@B*BS3FeAV#& z>7JY}{QK$6pKJCI#s@oe-jg#VlPlw3XA3|5m)#FG zo+JF_&qu~{VIRyDRu`}FJjtvBpOdLEnBObF@tZ^J1mlake=CMF3|pQ7oz*xajJL_) zkr_NW#PVB|!TAh6B!l_=qQ|2@JcIe&R;a%|z~s9&#PWYK#FAeNFmc|?;IA|I#{d(b z-~V`gFu(r^aqkS~_dlVY-~WV|-~WKetKK~GHdW)93Fi5@xms7Xg<2J!i(9H;1CI^Q z#jPcGQ(Gh(&V=r2*un3tyNNY~!ybJPHMohg@2kF_S|2r@U$*I=@W&=GcM!%8-hKll zVy)5bsrI-Uc_BNmy(E*n*KKdf za5OHj8+k7hhn{~e!5Z%)xkf#_Yq+mu;;~+HWye0 zA0KSs?30s>59?{41BLNnKjDK7oaee&ayZvAVK^F>=Xypmzk|hNQ?Eum&SbcWniZcZ z8YJ_%gqqX5R*mA(-K99(hfR{<*yG%X%O!KMHt3eA9j3lc!V72Zcj2*YE;zB@{7wOTlrqZ6LR7(aOX9VZ#T zW7S-P<0ZqNkocV-8DIF0ibSjvB~x=9?GgHpy2s#8N_c)}fDNB@nd9M-(RqxMCBr$l zQzY{_7k+gz?x~XbER4>6r%4X|P8a6$FueWFkj!^R=sbrrB@+*wb3IEkb0Amr<%&aH zIJ@&{vY{W+3ZlknU+R~Q}}*5o|3?3$dP@SgVt!uY}4??TDhHMvL}yytVV zWPIVhCYMO|nxOYQFHLyniH+CfY{}?c+sh=wIk(FtvnKGXlQp?QGHZg)epgBk{jL&b zP2lZ!wPe-=o#$|kWa6Q7uGdQTnxGHYkp`y0uu2|D}TDLM4JOPDo*x8L28Src@g!#$FTht9d)E7@y;K3tRg zgjo}6&YFO+56`mY!qky9x?eK(;aRp$7~VDyBsSr_^`JO-+dP!mglqkJd7-5{QvUQKk2OMcYpN%invpWjP{3-`k7!tl0v zBe4nh!kgmYZSz)Q6Yhn##lhR=9m&)q+zWpYhWB20S2E)hAAj`Z{hE4o6ZL-liTY2~ zK33xlaSP-ADY5a`p9yEj{#+cq@9RHH#t)t`-%}6gF~5-f-^Tn>dTjjO@|9#b?r+{( z{wkS^_ZD=2QTs-XeU0oj|C?mSHvW5po##J1V4-%Dl;$NNDt>*4bTjE(jGl$@>gPvYQR%bz7@YZ>lAUTU!MoYxa320S_c zC>hQ^Ii4gJdq& z6J2|?;cC<$*<*E-%vgMf<*_!94DYcvlnm#wI!T7}SQ|<9Sm-*dZKcLo$i&@HV{9Us zc{69eLjZfsO(nZV)S!!SHm}XZ!MpBVCF2M0+HNkH*sd)YJLj-vq9+Hww*a%Zm;?Ee zw{5#gcD~qxLtA`Y$L^BJm+$^Or)?y|yN*31!?}(glZ)#P#?CnpO7!H+_d#H4$()%V^R(>{$(|p!;LsKy+YXbA4RQHi35+fKpSbLK z+m4Xz^~4q&+Tvr|QIfGCF5gdqJ=f8RF0Anwaqu1W44`gfB~#BG)X?!vq=t?$P8@Mv zFEBnHf0snh_{-+|2QsX;I#^8HvF1~vnDLdYu+6OYfXED$B)zo7H^?Z+s?Fuz| z#w6Y{HGKR$KP2J&+4fLjF3uEmE7cBHBQCPz9449Z$el63)ER$l@v-eMB$Ko85t7Nl z@0&+T#s=Q;;KF#swf`!~jQNwsL3X{^*Zf;YF8;k6b>a69{F_K};@>>FE=NnIF2*Nh z@F^L5Mh2gq!51djYk!%oxVkO2&tGVfNp3YWQG>jy($JJ<9jkUDdd{sCkcWCYe3Dxq9!( z8zr|5@SPcaPX^zY!S`qIgBkpAg1x715+;vu&;Cjn-ZnQUHsLTg$rTdwwv?C(&|#TkU|*J^Oo2br3#Nie)~yGwF5|GUM(lLz$! zJCA!MlLtC#2}Y)le|$ zYY~q5h%jT~|DYQBIjR@?=TS9s!iHLay}#IlTdQ$xsmA`=Lj6{W%zo;oMlHLm_g;HK za=6!?PO#_sq%bkUz44SVJo)1fw*7Aax9h>cT$#Ne!Lr#6v2?odOKc-^~d1JuHTDZUzQh=Sqk3IVb&gax7lHtO0ZBt=* z+jL26!n15Maqz2kU+|3RDj7d`#$jK=xz3wQhI5^_lnl3p8g=fbo{Ku8+e!_NS|NLW zTT2e>++A2dah=h*&hYpW!@fNwbN{(E+X_=lcyjKc9?tf?CBxZ%JIT}%9((RBIM-== z$#7vU`wGL`re9(c*0R4ic-L|V$@sxD4)-jaYdJtNoNKwGWH{GyC&^sY65T*GIO>7y z`3;gB)^f10e&Sl9b1mWVC5C;6OJ?7YA7=*GXXFUUoRRS8Ib-1LJ6bYzLdSUmw(l6p z_`;*-{DH%ldu5zt;u(*Z%ss<15dF@=*udk@`2=VC36kOboxnuN`iUl~p~HtW3?3i$ z_9V%0cWaDU!c!!}O;%&??xvoLdZXJ_4UU>26NfWls^qZV(}eXC*BhPd4UaD|ocA7* zsfFF?b3S$HBxy_QSpLlNQnH%RZyyrGYGUwmAWNveX;Vu%#+!jdYVs7Z>t1VO` zKV-+*Q!=p`gEJk>=U4o(#mBabBvVi0y(Hsnytia>^7jn;2Qo&gwV!12#dfxOFgo_q0g~A(w#`Wf5%XFYuKlJP@F%>C8F zIcAw;*3GzF7#ojKkW3z@CGjdGV*}6mz!*y;69*k*ELIQam5}ym-y`UJkHGuAi+i-c8W*4EM=CDQ`hIHcy&cs1ed;Xvh3^AbCfMU& zE{vb^y+ZghHF)yHAI|nyNrtoi)snxEKRouthx7S=tz@|H8F8I3yx;Y&mwb&Hy!~#F zj9>WNxKSA1&yAZT;|tHb1~{zIj>?NGtkD2rYQ()mji}8n@(XKpYX+}LuxoIeFmaeK zwqVY4*5!7|tPMPRV#DE!{@0S>&=L0zHT(WXGQRNsF6BO4SHShnSl9~5#^^A|*Q}To7 zd;vc#4Ci^n{Wh`jJ@~A!e&Ttfdq&Ov&q+ql-2K_`dCAP#jd~FG1##G;cRnvkCLfRW zvao*Qdb}tBJ@vr027|!(| z*6WFl@3S|A;h3NO-joba9lW-0OV&?ZH}r3*dE7rpW?b98E3BV*-tS02?|txIqGR6V zM_lZgH#*Oo8jVro3irWiVdgznz3cvg{NTN29||*PH|9mWkHle%-o7784t+ln_FB_Z zCwxDZj4gVP^C!vF$j#$?CJuY_-V1-0te?1k=s#C;4qr+p2itxnte?1kUr0djee-pq zqkhbXxY$!abgmz3y^9*xI5nRi;{$nT$<%U!davc*6ayRMzYAmMz3~rW-dEtg-rq>p zPdqpLu^}IL=R*yrsBukH^L@>`s&ktxnS6Ft@7jE?7}z+UAB3@UK0gYR54_jqpOWF- zT-Tq(=_k&UxY&^=yz``P)6}@ay6qg2=N`)l z!-sjo%mObxuw>F$bOXisgkDfZiu@A_HvB|+>50mV%sVUg8hJzIgo>;r-y$hzkzmE|x78@YMh)#B0N<9F7hB$E$1=W?`U*5C1tkqqbN z8XqgpH6{*r>~nbUbN0m&HLiAQ-rMDYTnOX}$?W+`_1^O*DIR;>`JEt)kN^G4iNbKp z#c>9oBAJUb7~RQgr>PMa*>O&l%y{ez#sG6};g2mowmn@kIUAoLOb*`bX9{Bj?|5)w zJmT8_EXj;Xy^vim?vaDkxWeCMs&`$^k)O{3?&Wg>41YleUlick(q9r_{4WbI z{#Ru1RT+FufbqXRgKr2h~GHCTQd0e3|^DLzX>q;-Wg!x-<`qtB$zdz&gThJ zSJsQ#f&DIazGS{@f=5rS;kJCDmHlZRtp zDU1!atO3}%t0j9})&qaiZ~I?MCIJ^O(e z$m|95$m|2xf;{gM?xP-i?9gM!{zK=n@0ARPj=ci**!M~1Jpdj(dkfCKYbC>RKO=|t zbB+AC!uz>enESa_z2B#wl^^@q__Y9Y|Gb`H|F>^X2tTa$sM=#{V_PyZ9R$V3fHzy82f|O`>g(0zFu4U&l2ofy({cmv7TPb_avk9e-H3S z$#6XDuG4$*EcG76jQ>_LHt^VRwtOd17H3+kgP3nD4l$JE_txn?G2beYMkYKO-&l<<;{!@|* z=Z4aa(D}V@Jz+RE=iEvhdH5Z-L>LZx=8O)`_N^tup(9tY&yhBgxrgBG3uoW9lJWIB lXFFl9LO7jky45lX+cR+wro*R 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 diff --git a/src/games/rdr2vk/output/compiled/0x6032A998.frag.spv b/src/games/rdr2vk/output/compiled/0x6032A998.frag.spv index 7220e99759c1531408965518e8806f0ad1ce32ae..73ba01c5fbd76e2d0371745428870db0a83cf6a4 100644 GIT binary patch literal 29024 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 literal 19844 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 auu(TU@{!l_%@igdb})8oIj7Ud8vh6V;fSRG diff --git a/src/games/rdr2vk/output/compiled/0x76A78879.frag.spv b/src/games/rdr2vk/output/compiled/0x76A78879.frag.spv index 4047779cef0a064bab1efe5efac4d7954429722e..0c55ffe5d9a710de94b7fd9b4eebd2f9b817e174 100644 GIT binary patch literal 28924 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 CJ~83| literal 19744 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 diff --git a/src/games/rdr2vk/output/compiled/0x7BE28339.frag.spv b/src/games/rdr2vk/output/compiled/0x7BE28339.frag.spv index 7d318bab2535526dc2749235b4756138dc3540a5..8e6ccf4ef6eddb8958150529022a71aa30beb564 100644 GIT binary patch literal 28420 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 literal 19256 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 Mc4|4L)5jYB2lX0CB>(^b diff --git a/src/games/rdr2vk/output/compiled/0x8B9C89F1.frag.spv b/src/games/rdr2vk/output/compiled/0x8B9C89F1.frag.spv index b1f986d533e7b43f3ada1d6417169259f4094927..4802a3adda881ee6388c15a4bc33743ced9a1df9 100644 GIT binary patch literal 72476 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 literal 63296 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 diff --git a/src/games/rdr2vk/output/compiled/0xA383C448.frag.spv b/src/games/rdr2vk/output/compiled/0xA383C448.frag.spv index 4f3787dda7279c8d314bfe26eb75748c15252da4..ca9601f7a28c2a0d4dc8e60338af7bb2ad5dd41b 100644 GIT binary patch literal 39728 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⪻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 R2$K&x7(2C`*6Cx7{{zizfhhn0 diff --git a/src/games/rdr2vk/output/compiled/0xC235CFFA.comp.spv b/src/games/rdr2vk/output/compiled/0xC235CFFA.comp.spv deleted file mode 100644 index 56c78f96fb20a38005df1a47d647e357c42b4a41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14936 zcmbW7cX*W5w#J7NIx*6Mh%kT+qy_>pw17aUhN56W1_&S}AqWAHA^}9jf*^{bpn}-I zf*zD6O+f*%7gX?wiuHJo{pe9S-1j$`wX)4W_da)c*7LpZYJ2Uq*Z0jZnQ~>DRE$(8 z6R8@h6q#Q(5`Uc|`51&&a)gno{mX{2j zG+@+($;6?LM52<>l0%Yt%3UN$QBHhMl|&Olo^txf@-K*#k5q|d_m5@gPyTIySd(!i=%_RSNtjOwP@lJ|=WXl1ErqlGdoKHDc}4Rdc0y zomb|?vhxZ?kIL&ac}79*sKN;all%0LPm=0n53&y{m^vwYYQgj=7|2nN939ex%SRf3 zGh*lK65kn|S1iA^bM_a@Z{wVO#`4pg)6H0ZTj$gq%WvnL{>JjtomYtS_RcHDc?ai} z;ylB7e9!skizmhFtrEAliJztEI5XAQMi=+1R;)`4b=8Y?Z9`phv94XHqj$=e9_mtx zb?rkPb0EJCp{_=;E+f>{EY>CZT)dB3ab4P9_EEc7_m_RtDc1dEAF0KQV7LVGrjC9?layoF{lVPw;S_;Nd*M!+C;-^8^p)30``h(3PGibfxDB zUFms3S9+e%m7XVbrRND<>3Kp|dY;gQ^Thd#mX5A-2KnGNY4JILPbuc{8GuhK=85w! zADL0i{S2>-^S1HX!vDHr9zRp~?Qz~dKDVsR^D(Ad56p8irpGLp=VdHCBa*Ec`iaz+ z!088^S6jaI^v!g{po<1N<_8@GnjbTSE-TP6N9YCyI%Wyo z$Uw(Dp_>xum??BcfsVOCw=~c(Tj(ALbnF}5#z4nxq1zPbm@RZ$0v)r3?)gARFVXD| zbSVkl-ayA};kQ4~F2Q9*xyK9ZH|};)7czxuBIy| zOe|+(I%3e#U(?wf(IeB@9I;Q+*&J~Xn9k-X8t80}&J1)mN9P7Qo1^A|j#{a&b)d63 zY8U8ijxqwB%~7X7XLFPl=xmO91Uj3e-hs~MsK0ca)o5KgJLbW7cy@=RX9lo=@y!Z2 zzMNf6op4!Q8|l0`BXDiS(DSH-SE@MuMu$&SoL-|t;PjMy@Qw*iPtg%iFNr6=+36AX z^JK?Hf3TB}zFF4*mc=>#&k1HGJ9sK;tiI1)Sv!7piabobpW_gl?e|bH_^XO}j$g&TX z`*~IruQ_y@pI;?$V(`Oe=T}*nT3H7l%U?yfdR|VJ@v7pNMQ83ZUQK+&(Oj>yx;QcT zVKcvE;s5O4>v5-uZ)*6x?>9w!=*I(h+IgNTP7Hq7EKd#Lult$_N8r-|c(zC&=H^~4M7)bevU zUA*_Q7M`cR_@>`J_qjMjoEZGD+4>EH8-Lf_^E4E{{EMl+zo_`|*Gl%+NSqk_u-X0^ z3sWoW;A8ol2xo3T;&q)V{`Q7uyUc!;_>B2Wz0R}6iNOz>`JE#?yWVqt4(Ey=`RX;# z+f=-B>sEe$HWMcXKWvugJmJi(^F2><@hUCm`}3!T_~R|E^7Cv-tOP%7w%=C5)XF+> zAHCnC>U>&@U-RKKud9uCto}wn&ops-(1+*QR=nCr@eUQ zw&ni3=^);!(R|O7Ax;c_*sT8Zg{g&g@UeWE!s#Qg_xd}EN4`Aa_em#le9(t=br#>c z|0!R$OTvym^y?~q_mo3hY`rY;8fgc7-nxlD{lZ+&(_Nex{IFU57YI`e>)>PgdI+yv z(bVhjDZX^n%|73~#Bbg3+;;NR)z-4biNOz><>@UvE~B!?^%1{+X>-rpSNzLU7Im~d z{ltmE51ZxbFTDP{hMs4D_)TA5?)$w^{FT8a=anN)41U;bzXOG-m38p3{DXv(tH0%S z4Hkd>^QODZK195A^(?=?E)pjOKWyfAvG9HUANKoVsCeraOYW~>;xo5beBSnZi8wL% zVY57!3J*GMs^_^(d{vLdet%sqKDA=W`3@H+20v`J-z$Wvm38p3{3C?xcm2@!8x#M2 zRFbbZQhejuyWBF$a|NK*Z-|scz+xFb%_scBtN}oRJ z^E_Le82qqVo;kw5zx#yWcXP3=nCN-06>l)^n17C#Cr%80*ep+x@GmLdef|03)2n8DuN3Qj}H;a$>b-(xR7I9+m!)AGI75-`BCSQMv`1oD5o!=(@ z$=sQ~-=*Tj;D^o5cbPD?vJO6$|90U<8|Hgm%f$=2{ptDd5FeYK>GOQ2I5GHPvpg$= zS10fHxVyyH-Z0Pe-Yx#aqLtpamEy$Uht2ZbBfPQqbiXg|6+iUZy6t9PC0_7&p6_?H zI5GHPv;E#DOs%YgkHz0F{M@!VUe^QSFaGhH=U*e<_liDV=UQ=M@WW<#9u%H6Xurp; z6F=Fh+LfBwD{ca zCI7#EMtt+$h(DkICQb}~*eq_7@WNBp`SbZ%@s{n9{k)$Oe`VZ_zTeH_#Nda`_Pa%x zT3H7l%fD4P@6tuS-)-V!R~_AE_U+w#20v_;XOHkz(c?ZRFNkkhzQyZ#Q9Siv$^XyxiW7q$Hrww$VQOU^d@TP< z!d+^X%=63Q+nc9){{7-3wtSXB9zI_k5GMvdY?kMs@Gli>_*Dw4UgGt_Q!DG>WBJ||UY`1i zzmL2l{_N4s{(kVTc+oSr`E&I>abobpW_b<^*G=8)dEOUa)_I`M%?IL(rXKhAqYuT2 z!4I3|IU>A%ZMx?+e&#h+QS!t;J1eq_TwKi@CKiNOz><@rju zQ=Q@d{PimwvJO6$|DVF=R!;M}{v|$tRtN9r zcj7Z@JnMCSFHQ`8*euTv!nKl9{9Jw%A7690=lx0i>(3W-kl@MVlhu?{DJ7;D^oj`yXLyWgUDh|L?*rZ<*aQ+LE#$?=@+AxF<@KKu=S910E>gttLC@9nrzUjwC^*#D zNci!8Y{b^DDLuJ}!^hUIB^+xy+t;rxt|#Gcv)3u+S;kZ2e99in=g|83(m@hXQO z^tq@Pw`X-X|I@`&H^1rMSJcOzRlgVC*Pnq+6cyjsHxNJvxA=yTNRihU760Js57e)u zxNjqIe9)V&u`qSBH+1A}BEc7%+ioiG0Vk4KzmiudW&$nT?$;>6&G&E~k1FtxG{K9;|;@ZkBw ze1BcUlUtqeI=hN*YWI#m7qY~O!4I3|=_b6mSwD~KE}lI3^xbB^Kzw^{Z?Ch5I5GHP zGryj~uT5U$pSyaAXKeby>&q4&nUv%Ad2exI@WW>N?ITRBtb>o;|9yqI_f2fwe$pTK z_MorRU;LKV@9!}C0P)!uZ1(R(FBB&RKWyfgBmCGO!#&SH@!$6?@H~UW$K^ca^$!*& z20v_8{}5qnWgUDh|3$(Z3KwJ)4;3FWZ?V764ihH^KWyfAiSR8?57}+} zQt=)Y&hfmLiFc{l&g;BfoEZGDS=?~p(F^l@zgLJ)-1Fp4vyTvOu>3<(VLyQm&?-=S1-)BkuA0agun}@nOE-JaJ<1!)E)<7p7L$ z!N>AX7Jg@L`7GlF;yXUx=KY-_{>+*Ed=9S?Ck8)k7B^LR*n!7uj-Pjk{q#Wy7IdrbOcu9MM6A%t|>u3 zNIvjd5_0e|U2S1>2Y&B!&w>Q>{Zo-g5RArdQakR|AB}i_L1jP?&Y78GG2P9C3O@FX$B(!;g^a{P@ zyiAy0VY6OcE=*o*R`YOS>lOB}S67JBD|$h%;P|tTy1K?B*y-IEUB^mBOL8T)*KrB` z68R8wrGz;27B@kdxbYH;n<$Llo)eRV(V5tDB2PMUVy8x)>FDe{CkvwspA!Y*=<(0j z6>k1l3FFUvSS?e9(c?cwSGf5X3gb_Y%zwHtdi!xQWXE`?D>u2*lfMU!nPhcuv?CsgrkxoNq7!7i(|9< z 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 0.0) ? pow(2.0, 10.0 * (_673 - 2.0)) : 0.0)))); } else { @@ -825,6 +825,9 @@ void main() { } vec3 _732 = _695 * mix(mix(_69._m54.xyz, _69._m56.xyz, vec3(clamp(clamp(_4.y * _69._m57.y, 0.0, 1.0) + _69._m54.w, 0.0, 1.0))), mix(_69._m56.xyz, _69._m55.xyz, vec3(clamp(clamp(clamp(_4.y - _69._m56.w, 0.0, 1.0) * _69._m57.x, 0.0, 1.0) - _69._m55.w, 0.0, 1.0))), vec3(_4.y)); bool _735 = _67._m3 != 0u; +#if 1 + vec3 _798 = ApplyToneMap(_732, _735, _694, _67._m6, _67._m4, _67._m10, _521.rgb, _522); +#else vec3 _798; if (_735) { vec3 _775 = max(vec3(0.0), _732 * (_694 / _67._m6)); @@ -835,6 +838,7 @@ void main() { vec3 _744 = _741 * _521.x; _798 = clamp(((((_741 * (_744 + vec3(_522.x))) + vec3(_522.y)) / ((_741 * (_744 + vec3(_521.y))) + vec3(_522.z))) - vec3(_522.w)) * _521.z, vec3(0.0), vec3(1.0)); } +#endif vec3 _846; if (_558) { vec3 _845; @@ -907,8 +911,12 @@ void main() { } vec3 _1394; if (_558) { +#if 1 + float _1108 = CompressLUTInput(_1083, _867, _67._m5, _67._m7, _67._m8, _67._m9); +#else float _1102 = max(max(_1083.x, max(_1083.y, _1083.z)), 9.9999997473787516355514526367188e-05); float _1108 = (_867 && (!(_67._m5 != 0u))) ? 1.0 : (((_1102 > _67._m7) ? ((_1102 * _67._m8) + _67._m9) : _1102) / _1102); +#endif vec3 _1109 = _1083 * _1108; float _1112 = _1109.z; float _1114 = floor(_1112 * 14.99989986419677734375); @@ -986,7 +994,7 @@ void main() { } #if 1 - _1394 = DecodeLUTInput(_1394); + _1394 = DecodeLUTInput(_1394, _1083); #endif vec4 _1399 = vec4(_1394, dot(_1394, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625))); @@ -999,7 +1007,7 @@ void main() { } else { _1461 = _1450; } - vec3 _1463 = _1400 + (_1461 * mix(_69._m39.xyz, _69._m40.xyz, pow(clamp((mix(vec3(max(_1394.x, max(_1394.y, _1394.z))), _1400, bvec3(floatBitsToInt(_69._m41.w) != 0)) - _69._m42.xyz) * _69._m41.xyz, vec3(0.0), vec3(1.0)), vec3(_69._m42.w)))); + vec3 _1463 = _1400 + CUSTOM_DITHERING * (_1461 * mix(_69._m39.xyz, _69._m40.xyz, pow(clamp((mix(vec3(max(_1394.x, max(_1394.y, _1394.z))), _1400, bvec3(floatBitsToInt(_69._m41.w) != 0)) - _69._m42.xyz) * _69._m41.xyz, vec3(0.0), vec3(1.0)), vec3(_69._m42.w)))); vec4 _1464 = vec4(_1463.x, _1463.y, _1463.z, _1399.w); vec4 _1469; if (!_735) { @@ -1008,5 +1016,9 @@ void main() { _1469 = _1464; } _6 = _1469; + + + _6.rgb = ApplyGradingAndDisplayMap(_6.rgb, _4.xy); } + diff --git a/src/games/rdr2vk/tonemap/0x809F5852.frag.glsl b/src/games/rdr2vk/tonemap/0x809F5852.frag.glsl index 186cf0962d..6f585921b1 100644 --- a/src/games/rdr2vk/tonemap/0x809F5852.frag.glsl +++ b/src/games/rdr2vk/tonemap/0x809F5852.frag.glsl @@ -723,7 +723,7 @@ void main() { _326 = false; _327 = _292; } - vec3 _331 = min(_327 * texelFetch(_63, ivec2(0), 0).x, vec3(65504.0)); + vec3 _331 = min(_327 * texelFetch(_63, ivec2(0), 0).x, vec3(GetTonemapClampMax())); bool _332 = !_326; float _445; vec3 _446; @@ -739,7 +739,7 @@ void main() { vec3 _444; if (floatBitsToInt(_68._m51.w) != 0) { vec2 _420 = ((_4.xy - _68._m50.xy) * mat2(vec2(_68._m52.x, _68._m52.y), vec2(_68._m52.z, _68._m52.w))) * _68._m50.zw; - float _424 = max((dot(_420, _420) - _68._m53.x) * _68._m53.w, 0.0); + float _424 = CUSTOM_VIGNETTE * max((dot(_420, _420) - _68._m53.x) * _68._m53.w, 0.0); bool _425 = _424 < 1.0; _444 = mix(_331, (_331 * _68._m51.xyz) * _68._m51.w, vec3(_425 ? (_425 ? (1.0 - pow(2.0, (-10.0) * _424)) : 1.0) : (0.9980499744415283203125 + (((_424 - 1.0) > 0.0) ? pow(2.0, 10.0 * (_424 - 2.0)) : 0.0)))); } else { @@ -753,6 +753,9 @@ void main() { } vec3 _483 = _446 * mix(mix(_68._m54.xyz, _68._m56.xyz, vec3(clamp(clamp(_4.y * _68._m57.y, 0.0, 1.0) + _68._m54.w, 0.0, 1.0))), mix(_68._m56.xyz, _68._m55.xyz, vec3(clamp(clamp(clamp(_4.y - _68._m56.w, 0.0, 1.0) * _68._m57.x, 0.0, 1.0) - _68._m55.w, 0.0, 1.0))), vec3(_4.y)); bool _486 = _66._m3 != 0u; +#if 1 + vec3 _549 = ApplyToneMap(_483, _486, _445, _66._m6, _66._m4, _66._m10, _295.rgb, _296); +#else vec3 _549; if (_486) { vec3 _526 = max(vec3(0.0), _483 * (_445 / _66._m6)); @@ -763,6 +766,7 @@ void main() { vec3 _495 = _492 * _295.x; _549 = clamp(((((_492 * (_495 + vec3(_296.x))) + vec3(_296.y)) / ((_492 * (_495 + vec3(_295.y))) + vec3(_296.z))) - vec3(_296.w)) * _295.z, vec3(0.0), vec3(1.0)); } +#endif vec3 _597; if (_332) { vec3 _596; @@ -795,8 +799,12 @@ void main() { } vec3 _836; if (_332) { +#if 1 + float _703 = CompressLUTInput(_678, _618, _66._m5, _66._m7, _66._m8, _66._m9); +#else float _697 = max(max(_678.x, max(_678.y, _678.z)), 9.9999997473787516355514526367188e-05); float _703 = (_618 && (!(_66._m5 != 0u))) ? 1.0 : (((_697 > _66._m7) ? ((_697 * _66._m8) + _66._m9) : _697) / _697); +#endif vec3 _704 = _678 * _703; float _707 = _704.z; float _709 = floor(_707 * 14.99989986419677734375); @@ -826,7 +834,7 @@ void main() { } #if 1 - _836 = DecodeLUTInput(_836); + _836 = DecodeLUTInput(_836, _678); #endif vec4 _841 = vec4(_836, dot(_836, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625))); @@ -839,7 +847,7 @@ void main() { } else { _904 = _893; } - vec3 _906 = _842 + (_904 * mix(_68._m39.xyz, _68._m40.xyz, pow(clamp((mix(vec3(max(_836.x, max(_836.y, _836.z))), _842, bvec3(floatBitsToInt(_68._m41.w) != 0)) - _68._m42.xyz) * _68._m41.xyz, vec3(0.0), vec3(1.0)), vec3(_68._m42.w)))); + vec3 _906 = _842 + CUSTOM_DITHERING * (_904 * mix(_68._m39.xyz, _68._m40.xyz, pow(clamp((mix(vec3(max(_836.x, max(_836.y, _836.z))), _842, bvec3(floatBitsToInt(_68._m41.w) != 0)) - _68._m42.xyz) * _68._m41.xyz, vec3(0.0), vec3(1.0)), vec3(_68._m42.w)))); vec4 _907 = vec4(_906.x, _906.y, _906.z, _841.w); vec4 _912; if (!_486) { @@ -848,5 +856,9 @@ void main() { _912 = _907; } _6 = _912; + + + _6.rgb = ApplyGradingAndDisplayMap(_6.rgb, _4.xy); } + diff --git a/src/games/rdr2vk/tonemap/0x9B304112.frag.glsl b/src/games/rdr2vk/tonemap/0x9B304112.frag.glsl index cc0800ddd9..4dbedea3b1 100644 --- a/src/games/rdr2vk/tonemap/0x9B304112.frag.glsl +++ b/src/games/rdr2vk/tonemap/0x9B304112.frag.glsl @@ -1,66 +1,68 @@ -#version 450 - -#extension GL_GOOGLE_include_directive : require -#include "./tonemap.glsl" - -layout(set = 1, binding = 31, std140) uniform _6_7 { - vec4 _m0; - vec4 _m1; - vec4 _m2; - vec2 _m3; - vec2 _m4; - vec4 _m5; - vec4 _m6; - float _m7; - float _m8; - float _m9; -} -_7; - -layout(set = 1, binding = 34) uniform sampler _9; -layout(set = 1, binding = 128) uniform texture2D _11; -layout(set = 1, binding = 129) uniform texture1D _13; -layout(set = 1, binding = 130) uniform texture2D _14; -layout(set = 1, binding = 131) uniform texture2D _15; -layout(set = 1, binding = 132) uniform texture2D _16; -layout(set = 1, binding = 133) uniform texture2D _17; - -layout(location = 0) in vec2 _4; -layout(location = 0) out vec4 _5; - -void main() { - vec2 _88 = ((_4 - _7._m3) * mat2(vec2(_7._m5.x, _7._m5.y), vec2(_7._m5.z, _7._m5.w))) * _7._m4; - vec3 _104 = mix(texture(sampler2D(_11, _9), _4).xyz, _7._m6.xyz, vec3(texture(sampler1D(_13, _9), min(1.0, max((dot(_88, _88) - _7._m7) * _7._m8, 0.0))).w * _7._m6.w)); - float _106 = _104.z; - float _108 = floor(_106 * 14.99989986419677734375); - float _114 = (_108 * 0.0625) + (_104.x * 0.05859375); - float _116 = _104.y * 0.9375; - vec3 _129 = mix(texture(sampler2D(_16, _9), vec2(0.001953125, 0.03125) + vec2(_114, _116)).xyz, texture(sampler2D(_16, _9), vec2(0.001953125, 0.03125) + vec2(_114 + 0.0625, _116)).xyz, vec3((_106 * 15.0) - _108)); - vec4 _132 = texture(sampler2D(_17, _9), _4); - float _133 = _132.x; - float _135 = _129.z; - float _137 = floor(_135 * 14.99989986419677734375); - float _143 = (_137 * 0.0625) + (_129.x * 0.05859375); - float _145 = _129.y * 0.9375; - vec2 _147 = vec2(0.001953125, 0.03125) + vec2(_143, _145); - vec4 _149 = texture(sampler2D(_14, _9), _147); - vec2 _153 = vec2(0.001953125, 0.03125) + vec2(_143 + 0.0625, _145); - vec4 _155 = texture(sampler2D(_14, _9), _153); - vec3 _157 = vec3((_135 * 15.0) - _137); - vec3 _158 = mix(_149.xyz, _155.xyz, _157); - vec4 _161 = texture(sampler2D(_15, _9), _147); - vec4 _164 = texture(sampler2D(_15, _9), _153); - vec3 _166 = mix(_161.xyz, _164.xyz, _157); - vec3 _179; - vec3 _180; - if (floatBitsToInt(_7._m9) != 0) { - float _173 = _7._m9 * _133; - _179 = _166 * ((1.0 + _173) - _7._m9); - _180 = _158 * (1.0 - _173); - } else { - _179 = _166; - _180 = _158; - } - _5 = vec4(mix(_180, _179, vec3(_133)), 1.0); -} - +#version 450 + +#extension GL_GOOGLE_include_directive : require +#include "./tonemap.glsl" + +layout(set = 1, binding = 31, std140) uniform _6_7 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec2 _m3; + vec2 _m4; + vec4 _m5; + vec4 _m6; + float _m7; + float _m8; + float _m9; +} +_7; + +layout(set = 1, binding = 34) uniform sampler _9; +layout(set = 1, binding = 128) uniform texture2D _11; +layout(set = 1, binding = 129) uniform texture1D _13; +layout(set = 1, binding = 130) uniform texture2D _14; +layout(set = 1, binding = 131) uniform texture2D _15; +layout(set = 1, binding = 132) uniform texture2D _16; +layout(set = 1, binding = 133) uniform texture2D _17; + +layout(location = 0) in vec2 _4; +layout(location = 0) out vec4 _5; + +void main() { + vec2 _88 = ((_4 - _7._m3) * mat2(vec2(_7._m5.x, _7._m5.y), vec2(_7._m5.z, _7._m5.w))) * _7._m4; + vec3 _104 = mix(texture(sampler2D(_11, _9), _4).xyz, _7._m6.xyz, vec3(texture(sampler1D(_13, _9), min(1.0, max((dot(_88, _88) - _7._m7) * _7._m8, 0.0))).w * _7._m6.w)); + float _106 = _104.z; + float _108 = floor(_106 * 14.99989986419677734375); + float _114 = (_108 * 0.0625) + (_104.x * 0.05859375); + float _116 = _104.y * 0.9375; + vec3 _129 = mix(texture(sampler2D(_16, _9), vec2(0.001953125, 0.03125) + vec2(_114, _116)).xyz, texture(sampler2D(_16, _9), vec2(0.001953125, 0.03125) + vec2(_114 + 0.0625, _116)).xyz, vec3((_106 * 15.0) - _108)); + vec4 _132 = texture(sampler2D(_17, _9), _4); + float _133 = _132.x; + float _135 = _129.z; + float _137 = floor(_135 * 14.99989986419677734375); + float _143 = (_137 * 0.0625) + (_129.x * 0.05859375); + float _145 = _129.y * 0.9375; + vec2 _147 = vec2(0.001953125, 0.03125) + vec2(_143, _145); + vec4 _149 = texture(sampler2D(_14, _9), _147); + vec2 _153 = vec2(0.001953125, 0.03125) + vec2(_143 + 0.0625, _145); + vec4 _155 = texture(sampler2D(_14, _9), _153); + vec3 _157 = vec3((_135 * 15.0) - _137); + vec3 _158 = mix(_149.xyz, _155.xyz, _157); + vec4 _161 = texture(sampler2D(_15, _9), _147); + vec4 _164 = texture(sampler2D(_15, _9), _153); + vec3 _166 = mix(_161.xyz, _164.xyz, _157); + vec3 _179; + vec3 _180; + if (floatBitsToInt(_7._m9) != 0) { + float _173 = _7._m9 * _133; + _179 = _166 * ((1.0 + _173) - _7._m9); + _180 = _158 * (1.0 - _173); + } else { + _179 = _166; + _180 = _158; + } + _5 = vec4(mix(_180, _179, vec3(_133)), 1.0); + + _5.rgb = ApplyGradingAndDisplayMap(_5.rgb, _4.xy); +} + diff --git a/src/games/rdr2vk/tonemap/0xA2ED1CB7.frag.glsl b/src/games/rdr2vk/tonemap/0xA2ED1CB7.frag.glsl index 11a003a31f..211745c603 100644 --- a/src/games/rdr2vk/tonemap/0xA2ED1CB7.frag.glsl +++ b/src/games/rdr2vk/tonemap/0xA2ED1CB7.frag.glsl @@ -787,7 +787,7 @@ void main() { _546 = false; _547 = _512; } - vec3 _551 = min(_547 * texelFetch(_64, ivec2(0), 0).x, vec3(65504.0)); + vec3 _551 = min(_547 * texelFetch(_64, ivec2(0), 0).x, vec3(GetTonemapClampMax())); bool _552 = !_546; float _688; vec3 _689; @@ -805,7 +805,7 @@ void main() { vec3 _687; if (floatBitsToInt(_69._m51.w) != 0) { vec2 _663 = ((_4.xy - _69._m50.xy) * mat2(vec2(_69._m52.x, _69._m52.y), vec2(_69._m52.z, _69._m52.w))) * _69._m50.zw; - float _667 = max((dot(_663, _663) - _69._m53.x) * _69._m53.w, 0.0); + float _667 = CUSTOM_VIGNETTE * max((dot(_663, _663) - _69._m53.x) * _69._m53.w, 0.0); bool _668 = _667 < 1.0; _687 = mix(_634, (_634 * _69._m51.xyz) * _69._m51.w, vec3(_668 ? (_668 ? (1.0 - pow(2.0, (-10.0) * _667)) : 1.0) : (0.9980499744415283203125 + (((_667 - 1.0) > 0.0) ? pow(2.0, 10.0 * (_667 - 2.0)) : 0.0)))); } else { @@ -819,6 +819,9 @@ void main() { } vec3 _726 = _689 * mix(mix(_69._m54.xyz, _69._m56.xyz, vec3(clamp(clamp(_4.y * _69._m57.y, 0.0, 1.0) + _69._m54.w, 0.0, 1.0))), mix(_69._m56.xyz, _69._m55.xyz, vec3(clamp(clamp(clamp(_4.y - _69._m56.w, 0.0, 1.0) * _69._m57.x, 0.0, 1.0) - _69._m55.w, 0.0, 1.0))), vec3(_4.y)); bool _729 = _67._m3 != 0u; +#if 1 + vec3 _792 = ApplyToneMap(_726, _729, _688, _67._m6, _67._m4, _67._m10, _515.rgb, _516); +#else vec3 _792; if (_729) { vec3 _769 = max(vec3(0.0), _726 * (_688 / _67._m6)); @@ -829,6 +832,7 @@ void main() { vec3 _738 = _735 * _515.x; _792 = clamp(((((_735 * (_738 + vec3(_516.x))) + vec3(_516.y)) / ((_735 * (_738 + vec3(_515.y))) + vec3(_516.z))) - vec3(_516.w)) * _515.z, vec3(0.0), vec3(1.0)); } +#endif vec3 _840; if (_552) { vec3 _839; @@ -901,8 +905,12 @@ void main() { } vec3 _1235; if (_552) { +#if 1 + float _1102 = CompressLUTInput(_1077, _861, _67._m5, _67._m7, _67._m8, _67._m9); +#else float _1096 = max(max(_1077.x, max(_1077.y, _1077.z)), 9.9999997473787516355514526367188e-05); float _1102 = (_861 && (!(_67._m5 != 0u))) ? 1.0 : (((_1096 > _67._m7) ? ((_1096 * _67._m8) + _67._m9) : _1096) / _1096); +#endif vec3 _1103 = _1077 * _1102; float _1106 = _1103.z; float _1108 = floor(_1106 * 14.99989986419677734375); @@ -932,7 +940,7 @@ void main() { } #if 1 - _1235 = DecodeLUTInput(_1235); + _1235 = DecodeLUTInput(_1235, _1077); #endif vec4 _1240 = vec4(_1235, dot(_1235, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625))); @@ -945,7 +953,7 @@ void main() { } else { _1302 = _1291; } - vec3 _1304 = _1241 + (_1302 * mix(_69._m39.xyz, _69._m40.xyz, pow(clamp((mix(vec3(max(_1235.x, max(_1235.y, _1235.z))), _1241, bvec3(floatBitsToInt(_69._m41.w) != 0)) - _69._m42.xyz) * _69._m41.xyz, vec3(0.0), vec3(1.0)), vec3(_69._m42.w)))); + vec3 _1304 = _1241 + CUSTOM_DITHERING * (_1302 * mix(_69._m39.xyz, _69._m40.xyz, pow(clamp((mix(vec3(max(_1235.x, max(_1235.y, _1235.z))), _1241, bvec3(floatBitsToInt(_69._m41.w) != 0)) - _69._m42.xyz) * _69._m41.xyz, vec3(0.0), vec3(1.0)), vec3(_69._m42.w)))); vec4 _1305 = vec4(_1304.x, _1304.y, _1304.z, _1240.w); vec4 _1310; if (!_729) { @@ -954,5 +962,9 @@ void main() { _1310 = _1305; } _6 = _1310; + + + _6.rgb = ApplyGradingAndDisplayMap(_6.rgb, _4.xy); } + diff --git a/src/games/rdr2vk/tonemap/0xCD6F15F2.frag.glsl b/src/games/rdr2vk/tonemap/0xCD6F15F2.frag.glsl index 27b139a54a..7cc95d7687 100644 --- a/src/games/rdr2vk/tonemap/0xCD6F15F2.frag.glsl +++ b/src/games/rdr2vk/tonemap/0xCD6F15F2.frag.glsl @@ -1,66 +1,68 @@ -#version 450 - -#extension GL_GOOGLE_include_directive : require -#include "./tonemap.glsl" - -layout(set = 1, binding = 31, std140) uniform _6_7 { - vec4 _m0; - vec4 _m1; - vec4 _m2; - vec2 _m3; - vec2 _m4; - vec4 _m5; - vec4 _m6; - float _m7; - float _m8; - float _m9; -} -_7; - -layout(set = 1, binding = 34) uniform sampler _9; -layout(set = 1, binding = 128) uniform texture2D _11; -layout(set = 1, binding = 130) uniform texture2D _12; -layout(set = 1, binding = 131) uniform texture2D _13; -layout(set = 1, binding = 132) uniform texture2D _14; -layout(set = 1, binding = 133) uniform texture2D _15; - -layout(location = 0) in vec2 _4; -layout(location = 0) out vec4 _5; - -void main() { - vec4 _48 = texture(sampler2D(_11, _9), _4); - float _50 = _48.z; - float _52 = floor(_50 * 14.99989986419677734375); - float _58 = (_52 * 0.0625) + (_48.x * 0.05859375); - float _60 = _48.y * 0.9375; - vec4 _64 = texture(sampler2D(_14, _9), vec2(0.001953125, 0.03125) + vec2(_58, _60)); - vec4 _70 = texture(sampler2D(_14, _9), vec2(0.001953125, 0.03125) + vec2(_58 + 0.0625, _60)); - vec3 _73 = mix(_64.xyz, _70.xyz, vec3((_50 * 15.0) - _52)); - vec4 _76 = texture(sampler2D(_15, _9), _4); - float _77 = _76.x; - float _79 = _73.z; - float _81 = floor(_79 * 14.99989986419677734375); - float _87 = (_81 * 0.0625) + (_73.x * 0.05859375); - float _89 = _73.y * 0.9375; - vec2 _91 = vec2(0.001953125, 0.03125) + vec2(_87, _89); - vec4 _93 = texture(sampler2D(_12, _9), _91); - vec2 _97 = vec2(0.001953125, 0.03125) + vec2(_87 + 0.0625, _89); - vec4 _99 = texture(sampler2D(_12, _9), _97); - vec3 _101 = vec3((_79 * 15.0) - _81); - vec3 _102 = mix(_93.xyz, _99.xyz, _101); - vec4 _105 = texture(sampler2D(_13, _9), _91); - vec4 _108 = texture(sampler2D(_13, _9), _97); - vec3 _110 = mix(_105.xyz, _108.xyz, _101); - vec3 _123; - vec3 _124; - if (floatBitsToInt(_7._m9) != 0) { - float _117 = _7._m9 * _77; - _123 = _110 * ((1.0 + _117) - _7._m9); - _124 = _102 * (1.0 - _117); - } else { - _123 = _110; - _124 = _102; - } - _5 = vec4(mix(_124, _123, vec3(_77)), 1.0); -} - +#version 450 + +#extension GL_GOOGLE_include_directive : require +#include "./tonemap.glsl" + +layout(set = 1, binding = 31, std140) uniform _6_7 { + vec4 _m0; + vec4 _m1; + vec4 _m2; + vec2 _m3; + vec2 _m4; + vec4 _m5; + vec4 _m6; + float _m7; + float _m8; + float _m9; +} +_7; + +layout(set = 1, binding = 34) uniform sampler _9; +layout(set = 1, binding = 128) uniform texture2D _11; +layout(set = 1, binding = 130) uniform texture2D _12; +layout(set = 1, binding = 131) uniform texture2D _13; +layout(set = 1, binding = 132) uniform texture2D _14; +layout(set = 1, binding = 133) uniform texture2D _15; + +layout(location = 0) in vec2 _4; +layout(location = 0) out vec4 _5; + +void main() { + vec4 _48 = texture(sampler2D(_11, _9), _4); + float _50 = _48.z; + float _52 = floor(_50 * 14.99989986419677734375); + float _58 = (_52 * 0.0625) + (_48.x * 0.05859375); + float _60 = _48.y * 0.9375; + vec4 _64 = texture(sampler2D(_14, _9), vec2(0.001953125, 0.03125) + vec2(_58, _60)); + vec4 _70 = texture(sampler2D(_14, _9), vec2(0.001953125, 0.03125) + vec2(_58 + 0.0625, _60)); + vec3 _73 = mix(_64.xyz, _70.xyz, vec3((_50 * 15.0) - _52)); + vec4 _76 = texture(sampler2D(_15, _9), _4); + float _77 = _76.x; + float _79 = _73.z; + float _81 = floor(_79 * 14.99989986419677734375); + float _87 = (_81 * 0.0625) + (_73.x * 0.05859375); + float _89 = _73.y * 0.9375; + vec2 _91 = vec2(0.001953125, 0.03125) + vec2(_87, _89); + vec4 _93 = texture(sampler2D(_12, _9), _91); + vec2 _97 = vec2(0.001953125, 0.03125) + vec2(_87 + 0.0625, _89); + vec4 _99 = texture(sampler2D(_12, _9), _97); + vec3 _101 = vec3((_79 * 15.0) - _81); + vec3 _102 = mix(_93.xyz, _99.xyz, _101); + vec4 _105 = texture(sampler2D(_13, _9), _91); + vec4 _108 = texture(sampler2D(_13, _9), _97); + vec3 _110 = mix(_105.xyz, _108.xyz, _101); + vec3 _123; + vec3 _124; + if (floatBitsToInt(_7._m9) != 0) { + float _117 = _7._m9 * _77; + _123 = _110 * ((1.0 + _117) - _7._m9); + _124 = _102 * (1.0 - _117); + } else { + _123 = _110; + _124 = _102; + } + _5 = vec4(mix(_124, _123, vec3(_77)), 1.0); + + _5.rgb = ApplyGradingAndDisplayMap(_5.rgb, _4.xy); +} + diff --git a/src/games/rdr2vk/tonemap/0xCF7FE0D7.frag.glsl b/src/games/rdr2vk/tonemap/0xCF7FE0D7.frag.glsl index b8ec9dec82..a3592ae05d 100644 --- a/src/games/rdr2vk/tonemap/0xCF7FE0D7.frag.glsl +++ b/src/games/rdr2vk/tonemap/0xCF7FE0D7.frag.glsl @@ -722,7 +722,7 @@ void main() { _343 = false; _344 = _309; } - vec3 _348 = min(_344 * texelFetch(_63, ivec2(0), 0).x, vec3(65504.0)); + vec3 _348 = min(_344 * texelFetch(_63, ivec2(0), 0).x, vec3(GetTonemapClampMax())); bool _349 = !_343; float _485; vec3 _486; @@ -740,7 +740,7 @@ void main() { vec3 _484; if (floatBitsToInt(_68._m51.w) != 0) { vec2 _460 = ((_4.xy - _68._m50.xy) * mat2(vec2(_68._m52.x, _68._m52.y), vec2(_68._m52.z, _68._m52.w))) * _68._m50.zw; - float _464 = max((dot(_460, _460) - _68._m53.x) * _68._m53.w, 0.0); + float _464 = CUSTOM_VIGNETTE * max((dot(_460, _460) - _68._m53.x) * _68._m53.w, 0.0); bool _465 = _464 < 1.0; _484 = mix(_431, (_431 * _68._m51.xyz) * _68._m51.w, vec3(_465 ? (_465 ? (1.0 - pow(2.0, (-10.0) * _464)) : 1.0) : (0.9980499744415283203125 + (((_464 - 1.0) > 0.0) ? pow(2.0, 10.0 * (_464 - 2.0)) : 0.0)))); } else { @@ -754,6 +754,9 @@ void main() { } vec3 _523 = _486 * mix(mix(_68._m54.xyz, _68._m56.xyz, vec3(clamp(clamp(_4.y * _68._m57.y, 0.0, 1.0) + _68._m54.w, 0.0, 1.0))), mix(_68._m56.xyz, _68._m55.xyz, vec3(clamp(clamp(clamp(_4.y - _68._m56.w, 0.0, 1.0) * _68._m57.x, 0.0, 1.0) - _68._m55.w, 0.0, 1.0))), vec3(_4.y)); bool _526 = _66._m3 != 0u; +#if 1 + vec3 _589 = ApplyToneMap(_523, _526, _485, _66._m6, _66._m4, _66._m10, _312.rgb, _313); +#else vec3 _589; if (_526) { vec3 _566 = max(vec3(0.0), _523 * (_485 / _66._m6)); @@ -764,6 +767,7 @@ void main() { vec3 _535 = _532 * _312.x; _589 = clamp(((((_532 * (_535 + vec3(_313.x))) + vec3(_313.y)) / ((_532 * (_535 + vec3(_312.y))) + vec3(_313.z))) - vec3(_313.w)) * _312.z, vec3(0.0), vec3(1.0)); } +#endif vec3 _637; if (_349) { vec3 _636; @@ -836,8 +840,12 @@ void main() { } vec3 _1032; if (_349) { +#if 1 + float _899 = CompressLUTInput(_874, _658, _66._m5, _66._m7, _66._m8, _66._m9); +#else float _893 = max(max(_874.x, max(_874.y, _874.z)), 9.9999997473787516355514526367188e-05); float _899 = (_658 && (!(_66._m5 != 0u))) ? 1.0 : (((_893 > _66._m7) ? ((_893 * _66._m8) + _66._m9) : _893) / _893); +#endif vec3 _900 = _874 * _899; float _903 = _900.z; float _905 = floor(_903 * 14.99989986419677734375); @@ -867,7 +875,7 @@ void main() { } #if 1 - _1032 = DecodeLUTInput(_1032); + _1032 = DecodeLUTInput(_1032, _874); #endif vec4 _1037 = vec4(_1032, dot(_1032, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625))); @@ -880,7 +888,7 @@ void main() { } else { _1100 = _1089; } - vec3 _1102 = _1038 + (_1100 * mix(_68._m39.xyz, _68._m40.xyz, pow(clamp((mix(vec3(max(_1032.x, max(_1032.y, _1032.z))), _1038, bvec3(floatBitsToInt(_68._m41.w) != 0)) - _68._m42.xyz) * _68._m41.xyz, vec3(0.0), vec3(1.0)), vec3(_68._m42.w)))); + vec3 _1102 = _1038 + CUSTOM_DITHERING * (_1100 * mix(_68._m39.xyz, _68._m40.xyz, pow(clamp((mix(vec3(max(_1032.x, max(_1032.y, _1032.z))), _1038, bvec3(floatBitsToInt(_68._m41.w) != 0)) - _68._m42.xyz) * _68._m41.xyz, vec3(0.0), vec3(1.0)), vec3(_68._m42.w)))); vec4 _1103 = vec4(_1102.x, _1102.y, _1102.z, _1037.w); vec4 _1108; if (!_526) { @@ -889,5 +897,9 @@ void main() { _1108 = _1103; } _6 = _1108; + + + _6.rgb = ApplyGradingAndDisplayMap(_6.rgb, _4.xy); } + diff --git a/src/games/rdr2vk/tonemap/0xDD04030E.frag.glsl b/src/games/rdr2vk/tonemap/0xDD04030E.frag.glsl index 06abcece19..5b562622f6 100644 --- a/src/games/rdr2vk/tonemap/0xDD04030E.frag.glsl +++ b/src/games/rdr2vk/tonemap/0xDD04030E.frag.glsl @@ -790,7 +790,7 @@ void main() { _547 = false; _548 = _513; } - vec3 _552 = min(_548 * texelFetch(_64, ivec2(0), 0).x, vec3(65504.0)); + vec3 _552 = min(_548 * texelFetch(_64, ivec2(0), 0).x, vec3(GetTonemapClampMax())); bool _553 = !_547; float _689; vec3 _690; @@ -808,7 +808,7 @@ void main() { vec3 _688; if (floatBitsToInt(_69._m51.w) != 0) { vec2 _664 = ((_4.xy - _69._m50.xy) * mat2(vec2(_69._m52.x, _69._m52.y), vec2(_69._m52.z, _69._m52.w))) * _69._m50.zw; - float _668 = max((dot(_664, _664) - _69._m53.x) * _69._m53.w, 0.0); + float _668 = CUSTOM_VIGNETTE * max((dot(_664, _664) - _69._m53.x) * _69._m53.w, 0.0); bool _669 = _668 < 1.0; _688 = mix(_635, (_635 * _69._m51.xyz) * _69._m51.w, vec3(_669 ? (_669 ? (1.0 - pow(2.0, (-10.0) * _668)) : 1.0) : (0.9980499744415283203125 + (((_668 - 1.0) > 0.0) ? pow(2.0, 10.0 * (_668 - 2.0)) : 0.0)))); } else { @@ -822,6 +822,9 @@ void main() { } vec3 _727 = _690 * mix(mix(_69._m54.xyz, _69._m56.xyz, vec3(clamp(clamp(_4.y * _69._m57.y, 0.0, 1.0) + _69._m54.w, 0.0, 1.0))), mix(_69._m56.xyz, _69._m55.xyz, vec3(clamp(clamp(clamp(_4.y - _69._m56.w, 0.0, 1.0) * _69._m57.x, 0.0, 1.0) - _69._m55.w, 0.0, 1.0))), vec3(_4.y)); bool _730 = _67._m3 != 0u; +#if 1 + vec3 _793 = ApplyToneMap(_727, _730, _689, _67._m6, _67._m4, _67._m10, _516.rgb, _517); +#else vec3 _793; if (_730) { vec3 _770 = max(vec3(0.0), _727 * (_689 / _67._m6)); @@ -832,6 +835,7 @@ void main() { vec3 _739 = _736 * _516.x; _793 = clamp(((((_736 * (_739 + vec3(_517.x))) + vec3(_517.y)) / ((_736 * (_739 + vec3(_516.y))) + vec3(_517.z))) - vec3(_517.w)) * _516.z, vec3(0.0), vec3(1.0)); } +#endif vec3 _841; if (_553) { vec3 _840; @@ -903,8 +907,12 @@ void main() { } vec3 _1389; if (_553) { +#if 1 + float _1103 = CompressLUTInput(_1078, _862, _67._m5, _67._m7, _67._m8, _67._m9); +#else float _1097 = max(max(_1078.x, max(_1078.y, _1078.z)), 9.9999997473787516355514526367188e-05); float _1103 = (_862 && (!(_67._m5 != 0u))) ? 1.0 : (((_1097 > _67._m7) ? ((_1097 * _67._m8) + _67._m9) : _1097) / _1097); +#endif vec3 _1104 = _1078 * _1103; float _1107 = _1104.z; float _1109 = floor(_1107 * 14.99989986419677734375); @@ -982,7 +990,7 @@ void main() { } #if 1 - _1389 = DecodeLUTInput(_1389); + _1389 = DecodeLUTInput(_1389, _1078); #endif vec4 _1394 = vec4(_1389, dot(_1389, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625))); @@ -995,7 +1003,7 @@ void main() { } else { _1456 = _1445; } - vec3 _1458 = _1395 + (_1456 * mix(_69._m39.xyz, _69._m40.xyz, pow(clamp((mix(vec3(max(_1389.x, max(_1389.y, _1389.z))), _1395, bvec3(floatBitsToInt(_69._m41.w) != 0)) - _69._m42.xyz) * _69._m41.xyz, vec3(0.0), vec3(1.0)), vec3(_69._m42.w)))); + vec3 _1458 = _1395 + CUSTOM_DITHERING * (_1456 * mix(_69._m39.xyz, _69._m40.xyz, pow(clamp((mix(vec3(max(_1389.x, max(_1389.y, _1389.z))), _1395, bvec3(floatBitsToInt(_69._m41.w) != 0)) - _69._m42.xyz) * _69._m41.xyz, vec3(0.0), vec3(1.0)), vec3(_69._m42.w)))); vec4 _1459 = vec4(_1458.x, _1458.y, _1458.z, _1394.w); vec4 _1464; if (!_730) { @@ -1004,5 +1012,9 @@ void main() { _1464 = _1459; } _6 = _1464; + + + _6.rgb = ApplyGradingAndDisplayMap(_6.rgb, _4.xy); } + diff --git a/src/games/rdr2vk/tonemap/0xE3E0B5C4.frag.glsl b/src/games/rdr2vk/tonemap/0xE3E0B5C4.frag.glsl index 173e002523..c9fbf7e89c 100644 --- a/src/games/rdr2vk/tonemap/0xE3E0B5C4.frag.glsl +++ b/src/games/rdr2vk/tonemap/0xE3E0B5C4.frag.glsl @@ -731,7 +731,7 @@ void main() { _354 = false; _355 = _320; } - vec3 _359 = min(_355 * texelFetch(_63, ivec2(0), 0).x, vec3(65504.0)); + vec3 _359 = min(_355 * texelFetch(_63, ivec2(0), 0).x, vec3(GetTonemapClampMax())); bool _360 = !_354; float _496; vec3 _497; @@ -749,7 +749,7 @@ void main() { vec3 _495; if (floatBitsToInt(_68._m51.w) != 0) { vec2 _471 = ((_4.xy - _68._m50.xy) * mat2(vec2(_68._m52.x, _68._m52.y), vec2(_68._m52.z, _68._m52.w))) * _68._m50.zw; - float _475 = max((dot(_471, _471) - _68._m53.x) * _68._m53.w, 0.0); + float _475 = CUSTOM_VIGNETTE * max((dot(_471, _471) - _68._m53.x) * _68._m53.w, 0.0); bool _476 = _475 < 1.0; _495 = mix(_442, (_442 * _68._m51.xyz) * _68._m51.w, vec3(_476 ? (_476 ? (1.0 - pow(2.0, (-10.0) * _475)) : 1.0) : (0.9980499744415283203125 + (((_475 - 1.0) > 0.0) ? pow(2.0, 10.0 * (_475 - 2.0)) : 0.0)))); } else { @@ -763,6 +763,9 @@ void main() { } vec3 _534 = _497 * mix(mix(_68._m54.xyz, _68._m56.xyz, vec3(clamp(clamp(_4.y * _68._m57.y, 0.0, 1.0) + _68._m54.w, 0.0, 1.0))), mix(_68._m56.xyz, _68._m55.xyz, vec3(clamp(clamp(clamp(_4.y - _68._m56.w, 0.0, 1.0) * _68._m57.x, 0.0, 1.0) - _68._m55.w, 0.0, 1.0))), vec3(_4.y)); bool _537 = _66._m3 != 0u; +#if 1 + vec3 _600 = ApplyToneMap(_534, _537, _496, _66._m6, _66._m4, _66._m10, _323.rgb, _324); +#else vec3 _600; if (_537) { vec3 _577 = max(vec3(0.0), _534 * (_496 / _66._m6)); @@ -773,6 +776,7 @@ void main() { vec3 _546 = _543 * _323.x; _600 = clamp(((((_543 * (_546 + vec3(_324.x))) + vec3(_324.y)) / ((_543 * (_546 + vec3(_323.y))) + vec3(_324.z))) - vec3(_324.w)) * _323.z, vec3(0.0), vec3(1.0)); } +#endif vec3 _648; if (_360) { vec3 _647; @@ -845,8 +849,12 @@ void main() { } vec3 _1196; if (_360) { +#if 1 + float _910 = CompressLUTInput(_885, _669, _66._m5, _66._m7, _66._m8, _66._m9); +#else float _904 = max(max(_885.x, max(_885.y, _885.z)), 9.9999997473787516355514526367188e-05); float _910 = (_669 && (!(_66._m5 != 0u))) ? 1.0 : (((_904 > _66._m7) ? ((_904 * _66._m8) + _66._m9) : _904) / _904); +#endif vec3 _911 = _885 * _910; float _914 = _911.z; float _916 = floor(_914 * 14.99989986419677734375); @@ -924,7 +932,7 @@ void main() { } #if 1 - _1196 = DecodeLUTInput(_1196); + _1196 = DecodeLUTInput(_1196, _885); #endif vec4 _1201 = vec4(_1196, dot(_1196, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625))); @@ -937,7 +945,7 @@ void main() { } else { _1264 = _1253; } - vec3 _1266 = _1202 + (_1264 * mix(_68._m39.xyz, _68._m40.xyz, pow(clamp((mix(vec3(max(_1196.x, max(_1196.y, _1196.z))), _1202, bvec3(floatBitsToInt(_68._m41.w) != 0)) - _68._m42.xyz) * _68._m41.xyz, vec3(0.0), vec3(1.0)), vec3(_68._m42.w)))); + vec3 _1266 = _1202 + CUSTOM_DITHERING * (_1264 * mix(_68._m39.xyz, _68._m40.xyz, pow(clamp((mix(vec3(max(_1196.x, max(_1196.y, _1196.z))), _1202, bvec3(floatBitsToInt(_68._m41.w) != 0)) - _68._m42.xyz) * _68._m41.xyz, vec3(0.0), vec3(1.0)), vec3(_68._m42.w)))); vec4 _1267 = vec4(_1266.x, _1266.y, _1266.z, _1201.w); vec4 _1272; if (!_537) { @@ -946,5 +954,9 @@ void main() { _1272 = _1267; } _6 = _1272; + + + _6.rgb = ApplyGradingAndDisplayMap(_6.rgb, _4.xy); } + diff --git a/src/games/rdr2vk/tonemap/compiled/0x0C1275BE.frag.spv b/src/games/rdr2vk/tonemap/compiled/0x0C1275BE.frag.spv index 02bb153c246ab0e92bdfcd08bff528162504106f..153bad3594b0c378088a3ac5e288b8fd046ad858 100644 GIT binary patch literal 135648 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

+IT_yD;W)4KuADzV;F7Z-ytl&@ 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 bjH}+<>oYgzD6!828(Y6vzj^i9_&ojvJYAwg literal 0 HcmV?d00001 diff --git a/src/games/rdr2vk/tonemap/compiled/0x54F0BD84.frag.spv b/src/games/rdr2vk/tonemap/compiled/0x54F0BD84.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..c51e13b5cb2d7e0c0940c79a32ad130874485261 GIT binary patch literal 67980 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 literal 0 HcmV?d00001 diff --git a/src/games/rdr2vk/tonemap/compiled/0x6B9382CA.frag.spv b/src/games/rdr2vk/tonemap/compiled/0x6B9382CA.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..a0407b6e9a658bb7368a11583296b69b7e76f3de GIT binary patch literal 80820 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 IbBf0Q0mW5HHPTJj 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 literal 0 HcmV?d00001 diff --git a/src/games/rdr2vk/tonemap/compiled/0xCD6F15F2.frag.spv b/src/games/rdr2vk/tonemap/compiled/0xCD6F15F2.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..0905cb2dc3cfb278576c8051ec45a77d1abbe358 GIT binary patch literal 13276 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