| 103 | } |
| 104 | |
| 105 | VkFramebuffer vulkan_renderer::create_vulkan_framebuffer(const VkRenderPass& vk_render_pass, const std::string& pass_debug_label [[maybe_unused]], |
| 106 | const std::optional<decltype(render_pipeline_description::viewport)>& dyn_viewport) { |
| 107 | const auto& vk_dev = (const vulkan_device&)cqueue.get_device(); |
| 108 | |
| 109 | std::vector<VkImageView> vk_attachments; |
| 110 | for (auto&& att : attachments_map) { |
| 111 | vk_attachments.emplace_back(att.second.image->get_underlying_vulkan_image_safe()->get_vulkan_image_view()); |
| 112 | if (att.second.resolve_image) { |
| 113 | vk_attachments.emplace_back(att.second.resolve_image->get_underlying_vulkan_image_safe()->get_vulkan_image_view()); |
| 114 | } |
| 115 | } |
| 116 | if (depth_attachment) { |
| 117 | vk_attachments.emplace_back(depth_attachment->image->get_underlying_vulkan_image_safe()->get_vulkan_image_view()); |
| 118 | } |
| 119 | |
| 120 | VkFramebufferCreateInfo framebuffer_create_info { |
| 121 | .sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO, |
| 122 | .pNext = nullptr, |
| 123 | .flags = 0, |
| 124 | .renderPass = vk_render_pass, |
| 125 | .attachmentCount = uint32_t(vk_attachments.size()), |
| 126 | .pAttachments = vk_attachments.data(), |
| 127 | .width = (dyn_viewport ? dyn_viewport->x : cur_pipeline->get_description(multi_view).viewport.x), |
| 128 | .height = (dyn_viewport ? dyn_viewport->y : cur_pipeline->get_description(multi_view).viewport.y), |
| 129 | .layers = 1, |
| 130 | }; |
| 131 | VkFramebuffer framebuffer { nullptr }; |
| 132 | VK_CALL_RET(vkCreateFramebuffer(vk_dev.device, &framebuffer_create_info, nullptr, &framebuffer), |
| 133 | "failed to create framebuffer", nullptr) |
| 134 | #if defined(FLOOR_DEBUG) |
| 135 | std::string debug_label = "framebuffer"; |
| 136 | if (!pass_debug_label.empty()) { |
| 137 | debug_label += ":" + pass_debug_label; |
| 138 | } |
| 139 | set_vulkan_debug_label(vk_dev, VK_OBJECT_TYPE_FRAMEBUFFER, uint64_t(framebuffer), debug_label); |
| 140 | #endif |
| 141 | |
| 142 | if (framebuffer != nullptr) { |
| 143 | // need to store these and destroy them again once we're finished |
| 144 | framebuffers.emplace_back(framebuffer); |
| 145 | } |
| 146 | |
| 147 | return framebuffer; |
| 148 | } |
| 149 | |
| 150 | bool vulkan_renderer::create_cmd_buffer() { |
| 151 | const auto& vk_queue = (const vulkan_queue&)cqueue; |
nothing calls this directly
no test coverage detected