[GPU] Add FXAA post-processing [UI] Add FidelityFX FSR and CAS post-processing [UI] Add blue noise dithering from 10bpc to 8bpc [GPU] Apply the DC PWL gamma ramp closer to the spec, supporting fully white color [UI] Allow the GPU CP thread to present on the host directly, bypassing the UI thread OS paint event [UI] Allow variable refresh rate (or tearing) [UI] Present the newest frame (restart) on DXGI [UI] Replace GraphicsContext with a far more advanced Presenter with more coherent surface connection and UI overlay state management [UI] Connect presentation to windows via the Surface class, not native window handles [Vulkan] Switch to simpler Vulkan setup with no instance/device separation due to interdependencies and to pass fewer objects around [Vulkan] Lower the minimum required Vulkan version to 1.0 [UI/GPU] Various cleanup, mainly ComPtr usage [UI] Support per-monitor DPI awareness v2 on Windows [UI] DPI-scale Dear ImGui [UI] Replace the remaining non-detachable window delegates with unified window event and input listeners [UI] Allow listeners to safely destroy or close the window, and to register/unregister listeners without use-after-free and the ABA problem [UI] Explicit Z ordering of input listeners and UI overlays, top-down for input, bottom-up for drawing [UI] Add explicit window lifecycle phases [UI] Replace Window virtual functions with explicit desired state, its application, actual state, its feedback [UI] GTK: Apply the initial size to the drawing area [UI] Limit internal UI frame rate to that of the monitor [UI] Hide the cursor using a timer instead of polling due to no repeated UI thread paints with GPU CP thread presentation, and only within the window
79 lines
2.5 KiB
C++
79 lines
2.5 KiB
C++
/**
|
|
******************************************************************************
|
|
* Xenia : Xbox 360 Emulator Research Project *
|
|
******************************************************************************
|
|
* Copyright 2022 Ben Vanik. All rights reserved. *
|
|
* Released under the BSD license - see LICENSE in the root for more details. *
|
|
******************************************************************************
|
|
*/
|
|
|
|
#include "xenia/base/logging.h"
|
|
#include "xenia/emulator.h"
|
|
#include "xenia/kernel/kernel_flags.h"
|
|
#include "xenia/kernel/kernel_state.h"
|
|
#include "xenia/kernel/util/shim_utils.h"
|
|
#include "xenia/kernel/xam/xam_private.h"
|
|
#include "xenia/ui/imgui_dialog.h"
|
|
#include "xenia/ui/imgui_drawer.h"
|
|
#include "xenia/ui/window.h"
|
|
#include "xenia/ui/windowed_app_context.h"
|
|
#include "xenia/xbox.h"
|
|
|
|
namespace xe {
|
|
namespace kernel {
|
|
namespace xam {
|
|
|
|
extern std::atomic<int> xam_dialogs_shown_;
|
|
|
|
struct X_NUI_DEVICE_STATUS {
|
|
xe::be<uint32_t> unk0;
|
|
xe::be<uint32_t> unk1;
|
|
xe::be<uint32_t> unk2;
|
|
xe::be<uint32_t> status;
|
|
xe::be<uint32_t> unk4;
|
|
xe::be<uint32_t> unk5;
|
|
};
|
|
static_assert(sizeof(X_NUI_DEVICE_STATUS) == 24, "Size matters");
|
|
|
|
void XamNuiGetDeviceStatus_entry(pointer_t<X_NUI_DEVICE_STATUS> status_ptr) {
|
|
status_ptr.Zero();
|
|
status_ptr->status = 0; // Not connected.
|
|
}
|
|
DECLARE_XAM_EXPORT1(XamNuiGetDeviceStatus, kNone, kStub);
|
|
|
|
dword_result_t XamShowNuiTroubleshooterUI_entry(unknown_t unk1, unknown_t unk2,
|
|
unknown_t unk3) {
|
|
// unk1 is 0xFF - possibly user index?
|
|
// unk2, unk3 appear to always be zero.
|
|
|
|
if (cvars::headless) {
|
|
return 0;
|
|
}
|
|
|
|
const Emulator* emulator = kernel_state()->emulator();
|
|
ui::Window* display_window = emulator->display_window();
|
|
ui::ImGuiDrawer* imgui_drawer = emulator->imgui_drawer();
|
|
if (display_window && imgui_drawer) {
|
|
xe::threading::Fence fence;
|
|
if (display_window->app_context().CallInUIThreadSynchronous([&]() {
|
|
xe::ui::ImGuiDialog::ShowMessageBox(
|
|
imgui_drawer, "NUI Troubleshooter",
|
|
"The game has indicated there is a problem with NUI (Kinect).")
|
|
->Then(&fence);
|
|
})) {
|
|
++xam_dialogs_shown_;
|
|
fence.Wait();
|
|
--xam_dialogs_shown_;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
DECLARE_XAM_EXPORT1(XamShowNuiTroubleshooterUI, kNone, kStub);
|
|
|
|
} // namespace xam
|
|
} // namespace kernel
|
|
} // namespace xe
|
|
|
|
DECLARE_XAM_EMPTY_REGISTER_EXPORTS(NUI);
|