• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2019 The ANGLE Project Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4#
5# This file houses the build configuration for the ANGLE Vulkan back-end.
6
7import("//build_overrides/swiftshader.gni")
8import("../../../../gni/angle.gni")
9
10assert(angle_enable_vulkan)
11
12declare_args() {
13  # Enable custom (cpu-side) secondary command buffers
14  angle_enable_custom_vulkan_cmd_buffers = true
15
16  # Enable Vulkan GPU trace event capability
17  angle_enable_vulkan_gpu_trace_events = false
18}
19
20_vulkan_backend_sources = [
21  "BufferVk.cpp",
22  "BufferVk.h",
23  "CommandProcessor.cpp",
24  "CommandProcessor.h",
25  "CompilerVk.cpp",
26  "CompilerVk.h",
27  "ContextVk.cpp",
28  "ContextVk.h",
29  "DeviceVk.cpp",
30  "DeviceVk.h",
31  "DisplayVk.cpp",
32  "DisplayVk.h",
33  "DisplayVk_api.h",
34  "FenceNVVk.cpp",
35  "FenceNVVk.h",
36  "FramebufferVk.cpp",
37  "FramebufferVk.h",
38  "GlslangWrapperVk.cpp",
39  "GlslangWrapperVk.h",
40  "ImageVk.cpp",
41  "ImageVk.h",
42  "MemoryObjectVk.cpp",
43  "MemoryObjectVk.h",
44  "OverlayVk.cpp",
45  "OverlayVk.h",
46  "PersistentCommandPool.cpp",
47  "PersistentCommandPool.h",
48  "ProgramExecutableVk.cpp",
49  "ProgramExecutableVk.h",
50  "ProgramPipelineVk.cpp",
51  "ProgramPipelineVk.h",
52  "ProgramVk.cpp",
53  "ProgramVk.h",
54  "QueryVk.cpp",
55  "QueryVk.h",
56  "RenderTargetVk.cpp",
57  "RenderTargetVk.h",
58  "RenderbufferVk.cpp",
59  "RenderbufferVk.h",
60  "RendererVk.cpp",
61  "RendererVk.h",
62  "ResourceVk.cpp",
63  "ResourceVk.h",
64  "SamplerVk.cpp",
65  "SamplerVk.h",
66  "SecondaryCommandBuffer.cpp",
67  "SecondaryCommandBuffer.h",
68  "SemaphoreVk.cpp",
69  "SemaphoreVk.h",
70  "ShaderVk.cpp",
71  "ShaderVk.h",
72  "SurfaceVk.cpp",
73  "SurfaceVk.h",
74  "SyncVk.cpp",
75  "SyncVk.h",
76  "TextureVk.cpp",
77  "TextureVk.h",
78  "TransformFeedbackVk.cpp",
79  "TransformFeedbackVk.h",
80  "UtilsVk.cpp",
81  "UtilsVk.h",
82  "VertexArrayVk.cpp",
83  "VertexArrayVk.h",
84  "vk_cache_utils.cpp",
85  "vk_cache_utils.h",
86  "vk_caps_utils.cpp",
87  "vk_caps_utils.h",
88  "vk_ext_provoking_vertex.h",
89  "vk_format_table_autogen.cpp",
90  "vk_format_utils.cpp",
91  "vk_format_utils.h",
92  "vk_google_filtering_precision.h",
93  "vk_helpers.cpp",
94  "vk_helpers.h",
95  "vk_internal_shaders_autogen.cpp",
96  "vk_internal_shaders_autogen.h",
97  "vk_mandatory_format_support_table_autogen.cpp",
98  "vk_utils.cpp",
99  "vk_utils.h",
100  "vk_wrapper.h",
101]
102
103if (is_android) {
104  _vulkan_backend_sources += [
105    "android/DisplayVkAndroid.cpp",
106    "android/DisplayVkAndroid.h",
107    "android/HardwareBufferImageSiblingVkAndroid.cpp",
108    "android/HardwareBufferImageSiblingVkAndroid.h",
109    "android/WindowSurfaceVkAndroid.cpp",
110    "android/WindowSurfaceVkAndroid.h",
111  ]
112}
113
114if (is_win) {
115  _vulkan_backend_sources += [
116    "win32/DisplayVkWin32.cpp",
117    "win32/DisplayVkWin32.h",
118    "win32/WindowSurfaceVkWin32.cpp",
119    "win32/WindowSurfaceVkWin32.h",
120  ]
121}
122
123if (angle_use_x11) {
124  _vulkan_backend_sources += [
125    "xcb/DisplayVkXcb.cpp",
126    "xcb/DisplayVkXcb.h",
127    "xcb/WindowSurfaceVkXcb.cpp",
128    "xcb/WindowSurfaceVkXcb.h",
129  ]
130}
131
132if (is_fuchsia) {
133  _vulkan_backend_sources += [
134    "fuchsia/DisplayVkFuchsia.cpp",
135    "fuchsia/DisplayVkFuchsia.h",
136    "fuchsia/WindowSurfaceVkFuchsia.cpp",
137    "fuchsia/WindowSurfaceVkFuchsia.h",
138  ]
139}
140
141if (is_ggp) {
142  _vulkan_backend_sources += [
143    "ggp/DisplayVkGGP.cpp",
144    "ggp/DisplayVkGGP.h",
145    "ggp/WindowSurfaceVkGGP.cpp",
146    "ggp/WindowSurfaceVkGGP.h",
147  ]
148}
149
150if (is_mac) {
151  _vulkan_backend_sources += [
152    "mac/DisplayVkMac.h",
153    "mac/DisplayVkMac.mm",
154    "mac/IOSurfaceSurfaceVkMac.h",
155    "mac/IOSurfaceSurfaceVkMac.mm",
156    "mac/WindowSurfaceVkMac.h",
157    "mac/WindowSurfaceVkMac.mm",
158  ]
159}
160
161config("angle_vulkan_lib_android") {
162  if (is_android) {
163    libs = [ "vulkan" ]
164  }
165}
166
167config("angle_vulkan_headers_config") {
168  if (angle_shared_libvulkan) {
169    defines = [ "ANGLE_SHARED_LIBVULKAN=1" ]
170  }
171}
172
173angle_source_set("angle_vulkan_headers") {
174  sources = [ "vk_headers.h" ]
175  if (angle_shared_libvulkan) {
176    public_deps = [ "$angle_root/src/third_party/volk:volk" ]
177  } else {
178    public_deps =
179        [ "$angle_root/third_party/vulkan-headers/src:vulkan_headers" ]
180  }
181  public_configs = [ ":angle_vulkan_headers_config" ]
182}
183
184group("angle_vulkan_entry_points") {
185  public_configs = [ ":angle_vulkan_lib_android" ]
186  public_deps = [ ":angle_vulkan_headers" ]
187  if (is_fuchsia) {
188    public_deps += [
189      "$angle_root/src/common/fuchsia_egl",
190      "//third_party/fuchsia-sdk:vulkan_base",
191      "//third_party/fuchsia-sdk/sdk/pkg/vulkan",
192    ]
193  } else if (!is_android && !is_ggp) {
194    if (angle_shared_libvulkan) {
195      data_deps = [ "$angle_root/third_party/vulkan-loader/src:libvulkan" ]
196    } else {
197      deps = [ "$angle_root/third_party/vulkan-loader/src:libvulkan" ]
198    }
199  }
200}
201
202config("angle_vulkan_backend_config") {
203  defines = [ "ANGLE_ENABLE_VULKAN" ]
204  if (angle_enable_swiftshader) {
205    defines += [ "ANGLE_ENABLE_SWIFTSHADER" ]
206  }
207  if (angle_enable_custom_vulkan_cmd_buffers) {
208    defines += [ "ANGLE_USE_CUSTOM_VULKAN_CMD_BUFFERS=1" ]
209  }
210  if (angle_enable_vulkan_gpu_trace_events) {
211    defines += [ "ANGLE_ENABLE_VULKAN_GPU_TRACE_EVENTS=1" ]
212  }
213}
214
215angle_source_set("angle_vk_mem_alloc_wrapper") {
216  deps = [
217    ":angle_vulkan_headers",
218    "$angle_vulkan_memory_allocator_dir",
219  ]
220  sources = [
221    "vk_mem_alloc_wrapper.cpp",
222    "vk_mem_alloc_wrapper.h",
223  ]
224  defines = [ "VMA_IMPLEMENTATION" ]
225  if (is_clang) {
226    cflags_cc = [
227      "-Wno-extra-semi-stmt",
228      "-Wno-missing-field-initializers",
229    ]
230  }
231}
232
233angle_source_set("angle_vulkan_backend") {
234  sources = _vulkan_backend_sources
235  libs = []
236  deps = [
237    ":angle_vk_mem_alloc_wrapper",
238    ":angle_vulkan_entry_points",
239    ":angle_vulkan_headers",
240    "$angle_root:angle_gpu_info_util",
241    "$angle_root:angle_image_util",
242    "$angle_spirv_tools_dir:spvtools_val",
243  ]
244  public_deps = [
245    "$angle_root:angle_glslang_wrapper",
246    "$angle_root:libANGLE_headers",
247    "$angle_root/src/common/vulkan",
248  ]
249  public_configs = [ ":angle_vulkan_backend_config" ]
250
251  data_deps = []
252
253  defines = []
254
255  if (angle_enable_vulkan_validation_layers) {
256    defines += [ "ANGLE_ENABLE_VULKAN_VALIDATION_LAYERS_BY_DEFAULT" ]
257    data_deps += [ "$angle_root/src/common/vulkan:vulkan_validation_layers" ]
258  }
259
260  if (is_android) {
261    libs += [ "vulkan" ]
262  }
263
264  # Include generated shaders.
265  import("vk_internal_shaders_autogen.gni")
266  sources += angle_vulkan_internal_shaders
267}
268