early-access version 2465

main
pineappleEA 2022-02-02 05:57:17 +01:00
parent 8de64a0df5
commit 09a56f2db3
9 changed files with 55 additions and 37 deletions

View File

@ -1,7 +1,7 @@
yuzu emulator early access
=============
This is the source code for early-access 2462.
This is the source code for early-access 2465.
## Legal Notice

View File

@ -65,16 +65,20 @@ private:
#ifdef ARCHITECTURE_x86_64
std::unique_ptr<WallClock> CreateBestMatchingClock(u32 emulated_cpu_frequency,
u32 emulated_clock_frequency) {
std::unique_ptr<WallClock> CreateBestMatchingClock(u64 emulated_cpu_frequency,
u64 emulated_clock_frequency) {
const auto& caps = GetCPUCaps();
u64 rtsc_frequency = 0;
if (caps.invariant_tsc) {
rtsc_frequency = EstimateRDTSCFrequency();
}
// Fallback to StandardWallClock if rtsc period is higher than a nano second
if (rtsc_frequency <= 1000000000) {
// Fallback to StandardWallClock if the hardware TSC does not have the precision greater than:
// - A nanosecond
// - The emulated CPU frequency
// - The emulated clock counter frequency (CNTFRQ)
if (rtsc_frequency <= WallClock::NS_RATIO || rtsc_frequency <= emulated_cpu_frequency ||
rtsc_frequency <= emulated_clock_frequency) {
return std::make_unique<StandardWallClock>(emulated_cpu_frequency,
emulated_clock_frequency);
} else {
@ -85,8 +89,8 @@ std::unique_ptr<WallClock> CreateBestMatchingClock(u32 emulated_cpu_frequency,
#else
std::unique_ptr<WallClock> CreateBestMatchingClock(u32 emulated_cpu_frequency,
u32 emulated_clock_frequency) {
std::unique_ptr<WallClock> CreateBestMatchingClock(u64 emulated_cpu_frequency,
u64 emulated_clock_frequency) {
return std::make_unique<StandardWallClock>(emulated_cpu_frequency, emulated_clock_frequency);
}

View File

@ -13,6 +13,10 @@ namespace Common {
class WallClock {
public:
static constexpr u64 NS_RATIO = 1'000'000'000;
static constexpr u64 US_RATIO = 1'000'000;
static constexpr u64 MS_RATIO = 1'000;
virtual ~WallClock() = default;
/// Returns current wall time in nanoseconds
@ -49,7 +53,7 @@ private:
bool is_native;
};
[[nodiscard]] std::unique_ptr<WallClock> CreateBestMatchingClock(u32 emulated_cpu_frequency,
u32 emulated_clock_frequency);
[[nodiscard]] std::unique_ptr<WallClock> CreateBestMatchingClock(u64 emulated_cpu_frequency,
u64 emulated_clock_frequency);
} // namespace Common

View File

@ -47,9 +47,9 @@ NativeClock::NativeClock(u64 emulated_cpu_frequency_, u64 emulated_clock_frequen
_mm_mfence();
time_point.inner.last_measure = __rdtsc();
time_point.inner.accumulated_ticks = 0U;
ns_rtsc_factor = GetFixedPoint64Factor(1000000000, rtsc_frequency);
us_rtsc_factor = GetFixedPoint64Factor(1000000, rtsc_frequency);
ms_rtsc_factor = GetFixedPoint64Factor(1000, rtsc_frequency);
ns_rtsc_factor = GetFixedPoint64Factor(NS_RATIO, rtsc_frequency);
us_rtsc_factor = GetFixedPoint64Factor(US_RATIO, rtsc_frequency);
ms_rtsc_factor = GetFixedPoint64Factor(MS_RATIO, rtsc_frequency);
clock_rtsc_factor = GetFixedPoint64Factor(emulated_clock_frequency, rtsc_frequency);
cpu_rtsc_factor = GetFixedPoint64Factor(emulated_cpu_frequency, rtsc_frequency);
}

View File

@ -217,7 +217,7 @@ private:
int index) const;
mutable std::mutex mutex;
mutable std::mutex mutex_callback;
mutable std::recursive_mutex mutex_callback;
bool configuring{false};
const std::string input_engine;
int last_callback_key = 0;

View File

@ -109,7 +109,7 @@ void ConfigureDialog::ApplyConfiguration() {
ui_tab->ApplyConfiguration();
system_tab->ApplyConfiguration();
profile_tab->ApplyConfiguration();
filesystem_tab->applyConfiguration();
filesystem_tab->ApplyConfiguration();
input_tab->ApplyConfiguration();
hotkeys_tab->ApplyConfiguration(registry);
cpu_tab->ApplyConfiguration();

View File

@ -14,7 +14,7 @@
ConfigureFilesystem::ConfigureFilesystem(QWidget* parent)
: QWidget(parent), ui(std::make_unique<Ui::ConfigureFilesystem>()) {
ui->setupUi(this);
this->setConfiguration();
SetConfiguration();
connect(ui->nand_directory_button, &QToolButton::pressed, this,
[this] { SetDirectory(DirectoryTarget::NAND, ui->nand_directory_edit); });
@ -38,7 +38,15 @@ ConfigureFilesystem::ConfigureFilesystem(QWidget* parent)
ConfigureFilesystem::~ConfigureFilesystem() = default;
void ConfigureFilesystem::setConfiguration() {
void ConfigureFilesystem::changeEvent(QEvent* event) {
if (event->type() == QEvent::LanguageChange) {
RetranslateUI();
}
QWidget::changeEvent(event);
}
void ConfigureFilesystem::SetConfiguration() {
ui->nand_directory_edit->setText(
QString::fromStdString(Common::FS::GetYuzuPathString(Common::FS::YuzuPath::NANDDir)));
ui->sdmc_directory_edit->setText(
@ -60,7 +68,7 @@ void ConfigureFilesystem::setConfiguration() {
UpdateEnabledControls();
}
void ConfigureFilesystem::applyConfiguration() {
void ConfigureFilesystem::ApplyConfiguration() {
Common::FS::SetYuzuPath(Common::FS::YuzuPath::NANDDir,
ui->nand_directory_edit->text().toStdString());
Common::FS::SetYuzuPath(Common::FS::YuzuPath::SDMCDir,
@ -143,6 +151,6 @@ void ConfigureFilesystem::UpdateEnabledControls() {
!ui->gamecard_current_game->isChecked());
}
void ConfigureFilesystem::retranslateUi() {
void ConfigureFilesystem::RetranslateUI() {
ui->retranslateUi(this);
}

View File

@ -20,11 +20,13 @@ public:
explicit ConfigureFilesystem(QWidget* parent = nullptr);
~ConfigureFilesystem() override;
void applyConfiguration();
void retranslateUi();
void ApplyConfiguration();
private:
void setConfiguration();
void changeEvent(QEvent* event) override;
void RetranslateUI();
void SetConfiguration();
enum class DirectoryTarget {
NAND,

View File

@ -178,52 +178,52 @@ void ConfigureHotkeys::SetPollingResult(Core::HID::NpadButton button, const bool
QString ConfigureHotkeys::GetButtonName(Core::HID::NpadButton button) const {
Core::HID::NpadButtonState state{button};
if (state.a) {
return tr("A");
return QStringLiteral("A");
}
if (state.b) {
return tr("B");
return QStringLiteral("B");
}
if (state.x) {
return tr("X");
return QStringLiteral("X");
}
if (state.y) {
return tr("Y");
return QStringLiteral("Y");
}
if (state.l || state.right_sl || state.left_sl) {
return tr("L");
return QStringLiteral("L");
}
if (state.r || state.right_sr || state.left_sr) {
return tr("R");
return QStringLiteral("R");
}
if (state.zl) {
return tr("ZL");
return QStringLiteral("ZL");
}
if (state.zr) {
return tr("ZR");
return QStringLiteral("ZR");
}
if (state.left) {
return tr("Dpad_Left");
return QStringLiteral("Dpad_Left");
}
if (state.right) {
return tr("Dpad_Right");
return QStringLiteral("Dpad_Right");
}
if (state.up) {
return tr("Dpad_Up");
return QStringLiteral("Dpad_Up");
}
if (state.down) {
return tr("Dpad_Down");
return QStringLiteral("Dpad_Down");
}
if (state.stick_l) {
return tr("Left_Stick");
return QStringLiteral("Left_Stick");
}
if (state.stick_r) {
return tr("Right_Stick");
return QStringLiteral("Right_Stick");
}
if (state.minus) {
return tr("Minus");
return QStringLiteral("Minus");
}
if (state.plus) {
return tr("Plus");
return QStringLiteral("Plus");
}
return tr("Invalid");
}