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

Method create_vulkan_framebuffer

graphics/vulkan/vulkan_renderer.cpp:57–100  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

55}
56
57VkFramebuffer 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
102bool vulkan_renderer::create_cmd_buffer() {
103 const auto& vk_queue = (const vulkan_queue&)cqueue;

Callers

nothing calls this directly

Calls 6

get_deviceMethod · 0.80
sizeMethod · 0.45
dataMethod · 0.45
emptyMethod · 0.45

Tested by

no test coverage detected