| # Copyright 2019 The Fuchsia 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("../gn/build_rules.gni") |
| import("../gn/glsl_shader_rules.gni") |
| if (is_fuchsia) { |
| import("//src/lib/vulkan/image_pipe_swapchain.gni") |
| } |
| |
| # Helper template to define a test program that Vulkan through vk_app_state.h |
| # Variables: |
| # Anything that graphics_compute_vulkan_executable supports, and: |
| # |
| # glsl_shaders: Optional list of GLSL shader files that will be compiled |
| # into SPIR-V modules automatically. |
| # |
| # glsl_shaders_c_header_name: If |glsl_shaders| is provided, name of a |
| # generated C header that will contain the content of all generated |
| # shaders as literal C arrays of uint32_t items. |
| # |
| template("vulkan_test_app") { |
| if (defined(invoker.glsl_shaders)) { |
| assert(defined(invoker.glsl_shaders_c_header_name)) |
| |
| _shaders_target = "compile_glsl_shaders_${target_name}" |
| _shaders_output_dir = "${target_gen_dir}/${target_name}_shaders" |
| |
| # Compile the shaders to .spv |
| graphics_compute_compile_glsl_shader_foreach(_shaders_target) { |
| sources = invoker.glsl_shaders |
| output_dir = _shaders_output_dir |
| args = [ |
| "--target-env", |
| "vulkan1.1", |
| ] |
| } |
| |
| # Convert all .spv to a single C header. |
| _shaders_c_source_target = "gen_shader_c_source_${target_name}" |
| _shaders_c_source = |
| "${_shaders_output_dir}/${invoker.glsl_shaders_c_header_name}" |
| action(_shaders_c_source_target) { |
| script = |
| "${graphics_compute_dir}/scripts/convert_spirv_files_to_c_arrays.py" |
| sources = get_target_outputs(":${_shaders_target}") |
| outputs = [ _shaders_c_source ] |
| args = [ |
| "--output", |
| rebase_path(outputs[0], root_build_dir), |
| ] + rebase_path(sources, root_build_dir) |
| deps = [ ":${_shaders_target}" ] |
| } |
| } |
| |
| graphics_compute_vulkan_executable(target_name) { |
| testonly = true |
| forward_variables_from(invoker, |
| "*", |
| [ |
| "glsl_shaders", |
| "glsl_shaders_c_header_name", |
| ]) |
| if (!defined(deps)) { |
| deps = [] |
| } |
| deps += [ |
| "${graphics_compute_dir}/tests:common", |
| "${graphics_compute_dir}/tests:common_vk", |
| ] |
| if (defined(_shaders_c_source_target)) { |
| if (!defined(include_dirs)) { |
| include_dirs = [] |
| } |
| include_dirs += [ _shaders_output_dir ] |
| deps += [ ":${_shaders_c_source_target}" ] |
| } |
| } |
| } |