diff --git a/.github/workflows/ci-freebsd.yml b/.github/workflows/ci-freebsd.yml index d510bf30397..8b67f3b01d1 100644 --- a/.github/workflows/ci-freebsd.yml +++ b/.github/workflows/ci-freebsd.yml @@ -113,6 +113,8 @@ jobs: devel/pkgconf \ ftp/curl \ graphics/libdrm \ + graphics/vulkan-headers \ + graphics/vulkan-loader \ graphics/wayland \ lang/python312 \ multimedia/libva \ diff --git a/cmake/compile_definitions/linux.cmake b/cmake/compile_definitions/linux.cmake index 3758884fdce..d161499d6fc 100644 --- a/cmake/compile_definitions/linux.cmake +++ b/cmake/compile_definitions/linux.cmake @@ -120,6 +120,21 @@ if(LIBVA_FOUND) "${CMAKE_SOURCE_DIR}/src/platform/linux/vaapi.cpp") endif() +# vulkan video encoding (via FFmpeg) +if(${SUNSHINE_ENABLE_VULKAN}) + find_package(Vulkan REQUIRED) +else() + set(Vulkan_FOUND OFF) +endif() +if(Vulkan_FOUND) + list(APPEND SUNSHINE_DEFINITIONS SUNSHINE_BUILD_VULKAN=1) + include_directories(SYSTEM ${Vulkan_INCLUDE_DIRS}) + list(APPEND PLATFORM_LIBRARIES ${Vulkan_LIBRARIES}) + list(APPEND PLATFORM_TARGET_FILES + "${CMAKE_SOURCE_DIR}/src/platform/linux/vulkan_encode.h" + "${CMAKE_SOURCE_DIR}/src/platform/linux/vulkan_encode.cpp") +endif() + # wayland if(${SUNSHINE_ENABLE_WAYLAND}) find_package(Wayland REQUIRED) diff --git a/cmake/prep/options.cmake b/cmake/prep/options.cmake index 6b732a957e6..9be4629245a 100644 --- a/cmake/prep/options.cmake +++ b/cmake/prep/options.cmake @@ -60,6 +60,8 @@ elseif(UNIX) # Linux "Enable KMS grab if available." ON) option(SUNSHINE_ENABLE_VAAPI "Enable building vaapi specific code." ON) + option(SUNSHINE_ENABLE_VULKAN + "Enable Vulkan video encoding." ON) option(SUNSHINE_ENABLE_WAYLAND "Enable building wayland specific code." ON) option(SUNSHINE_ENABLE_X11 diff --git a/docs/configuration.md b/docs/configuration.md index 662a07f1994..8907269da84 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -2126,6 +2126,11 @@ editing the `conf` file in a text editor. Use the examples as reference.