diff --git a/src/Deferred.cpp b/src/Deferred.cpp index 778048c554..088dc80f7c 100644 --- a/src/Deferred.cpp +++ b/src/Deferred.cpp @@ -1,5 +1,7 @@ #include "Deferred.h" +#include + #include "ShaderCache.h" #include "State.h" #include "TruePBR.h" @@ -175,6 +177,13 @@ void Deferred::SetupResources() prevDiffuseAmbientTexture->CreateSRV(srvDesc); prevDiffuseAmbientTexture->CreateUAV(uavDesc); } + + // Testing code for imagespace shaders + { + auto device = globals::d3d::device; + auto context = globals::d3d::context; + DirectX::CreateDDSTextureFromFile(device, context, L"Data\\Shaders\\LUT.dds", nullptr, lutTexture.put()); + } } void Deferred::CopyShadowData() @@ -716,6 +725,14 @@ ID3D11ComputeShader* Deferred::GetComputeMainCompositeInterior() return mainCompositeInteriorCS; } +// Testing code for imagespace shaders +void Deferred::BindLUT() +{ + auto view = lutTexture.get(); + if (view) + globals::d3d::context->PSSetShaderResources(100, 1, &view); +} + void Deferred::Hooks::Main_RenderShadowMaps::thunk() { func(); diff --git a/src/Deferred.h b/src/Deferred.h index 9382396203..5f7ca591db 100644 --- a/src/Deferred.h +++ b/src/Deferred.h @@ -77,6 +77,9 @@ class Deferred Buffer* perShadow = nullptr; ID3D11ShaderResourceView* shadowView = nullptr; + winrt::com_ptr lutTexture = nullptr; + void BindLUT(); + struct Hooks { struct Main_RenderShadowMaps @@ -127,6 +130,26 @@ class Deferred static inline REL::Relocation func; }; + struct BSImagespaceShaderHDRTonemapBlendCinematic_SetupTechnique + { + static void thunk(RE::BSShader* a_shader, RE::BSShaderMaterial* a_material) + { + GetSingleton()->BindLUT(); + func(a_shader, a_material); + } + static inline REL::Relocation func; + }; + + struct BSImagespaceShaderHDRTonemapBlendCinematicFade_SetupTechnique + { + static void thunk(RE::BSShader* a_shader, RE::BSShaderMaterial* a_material) + { + GetSingleton()->BindLUT(); + func(a_shader, a_material); + } + static inline REL::Relocation func; + }; + static void Install() { stl::write_vfunc<0x35, BSCubeMapCamera_RenderCubemap>(RE::VTABLE_BSCubeMapCamera[0]); @@ -142,6 +165,9 @@ class Deferred stl::write_thunk_call(REL::RelocationID(99943, 106588).address() + REL::Relocate(0xFE, 0xF4)); stl::write_thunk_call(REL::RelocationID(99947, 106592).address() + 0x107); + stl::write_vfunc<0x2, BSImagespaceShaderHDRTonemapBlendCinematic_SetupTechnique>(RE::VTABLE_BSImagespaceShaderHDRTonemapBlendCinematic[0]); + stl::write_vfunc<0x2, BSImagespaceShaderHDRTonemapBlendCinematicFade_SetupTechnique>(RE::VTABLE_BSImagespaceShaderHDRTonemapBlendCinematicFade[0]); + logger::info("[Deferred] Installed hooks"); } };