# 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)

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 $<TARGET_FILE_DIR:coop_vk_layer>/coop_vk_layer.json)
