11project ("MarathonRecomp" )
22
33if (WIN32 )
4- option (MARATHON_RECOMP_D3D12 "Add D3D12 support for rendering" OFF )
4+ option (MARATHON_RECOMP_D3D12 "Add D3D12 support for rendering" ON )
5+ endif ()
6+
7+ if (APPLE )
8+ option (MARATHON_RECOMP_METAL "Add Metal support for rendering" ON )
59endif ()
610
711if (CMAKE_SYSTEM_NAME MATCHES "Linux" )
@@ -116,15 +120,8 @@ set(MARATHON_RECOMP_GPU_CXX_SOURCES
116120 "gpu/imgui/imgui_common.cpp"
117121 "gpu/imgui/imgui_font_builder.cpp"
118122 "gpu/imgui/imgui_snapshot.cpp"
119- "gpu/rhi/plume_vulkan.cpp"
120123)
121124
122- if (MARATHON_RECOMP_D3D12)
123- list (APPEND MARATHON_RECOMP_GPU_CXX_SOURCES
124- "gpu/rhi/plume_d3d12.cpp"
125- )
126- endif ()
127-
128125set (MARATHON_RECOMP_APU_CXX_SOURCES
129126 "apu/audio.cpp"
130127 "apu/xma_decoder.cpp"
@@ -225,18 +222,10 @@ set(MARATHON_RECOMP_THIRDPARTY_INCLUDES
225222 "${MARATHON_RECOMP_THIRDPARTY_ROOT} /magic_enum/include"
226223 "${MARATHON_RECOMP_THIRDPARTY_ROOT} /stb"
227224 "${MARATHON_RECOMP_THIRDPARTY_ROOT} /unordered_dense/include"
228- "${MARATHON_RECOMP_THIRDPARTY_ROOT} /volk"
229- "${MARATHON_RECOMP_THIRDPARTY_ROOT} /Vulkan-Headers/include"
230- "${MARATHON_RECOMP_THIRDPARTY_ROOT} /VulkanMemoryAllocator/include"
231225 "${MARATHON_RECOMP_TOOLS_ROOT} /bc_diff"
232226 "${MARATHON_RECOMP_TOOLS_ROOT} /XenosRecomp/thirdparty/smol-v/source"
233227)
234228
235- if (MARATHON_RECOMP_D3D12)
236- list (APPEND MARATHON_RECOMP_THIRDPARTY_INCLUDES "${MARATHON_RECOMP_THIRDPARTY_ROOT} /D3D12MemoryAllocator/include" )
237- list (APPEND MARATHON_RECOMP_THIRDPARTY_SOURCES "${MARATHON_RECOMP_THIRDPARTY_ROOT} /D3D12MemoryAllocator/src/D3D12MemAlloc.cpp" )
238- endif ()
239-
240229set_source_files_properties (${MARATHON_RECOMP_THIRDPARTY_SOURCES} PROPERTIES SKIP_PRECOMPILE_HEADERS ON )
241230
242231set (MARATHON_RECOMP_CXX_SOURCES
@@ -274,6 +263,10 @@ if (NOT ${CMAKE_BUILD_TYPE} MATCHES "Release")
274263 set (SHOW_GIT_INFO_AND_BUILD_TYPE 1)
275264endif ()
276265
266+ if (MARATHON_RECOMP_METAL)
267+ set (XCRUN_TOOL "/usr/bin/xcrun" )
268+ endif ()
269+
277270GenerateVersionSources (
278271 OUTPUT_DIR ${PROJECT_SOURCE_DIR }
279272 VERSION_TXT ${VERSION_TXT}
@@ -377,35 +370,35 @@ if (MARATHON_RECOMP_D3D12)
377370 target_compile_definitions (MarathonRecomp PRIVATE MARATHON_RECOMP_D3D12 )
378371endif ()
379372
373+ if (MARATHON_RECOMP_METAL)
374+ target_compile_definitions (MarathonRecomp PRIVATE MARATHON_RECOMP_METAL )
375+ endif ()
376+
380377if (CMAKE_SYSTEM_NAME MATCHES "Linux" )
381378 target_compile_definitions (MarathonRecomp PRIVATE SDL_VULKAN_ENABLED )
382379endif ()
383380
384- #find_package(directx-dxc REQUIRED)
385381find_package (CURL REQUIRED )
386382
387- #if (MARATHON_RECOMP_D3D12)
388- # file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/D3D12)
389- # add_custom_command(TARGET MarathonRecomp POST_BUILD
390- # COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_PROPERTY:Microsoft::DirectX12-Core,IMPORTED_LOCATION_RELEASE> ${CMAKE_CURRENT_BINARY_DIR}/D3D12
391- # COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_PROPERTY:Microsoft::DirectX12-Layers,IMPORTED_LOCATION_DEBUG> ${CMAKE_CURRENT_BINARY_DIR}/D3D12
392- # COMMAND_EXPAND_LISTS
393- # )
394- #
395- # find_file(DIRECTX_DXIL_LIBRARY "dxil.dll")
396- # file(COPY ${DIRECTX_DXIL_LIBRARY} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
397- #
398- # target_link_libraries(MarathonRecomp PRIVATE
399- # Microsoft::DirectX-Headers
400- # Microsoft::DirectX-Guids
401- # Microsoft::DirectX12-Agility
402- # Microsoft::DirectXShaderCompiler
403- # Microsoft::DXIL
404- # dxgi
405- # )
406- #endif()
407-
408- #file(CHMOD ${DIRECTX_DXC_TOOL} PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE)
383+ if (MARATHON_RECOMP_D3D12)
384+ file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR } /D3D12 )
385+ add_custom_command (TARGET MarathonRecomp POST_BUILD
386+ COMMAND ${CMAKE_COMMAND } -E copy $<TARGET_PROPERTY :Microsoft ::DirectX12 -Core ,IMPORTED_LOCATION_RELEASE > $<TARGET_FILE_DIR :MarathonRecomp >/D3D12
387+ COMMAND ${CMAKE_COMMAND } -E copy $<TARGET_PROPERTY :Microsoft ::DirectX12 -Layers ,IMPORTED_LOCATION_DEBUG > $<TARGET_FILE_DIR :MarathonRecomp >/D3D12
388+ COMMAND ${CMAKE_COMMAND } -E copy $<TARGET_PROPERTY :Microsoft ::DirectXShaderCompiler ,IMPORTED_LOCATION > $<TARGET_FILE_DIR :MarathonRecomp >
389+ COMMAND ${CMAKE_COMMAND } -E copy $<TARGET_PROPERTY :Microsoft ::DXIL ,IMPORTED_LOCATION > $<TARGET_FILE_DIR :MarathonRecomp >
390+ COMMAND_EXPAND_LISTS
391+ )
392+
393+ target_link_libraries (MarathonRecomp PRIVATE
394+ Microsoft::DirectX-Headers
395+ Microsoft::DirectX-Guids
396+ Microsoft::DirectX12-Agility
397+ Microsoft::DirectXShaderCompiler
398+ Microsoft::DXIL
399+ dxgi
400+ )
401+ endif ()
409402
410403if (WIN32 )
411404 target_link_libraries (MarathonRecomp PRIVATE
@@ -432,6 +425,7 @@ target_link_libraries(MarathonRecomp PRIVATE
432425 MarathonRecompLib
433426 xxHash::xxhash
434427 CURL::libcurl
428+ plume
435429)
436430
437431if (NOT WIN32 )
@@ -456,22 +450,37 @@ endif()
456450target_precompile_headers (MarathonRecomp PUBLIC ${MARATHON_RECOMP_PRECOMPILED_HEADERS} )
457451
458452function (compile_shader FILE_PATH TARGET_NAME )
459- set (FILE_PATH ${CMAKE_CURRENT_SOURCE_DIR } /gpu/shader/${FILE_PATH} .hlsl)
460- cmake_path (GET FILE_PATH STEM VARIABLE_NAME )
453+ set (HLSL_FILE_PATH ${CMAKE_CURRENT_SOURCE_DIR } /gpu/shader/hlsl/${FILE_PATH} .hlsl)
454+ set (MSL_FILE_PATH ${CMAKE_CURRENT_SOURCE_DIR } /gpu/shader/msl/${FILE_PATH} .metal)
455+ cmake_path (GET HLSL_FILE_PATH STEM HLSL_NAME )
456+ cmake_path (GET MSL_FILE_PATH STEM MSL_NAME )
457+ if (MARATHON_RECOMP_METAL)
458+ add_custom_command (
459+ OUTPUT ${MSL_FILE_PATH} .ir
460+ COMMAND ${XCRUN_TOOL} -sdk macosx metal -o ${MSL_FILE_PATH} .ir -c ${MSL_FILE_PATH} -D__air__ -frecord-sources -gline-tables-only
461+ DEPENDS ${MSL_FILE_PATH}
462+ )
463+ add_custom_command (
464+ OUTPUT ${MSL_FILE_PATH} .metallib
465+ COMMAND ${XCRUN_TOOL} -sdk macosx metallib -o ${MSL_FILE_PATH} .metallib ${MSL_FILE_PATH} .ir
466+ DEPENDS ${MSL_FILE_PATH} .ir
467+ )
468+ BIN2C (TARGET_OBJ MarathonRecomp SOURCE_FILE "${MSL_FILE_PATH} .metallib" DEST_FILE "${MSL_FILE_PATH} .metallib" ARRAY_NAME "g_${MSL_NAME} _air" )
469+ endif ()
461470 if (MARATHON_RECOMP_D3D12)
462471 add_custom_command (
463- OUTPUT ${FILE_PATH } .dxil.h
464- COMMAND ${DIRECTX_DXC_TOOL} -T ${TARGET_NAME} -HV 2021 -all-resources-bound -Wno-ignored-attributes -Fh ${FILE_PATH } .dxil.h ${FILE_PATH } -Vn g_${VARIABLE_NAME }_dxil
465- DEPENDS ${FILE_PATH }
472+ OUTPUT ${HLSL_FILE_PATH } .dxil.h
473+ COMMAND ${DIRECTX_DXC_TOOL} -T ${TARGET_NAME} -HV 2021 -all-resources-bound -Wno-ignored-attributes -Fh ${HLSL_FILE_PATH } .dxil.h ${HLSL_FILE_PATH } -Vn g_${HLSL_NAME }_dxil
474+ DEPENDS ${HLSL_FILE_PATH }
466475 )
467- target_sources (MarathonRecomp PRIVATE ${FILE_PATH } .dxil.h )
476+ target_sources (MarathonRecomp PRIVATE ${HLSL_FILE_PATH } .dxil.h )
468477 endif ()
469478 add_custom_command (
470- OUTPUT ${FILE_PATH } .spirv.h
471- COMMAND ${DIRECTX_DXC_TOOL} -T ${TARGET_NAME} -HV 2021 -all-resources-bound -spirv -fvk-use-dx-layout ${ARGN} -Fh ${FILE_PATH } .spirv.h ${FILE_PATH } -Vn g_${VARIABLE_NAME }_spirv
472- DEPENDS ${FILE_PATH }
479+ OUTPUT ${HLSL_FILE_PATH } .spirv.h
480+ COMMAND ${DIRECTX_DXC_TOOL} -T ${TARGET_NAME} -HV 2021 -all-resources-bound -spirv -fvk-use-dx-layout ${ARGN} -Fh ${HLSL_FILE_PATH } .spirv.h ${HLSL_FILE_PATH } -Vn g_${HLSL_NAME }_spirv
481+ DEPENDS ${HLSL_FILE_PATH }
473482 )
474- target_sources (MarathonRecomp PRIVATE ${FILE_PATH } .spirv.h )
483+ target_sources (MarathonRecomp PRIVATE ${HLSL_FILE_PATH } .spirv.h )
475484endfunction ()
476485
477486function (compile_vertex_shader FILE_PATH )
0 commit comments