# CoopAllTheThings Vulkan capture layer: a real implicit Vulkan layer the loader inserts at # vkCreateInstance, so it's in the chain before a game (that caches its present pointer at init) # can resolve vkQueuePresentKHR -- the reliable early-presence path the inline-hook vk_hook can't # get for immediate-init games. Ships at the bin root (registered for real games), with its JSON # manifest copied alongside (the manifest's library_path is relative). coop_require_submodule("Vulkan-Headers" "third_party/Vulkan-Headers/include/vulkan/vulkan.h") add_library(coop_vk_layer SHARED coop_vk_layer.cpp ${CMAKE_SOURCE_DIR}/hook/src/vk_capture.cpp # shared off-present-thread read-back (also used by vk_hook) ${CMAKE_SOURCE_DIR}/hook/src/debug_log.cpp) # logging used by the shared capture code target_include_directories(coop_vk_layer PRIVATE ${CMAKE_SOURCE_DIR}/hook/src # ipc_client.hpp (reused IPC client) ${CMAKE_SOURCE_DIR}/third_party/Vulkan-Headers/include) target_link_libraries(coop_vk_layer PRIVATE coop_common d3d11 dxgi) # Drop the manifest next to the built DLL so VK_LAYER_PATH / the registry can find it. add_custom_command(TARGET coop_vk_layer POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/coop_vk_layer.json $/coop_vk_layer.json)