From f0d5ff528fc07b2c53e67e6e8fdf8aed33285751 Mon Sep 17 00:00:00 2001 From: MarcZX10 <67475268+MarcZX10@users.noreply.github.com> Date: Wed, 28 Oct 2026 11:06:20 +0000 Subject: [PATCH] feat(libSceAgcDriver): draw the system dialog in the presentation The presentation drew the system keyboard from SystemOverlayView and laid it out inside its own recording. It now asks SystemOverlayLayout for the system panel at the swapchain extent, which is already validated by then, and records whichever of the keyboard and the dialog is set through the same overlay pass and layout transitions. Presentations with neither set are unchanged. --- .../libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp b/core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp index 7890b588ab..7a57e5f9a1 100644 --- a/core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp +++ b/core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp @@ -3641,8 +3641,8 @@ bool VulkanDevice::present(std::uint32_t width, std::uint32_t height, bool opaqu plane = nullptr; } const auto planeSource = plane != nullptr ? OverlayPlaneSource(graphicsContext(), *plane) : PlaneSource{}; - const auto keyboardView = SystemOverlayView(); - const bool keyboard = keyboardView.has_value(); + const auto systemLayout = SystemOverlayLayout(state->extent); + const bool keyboard = systemLayout.has_value(); const bool drawsOver = overlay || keyboard || plane != nullptr; if (display != nullptr && resident == nullptr) { static_cast(DisplayBufferSize(*display)); @@ -3817,7 +3817,7 @@ bool VulkanDevice::present(std::uint32_t width, std::uint32_t height, bool opaqu } if (keyboard) { if (!state->keyboard) state->keyboard = std::make_unique(graphicsContext(), state->presentSlots.size()); - state->keyboard->RecordRects(commands, static_cast(&slot - state->presentSlots.data()), barrier.image, state->surfaceFormat, state->surfaceColorSpace, state->extent, drawn || plane != nullptr ? VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL : VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, overlay ? VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL : VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, LayOutKeyboard(*keyboardView, state->extent)); + state->keyboard->RecordRects(commands, static_cast(&slot - state->presentSlots.data()), barrier.image, state->surfaceFormat, state->surfaceColorSpace, state->extent, drawn || plane != nullptr ? VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL : VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, overlay ? VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL : VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, *systemLayout); } if (overlay) { if (!state->overlay) state->overlay = std::make_unique(graphicsContext(), state->presentSlots.size());