From 9e207021808fd1d5b43359d484b13e9f2e9ad4c2 Mon Sep 17 00:00:00 2001 From: PancakeTAS Date: Sat, 5 Jul 2025 00:22:06 +0200 Subject: [PATCH] get rid of libcrypto --- README.md | 1 - lsfg-vk-gen/CMakeLists.txt | 2 +- lsfg-vk-gen/include/pool/extract.hpp | 4 +- lsfg-vk-gen/src/pool/extract.cpp | 42 +++++++---------- lsfg-vk-gen/src/pool/shaderpool.cpp | 67 +++++++++++++--------------- 5 files changed, 52 insertions(+), 64 deletions(-) diff --git a/README.md b/README.md index ba3455f..b2d8e4a 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,6 @@ In order to compile LSFG, make sure you have the following components installed - CMake build system - Meson build system (for DXVK) - Ninja build system (backend for CMake) -- openssl's libcrypto Compiling lsfg-vk is relatively straight forward, as everything is neatly integrated into CMake: ```bash diff --git a/lsfg-vk-gen/CMakeLists.txt b/lsfg-vk-gen/CMakeLists.txt index 0fb0a64..21f5bb3 100644 --- a/lsfg-vk-gen/CMakeLists.txt +++ b/lsfg-vk-gen/CMakeLists.txt @@ -92,7 +92,7 @@ target_include_directories(lsfg-vk-gen PRIVATE include PUBLIC public) target_link_libraries(lsfg-vk-gen - PUBLIC vulkan peparse crypto dxvk) + PUBLIC vulkan peparse dxvk) set_target_properties(lsfg-vk-gen PROPERTIES CXX_CLANG_TIDY clang-tidy) target_compile_options(lsfg-vk-gen PRIVATE diff --git a/lsfg-vk-gen/include/pool/extract.hpp b/lsfg-vk-gen/include/pool/extract.hpp index 1a4a76a..53e4b67 100644 --- a/lsfg-vk-gen/include/pool/extract.hpp +++ b/lsfg-vk-gen/include/pool/extract.hpp @@ -35,7 +35,7 @@ namespace LSFG::Pool { /// /// @throws std::runtime_error if the resource is not found. /// - [[nodiscard]] std::vector getResource(const std::string& hash) const; + [[nodiscard]] std::vector getResource(uint32_t hash) const; // Trivially copyable, moveable and destructible Extractor(const Extractor&) = delete; @@ -44,7 +44,7 @@ namespace LSFG::Pool { Extractor& operator=(Extractor&&) = default; ~Extractor() = default; private: - std::unordered_map> resources; + std::unordered_map> resources; }; /// diff --git a/lsfg-vk-gen/src/pool/extract.cpp b/lsfg-vk-gen/src/pool/extract.cpp index 84b0c70..a7dc114 100644 --- a/lsfg-vk-gen/src/pool/extract.cpp +++ b/lsfg-vk-gen/src/pool/extract.cpp @@ -11,7 +11,6 @@ #include #include -#include #include #include #include @@ -21,28 +20,29 @@ using namespace LSFG::Pool; namespace { - using ResourceMap = std::unordered_map>; + using ResourceMap = std::unordered_map>; + + uint32_t fnv1a_hash(const std::vector& data) { + // does not need be secure + uint32_t hash = 0x811C9DC5; + for (auto byte : data) { + hash ^= byte; + hash *= 0x01000193; + } + return hash; + } /// Callback function for each resource. int on_resource(void* data, const peparse::resource& res) { if (res.type != peparse::RT_RCDATA || res.buf == nullptr || res.buf->bufLen <= 0) return 0; - - // hash the resource data - std::array hash{}; - SHA256(res.buf->buf, res.buf->bufLen, hash.data()); - - std::array base64{}; - const int base64_len = EVP_EncodeBlock(base64.data(), hash.data(), hash.size()); - const std::string hash_str(reinterpret_cast(base64.data()), - static_cast(base64_len)); - - // store the resource std::vector resource_data(res.buf->bufLen); std::copy_n(res.buf->buf, res.buf->bufLen, resource_data.data()); + const uint32_t hash = fnv1a_hash(resource_data); + auto* map = reinterpret_cast(data); - (*map)[hash_str] = resource_data; + (*map)[hash] = resource_data; return 0; } @@ -58,27 +58,19 @@ Extractor::Extractor(const std::string& path) { peparse::DestructParsedPE(pe); } -std::vector Extractor::getResource(const std::string& hash) const { +std::vector Extractor::getResource(uint32_t hash) const { auto it = this->resources.find(hash); if (it != this->resources.end()) return it->second; - throw std::runtime_error("Resource not found: " + hash); + throw std::runtime_error("Resource not found."); } std::vector Pool::dxbcToSpirv(const std::vector& dxbc) { - // create sha1 hash of the dxbc data - std::array hash{}; - SHA1(dxbc.data(), dxbc.size(), hash.data()); - std::stringstream ss; - for (const auto& byte : hash) - ss << std::hex << std::setw(2) << std::setfill('0') << static_cast(byte); - const std::string hash_str = ss.str(); - // compile the shader dxvk::DxbcReader reader(reinterpret_cast(dxbc.data()), dxbc.size()); dxvk::DxbcModule module(reader); const dxvk::DxbcModuleInfo info{}; - auto shader = module.compile(info, "CS_" + hash_str); + auto shader = module.compile(info, "CS"); // extract spir-v from d3d11 shader auto code = shader->getRawCode(); diff --git a/lsfg-vk-gen/src/pool/shaderpool.cpp b/lsfg-vk-gen/src/pool/shaderpool.cpp index d7fd22e..46dd7c1 100644 --- a/lsfg-vk-gen/src/pool/shaderpool.cpp +++ b/lsfg-vk-gen/src/pool/shaderpool.cpp @@ -1,43 +1,40 @@ #include "pool/shaderpool.hpp" -#include "pool/extract.hpp" - using namespace LSFG; using namespace LSFG::Pool; -const std::unordered_map SHADERS = { - { "alpha/0.spv", "lilEUr7nBgA8P6VSqCms09t9b+DZH6dVlcefVuFHlc8=" }, - { "alpha/1.spv", "2TRNidol3BNs/aeLl2/Om7z8bAlpehkOPVtmMao1q84=" }, - { "alpha/2.spv", "tP6qIJZhd4pGr1pop1e9ztW1gwp97ufQa2GaBZBYZJE=" }, - { "alpha/3.spv", "gA4ZejNp+RwtqjtTzGdGf5D/CjSGlwFB2nOgDAIv91k=" }, - { "beta/0.spv", "uQ/xsBMKRuJhbxstBukWMhXYuppPAYygxkb/3kNu4vI=" }, - { "beta/1.spv", "BUbrL9fZREXLlg1lmlTYD6n8DwpzHkho5bI3RLbfNJg=" }, - { "beta/2.spv", "bz0lxQjMYp6HLqw12X3jfV7H0SOZKrqUhgtw17WgTx4=" }, - { "beta/3.spv", "JA5/8p7yiiiCxmuiTsOR9Fb/z1qp8KlyU2wo9Wfpbcc=" }, - { "beta/4.spv", "/I+iYEwzOFylXZJWWNQ/oUT6SeLVnpotNXGV8y/FUVk=" }, - { "delta/0.spv", "gtBWy1WtP8NO+Z1sSPMgOJ75NaPEKvthc7imNGzJkGI=" }, - { "delta/1.spv", "JiqZZIoHay/uS1ptzlz3EWKUPct/jQHoFtN0qlEtVUU=" }, - { "delta/2.spv", "zkBa37GvAG8izeIv4o/3OowpxiobfOdNmPyVWl2BSWY=" }, - { "delta/3.spv", "neIMl/PCPonXqjtZykMb9tR4yW7JkZfMTqZPGOmJQUg=" }, - { "downsample.spv", "F9BppS+ytDjO3aoMEY7deMzLaSUhX8EuI+eH8654Fpw=" }, - { "epsilon/0.spv", "YHECg9LrgTCM8lABFOXkC5qTKoHsIMWnZ6ST3dexD08=" }, - { "epsilon/1.spv", "Uv7CfTi6x69c9Exuc16UqA7fvLTUGicHZVi5jhHKo0w=" }, - { "epsilon/2.spv", "0vmxxGRa6gbl5dqmKTBO9x/ZM2oEUJ5JtGfqcHhvouQ=" }, - { "epsilon/3.spv", "Sa/gkbCCDyCyUh8BSOa882t4qDc51oeP6+Kj3O3EaxM=" }, - { "extract.spv", "xKUdoEwFJDsc/kX/aY1FyzlMlOaJX4iHQLlthe2MvBs=" }, - { "gamma/0.spv", "AJuuF/X9NnypgBd89GbXMKcXC2meysYayiZQZwu3WhU=" }, - { "gamma/1.spv", "LLr/3D+whLd6XuKkBS7rlaNN+r8qB/Khr4ii+M7KSxY=" }, - { "gamma/2.spv", "KjHXdawBR8AMK7Kud/vXJmJTddXFKppREEpsykjwZDc=" }, - { "gamma/3.spv", "zAnAC73i76AJjv0o1To3bBu2jnIWXzX3NlSMvU3Lgxw=" }, - { "gamma/4.spv", "ivQ7ltprazBOXb46yxul9HJ5ByJk2LbG034cC6NkEpk=" }, - { "gamma/5.spv", "lHYgyCpWnMIB74HL22BKQyoqUGvUjgR79W4vXFXzXe4=" }, - { "magic.spv", "ZdoTjEhrlbAxq0MtaJyk6jQ5+hrySEsnvn+jseukAuI=" }, - { "merge.spv", "dnluf4IHKNaqz6WvH7qodn+fZ56ORx+w3MUOwH7huok=" }, - { "zeta/0.spv", "LLr/3D+whLd6XuKkBS7rlaNN+r8qB/Khr4ii+M7KSxY=" }, - { "zeta/1.spv", "KjHXdawBR8AMK7Kud/vXJmJTddXFKppREEpsykjwZDc=" }, - { "zeta/2.spv", "zAnAC73i76AJjv0o1To3bBu2jnIWXzX3NlSMvU3Lgxw=" }, - { "zeta/3.spv", "ivQ7ltprazBOXb46yxul9HJ5ByJk2LbG034cC6NkEpk=" }, - { "zeta/4.spv", "lHYgyCpWnMIB74HL22BKQyoqUGvUjgR79W4vXFXzXe4=" } +const std::unordered_map SHADERS = { + { "downsample.spv", 0xe365474d }, + { "alpha/0.spv", 0x35f63c83 }, + { "alpha/1.spv", 0x83e5240d }, + { "alpha/2.spv", 0x5d64d9f1 }, + { "alpha/3.spv", 0xad77afe1 }, + { "beta/0.spv", 0xa986ccbb }, + { "beta/1.spv", 0x60944cf5 }, + { "beta/2.spv", 0xb1c8f69b }, + { "beta/3.spv", 0x87cbe880 }, + { "beta/4.spv", 0xc2c5507d }, + { "gamma/0.spv", 0xccce9dab }, + { "gamma/1.spv", 0x7719e229 }, + { "gamma/2.spv", 0xfb1a7643 }, + { "gamma/3.spv", 0xe0553cd8 }, + { "gamma/4.spv", 0xf73c136f }, + { "gamma/5.spv", 0xa34959c }, + { "magic.spv", 0x443ea7a1 }, + { "delta/0.spv", 0x141daaac }, + { "delta/1.spv", 0x2a0ed691 }, + { "delta/2.spv", 0x23bdc583 }, + { "delta/3.spv", 0x52bc5e0f }, + { "epsilon/0.spv", 0x128eb7d7 }, + { "epsilon/1.spv", 0xbab811ad }, + { "epsilon/2.spv", 0x1d4b902d }, + { "epsilon/3.spv", 0x91236549 }, + { "zeta/0.spv", 0x7719e229 }, + { "zeta/1.spv", 0xfb1a7643 }, + { "zeta/2.spv", 0xe0553cd8 }, + { "zeta/3.spv", 0xf73c136f }, + { "extract.spv", 0xb6cb084a }, + { "merge.spv", 0xfc0aedfa } }; Core::ShaderModule ShaderPool::getShader(