Skip to content

Commit 4fb1264

Browse files
committed
feat(sr): launch in-process Vulkan neural super-resolution with omni-lifecycle auto-trigger and portable self-healing (#239)
1 parent cb9b32c commit 4fb1264

39 files changed

Lines changed: 2896 additions & 1167 deletions

‎.github/workflows/build-release.yml‎

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -87,12 +87,14 @@ jobs:
8787
$zipName = "QuickView_${tag}_${archUpper}.zip"
8888
Compress-Archive -Path $exePath -DestinationPath "Release/dist/$zipName" -Force
8989
90-
# Package standalone QVX plugin artifact
91-
$pluginPath = "${{ github.workspace }}/out/build/${{ matrix.preset }}/plugins/sr_realesrgan_d3d11.qvx"
92-
if (Test-Path $pluginPath) {
93-
Copy-Item -Path $pluginPath -Destination "Release/dist/sr_realesrgan_d3d11_${archUpper}.qvx" -Force
90+
# Package standalone QVX plugin artifact (sr_ncnn_vulkan + models + manifest)
91+
$pluginDir = "${{ github.workspace }}/out/build/${{ matrix.preset }}/plugins/sr/sr_ncnn_vulkan"
92+
if (Test-Path "$pluginDir/sr_ncnn_vulkan.qvx") {
93+
$pluginZip = "Release/dist/sr_ncnn_vulkan_${archUpper}.zip"
94+
Compress-Archive -Path "$pluginDir/*" -DestinationPath $pluginZip -Force
9495
if ("${{ matrix.platform }}" -eq "x64") {
95-
Copy-Item -Path $pluginPath -Destination "Release/dist/sr_realesrgan_d3d11.qvx" -Force
96+
Copy-Item -Path $pluginZip -Destination "Release/dist/sr_ncnn_vulkan.zip" -Force
97+
Copy-Item -Path "${{ github.workspace }}/plugins/plugins_manifest.json" -Destination "Release/dist/plugins_manifest.json" -Force
9698
}
9799
}
98100

‎.gitignore‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,5 +135,6 @@ Local-Files/
135135
# Plugins and AI Models (Downloaded on-demand, not stored in repo)
136136
plugins/*.qvx
137137
plugins/*.dll
138-
plugins/models/
139138
plugins/temp_models.zip
139+
140+
third_party/onnxruntime/

‎CMakeLists.txt‎

Lines changed: 44 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -379,16 +379,46 @@ target_link_libraries(QuickView PRIVATE
379379
# ============================================================================
380380
# Super-Resolution Plugins (QVX)
381381
# ============================================================================
382-
add_library(sr_realesrgan_d3d11 SHARED plugins/sr_realesrgan_d3d11.cpp)
383-
set_target_properties(sr_realesrgan_d3d11 PROPERTIES
384-
SUFFIX ".qvx"
385-
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/plugins"
386-
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/plugins"
387-
RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/plugins"
388-
)
389-
target_include_directories(sr_realesrgan_d3d11 PRIVATE QuickView)
390-
target_link_libraries(sr_realesrgan_d3d11 PRIVATE d3d11.lib d3dcompiler.lib dxgi.lib shlwapi.lib)
391-
add_dependencies(QuickView sr_realesrgan_d3d11)
382+
set(NCNN_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/ncnn/x64")
383+
if(EXISTS "${NCNN_DIR}/include/ncnn")
384+
add_library(sr_ncnn_vulkan SHARED plugins/sr/sr_ncnn_vulkan/sr_ncnn_vulkan_engine.cpp)
385+
set_target_properties(sr_ncnn_vulkan PROPERTIES
386+
SUFFIX ".qvx"
387+
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL"
388+
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/plugins/sr/sr_ncnn_vulkan"
389+
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/plugins/sr/sr_ncnn_vulkan"
390+
RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/plugins/sr/sr_ncnn_vulkan"
391+
)
392+
target_include_directories(sr_ncnn_vulkan PRIVATE
393+
QuickView
394+
"${NCNN_DIR}/include"
395+
"${NCNN_DIR}/include/ncnn"
396+
)
397+
target_link_libraries(sr_ncnn_vulkan PRIVATE
398+
d3d11.lib dxgi.lib shlwapi.lib
399+
"${NCNN_DIR}/lib/ncnn.lib"
400+
"${NCNN_DIR}/lib/glslang.lib"
401+
"${NCNN_DIR}/lib/SPIRV.lib"
402+
"${NCNN_DIR}/lib/MachineIndependent.lib"
403+
"${NCNN_DIR}/lib/OGLCompiler.lib"
404+
"${NCNN_DIR}/lib/OSDependent.lib"
405+
"${NCNN_DIR}/lib/GenericCodeGen.lib"
406+
)
407+
408+
# Sync plugin models and manifest to build directory
409+
add_custom_command(TARGET sr_ncnn_vulkan POST_BUILD
410+
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/plugins/sr/sr_ncnn_vulkan/models"
411+
COMMAND ${CMAKE_COMMAND} -E copy_directory
412+
"${CMAKE_CURRENT_SOURCE_DIR}/plugins/sr/sr_ncnn_vulkan/models"
413+
"${CMAKE_BINARY_DIR}/plugins/sr/sr_ncnn_vulkan/models"
414+
COMMAND ${CMAKE_COMMAND} -E copy_if_different
415+
"${CMAKE_CURRENT_SOURCE_DIR}/plugins/plugins_manifest.json"
416+
"${CMAKE_BINARY_DIR}/plugins/plugins_manifest.json"
417+
COMMENT "Deploying isolated sr_ncnn_vulkan plugin assets & manifest..."
418+
)
419+
420+
add_dependencies(QuickView sr_ncnn_vulkan)
421+
endif()
392422

393423
# ============================================================================
394424
# Unit Tests
@@ -424,10 +454,14 @@ add_executable(QuickViewTests
424454
QuickView/ArchiveVFS.cpp
425455
QuickView/exif.cpp
426456
QuickView/QuickViewETW.cpp
457+
QuickView/AppStrings.cpp
427458
QuickView/Plugin/PluginHost.cpp
428459
third_party/yyjson/yyjson.c
429460
QuickView/pch.cpp
430461
)
462+
if(TARGET sr_ncnn_vulkan)
463+
add_dependencies(QuickViewTests sr_ncnn_vulkan)
464+
endif()
431465
target_precompile_headers(QuickViewTests PRIVATE $<$<COMPILE_LANGUAGE:CXX>:pch.h>)
432466
target_link_libraries(QuickViewTests PRIVATE
433467
GTest::gtest_main
@@ -449,7 +483,6 @@ target_link_libraries(QuickViewTests PRIVATE
449483
)
450484
target_include_directories(QuickViewTests PRIVATE QuickView third_party/yyjson third_party/unrar-mini)
451485
target_compile_definitions(QuickViewTests PRIVATE UNICODE _UNICODE)
452-
add_dependencies(QuickViewTests sr_realesrgan_d3d11)
453486
add_test(NAME QuickViewTests COMMAND QuickViewTests)
454487

455488
# ============================================================================

‎QuickView/AnimationDecoder.h‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ class IAnimationDecoder {
2929

3030
/// Return true if the decoder produces valid partial frame updates (dirty rects)
3131
virtual bool SupportsDirtyRect() const { return false; }
32+
33+
/// Return true if this decoder holds AI super-resolved frames
34+
virtual bool IsSrDecoder() const { return false; }
3235
};
3336

3437
// Factory to spawn the appropriate decoder implementation

0 commit comments

Comments
 (0)