mirror of
https://github.com/ocornut/imgui.git
synced 2025-12-19 12:55:34 +00:00
Backends, Examples: WebGPU: header optimization. Added the code for using Dawn “pre-built” library. (#8381)
This commit is contained in:
@@ -53,7 +53,6 @@
|
|||||||
#include "imgui_impl_wgpu.h"
|
#include "imgui_impl_wgpu.h"
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <webgpu/webgpu.h>
|
|
||||||
|
|
||||||
// One of IMGUI_IMPL_WEBGPU_BACKEND_DAWN or IMGUI_IMPL_WEBGPU_BACKEND_WGPU must be provided. See imgui_impl_wgpu.h for more details.
|
// One of IMGUI_IMPL_WEBGPU_BACKEND_DAWN or IMGUI_IMPL_WEBGPU_BACKEND_WGPU must be provided. See imgui_impl_wgpu.h for more details.
|
||||||
#if defined(IMGUI_IMPL_WEBGPU_BACKEND_DAWN) == defined(IMGUI_IMPL_WEBGPU_BACKEND_WGPU)
|
#if defined(IMGUI_IMPL_WEBGPU_BACKEND_DAWN) == defined(IMGUI_IMPL_WEBGPU_BACKEND_WGPU)
|
||||||
|
|||||||
@@ -41,9 +41,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <webgpu/webgpu.h>
|
#include <webgpu/webgpu.h>
|
||||||
#if defined(IMGUI_IMPL_WEBGPU_BACKEND_DAWN)
|
#if defined(IMGUI_IMPL_WEBGPU_BACKEND_WGPU) && !defined(__EMSCRIPTEN__)
|
||||||
#include <webgpu/webgpu_cpp.h> // for wgpu::Device, wgpu::DeviceLostReason, wgpu::ErrorType used by validation layer callbacks.
|
|
||||||
#elif !defined(__EMSCRIPTEN__)
|
|
||||||
#include <webgpu/wgpu.h> // WGPULogLevel
|
#include <webgpu/wgpu.h> // WGPULogLevel
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -85,18 +85,25 @@ else() # Native/Desktop build
|
|||||||
|
|
||||||
if(APPLE) # Add SDL2 module to get Surface, with libs and file property for MacOS build
|
if(APPLE) # Add SDL2 module to get Surface, with libs and file property for MacOS build
|
||||||
set_source_files_properties(${IMGUI_DIR}/backends/imgui_impl_wgpu.cpp PROPERTIES COMPILE_FLAGS "-x objective-c++")
|
set_source_files_properties(${IMGUI_DIR}/backends/imgui_impl_wgpu.cpp PROPERTIES COMPILE_FLAGS "-x objective-c++")
|
||||||
# set(OS_LIBRARIES "-framework CoreFoundation -framework QuartzCore -framework Metal -framework MetalKit -framework Cocoa")
|
set(OS_LIBRARIES "-framework CoreFoundation -framework QuartzCore -framework Metal -framework MetalKit -framework Cocoa")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
find_package(glfw3 REQUIRED)
|
||||||
|
|
||||||
if(IMGUI_DAWN_DIR) # DAWN-Native build options
|
if(IMGUI_DAWN_DIR) # DAWN-Native build options
|
||||||
|
list(APPEND CMAKE_PREFIX_PATH ${IMGUI_DAWN_DIR})
|
||||||
|
find_package(Dawn) # Search for a Dawn installation using IMGUI_DAWN_DIR in CMAKE_PREFIX_PATH
|
||||||
|
if(Dawn_FOUND)
|
||||||
|
message("Dawn Installation has been found!")
|
||||||
|
set(LIBRARIES dawn::webgpu_dawn glfw ${OS_LIBRARIES})
|
||||||
|
else()
|
||||||
set(IMGUI_DAWN_DIR CACHE PATH "Path to Dawn repository")
|
set(IMGUI_DAWN_DIR CACHE PATH "Path to Dawn repository")
|
||||||
if(NOT IMGUI_DAWN_DIR)
|
|
||||||
message(FATAL_ERROR "Please specify the Dawn repository by setting IMGUI_DAWN_DIR")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
option(DAWN_FETCH_DEPENDENCIES "Use fetch_dawn_dependencies.py as an alternative to using depot_tools" ON)
|
option(DAWN_FETCH_DEPENDENCIES "Use fetch_dawn_dependencies.py as an alternative to using depot_tools" ON)
|
||||||
set(DAWN_BUILD_MONOLITHIC_LIBRARY "STATIC" CACHE STRING "Build monolithic library: SHARED, STATIC, or OFF.")
|
set(DAWN_BUILD_MONOLITHIC_LIBRARY "STATIC" CACHE STRING "Build monolithic library: SHARED, STATIC, or OFF.")
|
||||||
|
|
||||||
|
option(DAWN_USE_GLFW OFF) # disable buildin GLFW in DAWN when we use SDL2 / SDL3
|
||||||
|
|
||||||
# Dawn builds many things by default - disable things we don't need
|
# Dawn builds many things by default - disable things we don't need
|
||||||
option(DAWN_BUILD_SAMPLES "Enables building Dawn's samples" OFF)
|
option(DAWN_BUILD_SAMPLES "Enables building Dawn's samples" OFF)
|
||||||
option(TINT_BUILD_CMD_TOOLS "Build the Tint command line tools" OFF)
|
option(TINT_BUILD_CMD_TOOLS "Build the Tint command line tools" OFF)
|
||||||
@@ -124,18 +131,15 @@ else() # Native/Desktop build
|
|||||||
|
|
||||||
add_subdirectory("${IMGUI_DAWN_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/dawn" EXCLUDE_FROM_ALL)
|
add_subdirectory("${IMGUI_DAWN_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/dawn" EXCLUDE_FROM_ALL)
|
||||||
|
|
||||||
set(LIBRARIES webgpu_dawn webgpu_glfw glfw)
|
set(LIBRARIES webgpu_dawn glfw)
|
||||||
|
endif()
|
||||||
else() # WGPU-Native build options
|
else() # WGPU-Native build options
|
||||||
find_package(glfw3 CONFIG)
|
|
||||||
|
|
||||||
set(WGPU_NATIVE_LIB_DIR ${IMGUI_WGPU_DIR}/lib)
|
set(WGPU_NATIVE_LIB_DIR ${IMGUI_WGPU_DIR}/lib)
|
||||||
find_library(WGPU_LIBRARY NAMES libwgpu_native.a wgpu_native.lib wgpu_native HINTS ${WGPU_NATIVE_LIB_DIR} REQUIRED)
|
find_library(WGPU_LIBRARY NAMES libwgpu_native.a wgpu_native.lib wgpu_native HINTS ${WGPU_NATIVE_LIB_DIR} REQUIRED)
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
set(OS_LIBRARIES d3dcompiler ws2_32 userenv bcrypt ntdll opengl32 Propsys RuntimeObject)
|
set(OS_LIBRARIES d3dcompiler ws2_32 userenv bcrypt ntdll opengl32 Propsys RuntimeObject)
|
||||||
elseif(UNIX AND NOT APPLE)
|
elseif(UNIX AND NOT APPLE)
|
||||||
set(OS_LIBRARIES "-lm -ldl")
|
set(OS_LIBRARIES "-lm -ldl")
|
||||||
elseif(APPLE)
|
|
||||||
set(OS_LIBRARIES "-framework CoreFoundation -framework QuartzCore -framework Metal -framework MetalKit -framework Cocoa")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(LIBRARIES glfw ${WGPU_LIBRARY} ${OS_LIBRARIES})
|
set(LIBRARIES glfw ${WGPU_LIBRARY} ${OS_LIBRARIES})
|
||||||
@@ -170,12 +174,15 @@ if(NOT EMSCRIPTEN) # WegGPU-Native settings
|
|||||||
# Set IMGUI_IMPL_WEBGPU_BACKEND_XXXX based on the SDK (directory) used
|
# Set IMGUI_IMPL_WEBGPU_BACKEND_XXXX based on the SDK (directory) used
|
||||||
if(IMGUI_DAWN_DIR)
|
if(IMGUI_DAWN_DIR)
|
||||||
target_compile_definitions(${IMGUI_EXECUTABLE} PUBLIC "IMGUI_IMPL_WEBGPU_BACKEND_DAWN")
|
target_compile_definitions(${IMGUI_EXECUTABLE} PUBLIC "IMGUI_IMPL_WEBGPU_BACKEND_DAWN")
|
||||||
|
if(NOT Dawn_FOUND)
|
||||||
|
target_link_libraries(${IMGUI_EXECUTABLE} INTERFACE webgpu_cpp)
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
target_compile_definitions(${IMGUI_EXECUTABLE} PUBLIC "IMGUI_IMPL_WEBGPU_BACKEND_WGPU")
|
target_compile_definitions(${IMGUI_EXECUTABLE} PUBLIC "IMGUI_IMPL_WEBGPU_BACKEND_WGPU")
|
||||||
target_include_directories(${IMGUI_EXECUTABLE} PUBLIC ${IMGUI_WGPU_DIR}/include)
|
target_include_directories(${IMGUI_EXECUTABLE} PUBLIC ${IMGUI_WGPU_DIR}/include)
|
||||||
endif()
|
endif()
|
||||||
|
target_link_libraries(${IMGUI_EXECUTABLE} PUBLIC ${LIBRARIES})
|
||||||
|
|
||||||
target_link_libraries(${IMGUI_EXECUTABLE} INTERFACE webgpu_cpp PUBLIC ${LIBRARIES})
|
|
||||||
else() # Emscripten settings
|
else() # Emscripten settings
|
||||||
set(CMAKE_EXECUTABLE_SUFFIX ".html")
|
set(CMAKE_EXECUTABLE_SUFFIX ".html")
|
||||||
|
|
||||||
|
|||||||
@@ -67,8 +67,6 @@ if(EMSCRIPTEN)
|
|||||||
|
|
||||||
add_compile_options(-sDISABLE_EXCEPTION_CATCHING=1 -DIMGUI_DISABLE_FILE_FUNCTIONS=1)
|
add_compile_options(-sDISABLE_EXCEPTION_CATCHING=1 -DIMGUI_DISABLE_FILE_FUNCTIONS=1)
|
||||||
else() # Native/Desktop build
|
else() # Native/Desktop build
|
||||||
find_package(SDL2 REQUIRED) # SDL_MAIN_HANDLED
|
|
||||||
|
|
||||||
if(NOT IMGUI_DAWN_DIR AND NOT IMGUI_WGPU_DIR) # if it's Native/Desktop build, IMGUI_DAWN_DIR or IMGUI_WGPU_DIR must be specified
|
if(NOT IMGUI_DAWN_DIR AND NOT IMGUI_WGPU_DIR) # if it's Native/Desktop build, IMGUI_DAWN_DIR or IMGUI_WGPU_DIR must be specified
|
||||||
message(FATAL_ERROR "Please specify the Dawn or WGPU base directory")
|
message(FATAL_ERROR "Please specify the Dawn or WGPU base directory")
|
||||||
endif()
|
endif()
|
||||||
@@ -82,11 +80,17 @@ else() # Native/Desktop build
|
|||||||
set(OS_LIBRARIES "-framework CoreFoundation -framework QuartzCore -framework Metal -framework MetalKit -framework Cocoa")
|
set(OS_LIBRARIES "-framework CoreFoundation -framework QuartzCore -framework Metal -framework MetalKit -framework Cocoa")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
find_package(SDL2 REQUIRED) # SDL_MAIN_HANDLED
|
||||||
|
|
||||||
if(IMGUI_DAWN_DIR) # DAWN-Native build options
|
if(IMGUI_DAWN_DIR) # DAWN-Native build options
|
||||||
|
list(APPEND CMAKE_PREFIX_PATH ${IMGUI_DAWN_DIR})
|
||||||
|
find_package(Threads) # required from Dawn installation
|
||||||
|
find_package(Dawn) # Search for a Dawn installation using IMGUI_DAWN_DIR in CMAKE_PREFIX_PATH
|
||||||
|
if(Dawn_FOUND)
|
||||||
|
message("Dawn Installation has been found!")
|
||||||
|
set(LIBRARIES dawn::webgpu_dawn ${OS_LIBRARIES})
|
||||||
|
else()
|
||||||
set(IMGUI_DAWN_DIR CACHE PATH "Path to Dawn repository")
|
set(IMGUI_DAWN_DIR CACHE PATH "Path to Dawn repository")
|
||||||
if(NOT IMGUI_DAWN_DIR)
|
|
||||||
message(FATAL_ERROR "Please specify the Dawn repository by setting IMGUI_DAWN_DIR")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
option(DAWN_USE_GLFW OFF) # disable buildin GLFW in DAWN when we use SDL2 / SDL3
|
option(DAWN_USE_GLFW OFF) # disable buildin GLFW in DAWN when we use SDL2 / SDL3
|
||||||
|
|
||||||
@@ -121,6 +125,7 @@ else() # Native/Desktop build
|
|||||||
add_subdirectory("${IMGUI_DAWN_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/dawn" EXCLUDE_FROM_ALL)
|
add_subdirectory("${IMGUI_DAWN_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/dawn" EXCLUDE_FROM_ALL)
|
||||||
|
|
||||||
set(LIBRARIES webgpu_dawn ${OS_LIBRARIES})
|
set(LIBRARIES webgpu_dawn ${OS_LIBRARIES})
|
||||||
|
endif()
|
||||||
else() # WGPU-Native build options
|
else() # WGPU-Native build options
|
||||||
|
|
||||||
set(WGPU_NATIVE_LIB_DIR ${IMGUI_WGPU_DIR}/lib)
|
set(WGPU_NATIVE_LIB_DIR ${IMGUI_WGPU_DIR}/lib)
|
||||||
@@ -163,12 +168,15 @@ endif()
|
|||||||
if(NOT EMSCRIPTEN) # WegGPU-Native settings
|
if(NOT EMSCRIPTEN) # WegGPU-Native settings
|
||||||
if(IMGUI_DAWN_DIR)
|
if(IMGUI_DAWN_DIR)
|
||||||
target_compile_definitions(${IMGUI_EXECUTABLE} PUBLIC "IMGUI_IMPL_WEBGPU_BACKEND_DAWN")
|
target_compile_definitions(${IMGUI_EXECUTABLE} PUBLIC "IMGUI_IMPL_WEBGPU_BACKEND_DAWN")
|
||||||
|
if(NOT Dawn_FOUND)
|
||||||
|
target_link_libraries(${IMGUI_EXECUTABLE} INTERFACE webgpu_cpp)
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
target_compile_definitions(${IMGUI_EXECUTABLE} PUBLIC "IMGUI_IMPL_WEBGPU_BACKEND_WGPU")
|
target_compile_definitions(${IMGUI_EXECUTABLE} PUBLIC "IMGUI_IMPL_WEBGPU_BACKEND_WGPU")
|
||||||
target_include_directories(${IMGUI_EXECUTABLE} PUBLIC ${IMGUI_WGPU_DIR}/include)
|
target_include_directories(${IMGUI_EXECUTABLE} PUBLIC ${IMGUI_WGPU_DIR}/include)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_link_libraries(${IMGUI_EXECUTABLE} INTERFACE webgpu_cpp PUBLIC ${LIBRARIES} ${SDL2_LIBRARIES})
|
target_link_libraries(${IMGUI_EXECUTABLE} PUBLIC ${LIBRARIES} ${SDL2_LIBRARIES})
|
||||||
else() # Emscripten settings
|
else() # Emscripten settings
|
||||||
set(CMAKE_EXECUTABLE_SUFFIX ".html")
|
set(CMAKE_EXECUTABLE_SUFFIX ".html")
|
||||||
|
|
||||||
|
|||||||
@@ -70,8 +70,6 @@ if(EMSCRIPTEN)
|
|||||||
|
|
||||||
add_compile_options(-sDISABLE_EXCEPTION_CATCHING=1 -DIMGUI_DISABLE_FILE_FUNCTIONS=1)
|
add_compile_options(-sDISABLE_EXCEPTION_CATCHING=1 -DIMGUI_DISABLE_FILE_FUNCTIONS=1)
|
||||||
else() # Native/Desktop build
|
else() # Native/Desktop build
|
||||||
find_package(SDL3 REQUIRED CONFIG REQUIRED COMPONENTS SDL3)
|
|
||||||
|
|
||||||
if(NOT IMGUI_DAWN_DIR AND NOT IMGUI_WGPU_DIR) # if it's Native/Desktop build, IMGUI_DAWN_DIR or IMGUI_WGPU_DIR must be specified
|
if(NOT IMGUI_DAWN_DIR AND NOT IMGUI_WGPU_DIR) # if it's Native/Desktop build, IMGUI_DAWN_DIR or IMGUI_WGPU_DIR must be specified
|
||||||
message(FATAL_ERROR "Please specify the Dawn or WGPU base directory")
|
message(FATAL_ERROR "Please specify the Dawn or WGPU base directory")
|
||||||
endif()
|
endif()
|
||||||
@@ -85,11 +83,17 @@ else() # Native/Desktop build
|
|||||||
set(OS_LIBRARIES "-framework CoreFoundation -framework QuartzCore -framework Metal -framework MetalKit -framework Cocoa")
|
set(OS_LIBRARIES "-framework CoreFoundation -framework QuartzCore -framework Metal -framework MetalKit -framework Cocoa")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
find_package(SDL3 REQUIRED CONFIG REQUIRED COMPONENTS SDL3)
|
||||||
|
|
||||||
if(IMGUI_DAWN_DIR) # DAWN-Native build options
|
if(IMGUI_DAWN_DIR) # DAWN-Native build options
|
||||||
|
list(APPEND CMAKE_PREFIX_PATH ${IMGUI_DAWN_DIR})
|
||||||
|
find_package(Threads) # required from Dawn installation
|
||||||
|
find_package(Dawn) # Search for a Dawn installation using IMGUI_DAWN_DIR in CMAKE_PREFIX_PATH
|
||||||
|
if(Dawn_FOUND)
|
||||||
|
message("Dawn Installation has been found!")
|
||||||
|
set(LIBRARIES dawn::webgpu_dawn ${OS_LIBRARIES})
|
||||||
|
else()
|
||||||
set(IMGUI_DAWN_DIR CACHE PATH "Path to Dawn repository")
|
set(IMGUI_DAWN_DIR CACHE PATH "Path to Dawn repository")
|
||||||
if(NOT IMGUI_DAWN_DIR)
|
|
||||||
message(FATAL_ERROR "Please specify the Dawn repository by setting IMGUI_DAWN_DIR")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
option(DAWN_USE_GLFW OFF) # disable buildin GLFW in DAWN when we use SDL2 / SDL3
|
option(DAWN_USE_GLFW OFF) # disable buildin GLFW in DAWN when we use SDL2 / SDL3
|
||||||
|
|
||||||
@@ -124,6 +128,7 @@ else() # Native/Desktop build
|
|||||||
add_subdirectory("${IMGUI_DAWN_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/dawn" EXCLUDE_FROM_ALL)
|
add_subdirectory("${IMGUI_DAWN_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/dawn" EXCLUDE_FROM_ALL)
|
||||||
|
|
||||||
set(LIBRARIES webgpu_dawn ${OS_LIBRARIES})
|
set(LIBRARIES webgpu_dawn ${OS_LIBRARIES})
|
||||||
|
endif()
|
||||||
else() # WGPU-Native build options
|
else() # WGPU-Native build options
|
||||||
set(WGPU_NATIVE_LIB_DIR ${IMGUI_WGPU_DIR}/lib)
|
set(WGPU_NATIVE_LIB_DIR ${IMGUI_WGPU_DIR}/lib)
|
||||||
find_library(WGPU_LIBRARY NAMES libwgpu_native.a wgpu_native.lib wgpu_native HINTS ${WGPU_NATIVE_LIB_DIR} REQUIRED)
|
find_library(WGPU_LIBRARY NAMES libwgpu_native.a wgpu_native.lib wgpu_native HINTS ${WGPU_NATIVE_LIB_DIR} REQUIRED)
|
||||||
@@ -165,12 +170,15 @@ endif()
|
|||||||
if(NOT EMSCRIPTEN) # WegGPU-Native settings
|
if(NOT EMSCRIPTEN) # WegGPU-Native settings
|
||||||
if(IMGUI_DAWN_DIR)
|
if(IMGUI_DAWN_DIR)
|
||||||
target_compile_definitions(${IMGUI_EXECUTABLE} PUBLIC "IMGUI_IMPL_WEBGPU_BACKEND_DAWN")
|
target_compile_definitions(${IMGUI_EXECUTABLE} PUBLIC "IMGUI_IMPL_WEBGPU_BACKEND_DAWN")
|
||||||
|
if(NOT Dawn_FOUND)
|
||||||
|
target_link_libraries(${IMGUI_EXECUTABLE} INTERFACE webgpu_cpp)
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
target_compile_definitions(${IMGUI_EXECUTABLE} PUBLIC "IMGUI_IMPL_WEBGPU_BACKEND_WGPU")
|
target_compile_definitions(${IMGUI_EXECUTABLE} PUBLIC "IMGUI_IMPL_WEBGPU_BACKEND_WGPU")
|
||||||
target_include_directories(${IMGUI_EXECUTABLE} PUBLIC ${IMGUI_WGPU_DIR}/include)
|
target_include_directories(${IMGUI_EXECUTABLE} PUBLIC ${IMGUI_WGPU_DIR}/include)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_link_libraries(${IMGUI_EXECUTABLE} INTERFACE webgpu_cpp PUBLIC ${LIBRARIES} SDL3::SDL3)
|
target_link_libraries(${IMGUI_EXECUTABLE} PUBLIC ${LIBRARIES} SDL3::SDL3)
|
||||||
else() # Emscripten settings
|
else() # Emscripten settings
|
||||||
set(CMAKE_EXECUTABLE_SUFFIX ".html")
|
set(CMAKE_EXECUTABLE_SUFFIX ".html")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user