[D3D12] Persistent shader and PSO storage
This commit is contained in:
@@ -245,9 +245,9 @@ bool EmulatorWindow::Initialize() {
|
||||
}
|
||||
gpu_menu->AddChild(MenuItem::Create(MenuItem::Type::kSeparator));
|
||||
{
|
||||
gpu_menu->AddChild(
|
||||
MenuItem::Create(MenuItem::Type::kString, L"&Clear Caches", L"F5",
|
||||
std::bind(&EmulatorWindow::GpuClearCaches, this)));
|
||||
gpu_menu->AddChild(MenuItem::Create(
|
||||
MenuItem::Type::kString, L"&Clear Runtime Caches", L"F5",
|
||||
std::bind(&EmulatorWindow::GpuClearCaches, this)));
|
||||
}
|
||||
main_menu->AddChild(std::move(gpu_menu));
|
||||
|
||||
@@ -454,8 +454,20 @@ void EmulatorWindow::UpdateTitle() {
|
||||
title += xe::format_string(L" (@%.2fx)", Clock::guest_time_scalar());
|
||||
}
|
||||
|
||||
if (initializing_shader_storage_) {
|
||||
title += L" (Preloading shaders\u2026)";
|
||||
}
|
||||
|
||||
window_->set_title(title);
|
||||
}
|
||||
|
||||
void EmulatorWindow::SetInitializingShaderStorage(bool initializing) {
|
||||
if (initializing_shader_storage_ == initializing) {
|
||||
return;
|
||||
}
|
||||
initializing_shader_storage_ = initializing;
|
||||
UpdateTitle();
|
||||
}
|
||||
|
||||
} // namespace app
|
||||
} // namespace xe
|
||||
|
||||
@@ -37,6 +37,7 @@ class EmulatorWindow {
|
||||
|
||||
void UpdateTitle();
|
||||
void ToggleFullscreen();
|
||||
void SetInitializingShaderStorage(bool initializing);
|
||||
|
||||
private:
|
||||
explicit EmulatorWindow(Emulator* emulator);
|
||||
@@ -63,6 +64,7 @@ class EmulatorWindow {
|
||||
std::unique_ptr<ui::Window> window_;
|
||||
std::wstring base_title_;
|
||||
uint64_t cursor_hide_time_ = 0;
|
||||
bool initializing_shader_storage_ = false;
|
||||
};
|
||||
|
||||
} // namespace app
|
||||
|
||||
@@ -243,7 +243,7 @@ int xenia_main(const std::vector<std::wstring>& args) {
|
||||
}
|
||||
|
||||
// Create the emulator but don't initialize so we can setup the window.
|
||||
auto emulator = std::make_unique<Emulator>(L"", content_root);
|
||||
auto emulator = std::make_unique<Emulator>(L"", storage_root, content_root);
|
||||
|
||||
// Main emulator display window.
|
||||
auto emulator_window = EmulatorWindow::Create(emulator.get());
|
||||
@@ -331,6 +331,11 @@ int xenia_main(const std::vector<std::wstring>& args) {
|
||||
evt->Set();
|
||||
});
|
||||
|
||||
emulator->on_shader_storage_initialization.AddListener(
|
||||
[&](bool initializing) {
|
||||
emulator_window->SetInitializingShaderStorage(initializing);
|
||||
});
|
||||
|
||||
emulator->on_terminate.AddListener([&]() {
|
||||
if (cvars::discord) {
|
||||
discord::DiscordPresence::NotPlaying();
|
||||
|
||||
Reference in New Issue
Block a user