diff --git a/src/ShaderCache.cpp b/src/ShaderCache.cpp index c02199dc86..6c650fba7d 100644 --- a/src/ShaderCache.cpp +++ b/src/ShaderCache.cpp @@ -1507,7 +1507,7 @@ namespace SIE { using enum RE::ImageSpaceManager::ImageSpaceEffectEnum; - static const std::unordered_map descriptors{ + static const ankerl::unordered_dense::map descriptors{ // { "BSImagespaceShaderISBlur", static_cast(ISBlur) }, // { "BSImagespaceShaderBlur3", static_cast(ISBlur3) }, // { "BSImagespaceShaderBlur5", static_cast(ISBlur5) }, diff --git a/src/ShaderCache.h b/src/ShaderCache.h index 801bed9b5f..54b1f60a8e 100644 --- a/src/ShaderCache.h +++ b/src/ShaderCache.h @@ -647,15 +647,14 @@ namespace SIE ~ShaderCache(); - std::array>, - static_cast(RE::BSShader::Type::Total)> - vertexShaders; - std::array>, - static_cast(RE::BSShader::Type::Total)> - pixelShaders; - std::array>, - static_cast(RE::BSShader::Type::Total)> - computeShaders; + template + using ShaderMapArray = std::array< + ankerl::unordered_dense::map>, + RE::BSShader::Type::Total>; + + ShaderMapArray vertexShaders; + ShaderMapArray pixelShaders; + ShaderMapArray computeShaders; bool isEnabled = true; bool isDiskCache = true; @@ -669,12 +668,12 @@ namespace SIE std::mutex pixelShadersMutex; std::mutex computeShadersMutex; CompilationSet compilationSet; - std::unordered_map shaderMap{}; - std::mutex mapMutex; // guard for shaderMap - std::unordered_map modifiedShaderMap{}; // hashmap when a shader source file last modified - std::mutex modifiedMapMutex; // guard for modifiedShaderMap - std::unordered_map> hlslToShaderMap{}; // hashmap linking specific hlsl files to shader keys in shaderMap - std::mutex hlslMapMutex; // guard for hlslToShaderMap + ankerl::unordered_dense::map shaderMap{}; + std::mutex mapMutex; // guard for shaderMap + ankerl::unordered_dense::map modifiedShaderMap{}; // hashmap when a shader source file last modified + std::mutex modifiedMapMutex; // guard for modifiedShaderMap + ankerl::unordered_dense::map> hlslToShaderMap{}; // hashmap linking specific hlsl files to shader keys in shaderMap + std::mutex hlslMapMutex; // guard for hlslToShaderMap // efsw file watcher efsw::FileWatcher* fileWatcher = nullptr; diff --git a/src/TruePBR.cpp b/src/TruePBR.cpp index d5c34a52ca..25d0178b44 100644 --- a/src/TruePBR.cpp +++ b/src/TruePBR.cpp @@ -983,11 +983,9 @@ bool TruePBR::BSLightingShader_SetupMaterial(RE::BSLightingShader* shader, RE::B shadowState->SetPSTextureAddressMode(11, RE::BSGraphics::TextureAddressMode::kClampSClampT); } - std::array characterLightParams; + std::array characterLightParams{}; // in C++, arrays will be zero-initialized if (smState->characterLightEnabled) { std::copy_n(smState->characterLightParams, 4, characterLightParams.data()); - } else { - std::fill_n(characterLightParams.data(), 4, 0.f); } shadowState->SetPSConstant(characterLightParams, RE::BSGraphics::ConstantGroupLevel::PerMaterial, lightingPSConstants.CharacterLightParams); }