fix(nvenc): dynamic nv codec sdk selection (#5451)
This commit is contained in:
@@ -59,11 +59,53 @@ elseif(UNIX)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
include_directories(
|
||||
BEFORE SYSTEM
|
||||
"${CMAKE_SOURCE_DIR}/third-party/build-deps/third-party/FFmpeg/nv-codec-headers/include"
|
||||
set(NVENC_PUBLIC_SOURCES
|
||||
"${CMAKE_SOURCE_DIR}/src/nvenc/nvenc_config.h"
|
||||
"${CMAKE_SOURCE_DIR}/src/nvenc/nvenc_d3d11_interface.h"
|
||||
"${CMAKE_SOURCE_DIR}/src/nvenc/nvenc_dynamic_factory.cpp"
|
||||
"${CMAKE_SOURCE_DIR}/src/nvenc/nvenc_dynamic_factory.h"
|
||||
"${CMAKE_SOURCE_DIR}/src/nvenc/nvenc_dynamic_factory_versions.h"
|
||||
"${CMAKE_SOURCE_DIR}/src/nvenc/nvenc_encoded_frame.h"
|
||||
"${CMAKE_SOURCE_DIR}/src/nvenc/nvenc_encoder.h"
|
||||
"${CMAKE_SOURCE_DIR}/src/nvenc/nvenc_shared_dll.h"
|
||||
"${CMAKE_SOURCE_DIR}/src/nvenc/nvenc_version.h"
|
||||
)
|
||||
file(GLOB NVENC_SOURCES CONFIGURE_DEPENDS "src/nvenc/*.cpp" "src/nvenc/*.h")
|
||||
set(NVENC_SOURCES ${NVENC_PUBLIC_SOURCES})
|
||||
|
||||
if(WIN32)
|
||||
set(NVENC_IMPLEMENTATION_SOURCES
|
||||
"${CMAKE_SOURCE_DIR}/src/nvenc/nvenc_base.cpp"
|
||||
"${CMAKE_SOURCE_DIR}/src/nvenc/nvenc_d3d11.cpp"
|
||||
"${CMAKE_SOURCE_DIR}/src/nvenc/nvenc_d3d11_native.cpp"
|
||||
"${CMAKE_SOURCE_DIR}/src/nvenc/nvenc_d3d11_on_cuda.cpp"
|
||||
"${CMAKE_SOURCE_DIR}/src/nvenc/nvenc_dynamic_factory_impl.cpp"
|
||||
"${CMAKE_SOURCE_DIR}/src/nvenc/nvenc_utils.cpp"
|
||||
)
|
||||
|
||||
# Add a version-isolated NVENC implementation object library.
|
||||
# add_nvenc_sdk_implementation: args = `target_name`, `sdk_version`, `sdk_include_dir`
|
||||
function(add_nvenc_sdk_implementation target_name sdk_version sdk_include_dir)
|
||||
add_library(${target_name} OBJECT ${NVENC_IMPLEMENTATION_SOURCES})
|
||||
target_include_directories(${target_name} BEFORE PRIVATE "${sdk_include_dir}")
|
||||
target_compile_definitions(${target_name} PRIVATE
|
||||
NVENC_FACTORY_SUFFIX=${sdk_version}
|
||||
NVENC_NAMESPACE=nvenc_${sdk_version}
|
||||
NVENC_SDK_VERSION=${sdk_version}
|
||||
)
|
||||
target_compile_options(${target_name} PRIVATE ${SUNSHINE_COMPILE_OPTIONS})
|
||||
endfunction()
|
||||
|
||||
add_nvenc_sdk_implementation(nvenc_sdk_1100 1100 "${NV_CODEC_HEADERS_11_INCLUDE_DIR}")
|
||||
add_nvenc_sdk_implementation(nvenc_sdk_1200 1200 "${NV_CODEC_HEADERS_12_INCLUDE_DIR}")
|
||||
add_nvenc_sdk_implementation(nvenc_sdk_1300 1300 "${NV_CODEC_HEADERS_13_INCLUDE_DIR}")
|
||||
|
||||
list(APPEND NVENC_SOURCES
|
||||
$<TARGET_OBJECTS:nvenc_sdk_1100>
|
||||
$<TARGET_OBJECTS:nvenc_sdk_1200>
|
||||
$<TARGET_OBJECTS:nvenc_sdk_1300>
|
||||
)
|
||||
endif()
|
||||
|
||||
list(APPEND PLATFORM_TARGET_FILES ${NVENC_SOURCES})
|
||||
|
||||
set(SUNSHINE_TARGET_FILES
|
||||
@@ -155,6 +197,10 @@ include_directories(
|
||||
${Boost_INCLUDE_DIRS} # has to be the last, or we get runtime error on macOS ffmpeg encoder
|
||||
)
|
||||
|
||||
if(WIN32)
|
||||
include_directories(BEFORE SYSTEM "${NV_CODEC_HEADERS_13_INCLUDE_DIR}")
|
||||
endif()
|
||||
|
||||
list(APPEND SUNSHINE_EXTERNAL_LIBRARIES
|
||||
${MINIUPNP_LIBRARIES}
|
||||
${CMAKE_THREAD_LIBS_INIT}
|
||||
|
||||
Reference in New Issue
Block a user