• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2024 Huawei Device Co., Ltd.
2# Licensed under the Apache License, Version 2.0 (the "License");
3# you may not use this file except in compliance with the License.
4# You may obtain a copy of the License at
5#
6#     http://www.apache.org/licenses/LICENSE-2.0
7#
8# Unless required by applicable law or agreed to in writing, software
9# distributed under the License is distributed on an "AS IS" BASIS,
10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13import("//build/ohos.gni")
14import("//foundation/graphic/graphic_3d/lume/lume_config.gni")
15
16declare_args() {
17  RENDER_LOG_ENABLED = true
18  RENDER_VALIDATION_ENABLED = false
19  RENDER_BUILD_GLES = true
20  RENDER_BUILD_VULKAN = true
21  RENDER_ROFS = "rofsRndr"
22}
23
24config("lume_render_api") {
25  configs = [
26    "${LUME_CORE_PATH}:lume_base_api",
27    "${LUME_CORE_PATH}:lume_engine_api",
28  ]
29  include_dirs = [ "api" ]
30
31  defines = []
32
33  if (RENDER_BUILD_GLES) {
34    defines += [ "RENDER_HAS_GLES_BACKEND=1" ]
35  }
36
37  if (RENDER_BUILD_VULKAN) {
38    defines += [ "RENDER_HAS_VULKAN_BACKEND=1" ]
39    configs += [ "//third_party/vulkan-headers:vulkan_headers_config" ]
40  }
41}
42
43config("lume_render_config") {
44  configs = [
45    "${LUME_CORE_PATH}:lume_default",
46    ":lume_render_api",
47  ]
48  include_dirs = [
49    "3rdparty/",
50    "src/",
51  ]
52
53  defines = [
54    "RENDER_PUBLIC=__attribute__((visibility(\"default\")))",
55    "RENDER_OPTIMIZE_FOR_INTEGRATED_GPU=1",
56    "RENDER_DEV_ENABLED=0",
57    "RENDER_PERF_ENABLED=0",
58    "RENDER_TESTS_ENABLED=0",
59    "RENDER_LOG_TO_CONSOLE=1",
60    "RENDER_LOG_TO_FILE",
61    "RENDER_LOG_TO_DEBUG_OUTPUT=0",
62    "RENDER_DEBUG_GPU_RESOURCE_IDS=0",
63    "RENDER_DEBUG_MARKERS_ENABLED=0",
64    "RENDER_DEBUG_COMMAND_MARKERS_ENABLED=0",
65    "RENDER_GL_FLIP_Y_SWAPCHAIN=0",
66    "RENDER_GPU_TIMESTAMP_QUERIES_ENABLED=0",
67    "RENDER_VULKAN_RT_ENABLED=0",
68    "RENDER_BUILDTYPE=${BUILDTYPE}",
69    "RENDER_EMBEDDED_ASSETS_ENABLED=1",
70    "CORE_USE_COMPILER_GENERATED_STATIC_LIST=1",
71    "CORE_STATIC_PLUGIN_HEADER=${CORE_STATIC_PLUGIN_HEADER}",
72  ]
73
74  if (RENDER_LOG_ENABLED) {
75    defines += [
76      "PLUGIN_LOG_DISABLED=0",
77      "PLUGIN_LOG_DEBUG=1",
78    ]
79  } else {
80    defines += [
81      "PLUGIN_LOG_DISABLED=1",
82      "PLUGIN_LOG_DEBUG=0",
83    ]
84  }
85
86  if (LUME_OHOS_BUILD) {
87    defines += [ "__OHOS_PLATFORM__" ]
88  }
89
90  if (RENDER_VALIDATION_ENABLED) {
91    defines += [
92      "RENDER_VALIDATION_ENABLED=1",
93      "RENDER_VULKAN_VALIDATION_ENABLED=0",
94      "RENDER_GL_DEBUG=1",
95    ]
96  }
97  if (RENDER_BUILD_VULKAN) {
98    defines += [
99      "VMA_STATS_STRING_ENABLED=0",
100      "VMA_STATIC_VULKAN_FUNCTIONS=0",
101    ]
102
103    if (LUME_OHOS_BUILD) {
104      defines += [ "RENDER_VULKAN_VALIDATION_ENABLE_WARNINGS=0" ]
105      include_dirs += [ "src/vulkan/ohos" ]
106    }
107
108    # this should be replaced with a proper component definitions and configs/deps. (just like vulkan-headers:vulkan_headers_config)
109    defines += [ "PATH_TO_VMA=\"../../../../../../../third_party/skia/third_party/vulkanmemoryallocator/include/vk_mem_alloc.h\"" ]
110  }
111
112  ldflags = [ "-Wl,--undefined=AGPRender_StaticPlugin" ]
113
114  cflags = [
115    "-Wno-nullability-completeness",
116    "-Wno-ignored-qualifiers",
117    "-Wno-switch",
118  ]
119}
120
121ohos_source_set("lume_render_src") {
122  public_configs = [ ":lume_render_config" ]
123  deps = []
124  external_deps = []
125
126  sources = [
127    "src/datastore/render_data_store_default_acceleration_structure_staging.cpp",
128    "src/datastore/render_data_store_default_acceleration_structure_staging.h",
129    "src/datastore/render_data_store_default_gpu_resource_data_copy.cpp",
130    "src/datastore/render_data_store_default_gpu_resource_data_copy.h",
131    "src/datastore/render_data_store_default_staging.cpp",
132    "src/datastore/render_data_store_default_staging.h",
133    "src/datastore/render_data_store_manager.cpp",
134    "src/datastore/render_data_store_manager.h",
135    "src/datastore/render_data_store_pod.cpp",
136    "src/datastore/render_data_store_pod.h",
137    "src/datastore/render_data_store_post_process.cpp",
138    "src/datastore/render_data_store_post_process.h",
139    "src/datastore/render_data_store_render_post_processes.cpp",
140    "src/datastore/render_data_store_render_post_processes.h",
141    "src/datastore/render_data_store_shader_passes.cpp",
142    "src/datastore/render_data_store_shader_passes.h",
143    "src/default_engine_constants.h",
144    "src/device/device.cpp",
145    "src/device/device.h",
146    "src/device/gpu_buffer.h",
147    "src/device/gpu_image.h",
148    "src/device/gpu_program.h",
149    "src/device/gpu_program_util.cpp",
150    "src/device/gpu_program_util.h",
151    "src/device/gpu_resource_cache.cpp",
152    "src/device/gpu_resource_cache.h",
153    "src/device/gpu_resource_desc_flag_validation.h",
154    "src/device/gpu_resource_handle_util.cpp",
155    "src/device/gpu_resource_handle_util.h",
156    "src/device/gpu_resource_manager.cpp",
157    "src/device/gpu_resource_manager.h",
158    "src/device/gpu_resource_manager_base.h",
159    "src/device/gpu_resource_manager_base.inl",
160    "src/device/gpu_resource_util.cpp",
161    "src/device/gpu_resource_util.h",
162    "src/device/gpu_sampler.h",
163    "src/device/gpu_semaphore.h",
164    "src/device/pipeline_state_object.h",
165    "src/device/render_frame_sync.h",
166    "src/device/shader_manager.cpp",
167    "src/device/shader_manager.h",
168    "src/device/shader_module.h",
169    "src/device/shader_pipeline_binder.cpp",
170    "src/device/shader_pipeline_binder.h",
171    "src/device/shader_reflection_data.cpp",
172    "src/device/shader_reflection_data.h",
173    "src/device/swapchain.h",
174    "src/loader/json_format_serialization.h",
175    "src/loader/json_util.h",
176    "src/loader/pipeline_layout_loader.cpp",
177    "src/loader/pipeline_layout_loader.h",
178    "src/loader/render_data_configuration_loader.cpp",
179    "src/loader/render_data_configuration_loader.h",
180    "src/loader/render_data_loader.cpp",
181    "src/loader/render_data_loader.h",
182    "src/loader/render_node_graph_loader.cpp",
183    "src/loader/render_node_graph_loader.h",
184    "src/loader/shader_data_loader.cpp",
185    "src/loader/shader_data_loader.h",
186    "src/loader/shader_loader.cpp",
187    "src/loader/shader_loader.h",
188    "src/loader/shader_state_loader.cpp",
189    "src/loader/shader_state_loader.h",
190    "src/loader/shader_state_loader_util.cpp",
191    "src/loader/shader_state_loader_util.h",
192    "src/loader/vertex_input_declaration_loader.cpp",
193    "src/loader/vertex_input_declaration_loader.h",
194    "src/node/core_render_node_factory.cpp",
195    "src/node/core_render_node_factory.h",
196    "src/node/render_bloom.cpp",
197    "src/node/render_bloom.h",
198    "src/node/render_blur.cpp",
199    "src/node/render_blur.h",
200    "src/node/render_motion_blur.cpp",
201    "src/node/render_motion_blur.h",
202    "src/node/render_node_back_buffer.cpp",
203    "src/node/render_node_back_buffer.h",
204    "src/node/render_node_bloom.cpp",
205    "src/node/render_node_bloom.h",
206    "src/node/render_node_combined_post_process.cpp",
207    "src/node/render_node_combined_post_process.h",
208    "src/node/render_node_compute_generic.cpp",
209    "src/node/render_node_compute_generic.h",
210    "src/node/render_node_create_gpu_buffers.cpp",
211    "src/node/render_node_create_gpu_buffers.h",
212    "src/node/render_node_create_gpu_images.cpp",
213    "src/node/render_node_create_gpu_images.h",
214    "src/node/render_node_default_acceleration_structure_staging.cpp",
215    "src/node/render_node_default_acceleration_structure_staging.h",
216    "src/node/render_node_end_frame_staging.cpp",
217    "src/node/render_node_end_frame_staging.h",
218    "src/node/render_node_fullscreen_generic.cpp",
219    "src/node/render_node_fullscreen_generic.h",
220    "src/node/render_node_mip_chain_post_process.cpp",
221    "src/node/render_node_mip_chain_post_process.h",
222    "src/node/render_node_render_post_processes_generic.cpp",
223    "src/node/render_node_render_post_processes_generic.h",
224    "src/node/render_node_shader_passes_generic.cpp",
225    "src/node/render_node_shader_passes_generic.h",
226    "src/node/render_node_single_post_process.cpp",
227    "src/node/render_node_single_post_process.h",
228    "src/node/render_node_staging.cpp",
229    "src/node/render_node_staging.h",
230    "src/node/render_staging.cpp",
231    "src/node/render_staging.h",
232    "src/nodecontext/node_context_descriptor_set_manager.cpp",
233    "src/nodecontext/node_context_descriptor_set_manager.h",
234    "src/nodecontext/node_context_pool_manager.h",
235    "src/nodecontext/node_context_pso_manager.cpp",
236    "src/nodecontext/node_context_pso_manager.h",
237    "src/nodecontext/pipeline_descriptor_set_binder.cpp",
238    "src/nodecontext/pipeline_descriptor_set_binder.h",
239    "src/nodecontext/render_barrier_list.cpp",
240    "src/nodecontext/render_barrier_list.h",
241    "src/nodecontext/render_command_list.cpp",
242    "src/nodecontext/render_command_list.h",
243    "src/nodecontext/render_node_context_manager.cpp",
244    "src/nodecontext/render_node_context_manager.h",
245    "src/nodecontext/render_node_copy_util.cpp",
246    "src/nodecontext/render_node_copy_util.h",
247    "src/nodecontext/render_node_graph_manager.cpp",
248    "src/nodecontext/render_node_graph_manager.h",
249    "src/nodecontext/render_node_graph_node_store.h",
250    "src/nodecontext/render_node_graph_share_manager.cpp",
251    "src/nodecontext/render_node_graph_share_manager.h",
252    "src/nodecontext/render_node_manager.cpp",
253    "src/nodecontext/render_node_manager.h",
254    "src/nodecontext/render_node_parser_util.cpp",
255    "src/nodecontext/render_node_parser_util.h",
256    "src/nodecontext/render_node_post_process_util.cpp",
257    "src/nodecontext/render_node_post_process_util.h",
258    "src/nodecontext/render_node_util.cpp",
259    "src/nodecontext/render_node_util.h",
260    "src/perf/cpu_perf_scope.h",
261    "src/perf/cpu_timer.cpp",
262    "src/perf/cpu_timer.h",
263    "src/perf/gpu_query.h",
264    "src/perf/gpu_query_manager.cpp",
265    "src/perf/gpu_query_manager.h",
266    "src/plugin/static_plugin.cpp",
267    "src/postprocesses/render_post_process_flare.cpp",
268    "src/postprocesses/render_post_process_flare.h",
269    "src/postprocesses/render_post_process_flare_node.cpp",
270    "src/postprocesses/render_post_process_flare_node.h",
271    "src/render_backend.h",
272    "src/render_context.cpp",
273    "src/render_context.h",
274    "src/render_graph.cpp",
275    "src/render_graph.h",
276    "src/renderer.cpp",
277    "src/renderer.h",
278    "src/resource_handle_impl.cpp",
279    "src/resource_handle_impl.h",
280    "src/util/json.cpp",
281    "src/util/json_util.h",
282    "src/util/linear_allocator.h",
283    "src/util/log.h",
284    "src/util/property_util.cpp",
285    "src/util/property_util.h",
286    "src/util/render_frame_util.cpp",
287    "src/util/render_frame_util.h",
288    "src/util/render_util.cpp",
289    "src/util/render_util.h",
290    "src/util/shader_saver.cpp",
291    "src/util/shader_saver.h",
292    "src/util/string_util.h",
293    "version.cpp",
294  ]
295
296  if (RENDER_BUILD_GLES) {
297    sources += [
298      "src/gles/device_gles.cpp",
299      "src/gles/device_gles.h",
300      "src/gles/egl_state.cpp",
301      "src/gles/egl_state.h",
302      "src/gles/gl_functions.h",
303      "src/gles/gpu_buffer_gles.cpp",
304      "src/gles/gpu_buffer_gles.h",
305      "src/gles/gpu_image_gles.cpp",
306      "src/gles/gpu_image_gles.h",
307      "src/gles/gpu_program_gles.cpp",
308      "src/gles/gpu_program_gles.h",
309      "src/gles/gpu_query_gles.cpp",
310      "src/gles/gpu_query_gles.h",
311      "src/gles/gpu_resource_util_gles.cpp",
312      "src/gles/gpu_resource_util_gles.h",
313      "src/gles/gpu_sampler_gles.cpp",
314      "src/gles/gpu_sampler_gles.h",
315      "src/gles/gpu_semaphore_gles.cpp",
316      "src/gles/gpu_semaphore_gles.h",
317      "src/gles/node_context_descriptor_set_manager_gles.cpp",
318      "src/gles/node_context_descriptor_set_manager_gles.h",
319      "src/gles/node_context_pool_manager_gles.cpp",
320      "src/gles/node_context_pool_manager_gles.h",
321      "src/gles/pipeline_state_object_gles.cpp",
322      "src/gles/pipeline_state_object_gles.h",
323      "src/gles/render_backend_gles.cpp",
324      "src/gles/render_backend_gles.h",
325      "src/gles/render_frame_sync_gles.cpp",
326      "src/gles/render_frame_sync_gles.h",
327      "src/gles/shader_module_gles.cpp",
328      "src/gles/shader_module_gles.h",
329      "src/gles/spirv_cross_helper_structs_gles.h",
330      "src/gles/spirv_cross_helpers_gles.cpp",
331      "src/gles/spirv_cross_helpers_gles.h",
332      "src/gles/surface_information.h",
333      "src/gles/swapchain_gles.cpp",
334      "src/gles/swapchain_gles.h",
335    ]
336
337    external_deps += [
338      "graphic_2d:EGL",
339      "graphic_2d:GLESv3",
340    ]
341  }
342  if (RENDER_BUILD_VULKAN) {
343    sources += [
344      "src/vulkan/create_functions_vk.cpp",
345      "src/vulkan/create_functions_vk.h",
346      "src/vulkan/device_vk.cpp",
347      "src/vulkan/device_vk.h",
348      "src/vulkan/gpu_buffer_vk.cpp",
349      "src/vulkan/gpu_buffer_vk.h",
350      "src/vulkan/gpu_image_vk.cpp",
351      "src/vulkan/gpu_image_vk.h",
352      "src/vulkan/gpu_memory_allocator_vk.cpp",
353      "src/vulkan/gpu_memory_allocator_vk.h",
354      "src/vulkan/gpu_program_vk.cpp",
355      "src/vulkan/gpu_program_vk.h",
356      "src/vulkan/gpu_query_vk.cpp",
357      "src/vulkan/gpu_query_vk.h",
358      "src/vulkan/gpu_resource_util_vk.cpp",
359      "src/vulkan/gpu_resource_util_vk.h",
360      "src/vulkan/gpu_sampler_vk.cpp",
361      "src/vulkan/gpu_sampler_vk.h",
362      "src/vulkan/gpu_semaphore_vk.cpp",
363      "src/vulkan/gpu_semaphore_vk.h",
364      "src/vulkan/node_context_descriptor_set_manager_vk.cpp",
365      "src/vulkan/node_context_descriptor_set_manager_vk.h",
366      "src/vulkan/node_context_pool_manager_vk.cpp",
367      "src/vulkan/node_context_pool_manager_vk.h",
368      "src/vulkan/pipeline_create_functions_vk.cpp",
369      "src/vulkan/pipeline_create_functions_vk.h",
370      "src/vulkan/pipeline_state_object_vk.cpp",
371      "src/vulkan/pipeline_state_object_vk.h",
372      "src/vulkan/platform_hardware_buffer_util_vk.cpp",
373      "src/vulkan/platform_hardware_buffer_util_vk.h",
374      "src/vulkan/render_backend_vk.cpp",
375      "src/vulkan/render_backend_vk.h",
376      "src/vulkan/render_frame_sync_vk.cpp",
377      "src/vulkan/render_frame_sync_vk.h",
378      "src/vulkan/shader_module_vk.cpp",
379      "src/vulkan/shader_module_vk.h",
380      "src/vulkan/swapchain_vk.cpp",
381      "src/vulkan/swapchain_vk.h",
382      "src/vulkan/validate_vk.h",
383    ]
384    external_deps += [ "vulkan-loader:vulkan_loader" ]
385  }
386
387  if (LUME_OHOS_BUILD) {
388    # platform source
389    sources += [ "src/device/ohos/platform_hardware_buffer.cpp" ]
390    if (RENDER_BUILD_GLES) {
391      sources += [ "src/gles/ohos/platform_device_gles.cpp" ]
392    }
393    if (RENDER_BUILD_VULKAN) {
394      # platform source
395      sources += [
396        "src/vulkan/ohos/platform_create_functions_vk.cpp",
397        "src/vulkan/ohos/platform_device_vk.cpp",
398        "src/vulkan/ohos/platform_gpu_image_vk.cpp",
399        "src/vulkan/ohos/platform_hardware_buffer_util.cpp",
400        "src/vulkan/ohos/platform_vk.cpp",
401        "src/vulkan/ohos/platform_vk.h",
402      ]
403    }
404  }
405  external_deps += [
406    "c_utils:utils",
407    "graphic_surface:surface",
408  ]
409
410  part_name = "graphic_3d"
411  subsystem_name = "graphic"
412}
413
414lume_compile_shader("lume_render_compile_shader") {
415  script = "${LUME_CORE_PATH}/tools/CompilerShader.sh"
416  outputs = [ "$target_gen_dir" ]
417  tool_path = "$target_gen_dir/../LumeBinaryCompile/LumeShaderCompiler"
418  dest_gen_path = "$target_gen_dir/assets"
419  asset_path = rebase_path("./assets/render", root_build_dir)
420  shader_path = "${dest_gen_path}/shaders"
421  include_path = rebase_path("api", root_build_dir)
422  compileShader_deps =
423      [ "${LUME_BINARY_PATH}/LumeShaderCompiler:lume_binary_shader_compile" ]
424}
425
426lume_rofs("lume_render_rofs") {
427  output_obj = ""
428  if (target_cpu == "arm") {
429    output_obj = "${RENDER_ROFS}_32.o"
430  }
431
432  if (target_cpu == "arm64") {
433    output_obj = "${RENDER_ROFS}_64.o"
434  }
435
436  outputs = "${target_gen_dir}/assets/${output_obj}"
437
438  tool_path = "$target_gen_dir/../LumeBinaryCompile/lumeassetcompiler"
439  root = "/"
440  bin_name = "BINARYDATAFORRENDER"
441  size_name = "SIZEOFDATAFORRENDER"
442  base_name = RENDER_ROFS
443  script = "${LUME_CORE_PATH}/tools/CompilerAsset.sh"
444  copy_path = "$target_gen_dir/assets"
445  compileShader_deps = [
446    ":lume_render_compile_shader",
447    "${LUME_BINARY_PATH}/lumeassetcompiler:lume_binary_assets_compile",
448  ]
449  file_extension = "\".spv;.json;.lsb;.shader;.shadergs;.shadervid;.shaderpl;.rng;.gl;.gles\""
450}
451
452source_set("lume_render_rofs_obj") {
453  output_obj = ""
454  if (target_cpu == "arm") {
455    output_obj = "${RENDER_ROFS}_32.o"
456  }
457
458  if (target_cpu == "arm64") {
459    output_obj = "${RENDER_ROFS}_64.o"
460  }
461
462  sources = [ "${target_gen_dir}/assets/${output_obj}" ]
463  deps = [ ":lume_render_rofs" ]
464}
465
466ohos_source_set("lume_render_src_plugin") {
467  defines = [ "CORE_PLUGIN=1" ]
468  sources = [
469    "src/plugin/dynamic_plugin.cpp",
470    "src/plugin/dynamic_registry.cpp",
471  ]
472
473  configs = [ ":lume_render_config" ]
474}
475
476ohos_shared_library(LIB_RENDER) {
477  deps = [
478    ":lume_render_rofs_obj",
479    ":lume_render_src",
480    ":lume_render_src_plugin",
481  ]
482  relative_install_dir = "graphics3d"
483  part_name = "graphic_3d"
484  subsystem_name = "graphic"
485}
486