diff --git a/CMakeLists.txt b/CMakeLists.txt index 73156a4..299dadf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -87,11 +87,15 @@ add_custom_command(OUTPUT ${CMAKE_SOURCE_DIR}/RecompiledPatches/patches_bin.c DEPENDS ${CMAKE_SOURCE_DIR}/patches/patches.bin ) -# Generate mm_shader_cache.c from the MM shader cache -add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/mm_shader_cache.c ${CMAKE_CURRENT_BINARY_DIR}/mm_shader_cache.h - COMMAND file_to_c ${CMAKE_SOURCE_DIR}/shadercache/mm_shader_cache.bin mm_shader_cache_bytes ${CMAKE_CURRENT_BINARY_DIR}/mm_shader_cache.c ${CMAKE_CURRENT_BINARY_DIR}/mm_shader_cache.h - DEPENDS ${CMAKE_SOURCE_DIR}/shadercache/mm_shader_cache.bin -) +# Generate mm_shader_cache.c from the MM shader cache if it exists +if (EXISTS ${CMAKE_SOURCE_DIR}/shadercache/mm_shader_cache.bin) + set(HAS_MM_SHADER_CACHE TRUE) + add_compile_definitions(HAS_MM_SHADER_CACHE) + add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/mm_shader_cache.c ${CMAKE_CURRENT_BINARY_DIR}/mm_shader_cache.h + COMMAND file_to_c ${CMAKE_SOURCE_DIR}/shadercache/mm_shader_cache.bin mm_shader_cache_bytes ${CMAKE_CURRENT_BINARY_DIR}/mm_shader_cache.c ${CMAKE_CURRENT_BINARY_DIR}/mm_shader_cache.h + DEPENDS ${CMAKE_SOURCE_DIR}/shadercache/mm_shader_cache.bin + ) +endif() # Recompile patches elf into patches.c add_custom_command(OUTPUT @@ -159,10 +163,12 @@ set (SOURCES ${CMAKE_SOURCE_DIR}/rsp/njpgdspMain.cpp ${CMAKE_SOURCE_DIR}/lib/RmlUi/Backends/RmlUi_Platform_SDL.cpp - - ${CMAKE_CURRENT_BINARY_DIR}/mm_shader_cache.c ) +if (HAS_MM_SHADER_CACHE) + list(APPEND SOURCES ${CMAKE_CURRENT_BINARY_DIR}/mm_shader_cache.c) +endif() + target_include_directories(Zelda64Recompiled PRIVATE ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/lib/concurrentqueue diff --git a/shadercache/.gitkeep b/shadercache/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/shadercache/mm_shader_cache.bin b/shadercache/mm_shader_cache.bin deleted file mode 100644 index d07bdd9..0000000 Binary files a/shadercache/mm_shader_cache.bin and /dev/null differ diff --git a/src/recomp/recomp.cpp b/src/recomp/recomp.cpp index 13661e3..8135514 100644 --- a/src/recomp/recomp.cpp +++ b/src/recomp/recomp.cpp @@ -17,7 +17,9 @@ #include "xxHash/xxh3.h" #include "../ultramodern/ultramodern.hpp" #include "../../RecompiledPatches/patches_bin.h" +#ifdef HAS_MM_SHADER_CACHE #include "mm_shader_cache.h" +#endif #ifdef _MSC_VER inline uint32_t byteswap(uint32_t val) { @@ -411,7 +413,11 @@ void recomp::start(ultramodern::WindowHandle window_handle, const ultramodern::a if (!recomp::load_stored_rom(recomp::Game::MM)) { recomp::message_box("Error opening stored ROM! Please restart this program."); } + + #ifdef HAS_MM_SHADER_CACHE ultramodern::load_shader_cache({mm_shader_cache_bytes, sizeof(mm_shader_cache_bytes)}); + #endif + init(rdram, &context); try { recomp_entrypoint(rdram, &context);