| # Copyright 2013 The Flutter Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import("//flutter/impeller/tools/args.gni") |
| import("//flutter/impeller/tools/compiler.gni") |
| import("//flutter/impeller/tools/embed_blob.gni") |
| import("//flutter/impeller/tools/metal_library.gni") |
| |
| template("impeller_shaders_metal") { |
| assert(defined(invoker.shaders), "Impeller shaders must be specified.") |
| assert(defined(invoker.name), "Name of the shader library must be specified.") |
| |
| metal_version = "1.2" |
| if (defined(invoker.metal_version)) { |
| metal_version = invoker.metal_version |
| } |
| |
| use_half_textures = false |
| if (defined(invoker.use_half_textures) && invoker.use_half_textures) { |
| use_half_textures = invoker.use_half_textures |
| } |
| |
| shaders_base_name = string_join("", |
| [ |
| invoker.name, |
| "_shaders", |
| ]) |
| impellerc_mtl = "impellerc_$target_name" |
| impellerc(impellerc_mtl) { |
| shaders = invoker.shaders |
| metal_version = metal_version |
| sl_file_extension = "metal" |
| use_half_textures = use_half_textures |
| shader_target_flags = [] |
| defines = [ "IMPELLER_TARGET_METAL" ] |
| if (is_ios) { |
| shader_target_flags += [ "--metal-ios" ] |
| defines += [ "IMPELLER_TARGET_METAL_IOS" ] |
| } else if (is_mac) { |
| shader_target_flags = [ "--metal-desktop" ] |
| defines += [ "IMPELLER_TARGET_METAL_DESKTOP" ] |
| } else { |
| assert(false, "Metal not supported on this platform.") |
| } |
| } |
| |
| mtl_lib = "genlib_$target_name" |
| metal_library(mtl_lib) { |
| name = invoker.name |
| metal_version = metal_version |
| sources = |
| filter_include(get_target_outputs(":$impellerc_mtl"), [ "*.metal" ]) |
| deps = [ ":$impellerc_mtl" ] |
| } |
| |
| reflect_mtl = "reflect_$target_name" |
| impellerc_reflect(reflect_mtl) { |
| impellerc_invocation = ":$impellerc_mtl" |
| } |
| |
| embed_mtl_lib = "embed_$target_name" |
| embed_blob(embed_mtl_lib) { |
| metal_library_files = get_target_outputs(":$mtl_lib") |
| symbol_name = shaders_base_name |
| blob = metal_library_files[0] |
| hdr = "$target_gen_dir/mtl/$shaders_base_name.h" |
| cc = "$target_gen_dir/mtl/$shaders_base_name.cc" |
| deps = [ ":$mtl_lib" ] |
| } |
| |
| group(target_name) { |
| public_deps = [ |
| ":$embed_mtl_lib", |
| ":$reflect_mtl", |
| ] |
| } |
| } |