MCPcopy Create free account
hub / github.com/a2flo/floor / create_vulkan_framebuffer

Method create_vulkan_framebuffer

src/device/vulkan/vulkan_renderer.cpp:105–148  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

103}
104
105VkFramebuffer 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
150bool vulkan_renderer::create_cmd_buffer() {
151 const auto& vk_queue = (const vulkan_queue&)cqueue;

Callers

nothing calls this directly

Calls 6

get_deviceMethod · 0.80
set_vulkan_debug_labelFunction · 0.50
sizeMethod · 0.45
dataMethod · 0.45
emptyMethod · 0.45

Tested by

no test coverage detected