Skip to content
This repository was archived by the owner on Dec 11, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions src/refresh/vkpt/draw.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ static VkPipelineLayout pipeline_layout_final_blit;
static VkRenderPass render_pass_stretch_pic;
static VkPipeline pipeline_stretch_pic;
static VkPipeline pipeline_final_blit;
static VkFramebuffer framebuffer_stretch_pic[MAX_SWAPCHAIN_IMAGES];
static VkFramebuffer* framebuffer_stretch_pic = NULL;
static BufferResource_t buf_stretch_pic_queue[MAX_FRAMES_IN_FLIGHT];
static VkDescriptorSetLayout desc_set_layout_sbo;
static VkDescriptorPool desc_pool_sbo;
Expand Down Expand Up @@ -316,6 +316,9 @@ vkpt_draw_destroy_pipelines()
for(int i = 0; i < qvk.num_swap_chain_images; i++) {
vkDestroyFramebuffer(qvk.device, framebuffer_stretch_pic[i], NULL);
}
free(framebuffer_stretch_pic);
framebuffer_stretch_pic = NULL;

return VK_SUCCESS;
}

Expand Down Expand Up @@ -465,7 +468,7 @@ vkpt_draw_create_pipelines()
_VK(vkCreateGraphicsPipelines(qvk.device, VK_NULL_HANDLE, 1, &pipeline_info, NULL, &pipeline_final_blit));
ATTACH_LABEL_VARIABLE(pipeline_final_blit, PIPELINE);


framebuffer_stretch_pic = malloc(qvk.num_swap_chain_images * sizeof(*framebuffer_stretch_pic));
for(int i = 0; i < qvk.num_swap_chain_images; i++) {
VkImageView attachments[] = {
qvk.swap_chain_image_views[i]
Expand Down
20 changes: 17 additions & 3 deletions src/refresh/vkpt/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -642,11 +642,11 @@ out:;
}

vkGetSwapchainImagesKHR(qvk.device, qvk.swap_chain, &qvk.num_swap_chain_images, NULL);
//qvk.swap_chain_images = malloc(qvk.num_swap_chain_images * sizeof(*qvk.swap_chain_images));
assert(qvk.num_swap_chain_images < MAX_SWAPCHAIN_IMAGES);
assert(qvk.num_swap_chain_images);
qvk.swap_chain_images = malloc(qvk.num_swap_chain_images * sizeof(*qvk.swap_chain_images));
vkGetSwapchainImagesKHR(qvk.device, qvk.swap_chain, &qvk.num_swap_chain_images, qvk.swap_chain_images);

//qvk.swap_chain_image_views = malloc(qvk.num_swap_chain_images * sizeof(*qvk.swap_chain_image_views));
qvk.swap_chain_image_views = malloc(qvk.num_swap_chain_images * sizeof(*qvk.swap_chain_image_views));
for(int i = 0; i < qvk.num_swap_chain_images; i++) {
VkImageViewCreateInfo img_create_info = {
.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
Expand All @@ -672,6 +672,14 @@ out:;

if(vkCreateImageView(qvk.device, &img_create_info, NULL, qvk.swap_chain_image_views + i) != VK_SUCCESS) {
Com_EPrintf("error creating image view!");

free(qvk.swap_chain_image_views);
qvk.swap_chain_image_views = NULL;

free(qvk.swap_chain_images);
qvk.swap_chain_images = NULL;

qvk.num_swap_chain_images = 0;
return 1;
}
}
Expand Down Expand Up @@ -1495,6 +1503,12 @@ destroy_swapchain()
vkDestroyImageView (qvk.device, qvk.swap_chain_image_views[i], NULL);
qvk.swap_chain_image_views[i] = VK_NULL_HANDLE;
}
free(qvk.swap_chain_image_views);
qvk.swap_chain_image_views = NULL;

free(qvk.swap_chain_images);
qvk.swap_chain_images = NULL;

qvk.num_swap_chain_images = 0;

vkDestroySwapchainKHR(qvk.device, qvk.swap_chain, NULL);
Expand Down
5 changes: 2 additions & 3 deletions src/refresh/vkpt/vkpt.h
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,6 @@ enum QVK_SHADER_MODULES {
};

#define MAX_FRAMES_IN_FLIGHT 2
#define MAX_SWAPCHAIN_IMAGES 4

typedef struct cmd_buf_group_s {
uint32_t count_per_frame;
Expand Down Expand Up @@ -189,8 +188,8 @@ typedef struct QVK_s {
uint32_t gpu_slice_width;
uint32_t gpu_slice_width_prev;
uint32_t num_swap_chain_images;
VkImage swap_chain_images[MAX_SWAPCHAIN_IMAGES];
VkImageView swap_chain_image_views[MAX_SWAPCHAIN_IMAGES];
VkImage* swap_chain_images;
VkImageView* swap_chain_image_views;

qboolean use_khr_ray_tracing;
qboolean use_ray_query;
Expand Down