| # 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/malioc.gni") |
| import("//flutter/impeller/tools/shader_archive.gni") |
| |
| template("impeller_shaders_vk") { |
| assert(defined(invoker.shaders), "Impeller shaders must be specified.") |
| assert(defined(invoker.name), "Name of the shader library must be specified.") |
| assert(defined(invoker.analyze), "Whether to analyze must be specified.") |
| |
| shaders_base_name = string_join("", |
| [ |
| invoker.name, |
| "_shaders_vk", |
| ]) |
| impellerc_vk = "impellerc_$target_name" |
| impellerc(impellerc_vk) { |
| shaders = invoker.shaders |
| sl_file_extension = "vkspv" |
| |
| # Metal reflectors generate a superset of information. |
| if (impeller_enable_metal) { |
| if (defined(invoker.metal_version)) { |
| metal_version = invoker.metal_version |
| } |
| |
| intermediates_subdir = "vk" |
| } |
| shader_target_flags = [ "--vulkan" ] |
| |
| defines = [ "IMPELLER_TARGET_VULKAN" ] |
| } |
| |
| vk_shaders = |
| filter_include(get_target_outputs(":$impellerc_vk"), [ "*.vkspv" ]) |
| |
| if (invoker.analyze) { |
| analyze_lib = "analyze_$target_name" |
| malioc_analyze_shaders(analyze_lib) { |
| shaders = vk_shaders |
| if (defined(invoker.vulkan_language_version)) { |
| vulkan_language_version = invoker.vulkan_language_version |
| } |
| deps = [ ":$impellerc_vk" ] |
| } |
| } |
| |
| vk_lib = "genlib_$target_name" |
| shader_archive(vk_lib) { |
| shaders = vk_shaders |
| deps = [ ":$impellerc_vk" ] |
| } |
| |
| reflect_vk = "reflect_$target_name" |
| impellerc_reflect(reflect_vk) { |
| impellerc_invocation = ":$impellerc_vk" |
| } |
| |
| embed_vk_lib = "embed_$target_name" |
| embed_blob(embed_vk_lib) { |
| vk_library_files = get_target_outputs(":$vk_lib") |
| symbol_name = shaders_base_name |
| blob = vk_library_files[0] |
| hdr = "$target_gen_dir/vk/$shaders_base_name.h" |
| cc = "$target_gen_dir/vk/$shaders_base_name.cc" |
| deps = [ ":$vk_lib" ] |
| } |
| |
| group(target_name) { |
| public_deps = [ ":$embed_vk_lib" ] |
| |
| if (invoker.analyze) { |
| public_deps += [ ":$analyze_lib" ] |
| } |
| |
| if (!impeller_enable_metal) { |
| public_deps += [ ":$reflect_vk" ] |
| } |
| } |
| } |