|
@@ -370,7 +370,7 @@ static bool createImageView(
|
|
|
bool initVulkanSwapchainImages(
|
|
|
VulkanSwapchainImages* si, VkDevice d, VkSwapchainKHR sc, VkFormat format) {
|
|
|
VK_ASSERT(vkGetSwapchainImagesKHR(d, sc, &si->amount, nullptr));
|
|
|
- si->images = coreAllocate(sizeof(VkImage) * si->amount);
|
|
|
+ si->images = coreZeroAllocate(sizeof(VkImage) * si->amount);
|
|
|
si->imageViews = coreZeroAllocate(sizeof(VkImageView) * si->amount);
|
|
|
VK_ASSERT(vkGetSwapchainImagesKHR(d, sc, &si->amount, si->images));
|
|
|
for(u32 x = 0; x < si->amount; x++) {
|
|
@@ -382,7 +382,7 @@ bool initVulkanSwapchainImages(
|
|
|
}
|
|
|
|
|
|
void destroyVulkanSwapchainImages(VulkanSwapchainImages* si, VkDevice d) {
|
|
|
- if(d == VK_NULL_HANDLE) {
|
|
|
+ if(d == VK_NULL_HANDLE || si == nullptr) {
|
|
|
return;
|
|
|
}
|
|
|
for(size_t x = 0; x < si->amount; x++) {
|
|
@@ -452,6 +452,36 @@ void destroyVulkanPipelineLayout(VkPipelineLayout pl, VkDevice d) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+bool initVulkanFramebuffers(
|
|
|
+ VkFramebuffer** f, VulkanSwapchainImages* si, VkDevice d, VkRenderPass rp,
|
|
|
+ u32 width, u32 height) {
|
|
|
+ *f = coreZeroAllocate(sizeof(VkFramebuffer) * si->amount);
|
|
|
+ for(u32 i = 0; i < si->amount; i++) {
|
|
|
+ VkFramebufferCreateInfo info = {
|
|
|
+ .sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,
|
|
|
+ .renderPass = rp,
|
|
|
+ .attachmentCount = 1,
|
|
|
+ .pAttachments = si->imageViews + i,
|
|
|
+ .width = width,
|
|
|
+ .height = height,
|
|
|
+ .layers = 1};
|
|
|
+ VK_ASSERT(vkCreateFramebuffer(d, &info, nullptr, (*f) + i));
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+void destroyVulkanFramebuffers(VkFramebuffer** f, u32 amount, VkDevice d) {
|
|
|
+ if(f != nullptr) {
|
|
|
+ if(d != VK_NULL_HANDLE && *f != nullptr) {
|
|
|
+ for(u32 i = 0; i < amount; i++) {
|
|
|
+ vkDestroyFramebuffer(d, (*f)[i], nullptr);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ coreFree(*f);
|
|
|
+ *f = nullptr;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
/*static bool initCommandBuffers() {
|
|
|
VkCommandPoolCreateInfo info = {
|
|
|
.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO,
|
|
@@ -471,40 +501,13 @@ void destroyVulkanPipelineLayout(VkPipelineLayout pl, VkDevice d) {
|
|
|
}
|
|
|
|
|
|
static void destroyCommandBuffers() {
|
|
|
- if(vk.swapchain.commandPool != VK_NULL_HANDLE && vk.swapchain.amount > 0) {
|
|
|
- vkFreeCommandBuffers(
|
|
|
- vk.device.logical, vk.swapchain.commandPool, vk.swapchain.amount,
|
|
|
- vk.swapchain.commandsBuffers);
|
|
|
+ if(vk.swapchain.commandPool != VK_NULL_HANDLE && vk.swapchain.amount >
|
|
|
+0) { vkFreeCommandBuffers( vk.device.logical, vk.swapchain.commandPool,
|
|
|
+vk.swapchain.amount, vk.swapchain.commandsBuffers);
|
|
|
}
|
|
|
coreFree(vk.swapchain.commandsBuffers);
|
|
|
- vkDestroyCommandPool(vk.device.logical, vk.swapchain.commandPool, nullptr);
|
|
|
-}
|
|
|
-
|
|
|
-static bool initFramebuffers() {
|
|
|
- vk.swapchain.framebuffers =
|
|
|
- coreAllocate(sizeof(VkFramebuffer) * vk.swapchain.amount);
|
|
|
- for(u32 i = 0; i < vk.swapchain.amount; i++) {
|
|
|
- VkFramebufferCreateInfo info = {
|
|
|
- .sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,
|
|
|
- .renderPass = vk.renderPass,
|
|
|
- .attachmentCount = 1,
|
|
|
- .pAttachments = vk.swapchain.imageViews + i,
|
|
|
- .width = vk.width,
|
|
|
- .height = vk.height,
|
|
|
- .layers = 1};
|
|
|
- VK_ASSERT(vkCreateFramebuffer(
|
|
|
- vk.device.logical, &info, nullptr, vk.swapchain.framebuffers + i));
|
|
|
- }
|
|
|
- printf("%u\n", vk.swapchain.amount);
|
|
|
- return false;
|
|
|
-}
|
|
|
-
|
|
|
-static void destroyFramebuffers() {
|
|
|
- for(u32 i = 0; i < vk.swapchain.amount; i++) {
|
|
|
- vkDestroyFramebuffer(
|
|
|
- vk.device.logical, vk.swapchain.framebuffers[i], nullptr);
|
|
|
- }
|
|
|
- coreFree(vk.swapchain.framebuffers);
|
|
|
+ vkDestroyCommandPool(vk.device.logical, vk.swapchain.commandPool,
|
|
|
+nullptr);
|
|
|
}
|
|
|
|
|
|
static bool fillCommandBuffer(u32 index) {
|
|
@@ -518,7 +521,8 @@ static bool fillCommandBuffer(u32 index) {
|
|
|
// .sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
|
|
|
// .renderPass = vk.renderPass,
|
|
|
// .framebuffer = vk.swapchain.framebuffers[index],
|
|
|
- // .renderArea = {.offset = {0, 0}, .extent = {vk.width, vk.height}},
|
|
|
+ // .renderArea = {.offset = {0, 0}, .extent = {vk.width,
|
|
|
+vk.height}},
|
|
|
// .clearValueCount = 1,
|
|
|
// .pClearValues = &v};
|
|
|
// vkCmdBeginRenderPass(vk.swapchain.commandsBuffers[index], &rInfo,
|