yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

Gangzheng TongUpdate slang-rhi deps for gfx-unit-test (#8237)0b87355f9

master
3.8 KiB122 linesraw
1function(example dir)
2    cmake_parse_arguments(ARG "WIN32_EXECUTABLE" "" "" ${ARGN})
3
4    set(debug_dir ${CMAKE_CURRENT_BINARY_DIR}/${dir})
5
6    file(
7        GLOB asset_files
8        CONFIGURE_DEPENDS
9        "${dir}/*.slang"
10        "${dir}/*.jpg"
11        "${dir}/*.obj"
12        "${dir}/*.mtl"
13        "${dir}/*.h"
14    )
15
16    list(LENGTH asset_files asset_files_length)
17    if(asset_files_length GREATER 0)
18        set(copy_assets_target "${dir}-copy-assets")
19
20        add_custom_target(
21            ${copy_assets_target}
22            COMMAND ${CMAKE_COMMAND} -E make_directory ${debug_dir}
23            COMMAND
24                ${CMAKE_COMMAND} -E copy_if_different ${asset_files}
25                ${debug_dir}
26            COMMENT "Copy example assets to ${debug_dir}"
27        )
28
29        set_target_properties(
30            ${copy_assets_target}
31            PROPERTIES FOLDER "examples/copy_assets"
32        )
33    endif()
34
35    # Libraries providing a main function that prints stack traces on exceptions
36    if(CMAKE_SYSTEM_NAME MATCHES "Windows")
37        # On Windows we have two different versions: main for "console applications" and
38        # WinMain for normal Windows applications.
39        if(${ARG_WIN32_EXECUTABLE})
40            set(main_wrapper_libraries example-winmain)
41        else()
42            set(main_wrapper_libraries example-main)
43        endif()
44        # Add stack printing support
45        set(main_wrapper_libraries ${main_wrapper_libraries} stacktrace-windows)
46        set(main_wrapper_libraries ${main_wrapper_libraries} dbghelp.lib)
47    else()
48        set(main_wrapper_libraries example-main)
49    endif()
50
51    slang_add_target(
52        ${dir}
53        EXECUTABLE
54        USE_FEWER_WARNINGS
55        LINK_WITH_PRIVATE
56            core
57            example-base
58            slang-rhi
59            slang
60            platform
61            $<$<BOOL:${SLANG_ENABLE_CUDA}>:CUDA::cuda_driver>
62            ${main_wrapper_libraries}
63        INCLUDE_DIRECTORIES_PUBLIC ${slang_SOURCE_DIR}
64        EXTRA_COMPILE_DEFINITIONS_PRIVATE
65            SLANG_EXAMPLE_NAME=${dir}
66            $<$<BOOL:${SLANG_ENABLE_XLIB}>:SLANG_ENABLE_XLIB>
67        REQUIRED_BY all-examples
68        OPTIONAL_REQUIRES ${copy_assets_target} copy-prebuilt-binaries
69        FOLDER examples
70        DEBUG_DIR ${debug_dir}
71        ${ARGN}
72    )
73endfunction()
74
75if(SLANG_ENABLE_EXAMPLES AND SLANG_ENABLE_SLANG_RHI)
76    #
77    # Examples
78    #
79    slang_add_target(
80        example-base
81        STATIC
82        LINK_WITH_PRIVATE
83            core
84            slang-rhi
85            slang
86            platform
87            stb
88            $<$<BOOL:${SLANG_ENABLE_CUDA}>:CUDA::cuda_driver>
89        FOLDER examples
90    )
91    slang_add_target(example-main STATIC FOLDER examples)
92    slang_add_target(example-winmain STATIC FOLDER examples EXCLUDE_FROM_ALL)
93    slang_add_target(stacktrace-windows STATIC FOLDER examples EXCLUDE_FROM_ALL)
94
95    add_custom_target(
96        all-examples
97        COMMENT "meta target which depends on all examples"
98    )
99    set_target_properties(all-examples PROPERTIES FOLDER examples)
100    example(autodiff-texture WIN32_EXECUTABLE)
101    example(cpu-com-example)
102    example(cpu-hello-world)
103    example(gpu-printing)
104    example(hello-world LINK_WITH_PRIVATE Vulkan-Headers)
105    example(model-viewer WIN32_EXECUTABLE)
106    example(platform-test WIN32_EXECUTABLE)
107    example(ray-tracing WIN32_EXECUTABLE)
108    example(ray-tracing-pipeline WIN32_EXECUTABLE)
109    example(reflection-api)
110    example(reflection-parameter-blocks LINK_WITH_PRIVATE Vulkan-Headers)
111    example(shader-object)
112    example(shader-toy WIN32_EXECUTABLE)
113    example(triangle WIN32_EXECUTABLE)
114    if(SLANG_ENABLE_AFTERMATH)
115        example(nv-aftermath-example WIN32_EXECUTABLE)
116    endif()
117
118    if(SLANG_ENABLE_SLANG_RHI)
119        example(mlp-training LINK_WITH_PRIVATE slang-rhi)
120        example(mlp-training-coopvec LINK_WITH_PRIVATE slang-rhi)
121    endif()
122endif()