@@ -4,7 +4,11 @@ if(WIN32)
44 option (UNLEASHED_RECOMP_D3D12 "Add D3D12 support for rendering" ON )
55endif ()
66
7- if (CMAKE_SYSTEM_NAME MATCHES "Linux" )
7+ if (APPLE )
8+ option (UNLEASHED_RECOMP_METAL "Add Metal support for rendering" ON )
9+ endif ()
10+
11+ if (CMAKE_SYSTEM_NAME MATCHES "Linux" )
812 option (UNLEASHED_RECOMP_FLATPAK "Configure the build for Flatpak compatibility." OFF )
913endif ()
1014
@@ -282,6 +286,10 @@ if(NOT ${CMAKE_BUILD_TYPE} MATCHES "Release")
282286 set (SHOW_GIT_INFO_AND_BUILD_TYPE 1)
283287endif ()
284288
289+ if (UNLEASHED_RECOMP_METAL)
290+ set (XCRUN_TOOL "/usr/bin/xcrun" )
291+ endif ()
292+
285293GenerateVersionSources (
286294 OUTPUT_DIR ${PROJECT_SOURCE_DIR }
287295 VERSION_TXT ${VERSION_TXT}
@@ -482,7 +490,11 @@ if(UNLEASHED_RECOMP_D3D12)
482490 )
483491endif ()
484492
485- if (WIN32 )
493+ if (UNLEASHED_RECOMP_METAL)
494+ target_compile_definitions (UnleashedRecomp PRIVATE UNLEASHED_RECOMP_METAL )
495+ endif ()
496+
497+ if (WIN32 )
486498 target_link_libraries (UnleashedRecomp PRIVATE
487499 comctl32
488500 dwmapi
@@ -565,30 +577,43 @@ if(NOT DEFINED DIRECTX_DXC_TOOL)
565577endif ()
566578
567579function (compile_shader FILE_PATH TARGET_NAME )
568- set (FILE_PATH ${CMAKE_CURRENT_SOURCE_DIR } /gpu/shader/${FILE_PATH} .hlsl)
569- cmake_path (GET FILE_PATH STEM VARIABLE_NAME )
570-
571580 set (_shader_target UnleashedRecomp)
572581
573582 if (CMAKE_SYSTEM_NAME STREQUAL "iOS" AND TARGET UnleashedRecompIOSLauncher)
574583 set (_shader_target UnleashedRecompIOSLauncher)
575584 endif ()
576-
577- if (UNLEASHED_RECOMP_D3D12)
585+ set (HLSL_FILE_PATH ${CMAKE_CURRENT_SOURCE_DIR } /gpu/shader/hlsl/${FILE_PATH} .hlsl)
586+ set (MSL_FILE_PATH ${CMAKE_CURRENT_SOURCE_DIR } /gpu/shader/msl/${FILE_PATH} .metal)
587+ cmake_path (GET HLSL_FILE_PATH STEM HLSL_NAME )
588+ cmake_path (GET MSL_FILE_PATH STEM MSL_NAME )
589+ if (UNLEASHED_RECOMP_METAL)
590+ add_custom_command (
591+ OUTPUT ${MSL_FILE_PATH} .ir
592+ COMMAND ${XCRUN_TOOL} -sdk macosx metal -o ${MSL_FILE_PATH} .ir -c ${MSL_FILE_PATH} -D__air__ -frecord-sources -gline-tables-only
593+ DEPENDS ${MSL_FILE_PATH}
594+ )
595+ add_custom_command (
596+ OUTPUT ${MSL_FILE_PATH} .metallib
597+ COMMAND ${XCRUN_TOOL} -sdk macosx metallib -o ${MSL_FILE_PATH} .metallib ${MSL_FILE_PATH} .ir
598+ DEPENDS ${MSL_FILE_PATH} .ir
599+ )
600+ BIN2C (TARGET_OBJ UnleashedRecomp SOURCE_FILE "${MSL_FILE_PATH} .metallib" DEST_FILE "${MSL_FILE_PATH} .metallib" ARRAY_NAME "g_${MSL_NAME} _air" )
601+ endif ()
602+ if (UNLEASHED_RECOMP_D3D12)
578603 add_custom_command (
579- OUTPUT ${FILE_PATH } .dxil.h
580- 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
581- DEPENDS ${FILE_PATH }
604+ OUTPUT ${HLSL_FILE_PATH } .dxil.h
605+ COMMAND ${DIRECTX_DXC_TOOL} -T ${TARGET_NAME} -HV 2021 -all-resources-bound -Wno-ignored-attributes -E shaderMain - Fh ${HLSL_FILE_PATH } .dxil.h ${HLSL_FILE_PATH } -Vn g_${HLSL_NAME }_dxil
606+ DEPENDS ${HLSL_FILE_PATH }
582607 )
583- target_sources (${_shader_target} PRIVATE ${FILE_PATH } .dxil.h )
608+ target_sources (${_shader_target} PRIVATE ${HLSL_FILE_PATH } .dxil.h )
584609 endif ()
585610
586611 add_custom_command (
587- OUTPUT ${FILE_PATH } .spirv.h
588- 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
589- DEPENDS ${FILE_PATH }
612+ OUTPUT ${HLSL_FILE_PATH } .spirv.h
613+ COMMAND ${DIRECTX_DXC_TOOL} -T ${TARGET_NAME} -HV 2021 -all-resources-bound -spirv -fvk-use-dx-layout ${ARGN} -E shaderMain - Fh ${HLSL_FILE_PATH } .spirv.h ${HLSL_FILE_PATH } -Vn g_${HLSL_NAME }_spirv
614+ DEPENDS ${HLSL_FILE_PATH }
590615 )
591- target_sources (${_shader_target} PRIVATE ${FILE_PATH } .spirv.h )
616+ target_sources (${_shader_target} PRIVATE ${HLSL_FILE_PATH } .spirv.h )
592617endfunction ()
593618
594619function (compile_vertex_shader FILE_PATH )
0 commit comments