GPU: Revise swapchain acquisition (#11633)

---------

Co-authored-by: Lucas Murray <22484+lmurray@users.noreply.github.com>
This commit is contained in:
Evan Hemsley
2024-12-11 11:16:35 -08:00
committed by GitHub
parent bbd4eeb287
commit 3ee39f6c3f
9 changed files with 337 additions and 51 deletions

View File

@@ -2694,16 +2694,13 @@ bool SDL_AcquireGPUSwapchainTexture(
CommandBufferCommonHeader *commandBufferHeader = (CommandBufferCommonHeader *)command_buffer;
if (command_buffer == NULL) {
SDL_InvalidParamError("command_buffer");
return false;
return SDL_InvalidParamError("command_buffer");
}
if (window == NULL) {
SDL_InvalidParamError("window");
return false;
return SDL_InvalidParamError("window");
}
if (swapchain_texture == NULL) {
SDL_InvalidParamError("swapchain_texture");
return false;
return SDL_InvalidParamError("swapchain_texture");
}
if (COMMAND_BUFFER_DEVICE->debug_mode) {
@@ -2725,6 +2722,59 @@ bool SDL_AcquireGPUSwapchainTexture(
return result;
}
bool SDL_WaitForGPUSwapchain(
SDL_GPUDevice *device,
SDL_Window *window)
{
CHECK_DEVICE_MAGIC(device, false);
if (window == NULL) {
return SDL_InvalidParamError("window");
}
return device->WaitForSwapchain(
device->driverData,
window);
}
bool SDL_WaitAndAcquireGPUSwapchainTexture(
SDL_GPUCommandBuffer *command_buffer,
SDL_Window *window,
SDL_GPUTexture **swapchain_texture,
Uint32 *swapchain_texture_width,
Uint32 *swapchain_texture_height)
{
CommandBufferCommonHeader *commandBufferHeader = (CommandBufferCommonHeader *)command_buffer;
if (command_buffer == NULL) {
return SDL_InvalidParamError("command_buffer");
}
if (window == NULL) {
return SDL_InvalidParamError("window");
}
if (swapchain_texture == NULL) {
return SDL_InvalidParamError("swapchain_texture");
}
if (COMMAND_BUFFER_DEVICE->debug_mode) {
CHECK_COMMAND_BUFFER_RETURN_FALSE
CHECK_ANY_PASS_IN_PROGRESS("Cannot acquire a swapchain texture during a pass!", false)
}
bool result = COMMAND_BUFFER_DEVICE->WaitAndAcquireSwapchainTexture(
command_buffer,
window,
swapchain_texture,
swapchain_texture_width,
swapchain_texture_height);
if (*swapchain_texture != NULL){
commandBufferHeader->swapchain_texture_acquired = true;
}
return result;
}
bool SDL_SubmitGPUCommandBuffer(
SDL_GPUCommandBuffer *command_buffer)
{