@@ -271,6 +271,10 @@ if (NOT ${CMAKE_BUILD_TYPE} MATCHES "Release")
271271 set (SHOW_GIT_INFO_AND_BUILD_TYPE 1)
272272endif ()
273273
274+ if (UNLEASHED_RECOMP_METAL)
275+ set (XCRUN_TOOL "/usr/bin/xcrun" )
276+ endif ()
277+
274278GenerateVersionSources(
275279 OUTPUT_DIR ${PROJECT_SOURCE_DIR}
276280 VERSION_TXT ${VERSION_TXT}
@@ -367,6 +371,10 @@ if (UNLEASHED_RECOMP_D3D12)
367371 target_compile_definitions (UnleashedRecomp PRIVATE UNLEASHED_RECOMP_D3D12)
368372endif ()
369373
374+ if (UNLEASHED_RECOMP_METAL)
375+ target_compile_definitions (UnleashedRecomp PRIVATE UNLEASHED_RECOMP_METAL)
376+ endif ()
377+
370378if (CMAKE_SYSTEM_NAME MATCHES "Linux" )
371379 target_compile_definitions (UnleashedRecomp PRIVATE SDL_VULKAN_ENABLED)
372380endif ()
@@ -434,22 +442,37 @@ endif()
434442target_precompile_headers(UnleashedRecomp PUBLIC ${UNLEASHED_RECOMP_PRECOMPILED_HEADERS} )
435443
436444function (compile_shader FILE_PATH TARGET_NAME)
437- set (FILE_PATH ${CMAKE_CURRENT_SOURCE_DIR} /gpu/shader/${FILE_PATH} .hlsl)
438- cmake_path(GET FILE_PATH STEM VARIABLE_NAME)
445+ set (HLSL_FILE_PATH ${CMAKE_CURRENT_SOURCE_DIR} /gpu/shader/hlsl/${FILE_PATH} .hlsl)
446+ set (MSL_FILE_PATH ${CMAKE_CURRENT_SOURCE_DIR} /gpu/shader/msl/${FILE_PATH} .metal)
447+ cmake_path(GET HLSL_FILE_PATH STEM HLSL_NAME)
448+ cmake_path(GET MSL_FILE_PATH STEM MSL_NAME)
449+ if (UNLEASHED_RECOMP_METAL)
450+ add_custom_command (
451+ OUTPUT ${MSL_FILE_PATH} .ir
452+ COMMAND ${XCRUN_TOOL} -sdk macosx metal -o ${MSL_FILE_PATH} .ir -c ${MSL_FILE_PATH} -D__air__ -frecord-sources -gline-tables-only
453+ DEPENDS ${MSL_FILE_PATH}
454+ )
455+ add_custom_command (
456+ OUTPUT ${MSL_FILE_PATH} .metallib
457+ COMMAND ${XCRUN_TOOL} -sdk macosx metallib -o ${MSL_FILE_PATH} .metallib ${MSL_FILE_PATH} .ir
458+ DEPENDS ${MSL_FILE_PATH} .ir
459+ )
460+ BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${MSL_FILE_PATH} .metallib" DEST_FILE "${MSL_FILE_PATH} .metallib" ARRAY_NAME "g_${MSL_NAME} _air" )
461+ endif ()
439462 if (UNLEASHED_RECOMP_D3D12)
440463 add_custom_command (
441- OUTPUT ${FILE_PATH } .dxil.h
442- 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
443- DEPENDS ${FILE_PATH }
464+ OUTPUT ${HLSL_FILE_PATH } .dxil.h
465+ 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
466+ DEPENDS ${HLSL_FILE_PATH }
444467 )
445- target_sources (UnleashedRecomp PRIVATE ${FILE_PATH } .dxil.h)
468+ target_sources (UnleashedRecomp PRIVATE ${HLSL_FILE_PATH } .dxil.h)
446469 endif ()
447470 add_custom_command (
448- OUTPUT ${FILE_PATH } .spirv.h
449- 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
450- DEPENDS ${FILE_PATH }
471+ OUTPUT ${HLSL_FILE_PATH } .spirv.h
472+ 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
473+ DEPENDS ${HLSL_FILE_PATH }
451474 )
452- target_sources (UnleashedRecomp PRIVATE ${FILE_PATH } .spirv.h)
475+ target_sources (UnleashedRecomp PRIVATE ${HLSL_FILE_PATH } .spirv.h)
453476endfunction ()
454477
455478function (compile_vertex_shader FILE_PATH)
0 commit comments