From e930657bf65b323e25363dbb697eff036877504f Mon Sep 17 00:00:00 2001 From: nmzik Date: Sun, 20 Sep 2026 16:49:22 +0400 Subject: [PATCH] tesselation support in GUI --- src/launcher/forms/configuration_edit_dialog.ui | 10 ++++++++-- src/launcher/include/configuration.h | 4 ++++ src/launcher/src/configurationEditDialog.cpp | 2 ++ src/launcher/src/mainDialog.cpp | 3 +++ src/launcher/src/patchesDialog.cpp | 2 +- 5 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/launcher/forms/configuration_edit_dialog.ui b/src/launcher/forms/configuration_edit_dialog.ui index 92d91333a..e0ad795ff 100644 --- a/src/launcher/forms/configuration_edit_dialog.ui +++ b/src/launcher/forms/configuration_edit_dialog.ui @@ -167,6 +167,12 @@ Enable readback + + + Draw tessellated geometry. Disabled by default; unsupported tessellation may cause crashes. + Enable tessellation support (experimental) + + @@ -275,13 +281,13 @@ Patch CPU instructions that differ between AMD and the host CPU. - AMD CPU patch (EXPERIMENTAL) + AMD CPU patch (experimental) Helps prevent crashes in some games on Windows - Windows SysV red zone crash protection (Experimental) + Windows SysV red zone crash protection (experimental) diff --git a/src/launcher/include/configuration.h b/src/launcher/include/configuration.h index 1773a462c..3a1a8d542 100644 --- a/src/launcher/include/configuration.h +++ b/src/launcher/include/configuration.h @@ -92,6 +92,7 @@ public: int gpu_index = -1; bool fullscreen_enabled = false; bool readback_linear_images = false; + bool tessellation_enabled = false; int vblank_frequency = 60; int console_language = DEFAULT_CONSOLE_LANGUAGE; bool vulkan_validation_enabled = false; @@ -122,6 +123,7 @@ public: gpu_index = other.gpu_index; fullscreen_enabled = other.fullscreen_enabled; readback_linear_images = other.readback_linear_images; + tessellation_enabled = other.tessellation_enabled; vblank_frequency = other.vblank_frequency; console_language = other.console_language; vulkan_validation_enabled = other.vulkan_validation_enabled; @@ -169,6 +171,7 @@ public: KYTY_CFG_SET(gpu_index); KYTY_CFG_SET(fullscreen_enabled); KYTY_CFG_SET(readback_linear_images); + KYTY_CFG_SET(tessellation_enabled); KYTY_CFG_SET(vblank_frequency); KYTY_CFG_SET(console_language); KYTY_CFG_SET(vulkan_validation_enabled); @@ -210,6 +213,7 @@ public: } KYTY_CFG_GET(fullscreen_enabled); KYTY_CFG_GET(readback_linear_images); + KYTY_CFG_GET(tessellation_enabled); vblank_frequency = s->value("vblank_frequency", vblank_frequency).toInt(); console_language = s->value("console_language", console_language).toInt(); if (console_language < 0 || console_language > MAX_CONSOLE_LANGUAGE) { diff --git a/src/launcher/src/configurationEditDialog.cpp b/src/launcher/src/configurationEditDialog.cpp index 4abdabb4b..c97791b56 100644 --- a/src/launcher/src/configurationEditDialog.cpp +++ b/src/launcher/src/configurationEditDialog.cpp @@ -230,6 +230,7 @@ void ConfigurationEditDialog::Init(const Configuration& info) { : 0); m_ui->checkBox_fullscreen->setChecked(info.fullscreen_enabled); m_ui->checkBox_readback->setChecked(info.readback_linear_images); + m_ui->checkBox_tessellation->setChecked(info.tessellation_enabled); m_ui->spinBox_vblank_frequency->setValue(info.vblank_frequency); m_ui->comboBox_console_language->clear(); m_ui->comboBox_console_language->addItems(CONSOLE_LANGUAGE_NAMES); @@ -375,6 +376,7 @@ static void UpdateInfo(Configuration& info, Ui::ConfigurationEditDialog& ui) { info.gpu_index = ui.comboBox_gpu->currentIndex() - 1; info.fullscreen_enabled = ui.checkBox_fullscreen->isChecked(); info.readback_linear_images = ui.checkBox_readback->isChecked(); + info.tessellation_enabled = ui.checkBox_tessellation->isChecked(); info.vblank_frequency = ui.spinBox_vblank_frequency->value(); info.console_language = ui.comboBox_console_language->currentIndex(); info.vulkan_validation_enabled = ui.checkBox_vulkan_validation->isChecked(); diff --git a/src/launcher/src/mainDialog.cpp b/src/launcher/src/mainDialog.cpp index 8dd04edd8..093046778 100644 --- a/src/launcher/src/mainDialog.cpp +++ b/src/launcher/src/mainDialog.cpp @@ -226,6 +226,9 @@ static QStringList CreateEmulatorArgs(const Configuration& info) { args << "--fullscreen"; } args << "--readback-linear-images" << BoolArg(info.readback_linear_images); + if (info.tessellation_enabled) { + args << "--tessellation"; + } args << "--vblank-frequency" << QString::number(info.vblank_frequency); args << "--console-language" << QString::number(info.console_language); args << "--vulkan-validation" << BoolArg(info.vulkan_validation_enabled); diff --git a/src/launcher/src/patchesDialog.cpp b/src/launcher/src/patchesDialog.cpp index f3c002787..71ecad952 100644 --- a/src/launcher/src/patchesDialog.cpp +++ b/src/launcher/src/patchesDialog.cpp @@ -19,7 +19,7 @@ PatchesDialog::PatchesDialog(const Configuration& game, QWidget* parent) : QDialog(parent), m_title_id(game.title_id.trimmed().toUpper()) { setAttribute(Qt::WA_DeleteOnClose); - setWindowTitle(tr("Cheats (Experimental) - %1").arg(game.name)); + setWindowTitle(tr("Cheats (experimental) - %1").arg(game.name)); resize(640, 480); auto* layout = new QVBoxLayout(this);