| # 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" |
| ) |