#include "Mock.hpp" void lft_dbg_callback(lft::dbg::LogMessageSeverity severity, lft::dbg::LogMessageType type, const char *__restrict format, va_list args) { } std::unique_ptr create_mock_gpu() { auto instance = std::make_unique( "loft", "loft", std::vector({VK_KHR_SURFACE_EXTENSION_NAME}), std::vector(), lft_dbg_callback); volkLoadInstance(instance->instance()); return std::make_unique(instance.get(), std::nullopt); } ImageChain create_mock_image_chain( const Gpu* gpu, uint32_t num_images, VkExtent2D extent, VkFormat format ) { std::vector images(num_images); for(uint32_t i = 0; i < num_images; i++) { MemoryAllocationInfo memory_info = { .usage = MEMORY_USAGE_AUTO_PREFER_DEVICE }; ImageCreateInfo image_info = { .extent = extent, .format = format, .usage = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, .arrayLayers = 1, .mipLevels = 1, }; Image image = {}; gpu->memory()->create_image(&image_info, &memory_info, &image); ImageView view = {}; view = image.create_view(gpu, format, { .aspectMask = image_info.aspectMask, .baseMipLevel = 0, .levelCount = 1, .baseArrayLayer = 0, .layerCount = 1, }); images[i] = view; } return ImageChain(format, extent, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, images); } lft::rg::RenderTaskBuilder create_empty_task(const std::string& name) { return lft::rg::render_task( "task1", new EmptyContext, [](const lft::rg::TaskBuildInfo& info, EmptyContext* ctx) {}, [](const lft::rg::TaskRecordInfo& info, EmptyContext* ctx) {} ); }