xref: /aosp_15_r20/external/pytorch/cmake/VulkanCodegen.cmake (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
1*da0073e9SAndroid Build Coastguard Worker# Shaders processing
2*da0073e9SAndroid Build Coastguard Workerif(NOT USE_VULKAN)
3*da0073e9SAndroid Build Coastguard Worker  return()
4*da0073e9SAndroid Build Coastguard Workerendif()
5*da0073e9SAndroid Build Coastguard Worker
6*da0073e9SAndroid Build Coastguard Workerset(VULKAN_GEN_OUTPUT_PATH "${CMAKE_BINARY_DIR}/vulkan/ATen/native/vulkan")
7*da0073e9SAndroid Build Coastguard Workerset(VULKAN_GEN_ARG_ENV "")
8*da0073e9SAndroid Build Coastguard Worker
9*da0073e9SAndroid Build Coastguard Workerif(USE_VULKAN_RELAXED_PRECISION)
10*da0073e9SAndroid Build Coastguard Worker  list(APPEND VULKAN_GEN_ARG_ENV "PRECISION=mediump")
11*da0073e9SAndroid Build Coastguard Workerendif()
12*da0073e9SAndroid Build Coastguard Workerif(USE_VULKAN_FP16_INFERENCE)
13*da0073e9SAndroid Build Coastguard Worker  list(APPEND VULKAN_GEN_ARG_ENV "FLOAT_IMAGE_FORMAT=rgba16f")
14*da0073e9SAndroid Build Coastguard Workerelse()
15*da0073e9SAndroid Build Coastguard Worker  list(APPEND VULKAN_GEN_ARG_ENV "FLOAT_IMAGE_FORMAT=rgba32f")
16*da0073e9SAndroid Build Coastguard Workerendif()
17*da0073e9SAndroid Build Coastguard Worker
18*da0073e9SAndroid Build Coastguard Worker# Precompiling shaders
19*da0073e9SAndroid Build Coastguard Workerif(ANDROID)
20*da0073e9SAndroid Build Coastguard Worker  if(NOT ANDROID_NDK)
21*da0073e9SAndroid Build Coastguard Worker    message(FATAL_ERROR "ANDROID_NDK not set")
22*da0073e9SAndroid Build Coastguard Worker  endif()
23*da0073e9SAndroid Build Coastguard Worker
24*da0073e9SAndroid Build Coastguard Worker  set(GLSLC_PATH "${ANDROID_NDK}/shader-tools/${ANDROID_NDK_HOST_SYSTEM_NAME}/glslc")
25*da0073e9SAndroid Build Coastguard Workerelse()
26*da0073e9SAndroid Build Coastguard Worker  find_program(
27*da0073e9SAndroid Build Coastguard Worker    GLSLC_PATH glslc
28*da0073e9SAndroid Build Coastguard Worker    PATHS
29*da0073e9SAndroid Build Coastguard Worker    ENV VULKAN_SDK
30*da0073e9SAndroid Build Coastguard Worker    PATHS "$ENV{VULKAN_SDK}/${CMAKE_HOST_SYSTEM_PROCESSOR}/bin"
31*da0073e9SAndroid Build Coastguard Worker    PATHS "$ENV{VULKAN_SDK}/bin"
32*da0073e9SAndroid Build Coastguard Worker  )
33*da0073e9SAndroid Build Coastguard Worker
34*da0073e9SAndroid Build Coastguard Worker  if(NOT GLSLC_PATH)
35*da0073e9SAndroid Build Coastguard Worker    message(FATAL_ERROR "USE_VULKAN glslc not found")
36*da0073e9SAndroid Build Coastguard Worker  endif(NOT GLSLC_PATH)
37*da0073e9SAndroid Build Coastguard Workerendif()
38*da0073e9SAndroid Build Coastguard Worker
39*da0073e9SAndroid Build Coastguard Workerset(PYTHONPATH "$ENV{PYTHONPATH}")
40*da0073e9SAndroid Build Coastguard Workerset(NEW_PYTHONPATH ${PYTHONPATH})
41*da0073e9SAndroid Build Coastguard Workerlist(APPEND NEW_PYTHONPATH "${CMAKE_CURRENT_LIST_DIR}/..")
42*da0073e9SAndroid Build Coastguard Workerset(ENV{PYTHONPATH} ${NEW_PYTHONPATH})
43*da0073e9SAndroid Build Coastguard Workerexecute_process(
44*da0073e9SAndroid Build Coastguard Worker  COMMAND
45*da0073e9SAndroid Build Coastguard Worker  "${Python_EXECUTABLE}"
46*da0073e9SAndroid Build Coastguard Worker  ${CMAKE_CURRENT_LIST_DIR}/../tools/gen_vulkan_spv.py
47*da0073e9SAndroid Build Coastguard Worker  --glsl-path ${CMAKE_CURRENT_LIST_DIR}/../aten/src/ATen/native/vulkan/glsl
48*da0073e9SAndroid Build Coastguard Worker  --output-path ${VULKAN_GEN_OUTPUT_PATH}
49*da0073e9SAndroid Build Coastguard Worker  --glslc-path=${GLSLC_PATH}
50*da0073e9SAndroid Build Coastguard Worker  --tmp-dir-path=${CMAKE_BINARY_DIR}/vulkan/spv
51*da0073e9SAndroid Build Coastguard Worker  --env ${VULKAN_GEN_ARG_ENV}
52*da0073e9SAndroid Build Coastguard Worker  RESULT_VARIABLE error_code)
53*da0073e9SAndroid Build Coastguard Workerset(ENV{PYTHONPATH} ${PYTHONPATH})
54*da0073e9SAndroid Build Coastguard Worker
55*da0073e9SAndroid Build Coastguard Worker  if(error_code)
56*da0073e9SAndroid Build Coastguard Worker    message(FATAL_ERROR "Failed to gen spv.h and spv.cpp with precompiled shaders for Vulkan backend")
57*da0073e9SAndroid Build Coastguard Worker  endif()
58*da0073e9SAndroid Build Coastguard Worker
59*da0073e9SAndroid Build Coastguard Workerset(vulkan_generated_cpp ${VULKAN_GEN_OUTPUT_PATH}/spv.cpp)
60