diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt index 948a17da2..2b3ee5962 100644 --- a/docs/CHANGELOG.txt +++ b/docs/CHANGELOG.txt @@ -170,7 +170,8 @@ Other Changes: - WebGPU: fixed undefined behaviors in example code for requesting adapter and device. (#9246, #9256) [@r-lyeh] - SDL2+WebGPU: fixed hi-dpi handling. (#9300) [@ypujante] - - GLFW/SDL2/SDL3+WebGPU: removed suport for Emscripten <4.0.10. (#9281) [@ypujante] + - GLFW/SDL2/SDL3+WebGPU: added support for WGVK. (#9316, #9246, #9257) [@r-lyeh, @ocornut] + - GLFW/SDL2/SDL3+WebGPU: removed support for Emscripten <4.0.10. (#9281) [@ypujante] ----------------------------------------------------------------------- diff --git a/examples/example_glfw_wgpu/CMakeLists.txt b/examples/example_glfw_wgpu/CMakeLists.txt index f1951cb5d..53bcda339 100644 --- a/examples/example_glfw_wgpu/CMakeLists.txt +++ b/examples/example_glfw_wgpu/CMakeLists.txt @@ -1,19 +1,24 @@ -# Building for desktop (WebGPU-native) with Dawn: +# Building for desktop with Dawn: # 1. git clone https://github.com/google/dawn dawn # 2. cmake -B build -DIMGUI_DAWN_DIR=dawn # 3. cmake --build build # The resulting binary will be found at one of the following locations: -# * build/Debug/example_glfw_wgpu[.exe] -# * build/example_glfw_wgpu[.exe] +# * build/example_glfw_wgpu[.exe] or build/Debug/example_glfw_wgpu[.exe] -# Building for desktop (WGPU-Native) with WGPU-Native: +# Building for desktop with WGPU-Native: # 1. download WGPU-Native autogenerated binary modules for your platform/compiler from: https://github.com/gfx-rs/wgpu-native/releases # 2. unzip the downloaded file in your_preferred_folder # 3. cmake -B build -DIMGUI_WGPU_DIR=your_preferred_folder ("full path" or "relative" starting from current directory) # 4. cmake --build build # The resulting binary will be found at one of the following locations: -# * build/Debug/example_glfw_wgpu[.exe] -# * build/example_glfw_wgpu[.exe] +# * build/example_glfw_wgpu[.exe] or build/Debug/example_glfw_wgpu[.exe] + +# Building for desktop with WGVK (MUCH EASIER) +# 1. git clone https://github.com/manuel5975p/WGVK dawn +# 2. cmake -B build -DIMGUI_WGVK_DIR=wgvk +# 3. cmake --build build +# The resulting binary will be found at one of the following locations: +# * build/example_glfw_wgpu[.exe] or build/Debug/example_glfw_wgpu[.exe] # Building for Emscripten: # 1. Install Emscripten SDK following the instructions: https://emscripten.org/docs/getting_started/downloads.html @@ -66,13 +71,14 @@ if(EMSCRIPTEN) set(LIBRARIES glfw) add_compile_options(-sDISABLE_EXCEPTION_CATCHING=1 -DIMGUI_DISABLE_FILE_FUNCTIONS=1) else() # Native/Desktop build - # Check DAWN/WGPU directory - 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") - endif() - if(IMGUI_DAWN_DIR AND IMGUI_WGPU_DIR) # both IMGUI_DAWN_DIR and IMGUI_WGPU_DIR cannot be set - message(FATAL_ERROR "Please specify only one between Dawn / WGPU base directory") + # Check DAWN/WGPU/WGVK directory + # If it's Native/Desktop build, IMGUI_DAWN_DIR or IMGUI_WGPU_DIR or IMGUI_WGVK_DIR must be specified + if(NOT IMGUI_DAWN_DIR AND NOT IMGUI_WGPU_DIR AND NOT IMGUI_WGVK_DIR) + message(FATAL_ERROR "Please specify one of IMGUI_DAWN_DIR/IMGUI_WGPU_DIR/IMGUI_WGVK_DIR base directory.") + endif() + if((IMGUI_DAWN_DIR AND (IMGUI_WGPU_DIR OR IMGUI_WGVK_DIR)) OR (IMGUI_WGPU_DIR AND IMGUI_WGVK_DIR)) + message(FATAL_ERROR "Please specify only one of IMGUI_DAWN_DIR/IMGUI_WGPU_DIR/IMGUI_WGVK_DIR base directory.") endif() if(APPLE) # Add SDL2 module to get Surface, with libs and file property for MacOS build @@ -82,7 +88,7 @@ else() # Native/Desktop build find_package(glfw3 REQUIRED) - if(IMGUI_DAWN_DIR) # DAWN-Native build options + if(IMGUI_DAWN_DIR) 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) @@ -125,7 +131,9 @@ else() # Native/Desktop build set(LIBRARIES webgpu_dawn glfw) endif() - else() # WGPU-Native build options + endif() + + if(IMGUI_WGPU_DIR) 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) if(WIN32) @@ -136,6 +144,9 @@ else() # Native/Desktop build set(LIBRARIES glfw ${WGPU_LIBRARY} ${OS_LIBRARIES}) endif() + + if(IMGUI_WGVK_DIR) + endif() endif() add_executable(${IMGUI_EXECUTABLE} ${IMGUI_EXAMPLE_SOURCE_FILES}) @@ -168,10 +179,20 @@ if(NOT EMSCRIPTEN) # WegGPU-Native settings if(NOT Dawn_FOUND) target_link_libraries(${IMGUI_EXECUTABLE} INTERFACE webgpu_cpp) endif() - else() + endif() + if(IMGUI_WGPU_DIR) target_compile_definitions(${IMGUI_EXECUTABLE} PUBLIC "IMGUI_IMPL_WEBGPU_BACKEND_WGPU") target_include_directories(${IMGUI_EXECUTABLE} PUBLIC ${IMGUI_WGPU_DIR}/include) endif() + if(IMGUI_WGVK_DIR) + target_sources(${IMGUI_EXECUTABLE} PRIVATE ${IMGUI_WGVK_DIR}/src/wgvk.c) + target_compile_definitions(${IMGUI_EXECUTABLE} PUBLIC "IMGUI_IMPL_WEBGPU_BACKEND_WGVK") + target_include_directories(${IMGUI_EXECUTABLE} PUBLIC ${IMGUI_WGVK_DIR}/include) + if (MSVC) + target_compile_options(${IMGUI_EXECUTABLE} PUBLIC /std:clatest /experimental:c11atomics) + endif() + endif() + target_link_libraries(${IMGUI_EXECUTABLE} PUBLIC ${LIBRARIES}) else() # Emscripten settings diff --git a/examples/example_sdl2_wgpu/CMakeLists.txt b/examples/example_sdl2_wgpu/CMakeLists.txt index c2c45094d..3bed79fd4 100644 --- a/examples/example_sdl2_wgpu/CMakeLists.txt +++ b/examples/example_sdl2_wgpu/CMakeLists.txt @@ -1,19 +1,24 @@ -# Building for desktop (WebGPU-native) with Dawn: +# Building for desktop with Dawn: # 1. git clone https://github.com/google/dawn dawn # 2. cmake -B build -DIMGUI_DAWN_DIR=dawn # 3. cmake --build build # The resulting binary will be found at one of the following locations: -# * build/Debug/example_sdl2_wgpu[.exe] -# * build/example_sdl2_wgpu[.exe] +# * build/example_sdl2_wgpu[.exe] or build/Debug/example_sdl2_wgpu[.exe] -# Building for desktop (WGPU-Native) with WGPU-Native: +# Building for desktop with WGPU-Native: # 1. download WGPU-Native autogenerated binary modules for your platform/compiler from: https://github.com/gfx-rs/wgpu-native/releases # 2. unzip the downloaded file in your_preferred_folder # 3. cmake -B build -DIMGUI_WGPU_DIR=your_preferred_folder ("full path" or "relative" starting from current directory) # 4. cmake --build build # The resulting binary will be found at one of the following locations: -# * build/Debug/example_sdl2_wgpu[.exe] -# * build/example_sdl2_wgpu[.exe] +# * build/example_sdl2_wgpu[.exe] or build/Debug/example_sdl2_wgpu[.exe] + +# Building for desktop with WGVK (MUCH EASIER) +# 1. git clone https://github.com/manuel5975p/WGVK dawn +# 2. cmake -B build -DIMGUI_WGVK_DIR=wgvk +# 3. cmake --build build +# The resulting binary will be found at one of the following locations: +# * build/example_sdl2_wgpu[.exe] or build/Debug/example_sdl2_wgpu[.exe] # Building for Emscripten: # 1. Install Emscripten SDK following the instructions: https://emscripten.org/docs/getting_started/downloads.html @@ -60,12 +65,14 @@ if(EMSCRIPTEN) add_compile_options(-sDISABLE_EXCEPTION_CATCHING=1 -DIMGUI_DISABLE_FILE_FUNCTIONS=1) else() # Native/Desktop build - 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") - endif() - if(IMGUI_DAWN_DIR AND IMGUI_WGPU_DIR) # both IMGUI_DAWN_DIR and IMGUI_WGPU_DIR cannot be set - message(FATAL_ERROR "Please specify only one between Dawn / WGPU base directory") + # Check DAWN/WGPU/WGVK directory + # If it's Native/Desktop build, IMGUI_DAWN_DIR or IMGUI_WGPU_DIR or IMGUI_WGVK_DIR must be specified + if(NOT IMGUI_DAWN_DIR AND NOT IMGUI_WGPU_DIR AND NOT IMGUI_WGVK_DIR) + message(FATAL_ERROR "Please specify one of IMGUI_DAWN_DIR/IMGUI_WGPU_DIR/IMGUI_WGVK_DIR base directory.") + endif() + if((IMGUI_DAWN_DIR AND (IMGUI_WGPU_DIR OR IMGUI_WGVK_DIR)) OR (IMGUI_WGPU_DIR AND IMGUI_WGVK_DIR)) + message(FATAL_ERROR "Please specify only one of IMGUI_DAWN_DIR/IMGUI_WGPU_DIR/IMGUI_WGVK_DIR base directory.") endif() if(APPLE) # Add SDL2 module to get Surface, with libs and file property for MacOS build @@ -75,7 +82,7 @@ else() # Native/Desktop build find_package(SDL2 REQUIRED) # SDL_MAIN_HANDLED - if(IMGUI_DAWN_DIR) # DAWN-Native build options + if(IMGUI_DAWN_DIR) 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 @@ -119,8 +126,9 @@ else() # Native/Desktop build set(LIBRARIES webgpu_dawn ${OS_LIBRARIES}) endif() - else() # WGPU-Native build options + endif() + if(IMGUI_WGPU_DIR) 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) if(WIN32) @@ -131,6 +139,10 @@ else() # Native/Desktop build set(LIBRARIES ${WGPU_LIBRARY} ${OS_LIBRARIES}) endif() + + if(IMGUI_WGVK_DIR) + endif() + endif() add_executable(${IMGUI_EXECUTABLE} ${IMGUI_EXAMPLE_SOURCE_FILES}) @@ -163,10 +175,19 @@ if(NOT EMSCRIPTEN) # WegGPU-Native settings if(NOT Dawn_FOUND) target_link_libraries(${IMGUI_EXECUTABLE} INTERFACE webgpu_cpp) endif() - else() + endif() + if(IMGUI_WGPU_DIR) target_compile_definitions(${IMGUI_EXECUTABLE} PUBLIC "IMGUI_IMPL_WEBGPU_BACKEND_WGPU") target_include_directories(${IMGUI_EXECUTABLE} PUBLIC ${IMGUI_WGPU_DIR}/include) endif() + if(IMGUI_WGVK_DIR) + target_sources(${IMGUI_EXECUTABLE} PRIVATE ${IMGUI_WGVK_DIR}/src/wgvk.c) + target_compile_definitions(${IMGUI_EXECUTABLE} PUBLIC "IMGUI_IMPL_WEBGPU_BACKEND_WGVK") + target_include_directories(${IMGUI_EXECUTABLE} PUBLIC ${IMGUI_WGVK_DIR}/include) + if (MSVC) + target_compile_options(${IMGUI_EXECUTABLE} PUBLIC /std:clatest /experimental:c11atomics) + endif() + endif() target_link_libraries(${IMGUI_EXECUTABLE} PUBLIC ${LIBRARIES} ${SDL2_LIBRARIES}) else() # Emscripten settings diff --git a/examples/example_sdl3_wgpu/CMakeLists.txt b/examples/example_sdl3_wgpu/CMakeLists.txt index 6e418821c..85de861e3 100644 --- a/examples/example_sdl3_wgpu/CMakeLists.txt +++ b/examples/example_sdl3_wgpu/CMakeLists.txt @@ -1,19 +1,24 @@ -# Building for desktop (WebGPU-native) with Dawn: +# Building for desktop with Dawn: # 1. git clone https://github.com/google/dawn dawn # 2. cmake -B build -DIMGUI_DAWN_DIR=dawn # 3. cmake --build build # The resulting binary will be found at one of the following locations: -# * build/Debug/example_sdl3_wgpu[.exe] -# * build/example_sdl3_wgpu[.exe] +# * build/example_sdl3_wgpu[.exe] or build/Debug/example_sdl3_wgpu[.exe] -# Building for desktop (WGPU-Native) with WGPU-Native: +# Building for desktop with WGPU-Native: # 1. download WGPU-Native autogenerated binary modules for your platform/compiler from: https://github.com/gfx-rs/wgpu-native/releases # 2. unzip the downloaded file in your_preferred_folder # 3. cmake -B build -DIMGUI_WGPU_DIR=your_preferred_folder ("full path" or "relative" starting from current directory) # 4. cmake --build build # The resulting binary will be found at one of the following locations: -# * build/Debug/example_sdl3_wgpu[.exe] -# * build/example_sdl3_wgpu[.exe] +# * build/example_sdl3_wgpu[.exe] or build/Debug/example_sdl3_wgpu[.exe] + +# Building for desktop with WGVK (MUCH EASIER) +# 1. git clone https://github.com/manuel5975p/WGVK dawn +# 2. cmake -B build -DIMGUI_WGVK_DIR=wgvk +# 3. cmake --build build +# The resulting binary will be found at one of the following locations: +# * build/example_sdl3_wgpu[.exe] or build/Debug/example_sdl3_wgpu[.exe] # Building for Emscripten: # 1. Install Emscripten SDK following the instructions: https://emscripten.org/docs/getting_started/downloads.html @@ -60,12 +65,14 @@ if(EMSCRIPTEN) add_compile_options(-sDISABLE_EXCEPTION_CATCHING=1 -DIMGUI_DISABLE_FILE_FUNCTIONS=1) else() # Native/Desktop build - 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") - endif() - if(IMGUI_DAWN_DIR AND IMGUI_WGPU_DIR) # both IMGUI_DAWN_DIR and IMGUI_WGPU_DIR cannot be set - message(FATAL_ERROR "Please specify only one between Dawn / WGPU base directory") + # Check DAWN/WGPU/WGVK directory + # If it's Native/Desktop build, IMGUI_DAWN_DIR or IMGUI_WGPU_DIR or IMGUI_WGVK_DIR must be specified + if(NOT IMGUI_DAWN_DIR AND NOT IMGUI_WGPU_DIR AND NOT IMGUI_WGVK_DIR) + message(FATAL_ERROR "Please specify one of IMGUI_DAWN_DIR/IMGUI_WGPU_DIR/IMGUI_WGVK_DIR base directory.") + endif() + if((IMGUI_DAWN_DIR AND (IMGUI_WGPU_DIR OR IMGUI_WGVK_DIR)) OR (IMGUI_WGPU_DIR AND IMGUI_WGVK_DIR)) + message(FATAL_ERROR "Please specify only one of IMGUI_DAWN_DIR/IMGUI_WGPU_DIR/IMGUI_WGVK_DIR base directory.") endif() if(APPLE) # Add SDL3 module to get Surface, with libs and file property for MacOS build @@ -75,7 +82,7 @@ else() # Native/Desktop build find_package(SDL3 REQUIRED CONFIG REQUIRED COMPONENTS SDL3) - if(IMGUI_DAWN_DIR) # DAWN-Native build options + if(IMGUI_DAWN_DIR) 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 @@ -119,7 +126,9 @@ else() # Native/Desktop build set(LIBRARIES webgpu_dawn ${OS_LIBRARIES}) endif() - else() # WGPU-Native build options + endif() + + if(IMGUI_WGPU_DIR) 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) if(WIN32) @@ -130,6 +139,9 @@ else() # Native/Desktop build set(LIBRARIES ${WGPU_LIBRARY} ${OS_LIBRARIES}) endif() + + if(IMGUI_WGVK_DIR) + endif() endif() add_executable(${IMGUI_EXECUTABLE} ${IMGUI_EXAMPLE_SOURCE_FILES}) @@ -162,10 +174,19 @@ if(NOT EMSCRIPTEN) # WegGPU-Native settings if(NOT Dawn_FOUND) target_link_libraries(${IMGUI_EXECUTABLE} INTERFACE webgpu_cpp) endif() - else() + endif() + if(IMGUI_WGPU_DIR) target_compile_definitions(${IMGUI_EXECUTABLE} PUBLIC "IMGUI_IMPL_WEBGPU_BACKEND_WGPU") target_include_directories(${IMGUI_EXECUTABLE} PUBLIC ${IMGUI_WGPU_DIR}/include) endif() + if(IMGUI_WGVK_DIR) + target_sources(${IMGUI_EXECUTABLE} PRIVATE ${IMGUI_WGVK_DIR}/src/wgvk.c) + target_compile_definitions(${IMGUI_EXECUTABLE} PUBLIC "IMGUI_IMPL_WEBGPU_BACKEND_WGVK") + target_include_directories(${IMGUI_EXECUTABLE} PUBLIC ${IMGUI_WGVK_DIR}/include) + if (MSVC) + target_compile_options(${IMGUI_EXECUTABLE} PUBLIC /std:clatest /experimental:c11atomics) + endif() + endif() target_link_libraries(${IMGUI_EXECUTABLE} PUBLIC ${LIBRARIES} SDL3::SDL3) else() # Emscripten settings