From 6736f26db4acbf79e83e761a7fd0fb729eefb416 Mon Sep 17 00:00:00 2001 From: Sandy Date: Mon, 11 May 2020 10:08:02 +0200 Subject: [PATCH] 3rd party: Add webgpu cmake file (#84) --- CMakeLists.txt | 3 ++- bgfx | 2 +- bx | 2 +- cmake/3rdparty/spirv-cross.cmake | 1 - cmake/3rdparty/webgpu.cmake | 31 +++++++++++++++++++++++++++++++ cmake/bgfx.cmake | 12 +++++++++++- cmake/tools/shaderc.cmake | 5 +++-- 7 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 cmake/3rdparty/webgpu.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 573d83f..664d9c3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,6 +33,7 @@ option( BGFX_USE_OVR "Build with OVR support." OF option( BGFX_AMALGAMATED "Amalgamated bgfx build for faster compilation" OFF ) option( BX_AMALGAMATED "Amalgamated bx build for faster compilation" OFF ) option( BGFX_CONFIG_DEBUG "Enables debug configuration on all builds" OFF ) +option( BGFX_CONFIG_RENDERER_WEBGPU "Enables the webgpu renderer" OFF ) set( BGFX_OPENGL_VERSION "" CACHE STRING "Specify minimum OpenGL version" ) set( BGFX_OPENGLES_VERSION "" CACHE STRING "Specify minimum OpenGL ES version" ) @@ -108,7 +109,7 @@ if( BGFX_INSTALL ) install(FILES ${BGFX_DIR}/LICENSE DESTINATION ${CMAKE_INSTALL_DOCDIR}) install(FILES readme.md DESTINATION ${CMAKE_INSTALL_DOCDIR}) - install( TARGETS bgfx bimg bx astc-codec astc edtaa3 etc1 etc2 iqa squish nvtt pvrtc + install( TARGETS bgfx bimg bx astc-codec astc edtaa3 etc1 etc2 iqa squish nvtt pvrtc webgpu EXPORT "${TARGETS_EXPORT_NAME}" LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" diff --git a/bgfx b/bgfx index eaab1be..e08de6d 160000 --- a/bgfx +++ b/bgfx @@ -1 +1 @@ -Subproject commit eaab1be0799c8e24f1037c23c0a7f52daa2d5e31 +Subproject commit e08de6dd2cf126bf7c4c8276ce80dfd955b05f57 diff --git a/bx b/bx index 39711f5..b1a707f 160000 --- a/bx +++ b/bx @@ -1 +1 @@ -Subproject commit 39711f53df192ed7bd37ab192226f2d0f4985890 +Subproject commit b1a707fac854753088d9b17ceef11d20dd01ad20 diff --git a/cmake/3rdparty/spirv-cross.cmake b/cmake/3rdparty/spirv-cross.cmake index 1247101..a5768ae 100644 --- a/cmake/3rdparty/spirv-cross.cmake +++ b/cmake/3rdparty/spirv-cross.cmake @@ -24,7 +24,6 @@ target_compile_definitions( spirv-cross PRIVATE SPIRV_CROSS_EXCEPTIONS_TO_ASSERT target_include_directories( spirv-cross PUBLIC ${BGFX_DIR}/3rdparty/spirv-cross ${BGFX_DIR}/3rdparty/spirv-cross/include - ${BGFX_DIR}/3rdparty/webgpu/include ) if( MSVC ) diff --git a/cmake/3rdparty/webgpu.cmake b/cmake/3rdparty/webgpu.cmake new file mode 100644 index 0000000..3c4be27 --- /dev/null +++ b/cmake/3rdparty/webgpu.cmake @@ -0,0 +1,31 @@ +# bgfx.cmake - bgfx building in cmake +# Written in 2017 by Joshua Brookover + +# To the extent possible under law, the author(s) have dedicated all copyright +# and related and neighboring rights to this software to the public domain +# worldwide. This software is distributed without any warranty. + +# You should have received a copy of the CC0 Public Domain Dedication along with +# this software. If not, see . + +if( TARGET webgpu ) + return() +endif() + +file( + GLOB + WEBGPU_SOURCES + ${BGFX_DIR}/3rdparty/webgpu/include/webgpu/*.h + # ${BGFX_DIR}/3rdparty/webgpu/webgpu_cpp.cpp # requires dawn to be installed +) + +# Library without sources is interface +#add_library( webgpu STATIC ${WEBGPU_SOURCES} ) +add_library(webgpu INTERFACE) +target_include_directories( webgpu + # PUBLIC + INTERFACE + $ +) + +# set_target_properties( webgpu PROPERTIES FOLDER "bgfx/3rdparty" ) diff --git a/cmake/bgfx.cmake b/cmake/bgfx.cmake index 2112d69..0af42eb 100755 --- a/cmake/bgfx.cmake +++ b/cmake/bgfx.cmake @@ -42,6 +42,16 @@ endif() # Create the bgfx target add_library( bgfx ${BGFX_SOURCES} ) +if(BGFX_CONFIG_RENDERER_WEBGPU) + include(cmake/3rdparty/webgpu.cmake) + target_compile_definitions( bgfx PRIVATE BGFX_CONFIG_RENDERER_WEBGPU=1) + if (EMSCRIPTEN) + target_link_options(bgfx PRIVATE "-s USE_WEBGPU=1") + else() + target_link_libraries(bgfx PRIVATE webgpu) + endif() +endif() + # Enable BGFX_CONFIG_DEBUG in Debug configuration target_compile_definitions( bgfx PRIVATE "$<$:BGFX_CONFIG_DEBUG=1>" ) if(BGFX_CONFIG_DEBUG) @@ -120,4 +130,4 @@ set_target_properties( bgfx PROPERTIES FOLDER "bgfx" ) # in Xcode we need to specify this file as objective-c++ (instead of renaming to .mm) if (XCODE) set_source_files_properties(${BGFX_DIR}/src/renderer_vk.cpp PROPERTIES LANGUAGE OBJCXX XCODE_EXPLICIT_FILE_TYPE sourcecode.cpp.objcpp) -endif() \ No newline at end of file +endif() diff --git a/cmake/tools/shaderc.cmake b/cmake/tools/shaderc.cmake index ffaf414..92f23d0 100644 --- a/cmake/tools/shaderc.cmake +++ b/cmake/tools/shaderc.cmake @@ -15,18 +15,19 @@ include( cmake/3rdparty/glsl-optimizer.cmake ) include( cmake/3rdparty/glslang.cmake ) include( cmake/3rdparty/spirv-cross.cmake ) include( cmake/3rdparty/spirv-tools.cmake ) +include( cmake/3rdparty/webgpu.cmake ) add_executable( shaderc ${BGFX_DIR}/tools/shaderc/shaderc.cpp ${BGFX_DIR}/tools/shaderc/shaderc.h ${BGFX_DIR}/tools/shaderc/shaderc_glsl.cpp ${BGFX_DIR}/tools/shaderc/shaderc_hlsl.cpp ${BGFX_DIR}/tools/shaderc/shaderc_pssl.cpp ${BGFX_DIR}/tools/shaderc/shaderc_spirv.cpp ${BGFX_DIR}/tools/shaderc/shaderc_metal.cpp ) target_compile_definitions( shaderc PRIVATE "-D_CRT_SECURE_NO_WARNINGS" ) set_target_properties( shaderc PROPERTIES FOLDER "bgfx/tools" ) -target_link_libraries( shaderc bx bimg bgfx-vertexlayout bgfx-shader-spirv fcpp glsl-optimizer glslang spirv-cross spirv-tools ) +target_link_libraries(shaderc PRIVATE bx bimg bgfx-vertexlayout bgfx-shader-spirv fcpp glsl-optimizer glslang spirv-cross spirv-tools webgpu) if( BGFX_CUSTOM_TARGETS ) add_dependencies( tools shaderc ) endif() if (ANDROID) - target_link_libraries( shaderc log ) + target_link_libraries(shaderc PRIVATE log) elseif (IOS) set_target_properties(shaderc PROPERTIES MACOSX_BUNDLE ON MACOSX_BUNDLE_GUI_IDENTIFIER shaderc)