Files
Vulkan-Samples/samples/CMakeLists.txt
T
2025-09-04 10:54:47 +08:00

168 lines
4.5 KiB
CMake

# Copyright (c) 2019-2025, Arm Limited and Contributors
#
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 the "License";
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
cmake_minimum_required(VERSION 3.16)
# Creates a list of the subdirectories within this folder
scan_dirs(
DIR ${CMAKE_CURRENT_SOURCE_DIR}
LIST SUB_DIRS)
# List of all samples
set(TOTAL_SAMPLE_ID_LIST)
# For each directory, add all the samples that exist within
function(add_sub_dirs DIRECTORY)
scan_dirs(
DIR ${DIRECTORY}
LIST DIR_LIST)
foreach (CURR_DIR ${DIR_LIST})
if (EXISTS "${DIRECTORY}/${CURR_DIR}/CMakeLists.txt")
add_subdirectory(${DIRECTORY}/${CURR_DIR})
list(APPEND TOTAL_SAMPLE_ID_LIST ${CURR_DIR})
else ()
add_sub_dirs(${DIRECTORY}/${CURR_DIR})
endif ()
set(TOTAL_SAMPLE_ID_LIST ${TOTAL_SAMPLE_ID_LIST} PARENT_SCOPE)
endforeach ()
endfunction(add_sub_dirs)
foreach (SUB_DIR ${SUB_DIRS})
add_sub_dirs(${CMAKE_CURRENT_SOURCE_DIR}/${SUB_DIR})
endforeach ()
# Order of the sample ids
set(ORDER_LIST
#API Samples
"hello_triangle"
"hello_triangle_1_3"
"dynamic_uniform_buffers"
"texture_loading"
"hdr"
"instancing"
"compute_nbody"
"terrain_tessellation"
"oit_linked_lists"
"oit_depth_peeling"
#Extension Samples
"dynamic_rendering"
"conservative_rasterization"
"fragment_shading_rate"
"fragment_shading_rate_dynamic"
"full_screen_exclusive"
"calibrated_timestamps"
"graphics_pipeline_library"
"memory_budget"
"mesh_shader_culling"
"push_descriptors"
"ray_queries"
"ray_tracing_basic"
"ray_tracing_extended"
"ray_tracing_reflection"
"timeline_semaphore"
"shader_object"
"shader_debugprintf"
"synchronization_2"
"buffer_device_address"
"descriptor_indexing"
"portability"
"vertex_dynamic_state"
"extended_dynamic_state2"
"logic_op_dynamic_state"
"patch_control_points"
"fragment_shader_barycentric"
"gshader_to_mshader"
"color_write_enable"
"dynamic_multisample_rasterization"
"sparse_image"
"dynamic_primitive_clipping"
#Performance Samples
"swapchain_images"
"surface_rotation"
"pipeline_cache"
"descriptor_management"
"constant_data"
"render_passes"
"msaa"
"subpasses"
"pipeline_barriers"
"wait_idle"
"layout_transitions"
"specialization_constants"
"command_buffer_usage"
"multithreading_render_passes"
"afbc"
"16bit_storage_input_output"
"16bit_arithmetic"
"async_compute"
"multi_draw_indirect"
"texture_compression_comparison"
#Tooling samples
"profiles"
#HPP API Samples
"hpp_compute_nbody"
"hpp_dynamic_uniform_buffers"
"hpp_hdr"
"hpp_hello_triangle"
"hpp_instancing"
"hpp_oit_depth_peeling"
"hpp_oit_linked_lists"
"hpp_separate_image_sampler"
"hpp_terrain_tessellation"
"hpp_texture_loading"
"hpp_texture_mipmap_generation"
#HPP Extension Samples
"hpp_mesh_shading"
"hpp_push_descriptors"
#HPP Performance Samples
"hpp_pipeline_cache"
"hpp_swapchain_images"
"hpp_texture_compression_comparison"
#General Samples
"mobile_nerf")
# Orders the sample ids by the order list above
set(ORDERED_LIST)
list(REMOVE_DUPLICATES ORDER_LIST)
# Add samples to ordered list based on the a predefined order
foreach (SAMPLE_ID ${ORDER_LIST})
list(FIND ORDERED_LIST ${SAMPLE_ID} FOUND_SAMPLE)
if (NOT ${FOUND_SAMPLE} LESS 0)
list(APPEND ORDERED_LIST ${SAMPLE_ID})
endif ()
endforeach ()
# Add the remaining samples to the ordered list that are not in the predefined order
foreach (SAMPLE_ID ${TOTAL_SAMPLE_ID_LIST})
list(FIND ORDERED_LIST ${SAMPLE_ID} FOUND_SAMPLE)
if (${FOUND_SAMPLE} LESS 0)
list(APPEND ORDERED_LIST ${SAMPLE_ID})
endif ()
endforeach ()
# Make sample list visible parent scope (required by vulkan_samples project)
set(TOTAL_SAMPLE_ID_LIST ${ORDERED_LIST} PARENT_SCOPE)