@@ -274,6 +274,10 @@ if (NOT ${CMAKE_BUILD_TYPE} MATCHES "Release")
274274 set (SHOW_GIT_INFO_AND_BUILD_TYPE 1)
275275endif ()
276276
277+ if (UNLEASHED_RECOMP_METAL)
278+ set (XCRUN_TOOL "/usr/bin/xcrun" )
279+ endif ()
280+
277281GenerateVersionSources(
278282 OUTPUT_DIR ${PROJECT_SOURCE_DIR}
279283 VERSION_TXT ${VERSION_TXT}
@@ -374,6 +378,10 @@ if (UNLEASHED_RECOMP_D3D12)
374378 )
375379endif ()
376380
381+ if (UNLEASHED_RECOMP_METAL)
382+ target_compile_definitions (UnleashedRecomp PRIVATE UNLEASHED_RECOMP_METAL)
383+ endif ()
384+
377385if (CMAKE_SYSTEM_NAME MATCHES "Linux" )
378386 target_compile_definitions (UnleashedRecomp PRIVATE SDL_VULKAN_ENABLED)
379387endif ()
@@ -441,22 +449,37 @@ endif()
441449target_precompile_headers(UnleashedRecomp PUBLIC ${UNLEASHED_RECOMP_PRECOMPILED_HEADERS} )
442450
443451function (compile_shader FILE_PATH TARGET_NAME)
444- set (FILE_PATH ${CMAKE_CURRENT_SOURCE_DIR} /gpu/shader/${FILE_PATH} .hlsl)
445- cmake_path(GET FILE_PATH STEM VARIABLE_NAME)
452+ set (HLSL_FILE_PATH ${CMAKE_CURRENT_SOURCE_DIR} /gpu/shader/hlsl/${FILE_PATH} .hlsl)
453+ set (MSL_FILE_PATH ${CMAKE_CURRENT_SOURCE_DIR} /gpu/shader/msl/${FILE_PATH} .metal)
454+ cmake_path(GET HLSL_FILE_PATH STEM HLSL_NAME)
455+ cmake_path(GET MSL_FILE_PATH STEM MSL_NAME)
456+ if (UNLEASHED_RECOMP_METAL)
457+ add_custom_command (
458+ OUTPUT ${MSL_FILE_PATH} .ir
459+ COMMAND ${XCRUN_TOOL} -sdk macosx metal -o ${MSL_FILE_PATH} .ir -c ${MSL_FILE_PATH} -D__air__ -frecord-sources -gline-tables-only
460+ DEPENDS ${MSL_FILE_PATH}
461+ )
462+ add_custom_command (
463+ OUTPUT ${MSL_FILE_PATH} .metallib
464+ COMMAND ${XCRUN_TOOL} -sdk macosx metallib -o ${MSL_FILE_PATH} .metallib ${MSL_FILE_PATH} .ir
465+ DEPENDS ${MSL_FILE_PATH} .ir
466+ )
467+ BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${MSL_FILE_PATH} .metallib" DEST_FILE "${MSL_FILE_PATH} .metallib" ARRAY_NAME "g_${MSL_NAME} _air" )
468+ endif ()
446469 if (UNLEASHED_RECOMP_D3D12)
447470 add_custom_command (
448- OUTPUT ${FILE_PATH } .dxil.h
449- 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
450- DEPENDS ${FILE_PATH }
471+ OUTPUT ${HLSL_FILE_PATH } .dxil.h
472+ 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
473+ DEPENDS ${HLSL_FILE_PATH }
451474 )
452- target_sources (UnleashedRecomp PRIVATE ${FILE_PATH } .dxil.h)
475+ target_sources (UnleashedRecomp PRIVATE ${HLSL_FILE_PATH } .dxil.h)
453476 endif ()
454477 add_custom_command (
455- OUTPUT ${FILE_PATH } .spirv.h
456- 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
457- DEPENDS ${FILE_PATH }
478+ OUTPUT ${HLSL_FILE_PATH } .spirv.h
479+ 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
480+ DEPENDS ${HLSL_FILE_PATH }
458481 )
459- target_sources (UnleashedRecomp PRIVATE ${FILE_PATH } .spirv.h)
482+ target_sources (UnleashedRecomp PRIVATE ${HLSL_FILE_PATH } .spirv.h)
460483endfunction ()
461484
462485function (compile_vertex_shader FILE_PATH)
0 commit comments