blob: 13b0436bbdca48127da9a0d4dc490d73acc804fb [file] [log] [blame]
# Copyright 2022 The IREE Authors
#
# Licensed under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
# This sample needs runtime support...
if(NOT IREE_HAL_DRIVER_VULKAN)
return()
endif()
# ... and compiler support, from either a source build or packages.
if(NOT IREE_HOST_BIN_DIR AND NOT IREE_TARGET_BACKEND_VULKAN_SPIRV)
return()
endif()
# NOTE: we use glslc (either provided by user or in the Vulkan SDK) to do our
# .glsl -> .spv compilation. This example is just demonstrating how to use
# custom shaders in .spv format and not supporting infrastructure for compiling
# shaders from various textual input languages (HLSL/etc). Users are expected to
# bring their own infrastructure if they want to bring their own source code.
find_program(GLSLC glslc HINTS "D:\\Tools\\VulkanSDK\\1.3.261.1\\Bin\\glslc.exe")
if(NOT GLSLC)
message(STATUS "IREE custom_dispatch/vulkan/shaders ignored -- glslc not found")
return()
endif()
set(_SPV_TARGET iree_samples_custom_dispatch_vulkan_shaders_spv)
add_custom_command(
OUTPUT simple_mul.spv
DEPENDS simple_mul.glsl
COMMAND ${GLSLC}
-fshader-stage=compute
-o simple_mul.spv
${CMAKE_CURRENT_SOURCE_DIR}/simple_mul.glsl
VERBATIM
)
add_custom_command(
OUTPUT simple_mul_inplace.spv
DEPENDS simple_mul_inplace.glsl
COMMAND ${GLSLC}
-fshader-stage=compute
-o simple_mul_inplace.spv
${CMAKE_CURRENT_SOURCE_DIR}/simple_mul_inplace.glsl
VERBATIM
)
add_custom_command(
OUTPUT one_workgroup_argmax_subgroup_f32.spv
DEPENDS one_workgroup_argmax_subgroup_f32.glsl
COMMAND ${GLSLC}
-fshader-stage=compute
--target-spv=spv1.3
-o one_workgroup_argmax_subgroup_f32.spv
${CMAKE_CURRENT_SOURCE_DIR}/one_workgroup_argmax_subgroup_f32.glsl
VERBATIM
)
add_custom_target(iree_samples_custom_dispatch_vulkan_shaders_spv DEPENDS
${CMAKE_CURRENT_BINARY_DIR}/one_workgroup_argmax_subgroup_f32.spv
${CMAKE_CURRENT_BINARY_DIR}/simple_mul.spv
${CMAKE_CURRENT_BINARY_DIR}/simple_mul_inplace.spv
)
add_dependencies(iree-sample-deps "${_SPV_TARGET}")
iree_lit_test_suite(
NAME
example
SRCS
"example.mlir"
"example_inline.mlir"
"example_transform.mlir"
DATA
${_SPV_TARGET}
iree::samples::custom_dispatch::vulkan::shaders::example_transform_spec.mlir
TOOLS
FileCheck
iree-compile
iree-run-module
LABELS
"driver=vulkan"
"hostonly"
)