mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-09-05 19:08:12 +00:00
gpu: Xbox fixes for swapchain presentation
This commit is contained in:
@@ -6374,6 +6374,9 @@ static bool D3D12_INTERNAL_CreateSwapchain(
|
||||
SDL_SyncWindow(windowData->window);
|
||||
SDL_GetWindowSizeInPixels(windowData->window, &width, &height);
|
||||
|
||||
// Min swapchain image count is 2
|
||||
windowData->swapchainTextureCount = SDL_clamp(renderer->allowedFramesInFlight, 2, 3);
|
||||
|
||||
// Create the swapchain textures
|
||||
SDL_zero(createInfo);
|
||||
createInfo.type = SDL_GPU_TEXTURETYPE_2D;
|
||||
@@ -8691,26 +8694,6 @@ static SDL_GPUDevice *D3D12_CreateDevice(bool debugMode, bool preferLowPower, SD
|
||||
CHECK_D3D12_ERROR_AND_RETURN("Could not create D3D12Device", NULL);
|
||||
}
|
||||
|
||||
res = renderer->device->SetFrameIntervalX(
|
||||
NULL,
|
||||
D3D12XBOX_FRAME_INTERVAL_60_HZ,
|
||||
renderer->allowedFramesInFlight - 1,
|
||||
D3D12XBOX_FRAME_INTERVAL_FLAG_NONE);
|
||||
if (FAILED(res)) {
|
||||
D3D12_INTERNAL_DestroyRenderer(renderer);
|
||||
CHECK_D3D12_ERROR_AND_RETURN("Could not get set frame interval", NULL);
|
||||
}
|
||||
|
||||
res = renderer->device->ScheduleFrameEventX(
|
||||
D3D12XBOX_FRAME_EVENT_ORIGIN,
|
||||
0,
|
||||
NULL,
|
||||
D3D12XBOX_SCHEDULE_FRAME_EVENT_FLAG_NONE);
|
||||
if (FAILED(res)) {
|
||||
D3D12_INTERNAL_DestroyRenderer(renderer);
|
||||
CHECK_D3D12_ERROR_AND_RETURN("Could not schedule frame events", NULL);
|
||||
}
|
||||
|
||||
s_Device = renderer->device;
|
||||
}
|
||||
#else
|
||||
@@ -8980,6 +8963,28 @@ static SDL_GPUDevice *D3D12_CreateDevice(bool debugMode, bool preferLowPower, SD
|
||||
// Blit resources
|
||||
D3D12_INTERNAL_InitBlitResources(renderer);
|
||||
|
||||
#if (defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES))
|
||||
res = renderer->device->SetFrameIntervalX(
|
||||
NULL,
|
||||
D3D12XBOX_FRAME_INTERVAL_60_HZ,
|
||||
renderer->allowedFramesInFlight - 1,
|
||||
D3D12XBOX_FRAME_INTERVAL_FLAG_NONE);
|
||||
if (FAILED(res)) {
|
||||
D3D12_INTERNAL_DestroyRenderer(renderer);
|
||||
CHECK_D3D12_ERROR_AND_RETURN("Could not get set frame interval", NULL);
|
||||
}
|
||||
|
||||
res = renderer->device->ScheduleFrameEventX(
|
||||
D3D12XBOX_FRAME_EVENT_ORIGIN,
|
||||
0,
|
||||
NULL,
|
||||
D3D12XBOX_SCHEDULE_FRAME_EVENT_FLAG_NONE);
|
||||
if (FAILED(res)) {
|
||||
D3D12_INTERNAL_DestroyRenderer(renderer);
|
||||
CHECK_D3D12_ERROR_AND_RETURN("Could not schedule frame events", NULL);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Create the SDL_GPU Device
|
||||
result = (SDL_GPUDevice *)SDL_calloc(1, sizeof(SDL_GPUDevice));
|
||||
|
||||
|
Reference in New Issue
Block a user