| 55 | } |
| 56 | |
| 57 | VkFramebuffer vulkan_renderer::create_vulkan_framebuffer(const VkRenderPass& vk_render_pass, const string& pass_debug_label [[maybe_unused]], |
| 58 | const optional<decltype(render_pipeline_description::viewport)>& dyn_viewport) { |
| 59 | const auto& vk_dev = (const vulkan_device&)cqueue.get_device(); |
| 60 | |
| 61 | vector<VkImageView> vk_attachments; |
| 62 | for (const auto& att : attachments_map) { |
| 63 | vk_attachments.emplace_back(att.second.image->get_underlying_vulkan_image_safe()->get_vulkan_image_view()); |
| 64 | if (att.second.resolve_image) { |
| 65 | vk_attachments.emplace_back(att.second.resolve_image->get_underlying_vulkan_image_safe()->get_vulkan_image_view()); |
| 66 | } |
| 67 | } |
| 68 | if (depth_attachment) { |
| 69 | vk_attachments.emplace_back(depth_attachment->image->get_underlying_vulkan_image_safe()->get_vulkan_image_view()); |
| 70 | } |
| 71 | |
| 72 | VkFramebufferCreateInfo framebuffer_create_info { |
| 73 | .sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO, |
| 74 | .pNext = nullptr, |
| 75 | .flags = 0, |
| 76 | .renderPass = vk_render_pass, |
| 77 | .attachmentCount = uint32_t(vk_attachments.size()), |
| 78 | .pAttachments = vk_attachments.data(), |
| 79 | .width = (dyn_viewport ? dyn_viewport->x : cur_pipeline->get_description(multi_view).viewport.x), |
| 80 | .height = (dyn_viewport ? dyn_viewport->y : cur_pipeline->get_description(multi_view).viewport.y), |
| 81 | .layers = 1, |
| 82 | }; |
| 83 | VkFramebuffer framebuffer { nullptr }; |
| 84 | VK_CALL_RET(vkCreateFramebuffer(vk_dev.device, &framebuffer_create_info, nullptr, &framebuffer), |
| 85 | "failed to create framebuffer", nullptr) |
| 86 | #if defined(FLOOR_DEBUG) |
| 87 | string debug_label = "framebuffer"; |
| 88 | if (!pass_debug_label.empty()) { |
| 89 | debug_label += ":" + pass_debug_label; |
| 90 | } |
| 91 | ((const vulkan_compute*)vk_dev.context)->set_vulkan_debug_label(vk_dev, VK_OBJECT_TYPE_FRAMEBUFFER, uint64_t(framebuffer), debug_label); |
| 92 | #endif |
| 93 | |
| 94 | if (framebuffer != nullptr) { |
| 95 | // need to store these and destroy them again once we're finished |
| 96 | framebuffers.emplace_back(framebuffer); |
| 97 | } |
| 98 | |
| 99 | return framebuffer; |
| 100 | } |
| 101 | |
| 102 | bool vulkan_renderer::create_cmd_buffer() { |
| 103 | const auto& vk_queue = (const vulkan_queue&)cqueue; |
nothing calls this directly
no test coverage detected