mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-09-06 03:18:13 +00:00
Fixed crash if out of memory in the Vulkan GPU driver
(cherry picked from commit cd95152b2c
)
This commit is contained in:
@@ -4818,7 +4818,7 @@ static Uint32 VULKAN_INTERNAL_CreateSwapchain(
|
|||||||
|
|
||||||
windowData->inFlightFences[i] = NULL;
|
windowData->inFlightFences[i] = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
windowData->renderFinishedSemaphore = SDL_malloc(
|
windowData->renderFinishedSemaphore = SDL_malloc(
|
||||||
sizeof(VkSemaphore) * windowData->imageCount);
|
sizeof(VkSemaphore) * windowData->imageCount);
|
||||||
for (i = 0; i < windowData->imageCount; i += 1) {
|
for (i = 0; i < windowData->imageCount; i += 1) {
|
||||||
@@ -11609,7 +11609,7 @@ static bool VULKAN_PrepareDriver(SDL_VideoDevice *_this)
|
|||||||
{
|
{
|
||||||
// Set up dummy VulkanRenderer
|
// Set up dummy VulkanRenderer
|
||||||
VulkanRenderer *renderer;
|
VulkanRenderer *renderer;
|
||||||
Uint8 result;
|
bool result = false;
|
||||||
|
|
||||||
if (_this->Vulkan_CreateSurface == NULL) {
|
if (_this->Vulkan_CreateSurface == NULL) {
|
||||||
return false;
|
return false;
|
||||||
@@ -11619,16 +11619,16 @@ static bool VULKAN_PrepareDriver(SDL_VideoDevice *_this)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
renderer = (VulkanRenderer *)SDL_malloc(sizeof(VulkanRenderer));
|
renderer = (VulkanRenderer *)SDL_calloc(1, sizeof(*renderer));
|
||||||
SDL_memset(renderer, '\0', sizeof(VulkanRenderer));
|
if (renderer) {
|
||||||
|
result = VULKAN_INTERNAL_PrepareVulkan(renderer);
|
||||||
result = VULKAN_INTERNAL_PrepareVulkan(renderer);
|
if (result) {
|
||||||
|
renderer->vkDestroyInstance(renderer->instance, NULL);
|
||||||
if (result) {
|
}
|
||||||
renderer->vkDestroyInstance(renderer->instance, NULL);
|
SDL_free(renderer);
|
||||||
}
|
}
|
||||||
SDL_free(renderer);
|
|
||||||
SDL_Vulkan_UnloadLibrary();
|
SDL_Vulkan_UnloadLibrary();
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -11644,8 +11644,12 @@ static SDL_GPUDevice *VULKAN_CreateDevice(bool debugMode, bool preferLowPower, S
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
renderer = (VulkanRenderer *)SDL_malloc(sizeof(VulkanRenderer));
|
renderer = (VulkanRenderer *)SDL_calloc(1, sizeof(*renderer));
|
||||||
SDL_memset(renderer, '\0', sizeof(VulkanRenderer));
|
if (!renderer) {
|
||||||
|
SDL_Vulkan_UnloadLibrary();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
renderer->debugMode = debugMode;
|
renderer->debugMode = debugMode;
|
||||||
renderer->preferLowPower = preferLowPower;
|
renderer->preferLowPower = preferLowPower;
|
||||||
renderer->allowedFramesInFlight = 2;
|
renderer->allowedFramesInFlight = 2;
|
||||||
|
Reference in New Issue
Block a user