diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 419f2e12f..7950084cd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,11 +3,7 @@ name: Build and Release -on: - push: - branches: [ "main" ] - pull_request: - branches: [ "*" ] +on: [push, pull_request] concurrency: group: ci-${{ github.event_name }}-${{ github.ref }} @@ -386,7 +382,7 @@ jobs: path: Shadps4-qt.AppImage pre-release: - if: github.ref == 'refs/heads/main' && github.event_name == 'push' + if: github.ref == 'refs/heads/main' && github.repository == 'shadps4-emu/shadPS4' && github.event_name == 'push' needs: [get-info, windows-sdl, windows-qt, macos-sdl, macos-qt, linux-sdl, linux-qt] runs-on: ubuntu-latest steps: diff --git a/CMakeLists.txt b/CMakeLists.txt index 22d0e0a2d..59f15add6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -518,6 +518,7 @@ set(SHADER_RECOMPILER src/shader_recompiler/exception.h src/shader_recompiler/frontend/translate/data_share.cpp src/shader_recompiler/frontend/translate/export.cpp src/shader_recompiler/frontend/translate/scalar_alu.cpp + src/shader_recompiler/frontend/translate/scalar_flow.cpp src/shader_recompiler/frontend/translate/scalar_memory.cpp src/shader_recompiler/frontend/translate/translate.cpp src/shader_recompiler/frontend/translate/translate.h @@ -526,6 +527,8 @@ set(SHADER_RECOMPILER src/shader_recompiler/exception.h src/shader_recompiler/frontend/translate/vector_memory.cpp src/shader_recompiler/frontend/control_flow_graph.cpp src/shader_recompiler/frontend/control_flow_graph.h + src/shader_recompiler/frontend/copy_shader.cpp + src/shader_recompiler/frontend/copy_shader.h src/shader_recompiler/frontend/decode.cpp src/shader_recompiler/frontend/decode.h src/shader_recompiler/frontend/fetch_shader.cpp @@ -542,6 +545,7 @@ set(SHADER_RECOMPILER src/shader_recompiler/exception.h src/shader_recompiler/ir/passes/ir_passes.h src/shader_recompiler/ir/passes/lower_shared_mem_to_registers.cpp src/shader_recompiler/ir/passes/resource_tracking_pass.cpp + src/shader_recompiler/ir/passes/ring_access_elimination.cpp src/shader_recompiler/ir/passes/shader_info_collection_pass.cpp src/shader_recompiler/ir/passes/ssa_rewrite_pass.cpp src/shader_recompiler/ir/abstract_syntax_list.h @@ -574,6 +578,7 @@ set(VIDEO_CORE src/video_core/amdgpu/liverpool.cpp src/video_core/amdgpu/pm4_cmds.h src/video_core/amdgpu/pm4_opcodes.h src/video_core/amdgpu/resource.h + src/video_core/amdgpu/types.h src/video_core/amdgpu/default_context.cpp src/video_core/buffer_cache/buffer.cpp src/video_core/buffer_cache/buffer.h diff --git a/src/core/libraries/pad/pad.cpp b/src/core/libraries/pad/pad.cpp index 6c3b1f56c..b671e0077 100644 --- a/src/core/libraries/pad/pad.cpp +++ b/src/core/libraries/pad/pad.cpp @@ -368,12 +368,13 @@ int PS4_SYSV_ABI scePadReadState(s32 handle, OrbisPadData* pData) { pData->angularVelocity.x = 0.0f; pData->angularVelocity.y = 0.0f; pData->angularVelocity.z = 0.0f; - pData->touchData.touchNum = 0; - pData->touchData.touch[0].x = 0; - pData->touchData.touch[0].y = 0; + pData->touchData.touchNum = + (state.touchpad[0].state ? 1 : 0) + (state.touchpad[1].state ? 1 : 0); + pData->touchData.touch[0].x = state.touchpad[0].x; + pData->touchData.touch[0].y = state.touchpad[0].y; pData->touchData.touch[0].id = 1; - pData->touchData.touch[1].x = 0; - pData->touchData.touch[1].y = 0; + pData->touchData.touch[1].x = state.touchpad[1].x; + pData->touchData.touch[1].y = state.touchpad[1].y; pData->touchData.touch[1].id = 2; pData->timestamp = state.time; pData->connected = true; // isConnected; //TODO fix me proper diff --git a/src/emulator.cpp b/src/emulator.cpp index 721151ccc..6649b7bba 100644 --- a/src/emulator.cpp +++ b/src/emulator.cpp @@ -58,6 +58,7 @@ Emulator::Emulator() { LOG_INFO(Loader, "Branch {}", Common::g_scm_branch); LOG_INFO(Loader, "Description {}", Common::g_scm_desc); + LOG_INFO(Config, "General Logtype: {}", Config::getLogType()); LOG_INFO(Config, "General isNeo: {}", Config::isNeoMode()); LOG_INFO(Config, "GPU isNullGpu: {}", Config::nullGpu()); LOG_INFO(Config, "GPU shouldDumpShaders: {}", Config::dumpShaders()); diff --git a/src/qt_gui/game_grid_frame.cpp b/src/qt_gui/game_grid_frame.cpp index 0292828b0..b932e46c3 100644 --- a/src/qt_gui/game_grid_frame.cpp +++ b/src/qt_gui/game_grid_frame.cpp @@ -102,7 +102,9 @@ void GameGridFrame::PopulateGameGrid(QVector m_games_search, bool from name_label->setGraphicsEffect(shadowEffect); widget->setLayout(layout); - QString tooltipText = QString::fromStdString(m_games_[gameCounter].name); + QString tooltipText = QString::fromStdString(m_games_[gameCounter].name + " (" + + m_games_[gameCounter].version + ", " + + m_games_[gameCounter].region + ")"); widget->setToolTip(tooltipText); QString tooltipStyle = QString("QToolTip {" "background-color: #ffffff;" diff --git a/src/qt_gui/game_list_frame.h b/src/qt_gui/game_list_frame.h index af9ce9280..957ac7318 100644 --- a/src/qt_gui/game_list_frame.h +++ b/src/qt_gui/game_list_frame.h @@ -44,18 +44,27 @@ public: int icon_size; + static float parseAsFloat(const std::string& str, const int& offset) { + return std::stof(str.substr(0, str.size() - offset)); + } + + static float parseSizeMB(const std::string& size) { + float num = parseAsFloat(size, 3); + return (size[size.size() - 2] == 'G') ? num * 1024 : num; + } + static bool CompareStringsAscending(GameInfo a, GameInfo b, int columnIndex) { switch (columnIndex) { case 1: return a.name < b.name; case 2: - return a.serial < b.serial; + return a.serial.substr(4) < b.serial.substr(4); case 3: return a.region < b.region; case 4: - return a.fw < b.fw; + return parseAsFloat(a.fw, 0) < parseAsFloat(b.fw, 0); case 5: - return a.size < b.size; + return parseSizeMB(b.size) < parseSizeMB(a.size); case 6: return a.version < b.version; case 7: @@ -70,13 +79,13 @@ public: case 1: return a.name > b.name; case 2: - return a.serial > b.serial; + return a.serial.substr(4) > b.serial.substr(4); case 3: return a.region > b.region; case 4: - return a.fw > b.fw; + return parseAsFloat(a.fw, 0) > parseAsFloat(b.fw, 0); case 5: - return a.size > b.size; + return parseSizeMB(b.size) > parseSizeMB(a.size); case 6: return a.version > b.version; case 7: diff --git a/src/qt_gui/settings_dialog.cpp b/src/qt_gui/settings_dialog.cpp index 035f67c9f..4a42e1961 100644 --- a/src/qt_gui/settings_dialog.cpp +++ b/src/qt_gui/settings_dialog.cpp @@ -352,7 +352,7 @@ void SettingsDialog::updateNoteTextEdit(const QString& elementName) { ui->descriptionText->setText(text.replace("\\n", "\n")); } -bool SettingsDialog::eventFilter(QObject* obj, QEvent* event) { +bool SettingsDialog::override(QObject* obj, QEvent* event) { if (event->type() == QEvent::Enter || event->type() == QEvent::Leave) { if (qobject_cast(obj)) { bool hovered = (event->type() == QEvent::Enter); diff --git a/src/qt_gui/settings_dialog.h b/src/qt_gui/settings_dialog.h index 5ee174cfb..71307d398 100644 --- a/src/qt_gui/settings_dialog.h +++ b/src/qt_gui/settings_dialog.h @@ -21,7 +21,7 @@ public: explicit SettingsDialog(std::span physical_devices, QWidget* parent = nullptr); ~SettingsDialog(); - bool eventFilter(QObject* obj, QEvent* event); + bool override(QObject* obj, QEvent* event); void updateNoteTextEdit(const QString& groupName); int exec() override; diff --git a/src/qt_gui/translations/ar.ts b/src/qt_gui/translations/ar.ts index f7e43877e..b385b491b 100644 --- a/src/qt_gui/translations/ar.ts +++ b/src/qt_gui/translations/ar.ts @@ -1,4 +1,4 @@ - +