[Windows] Fix Vulkan driver crash on sub-window minimization.
This commit is contained in:
parent
b89b1683d4
commit
0c27667124
5 changed files with 25 additions and 6 deletions
|
|
@ -6652,6 +6652,10 @@ RenderingDevice::DrawListID RenderingDeviceVulkan::draw_list_begin_for_screen(Di
|
|||
|
||||
VkCommandBuffer command_buffer = frames[frame].draw_command_buffer;
|
||||
|
||||
if (!context->window_is_valid_swapchain(p_screen)) {
|
||||
return INVALID_ID;
|
||||
}
|
||||
|
||||
Size2i size = Size2i(context->window_get_width(p_screen), context->window_get_height(p_screen));
|
||||
|
||||
_draw_list_allocate(Rect2i(Vector2i(), size), 0, 0);
|
||||
|
|
|
|||
|
|
@ -1348,6 +1348,12 @@ int VulkanContext::window_get_height(DisplayServer::WindowID p_window) {
|
|||
return windows[p_window].height;
|
||||
}
|
||||
|
||||
bool VulkanContext::window_is_valid_swapchain(DisplayServer::WindowID p_window) {
|
||||
ERR_FAIL_COND_V(!windows.has(p_window), false);
|
||||
Window *w = &windows[p_window];
|
||||
return w->swapchain_image_resources != VK_NULL_HANDLE;
|
||||
}
|
||||
|
||||
VkRenderPass VulkanContext::window_get_render_pass(DisplayServer::WindowID p_window) {
|
||||
ERR_FAIL_COND_V(!windows.has(p_window), VK_NULL_HANDLE);
|
||||
Window *w = &windows[p_window];
|
||||
|
|
@ -1360,7 +1366,11 @@ VkFramebuffer VulkanContext::window_get_framebuffer(DisplayServer::WindowID p_wi
|
|||
ERR_FAIL_COND_V(!buffers_prepared, VK_NULL_HANDLE);
|
||||
Window *w = &windows[p_window];
|
||||
//vulkan use of currentbuffer
|
||||
return w->swapchain_image_resources[w->current_buffer].framebuffer;
|
||||
if (w->swapchain_image_resources != VK_NULL_HANDLE) {
|
||||
return w->swapchain_image_resources[w->current_buffer].framebuffer;
|
||||
} else {
|
||||
return VK_NULL_HANDLE;
|
||||
}
|
||||
}
|
||||
|
||||
void VulkanContext::window_destroy(DisplayServer::WindowID p_window_id) {
|
||||
|
|
|
|||
|
|
@ -266,6 +266,7 @@ public:
|
|||
void window_resize(DisplayServer::WindowID p_window_id, int p_width, int p_height);
|
||||
int window_get_width(DisplayServer::WindowID p_window = 0);
|
||||
int window_get_height(DisplayServer::WindowID p_window = 0);
|
||||
bool window_is_valid_swapchain(DisplayServer::WindowID p_window = 0);
|
||||
void window_destroy(DisplayServer::WindowID p_window_id);
|
||||
VkFramebuffer window_get_framebuffer(DisplayServer::WindowID p_window = 0);
|
||||
VkRenderPass window_get_render_pass(DisplayServer::WindowID p_window = 0);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue