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