limit max frames in flight
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
a3249404bc
commit
42d62d423a
|
@ -80,6 +80,7 @@ typedef struct VulkanExtensions
|
||||||
#define UBO_BUFFER_SIZE 16777216 /* 16MB */
|
#define UBO_BUFFER_SIZE 16777216 /* 16MB */
|
||||||
#define MAX_UBO_SECTION_SIZE 4096 /* 4KB */
|
#define MAX_UBO_SECTION_SIZE 4096 /* 4KB */
|
||||||
#define DESCRIPTOR_POOL_STARTING_SIZE 128
|
#define DESCRIPTOR_POOL_STARTING_SIZE 128
|
||||||
|
#define MAX_FRAMES_IN_FLIGHT 3
|
||||||
#define WINDOW_DATA "Refresh_VulkanWindowData"
|
#define WINDOW_DATA "Refresh_VulkanWindowData"
|
||||||
|
|
||||||
#define IDENTITY_SWIZZLE \
|
#define IDENTITY_SWIZZLE \
|
||||||
|
@ -875,6 +876,8 @@ typedef struct VulkanSwapchainData
|
||||||
/* Synchronization primitives */
|
/* Synchronization primitives */
|
||||||
VkSemaphore imageAvailableSemaphore;
|
VkSemaphore imageAvailableSemaphore;
|
||||||
VkSemaphore renderFinishedSemaphore;
|
VkSemaphore renderFinishedSemaphore;
|
||||||
|
|
||||||
|
uint32_t submissionsInFlight;
|
||||||
} VulkanSwapchainData;
|
} VulkanSwapchainData;
|
||||||
|
|
||||||
typedef struct WindowData
|
typedef struct WindowData
|
||||||
|
@ -4639,6 +4642,7 @@ static uint8_t VULKAN_INTERNAL_CreateSwapchain(
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
|
||||||
swapchainData = SDL_malloc(sizeof(VulkanSwapchainData));
|
swapchainData = SDL_malloc(sizeof(VulkanSwapchainData));
|
||||||
|
swapchainData->submissionsInFlight = 0;
|
||||||
|
|
||||||
/* Each swapchain must have its own surface. */
|
/* Each swapchain must have its own surface. */
|
||||||
|
|
||||||
|
@ -9616,6 +9620,12 @@ static Refresh_Texture* VULKAN_AcquireSwapchainTexture(
|
||||||
|
|
||||||
swapchainData = windowData->swapchainData;
|
swapchainData = windowData->swapchainData;
|
||||||
|
|
||||||
|
/* Drop frames if too many submissions in flight */
|
||||||
|
if (swapchainData->submissionsInFlight >= MAX_FRAMES_IN_FLIGHT)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* Window is claimed but swapchain is invalid! */
|
/* Window is claimed but swapchain is invalid! */
|
||||||
if (swapchainData == NULL)
|
if (swapchainData == NULL)
|
||||||
{
|
{
|
||||||
|
@ -10057,6 +10067,11 @@ static void VULKAN_INTERNAL_CleanCommandBuffer(
|
||||||
|
|
||||||
/* Reset presentation data */
|
/* Reset presentation data */
|
||||||
|
|
||||||
|
for (i = 0; i < commandBuffer->presentDataCount; i += 1)
|
||||||
|
{
|
||||||
|
commandBuffer->presentDatas[i].windowData->swapchainData->submissionsInFlight -= 1;
|
||||||
|
}
|
||||||
|
|
||||||
commandBuffer->presentDataCount = 0;
|
commandBuffer->presentDataCount = 0;
|
||||||
commandBuffer->waitSemaphoreCount = 0;
|
commandBuffer->waitSemaphoreCount = 0;
|
||||||
commandBuffer->signalSemaphoreCount = 0;
|
commandBuffer->signalSemaphoreCount = 0;
|
||||||
|
@ -10255,6 +10270,10 @@ static void VULKAN_Submit(
|
||||||
presentData->windowData
|
presentData->windowData
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
presentData->windowData->swapchainData->submissionsInFlight += 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check if we can perform any cleanups */
|
/* Check if we can perform any cleanups */
|
||||||
|
|
Loading…
Reference in New Issue