From 6d6068e0e292e7457c3c55802f7dc4cccef1e226 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Miko=C5=82ajczyk?= Date: Tue, 15 Jul 2025 20:39:37 +0200 Subject: [PATCH 01/19] Fix ff1_i32_b64 not accepting vcc as its argument (#3251) --- .../frontend/translate/scalar_alu.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/shader_recompiler/frontend/translate/scalar_alu.cpp b/src/shader_recompiler/frontend/translate/scalar_alu.cpp index e3134c300..bb685d4bf 100644 --- a/src/shader_recompiler/frontend/translate/scalar_alu.cpp +++ b/src/shader_recompiler/frontend/translate/scalar_alu.cpp @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later +#include #include "common/assert.h" #include "shader_recompiler/frontend/translate/translate.h" @@ -680,9 +681,18 @@ void Translator::S_FF1_I32_B32(const GcnInst& inst) { } void Translator::S_FF1_I32_B64(const GcnInst& inst) { - ASSERT(inst.src[0].field == OperandField::ScalarGPR); - const IR::U32 result{ - ir.BallotFindLsb(ir.Ballot(ir.GetThreadBitScalarReg(IR::ScalarReg(inst.src[0].code))))}; + const auto src = [&] { + switch (inst.src[0].field) { + case OperandField::ScalarGPR: + return ir.GetThreadBitScalarReg(IR::ScalarReg(inst.src[0].code)); + case OperandField::VccLo: + return ir.GetVcc(); + default: + UNREACHABLE_MSG("unhandled operand type {}", magic_enum::enum_name(inst.src[0].field)); + } + }(); + const IR::U32 result{ir.BallotFindLsb(ir.Ballot(src))}; + SetDst(inst.dst[0], result); } From 83475ac8280f9cffd573701abe5b3d3f1f31b3d4 Mon Sep 17 00:00:00 2001 From: TheTurtle Date: Tue, 15 Jul 2025 22:55:57 +0300 Subject: [PATCH 02/19] attribute: Correct bary coord function (#3253) --- src/shader_recompiler/ir/attribute.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/shader_recompiler/ir/attribute.h b/src/shader_recompiler/ir/attribute.h index 00ec6c4b3..58f28fb81 100644 --- a/src/shader_recompiler/ir/attribute.h +++ b/src/shader_recompiler/ir/attribute.h @@ -110,7 +110,8 @@ constexpr bool IsMrt(Attribute attribute) noexcept { } constexpr bool IsBarycentricCoord(Attribute attribute) noexcept { - return attribute >= Attribute::BaryCoordSmooth && attribute <= Attribute::BaryCoordSmoothSample; + return attribute >= Attribute::BaryCoordNoPersp && + attribute <= Attribute::BaryCoordSmoothSample; } [[nodiscard]] std::string NameOf(Attribute attribute); From a82698d60103b561385fb56a148eaa1dd8c12bc2 Mon Sep 17 00:00:00 2001 From: DanielSvoboda Date: Tue, 15 Jul 2025 18:15:59 -0300 Subject: [PATCH 03/19] qt: fix gui emulatorLanguage (#3250) --- src/qt_gui/settings_dialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt_gui/settings_dialog.cpp b/src/qt_gui/settings_dialog.cpp index ed2a17e25..f903562f9 100644 --- a/src/qt_gui/settings_dialog.cpp +++ b/src/qt_gui/settings_dialog.cpp @@ -437,7 +437,7 @@ void SettingsDialog::LoadValuesFromConfig() { toml::find_or(data, "Settings", "consoleLanguage", 6))) % languageIndexes.size()); ui->emulatorLanguageComboBox->setCurrentIndex( - languages[toml::find_or(data, "GUI", "emulatorLanguage", "en_US")]); + languages[m_gui_settings->GetValue(gui::gen_guiLanguage).toString().toStdString()]); ui->hideCursorComboBox->setCurrentIndex(toml::find_or(data, "Input", "cursorState", 1)); OnCursorStateChanged(toml::find_or(data, "Input", "cursorState", 1)); ui->idleTimeoutSpinBox->setValue(toml::find_or(data, "Input", "cursorHideTimeout", 5)); From 6e350a50852fc6c39029d383064e2fa32c472168 Mon Sep 17 00:00:00 2001 From: TheTurtle Date: Wed, 16 Jul 2025 01:28:03 +0300 Subject: [PATCH 04/19] Avoid clearing HTILE when shader contains address calculation (#3252) * resource_tracking: Mark image as written when its used with atomics * texture_cache: Remove meta registered flag Mostly useless and it is possible for images to switch metas * vk_rasterizer: Use xor as heuristic for HTILE clear --- src/shader_recompiler/frontend/instruction.h | 2 -- src/shader_recompiler/info.h | 1 + .../ir/passes/resource_tracking_pass.cpp | 5 +-- .../ir/passes/shader_info_collection_pass.cpp | 3 ++ .../renderer_vulkan/vk_rasterizer.cpp | 19 +++++++--- src/video_core/texture_cache/image.h | 7 ++-- .../texture_cache/texture_cache.cpp | 36 ++++++++----------- src/video_core/texture_cache/texture_cache.h | 4 +++ 8 files changed, 42 insertions(+), 35 deletions(-) diff --git a/src/shader_recompiler/frontend/instruction.h b/src/shader_recompiler/frontend/instruction.h index 7c2e0bd1e..f4e7bc9f2 100644 --- a/src/shader_recompiler/frontend/instruction.h +++ b/src/shader_recompiler/frontend/instruction.h @@ -3,8 +3,6 @@ #pragma once -#include -#include "common/bit_field.h" #include "shader_recompiler/frontend/opcodes.h" namespace Shader::Gcn { diff --git a/src/shader_recompiler/info.h b/src/shader_recompiler/info.h index bb5c88584..11dd9c05e 100644 --- a/src/shader_recompiler/info.h +++ b/src/shader_recompiler/info.h @@ -222,6 +222,7 @@ struct Info { VAddr pgm_base; bool has_storage_images{}; bool has_discard{}; + bool has_bitwise_xor{}; bool has_image_gather{}; bool has_image_query{}; bool uses_buffer_atomic_float_min_max{}; diff --git a/src/shader_recompiler/ir/passes/resource_tracking_pass.cpp b/src/shader_recompiler/ir/passes/resource_tracking_pass.cpp index e5a4beb8b..2cf39c98e 100644 --- a/src/shader_recompiler/ir/passes/resource_tracking_pass.cpp +++ b/src/shader_recompiler/ir/passes/resource_tracking_pass.cpp @@ -455,11 +455,12 @@ void PatchImageSharp(IR::Block& block, IR::Inst& inst, Info& info, Descriptors& // Read image sharp. const auto tsharp = TrackSharp(tsharp_handle, info); const auto inst_info = inst.Flags(); - const bool is_written = inst.GetOpcode() == IR::Opcode::ImageWrite; + const bool is_atomic = IsImageAtomicInstruction(inst); + const bool is_written = inst.GetOpcode() == IR::Opcode::ImageWrite || is_atomic; const ImageResource image_res = { .sharp_idx = tsharp, .is_depth = bool(inst_info.is_depth), - .is_atomic = IsImageAtomicInstruction(inst), + .is_atomic = is_atomic, .is_array = bool(inst_info.is_array), .is_written = is_written, .is_r128 = bool(inst_info.is_r128), diff --git a/src/shader_recompiler/ir/passes/shader_info_collection_pass.cpp b/src/shader_recompiler/ir/passes/shader_info_collection_pass.cpp index 079827866..8f0e61da2 100644 --- a/src/shader_recompiler/ir/passes/shader_info_collection_pass.cpp +++ b/src/shader_recompiler/ir/passes/shader_info_collection_pass.cpp @@ -95,6 +95,9 @@ void Visit(Info& info, const IR::Inst& inst) { case IR::Opcode::DiscardCond: info.has_discard = true; break; + case IR::Opcode::BitwiseXor32: + info.has_bitwise_xor = true; + break; case IR::Opcode::ImageGather: case IR::Opcode::ImageGatherDref: info.has_image_gather = true; diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index b6130e873..c5f894b10 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -503,9 +503,13 @@ bool Rasterizer::IsComputeMetaClear(const Pipeline* pipeline) { return false; } + // Most of the time when a metadata is updated with a shader it gets cleared. It means + // we can skip the whole dispatch and update the tracked state instead. Also, it is not + // intended to be consumed and in such rare cases (e.g. HTile introspection, CRAA) we + // will need its full emulation anyways. const auto& info = pipeline->GetStage(Shader::LogicalStage::Compute); - // Assume if a shader reads and writes metas at the same time, it is a copy shader. + // Assume if a shader reads metadata, it is a copy shader. for (const auto& desc : info.buffers) { const VAddr address = desc.GetSharp(info).base_address; if (!desc.IsSpecial() && !desc.is_written && texture_cache.IsMeta(address)) { @@ -513,10 +517,15 @@ bool Rasterizer::IsComputeMetaClear(const Pipeline* pipeline) { } } - // Most of the time when a metadata is updated with a shader it gets cleared. It means - // we can skip the whole dispatch and update the tracked state instead. Also, it is not - // intended to be consumed and in such rare cases (e.g. HTile introspection, CRAA) we - // will need its full emulation anyways. + // Metadata surfaces are tiled and thus need address calculation to be written properly. + // If a shader wants to encode HTILE, for example, from a depth image it will have to compute + // proper tile address from dispatch invocation id. This address calculation contains an xor + // operation so use it as a heuristic for metadata writes that are probably not clears. + if (info.has_bitwise_xor) { + return false; + } + + // Assume if a shader writes metadata without address calculation, it is a clear shader. for (const auto& desc : info.buffers) { const VAddr address = desc.GetSharp(info).base_address; if (!desc.IsSpecial() && desc.is_written && texture_cache.ClearMeta(address)) { diff --git a/src/video_core/texture_cache/image.h b/src/video_core/texture_cache/image.h index 31b67e021..2dbaff053 100644 --- a/src/video_core/texture_cache/image.h +++ b/src/video_core/texture_cache/image.h @@ -27,10 +27,9 @@ enum ImageFlagBits : u32 { CpuDirty = 1 << 1, ///< Contents have been modified from the CPU GpuDirty = 1 << 2, ///< Contents have been modified from the GPU (valid data in buffer cache) Dirty = MaybeCpuDirty | CpuDirty | GpuDirty, - GpuModified = 1 << 3, ///< Contents have been modified from the GPU - Registered = 1 << 6, ///< True when the image is registered - Picked = 1 << 7, ///< Temporary flag to mark the image as picked - MetaRegistered = 1 << 8, ///< True when metadata for this surface is known and registered + GpuModified = 1 << 3, ///< Contents have been modified from the GPU + Registered = 1 << 6, ///< True when the image is registered + Picked = 1 << 7, ///< Temporary flag to mark the image as picked }; DECLARE_ENUM_FLAG_OPERATORS(ImageFlagBits) diff --git a/src/video_core/texture_cache/texture_cache.cpp b/src/video_core/texture_cache/texture_cache.cpp index 723b95892..a6657d8d9 100644 --- a/src/video_core/texture_cache/texture_cache.cpp +++ b/src/video_core/texture_cache/texture_cache.cpp @@ -508,20 +508,16 @@ ImageView& TextureCache::FindRenderTarget(BaseDesc& desc) { UpdateImage(image_id); // Register meta data for this color buffer - if (!(image.flags & ImageFlagBits::MetaRegistered)) { - if (desc.info.meta_info.cmask_addr) { - surface_metas.emplace(desc.info.meta_info.cmask_addr, - MetaDataInfo{.type = MetaDataInfo::Type::CMask}); - image.info.meta_info.cmask_addr = desc.info.meta_info.cmask_addr; - image.flags |= ImageFlagBits::MetaRegistered; - } + if (desc.info.meta_info.cmask_addr) { + surface_metas.emplace(desc.info.meta_info.cmask_addr, + MetaDataInfo{.type = MetaDataInfo::Type::CMask}); + image.info.meta_info.cmask_addr = desc.info.meta_info.cmask_addr; + } - if (desc.info.meta_info.fmask_addr) { - surface_metas.emplace(desc.info.meta_info.fmask_addr, - MetaDataInfo{.type = MetaDataInfo::Type::FMask}); - image.info.meta_info.fmask_addr = desc.info.meta_info.fmask_addr; - image.flags |= ImageFlagBits::MetaRegistered; - } + if (desc.info.meta_info.fmask_addr) { + surface_metas.emplace(desc.info.meta_info.fmask_addr, + MetaDataInfo{.type = MetaDataInfo::Type::FMask}); + image.info.meta_info.fmask_addr = desc.info.meta_info.fmask_addr; } return RegisterImageView(image_id, desc.view_info); @@ -536,15 +532,11 @@ ImageView& TextureCache::FindDepthTarget(BaseDesc& desc) { UpdateImage(image_id); // Register meta data for this depth buffer - if (!(image.flags & ImageFlagBits::MetaRegistered)) { - if (desc.info.meta_info.htile_addr) { - surface_metas.emplace( - desc.info.meta_info.htile_addr, - MetaDataInfo{.type = MetaDataInfo::Type::HTile, - .clear_mask = image.info.meta_info.htile_clear_mask}); - image.info.meta_info.htile_addr = desc.info.meta_info.htile_addr; - image.flags |= ImageFlagBits::MetaRegistered; - } + if (desc.info.meta_info.htile_addr) { + surface_metas.emplace(desc.info.meta_info.htile_addr, + MetaDataInfo{.type = MetaDataInfo::Type::HTile, + .clear_mask = image.info.meta_info.htile_clear_mask}); + image.info.meta_info.htile_addr = desc.info.meta_info.htile_addr; } // If there is a stencil attachment, link depth and stencil. diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h index ff8ffb61c..9a9679c0a 100644 --- a/src/video_core/texture_cache/texture_cache.h +++ b/src/video_core/texture_cache/texture_cache.h @@ -161,10 +161,12 @@ public: /// Registers an image view for provided image ImageView& RegisterImageView(ImageId image_id, const ImageViewInfo& view_info); + /// Returns true if the specified address is a metadata surface. bool IsMeta(VAddr address) const { return surface_metas.contains(address); } + /// Returns true if a slice of the specified metadata surface has been cleared. bool IsMetaCleared(VAddr address, u32 slice) const { const auto& it = surface_metas.find(address); if (it != surface_metas.end()) { @@ -173,6 +175,7 @@ public: return false; } + /// Clears all slices of the specified metadata surface. bool ClearMeta(VAddr address) { auto it = surface_metas.find(address); if (it != surface_metas.end()) { @@ -182,6 +185,7 @@ public: return false; } + /// Updates the state of a slice of the specified metadata surface. bool TouchMeta(VAddr address, u32 slice, bool is_clear) { auto it = surface_metas.find(address); if (it != surface_metas.end()) { From cf8a6efd3716ba9130e221767a88d2e542241005 Mon Sep 17 00:00:00 2001 From: TheTurtle Date: Wed, 16 Jul 2025 01:54:56 +0300 Subject: [PATCH 05/19] liverpool_to_vk: Don't use remapped format for clear value (#3254) --- src/video_core/amdgpu/liverpool.h | 1 - src/video_core/renderer_vulkan/liverpool_to_vk.cpp | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/video_core/amdgpu/liverpool.h b/src/video_core/amdgpu/liverpool.h index c517285fb..d693a0a38 100644 --- a/src/video_core/amdgpu/liverpool.h +++ b/src/video_core/amdgpu/liverpool.h @@ -1009,7 +1009,6 @@ struct Liverpool { return RemapSwizzle(info.format, mrt_swizzle); } - private: [[nodiscard]] NumberFormat GetFixedNumberFormat() const { // There is a small difference between T# and CB number types, account for it. return info.number_type == NumberFormat::SnormNz ? NumberFormat::Srgb diff --git a/src/video_core/renderer_vulkan/liverpool_to_vk.cpp b/src/video_core/renderer_vulkan/liverpool_to_vk.cpp index fd1a91260..cd597e16c 100644 --- a/src/video_core/renderer_vulkan/liverpool_to_vk.cpp +++ b/src/video_core/renderer_vulkan/liverpool_to_vk.cpp @@ -807,8 +807,8 @@ vk::Format DepthFormat(DepthBuffer::ZFormat z_format, DepthBuffer::StencilFormat vk::ClearValue ColorBufferClearValue(const AmdGpu::Liverpool::ColorBuffer& color_buffer) { const auto comp_swizzle = color_buffer.Swizzle(); - const auto format = color_buffer.GetDataFmt(); - const auto number_type = color_buffer.GetNumberFmt(); + const auto format = color_buffer.info.format.Value(); + const auto number_type = color_buffer.GetFixedNumberFormat(); const auto& c0 = color_buffer.clear_word0; const auto& c1 = color_buffer.clear_word1; From 499451bb8089e536edd6ae90f8e16517bc562e85 Mon Sep 17 00:00:00 2001 From: kalaposfos13 <153381648+kalaposfos13@users.noreply.github.com> Date: Wed, 16 Jul 2025 11:23:03 +0200 Subject: [PATCH 06/19] Standardize RegisterLib names for HLE libraries (#3234) --- src/core/libraries/ajm/ajm.cpp | 2 +- src/core/libraries/ajm/ajm.h | 2 +- .../libraries/app_content/app_content.cpp | 2 +- src/core/libraries/app_content/app_content.h | 2 +- src/core/libraries/audio/audioin.cpp | 2 +- src/core/libraries/audio/audioin.h | 2 +- src/core/libraries/audio/audioout.cpp | 2 +- src/core/libraries/audio/audioout.h | 2 +- src/core/libraries/audio3d/audio3d.cpp | 2 +- src/core/libraries/audio3d/audio3d.h | 2 +- src/core/libraries/avplayer/avplayer.cpp | 2 +- src/core/libraries/avplayer/avplayer.h | 2 +- src/core/libraries/camera/camera.cpp | 2 +- src/core/libraries/camera/camera.h | 2 +- .../libraries/companion/companion_httpd.cpp | 2 +- .../libraries/companion/companion_httpd.h | 2 +- .../libraries/companion/companion_util.cpp | 2 +- src/core/libraries/companion/companion_util.h | 2 +- src/core/libraries/disc_map/disc_map.cpp | 2 +- src/core/libraries/disc_map/disc_map.h | 2 +- src/core/libraries/fiber/fiber.cpp | 2 +- src/core/libraries/fiber/fiber.h | 2 +- .../game_live_streaming/gamelivestreaming.cpp | 2 +- .../game_live_streaming/gamelivestreaming.h | 2 +- src/core/libraries/gnmdriver/gnmdriver.cpp | 2 +- src/core/libraries/gnmdriver/gnmdriver.h | 2 +- src/core/libraries/hmd/hmd.cpp | 2 +- src/core/libraries/hmd/hmd.h | 2 +- src/core/libraries/ime/error_dialog.cpp | 2 +- src/core/libraries/ime/error_dialog.h | 2 +- src/core/libraries/ime/ime.cpp | 2 +- src/core/libraries/ime/ime.h | 2 +- src/core/libraries/ime/ime_dialog.cpp | 2 +- src/core/libraries/ime/ime_dialog.h | 2 +- src/core/libraries/jpeg/jpegenc.cpp | 2 +- src/core/libraries/jpeg/jpegenc.h | 2 +- src/core/libraries/kernel/kernel.cpp | 2 +- src/core/libraries/kernel/kernel.h | 2 +- src/core/libraries/libpng/pngdec.cpp | 2 +- src/core/libraries/libpng/pngdec.h | 2 +- src/core/libraries/libs.cpp | 118 +++++++++--------- src/core/libraries/mouse/mouse.cpp | 2 +- src/core/libraries/mouse/mouse.h | 2 +- src/core/libraries/move/move.cpp | 2 +- src/core/libraries/move/move.h | 2 +- src/core/libraries/network/http.cpp | 2 +- src/core/libraries/network/http.h | 2 +- src/core/libraries/network/http2.cpp | 2 +- src/core/libraries/network/http2.h | 2 +- src/core/libraries/network/net.cpp | 2 +- src/core/libraries/network/net.h | 2 +- src/core/libraries/network/netctl.cpp | 2 +- src/core/libraries/network/netctl.h | 2 +- src/core/libraries/network/ssl.cpp | 2 +- src/core/libraries/network/ssl.h | 2 +- src/core/libraries/network/ssl2.cpp | 2 +- src/core/libraries/network/ssl2.h | 2 +- src/core/libraries/np_auth/np_auth.cpp | 2 +- src/core/libraries/np_auth/np_auth.h | 2 +- src/core/libraries/np_common/np_common.cpp | 2 +- src/core/libraries/np_common/np_common.h | 2 +- src/core/libraries/np_manager/np_manager.cpp | 2 +- src/core/libraries/np_manager/np_manager.h | 2 +- src/core/libraries/np_party/np_party.cpp | 2 +- src/core/libraries/np_party/np_party.h | 2 +- src/core/libraries/np_score/np_score.cpp | 2 +- src/core/libraries/np_score/np_score.h | 2 +- src/core/libraries/np_trophy/np_trophy.cpp | 2 +- src/core/libraries/np_trophy/np_trophy.h | 2 +- src/core/libraries/np_web_api/np_web_api.cpp | 2 +- src/core/libraries/np_web_api/np_web_api.h | 2 +- src/core/libraries/pad/pad.cpp | 2 +- src/core/libraries/pad/pad.h | 2 +- src/core/libraries/playgo/playgo.cpp | 2 +- src/core/libraries/playgo/playgo.h | 2 +- src/core/libraries/playgo/playgo_dialog.cpp | 2 +- src/core/libraries/playgo/playgo_dialog.h | 2 +- src/core/libraries/random/random.cpp | 2 +- src/core/libraries/random/random.h | 2 +- src/core/libraries/razor_cpu/razor_cpu.cpp | 2 +- src/core/libraries/razor_cpu/razor_cpu.h | 2 +- src/core/libraries/remote_play/remoteplay.cpp | 2 +- src/core/libraries/remote_play/remoteplay.h | 2 +- .../save_data/dialog/savedatadialog.cpp | 2 +- .../save_data/dialog/savedatadialog.h | 2 +- src/core/libraries/save_data/savedata.cpp | 2 +- src/core/libraries/save_data/savedata.h | 2 +- src/core/libraries/screenshot/screenshot.cpp | 2 +- src/core/libraries/screenshot/screenshot.h | 2 +- src/core/libraries/share_play/shareplay.cpp | 2 +- src/core/libraries/share_play/shareplay.h | 2 +- .../libraries/signin_dialog/signindialog.cpp | 2 +- .../libraries/signin_dialog/signindialog.h | 2 +- src/core/libraries/system/commondialog.cpp | 2 +- src/core/libraries/system/commondialog.h | 2 +- src/core/libraries/system/msgdialog.cpp | 2 +- src/core/libraries/system/msgdialog.h | 2 +- src/core/libraries/system/posix.cpp | 2 +- src/core/libraries/system/posix.h | 2 +- src/core/libraries/system/sysmodule.cpp | 2 +- src/core/libraries/system/sysmodule.h | 2 +- src/core/libraries/system/systemservice.cpp | 2 +- src/core/libraries/system/systemservice.h | 2 +- src/core/libraries/system/userservice.cpp | 2 +- src/core/libraries/system/userservice.h | 2 +- src/core/libraries/ulobjmgr/ulobjmgr.cpp | 2 +- src/core/libraries/ulobjmgr/ulobjmgr.h | 2 +- src/core/libraries/usbd/usbd.cpp | 2 +- src/core/libraries/usbd/usbd.h | 2 +- src/core/libraries/videodec/videodec.cpp | 2 +- src/core/libraries/videodec/videodec.h | 2 +- src/core/libraries/videodec/videodec2.cpp | 2 +- src/core/libraries/videodec/videodec2.h | 2 +- src/core/libraries/voice/voice.cpp | 2 +- src/core/libraries/voice/voice.h | 2 +- .../web_browser_dialog/webbrowserdialog.cpp | 2 +- .../web_browser_dialog/webbrowserdialog.h | 2 +- src/core/libraries/zlib/zlib.cpp | 2 +- src/core/libraries/zlib/zlib_sce.h | 2 +- 119 files changed, 177 insertions(+), 177 deletions(-) diff --git a/src/core/libraries/ajm/ajm.cpp b/src/core/libraries/ajm/ajm.cpp index 5c55d2c06..d8b1dc137 100644 --- a/src/core/libraries/ajm/ajm.cpp +++ b/src/core/libraries/ajm/ajm.cpp @@ -219,7 +219,7 @@ int PS4_SYSV_ABI sceAjmStrError() { return ORBIS_OK; } -void RegisterlibSceAjm(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("NVDXiUesSbA", "libSceAjm", 1, "libSceAjm", 1, 1, sceAjmBatchCancel); LIB_FUNCTION("WfAiBW8Wcek", "libSceAjm", 1, "libSceAjm", 1, 1, sceAjmBatchErrorDump); LIB_FUNCTION("dmDybN--Fn8", "libSceAjm", 1, "libSceAjm", 1, 1, sceAjmBatchJobControlBufferRa); diff --git a/src/core/libraries/ajm/ajm.h b/src/core/libraries/ajm/ajm.h index 34aeb9aa4..2c529cd4b 100644 --- a/src/core/libraries/ajm/ajm.h +++ b/src/core/libraries/ajm/ajm.h @@ -229,5 +229,5 @@ int PS4_SYSV_ABI sceAjmModuleRegister(u32 context, AjmCodecType codec_type, s64 int PS4_SYSV_ABI sceAjmModuleUnregister(); int PS4_SYSV_ABI sceAjmStrError(); -void RegisterlibSceAjm(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::Ajm diff --git a/src/core/libraries/app_content/app_content.cpp b/src/core/libraries/app_content/app_content.cpp index fad270e2b..59497f847 100644 --- a/src/core/libraries/app_content/app_content.cpp +++ b/src/core/libraries/app_content/app_content.cpp @@ -369,7 +369,7 @@ int PS4_SYSV_ABI sceAppContentGetDownloadedStoreCountry() { return ORBIS_OK; } -void RegisterlibSceAppContent(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("AS45QoYHjc4", "libSceAppContent", 1, "libSceAppContentUtil", 1, 1, _Z5dummyv); LIB_FUNCTION("ZiATpP9gEkA", "libSceAppContent", 1, "libSceAppContentUtil", 1, 1, sceAppContentAddcontDelete); diff --git a/src/core/libraries/app_content/app_content.h b/src/core/libraries/app_content/app_content.h index 05bd3bc49..a8e1ee178 100644 --- a/src/core/libraries/app_content/app_content.h +++ b/src/core/libraries/app_content/app_content.h @@ -119,5 +119,5 @@ int PS4_SYSV_ABI sceAppContentGetAddcontInfoByEntitlementId(); int PS4_SYSV_ABI sceAppContentGetAddcontInfoListByIroTag(); int PS4_SYSV_ABI sceAppContentGetDownloadedStoreCountry(); -void RegisterlibSceAppContent(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::AppContent diff --git a/src/core/libraries/audio/audioin.cpp b/src/core/libraries/audio/audioin.cpp index 0a2489740..c227d8f15 100644 --- a/src/core/libraries/audio/audioin.cpp +++ b/src/core/libraries/audio/audioin.cpp @@ -218,7 +218,7 @@ int PS4_SYSV_ABI sceAudioInVmicWrite() { return ORBIS_OK; } -void RegisterlibSceAudioIn(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("IQtWgnrw6v8", "libSceAudioIn", 1, "libSceAudioIn", 1, 1, sceAudioInChangeAppModuleState); LIB_FUNCTION("Jh6WbHhnI68", "libSceAudioIn", 1, "libSceAudioIn", 1, 1, sceAudioInClose); diff --git a/src/core/libraries/audio/audioin.h b/src/core/libraries/audio/audioin.h index 28162d464..cbcee6d03 100644 --- a/src/core/libraries/audio/audioin.h +++ b/src/core/libraries/audio/audioin.h @@ -54,5 +54,5 @@ int PS4_SYSV_ABI sceAudioInVmicCreate(); int PS4_SYSV_ABI sceAudioInVmicDestroy(); int PS4_SYSV_ABI sceAudioInVmicWrite(); -void RegisterlibSceAudioIn(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::AudioIn diff --git a/src/core/libraries/audio/audioout.cpp b/src/core/libraries/audio/audioout.cpp index 92488443f..421289a9d 100644 --- a/src/core/libraries/audio/audioout.cpp +++ b/src/core/libraries/audio/audioout.cpp @@ -596,7 +596,7 @@ int PS4_SYSV_ABI sceAudioOutSetSystemDebugState() { return ORBIS_OK; } -void RegisterlibSceAudioOut(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("cx2dYFbzIAg", "libSceAudioOutDeviceService", 1, "libSceAudioOut", 1, 1, sceAudioOutDeviceIdOpen); LIB_FUNCTION("tKumjQSzhys", "libSceAudioDeviceControl", 1, "libSceAudioOut", 1, 1, diff --git a/src/core/libraries/audio/audioout.h b/src/core/libraries/audio/audioout.h index 7fcc25095..4f799665e 100644 --- a/src/core/libraries/audio/audioout.h +++ b/src/core/libraries/audio/audioout.h @@ -181,5 +181,5 @@ int PS4_SYSV_ABI sceAudioOutSystemControlSet(); int PS4_SYSV_ABI sceAudioOutSparkControlSetEqCoef(); int PS4_SYSV_ABI sceAudioOutSetSystemDebugState(); -void RegisterlibSceAudioOut(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::AudioOut diff --git a/src/core/libraries/audio3d/audio3d.cpp b/src/core/libraries/audio3d/audio3d.cpp index 81befc5bf..abcd24041 100644 --- a/src/core/libraries/audio3d/audio3d.cpp +++ b/src/core/libraries/audio3d/audio3d.cpp @@ -537,7 +537,7 @@ s32 PS4_SYSV_ABI sceAudio3dTerminate() { return ORBIS_OK; } -void RegisterlibSceAudio3d(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("pZlOm1aF3aA", "libSceAudio3d", 1, "libSceAudio3d", 1, 1, sceAudio3dAudioOutClose); LIB_FUNCTION("ucEsi62soTo", "libSceAudio3d", 1, "libSceAudio3d", 1, 1, sceAudio3dAudioOutOpen); LIB_FUNCTION("7NYEzJ9SJbM", "libSceAudio3d", 1, "libSceAudio3d", 1, 1, diff --git a/src/core/libraries/audio3d/audio3d.h b/src/core/libraries/audio3d/audio3d.h index f4e9ada8a..1057c1f31 100644 --- a/src/core/libraries/audio3d/audio3d.h +++ b/src/core/libraries/audio3d/audio3d.h @@ -141,5 +141,5 @@ s32 PS4_SYSV_ABI sceAudio3dSetGpuRenderer(); s32 PS4_SYSV_ABI sceAudio3dStrError(); s32 PS4_SYSV_ABI sceAudio3dTerminate(); -void RegisterlibSceAudio3d(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::Audio3d diff --git a/src/core/libraries/avplayer/avplayer.cpp b/src/core/libraries/avplayer/avplayer.cpp index 176fda137..b1009891e 100644 --- a/src/core/libraries/avplayer/avplayer.cpp +++ b/src/core/libraries/avplayer/avplayer.cpp @@ -278,7 +278,7 @@ s32 PS4_SYSV_ABI sceAvPlayerVprintf(const char* format, va_list args) { return ORBIS_OK; } -void RegisterlibSceAvPlayer(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("KMcEa+rHsIo", "libSceAvPlayer", 1, "libSceAvPlayer", 1, 0, sceAvPlayerAddSource); LIB_FUNCTION("x8uvuFOPZhU", "libSceAvPlayer", 1, "libSceAvPlayer", 1, 0, sceAvPlayerAddSourceEx); diff --git a/src/core/libraries/avplayer/avplayer.h b/src/core/libraries/avplayer/avplayer.h index 2d472f801..910f57c77 100644 --- a/src/core/libraries/avplayer/avplayer.h +++ b/src/core/libraries/avplayer/avplayer.h @@ -290,6 +290,6 @@ enum class SceAvPlayerAvSyncMode { using SceAvPlayerLogCallback = int PS4_SYSV_ABI (*)(void* p, const char* format, va_list args); -void RegisterlibSceAvPlayer(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::AvPlayer diff --git a/src/core/libraries/camera/camera.cpp b/src/core/libraries/camera/camera.cpp index 996d1c895..5cfa92af3 100644 --- a/src/core/libraries/camera/camera.cpp +++ b/src/core/libraries/camera/camera.cpp @@ -410,7 +410,7 @@ s32 PS4_SYSV_ABI sceCameraStopByHandle() { return ORBIS_OK; } -void RegisterlibSceCamera(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("QhjrPkRPUZQ", "libSceCamera", 1, "libSceCamera", 1, 1, sceCameraAccGetData); LIB_FUNCTION("UFonL7xopFM", "libSceCamera", 1, "libSceCamera", 1, 1, sceCameraAudioClose); LIB_FUNCTION("fkZE7Hup2ro", "libSceCamera", 1, "libSceCamera", 1, 1, sceCameraAudioGetData); diff --git a/src/core/libraries/camera/camera.h b/src/core/libraries/camera/camera.h index 51aa8b729..8eee94897 100644 --- a/src/core/libraries/camera/camera.h +++ b/src/core/libraries/camera/camera.h @@ -304,5 +304,5 @@ s32 PS4_SYSV_ABI sceCameraStartByHandle(); s32 PS4_SYSV_ABI sceCameraStop(s32 handle); s32 PS4_SYSV_ABI sceCameraStopByHandle(); -void RegisterlibSceCamera(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::Camera \ No newline at end of file diff --git a/src/core/libraries/companion/companion_httpd.cpp b/src/core/libraries/companion/companion_httpd.cpp index 39081fa4e..1e91fa7f3 100644 --- a/src/core/libraries/companion/companion_httpd.cpp +++ b/src/core/libraries/companion/companion_httpd.cpp @@ -102,7 +102,7 @@ s32 PS4_SYSV_ABI sceCompanionHttpdUnregisterRequestCallback() { return ORBIS_OK; } -void RegisterlibSceCompanionHttpd(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("8pWltDG7h6A", "libSceCompanionHttpd", 1, "libSceCompanionHttpd", 1, 1, sceCompanionHttpdAddHeader); LIB_FUNCTION("B-QBMeFdNgY", "libSceCompanionHttpd", 1, "libSceCompanionHttpd", 1, 1, diff --git a/src/core/libraries/companion/companion_httpd.h b/src/core/libraries/companion/companion_httpd.h index b6d441653..bc6807fbc 100644 --- a/src/core/libraries/companion/companion_httpd.h +++ b/src/core/libraries/companion/companion_httpd.h @@ -87,5 +87,5 @@ s32 PS4_SYSV_ABI sceCompanionHttpdTerminate(); s32 PS4_SYSV_ABI sceCompanionHttpdUnregisterRequestBodyReceptionCallback(); s32 PS4_SYSV_ABI sceCompanionHttpdUnregisterRequestCallback(); -void RegisterlibSceCompanionHttpd(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::CompanionHttpd \ No newline at end of file diff --git a/src/core/libraries/companion/companion_util.cpp b/src/core/libraries/companion/companion_util.cpp index c144ebdcc..60bfeade3 100644 --- a/src/core/libraries/companion/companion_util.cpp +++ b/src/core/libraries/companion/companion_util.cpp @@ -56,7 +56,7 @@ s32 PS4_SYSV_ABI sceCompanionUtilTerminate() { return ORBIS_OK; } -void RegisterlibSceCompanionUtil(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("cE5Msy11WhU", "libSceCompanionUtil", 1, "libSceCompanionUtil", 1, 1, sceCompanionUtilGetEvent); LIB_FUNCTION("MaVrz79mT5o", "libSceCompanionUtil", 1, "libSceCompanionUtil", 1, 1, diff --git a/src/core/libraries/companion/companion_util.h b/src/core/libraries/companion/companion_util.h index 921b5b21e..e44b095ee 100644 --- a/src/core/libraries/companion/companion_util.h +++ b/src/core/libraries/companion/companion_util.h @@ -29,5 +29,5 @@ s32 PS4_SYSV_ABI sceCompanionUtilInitialize(); s32 PS4_SYSV_ABI sceCompanionUtilOptParamInitialize(); s32 PS4_SYSV_ABI sceCompanionUtilTerminate(); -void RegisterlibSceCompanionUtil(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::CompanionUtil \ No newline at end of file diff --git a/src/core/libraries/disc_map/disc_map.cpp b/src/core/libraries/disc_map/disc_map.cpp index e8b40e624..8b1e3c653 100644 --- a/src/core/libraries/disc_map/disc_map.cpp +++ b/src/core/libraries/disc_map/disc_map.cpp @@ -34,7 +34,7 @@ int PS4_SYSV_ABI Func_E7EBCE96E92F91F8() { return ORBIS_DISC_MAP_ERROR_NO_BITMAP_INFO; } -void RegisterlibSceDiscMap(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("fl1eoDnwQ4s", "libSceDiscMap", 1, "libSceDiscMap", 1, 1, sceDiscMapGetPackageSize); LIB_FUNCTION("lbQKqsERhtE", "libSceDiscMap", 1, "libSceDiscMap", 1, 1, diff --git a/src/core/libraries/disc_map/disc_map.h b/src/core/libraries/disc_map/disc_map.h index dc8b875ac..df6c25aa0 100644 --- a/src/core/libraries/disc_map/disc_map.h +++ b/src/core/libraries/disc_map/disc_map.h @@ -18,5 +18,5 @@ int PS4_SYSV_ABI Func_8A828CAEE7EDD5E9(char* path, s64 offset, s64 nbytes, int* int* ret2); int PS4_SYSV_ABI Func_E7EBCE96E92F91F8(); -void RegisterlibSceDiscMap(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::DiscMap \ No newline at end of file diff --git a/src/core/libraries/fiber/fiber.cpp b/src/core/libraries/fiber/fiber.cpp index 345f0834d..6810d5854 100644 --- a/src/core/libraries/fiber/fiber.cpp +++ b/src/core/libraries/fiber/fiber.cpp @@ -545,7 +545,7 @@ s32 PS4_SYSV_ABI sceFiberSwitch(OrbisFiber* fiber, u64 arg_on_run_to, u64* arg_o return sceFiberSwitchImpl(fiber, nullptr, 0, arg_on_run_to, arg_on_run); } -void RegisterlibSceFiber(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("hVYD7Ou2pCQ", "libSceFiber", 1, "libSceFiber", 1, 1, sceFiberInitialize); LIB_FUNCTION("7+OJIpko9RY", "libSceFiber", 1, "libSceFiber", 1, 1, sceFiberInitializeImpl); // _sceFiberInitializeWithInternalOptionImpl diff --git a/src/core/libraries/fiber/fiber.h b/src/core/libraries/fiber/fiber.h index edcd9afe8..f52a751b1 100644 --- a/src/core/libraries/fiber/fiber.h +++ b/src/core/libraries/fiber/fiber.h @@ -116,5 +116,5 @@ s32 PS4_SYSV_ABI sceFiberRename(OrbisFiber* fiber, const char* name); s32 PS4_SYSV_ABI sceFiberGetThreadFramePointerAddress(u64* addr_frame_pointer); -void RegisterlibSceFiber(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::Fiber \ No newline at end of file diff --git a/src/core/libraries/game_live_streaming/gamelivestreaming.cpp b/src/core/libraries/game_live_streaming/gamelivestreaming.cpp index a1ebddfbf..1457052d2 100644 --- a/src/core/libraries/game_live_streaming/gamelivestreaming.cpp +++ b/src/core/libraries/game_live_streaming/gamelivestreaming.cpp @@ -246,7 +246,7 @@ int PS4_SYSV_ABI sceGameLiveStreamingUnregisterCallback() { return ORBIS_OK; } -void RegisterlibSceGameLiveStreaming(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("caqgDl+V9qA", "libSceGameLiveStreaming_debug", 1, "libSceGameLiveStreaming", 1, 1, sceGameLiveStreamingStartDebugBroadcast); LIB_FUNCTION("0i8Lrllxwow", "libSceGameLiveStreaming_debug", 1, "libSceGameLiveStreaming", 1, 1, diff --git a/src/core/libraries/game_live_streaming/gamelivestreaming.h b/src/core/libraries/game_live_streaming/gamelivestreaming.h index 468750fd1..0bab969bd 100644 --- a/src/core/libraries/game_live_streaming/gamelivestreaming.h +++ b/src/core/libraries/game_live_streaming/gamelivestreaming.h @@ -77,5 +77,5 @@ int PS4_SYSV_ABI sceGameLiveStreamingStopSocialFeedbackMessageFiltering(); int PS4_SYSV_ABI sceGameLiveStreamingTerminate(); int PS4_SYSV_ABI sceGameLiveStreamingUnregisterCallback(); -void RegisterlibSceGameLiveStreaming(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::GameLiveStreaming \ No newline at end of file diff --git a/src/core/libraries/gnmdriver/gnmdriver.cpp b/src/core/libraries/gnmdriver/gnmdriver.cpp index 8c3ab1612..a8860888b 100644 --- a/src/core/libraries/gnmdriver/gnmdriver.cpp +++ b/src/core/libraries/gnmdriver/gnmdriver.cpp @@ -2823,7 +2823,7 @@ int PS4_SYSV_ABI Func_F916890425496553() { return ORBIS_OK; } -void RegisterlibSceGnmDriver(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LOG_INFO(Lib_GnmDriver, "Initializing presenter"); liverpool = std::make_unique(); presenter = std::make_unique(*g_window, liverpool.get()); diff --git a/src/core/libraries/gnmdriver/gnmdriver.h b/src/core/libraries/gnmdriver/gnmdriver.h index a3d4968d3..0f804a91f 100644 --- a/src/core/libraries/gnmdriver/gnmdriver.h +++ b/src/core/libraries/gnmdriver/gnmdriver.h @@ -297,5 +297,5 @@ int PS4_SYSV_ABI Func_BFB41C057478F0BF(); int PS4_SYSV_ABI Func_E51D44DB8151238C(); int PS4_SYSV_ABI Func_F916890425496553(); -void RegisterlibSceGnmDriver(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::GnmDriver diff --git a/src/core/libraries/hmd/hmd.cpp b/src/core/libraries/hmd/hmd.cpp index b43789822..43c9cb5d5 100644 --- a/src/core/libraries/hmd/hmd.cpp +++ b/src/core/libraries/hmd/hmd.cpp @@ -939,7 +939,7 @@ s32 PS4_SYSV_ABI Func_FF2E0E53015FE231() { return ORBIS_OK; } -void RegisterlibSceHmd(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("8gH1aLgty5I", "libsceHmdReprojectionMultilayer", 1, "libSceHmd", 1, 1, sceHmdReprojectionStartMultilayer); LIB_FUNCTION("gEokC+OGI8g", "libSceHmdDistortion", 1, "libSceHmd", 1, 1, diff --git a/src/core/libraries/hmd/hmd.h b/src/core/libraries/hmd/hmd.h index 12f1ac70a..1f1455989 100644 --- a/src/core/libraries/hmd/hmd.h +++ b/src/core/libraries/hmd/hmd.h @@ -199,5 +199,5 @@ s32 PS4_SYSV_ABI Func_B9A6FA0735EC7E49(); s32 PS4_SYSV_ABI Func_FC193BD653F2AF2E(); s32 PS4_SYSV_ABI Func_FF2E0E53015FE231(); -void RegisterlibSceHmd(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::Hmd \ No newline at end of file diff --git a/src/core/libraries/ime/error_dialog.cpp b/src/core/libraries/ime/error_dialog.cpp index 07580fe1d..c4fc18381 100644 --- a/src/core/libraries/ime/error_dialog.cpp +++ b/src/core/libraries/ime/error_dialog.cpp @@ -190,7 +190,7 @@ Status PS4_SYSV_ABI sceErrorDialogUpdateStatus() { return g_status; } -void RegisterlibSceErrorDialog(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("ekXHb1kDBl0", "libSceErrorDialog", 1, "libSceErrorDialog", 1, 1, sceErrorDialogClose); LIB_FUNCTION("t2FvHRXzgqk", "libSceErrorDialog", 1, "libSceErrorDialog", 1, 1, diff --git a/src/core/libraries/ime/error_dialog.h b/src/core/libraries/ime/error_dialog.h index 3e6651d4a..75643b1db 100644 --- a/src/core/libraries/ime/error_dialog.h +++ b/src/core/libraries/ime/error_dialog.h @@ -24,5 +24,5 @@ int PS4_SYSV_ABI sceErrorDialogOpenWithReport(); CommonDialog::Error PS4_SYSV_ABI sceErrorDialogTerminate(); CommonDialog::Status PS4_SYSV_ABI sceErrorDialogUpdateStatus(); -void RegisterlibSceErrorDialog(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::ErrorDialog \ No newline at end of file diff --git a/src/core/libraries/ime/ime.cpp b/src/core/libraries/ime/ime.cpp index 54e856e87..dc87e486d 100644 --- a/src/core/libraries/ime/ime.cpp +++ b/src/core/libraries/ime/ime.cpp @@ -481,7 +481,7 @@ int PS4_SYSV_ABI sceImeVshUpdateContext2() { return ORBIS_OK; } -void RegisterlibSceIme(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("mN+ZoSN-8hQ", "libSceIme", 1, "libSceIme", 1, 1, FinalizeImeModule); LIB_FUNCTION("uTW+63goeJs", "libSceIme", 1, "libSceIme", 1, 1, InitializeImeModule); LIB_FUNCTION("Lf3DeGWC6xg", "libSceIme", 1, "libSceIme", 1, 1, sceImeCheckFilterText); diff --git a/src/core/libraries/ime/ime.h b/src/core/libraries/ime/ime.h index c2b80809c..6691965b8 100644 --- a/src/core/libraries/ime/ime.h +++ b/src/core/libraries/ime/ime.h @@ -68,6 +68,6 @@ int PS4_SYSV_ABI sceImeVshUpdate(); int PS4_SYSV_ABI sceImeVshUpdateContext(); int PS4_SYSV_ABI sceImeVshUpdateContext2(); -void RegisterlibSceIme(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::Ime diff --git a/src/core/libraries/ime/ime_dialog.cpp b/src/core/libraries/ime/ime_dialog.cpp index 6f808636b..21bb47bfc 100644 --- a/src/core/libraries/ime/ime_dialog.cpp +++ b/src/core/libraries/ime/ime_dialog.cpp @@ -280,7 +280,7 @@ Error PS4_SYSV_ABI sceImeDialogTerm() { return Error::OK; } -void RegisterlibSceImeDialog(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("oBmw4xrmfKs", "libSceImeDialog", 1, "libSceImeDialog", 1, 1, sceImeDialogAbort); LIB_FUNCTION("bX4H+sxPI-o", "libSceImeDialog", 1, "libSceImeDialog", 1, 1, sceImeDialogForceClose); diff --git a/src/core/libraries/ime/ime_dialog.h b/src/core/libraries/ime/ime_dialog.h index a056fdd5e..569bdf3c0 100644 --- a/src/core/libraries/ime/ime_dialog.h +++ b/src/core/libraries/ime/ime_dialog.h @@ -47,5 +47,5 @@ int PS4_SYSV_ABI sceImeDialogInitInternal3(); int PS4_SYSV_ABI sceImeDialogSetPanelPosition(); Error PS4_SYSV_ABI sceImeDialogTerm(); -void RegisterlibSceImeDialog(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::ImeDialog diff --git a/src/core/libraries/jpeg/jpegenc.cpp b/src/core/libraries/jpeg/jpegenc.cpp index b9c88d094..537efec97 100644 --- a/src/core/libraries/jpeg/jpegenc.cpp +++ b/src/core/libraries/jpeg/jpegenc.cpp @@ -197,7 +197,7 @@ s32 PS4_SYSV_ABI sceJpegEncQueryMemorySize(const OrbisJpegEncCreateParam* param) return ORBIS_JPEG_ENC_MINIMUM_MEMORY_SIZE; } -void RegisterlibSceJpegEnc(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("K+rocojkr-I", "libSceJpegEnc", 1, "libSceJpegEnc", 1, 1, sceJpegEncCreate); LIB_FUNCTION("j1LyMdaM+C0", "libSceJpegEnc", 1, "libSceJpegEnc", 1, 1, sceJpegEncDelete); LIB_FUNCTION("QbrU0cUghEM", "libSceJpegEnc", 1, "libSceJpegEnc", 1, 1, sceJpegEncEncode); diff --git a/src/core/libraries/jpeg/jpegenc.h b/src/core/libraries/jpeg/jpegenc.h index a6b4d311a..e0c39c58d 100644 --- a/src/core/libraries/jpeg/jpegenc.h +++ b/src/core/libraries/jpeg/jpegenc.h @@ -80,5 +80,5 @@ s32 PS4_SYSV_ABI sceJpegEncEncode(OrbisJpegEncHandle handle, const OrbisJpegEncE OrbisJpegEncOutputInfo* output_info); s32 PS4_SYSV_ABI sceJpegEncQueryMemorySize(const OrbisJpegEncCreateParam* param); -void RegisterlibSceJpegEnc(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::JpegEnc diff --git a/src/core/libraries/kernel/kernel.cpp b/src/core/libraries/kernel/kernel.cpp index a4d3accac..3272e8727 100644 --- a/src/core/libraries/kernel/kernel.cpp +++ b/src/core/libraries/kernel/kernel.cpp @@ -257,7 +257,7 @@ s32 PS4_SYSV_ABI sceKernelGetSystemSwVersion(SwVersionStruct* ret) { return ORBIS_OK; } -void RegisterKernel(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { service_thread = std::jthread{KernelServiceThread}; Libraries::Kernel::RegisterFileSystem(sym); diff --git a/src/core/libraries/kernel/kernel.h b/src/core/libraries/kernel/kernel.h index 018759e14..212471ccb 100644 --- a/src/core/libraries/kernel/kernel.h +++ b/src/core/libraries/kernel/kernel.h @@ -41,6 +41,6 @@ struct SwVersionStruct { u32 hex_representation; }; -void RegisterKernel(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::Kernel diff --git a/src/core/libraries/libpng/pngdec.cpp b/src/core/libraries/libpng/pngdec.cpp index d9a324fc5..7ff12473d 100644 --- a/src/core/libraries/libpng/pngdec.cpp +++ b/src/core/libraries/libpng/pngdec.cpp @@ -261,7 +261,7 @@ s32 PS4_SYSV_ABI scePngDecQueryMemorySize(const OrbisPngDecCreateParam* param) { return sizeof(PngHandler); } -void RegisterlibScePngDec(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("m0uW+8pFyaw", "libScePngDec", 1, "libScePngDec", 1, 1, scePngDecCreate); LIB_FUNCTION("WC216DD3El4", "libScePngDec", 1, "libScePngDec", 1, 1, scePngDecDecode); LIB_FUNCTION("cJ--1xAbj-I", "libScePngDec", 1, "libScePngDec", 1, 1, diff --git a/src/core/libraries/libpng/pngdec.h b/src/core/libraries/libpng/pngdec.h index c897d7c95..b306d6100 100644 --- a/src/core/libraries/libpng/pngdec.h +++ b/src/core/libraries/libpng/pngdec.h @@ -79,5 +79,5 @@ s32 PS4_SYSV_ABI scePngDecParseHeader(const OrbisPngDecParseParam* param, OrbisPngDecImageInfo* imageInfo); s32 PS4_SYSV_ABI scePngDecQueryMemorySize(const OrbisPngDecCreateParam* param); -void RegisterlibScePngDec(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::PngDec diff --git a/src/core/libraries/libs.cpp b/src/core/libraries/libs.cpp index 762c1e762..af9328a57 100644 --- a/src/core/libraries/libs.cpp +++ b/src/core/libraries/libs.cpp @@ -70,66 +70,66 @@ namespace Libraries { void InitHLELibs(Core::Loader::SymbolsResolver* sym) { LOG_INFO(Lib_Kernel, "Initializing HLE libraries"); - Libraries::Kernel::RegisterKernel(sym); - Libraries::GnmDriver::RegisterlibSceGnmDriver(sym); + Libraries::Kernel::RegisterLib(sym); + Libraries::GnmDriver::RegisterLib(sym); Libraries::VideoOut::RegisterLib(sym); - Libraries::UserService::RegisterlibSceUserService(sym); - Libraries::SystemService::RegisterlibSceSystemService(sym); - Libraries::CommonDialog::RegisterlibSceCommonDialog(sym); - Libraries::MsgDialog::RegisterlibSceMsgDialog(sym); - Libraries::AudioOut::RegisterlibSceAudioOut(sym); - Libraries::Http::RegisterlibSceHttp(sym); - Libraries::Http2::RegisterlibSceHttp2(sym); - Libraries::Net::RegisterlibSceNet(sym); - Libraries::NetCtl::RegisterlibSceNetCtl(sym); - Libraries::SaveData::RegisterlibSceSaveData(sym); - Libraries::SaveData::Dialog::RegisterlibSceSaveDataDialog(sym); - Libraries::Ssl::RegisterlibSceSsl(sym); - Libraries::Ssl2::RegisterlibSceSsl2(sym); - Libraries::SysModule::RegisterlibSceSysmodule(sym); - Libraries::Posix::Registerlibsceposix(sym); - Libraries::AudioIn::RegisterlibSceAudioIn(sym); - Libraries::NpCommon::RegisterlibSceNpCommon(sym); - Libraries::NpManager::RegisterlibSceNpManager(sym); - Libraries::NpScore::RegisterlibSceNpScore(sym); - Libraries::NpTrophy::RegisterlibSceNpTrophy(sym); - Libraries::NpWebApi::RegisterlibSceNpWebApi(sym); - Libraries::NpAuth::RegisterlibSceNpAuth(sym); - Libraries::ScreenShot::RegisterlibSceScreenShot(sym); - Libraries::AppContent::RegisterlibSceAppContent(sym); - Libraries::PngDec::RegisterlibScePngDec(sym); - Libraries::PlayGo::RegisterlibScePlayGo(sym); - Libraries::PlayGo::Dialog::RegisterlibScePlayGoDialog(sym); - Libraries::Random::RegisterlibSceRandom(sym); - Libraries::Usbd::RegisterlibSceUsbd(sym); - Libraries::Pad::RegisterlibScePad(sym); - Libraries::Ajm::RegisterlibSceAjm(sym); - Libraries::ErrorDialog::RegisterlibSceErrorDialog(sym); - Libraries::ImeDialog::RegisterlibSceImeDialog(sym); - Libraries::AvPlayer::RegisterlibSceAvPlayer(sym); - Libraries::Vdec2::RegisterlibSceVdec2(sym); - Libraries::Audio3d::RegisterlibSceAudio3d(sym); - Libraries::Ime::RegisterlibSceIme(sym); - Libraries::GameLiveStreaming::RegisterlibSceGameLiveStreaming(sym); - Libraries::SharePlay::RegisterlibSceSharePlay(sym); - Libraries::Remoteplay::RegisterlibSceRemoteplay(sym); - Libraries::Videodec::RegisterlibSceVideodec(sym); - Libraries::RazorCpu::RegisterlibSceRazorCpu(sym); - Libraries::Move::RegisterlibSceMove(sym); - Libraries::Fiber::RegisterlibSceFiber(sym); - Libraries::JpegEnc::RegisterlibSceJpegEnc(sym); - Libraries::Mouse::RegisterlibSceMouse(sym); - Libraries::WebBrowserDialog::RegisterlibSceWebBrowserDialog(sym); - Libraries::NpParty::RegisterlibSceNpParty(sym); - Libraries::Zlib::RegisterlibSceZlib(sym); - Libraries::Hmd::RegisterlibSceHmd(sym); - Libraries::DiscMap::RegisterlibSceDiscMap(sym); - Libraries::Ulobjmgr::RegisterlibSceUlobjmgr(sym); - Libraries::SigninDialog::RegisterlibSceSigninDialog(sym); - Libraries::Camera::RegisterlibSceCamera(sym); - Libraries::CompanionHttpd::RegisterlibSceCompanionHttpd(sym); - Libraries::CompanionUtil::RegisterlibSceCompanionUtil(sym); - Libraries::Voice::RegisterlibSceVoice(sym); + Libraries::UserService::RegisterLib(sym); + Libraries::SystemService::RegisterLib(sym); + Libraries::CommonDialog::RegisterLib(sym); + Libraries::MsgDialog::RegisterLib(sym); + Libraries::AudioOut::RegisterLib(sym); + Libraries::Http::RegisterLib(sym); + Libraries::Http2::RegisterLib(sym); + Libraries::Net::RegisterLib(sym); + Libraries::NetCtl::RegisterLib(sym); + Libraries::SaveData::RegisterLib(sym); + Libraries::SaveData::Dialog::RegisterLib(sym); + Libraries::Ssl::RegisterLib(sym); + Libraries::Ssl2::RegisterLib(sym); + Libraries::SysModule::RegisterLib(sym); + Libraries::Posix::RegisterLib(sym); + Libraries::AudioIn::RegisterLib(sym); + Libraries::NpCommon::RegisterLib(sym); + Libraries::NpManager::RegisterLib(sym); + Libraries::NpScore::RegisterLib(sym); + Libraries::NpTrophy::RegisterLib(sym); + Libraries::NpWebApi::RegisterLib(sym); + Libraries::NpAuth::RegisterLib(sym); + Libraries::ScreenShot::RegisterLib(sym); + Libraries::AppContent::RegisterLib(sym); + Libraries::PngDec::RegisterLib(sym); + Libraries::PlayGo::RegisterLib(sym); + Libraries::PlayGo::Dialog::RegisterLib(sym); + Libraries::Random::RegisterLib(sym); + Libraries::Usbd::RegisterLib(sym); + Libraries::Pad::RegisterLib(sym); + Libraries::Ajm::RegisterLib(sym); + Libraries::ErrorDialog::RegisterLib(sym); + Libraries::ImeDialog::RegisterLib(sym); + Libraries::AvPlayer::RegisterLib(sym); + Libraries::Vdec2::RegisterLib(sym); + Libraries::Audio3d::RegisterLib(sym); + Libraries::Ime::RegisterLib(sym); + Libraries::GameLiveStreaming::RegisterLib(sym); + Libraries::SharePlay::RegisterLib(sym); + Libraries::Remoteplay::RegisterLib(sym); + Libraries::Videodec::RegisterLib(sym); + Libraries::RazorCpu::RegisterLib(sym); + Libraries::Move::RegisterLib(sym); + Libraries::Fiber::RegisterLib(sym); + Libraries::JpegEnc::RegisterLib(sym); + Libraries::Mouse::RegisterLib(sym); + Libraries::WebBrowserDialog::RegisterLib(sym); + Libraries::NpParty::RegisterLib(sym); + Libraries::Zlib::RegisterLib(sym); + Libraries::Hmd::RegisterLib(sym); + Libraries::DiscMap::RegisterLib(sym); + Libraries::Ulobjmgr::RegisterLib(sym); + Libraries::SigninDialog::RegisterLib(sym); + Libraries::Camera::RegisterLib(sym); + Libraries::CompanionHttpd::RegisterLib(sym); + Libraries::CompanionUtil::RegisterLib(sym); + Libraries::Voice::RegisterLib(sym); } } // namespace Libraries diff --git a/src/core/libraries/mouse/mouse.cpp b/src/core/libraries/mouse/mouse.cpp index dffd2346c..d9bd2669f 100644 --- a/src/core/libraries/mouse/mouse.cpp +++ b/src/core/libraries/mouse/mouse.cpp @@ -79,7 +79,7 @@ int PS4_SYSV_ABI sceMouseSetProcessPrivilege() { return ORBIS_OK; } -void RegisterlibSceMouse(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("cAnT0Rw-IwU", "libSceMouse", 1, "libSceMouse", 1, 1, sceMouseClose); LIB_FUNCTION("Ymyy1HSSJLQ", "libSceMouse", 1, "libSceMouse", 1, 1, sceMouseConnectPort); LIB_FUNCTION("BRXOoXQtb+k", "libSceMouse", 1, "libSceMouse", 1, 1, sceMouseDebugGetDeviceId); diff --git a/src/core/libraries/mouse/mouse.h b/src/core/libraries/mouse/mouse.h index 8264f62e0..192343434 100644 --- a/src/core/libraries/mouse/mouse.h +++ b/src/core/libraries/mouse/mouse.h @@ -25,5 +25,5 @@ int PS4_SYSV_ABI sceMouseSetHandType(); int PS4_SYSV_ABI sceMouseSetPointerSpeed(); int PS4_SYSV_ABI sceMouseSetProcessPrivilege(); -void RegisterlibSceMouse(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::Mouse \ No newline at end of file diff --git a/src/core/libraries/move/move.cpp b/src/core/libraries/move/move.cpp index 500d89586..f63142615 100644 --- a/src/core/libraries/move/move.cpp +++ b/src/core/libraries/move/move.cpp @@ -38,7 +38,7 @@ int PS4_SYSV_ABI sceMoveInit() { return ORBIS_OK; } -void RegisterlibSceMove(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("HzC60MfjJxU", "libSceMove", 1, "libSceMove", 1, 1, sceMoveOpen); LIB_FUNCTION("GWXTyxs4QbE", "libSceMove", 1, "libSceMove", 1, 1, sceMoveGetDeviceInfo); LIB_FUNCTION("ttU+JOhShl4", "libSceMove", 1, "libSceMove", 1, 1, sceMoveReadStateLatest); diff --git a/src/core/libraries/move/move.h b/src/core/libraries/move/move.h index 2d7adaba7..8ae6c545c 100644 --- a/src/core/libraries/move/move.h +++ b/src/core/libraries/move/move.h @@ -17,5 +17,5 @@ int PS4_SYSV_ABI sceMoveReadStateRecent(); int PS4_SYSV_ABI sceMoveTerm(); int PS4_SYSV_ABI sceMoveInit(); -void RegisterlibSceMove(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::Move \ No newline at end of file diff --git a/src/core/libraries/network/http.cpp b/src/core/libraries/network/http.cpp index dbb5b096a..f7cbed931 100644 --- a/src/core/libraries/network/http.cpp +++ b/src/core/libraries/network/http.cpp @@ -847,7 +847,7 @@ int PS4_SYSV_ABI sceHttpWaitRequest() { return ORBIS_OK; } -void RegisterlibSceHttp(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("hvG6GfBMXg8", "libSceHttp", 1, "libSceHttp", 1, 1, sceHttpAbortRequest); LIB_FUNCTION("JKl06ZIAl6A", "libSceHttp", 1, "libSceHttp", 1, 1, sceHttpAbortRequestForce); LIB_FUNCTION("sWQiqKvYTVA", "libSceHttp", 1, "libSceHttp", 1, 1, sceHttpAbortWaitRequest); diff --git a/src/core/libraries/network/http.h b/src/core/libraries/network/http.h index c687c60c4..cc9ca57af 100644 --- a/src/core/libraries/network/http.h +++ b/src/core/libraries/network/http.h @@ -141,5 +141,5 @@ int PS4_SYSV_ABI sceHttpUriSweepPath(char* dst, const char* src, size_t srcSize) int PS4_SYSV_ABI sceHttpUriUnescape(char* out, size_t* require, size_t prepare, const char* in); int PS4_SYSV_ABI sceHttpWaitRequest(); -void RegisterlibSceHttp(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::Http diff --git a/src/core/libraries/network/http2.cpp b/src/core/libraries/network/http2.cpp index 52f73edc6..f6a0eba4e 100644 --- a/src/core/libraries/network/http2.cpp +++ b/src/core/libraries/network/http2.cpp @@ -289,7 +289,7 @@ int PS4_SYSV_ABI sceHttp2WaitAsync() { return ORBIS_OK; } -void RegisterlibSceHttp2(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("AS45QoYHjc4", "libSceHttp2", 1, "libSceHttp2", 1, 1, _Z5dummyv); LIB_FUNCTION("IZ-qjhRqvjk", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2AbortRequest); LIB_FUNCTION("flPxnowtvWY", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2AddCookie); diff --git a/src/core/libraries/network/http2.h b/src/core/libraries/network/http2.h index aa1d0c5b4..99359518a 100644 --- a/src/core/libraries/network/http2.h +++ b/src/core/libraries/network/http2.h @@ -68,5 +68,5 @@ int PS4_SYSV_ABI sceHttp2SslEnableOption(); int PS4_SYSV_ABI sceHttp2Term(); int PS4_SYSV_ABI sceHttp2WaitAsync(); -void RegisterlibSceHttp2(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::Http2 \ No newline at end of file diff --git a/src/core/libraries/network/net.cpp b/src/core/libraries/network/net.cpp index 9607f0d78..6df4f2f40 100644 --- a/src/core/libraries/network/net.cpp +++ b/src/core/libraries/network/net.cpp @@ -1942,7 +1942,7 @@ int PS4_SYSV_ABI sceNetEmulationSet() { return ORBIS_OK; } -void RegisterlibSceNet(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("ZRAJo-A-ukc", "libSceNet", 1, "libSceNet", 1, 1, in6addr_any); LIB_FUNCTION("XCuA-GqjA-k", "libSceNet", 1, "libSceNet", 1, 1, in6addr_loopback); LIB_FUNCTION("VZgoeBxPXUQ", "libSceNet", 1, "libSceNet", 1, 1, sce_net_dummy); diff --git a/src/core/libraries/network/net.h b/src/core/libraries/network/net.h index 1393ecb1d..7b6a5680c 100644 --- a/src/core/libraries/network/net.h +++ b/src/core/libraries/network/net.h @@ -336,5 +336,5 @@ int PS4_SYSV_ABI Func_0E707A589F751C68(); int PS4_SYSV_ABI sceNetEmulationGet(); int PS4_SYSV_ABI sceNetEmulationSet(); -void RegisterlibSceNet(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::Net diff --git a/src/core/libraries/network/netctl.cpp b/src/core/libraries/network/netctl.cpp index 38225c48c..54a273dc3 100644 --- a/src/core/libraries/network/netctl.cpp +++ b/src/core/libraries/network/netctl.cpp @@ -547,7 +547,7 @@ int PS4_SYSV_ABI sceNetCtlApRpUnregisterCallback() { return ORBIS_OK; } -void RegisterlibSceNetCtl(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("XtClSOC1xcU", "libSceNetBwe", 1, "libSceNetCtl", 1, 1, sceNetBweCheckCallbackIpcInt); LIB_FUNCTION("YALqoY4aeY0", "libSceNetBwe", 1, "libSceNetCtl", 1, 1, sceNetBweClearEventIpcInt); diff --git a/src/core/libraries/network/netctl.h b/src/core/libraries/network/netctl.h index 203c75822..7f139e8c3 100644 --- a/src/core/libraries/network/netctl.h +++ b/src/core/libraries/network/netctl.h @@ -165,5 +165,5 @@ int PS4_SYSV_ABI sceNetCtlApRpStartWithRetry(); int PS4_SYSV_ABI sceNetCtlApRpStop(); int PS4_SYSV_ABI sceNetCtlApRpUnregisterCallback(); -void RegisterlibSceNetCtl(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::NetCtl diff --git a/src/core/libraries/network/ssl.cpp b/src/core/libraries/network/ssl.cpp index a5ac8f5ef..1e013bc26 100644 --- a/src/core/libraries/network/ssl.cpp +++ b/src/core/libraries/network/ssl.cpp @@ -1050,7 +1050,7 @@ int PS4_SYSV_ABI Func_28F8791A771D39C7() { return ORBIS_OK; } -void RegisterlibSceSsl(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("Pgt0gg14ewU", "libSceSsl", 1, "libSceSsl", 1, 1, CA_MGMT_allocCertDistinguishedName); LIB_FUNCTION("wJ5jCpkCv-c", "libSceSsl", 1, "libSceSsl", 1, 1, diff --git a/src/core/libraries/network/ssl.h b/src/core/libraries/network/ssl.h index fcdcdd166..051c6363e 100644 --- a/src/core/libraries/network/ssl.h +++ b/src/core/libraries/network/ssl.h @@ -220,5 +220,5 @@ int PS4_SYSV_ABI VLONG_freeVlongQueue(); int PS4_SYSV_ABI Func_22E76E60BC0587D7(); int PS4_SYSV_ABI Func_28F8791A771D39C7(); -void RegisterlibSceSsl(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::Ssl diff --git a/src/core/libraries/network/ssl2.cpp b/src/core/libraries/network/ssl2.cpp index 8ca29526e..701f091a3 100644 --- a/src/core/libraries/network/ssl2.cpp +++ b/src/core/libraries/network/ssl2.cpp @@ -290,7 +290,7 @@ int PS4_SYSV_ABI Func_28F8791A771D39C7() { return ORBIS_OK; } -void RegisterlibSceSsl2(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("Md+HYkCBZB4", "libSceSsl", 1, "libSceSsl", 2, 1, CA_MGMT_extractKeyBlobEx); LIB_FUNCTION("9bKYzKP6kYU", "libSceSsl", 1, "libSceSsl", 2, 1, CA_MGMT_extractPublicKeyInfo); LIB_FUNCTION("ipLIammTj2Q", "libSceSsl", 1, "libSceSsl", 2, 1, CA_MGMT_freeKeyBlob); diff --git a/src/core/libraries/network/ssl2.h b/src/core/libraries/network/ssl2.h index 03ee3b86e..754dda40c 100644 --- a/src/core/libraries/network/ssl2.h +++ b/src/core/libraries/network/ssl2.h @@ -10,5 +10,5 @@ class SymbolsResolver; } namespace Libraries::Ssl2 { -void RegisterlibSceSsl2(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::Ssl2 \ No newline at end of file diff --git a/src/core/libraries/np_auth/np_auth.cpp b/src/core/libraries/np_auth/np_auth.cpp index 9ec986f3c..90f249c97 100644 --- a/src/core/libraries/np_auth/np_auth.cpp +++ b/src/core/libraries/np_auth/np_auth.cpp @@ -73,7 +73,7 @@ s32 PS4_SYSV_ABI sceNpAuthWaitAsync() { return ORBIS_OK; } -void RegisterlibSceNpAuth(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("KxGkOrQJTqY", "libSceNpAuthCompat", 1, "libSceNpAuth", 1, 1, sceNpAuthGetAuthorizationCode); LIB_FUNCTION("uaB-LoJqHis", "libSceNpAuthCompat", 1, "libSceNpAuth", 1, 1, sceNpAuthGetIdToken); diff --git a/src/core/libraries/np_auth/np_auth.h b/src/core/libraries/np_auth/np_auth.h index a6a66b452..17f293865 100644 --- a/src/core/libraries/np_auth/np_auth.h +++ b/src/core/libraries/np_auth/np_auth.h @@ -25,5 +25,5 @@ s32 PS4_SYSV_ABI sceNpAuthPollAsync(); s32 PS4_SYSV_ABI sceNpAuthSetTimeout(); s32 PS4_SYSV_ABI sceNpAuthWaitAsync(); -void RegisterlibSceNpAuth(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::NpAuth \ No newline at end of file diff --git a/src/core/libraries/np_common/np_common.cpp b/src/core/libraries/np_common/np_common.cpp index 1234705cc..4c68fbf7a 100644 --- a/src/core/libraries/np_common/np_common.cpp +++ b/src/core/libraries/np_common/np_common.cpp @@ -6129,7 +6129,7 @@ int PS4_SYSV_ABI Func_FFF4A3E279FB44A7() { return ORBIS_OK; } -void RegisterlibSceNpCommon(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("i8UmXTSq7N4", "libSceNpCommonCompat", 1, "libSceNpCommon", 1, 1, sceNpCmpNpId); LIB_FUNCTION("TcwEFnakiSc", "libSceNpCommonCompat", 1, "libSceNpCommon", 1, 1, sceNpCmpNpIdInOrder); diff --git a/src/core/libraries/np_common/np_common.h b/src/core/libraries/np_common/np_common.h index 886610ccc..2ef3f5e69 100644 --- a/src/core/libraries/np_common/np_common.h +++ b/src/core/libraries/np_common/np_common.h @@ -1241,5 +1241,5 @@ int PS4_SYSV_ABI Func_FE55EE32098D0D58(); int PS4_SYSV_ABI Func_FE79841022E1DA1C(); int PS4_SYSV_ABI Func_FFF4A3E279FB44A7(); -void RegisterlibSceNpCommon(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::NpCommon \ No newline at end of file diff --git a/src/core/libraries/np_manager/np_manager.cpp b/src/core/libraries/np_manager/np_manager.cpp index bc920b5a9..b161a5a50 100644 --- a/src/core/libraries/np_manager/np_manager.cpp +++ b/src/core/libraries/np_manager/np_manager.cpp @@ -2563,7 +2563,7 @@ int PS4_SYSV_ABI sceNpUnregisterStateCallbackForToolkit() { return ORBIS_OK; } -void RegisterlibSceNpManager(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("70N4VzVCpQg", "libSceNpManagerForSys", 1, "libSceNpManager", 1, 1, Func_EF4378573542A508); LIB_FUNCTION("pHLjntY0psg", "libSceNpManager", 1, "libSceNpManager", 1, 1, diff --git a/src/core/libraries/np_manager/np_manager.h b/src/core/libraries/np_manager/np_manager.h index 1078a9f3e..261e40208 100644 --- a/src/core/libraries/np_manager/np_manager.h +++ b/src/core/libraries/np_manager/np_manager.h @@ -542,5 +542,5 @@ int PS4_SYSV_ABI sceNpRegisterStateCallbackForToolkit(OrbisNpStateCallbackForNpT void* userdata); int PS4_SYSV_ABI sceNpUnregisterStateCallbackForToolkit(); -void RegisterlibSceNpManager(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::NpManager diff --git a/src/core/libraries/np_party/np_party.cpp b/src/core/libraries/np_party/np_party.cpp index 8a66ccb22..bd04e64d4 100644 --- a/src/core/libraries/np_party/np_party.cpp +++ b/src/core/libraries/np_party/np_party.cpp @@ -138,7 +138,7 @@ s32 PS4_SYSV_ABI sceNpPartyUnregisterPrivateHandler() { return ORBIS_OK; } -void RegisterlibSceNpParty(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("3e4k2mzLkmc", "libSceNpParty", 1, "libSceNpParty", 1, 1, sceNpPartyCheckCallback); LIB_FUNCTION("nOZRy-slBoA", "libSceNpParty", 1, "libSceNpParty", 1, 1, sceNpPartyCreate); LIB_FUNCTION("XQSUbbnpPBA", "libSceNpParty", 1, "libSceNpParty", 1, 1, sceNpPartyCreateA); diff --git a/src/core/libraries/np_party/np_party.h b/src/core/libraries/np_party/np_party.h index d5f20e4f8..ace565d46 100644 --- a/src/core/libraries/np_party/np_party.h +++ b/src/core/libraries/np_party/np_party.h @@ -40,5 +40,5 @@ s32 PS4_SYSV_ABI sceNpPartyUnregisterPrivateHandler(); s32 PS4_SYSV_ABI module_start(); s32 PS4_SYSV_ABI module_stop(); -void RegisterlibSceNpParty(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::NpParty \ No newline at end of file diff --git a/src/core/libraries/np_score/np_score.cpp b/src/core/libraries/np_score/np_score.cpp index dc16e12d2..e34c872e7 100644 --- a/src/core/libraries/np_score/np_score.cpp +++ b/src/core/libraries/np_score/np_score.cpp @@ -263,7 +263,7 @@ int PS4_SYSV_ABI sceNpScoreWaitAsync() { return ORBIS_OK; } -void RegisterlibSceNpScore(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("1i7kmKbX6hk", "libSceNpScore", 1, "libSceNpScore", 1, 1, sceNpScoreAbortRequest); LIB_FUNCTION("2b3TI0mDYiI", "libSceNpScore", 1, "libSceNpScore", 1, 1, sceNpScoreCensorComment); LIB_FUNCTION("4eOvDyN-aZc", "libSceNpScore", 1, "libSceNpScore", 1, 1, diff --git a/src/core/libraries/np_score/np_score.h b/src/core/libraries/np_score/np_score.h index 3d991efbd..1429075b4 100644 --- a/src/core/libraries/np_score/np_score.h +++ b/src/core/libraries/np_score/np_score.h @@ -63,5 +63,5 @@ int PS4_SYSV_ABI sceNpScoreSetThreadParam(); int PS4_SYSV_ABI sceNpScoreSetTimeout(); int PS4_SYSV_ABI sceNpScoreWaitAsync(); -void RegisterlibSceNpScore(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::NpScore \ No newline at end of file diff --git a/src/core/libraries/np_trophy/np_trophy.cpp b/src/core/libraries/np_trophy/np_trophy.cpp index c0642f81c..ed48bb670 100644 --- a/src/core/libraries/np_trophy/np_trophy.cpp +++ b/src/core/libraries/np_trophy/np_trophy.cpp @@ -1023,7 +1023,7 @@ int PS4_SYSV_ABI Func_FA7A2DD770447552() { return ORBIS_OK; } -void RegisterlibSceNpTrophy(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("aTnHs7W-9Uk", "libSceNpTrophy", 1, "libSceNpTrophy", 1, 1, sceNpTrophyAbortHandle); LIB_FUNCTION("cqGkYAN-gRw", "libSceNpTrophy", 1, "libSceNpTrophy", 1, 1, diff --git a/src/core/libraries/np_trophy/np_trophy.h b/src/core/libraries/np_trophy/np_trophy.h index 9abc795bc..1d200242d 100644 --- a/src/core/libraries/np_trophy/np_trophy.h +++ b/src/core/libraries/np_trophy/np_trophy.h @@ -225,5 +225,5 @@ int PS4_SYSV_ABI Func_9F80071876FFA5F6(); int PS4_SYSV_ABI Func_F8EF6F5350A91990(); int PS4_SYSV_ABI Func_FA7A2DD770447552(); -void RegisterlibSceNpTrophy(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::NpTrophy \ No newline at end of file diff --git a/src/core/libraries/np_web_api/np_web_api.cpp b/src/core/libraries/np_web_api/np_web_api.cpp index 8a7979978..a7c0cdc62 100644 --- a/src/core/libraries/np_web_api/np_web_api.cpp +++ b/src/core/libraries/np_web_api/np_web_api.cpp @@ -509,7 +509,7 @@ s32 PS4_SYSV_ABI Func_F9A32E8685627436() { return ORBIS_OK; } -void RegisterlibSceNpWebApi(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("x1Y7yiYSk7c", "libSceNpWebApiCompat", 1, "libSceNpWebApi", 1, 1, sceNpWebApiCreateContext); LIB_FUNCTION("y5Ta5JCzQHY", "libSceNpWebApiCompat", 1, "libSceNpWebApi", 1, 1, diff --git a/src/core/libraries/np_web_api/np_web_api.h b/src/core/libraries/np_web_api/np_web_api.h index cc007394f..bb3bcbb60 100644 --- a/src/core/libraries/np_web_api/np_web_api.h +++ b/src/core/libraries/np_web_api/np_web_api.h @@ -112,5 +112,5 @@ s32 PS4_SYSV_ABI Func_E324765D18EE4D12(); s32 PS4_SYSV_ABI Func_E789F980D907B653(); s32 PS4_SYSV_ABI Func_F9A32E8685627436(); -void RegisterlibSceNpWebApi(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::NpWebApi \ No newline at end of file diff --git a/src/core/libraries/pad/pad.cpp b/src/core/libraries/pad/pad.cpp index 59964fa58..4aeaeb911 100644 --- a/src/core/libraries/pad/pad.cpp +++ b/src/core/libraries/pad/pad.cpp @@ -761,7 +761,7 @@ int PS4_SYSV_ABI Func_EF103E845B6F0420() { return ORBIS_OK; } -void RegisterlibScePad(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("6ncge5+l5Qs", "libScePad", 1, "libScePad", 1, 1, scePadClose); LIB_FUNCTION("kazv1NzSB8c", "libScePad", 1, "libScePad", 1, 1, scePadConnectPort); LIB_FUNCTION("AcslpN1jHR8", "libScePad", 1, "libScePad", 1, 1, diff --git a/src/core/libraries/pad/pad.h b/src/core/libraries/pad/pad.h index 68943b460..ca6e8a73f 100644 --- a/src/core/libraries/pad/pad.h +++ b/src/core/libraries/pad/pad.h @@ -348,5 +348,5 @@ int PS4_SYSV_ABI Func_51E514BCD3A05CA5(); int PS4_SYSV_ABI Func_89C9237E393DA243(); int PS4_SYSV_ABI Func_EF103E845B6F0420(); -void RegisterlibScePad(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::Pad diff --git a/src/core/libraries/playgo/playgo.cpp b/src/core/libraries/playgo/playgo.cpp index aec32e139..221d6f109 100644 --- a/src/core/libraries/playgo/playgo.cpp +++ b/src/core/libraries/playgo/playgo.cpp @@ -385,7 +385,7 @@ s32 PS4_SYSV_ABI scePlayGoTerminate() { return ORBIS_OK; } -void RegisterlibScePlayGo(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("uEqMfMITvEI", "libSceDbgPlayGo", 1, "libScePlayGo", 1, 0, sceDbgPlayGoRequestNextChunk); LIB_FUNCTION("vU+FqrH+pEY", "libSceDbgPlayGo", 1, "libScePlayGo", 1, 0, sceDbgPlayGoSnapshot); diff --git a/src/core/libraries/playgo/playgo.h b/src/core/libraries/playgo/playgo.h index 2338c9ebf..68a5f1e84 100644 --- a/src/core/libraries/playgo/playgo.h +++ b/src/core/libraries/playgo/playgo.h @@ -41,5 +41,5 @@ s32 PS4_SYSV_ABI scePlayGoSetToDoList(OrbisPlayGoHandle handle, const OrbisPlayG uint32_t numberOfEntries); s32 PS4_SYSV_ABI scePlayGoTerminate(); -void RegisterlibScePlayGo(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::PlayGo \ No newline at end of file diff --git a/src/core/libraries/playgo/playgo_dialog.cpp b/src/core/libraries/playgo/playgo_dialog.cpp index 16f7aa05d..be9a65f1a 100644 --- a/src/core/libraries/playgo/playgo_dialog.cpp +++ b/src/core/libraries/playgo/playgo_dialog.cpp @@ -58,7 +58,7 @@ Status PS4_SYSV_ABI scePlayGoDialogUpdateStatus() { return Status::FINISHED; } -void RegisterlibScePlayGoDialog(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("fbigNQiZpm0", "libScePlayGoDialog", 1, "libScePlayGoDialog", 1, 1, scePlayGoDialogClose); LIB_FUNCTION("wx9TDplJKB4", "libScePlayGoDialog", 1, "libScePlayGoDialog", 1, 1, diff --git a/src/core/libraries/playgo/playgo_dialog.h b/src/core/libraries/playgo/playgo_dialog.h index fa9c64680..d9b991f48 100644 --- a/src/core/libraries/playgo/playgo_dialog.h +++ b/src/core/libraries/playgo/playgo_dialog.h @@ -34,5 +34,5 @@ CommonDialog::Error PS4_SYSV_ABI scePlayGoDialogOpen(const OrbisPlayGoDialogPara CommonDialog::Error PS4_SYSV_ABI scePlayGoDialogTerminate(); CommonDialog::Status PS4_SYSV_ABI scePlayGoDialogUpdateStatus(); -void RegisterlibScePlayGoDialog(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::PlayGo::Dialog diff --git a/src/core/libraries/random/random.cpp b/src/core/libraries/random/random.cpp index f7cc3fd2c..fd2053377 100644 --- a/src/core/libraries/random/random.cpp +++ b/src/core/libraries/random/random.cpp @@ -22,7 +22,7 @@ s32 PS4_SYSV_ABI sceRandomGetRandomNumber(u8* buf, std::size_t size) { return ORBIS_OK; } -void RegisterlibSceRandom(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("PI7jIZj4pcE", "libSceRandom", 1, "libSceRandom", 1, 1, sceRandomGetRandomNumber); }; diff --git a/src/core/libraries/random/random.h b/src/core/libraries/random/random.h index 172494106..9f86a900f 100644 --- a/src/core/libraries/random/random.h +++ b/src/core/libraries/random/random.h @@ -15,6 +15,6 @@ constexpr s32 SCE_RANDOM_MAX_SIZE = 64; s32 PS4_SYSV_ABI sceRandomGetRandomNumber(u8* buf, std::size_t size); -void RegisterlibSceRandom(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::Random diff --git a/src/core/libraries/razor_cpu/razor_cpu.cpp b/src/core/libraries/razor_cpu/razor_cpu.cpp index 99707e972..f5cd952bf 100644 --- a/src/core/libraries/razor_cpu/razor_cpu.cpp +++ b/src/core/libraries/razor_cpu/razor_cpu.cpp @@ -180,7 +180,7 @@ s32 PS4_SYSV_ABI sceRazorCpuWriteBookmark() { return ORBIS_OK; } -void RegisterlibSceRazorCpu(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("JFzLJBlYIJE", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1, sceRazorCpuBeginLogicalFileAccess); LIB_FUNCTION("SfRTRZ1Sh+U", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1, diff --git a/src/core/libraries/razor_cpu/razor_cpu.h b/src/core/libraries/razor_cpu/razor_cpu.h index ec25e44b9..c8ed3c942 100644 --- a/src/core/libraries/razor_cpu/razor_cpu.h +++ b/src/core/libraries/razor_cpu/razor_cpu.h @@ -13,5 +13,5 @@ class SymbolsResolver; } namespace Libraries::RazorCpu { -void RegisterlibSceRazorCpu(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::RazorCpu \ No newline at end of file diff --git a/src/core/libraries/remote_play/remoteplay.cpp b/src/core/libraries/remote_play/remoteplay.cpp index b7402173e..1f2933755 100644 --- a/src/core/libraries/remote_play/remoteplay.cpp +++ b/src/core/libraries/remote_play/remoteplay.cpp @@ -219,7 +219,7 @@ int PS4_SYSV_ABI Func_1D5EE365ED5FADB3() { return ORBIS_OK; } -void RegisterlibSceRemoteplay(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("xQeIryTX7dY", "libSceRemoteplay", 1, "libSceRemoteplay", 0, 0, sceRemoteplayApprove); LIB_FUNCTION("IYZ+Mu+8tPo", "libSceRemoteplay", 1, "libSceRemoteplay", 0, 0, diff --git a/src/core/libraries/remote_play/remoteplay.h b/src/core/libraries/remote_play/remoteplay.h index 979f73a9e..35465d6df 100644 --- a/src/core/libraries/remote_play/remoteplay.h +++ b/src/core/libraries/remote_play/remoteplay.h @@ -58,5 +58,5 @@ int PS4_SYSV_ABI sceRemoteplaySetRpMode(); int PS4_SYSV_ABI sceRemoteplayTerminate(); int PS4_SYSV_ABI Func_1D5EE365ED5FADB3(); -void RegisterlibSceRemoteplay(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::Remoteplay \ No newline at end of file diff --git a/src/core/libraries/save_data/dialog/savedatadialog.cpp b/src/core/libraries/save_data/dialog/savedatadialog.cpp index 2f0619165..3dd6d8ff9 100644 --- a/src/core/libraries/save_data/dialog/savedatadialog.cpp +++ b/src/core/libraries/save_data/dialog/savedatadialog.cpp @@ -139,7 +139,7 @@ Status PS4_SYSV_ABI sceSaveDataDialogUpdateStatus() { return g_status; } -void RegisterlibSceSaveDataDialog(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("fH46Lag88XY", "libSceSaveDataDialog", 1, "libSceSaveDataDialog", 1, 1, sceSaveDataDialogClose); LIB_FUNCTION("yEiJ-qqr6Cg", "libSceSaveDataDialog", 1, "libSceSaveDataDialog", 1, 1, diff --git a/src/core/libraries/save_data/dialog/savedatadialog.h b/src/core/libraries/save_data/dialog/savedatadialog.h index 34afe98a7..39450b36b 100644 --- a/src/core/libraries/save_data/dialog/savedatadialog.h +++ b/src/core/libraries/save_data/dialog/savedatadialog.h @@ -29,5 +29,5 @@ sceSaveDataDialogProgressBarSetValue(OrbisSaveDataDialogProgressBarTarget target CommonDialog::Error PS4_SYSV_ABI sceSaveDataDialogTerminate(); CommonDialog::Status PS4_SYSV_ABI sceSaveDataDialogUpdateStatus(); -void RegisterlibSceSaveDataDialog(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::SaveData::Dialog diff --git a/src/core/libraries/save_data/savedata.cpp b/src/core/libraries/save_data/savedata.cpp index b25ebde6c..62426d461 100644 --- a/src/core/libraries/save_data/savedata.cpp +++ b/src/core/libraries/save_data/savedata.cpp @@ -1723,7 +1723,7 @@ int PS4_SYSV_ABI Func_02E4C4D201716422() { return ORBIS_OK; } -void RegisterlibSceSaveData(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("dQ2GohUHXzk", "libSceSaveData", 1, "libSceSaveData", 1, 1, sceSaveDataAbort); LIB_FUNCTION("z1JA8-iJt3k", "libSceSaveData", 1, "libSceSaveData", 1, 1, sceSaveDataBackup); LIB_FUNCTION("kLJQ3XioYiU", "libSceSaveData", 1, "libSceSaveData", 1, 1, diff --git a/src/core/libraries/save_data/savedata.h b/src/core/libraries/save_data/savedata.h index 5faf3f2d5..d1c625980 100644 --- a/src/core/libraries/save_data/savedata.h +++ b/src/core/libraries/save_data/savedata.h @@ -184,5 +184,5 @@ int PS4_SYSV_ABI sceSaveDataUnregisterEventCallback(); int PS4_SYSV_ABI sceSaveDataUpload(); int PS4_SYSV_ABI Func_02E4C4D201716422(); -void RegisterlibSceSaveData(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::SaveData diff --git a/src/core/libraries/screenshot/screenshot.cpp b/src/core/libraries/screenshot/screenshot.cpp index eaa535de7..9c8e3c189 100644 --- a/src/core/libraries/screenshot/screenshot.cpp +++ b/src/core/libraries/screenshot/screenshot.cpp @@ -78,7 +78,7 @@ int PS4_SYSV_ABI sceScreenShotSetDrcParam() { return ORBIS_OK; } -void RegisterlibSceScreenShot(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("AS45QoYHjc4", "libSceScreenShot", 1, "libSceScreenShot", 0, 9, _Z5dummyv); LIB_FUNCTION("JuMLLmmvRgk", "libSceScreenShot", 1, "libSceScreenShot", 0, 9, sceScreenShotCapture); diff --git a/src/core/libraries/screenshot/screenshot.h b/src/core/libraries/screenshot/screenshot.h index d2fb4a4ea..0aee54173 100644 --- a/src/core/libraries/screenshot/screenshot.h +++ b/src/core/libraries/screenshot/screenshot.h @@ -26,5 +26,5 @@ int PS4_SYSV_ABI sceScreenShotSetOverlayImageWithOrigin(); int PS4_SYSV_ABI sceScreenShotSetParam(); int PS4_SYSV_ABI sceScreenShotSetDrcParam(); -void RegisterlibSceScreenShot(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::ScreenShot \ No newline at end of file diff --git a/src/core/libraries/share_play/shareplay.cpp b/src/core/libraries/share_play/shareplay.cpp index 8370438b9..9815d917b 100644 --- a/src/core/libraries/share_play/shareplay.cpp +++ b/src/core/libraries/share_play/shareplay.cpp @@ -131,7 +131,7 @@ int PS4_SYSV_ABI Func_F3DD6199DA15ED44() { return ORBIS_OK; } -void RegisterlibSceSharePlay(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("ggnCfalLU-8", "libSceSharePlay", 1, "libSceSharePlay", 0, 0, sceSharePlayCrashDaemon); LIB_FUNCTION("OOrLKB0bSDs", "libSceSharePlay", 1, "libSceSharePlay", 0, 0, diff --git a/src/core/libraries/share_play/shareplay.h b/src/core/libraries/share_play/shareplay.h index 8b1ad5f47..d515e02c1 100644 --- a/src/core/libraries/share_play/shareplay.h +++ b/src/core/libraries/share_play/shareplay.h @@ -50,5 +50,5 @@ int PS4_SYSV_ABI Func_C1C236728D88E177(); int PS4_SYSV_ABI Func_E9E80C474781F115(); int PS4_SYSV_ABI Func_F3DD6199DA15ED44(); -void RegisterlibSceSharePlay(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::SharePlay \ No newline at end of file diff --git a/src/core/libraries/signin_dialog/signindialog.cpp b/src/core/libraries/signin_dialog/signindialog.cpp index 0e4eb63a2..6cf0a8a07 100644 --- a/src/core/libraries/signin_dialog/signindialog.cpp +++ b/src/core/libraries/signin_dialog/signindialog.cpp @@ -44,7 +44,7 @@ s32 PS4_SYSV_ABI sceSigninDialogTerminate() { return ORBIS_OK; } -void RegisterlibSceSigninDialog(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("mlYGfmqE3fQ", "libSceSigninDialog", 1, "libSceSigninDialog", 1, 1, sceSigninDialogInitialize); LIB_FUNCTION("JlpJVoRWv7U", "libSceSigninDialog", 1, "libSceSigninDialog", 1, 1, diff --git a/src/core/libraries/signin_dialog/signindialog.h b/src/core/libraries/signin_dialog/signindialog.h index 8726ad1f6..35740efff 100644 --- a/src/core/libraries/signin_dialog/signindialog.h +++ b/src/core/libraries/signin_dialog/signindialog.h @@ -25,5 +25,5 @@ s32 PS4_SYSV_ABI sceSigninDialogGetResult(); s32 PS4_SYSV_ABI sceSigninDialogClose(); s32 PS4_SYSV_ABI sceSigninDialogTerminate(); -void RegisterlibSceSigninDialog(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::SigninDialog diff --git a/src/core/libraries/system/commondialog.cpp b/src/core/libraries/system/commondialog.cpp index cb9ce0442..8c3b819e5 100644 --- a/src/core/libraries/system/commondialog.cpp +++ b/src/core/libraries/system/commondialog.cpp @@ -156,7 +156,7 @@ int PS4_SYSV_ABI Func_F2AEE270605622B0() { return ORBIS_OK; } -void RegisterlibSceCommonDialog(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("2RdicdHhtGA", "libSceCommonDialog", 1, "libSceCommonDialog", 1, 1, _ZN3sce16CommonDialogUtil12getSelfAppIdEv); LIB_FUNCTION("I+tdxsCap08", "libSceCommonDialog", 1, "libSceCommonDialog", 1, 1, diff --git a/src/core/libraries/system/commondialog.h b/src/core/libraries/system/commondialog.h index 6b8ea3d95..cee783e32 100644 --- a/src/core/libraries/system/commondialog.h +++ b/src/core/libraries/system/commondialog.h @@ -81,5 +81,5 @@ int PS4_SYSV_ABI Func_B71349CF15FACAB0(); int PS4_SYSV_ABI Func_CB18E00EFA946C64(); int PS4_SYSV_ABI Func_F2AEE270605622B0(); -void RegisterlibSceCommonDialog(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::CommonDialog diff --git a/src/core/libraries/system/msgdialog.cpp b/src/core/libraries/system/msgdialog.cpp index 8a01f429f..980e361b5 100644 --- a/src/core/libraries/system/msgdialog.cpp +++ b/src/core/libraries/system/msgdialog.cpp @@ -149,7 +149,7 @@ Status PS4_SYSV_ABI sceMsgDialogUpdateStatus() { return g_status; } -void RegisterlibSceMsgDialog(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("HTrcDKlFKuM", "libSceMsgDialog", 1, "libSceMsgDialog", 1, 1, sceMsgDialogClose); LIB_FUNCTION("Lr8ovHH9l6A", "libSceMsgDialog", 1, "libSceMsgDialog", 1, 1, sceMsgDialogGetResult); diff --git a/src/core/libraries/system/msgdialog.h b/src/core/libraries/system/msgdialog.h index b8a1f3f07..9f8c065c3 100644 --- a/src/core/libraries/system/msgdialog.h +++ b/src/core/libraries/system/msgdialog.h @@ -29,5 +29,5 @@ CommonDialog::Error PS4_SYSV_ABI sceMsgDialogProgressBarSetValue(OrbisMsgDialogP CommonDialog::Error PS4_SYSV_ABI sceMsgDialogTerminate(); CommonDialog::Status PS4_SYSV_ABI sceMsgDialogUpdateStatus(); -void RegisterlibSceMsgDialog(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::MsgDialog diff --git a/src/core/libraries/system/posix.cpp b/src/core/libraries/system/posix.cpp index 524c74b90..d09366ca0 100644 --- a/src/core/libraries/system/posix.cpp +++ b/src/core/libraries/system/posix.cpp @@ -5,6 +5,6 @@ namespace Libraries::Posix { -void Registerlibsceposix(Core::Loader::SymbolsResolver* sym) {} +void RegisterLib(Core::Loader::SymbolsResolver* sym) {} } // namespace Libraries::Posix diff --git a/src/core/libraries/system/posix.h b/src/core/libraries/system/posix.h index 881718d7a..4d08a2785 100644 --- a/src/core/libraries/system/posix.h +++ b/src/core/libraries/system/posix.h @@ -8,5 +8,5 @@ class SymbolsResolver; } namespace Libraries::Posix { -void Registerlibsceposix(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::Posix diff --git a/src/core/libraries/system/sysmodule.cpp b/src/core/libraries/system/sysmodule.cpp index d9e78e4ab..7105fd66b 100644 --- a/src/core/libraries/system/sysmodule.cpp +++ b/src/core/libraries/system/sysmodule.cpp @@ -134,7 +134,7 @@ int PS4_SYSV_ABI sceSysmoduleUnloadModuleInternalWithArg() { return ORBIS_OK; } -void RegisterlibSceSysmodule(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("D8cuU4d72xM", "libSceSysmodule", 1, "libSceSysmodule", 1, 1, sceSysmoduleGetModuleHandleInternal); LIB_FUNCTION("4fU5yvOkVG4", "libSceSysmodule", 1, "libSceSysmodule", 1, 1, diff --git a/src/core/libraries/system/sysmodule.h b/src/core/libraries/system/sysmodule.h index 9a5fe9513..27d0e19d4 100644 --- a/src/core/libraries/system/sysmodule.h +++ b/src/core/libraries/system/sysmodule.h @@ -170,5 +170,5 @@ int PS4_SYSV_ABI sceSysmoduleUnloadModuleByNameInternal(); int PS4_SYSV_ABI sceSysmoduleUnloadModuleInternal(); int PS4_SYSV_ABI sceSysmoduleUnloadModuleInternalWithArg(); -void RegisterlibSceSysmodule(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::SysModule diff --git a/src/core/libraries/system/systemservice.cpp b/src/core/libraries/system/systemservice.cpp index 9dc9dd781..d8f0b339b 100644 --- a/src/core/libraries/system/systemservice.cpp +++ b/src/core/libraries/system/systemservice.cpp @@ -2429,7 +2429,7 @@ void PushSystemServiceEvent(const OrbisSystemServiceEvent& event) { g_event_queue.push(event); } -void RegisterlibSceSystemService(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("alZfRdr2RP8", "libSceAppMessaging", 1, "libSceSystemService", 1, 1, sceAppMessagingClearEventFlag); LIB_FUNCTION("jKgAUl6cLy0", "libSceAppMessaging", 1, "libSceSystemService", 1, 1, diff --git a/src/core/libraries/system/systemservice.h b/src/core/libraries/system/systemservice.h index c22ccc88f..fec7be399 100644 --- a/src/core/libraries/system/systemservice.h +++ b/src/core/libraries/system/systemservice.h @@ -607,5 +607,5 @@ int PS4_SYSV_ABI Func_CB5E885E225F69F0(); void PushSystemServiceEvent(const OrbisSystemServiceEvent& event); -void RegisterlibSceSystemService(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::SystemService diff --git a/src/core/libraries/system/userservice.cpp b/src/core/libraries/system/userservice.cpp index b4bf189ea..90571e4bc 100644 --- a/src/core/libraries/system/userservice.cpp +++ b/src/core/libraries/system/userservice.cpp @@ -2167,7 +2167,7 @@ int PS4_SYSV_ABI Func_D2B814603E7B4477() { return ORBIS_OK; } -void RegisterlibSceUserService(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("Psl9mfs3duM", "libSceUserServiceForShellCore", 1, "libSceUserService", 1, 1, sceUserServiceInitializeForShellCore); LIB_FUNCTION("CydP+QtA0KI", "libSceUserServiceForShellCore", 1, "libSceUserService", 1, 1, diff --git a/src/core/libraries/system/userservice.h b/src/core/libraries/system/userservice.h index 66ac2b69d..30920e002 100644 --- a/src/core/libraries/system/userservice.h +++ b/src/core/libraries/system/userservice.h @@ -481,5 +481,5 @@ int PS4_SYSV_ABI Func_A6BDC9DFDAFD02B4(); int PS4_SYSV_ABI Func_BB9491DFE6B4953C(); int PS4_SYSV_ABI Func_D2B814603E7B4477(); -void RegisterlibSceUserService(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::UserService diff --git a/src/core/libraries/ulobjmgr/ulobjmgr.cpp b/src/core/libraries/ulobjmgr/ulobjmgr.cpp index cad6feda9..7f1658b56 100644 --- a/src/core/libraries/ulobjmgr/ulobjmgr.cpp +++ b/src/core/libraries/ulobjmgr/ulobjmgr.cpp @@ -35,7 +35,7 @@ s32 PS4_SYSV_ABI Func_4B07893BBB77A649(u64 arg0) { return ORBIS_OK; } -void RegisterlibSceUlobjmgr(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("BG26hBGiNlw", "ulobjmgr", 1, "ulobjmgr", 1, 1, Func_046DBA8411A2365C); LIB_FUNCTION("HZ9Q2c+4BU4", "ulobjmgr", 1, "ulobjmgr", 1, 1, Func_1D9F50D9CFB8054E); LIB_FUNCTION("Smf+fUNblPc", "ulobjmgr", 1, "ulobjmgr", 1, 1, Func_4A67FE7D435B94F7); diff --git a/src/core/libraries/ulobjmgr/ulobjmgr.h b/src/core/libraries/ulobjmgr/ulobjmgr.h index 9a1440e5c..baf90719c 100644 --- a/src/core/libraries/ulobjmgr/ulobjmgr.h +++ b/src/core/libraries/ulobjmgr/ulobjmgr.h @@ -10,5 +10,5 @@ class SymbolsResolver; } namespace Libraries::Ulobjmgr { -void RegisterlibSceUlobjmgr(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::Ulobjmgr \ No newline at end of file diff --git a/src/core/libraries/usbd/usbd.cpp b/src/core/libraries/usbd/usbd.cpp index e5f6151eb..56280fdc4 100644 --- a/src/core/libraries/usbd/usbd.cpp +++ b/src/core/libraries/usbd/usbd.cpp @@ -478,7 +478,7 @@ int PS4_SYSV_ABI Func_D56B43060720B1E0() { return ORBIS_OK; } -void RegisterlibSceUsbd(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("0ktE1PhzGFU", "libSceUsbd", 1, "libSceUsbd", 1, 1, sceUsbdAllocTransfer); LIB_FUNCTION("BKMEGvfCPyU", "libSceUsbd", 1, "libSceUsbd", 1, 1, sceUsbdAttachKernelDriver); LIB_FUNCTION("fotb7DzeHYw", "libSceUsbd", 1, "libSceUsbd", 1, 1, sceUsbdBulkTransfer); diff --git a/src/core/libraries/usbd/usbd.h b/src/core/libraries/usbd/usbd.h index 3bd8134a7..0841036a4 100644 --- a/src/core/libraries/usbd/usbd.h +++ b/src/core/libraries/usbd/usbd.h @@ -150,5 +150,5 @@ int PS4_SYSV_ABI Func_97F056BAD90AADE7(); int PS4_SYSV_ABI Func_C55104A33B35B264(); int PS4_SYSV_ABI Func_D56B43060720B1E0(); -void RegisterlibSceUsbd(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::Usbd \ No newline at end of file diff --git a/src/core/libraries/videodec/videodec.cpp b/src/core/libraries/videodec/videodec.cpp index ae7d17560..2894080f3 100644 --- a/src/core/libraries/videodec/videodec.cpp +++ b/src/core/libraries/videodec/videodec.cpp @@ -131,7 +131,7 @@ int PS4_SYSV_ABI sceVideodecReset(OrbisVideodecCtrl* pCtrlIn) { return ORBIS_OK; } -void RegisterlibSceVideodec(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("qkgRiwHyheU", "libSceVideodec", 1, "libSceVideodec", 1, 1, sceVideodecCreateDecoder); LIB_FUNCTION("q0W5GJMovMs", "libSceVideodec", 1, "libSceVideodec", 1, 1, sceVideodecDecode); diff --git a/src/core/libraries/videodec/videodec.h b/src/core/libraries/videodec/videodec.h index 45c5a6924..ab4bd9531 100644 --- a/src/core/libraries/videodec/videodec.h +++ b/src/core/libraries/videodec/videodec.h @@ -104,5 +104,5 @@ int PS4_SYSV_ABI sceVideodecQueryResourceInfo(const OrbisVideodecConfigInfo* pCf OrbisVideodecResourceInfo* pRsrcInfoOut); int PS4_SYSV_ABI sceVideodecReset(OrbisVideodecCtrl* pCtrlIn); -void RegisterlibSceVideodec(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::Videodec \ No newline at end of file diff --git a/src/core/libraries/videodec/videodec2.cpp b/src/core/libraries/videodec/videodec2.cpp index 8c91e2bf1..ef14c223f 100644 --- a/src/core/libraries/videodec/videodec2.cpp +++ b/src/core/libraries/videodec/videodec2.cpp @@ -214,7 +214,7 @@ s32 PS4_SYSV_ABI sceVideodec2GetPictureInfo(const OrbisVideodec2OutputInfo* outp return ORBIS_OK; } -void RegisterlibSceVdec2(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("RnDibcGCPKw", "libSceVideodec2", 1, "libSceVideodec2", 1, 1, sceVideodec2QueryComputeMemoryInfo); LIB_FUNCTION("eD+X2SmxUt4", "libSceVideodec2", 1, "libSceVideodec2", 1, 1, diff --git a/src/core/libraries/videodec/videodec2.h b/src/core/libraries/videodec/videodec2.h index 410ee8ea6..0f080129f 100644 --- a/src/core/libraries/videodec/videodec2.h +++ b/src/core/libraries/videodec/videodec2.h @@ -137,5 +137,5 @@ s32 PS4_SYSV_ABI sceVideodec2Reset(OrbisVideodec2Decoder decoder); s32 PS4_SYSV_ABI sceVideodec2GetPictureInfo(const OrbisVideodec2OutputInfo* outputInfo, void* p1stPictureInfo, void* p2ndPictureInfo); -void RegisterlibSceVdec2(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::Vdec2 \ No newline at end of file diff --git a/src/core/libraries/voice/voice.cpp b/src/core/libraries/voice/voice.cpp index caa16431a..7c912d798 100644 --- a/src/core/libraries/voice/voice.cpp +++ b/src/core/libraries/voice/voice.cpp @@ -166,7 +166,7 @@ s32 PS4_SYSV_ABI sceVoiceWriteToIPort() { return ORBIS_OK; } -void RegisterlibSceVoice(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("oV9GAdJ23Gw", "libSceVoice", 1, "libSceVoice", 0, 0, sceVoiceConnectIPortToOPort); LIB_FUNCTION("nXpje5yNpaE", "libSceVoice", 1, "libSceVoice", 0, 0, sceVoiceCreatePort); LIB_FUNCTION("b7kJI+nx2hg", "libSceVoice", 1, "libSceVoice", 0, 0, sceVoiceDeletePort); diff --git a/src/core/libraries/voice/voice.h b/src/core/libraries/voice/voice.h index 8f008f2cc..89467c83c 100644 --- a/src/core/libraries/voice/voice.h +++ b/src/core/libraries/voice/voice.h @@ -52,5 +52,5 @@ s32 PS4_SYSV_ABI sceVoiceVADAdjustment(); s32 PS4_SYSV_ABI sceVoiceVADSetVersion(); s32 PS4_SYSV_ABI sceVoiceWriteToIPort(); -void RegisterlibSceVoice(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::Voice \ No newline at end of file diff --git a/src/core/libraries/web_browser_dialog/webbrowserdialog.cpp b/src/core/libraries/web_browser_dialog/webbrowserdialog.cpp index ee434f96a..0b1206249 100644 --- a/src/core/libraries/web_browser_dialog/webbrowserdialog.cpp +++ b/src/core/libraries/web_browser_dialog/webbrowserdialog.cpp @@ -78,7 +78,7 @@ s32 PS4_SYSV_ABI Func_F2BE042771625F8C() { return ORBIS_OK; } -void RegisterlibSceWebBrowserDialog(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("PSK+Eik919Q", "libSceWebBrowserDialog", 1, "libSceWebBrowserDialog", 1, 1, sceWebBrowserDialogClose); LIB_FUNCTION("Wit4LjeoeX4", "libSceWebBrowserDialog", 1, "libSceWebBrowserDialog", 1, 1, diff --git a/src/core/libraries/web_browser_dialog/webbrowserdialog.h b/src/core/libraries/web_browser_dialog/webbrowserdialog.h index aa118fe45..08f76a4fe 100644 --- a/src/core/libraries/web_browser_dialog/webbrowserdialog.h +++ b/src/core/libraries/web_browser_dialog/webbrowserdialog.h @@ -26,5 +26,5 @@ s32 PS4_SYSV_ABI sceWebBrowserDialogTerminate(); s32 PS4_SYSV_ABI sceWebBrowserDialogUpdateStatus(); s32 PS4_SYSV_ABI Func_F2BE042771625F8C(); -void RegisterlibSceWebBrowserDialog(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::WebBrowserDialog \ No newline at end of file diff --git a/src/core/libraries/zlib/zlib.cpp b/src/core/libraries/zlib/zlib.cpp index b304992ad..639cdc047 100644 --- a/src/core/libraries/zlib/zlib.cpp +++ b/src/core/libraries/zlib/zlib.cpp @@ -172,7 +172,7 @@ s32 PS4_SYSV_ABI sceZlibFinalize() { return ORBIS_OK; } -void RegisterlibSceZlib(Core::Loader::SymbolsResolver* sym) { +void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("m1YErdIXCp4", "libSceZlib", 1, "libSceZlib", 1, 1, sceZlibInitialize); LIB_FUNCTION("6na+Sa-B83w", "libSceZlib", 1, "libSceZlib", 1, 1, sceZlibFinalize); LIB_FUNCTION("TLar1HULv1Q", "libSceZlib", 1, "libSceZlib", 1, 1, sceZlibInflate); diff --git a/src/core/libraries/zlib/zlib_sce.h b/src/core/libraries/zlib/zlib_sce.h index 6f8cf9468..32d738f48 100644 --- a/src/core/libraries/zlib/zlib_sce.h +++ b/src/core/libraries/zlib/zlib_sce.h @@ -17,5 +17,5 @@ s32 PS4_SYSV_ABI sceZlibWaitForDone(u64* request_id, const u32* timeout); s32 PS4_SYSV_ABI sceZlibGetResult(u64 request_id, u32* dst_length, s32* status); s32 PS4_SYSV_ABI sceZlibFinalize(); -void RegisterlibSceZlib(Core::Loader::SymbolsResolver* sym); +void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::Zlib \ No newline at end of file From aeab525a7fc66bedbb449ac7e6986fc922d36e5b Mon Sep 17 00:00:00 2001 From: Stephen Miller <56742918+StevenMiller123@users.noreply.github.com> Date: Wed, 16 Jul 2025 04:30:20 -0500 Subject: [PATCH 07/19] Fix create flag handling in open (#3255) If the create flag is specified, but the file already exists, then the file should open successfully, regardless of permissions. This fixes a crash seen in Phantasy Star Online 2 New Genesis (CUSA29813) --- src/core/libraries/kernel/file_system.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/core/libraries/kernel/file_system.cpp b/src/core/libraries/kernel/file_system.cpp index 76d1a3339..9dd70afc6 100644 --- a/src/core/libraries/kernel/file_system.cpp +++ b/src/core/libraries/kernel/file_system.cpp @@ -118,14 +118,16 @@ s32 PS4_SYSV_ABI open(const char* raw_path, s32 flags, u16 mode) { return -1; } - if (read_only) { - // Can't create files in a read only directory - h->DeleteHandle(handle); - *__Error() = POSIX_EROFS; - return -1; + if (!exists) { + if (read_only) { + // Can't create files in a read only directory + h->DeleteHandle(handle); + *__Error() = POSIX_EROFS; + return -1; + } + // Create a file if it doesn't exist + Common::FS::IOFile out(file->m_host_name, Common::FS::FileAccessMode::Write); } - // Create a file if it doesn't exist - Common::FS::IOFile out(file->m_host_name, Common::FS::FileAccessMode::Write); } else if (!exists) { // If we're not creating a file, and it doesn't exist, return ENOENT h->DeleteHandle(handle); From 68b147488eef593586dad6f1b7bb409b0e5c5770 Mon Sep 17 00:00:00 2001 From: kalaposfos13 <153381648+kalaposfos13@users.noreply.github.com> Date: Wed, 16 Jul 2025 17:03:39 +0200 Subject: [PATCH 08/19] If CONTENT_ID is empty in param.sfo, try using TITLE_ID as fallback (#3258) * If CONTENT_ID is empty in param.sfo, try using TITLE_ID as fallback * Remove assert that is now not needed and fix me switching up variable names --- src/emulator.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/emulator.cpp b/src/emulator.cpp index 480ceee0b..9485b0e23 100644 --- a/src/emulator.cpp +++ b/src/emulator.cpp @@ -99,9 +99,12 @@ void Emulator::Run(std::filesystem::path file, const std::vector ar ASSERT_MSG(param_sfo->Open(param_sfo_path), "Failed to open param.sfo"); const auto content_id = param_sfo->GetString("CONTENT_ID"); - ASSERT_MSG(content_id.has_value(), "Failed to get CONTENT_ID"); - - id = std::string(*content_id, 7, 9); + const auto title_id = param_sfo->GetString("TITLE_ID"); + if (content_id.has_value() && !content_id->empty()) { + id = std::string(*content_id, 7, 9); + } else if (title_id.has_value()) { + id = *title_id; + } title = param_sfo->GetString("TITLE").value_or("Unknown title"); fw_version = param_sfo->GetInteger("SYSTEM_VER").value_or(0x4700000); app_version = param_sfo->GetString("APP_VER").value_or("Unknown version"); From 161aa49f37cb94827bcc574ca374eb2a3748ee7f Mon Sep 17 00:00:00 2001 From: georgemoralis Date: Wed, 16 Jul 2025 18:04:27 +0300 Subject: [PATCH 09/19] New Crowdin updates (#3219) * New translations en_us.ts (Ukrainian) * New translations en_us.ts (Ukrainian) * New translations en_us.ts (Spanish) * New translations en_us.ts (Albanian) * New translations en_us.ts (Polish) * New translations en_us.ts (Polish) * New translations en_us.ts (Turkish) * New translations en_us.ts (German) --- src/qt_gui/translations/de_DE.ts | 49 +++++++++++------------ src/qt_gui/translations/es_ES.ts | 8 +++- src/qt_gui/translations/pl_PL.ts | 68 ++++++++++++++++---------------- src/qt_gui/translations/sq_AL.ts | 2 +- src/qt_gui/translations/tr_TR.ts | 24 +++++------ src/qt_gui/translations/uk_UA.ts | 48 +++++++++++----------- 6 files changed, 101 insertions(+), 98 deletions(-) diff --git a/src/qt_gui/translations/de_DE.ts b/src/qt_gui/translations/de_DE.ts index 46295c164..7e460afb8 100644 --- a/src/qt_gui/translations/de_DE.ts +++ b/src/qt_gui/translations/de_DE.ts @@ -527,71 +527,70 @@ unmapped - unmapped + Nicht zugeordnet L1 - L1 + L1 R1 - R1 + R1 L2 - L2 + L2 Options - Options + Optionen R2 - R2 + R2 Touchpad Left - Touchpad Left + Touchpad Links Touchpad Center - Touchpad Center + Touchpad Mitte Touchpad Right - Touchpad Right + Touchpad Rechts Triangle - Triangle + Dreieck Square - Square + Quadrat Circle - Circle + Kreis Cross - Cross + Kreuz Cannot bind any unique input more than once. Duplicate inputs mapped to the following buttons: %1 - Cannot bind any unique input more than once. Duplicate inputs mapped to the following buttons: - -%1 + %1 +Einzigartige Inputs können nicht öfters als einmal gebunden werden. Input-Duplikate werden auf folgende Knöpfe gebunden Press a button - Press a button + Drücke einen Knopf Move analog stick - Move analog stick + Bewege den Analogstick @@ -778,7 +777,7 @@ Favorite - Favorite + Favoriten @@ -984,11 +983,11 @@ Remove from Favorites - Remove from Favorites + Von Favoriten Entfernen Add to Favorites - Add to Favorites + Zu Favoriten hinzufügen @@ -1226,15 +1225,15 @@ Touchpad Left - Touchpad Left + Touchpad Links Touchpad Center - Touchpad Center + Touchpad Mitte Touchpad Right - Touchpad Right + Touchpad Rechts @@ -2080,7 +2079,7 @@ Hinweis: Der Sound funktioniert nur in Qt-Versionen. * Unsupported Vulkan Version - * Unsupported Vulkan Version + * Nicht unterstützte Vulkan Version diff --git a/src/qt_gui/translations/es_ES.ts b/src/qt_gui/translations/es_ES.ts index 72b18437c..ce434d83f 100644 --- a/src/qt_gui/translations/es_ES.ts +++ b/src/qt_gui/translations/es_ES.ts @@ -581,7 +581,9 @@ Cannot bind any unique input more than once. Duplicate inputs mapped to the following buttons: %1 - No se puede asignar un control único más de una vez. Controles duplicados asignados a los siguientes botones + No se puede asignar un control único más de una vez. Controles duplicados asignados a los siguientes botones: + +%1 Press a button @@ -1218,7 +1220,9 @@ Cannot bind any unique input more than once. Duplicate inputs mapped to the following buttons: %1 - No se puede asignar un control único más de una vez. Controles duplicados asignados a los siguientes botones: + No se puede asignar un control único más de una vez. Controles duplicados asignados a los siguientes botones: + +%1 Touchpad Left diff --git a/src/qt_gui/translations/pl_PL.ts b/src/qt_gui/translations/pl_PL.ts index c5611c5b1..0ea902c5a 100644 --- a/src/qt_gui/translations/pl_PL.ts +++ b/src/qt_gui/translations/pl_PL.ts @@ -527,71 +527,71 @@ unmapped - unmapped + nieprzypisane L1 - L1 + L1 R1 - R1 + R1 L2 - L2 + L2 Options - Options + Options R2 - R2 + R2 Touchpad Left - Touchpad Left + Lewy Touchpad Touchpad Center - Touchpad Center + Środkowy Touchpad Touchpad Right - Touchpad Right + Prawy Touchpad Triangle - Triangle + Trójkąt Square - Square + Kwadrat Circle - Circle + Kółko Cross - Cross + Krzyżyk Cannot bind any unique input more than once. Duplicate inputs mapped to the following buttons: %1 - Cannot bind any unique input more than once. Duplicate inputs mapped to the following buttons: + Nie można zbindować unikalnych akcji więcej niż raz. Zduplikowane akcje są przepisane do następujących przycisków: %1 Press a button - Press a button + Naciśnij przycisk Move analog stick - Move analog stick + Rusz gałką analogową @@ -778,7 +778,7 @@ Favorite - Favorite + Ulubione @@ -984,11 +984,11 @@ Remove from Favorites - Remove from Favorites + Usuń z Ulubionych Add to Favorites - Add to Favorites + Dodaj do Ulubionych @@ -1220,21 +1220,21 @@ Cannot bind any unique input more than once. Duplicate inputs mapped to the following buttons: %1 - Cannot bind any unique input more than once. Duplicate inputs mapped to the following buttons: + Nie można zbindować unikalnych akcji więcej niż raz. Zduplikowane akcje są przepisane do następujących przycisków: %1 Touchpad Left - Touchpad Left + Lewy Touchpad Touchpad Center - Touchpad Center + Środkowy Touchpad Touchpad Right - Touchpad Right + Prawy Touchpad @@ -1457,43 +1457,43 @@ Play - Play + Graj Pause - Pause + Pauza Stop - Stop + Stop Restart - Restart + Restart Full Screen - Full Screen + Pełny ekran Controllers - Controllers + Kontrolery Keyboard - Keyboard + Klawiatura Refresh List - Refresh List + Odśwież Listę Resume - Resume + Wznów Show Labels Under Icons - Show Labels Under Icons + Pokaż etykiety pod ikonami @@ -2076,7 +2076,7 @@ * Unsupported Vulkan Version - * Unsupported Vulkan Version + * Nieobsługiwana wersja Vulkan diff --git a/src/qt_gui/translations/sq_AL.ts b/src/qt_gui/translations/sq_AL.ts index 9908dc564..a0958f348 100644 --- a/src/qt_gui/translations/sq_AL.ts +++ b/src/qt_gui/translations/sq_AL.ts @@ -1220,7 +1220,7 @@ Cannot bind any unique input more than once. Duplicate inputs mapped to the following buttons: %1 - Nuk mund të caktohet e njëjta hyrje unike më shumë se një herë. Hyrjet e dublikuara janë caktuar në butonët e mëposhtëm: + Nuk mund të caktohet e njëjta hyrje unike më shumë se një herë. Hyrjet e dyfishta janë caktuar në butonët e mëposhtëm: %1 diff --git a/src/qt_gui/translations/tr_TR.ts b/src/qt_gui/translations/tr_TR.ts index d4a94b42f..91d856482 100644 --- a/src/qt_gui/translations/tr_TR.ts +++ b/src/qt_gui/translations/tr_TR.ts @@ -531,15 +531,15 @@ L1 - L1 + L1 R1 - R1 + R1 L2 - L2 + L2 Options @@ -547,19 +547,19 @@ R2 - R2 + R2 Touchpad Left - Touchpad Left + Dokunmatik Yüzey Sol Touchpad Center - Touchpad Center + Dokunmatik Yüzey Orta Touchpad Right - Touchpad Right + Dokunmatik Yüzey Sağ Triangle @@ -591,7 +591,7 @@ Move analog stick - Move analog stick + Analog çubuğu taşı @@ -984,7 +984,7 @@ Remove from Favorites - Remove from Favorites + Favorilerden kaldır Add to Favorites @@ -1226,15 +1226,15 @@ Touchpad Left - Touchpad Left + Dokunmatik Yüzey Sol Touchpad Center - Touchpad Center + Dokunmatik Yüzey Orta Touchpad Right - Touchpad Right + Dokunmatik Yüzey Sağ diff --git a/src/qt_gui/translations/uk_UA.ts b/src/qt_gui/translations/uk_UA.ts index 73aa2c352..1f510e018 100644 --- a/src/qt_gui/translations/uk_UA.ts +++ b/src/qt_gui/translations/uk_UA.ts @@ -527,71 +527,71 @@ unmapped - unmapped + Не назначено L1 - L1 + L1 R1 - R1 + R1 L2 - L2 + L2 Options - Options + Опції R2 - R2 + R2 Touchpad Left - Touchpad Left + Ліва сторона сенсору Touchpad Center - Touchpad Center + Середина сенсору Touchpad Right - Touchpad Right + Права сторона сенсору Triangle - Triangle + Трикутник Square - Square + Квадрат Circle - Circle + Коло Cross - Cross + Хрест Cannot bind any unique input more than once. Duplicate inputs mapped to the following buttons: %1 - Cannot bind any unique input more than once. Duplicate inputs mapped to the following buttons: + Неможливо призначити одну й ту саму кнопку більше одного разу. Повторне призначення виявлено для таких кнопок: %1 Press a button - Press a button + Натисніть кнопку Move analog stick - Move analog stick + Перемістити аналоговий стік @@ -778,7 +778,7 @@ Favorite - Favorite + Обране @@ -984,11 +984,11 @@ Remove from Favorites - Remove from Favorites + Видалити з обраного Add to Favorites - Add to Favorites + Додати до обраного @@ -1220,21 +1220,21 @@ Cannot bind any unique input more than once. Duplicate inputs mapped to the following buttons: %1 - Cannot bind any unique input more than once. Duplicate inputs mapped to the following buttons: + Унікальний вхід не може бути призначений двічі. Дублікати на кнопках: %1 Touchpad Left - Touchpad Left + Ліва сторона сенсору Touchpad Center - Touchpad Center + Середина сенсору Touchpad Right - Touchpad Right + Права сторона сенсору @@ -2076,7 +2076,7 @@ * Unsupported Vulkan Version - * Unsupported Vulkan Version + * Непідтримувана версія Vulkan From fddded8d204374febcba210b8e2e325973f973b2 Mon Sep 17 00:00:00 2001 From: kalaposfos13 <153381648+kalaposfos13@users.noreply.github.com> Date: Wed, 16 Jul 2025 17:06:58 +0200 Subject: [PATCH 10/19] Add an unreachable on hitting ud2 instead of getting stuck in an infinite loop (#3257) * Add an unreachable on hitting ud2 instead of getting stuck in an infinite loop * Add [[unlikely]] to get ahead of the inevitable PR review comment --- src/core/cpu_patches.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/core/cpu_patches.cpp b/src/core/cpu_patches.cpp index e4f65cd31..8c0897a48 100644 --- a/src/core/cpu_patches.cpp +++ b/src/core/cpu_patches.cpp @@ -753,6 +753,10 @@ static bool PatchesIllegalInstructionHandler(void* context) { ZydisDecodedOperand operands[ZYDIS_MAX_OPERAND_COUNT]; const auto status = Common::Decoder::Instance()->decodeInstruction(instruction, operands, code_address); + if (ZYAN_SUCCESS(status) && instruction.mnemonic == ZydisMnemonic::ZYDIS_MNEMONIC_UD2) + [[unlikely]] { + UNREACHABLE_MSG("ud2 at code address {:#x}", (u64)code_address); + } LOG_ERROR(Core, "Failed to patch address {:x} -- mnemonic: {}", (u64)code_address, ZYAN_SUCCESS(status) ? ZydisMnemonicGetString(instruction.mnemonic) : "Failed to decode"); From 1689cdb1a298fa2a793653ed735ed72594d7e31a Mon Sep 17 00:00:00 2001 From: georgemoralis Date: Thu, 17 Jul 2025 20:30:14 +0300 Subject: [PATCH 11/19] Update Readme with new compatibility list link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 22fc27a33..06da2d471 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ SPDX-License-Identifier: GPL-2.0-or-later **shadPS4** is an early **PlayStation 4** emulator for **Windows**, **Linux** and **macOS** written in C++. If you encounter problems or have doubts, do not hesitate to look at the [**Quickstart**](https://github.com/shadps4-emu/shadPS4/wiki/I.-Quick-start-%5BUsers%5D).\ -To verify that a game works, you can look at [**shadPS4 Game Compatibility**](https://github.com/shadps4-emu/shadps4-game-compatibility).\ +To verify that a game works, you can look at [**shadPS4 Game Compatibility**](https://github.com/shadps4-compatibility/shadps4-game-compatibility).\ To discuss shadPS4 development, suggest ideas or to ask for help, join our [**Discord server**](https://discord.gg/bFJxfftGW6).\ To get the latest news, go to our [**X (Twitter)**](https://x.com/shadps4) or our [**website**](https://shadps4.net/).\ For those who'd like to donate to the project, we now have a [**Kofi page**](https://ko-fi.com/shadps4)! From e914099ae224a18117a00f534bb63f7d791d5243 Mon Sep 17 00:00:00 2001 From: DanielSvoboda Date: Fri, 18 Jul 2025 04:50:32 -0300 Subject: [PATCH 12/19] new compatibility repository (#3265) --- .github/ISSUE_TEMPLATE/game-bug-report.yaml | 2 +- documents/Debugging/Debugging.md | 2 +- src/qt_gui/compatibility_info.cpp | 4 ++-- src/qt_gui/game_list_frame.cpp | 3 ++- src/qt_gui/gui_context_menus.h | 8 ++++---- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/game-bug-report.yaml b/.github/ISSUE_TEMPLATE/game-bug-report.yaml index d9ebd8347..848877037 100644 --- a/.github/ISSUE_TEMPLATE/game-bug-report.yaml +++ b/.github/ISSUE_TEMPLATE/game-bug-report.yaml @@ -17,7 +17,7 @@ body: This repository does not provide support for game patches. If you are having issues with patches please refer to [Cheats and Patches Repository](https://github.com/shadps4-emu/ps4_cheats). - Before submitting an issue please check [Game Compatibility Repository](https://github.com/shadps4-emu/shadps4-game-compatibility) for the information about the status of the game. + Before submitting an issue please check [Game Compatibility Repository](https://github.com/shadps4-compatibility/shadps4-game-compatibility) for the information about the status of the game. Please make an effort to make sure your issue isn't already reported. diff --git a/documents/Debugging/Debugging.md b/documents/Debugging/Debugging.md index ef9aab879..d2eda61b7 100644 --- a/documents/Debugging/Debugging.md +++ b/documents/Debugging/Debugging.md @@ -147,7 +147,7 @@ Accurately identifying games will help other developers that own that game recog - If your issue is small or you aren't sure whether you have properly identified something, [join the Discord server](https://discord.gg/MyZRaBngxA) and use the #development channel to concisely explain the issue, as well as any findings you currently have. -- It is recommended that you check the [game compatibility issue tracker](https://github.com/shadps4-emu/shadps4-game-compatibility/issues) and post very short summaries of progress changes there, +- It is recommended that you check the [game compatibility issue tracker](https://github.com/shadps4-compatibility/shadps4-game-compatibility/issues) and post very short summaries of progress changes there, (such as the game now booting into the menu or getting in-game) for organizational and status update purposes. - ⚠ **Do not post theoretical, unproven game-specific issues in the emulator issue tracker that you cannot verify and locate in the emulator source code as being a bug.**\ diff --git a/src/qt_gui/compatibility_info.cpp b/src/qt_gui/compatibility_info.cpp index da32f24ae..eecd1bd47 100644 --- a/src/qt_gui/compatibility_info.cpp +++ b/src/qt_gui/compatibility_info.cpp @@ -22,8 +22,8 @@ void CompatibilityInfoClass::UpdateCompatibilityDatabase(QWidget* parent, bool f if (!forced && LoadCompatibilityFile()) return; - QUrl url("https://github.com/shadps4-emu/shadps4-game-compatibility/releases/latest/download/" - "compatibility_data.json"); + QUrl url("https://github.com/shadps4-compatibility/shadps4-game-compatibility/releases/latest/" + "download/compatibility_data.json"); QNetworkRequest request(url); QNetworkReply* reply = m_network_manager->get(request); diff --git a/src/qt_gui/game_list_frame.cpp b/src/qt_gui/game_list_frame.cpp index e4c40b4f9..e0995d3ef 100644 --- a/src/qt_gui/game_list_frame.cpp +++ b/src/qt_gui/game_list_frame.cpp @@ -91,7 +91,8 @@ GameListFrame::GameListFrame(std::shared_ptr gui_settings, connect(this, &QTableWidget::cellClicked, this, [=, this](int row, int column) { if (column == 2 && m_game_info->m_games[row].compatibility.issue_number != "") { - auto url_issues = "https://github.com/shadps4-emu/shadps4-game-compatibility/issues/"; + auto url_issues = + "https://github.com/shadps4-compatibility/shadps4-game-compatibility/issues/"; QDesktopServices::openUrl( QUrl(url_issues + m_game_info->m_games[row].compatibility.issue_number)); } else if (column == 10) { diff --git a/src/qt_gui/gui_context_menus.h b/src/qt_gui/gui_context_menus.h index 6c384c4bc..110421002 100644 --- a/src/qt_gui/gui_context_menus.h +++ b/src/qt_gui/gui_context_menus.h @@ -581,7 +581,7 @@ public: if (selected == viewCompatibilityReport) { if (m_games[itemID].compatibility.issue_number != "") { auto url_issues = - "https://github.com/shadps4-emu/shadps4-game-compatibility/issues/"; + "https://github.com/shadps4-compatibility/shadps4-game-compatibility/issues/"; QDesktopServices::openUrl( QUrl(url_issues + m_games[itemID].compatibility.issue_number)); } @@ -589,8 +589,8 @@ public: if (selected == submitCompatibilityReport) { if (m_games[itemID].compatibility.issue_number == "") { - QUrl url = - QUrl("https://github.com/shadps4-emu/shadps4-game-compatibility/issues/new"); + QUrl url = QUrl("https://github.com/shadps4-compatibility/" + "shadps4-game-compatibility/issues/new"); QUrlQuery query; query.addQueryItem("template", QString("game_compatibility.yml")); query.addQueryItem( @@ -605,7 +605,7 @@ public: QDesktopServices::openUrl(url); } else { auto url_issues = - "https://github.com/shadps4-emu/shadps4-game-compatibility/issues/"; + "https://github.com/shadps4-compatibility/shadps4-game-compatibility/issues/"; QDesktopServices::openUrl( QUrl(url_issues + m_games[itemID].compatibility.issue_number)); } From fafd3fb564886602724da12ce0e72f09d92488e1 Mon Sep 17 00:00:00 2001 From: UltraDaCat <113462733+UltraDaCat@users.noreply.github.com> Date: Fri, 18 Jul 2025 10:20:05 +0200 Subject: [PATCH 13/19] Volume slider that adjusts how loud games are on a global level (#3240) * Update config.cpp * Update config.h * Update sdl_audio.cpp * Update settings_dialog.cpp * Update settings_dialog.h * Update settings_dialog.ui * Update gui_settings.h * Update audioout.cpp * Update audioout.h * Update settings_dialog.cpp * remove leftover settings_dialog.ui * Update settings_dialog.ui --------- Co-authored-by: georgemoralis --- src/common/config.cpp | 11 + src/common/config.h | 2 + src/core/libraries/audio/audioout.cpp | 15 + src/core/libraries/audio/audioout.h | 1 + src/core/libraries/audio/sdl_audio.cpp | 5 +- src/qt_gui/gui_settings.h | 1 + src/qt_gui/settings_dialog.cpp | 31 +- src/qt_gui/settings_dialog.h | 3 +- src/qt_gui/settings_dialog.ui | 403 +++++++++++++++---------- 9 files changed, 304 insertions(+), 168 deletions(-) diff --git a/src/common/config.cpp b/src/common/config.cpp index 6f8563377..a1b12ee5d 100644 --- a/src/common/config.cpp +++ b/src/common/config.cpp @@ -32,6 +32,7 @@ std::filesystem::path find_fs_path_or(const basic_value& v, const K& ky, namespace Config { // General +static int volumeSlider = 100; static bool isNeo = false; static bool isDevKit = false; static bool isPSNSignedIn = false; @@ -108,6 +109,9 @@ static std::string trophyKey = ""; // Expected number of items in the config file static constexpr u64 total_entries = 54; +int getVolumeSlider() { + return volumeSlider; +} bool allowHDR() { return isHDRAllowed; } @@ -157,6 +161,10 @@ std::filesystem::path GetSaveDataPath() { return save_data_path; } +void setVolumeSlider(int volumeValue) { + volumeSlider = volumeValue; +} + void setLoadGameSizeEnabled(bool enable) { load_game_size = enable; } @@ -611,6 +619,7 @@ void load(const std::filesystem::path& path) { if (data.contains("General")) { const toml::value& general = data.at("General"); + volumeSlider = toml::find_or(general, "volumeSlider", volumeSlider); isNeo = toml::find_or(general, "isPS4Pro", isNeo); isDevKit = toml::find_or(general, "isDevKit", isDevKit); isPSNSignedIn = toml::find_or(general, "isPSNSignedIn", isPSNSignedIn); @@ -806,6 +815,7 @@ void save(const std::filesystem::path& path) { fmt::print("Saving new configuration file {}\n", fmt::UTF(path.u8string())); } + data["General"]["volumeSlider"] = volumeSlider; data["General"]["isPS4Pro"] = isNeo; data["General"]["isDevKit"] = isDevKit; data["General"]["isPSNSignedIn"] = isPSNSignedIn; @@ -901,6 +911,7 @@ void save(const std::filesystem::path& path) { void setDefaultValues() { // General + volumeSlider = 100; isNeo = false; isDevKit = false; isPSNSignedIn = false; diff --git a/src/common/config.h b/src/common/config.h index e54425676..4ace4d316 100644 --- a/src/common/config.h +++ b/src/common/config.h @@ -19,6 +19,8 @@ enum HideCursorState : int { Never, Idle, Always }; void load(const std::filesystem::path& path); void save(const std::filesystem::path& path); +int getVolumeSlider(); +void setVolumeSlider(int volumeValue); std::string getTrophyKey(); void setTrophyKey(std::string key); bool getIsFullscreen(); diff --git a/src/core/libraries/audio/audioout.cpp b/src/core/libraries/audio/audioout.cpp index 421289a9d..2ec44e80f 100644 --- a/src/core/libraries/audio/audioout.cpp +++ b/src/core/libraries/audio/audioout.cpp @@ -523,9 +523,24 @@ s32 PS4_SYSV_ABI sceAudioOutSetVolume(s32 handle, s32 flag, s32* vol) { } port.impl->SetVolume(port.volume); } + AdjustVol(); return ORBIS_OK; } +void AdjustVol() { + if (audio == nullptr) { + return; + } + + for (int i = 0; i < ports_out.size(); i++) { + std::unique_lock lock{ports_out[i].mutex}; + if (!ports_out[i].IsOpen()) { + continue; + } + ports_out[i].impl->SetVolume(ports_out[i].volume); + } +} + int PS4_SYSV_ABI sceAudioOutSetVolumeDown() { LOG_ERROR(Lib_AudioOut, "(STUBBED) called"); return ORBIS_OK; diff --git a/src/core/libraries/audio/audioout.h b/src/core/libraries/audio/audioout.h index 4f799665e..5247561ee 100644 --- a/src/core/libraries/audio/audioout.h +++ b/src/core/libraries/audio/audioout.h @@ -181,5 +181,6 @@ int PS4_SYSV_ABI sceAudioOutSystemControlSet(); int PS4_SYSV_ABI sceAudioOutSparkControlSetEqCoef(); int PS4_SYSV_ABI sceAudioOutSetSystemDebugState(); +void AdjustVol(); void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::AudioOut diff --git a/src/core/libraries/audio/sdl_audio.cpp b/src/core/libraries/audio/sdl_audio.cpp index 9aee2b447..94d624b0c 100644 --- a/src/core/libraries/audio/sdl_audio.cpp +++ b/src/core/libraries/audio/sdl_audio.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include "common/logging/log.h" #include "core/libraries/audio/audioout.h" @@ -41,6 +42,7 @@ public: stream = nullptr; return; } + SDL_SetAudioStreamGain(stream, Config::getVolumeSlider() / 100.0f); } ~SDLPortBackend() override { @@ -77,7 +79,8 @@ public: } // SDL does not have per-channel volumes, for now just take the maximum of the channels. const auto vol = *std::ranges::max_element(ch_volumes); - if (!SDL_SetAudioStreamGain(stream, static_cast(vol) / SCE_AUDIO_OUT_VOLUME_0DB)) { + if (!SDL_SetAudioStreamGain(stream, static_cast(vol) / SCE_AUDIO_OUT_VOLUME_0DB * + Config::getVolumeSlider() / 100.0f)) { LOG_WARNING(Lib_AudioOut, "Failed to change SDL audio stream volume: {}", SDL_GetError()); } diff --git a/src/qt_gui/gui_settings.h b/src/qt_gui/gui_settings.h index 4c1eafc95..4d2a1b7f7 100644 --- a/src/qt_gui/gui_settings.h +++ b/src/qt_gui/gui_settings.h @@ -37,6 +37,7 @@ const gui_value gl_showBackgroundImage = gui_value(game_list, "showBackgroundIma const gui_value gl_backgroundImageOpacity = gui_value(game_list, "backgroundImageOpacity", 50); const gui_value gl_playBackgroundMusic = gui_value(game_list, "playBackgroundMusic", true); const gui_value gl_backgroundMusicVolume = gui_value(game_list, "backgroundMusicVolume", 50); +const gui_value gl_VolumeSlider = gui_value(game_list, "volumeSlider", 100); // game grid settings const gui_value gg_icon_size = gui_value(game_grid, "icon_size", 69); diff --git a/src/qt_gui/settings_dialog.cpp b/src/qt_gui/settings_dialog.cpp index f903562f9..b08bb5aee 100644 --- a/src/qt_gui/settings_dialog.cpp +++ b/src/qt_gui/settings_dialog.cpp @@ -11,6 +11,7 @@ #include "common/config.h" #include "common/scm_rev.h" +#include "core/libraries/audio/audioout.h" #include "qt_gui/compatibility_info.h" #ifdef ENABLE_DISCORD_RPC #include "common/discord_rpc_handler.h" @@ -68,6 +69,7 @@ QMap chooseHomeTabMap; int backgroundImageOpacitySlider_backup; int bgm_volume_backup; +int volume_slider_backup; static std::vector m_physical_devices; @@ -149,9 +151,11 @@ SettingsDialog::SettingsDialog(std::shared_ptr gui_settings, } else if (button == ui->buttonBox->button(QDialogButtonBox::Close)) { ui->backgroundImageOpacitySlider->setValue(backgroundImageOpacitySlider_backup); emit BackgroundOpacityChanged(backgroundImageOpacitySlider_backup); + ui->horizontalVolumeSlider->setValue(volume_slider_backup); + Config::setVolumeSlider(volume_slider_backup); ui->BGMVolumeSlider->setValue(bgm_volume_backup); BackgroundMusicPlayer::getInstance().setVolume(bgm_volume_backup); - ResetInstallFolders(); + SyncRealTimeWidgetstoConfig(); } if (Common::Log::IsActive()) { Common::Log::Filter filter; @@ -170,6 +174,12 @@ SettingsDialog::SettingsDialog(std::shared_ptr gui_settings, // GENERAL TAB { + connect(ui->horizontalVolumeSlider, &QSlider::valueChanged, this, [this](int value) { + VolumeSliderChange(value); + Config::setVolumeSlider(value); + Libraries::AudioOut::AdjustVol(); + }); + #ifdef ENABLE_UPDATER #if (QT_VERSION < QT_VERSION_CHECK(6, 7, 0)) connect(ui->updateCheckBox, &QCheckBox::stateChanged, this, [this](int state) { @@ -398,6 +408,8 @@ void SettingsDialog::closeEvent(QCloseEvent* event) { if (!is_saving) { ui->backgroundImageOpacitySlider->setValue(backgroundImageOpacitySlider_backup); emit BackgroundOpacityChanged(backgroundImageOpacitySlider_backup); + ui->horizontalVolumeSlider->setValue(volume_slider_backup); + Config::setVolumeSlider(volume_slider_backup); ui->BGMVolumeSlider->setValue(bgm_volume_backup); BackgroundMusicPlayer::getInstance().setVolume(bgm_volume_backup); } @@ -463,6 +475,8 @@ void SettingsDialog::LoadValuesFromConfig() { ui->radioButton_Bottom->setChecked(side == "bottom"); ui->BGMVolumeSlider->setValue(m_gui_settings->GetValue(gui::gl_backgroundMusicVolume).toInt()); + ui->horizontalVolumeSlider->setValue(m_gui_settings->GetValue(gui::gl_VolumeSlider).toInt()); + ui->volumeText->setText(QString::number(ui->horizontalVolumeSlider->sliderPosition()) + "%"); ui->discordRPCCheckbox->setChecked( toml::find_or(data, "General", "enableDiscordRPC", true)); QString translatedText_FullscreenMode = @@ -532,7 +546,7 @@ void SettingsDialog::LoadValuesFromConfig() { toml::find_or(data, "Input", "isMotionControlsEnabled", true)); ui->removeFolderButton->setEnabled(!ui->gameFoldersListWidget->selectedItems().isEmpty()); - ResetInstallFolders(); + SyncRealTimeWidgetstoConfig(); ui->backgroundImageOpacitySlider->setValue( m_gui_settings->GetValue(gui::gl_backgroundImageOpacity).toInt()); ui->showBackgroundImageCheckBox->setChecked( @@ -541,6 +555,7 @@ void SettingsDialog::LoadValuesFromConfig() { backgroundImageOpacitySlider_backup = m_gui_settings->GetValue(gui::gl_backgroundImageOpacity).toInt(); bgm_volume_backup = m_gui_settings->GetValue(gui::gl_backgroundMusicVolume).toInt(); + volume_slider_backup = m_gui_settings->GetValue(gui::gl_VolumeSlider).toInt(); } void SettingsDialog::InitializeEmulatorLanguages() { @@ -599,6 +614,10 @@ void SettingsDialog::OnCursorStateChanged(s16 index) { } } +void SettingsDialog::VolumeSliderChange(int value) { + ui->volumeText->setText(QString::number(ui->horizontalVolumeSlider->sliderPosition()) + "%"); +} + int SettingsDialog::exec() { return QDialog::exec(); } @@ -719,7 +738,6 @@ bool SettingsDialog::eventFilter(QObject* obj, QEvent* event) { if (qobject_cast(obj)) { bool hovered = (event->type() == QEvent::Enter); QString elementName = obj->objectName(); - if (hovered) { updateNoteTextEdit(elementName); } else { @@ -759,6 +777,7 @@ void SettingsDialog::UpdateSettings() { Config::setCursorState(ui->hideCursorComboBox->currentIndex()); Config::setCursorHideTimeout(ui->idleTimeoutSpinBox->value()); Config::setGpuId(ui->graphicsAdapterBox->currentIndex() - 1); + m_gui_settings->SetValue(gui::gl_VolumeSlider, ui->horizontalVolumeSlider->value()); m_gui_settings->SetValue(gui::gl_backgroundMusicVolume, ui->BGMVolumeSlider->value()); Config::setLanguage(languageIndexes[ui->consoleLanguageComboBox->currentIndex()]); Config::setEnableDiscordRPC(ui->discordRPCCheckbox->isChecked()); @@ -815,9 +834,10 @@ void SettingsDialog::UpdateSettings() { #endif BackgroundMusicPlayer::getInstance().setVolume(ui->BGMVolumeSlider->value()); + Config::setVolumeSlider(ui->horizontalVolumeSlider->value()); } -void SettingsDialog::ResetInstallFolders() { +void SettingsDialog::SyncRealTimeWidgetstoConfig() { ui->gameFoldersListWidget->clear(); std::filesystem::path userdir = Common::FS::GetUserPath(Common::FS::PathType::UserDir); @@ -865,6 +885,7 @@ void SettingsDialog::setDefaultValues() { m_gui_settings->SetValue(gui::gl_backgroundImageOpacity, 50); m_gui_settings->SetValue(gui::gl_playBackgroundMusic, false); m_gui_settings->SetValue(gui::gl_backgroundMusicVolume, 50); + m_gui_settings->SetValue(gui::gl_VolumeSlider, 100); m_gui_settings->SetValue(gui::gen_checkForUpdates, false); m_gui_settings->SetValue(gui::gen_showChangeLog, false); if (Common::g_is_release) { @@ -873,4 +894,4 @@ void SettingsDialog::setDefaultValues() { m_gui_settings->SetValue(gui::gen_updateChannel, "Nightly"); } m_gui_settings->SetValue(gui::gen_guiLanguage, "en_US"); -} \ No newline at end of file +} diff --git a/src/qt_gui/settings_dialog.h b/src/qt_gui/settings_dialog.h index d9fbcb214..13fab36a2 100644 --- a/src/qt_gui/settings_dialog.h +++ b/src/qt_gui/settings_dialog.h @@ -39,12 +39,13 @@ signals: private: void LoadValuesFromConfig(); void UpdateSettings(); - void ResetInstallFolders(); + void SyncRealTimeWidgetstoConfig(); void InitializeEmulatorLanguages(); void OnLanguageChanged(int index); void OnCursorStateChanged(s16 index); void closeEvent(QCloseEvent* event) override; void setDefaultValues(); + void VolumeSliderChange(int value); std::unique_ptr ui; diff --git a/src/qt_gui/settings_dialog.ui b/src/qt_gui/settings_dialog.ui index 8d239b58c..9ebb1cbc1 100644 --- a/src/qt_gui/settings_dialog.ui +++ b/src/qt_gui/settings_dialog.ui @@ -59,7 +59,7 @@ - 5 + 0 @@ -73,8 +73,8 @@ 0 0 - 946 - 536 + 944 + 537 @@ -86,148 +86,7 @@ 6 - - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - Emulator - - - false - - - false - - - - 6 - - - 9 - - - 9 - - - 9 - - - 9 - - - - - 10 - - - - - Show Splash - - - - - - - Enable Discord Rich Presence - - - - - - - - - - - - - - 6 - - - 0 - - - - - - 0 - 0 - - - - - 0 - 0 - - - - System - - - - 70 - - - - - Console Language - - - - - - - - - - - - Emulator Language - - - - - - - - - - - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - + Qt::Orientation::Vertical @@ -240,8 +99,8 @@ - - + + Qt::Orientation::Vertical @@ -253,7 +112,7 @@ - + 6 @@ -427,6 +286,228 @@ + + + + 6 + + + 0 + + + + + + 0 + 0 + + + + + 0 + 0 + + + + System + + + + 70 + + + + + Console Language + + + + + + + + + + + + Emulator Language + + + + + + + + + + + + + + + + + Volume + + + + + + + 0 + 0 + + + + + + + true + + + + + 0 + 0 + 414 + 69 + + + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + 100% + + + Qt::AlignmentFlag::AlignCenter + + + true + + + + + + + Qt::FocusPolicy::StrongFocus + + + 500 + + + 100 + + + 100 + + + Qt::Orientation::Horizontal + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + Emulator + + + false + + + false + + + + 6 + + + 9 + + + 9 + + + 9 + + + 9 + + + + + 10 + + + + + Show Splash + + + + + + + Enable Discord Rich Presence + + + + + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + @@ -444,8 +525,8 @@ 0 0 - 946 - 536 + 944 + 537 @@ -700,7 +781,7 @@ - + 0 0 @@ -893,8 +974,8 @@ 0 0 - 946 - 536 + 944 + 537 @@ -1188,8 +1269,8 @@ 0 0 - 946 - 536 + 944 + 537 @@ -1430,8 +1511,8 @@ 0 0 - 946 - 536 + 944 + 537 @@ -1684,8 +1765,8 @@ 0 0 - 946 - 536 + 944 + 537 @@ -1826,8 +1907,8 @@ 0 0 - 946 - 536 + 944 + 537 From 76f003d38888d357678d29ad182930d56eba17ef Mon Sep 17 00:00:00 2001 From: kalaposfos13 <153381648+kalaposfos13@users.noreply.github.com> Date: Fri, 18 Jul 2025 10:37:29 +0200 Subject: [PATCH 14/19] Disable autoupdate on branches that aren't the official main (#3262) * Disable autoupdate on branches that aren't the official main * Change to status messages because Fire Cube was complaining about this --- CMakeLists.txt | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index adff454b8..24a81243f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -126,7 +126,7 @@ execute_process( # If there's no upstream set or the command failed, check remote.pushDefault if (GIT_REMOTE_RESULT OR GIT_REMOTE_NAME STREQUAL "") - message("check default push") + message(STATUS "check default push") execute_process( COMMAND git config --get remote.pushDefault OUTPUT_VARIABLE GIT_REMOTE_NAME @@ -134,30 +134,30 @@ if (GIT_REMOTE_RESULT OR GIT_REMOTE_NAME STREQUAL "") ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE ) - message("got remote: ${GIT_REMOTE_NAME}") + message(STATUS "got remote: ${GIT_REMOTE_NAME}") endif() # If running in GitHub Actions and the above fails if (GIT_REMOTE_RESULT OR GIT_REMOTE_NAME STREQUAL "") - message("check github") + message(STATUS "check github") set(GIT_REMOTE_NAME "origin") # Retrieve environment variables if (DEFINED ENV{GITHUB_HEAD_REF} AND NOT "$ENV{GITHUB_HEAD_REF}" STREQUAL "") - message("github head ref: $ENV{GITHUB_HEAD_REF}") + message(STATUS "github head ref: $ENV{GITHUB_HEAD_REF}") set(GITHUB_HEAD_REF "$ENV{GITHUB_HEAD_REF}") else() set(GITHUB_HEAD_REF "") endif() if (DEFINED ENV{GITHUB_REF} AND NOT "$ENV{GITHUB_REF}" STREQUAL "") - message("github ref: $ENV{GITHUB_REF}") + message(STATUS "github ref: $ENV{GITHUB_REF}") string(REGEX REPLACE "^refs/[^/]*/" "" GITHUB_BRANCH "$ENV{GITHUB_REF}") string(REGEX MATCH "refs/pull/([0-9]+)/merge" MATCHED_REF "$ENV{GITHUB_REF}") if (MATCHED_REF) set(PR_NUMBER "${CMAKE_MATCH_1}") set(GITHUB_BRANCH "") - message("PR number: ${PR_NUMBER}") + message(STATUS "PR number: ${PR_NUMBER}") else() set(PR_NUMBER "") endif() @@ -179,7 +179,7 @@ if (GIT_REMOTE_RESULT OR GIT_REMOTE_NAME STREQUAL "") elseif ("${PR_NUMBER}" STREQUAL "" AND NOT "${GITHUB_REF}" STREQUAL "") set(GIT_BRANCH "${GITHUB_REF}") elseif("${GIT_BRANCH}" STREQUAL "") - message("couldn't find branch") + message(STATUS "couldn't find branch") set(GIT_BRANCH "detached-head") endif() else() @@ -188,13 +188,13 @@ else() if (INDEX GREATER -1) string(SUBSTRING "${GIT_REMOTE_NAME}" 0 "${INDEX}" GIT_REMOTE_NAME) elseif("${GIT_REMOTE_NAME}" STREQUAL "") - message("reset to origin") + message(STATUS "reset to origin") set(GIT_REMOTE_NAME "origin") endif() endif() # Get remote link -message("getting remote link") +message(STATUS "getting remote link") execute_process( COMMAND git config --get remote.${GIT_REMOTE_NAME}.url OUTPUT_VARIABLE GIT_REMOTE_URL @@ -212,7 +212,12 @@ set(APP_VERSION "${EMULATOR_VERSION_MAJOR}.${EMULATOR_VERSION_MINOR}.${EMULATOR_ set(APP_IS_RELEASE false) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/src/common/scm_rev.cpp.in" "${CMAKE_CURRENT_BINARY_DIR}/src/common/scm_rev.cpp" @ONLY) -message("end git things, remote: ${GIT_REMOTE_NAME}, branch: ${GIT_BRANCH}") +message("-- end git things, remote: ${GIT_REMOTE_NAME}, branch: ${GIT_BRANCH}, link: ${GIT_REMOTE_URL}") + +if(NOT GIT_REMOTE_URL MATCHES "shadps4-emu/shadPS4" OR NOT GIT_BRANCH STREQUAL "main") + message(STATUS "not main, disabling auto update") + set(ENABLE_UPDATER OFF) +endif() if(WIN32 AND ENABLE_QT_GUI AND NOT CMAKE_PREFIX_PATH) include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/DetectQtInstallation.cmake") From 3019bfb9787d296dfd2af568b94809f178ad8f3f Mon Sep 17 00:00:00 2001 From: baggins183 Date: Fri, 18 Jul 2025 02:04:50 -0700 Subject: [PATCH 15/19] Implement MUBUF instructions for shorts/bytes (#2856) * implement loads/store instructions for types smaller than dwords * initialize s16/s8 types * set profile for int8/16/64 * also need to zero extend u8/u16 to u32 result * document unrelated bugs with atomic fmin/max * remove profile checks and simple emit for added opcodes --------- Co-authored-by: georgemoralis --- .../backend/spirv/emit_spirv_atomic.cpp | 2 + .../backend/spirv/emit_spirv_convert.cpp | 68 +++++-------------- .../backend/spirv/emit_spirv_instructions.h | 2 + .../backend/spirv/spirv_emit_context.cpp | 2 + .../frontend/translate/translate.h | 7 +- .../frontend/translate/vector_memory.cpp | 58 ++++++++++++++-- src/shader_recompiler/ir/ir_emitter.cpp | 18 +++++ src/shader_recompiler/ir/ir_emitter.h | 1 + src/shader_recompiler/ir/opcodes.inc | 2 + src/video_core/renderer_vulkan/vk_instance.h | 15 ++++ .../renderer_vulkan/vk_pipeline_cache.cpp | 3 + 11 files changed, 120 insertions(+), 58 deletions(-) diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_atomic.cpp b/src/shader_recompiler/backend/spirv/emit_spirv_atomic.cpp index 80c8b836b..fe2d64d2f 100644 --- a/src/shader_recompiler/backend/spirv/emit_spirv_atomic.cpp +++ b/src/shader_recompiler/backend/spirv/emit_spirv_atomic.cpp @@ -268,6 +268,7 @@ Id EmitBufferAtomicFMin32(EmitContext& ctx, IR::Inst* inst, u32 handle, Id addre const auto sign_bit_set = ctx.OpBitFieldUExtract(ctx.U32[1], u32_value, ctx.ConstU32(31u), ctx.ConstU32(1u)); + // FIXME this needs control flow because it currently executes both atomics const auto result = ctx.OpSelect( ctx.F32[1], sign_bit_set, EmitBitCastF32U32(ctx, EmitBufferAtomicUMax32(ctx, inst, handle, address, u32_value)), @@ -302,6 +303,7 @@ Id EmitBufferAtomicFMax32(EmitContext& ctx, IR::Inst* inst, u32 handle, Id addre const auto sign_bit_set = ctx.OpBitFieldUExtract(ctx.U32[1], u32_value, ctx.ConstU32(31u), ctx.ConstU32(1u)); + // FIXME this needs control flow because it currently executes both atomics const auto result = ctx.OpSelect( ctx.F32[1], sign_bit_set, EmitBitCastF32U32(ctx, EmitBufferAtomicUMin32(ctx, inst, handle, address, u32_value)), diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_convert.cpp b/src/shader_recompiler/backend/spirv/emit_spirv_convert.cpp index c75f43393..2f4984f57 100644 --- a/src/shader_recompiler/backend/spirv/emit_spirv_convert.cpp +++ b/src/shader_recompiler/backend/spirv/emit_spirv_convert.cpp @@ -7,60 +7,32 @@ namespace Shader::Backend::SPIRV { namespace { Id ExtractU16(EmitContext& ctx, Id value) { - if (ctx.profile.support_int16) { - return ctx.OpUConvert(ctx.U16, value); - } else { - return ctx.OpBitFieldUExtract(ctx.U32[1], value, ctx.u32_zero_value, ctx.ConstU32(16u)); - } + return ctx.OpUConvert(ctx.U16, value); } Id ExtractS16(EmitContext& ctx, Id value) { - if (ctx.profile.support_int16) { - return ctx.OpSConvert(ctx.S16, value); - } else { - return ctx.OpBitFieldSExtract(ctx.U32[1], value, ctx.u32_zero_value, ctx.ConstU32(16u)); - } + return ctx.OpSConvert(ctx.S16, value); } Id ExtractU8(EmitContext& ctx, Id value) { - if (ctx.profile.support_int8) { - return ctx.OpUConvert(ctx.U8, value); - } else { - return ctx.OpBitFieldUExtract(ctx.U32[1], value, ctx.u32_zero_value, ctx.ConstU32(8u)); - } + return ctx.OpUConvert(ctx.U8, value); } Id ExtractS8(EmitContext& ctx, Id value) { - if (ctx.profile.support_int8) { - return ctx.OpSConvert(ctx.S8, value); - } else { - return ctx.OpBitFieldSExtract(ctx.U32[1], value, ctx.u32_zero_value, ctx.ConstU32(8u)); - } + return ctx.OpSConvert(ctx.S8, value); } } // Anonymous namespace Id EmitConvertS16F16(EmitContext& ctx, Id value) { - if (ctx.profile.support_int16) { - return ctx.OpSConvert(ctx.U32[1], ctx.OpConvertFToS(ctx.U16, value)); - } else { - return ExtractS16(ctx, ctx.OpConvertFToS(ctx.U32[1], value)); - } + return ctx.OpSConvert(ctx.U32[1], ctx.OpConvertFToS(ctx.U16, value)); } Id EmitConvertS16F32(EmitContext& ctx, Id value) { - if (ctx.profile.support_int16) { - return ctx.OpSConvert(ctx.U32[1], ctx.OpConvertFToS(ctx.U16, value)); - } else { - return ExtractS16(ctx, ctx.OpConvertFToS(ctx.U32[1], value)); - } + return ctx.OpSConvert(ctx.U32[1], ctx.OpConvertFToS(ctx.U16, value)); } Id EmitConvertS16F64(EmitContext& ctx, Id value) { - if (ctx.profile.support_int16) { - return ctx.OpSConvert(ctx.U32[1], ctx.OpConvertFToS(ctx.U16, value)); - } else { - return ExtractS16(ctx, ctx.OpConvertFToS(ctx.U32[1], value)); - } + return ctx.OpSConvert(ctx.U32[1], ctx.OpConvertFToS(ctx.U16, value)); } Id EmitConvertS32F16(EmitContext& ctx, Id value) { @@ -88,27 +60,15 @@ Id EmitConvertS64F64(EmitContext& ctx, Id value) { } Id EmitConvertU16F16(EmitContext& ctx, Id value) { - if (ctx.profile.support_int16) { - return ctx.OpUConvert(ctx.U32[1], ctx.OpConvertFToU(ctx.U16, value)); - } else { - return ExtractU16(ctx, ctx.OpConvertFToU(ctx.U32[1], value)); - } + return ctx.OpUConvert(ctx.U32[1], ctx.OpConvertFToU(ctx.U16, value)); } Id EmitConvertU16F32(EmitContext& ctx, Id value) { - if (ctx.profile.support_int16) { - return ctx.OpUConvert(ctx.U32[1], ctx.OpConvertFToU(ctx.U16, value)); - } else { - return ExtractU16(ctx, ctx.OpConvertFToU(ctx.U32[1], value)); - } + return ctx.OpUConvert(ctx.U32[1], ctx.OpConvertFToU(ctx.U16, value)); } Id EmitConvertU16F64(EmitContext& ctx, Id value) { - if (ctx.profile.support_int16) { - return ctx.OpUConvert(ctx.U32[1], ctx.OpConvertFToU(ctx.U16, value)); - } else { - return ExtractU16(ctx, ctx.OpConvertFToU(ctx.U32[1], value)); - } + return ctx.OpUConvert(ctx.U32[1], ctx.OpConvertFToU(ctx.U16, value)); } Id EmitConvertU32F16(EmitContext& ctx, Id value) { @@ -271,4 +231,12 @@ Id EmitConvertU32U8(EmitContext& ctx, Id value) { return ctx.OpUConvert(ctx.U32[1], value); } +Id EmitConvertS32S8(EmitContext& ctx, Id value) { + return ctx.OpSConvert(ctx.U32[1], value); +} + +Id EmitConvertS32S16(EmitContext& ctx, Id value) { + return ctx.OpSConvert(ctx.U32[1], value); +} + } // namespace Shader::Backend::SPIRV diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_instructions.h b/src/shader_recompiler/backend/spirv/emit_spirv_instructions.h index 37d5d84c9..a8c58bdba 100644 --- a/src/shader_recompiler/backend/spirv/emit_spirv_instructions.h +++ b/src/shader_recompiler/backend/spirv/emit_spirv_instructions.h @@ -488,6 +488,8 @@ Id EmitConvertU16U32(EmitContext& ctx, Id value); Id EmitConvertU32U16(EmitContext& ctx, Id value); Id EmitConvertU8U32(EmitContext& ctx, Id value); Id EmitConvertU32U8(EmitContext& ctx, Id value); +Id EmitConvertS32S8(EmitContext& ctx, Id value); +Id EmitConvertS32S16(EmitContext& ctx, Id value); Id EmitImageSampleRaw(EmitContext& ctx, IR::Inst* inst, u32 handle, Id address1, Id address2, Id address3, Id address4); diff --git a/src/shader_recompiler/backend/spirv/spirv_emit_context.cpp b/src/shader_recompiler/backend/spirv/spirv_emit_context.cpp index f373808d9..a8ffe6ae5 100644 --- a/src/shader_recompiler/backend/spirv/spirv_emit_context.cpp +++ b/src/shader_recompiler/backend/spirv/spirv_emit_context.cpp @@ -117,7 +117,9 @@ void EmitContext::DefineArithmeticTypes() { void_id = Name(TypeVoid(), "void_id"); U1[1] = Name(TypeBool(), "bool_id"); U8 = Name(TypeUInt(8), "u8_id"); + S8 = Name(TypeSInt(8), "i8_id"); U16 = Name(TypeUInt(16), "u16_id"); + S16 = Name(TypeSInt(16), "i16_id"); if (info.uses_fp16) { F16[1] = Name(TypeFloat(16), "f16_id"); U16 = Name(TypeUInt(16), "u16_id"); diff --git a/src/shader_recompiler/frontend/translate/translate.h b/src/shader_recompiler/frontend/translate/translate.h index a29bdc993..ae904b822 100644 --- a/src/shader_recompiler/frontend/translate/translate.h +++ b/src/shader_recompiler/frontend/translate/translate.h @@ -281,9 +281,10 @@ public: // Buffer Memory // MUBUF / MTBUF - void BUFFER_LOAD(u32 num_dwords, bool is_inst_typed, bool is_buffer_typed, const GcnInst& inst); - void BUFFER_STORE(u32 num_dwords, bool is_inst_typed, bool is_buffer_typed, - const GcnInst& inst); + void BUFFER_LOAD(u32 num_dwords, bool is_inst_typed, bool is_buffer_typed, const GcnInst& inst, + u32 scalar_width = 32, bool is_signed = false); + void BUFFER_STORE(u32 num_dwords, bool is_inst_typed, bool is_buffer_typed, const GcnInst& inst, + u32 scalar_width = 32); template void BUFFER_ATOMIC(AtomicOp op, const GcnInst& inst); diff --git a/src/shader_recompiler/frontend/translate/vector_memory.cpp b/src/shader_recompiler/frontend/translate/vector_memory.cpp index df20f7f73..ec9bc200d 100644 --- a/src/shader_recompiler/frontend/translate/vector_memory.cpp +++ b/src/shader_recompiler/frontend/translate/vector_memory.cpp @@ -28,6 +28,15 @@ void Translator::EmitVectorMemory(const GcnInst& inst) { case Opcode::BUFFER_LOAD_FORMAT_XYZW: return BUFFER_LOAD(4, false, true, inst); + case Opcode::BUFFER_LOAD_UBYTE: + return BUFFER_LOAD(1, false, false, inst, 8, false); + case Opcode::BUFFER_LOAD_SBYTE: + return BUFFER_LOAD(1, false, false, inst, 8, true); + case Opcode::BUFFER_LOAD_USHORT: + return BUFFER_LOAD(1, false, false, inst, 16, false); + case Opcode::BUFFER_LOAD_SSHORT: + return BUFFER_LOAD(1, false, false, inst, 16, true); + case Opcode::BUFFER_LOAD_DWORD: return BUFFER_LOAD(1, false, false, inst); case Opcode::BUFFER_LOAD_DWORDX2: @@ -56,6 +65,11 @@ void Translator::EmitVectorMemory(const GcnInst& inst) { case Opcode::TBUFFER_STORE_FORMAT_XYZW: return BUFFER_STORE(4, true, false, inst); + case Opcode::BUFFER_STORE_BYTE: + return BUFFER_STORE(1, false, false, inst, 8); + case Opcode::BUFFER_STORE_SHORT: + return BUFFER_STORE(1, false, false, inst, 16); + case Opcode::BUFFER_STORE_DWORD: return BUFFER_STORE(1, false, false, inst); case Opcode::BUFFER_STORE_DWORDX2: @@ -186,7 +200,7 @@ void Translator::EmitVectorMemory(const GcnInst& inst) { } void Translator::BUFFER_LOAD(u32 num_dwords, bool is_inst_typed, bool is_buffer_typed, - const GcnInst& inst) { + const GcnInst& inst, u32 scalar_width, bool is_signed) { const auto& mubuf = inst.control.mubuf; const bool is_ring = mubuf.glc && mubuf.slc; const IR::VectorReg vaddr{inst.src[0].code}; @@ -242,7 +256,26 @@ void Translator::BUFFER_LOAD(u32 num_dwords, bool is_inst_typed, bool is_buffer_ ir.SetVectorReg(dst_reg + i, IR::F32{ir.CompositeExtract(value, i)}); } } else { - const IR::Value value = ir.LoadBufferU32(num_dwords, handle, address, buffer_info); + IR::Value value; + switch (scalar_width) { + case 8: { + IR::U8 byte_val = ir.LoadBufferU8(handle, address, buffer_info); + value = is_signed ? ir.SConvert(32, byte_val) : ir.UConvert(32, byte_val); + break; + } + case 16: { + IR::U16 short_val = ir.LoadBufferU16(handle, address, buffer_info); + value = is_signed ? ir.SConvert(32, short_val) : ir.UConvert(32, short_val); + break; + } + case 32: + value = ir.LoadBufferU32(num_dwords, handle, address, buffer_info); + break; + + default: + UNREACHABLE(); + } + if (num_dwords == 1) { ir.SetVectorReg(dst_reg, IR::U32{value}); return; @@ -254,7 +287,7 @@ void Translator::BUFFER_LOAD(u32 num_dwords, bool is_inst_typed, bool is_buffer_ } void Translator::BUFFER_STORE(u32 num_dwords, bool is_inst_typed, bool is_buffer_typed, - const GcnInst& inst) { + const GcnInst& inst, u32 scalar_width) { const auto& mubuf = inst.control.mubuf; const bool is_ring = mubuf.glc && mubuf.slc; const IR::VectorReg vaddr{inst.src[0].code}; @@ -314,8 +347,23 @@ void Translator::BUFFER_STORE(u32 num_dwords, bool is_inst_typed, bool is_buffer } ir.StoreBufferFormat(handle, address, ir.CompositeConstruct(comps), buffer_info); } else { - const auto value = num_dwords == 1 ? comps[0] : ir.CompositeConstruct(comps); - ir.StoreBufferU32(num_dwords, handle, address, value, buffer_info); + IR::Value value = num_dwords == 1 ? comps[0] : ir.CompositeConstruct(comps); + if (scalar_width != 32) { + value = ir.UConvert(scalar_width, IR::U32{value}); + } + switch (scalar_width) { + case 8: + ir.StoreBufferU8(handle, address, IR::U8{value}, buffer_info); + break; + case 16: + ir.StoreBufferU16(handle, address, IR::U16{value}, buffer_info); + break; + case 32: + ir.StoreBufferU32(num_dwords, handle, address, value, buffer_info); + break; + default: + UNREACHABLE(); + } } } diff --git a/src/shader_recompiler/ir/ir_emitter.cpp b/src/shader_recompiler/ir/ir_emitter.cpp index 6ca86b2c0..a6d43d102 100644 --- a/src/shader_recompiler/ir/ir_emitter.cpp +++ b/src/shader_recompiler/ir/ir_emitter.cpp @@ -1979,6 +1979,24 @@ U8U16U32U64 IREmitter::UConvert(size_t result_bitsize, const U8U16U32U64& value) throw NotImplementedException("Conversion from {} to {} bits", value.Type(), result_bitsize); } +U8U16U32U64 IR::IREmitter::SConvert(size_t result_bitsize, const U8U16U32U64& value) { + switch (result_bitsize) { + case 32: + switch (value.Type()) { + case Type::U8: + return Inst(Opcode::ConvertS32S8, value); + case Type::U16: + return Inst(Opcode::ConvertS32S16, value); + default: + break; + } + default: + break; + } + throw NotImplementedException("Signed Conversion from {} to {} bits", value.Type(), + result_bitsize); +} + F16F32F64 IREmitter::FPConvert(size_t result_bitsize, const F16F32F64& value) { switch (result_bitsize) { case 16: diff --git a/src/shader_recompiler/ir/ir_emitter.h b/src/shader_recompiler/ir/ir_emitter.h index a105b042d..e4afb8739 100644 --- a/src/shader_recompiler/ir/ir_emitter.h +++ b/src/shader_recompiler/ir/ir_emitter.h @@ -325,6 +325,7 @@ public: const Value& value); [[nodiscard]] U8U16U32U64 UConvert(size_t result_bitsize, const U8U16U32U64& value); + [[nodiscard]] U8U16U32U64 SConvert(size_t result_bitsize, const U8U16U32U64& value); [[nodiscard]] F16F32F64 FPConvert(size_t result_bitsize, const F16F32F64& value); [[nodiscard]] Value ImageAtomicIAdd(const Value& handle, const Value& coords, diff --git a/src/shader_recompiler/ir/opcodes.inc b/src/shader_recompiler/ir/opcodes.inc index 747a27e35..280cd47ec 100644 --- a/src/shader_recompiler/ir/opcodes.inc +++ b/src/shader_recompiler/ir/opcodes.inc @@ -432,6 +432,8 @@ OPCODE(ConvertU16U32, U16, U32, OPCODE(ConvertU32U16, U32, U16, ) OPCODE(ConvertU8U32, U8, U32, ) OPCODE(ConvertU32U8, U32, U8, ) +OPCODE(ConvertS32S8, U32, U8, ) +OPCODE(ConvertS32S16, U32, U16, ) // Image operations OPCODE(ImageSampleRaw, F32x4, Opaque, F32x4, F32x4, F32x4, F32, Opaque, ) diff --git a/src/video_core/renderer_vulkan/vk_instance.h b/src/video_core/renderer_vulkan/vk_instance.h index 9be2d9520..b21e00a71 100644 --- a/src/video_core/renderer_vulkan/vk_instance.h +++ b/src/video_core/renderer_vulkan/vk_instance.h @@ -94,6 +94,21 @@ public: return features.shaderFloat64; } + /// Returns true if 64-bit ints are supported in shaders + bool IsShaderInt64Supported() const { + return features.shaderInt64; + } + + /// Returns true if 16-bit ints are supported in shaders + bool IsShaderInt16Supported() const { + return features.shaderInt16; + } + + /// Returns true if 8-bit ints are supported in shaders + bool IsShaderInt8Supported() const { + return vk12_features.shaderInt8; + } + /// Returns true when VK_EXT_custom_border_color is supported bool IsCustomBorderColorSupported() const { return custom_border_color; diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp index 4de8fd73b..5f8bd1534 100644 --- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp @@ -203,6 +203,9 @@ PipelineCache::PipelineCache(const Instance& instance_, Scheduler& scheduler_, profile = Shader::Profile{ .supported_spirv = SpirvVersion1_6, .subgroup_size = instance.SubgroupSize(), + .support_int8 = instance.IsShaderInt8Supported(), + .support_int16 = instance.IsShaderInt16Supported(), + .support_int64 = instance.IsShaderInt64Supported(), .support_float64 = instance.IsShaderFloat64Supported(), .support_fp32_denorm_preserve = bool(vk12_props.shaderDenormPreserveFloat32), .support_fp32_denorm_flush = bool(vk12_props.shaderDenormFlushToZeroFloat32), From b56039b15af5a79017419fcc5fee202e389caabb Mon Sep 17 00:00:00 2001 From: TheTurtle Date: Fri, 18 Jul 2025 12:25:07 +0300 Subject: [PATCH 16/19] vk_pipeline_cache: Add fallbacks for R8Srgb and B5G6R5 (#3264) * vk_pipeline_cache: Add fallbacks for R8Srgb and B5G6R5 * blit_helper: Fix validation error * renderer_vulkan: Emulate B5G6R5 with swizzle --- src/shader_recompiler/runtime_info.h | 1 + src/video_core/amdgpu/pixel_format.h | 9 +++++++++ .../renderer_vulkan/liverpool_to_vk.cpp | 2 +- .../renderer_vulkan/vk_graphics_pipeline.cpp | 17 ++++++++++++++++- .../renderer_vulkan/vk_graphics_pipeline.h | 1 - src/video_core/renderer_vulkan/vk_instance.cpp | 6 ++++++ .../renderer_vulkan/vk_pipeline_cache.cpp | 15 ++------------- src/video_core/texture_cache/blit_helper.cpp | 4 ++-- src/video_core/texture_cache/image.cpp | 2 +- src/video_core/texture_cache/image_info.cpp | 11 ----------- src/video_core/texture_cache/image_info.h | 1 - src/video_core/texture_cache/texture_cache.cpp | 2 +- 12 files changed, 39 insertions(+), 32 deletions(-) diff --git a/src/shader_recompiler/runtime_info.h b/src/shader_recompiler/runtime_info.h index 6cede44a8..61954bec2 100644 --- a/src/shader_recompiler/runtime_info.h +++ b/src/shader_recompiler/runtime_info.h @@ -171,6 +171,7 @@ enum class MrtSwizzle : u8 { static constexpr u32 MaxColorBuffers = 8; struct PsColorBuffer { + AmdGpu::DataFormat data_format : 6; AmdGpu::NumberFormat num_format : 4; AmdGpu::NumberConversion num_conversion : 3; AmdGpu::Liverpool::ShaderExportFormat export_format : 4; diff --git a/src/video_core/amdgpu/pixel_format.h b/src/video_core/amdgpu/pixel_format.h index bd0f778f4..45c688e57 100644 --- a/src/video_core/amdgpu/pixel_format.h +++ b/src/video_core/amdgpu/pixel_format.h @@ -248,6 +248,15 @@ constexpr CompMapping RemapSwizzle(const DataFormat format, const CompMapping sw result.a = swizzle.r; return result; } + case DataFormat::Format5_6_5: { + // Remap to a more supported component order. + CompMapping result; + result.r = swizzle.b; + result.g = swizzle.g; + result.b = swizzle.r; + result.a = swizzle.a; + return result; + } default: return swizzle; } diff --git a/src/video_core/renderer_vulkan/liverpool_to_vk.cpp b/src/video_core/renderer_vulkan/liverpool_to_vk.cpp index cd597e16c..51411be7f 100644 --- a/src/video_core/renderer_vulkan/liverpool_to_vk.cpp +++ b/src/video_core/renderer_vulkan/liverpool_to_vk.cpp @@ -671,7 +671,7 @@ std::span SurfaceFormats() { vk::Format::eR32G32B32A32Sfloat), // 5_6_5 CreateSurfaceFormatInfo(AmdGpu::DataFormat::Format5_6_5, AmdGpu::NumberFormat::Unorm, - vk::Format::eB5G6R5UnormPack16), + vk::Format::eR5G6B5UnormPack16), // 1_5_5_5 CreateSurfaceFormatInfo(AmdGpu::DataFormat::Format1_5_5_5, AmdGpu::NumberFormat::Unorm, vk::Format::eA1R5G5B5UnormPack16), diff --git a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp index 4d89c83b2..8094bc260 100644 --- a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp +++ b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp @@ -244,9 +244,24 @@ GraphicsPipeline::GraphicsPipeline( const auto depth_format = instance.GetSupportedFormat(LiverpoolToVK::DepthFormat(key.z_format, key.stencil_format), vk::FormatFeatureFlagBits2::eDepthStencilAttachment); + std::array color_formats; + for (s32 i = 0; i < key.num_color_attachments; ++i) { + const auto& col_buf = key.color_buffers[i]; + const auto format = LiverpoolToVK::SurfaceFormat(col_buf.data_format, col_buf.num_format); + const auto color_format = + instance.GetSupportedFormat(format, vk::FormatFeatureFlagBits2::eColorAttachment); + if (!instance.IsFormatSupported(color_format, + vk::FormatFeatureFlagBits2::eColorAttachment)) { + LOG_WARNING(Render_Vulkan, + "color buffer format {} does not support COLOR_ATTACHMENT_BIT", + vk::to_string(color_format)); + } + color_formats[i] = color_format; + } + const vk::PipelineRenderingCreateInfo pipeline_rendering_ci = { .colorAttachmentCount = key.num_color_attachments, - .pColorAttachmentFormats = key.color_formats.data(), + .pColorAttachmentFormats = color_formats.data(), .depthAttachmentFormat = key.z_format != Liverpool::DepthBuffer::ZFormat::Invalid ? depth_format : vk::Format::eUndefined, diff --git a/src/video_core/renderer_vulkan/vk_graphics_pipeline.h b/src/video_core/renderer_vulkan/vk_graphics_pipeline.h index 75b8c8c73..aaf47ba7d 100644 --- a/src/video_core/renderer_vulkan/vk_graphics_pipeline.h +++ b/src/video_core/renderer_vulkan/vk_graphics_pipeline.h @@ -36,7 +36,6 @@ struct GraphicsPipelineKey { std::array vertex_buffer_formats; u32 patch_control_points; u32 num_color_attachments; - std::array color_formats; std::array color_buffers; std::array blend_controls; std::array write_masks; diff --git a/src/video_core/renderer_vulkan/vk_instance.cpp b/src/video_core/renderer_vulkan/vk_instance.cpp index 119c0a367..6e5351ddd 100644 --- a/src/video_core/renderer_vulkan/vk_instance.cpp +++ b/src/video_core/renderer_vulkan/vk_instance.cpp @@ -669,6 +669,12 @@ vk::Format Instance::GetSupportedFormat(const vk::Format format, if (IsFormatSupported(vk::Format::eD32SfloatS8Uint, flags)) { return vk::Format::eD32SfloatS8Uint; } + break; + case vk::Format::eR8Srgb: + if (IsFormatSupported(vk::Format::eR8Unorm, flags)) { + return vk::Format::eR8Unorm; + } + break; default: break; } diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp index 5f8bd1534..bce16cbff 100644 --- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp @@ -315,7 +315,6 @@ bool PipelineCache::RefreshGraphicsKey() { // attachments. This might be not a case as HW color buffers can be bound in an arbitrary // order. We need to do some arrays compaction at this stage key.num_color_attachments = 0; - key.color_formats.fill(vk::Format::eUndefined); key.color_buffers.fill({}); key.blend_controls.fill({}); key.write_masks.fill({}); @@ -351,16 +350,8 @@ bool PipelineCache::RefreshGraphicsKey() { col_buf.GetDataFmt() == AmdGpu::DataFormat::Format8_8 || col_buf.GetDataFmt() == AmdGpu::DataFormat::Format8_8_8_8); - const auto format = - LiverpoolToVK::SurfaceFormat(col_buf.GetDataFmt(), col_buf.GetNumberFmt()); - key.color_formats[remapped_cb] = format; - if (!instance.IsFormatSupported(format, vk::FormatFeatureFlagBits2::eColorAttachment)) { - LOG_WARNING(Render_Vulkan, - "color buffer format {} does not support COLOR_ATTACHMENT_BIT", - vk::to_string(format)); - } - key.color_buffers[remapped_cb] = Shader::PsColorBuffer{ + .data_format = col_buf.GetDataFmt(), .num_format = col_buf.GetNumberFmt(), .num_conversion = col_buf.GetNumberConversion(), .export_format = regs.color_export_format.GetFormat(cb), @@ -479,9 +470,7 @@ bool PipelineCache::RefreshGraphicsKey() { // Attachment is masked out by either color_target_mask or shader mrt_mask. In the case // of the latter we need to change format to undefined, and either way we need to // increment the index for the null attachment binding. - key.color_formats[remapped_cb] = vk::Format::eUndefined; - key.color_buffers[remapped_cb] = {}; - ++remapped_cb; + key.color_buffers[remapped_cb++] = {}; continue; } diff --git a/src/video_core/texture_cache/blit_helper.cpp b/src/video_core/texture_cache/blit_helper.cpp index 1ad41be00..4f1d17547 100644 --- a/src/video_core/texture_cache/blit_helper.cpp +++ b/src/video_core/texture_cache/blit_helper.cpp @@ -126,13 +126,13 @@ void BlitHelper::BlitColorToMsDepth(Image& source, Image& dest) { .minDepth = 0.f, .maxDepth = 1.f, }; - cmdbuf.setViewport(0, viewport); + cmdbuf.setViewportWithCount(viewport); const vk::Rect2D scissor = { .offset = {0, 0}, .extent = {state.width, state.height}, }; - cmdbuf.setScissor(0, scissor); + cmdbuf.setScissorWithCount(scissor); cmdbuf.draw(3, 1, 0, 0); diff --git a/src/video_core/texture_cache/image.cpp b/src/video_core/texture_cache/image.cpp index 7b8ff4403..4ab2e991c 100644 --- a/src/video_core/texture_cache/image.cpp +++ b/src/video_core/texture_cache/image.cpp @@ -21,7 +21,7 @@ static vk::ImageUsageFlags ImageUsageFlags(const ImageInfo& info) { if (info.IsDepthStencil()) { usage |= vk::ImageUsageFlagBits::eDepthStencilAttachment; } else { - if (!info.IsBlockCoded() && !info.IsPacked()) { + if (!info.IsBlockCoded()) { usage |= vk::ImageUsageFlagBits::eColorAttachment; } // In cases where an image is created as a render/depth target and cleared with compute, diff --git a/src/video_core/texture_cache/image_info.cpp b/src/video_core/texture_cache/image_info.cpp index 769c4211f..ed10a20bf 100644 --- a/src/video_core/texture_cache/image_info.cpp +++ b/src/video_core/texture_cache/image_info.cpp @@ -176,17 +176,6 @@ bool ImageInfo::IsBlockCoded() const { } } -bool ImageInfo::IsPacked() const { - switch (pixel_format) { - case vk::Format::eB5G5R5A1UnormPack16: - [[fallthrough]]; - case vk::Format::eB5G6R5UnormPack16: - return true; - default: - return false; - } -} - bool ImageInfo::IsDepthStencil() const { switch (pixel_format) { case vk::Format::eD16Unorm: diff --git a/src/video_core/texture_cache/image_info.h b/src/video_core/texture_cache/image_info.h index dbd7f7cbb..9fa3b6c3d 100644 --- a/src/video_core/texture_cache/image_info.h +++ b/src/video_core/texture_cache/image_info.h @@ -31,7 +31,6 @@ struct ImageInfo { } bool IsBlockCoded() const; - bool IsPacked() const; bool IsDepthStencil() const; bool HasStencil() const; diff --git a/src/video_core/texture_cache/texture_cache.cpp b/src/video_core/texture_cache/texture_cache.cpp index a6657d8d9..a9c65e7ad 100644 --- a/src/video_core/texture_cache/texture_cache.cpp +++ b/src/video_core/texture_cache/texture_cache.cpp @@ -626,7 +626,7 @@ void TextureCache::RefreshImage(Image& image, Vulkan::Scheduler* custom_schedule image_copy.push_back({ .bufferOffset = mip.offset, .bufferRowLength = mip_pitch, - .bufferImageHeight = mip_height, + .bufferImageHeight = mip_height ? std::max(mip_height, 8U) : mip_height, .imageSubresource{ .aspectMask = image.aspect_mask & ~vk::ImageAspectFlagBits::eStencil, .mipLevel = m, From af67473de39e54854827ee25b1ae92bcbd7f0b32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valdis=20Bogd=C4=81ns?= Date: Fri, 18 Jul 2025 12:40:05 +0300 Subject: [PATCH 17/19] Ime lib fixes (#3244) * IME fixes - Moved enums, flags, and structs to ime_common.h to simplify usage with Ime and ImeDialog - Updated Ime to use an enum as the return type, consistent with ImeDialog - Removed duplicate definition of OrbisImeKeycode - Added OrbisImeLanguage as a flags enum - Added missing options to OrbisImeOption - Removed OrbisImeDialogOption; OrbisImeOption should be used instead - Added OrbisImeTextAreaMode - Updated OrbisImeTextAreaMode - Fixed OrbisImeEventParam by adding the missing member OrbisImePanelType panel_type - Updated the sceImeOpen declaration to use extended parameters (not yet implemented) -Fixed Diablo III (CUSA00434) assertion failure on ImeDialog initialization * Ime lib fixes - Updated functions to consistently use the Error enum type for return values. - Added detailed logging to aid future IME/OSK development and debugging. - Now use OrbisUserServiceUserId (s32) and OrbisImeKeycodeState in relevant functions and structs. - Introduced a generic template method to generate full bitmasks for all Orbis flag-style enums, simplifying validation and mask creation. - Implemented additional parameter validations in sceImeOpen. - Added missing enums: OrbisDisableDevice, OrbisImeInputMethodState, OrbisImeInitExtKeyboardMode, OrbisImeKeycodeState, and other USB keyboard-related enums. - Fixed incorrect usage of format specifiers in calls to logging macros (LOG_*). * Data Type Fixes - Replaced the use of the type alias OrbisUserServiceUserId = s32 with Libraries::UserService::OrbisUserServiceUserId directly. * Fixed IDE warnings - generate_full_mask now returns const instead of constexpr. - Added argument list to std::unique_lock construction for clarity. * Clang fixes * Removed unneccessary comment --------- Co-authored-by: w1naenator --- src/core/libraries/ime/ime.cpp | 217 ++++++++++++++++++++++++-- src/core/libraries/ime/ime.h | 7 +- src/core/libraries/ime/ime_common.h | 194 ++++++++++++++++++++--- src/core/libraries/ime/ime_dialog.cpp | 65 ++++++-- 4 files changed, 432 insertions(+), 51 deletions(-) diff --git a/src/core/libraries/ime/ime.cpp b/src/core/libraries/ime/ime.cpp index dc87e486d..360f0fc54 100644 --- a/src/core/libraries/ime/ime.cpp +++ b/src/core/libraries/ime/ime.cpp @@ -65,7 +65,7 @@ public: return Error::OK; } - std::unique_lock lock{g_ime_state.queue_mutex}; + std::unique_lock lock{g_ime_state.queue_mutex}; while (!g_ime_state.event_queue.empty()) { OrbisImeEvent event = g_ime_state.event_queue.front(); @@ -144,17 +144,17 @@ int PS4_SYSV_ABI sceImeCheckUpdateTextInfo() { return ORBIS_OK; } -s32 PS4_SYSV_ABI sceImeClose() { - LOG_INFO(Lib_Ime, "(STUBBED) called"); +Error PS4_SYSV_ABI sceImeClose() { + LOG_INFO(Lib_Ime, "called"); if (!g_ime_handler) { - return ORBIS_IME_ERROR_NOT_OPENED; + return Error::NOT_OPENED; } g_ime_handler.release(); g_ime_ui = ImeUi(); g_ime_state = ImeState(); - return ORBIS_OK; + return Error::OK; } int PS4_SYSV_ABI sceImeConfigGet() { @@ -223,32 +223,68 @@ int PS4_SYSV_ABI sceImeGetPanelPositionAndForm() { } Error PS4_SYSV_ABI sceImeGetPanelSize(const OrbisImeParam* param, u32* width, u32* height) { - LOG_INFO(Lib_Ime, "called"); + LOG_INFO(Lib_Ime, "sceImeGetPanelSize called"); - if (!width || !height) { + if (!param) { + LOG_ERROR(Lib_Ime, "sceImeGetPanelSize: param is NULL"); return Error::INVALID_ADDRESS; } + if (!width) { + LOG_ERROR(Lib_Ime, "sceImeGetPanelSize: width pointer is NULL"); + return Error::INVALID_ADDRESS; + } + if (!height) { + LOG_ERROR(Lib_Ime, "sceImeGetPanelSize: height pointer is NULL"); + return Error::INVALID_ADDRESS; + } + + if (static_cast(param->option) & ~0x7BFF) { // Basic check for invalid options + LOG_ERROR(Lib_Ime, "sceImeGetPanelSize: Invalid option 0x{:X}", + static_cast(param->option)); + return Error::INVALID_OPTION; + } switch (param->type) { case OrbisImeType::Default: + *width = 500; // dummy value + *height = 100; // dummy value + LOG_INFO(Lib_Ime, "sceImeGetPanelSize: IME type Default ({})", + static_cast(param->type)); + break; case OrbisImeType::BasicLatin: + *width = 500; // dummy value + *height = 100; // dummy value + LOG_INFO(Lib_Ime, "sceImeGetPanelSize: IME type BasicLatin ({})", + static_cast(param->type)); + break; case OrbisImeType::Url: + *width = 500; // dummy value + *height = 100; // dummy value + LOG_INFO(Lib_Ime, "sceImeGetPanelSize: IME type Url ({})", static_cast(param->type)); + break; case OrbisImeType::Mail: // We set our custom sizes, commented sizes are the original ones *width = 500; // 793 *height = 100; // 408 + LOG_INFO(Lib_Ime, "sceImeGetPanelSize: IME type Mail ({})", static_cast(param->type)); break; case OrbisImeType::Number: *width = 370; *height = 402; + LOG_INFO(Lib_Ime, "sceImeGetPanelSize: IME type Number ({})", + static_cast(param->type)); break; + default: + LOG_ERROR(Lib_Ime, "sceImeGetPanelSize: Invalid IME type ({})", + static_cast(param->type)); + return Error::INVALID_TYPE; } return Error::OK; } -Error PS4_SYSV_ABI sceImeKeyboardClose(s32 userId) { - LOG_INFO(Lib_Ime, "(STUBBED) called"); +Error PS4_SYSV_ABI sceImeKeyboardClose(Libraries::UserService::OrbisUserServiceUserId userId) { + LOG_INFO(Lib_Ime, "called"); if (!g_keyboard_handler) { return Error::NOT_OPENED; @@ -268,9 +304,12 @@ int PS4_SYSV_ABI sceImeKeyboardGetResourceId() { return ORBIS_OK; } -Error PS4_SYSV_ABI sceImeKeyboardOpen(s32 userId, const OrbisImeKeyboardParam* param) { +Error PS4_SYSV_ABI sceImeKeyboardOpen(Libraries::UserService::OrbisUserServiceUserId userId, + const OrbisImeKeyboardParam* param) { LOG_INFO(Lib_Ime, "called"); + LOG_INFO(Lib_Ime, "kValidImeDialogExtOptionMask=0x{:X}", kValidImeDialogExtOptionMask); + if (!param) { return Error::INVALID_ADDRESS; } @@ -308,13 +347,169 @@ Error PS4_SYSV_ABI sceImeOpen(const OrbisImeParam* param, const OrbisImeParamExt LOG_INFO(Lib_Ime, "called"); if (!param) { + LOG_ERROR(Lib_Ime, "sceImeOpen: param is null"); return Error::INVALID_ADDRESS; + } else { + // LOG_DEBUG values for debugging purposes + LOG_DEBUG(Lib_Ime, "param: user_id={}", param->user_id); + LOG_DEBUG(Lib_Ime, "param: type={}", static_cast(param->type)); + LOG_DEBUG(Lib_Ime, "param: supported_languages={:064b}", + static_cast(param->supported_languages)); + LOG_DEBUG(Lib_Ime, "param: enter_label={}", static_cast(param->enter_label)); + LOG_DEBUG(Lib_Ime, "param: input_method={}", static_cast(param->input_method)); + LOG_DEBUG(Lib_Ime, "param: filter={:p}", reinterpret_cast(param->filter)); + LOG_DEBUG(Lib_Ime, "param: option={:032b}", static_cast(param->option)); + LOG_DEBUG(Lib_Ime, "param: maxTextLength={}", param->maxTextLength); + LOG_DEBUG(Lib_Ime, "param: inputTextBuffer={:p}", + static_cast(param->inputTextBuffer)); + LOG_DEBUG(Lib_Ime, "param: posx={}", param->posx); + LOG_DEBUG(Lib_Ime, "param: posy={}", param->posy); + LOG_DEBUG(Lib_Ime, "param: horizontal_alignment={}", + static_cast(param->horizontal_alignment)); + LOG_DEBUG(Lib_Ime, "param: vertical_alignment={}", + static_cast(param->vertical_alignment)); + LOG_DEBUG(Lib_Ime, "param: work={:p}", param->work); + LOG_DEBUG(Lib_Ime, "param: arg={:p}", param->arg); + LOG_DEBUG(Lib_Ime, "param: handler={:p}", reinterpret_cast(param->handler)); } + + if (!extended) { + LOG_INFO(Lib_Ime, "sceImeOpen: extended is null"); + } else { + // LOG_DEBUG values for debugging purposes + LOG_DEBUG(Lib_Ime, "extended: option={:032b}", static_cast(extended->option)); + LOG_DEBUG(Lib_Ime, "extended: color_base={{{},{},{},{}}}", extended->color_base.r, + extended->color_base.g, extended->color_base.b, extended->color_base.a); + LOG_DEBUG(Lib_Ime, "extended: color_line={{{},{},{},{}}}", extended->color_line.r, + extended->color_line.g, extended->color_line.b, extended->color_line.a); + LOG_DEBUG(Lib_Ime, "extended: color_text_field={{{},{},{},{}}}", + extended->color_text_field.r, extended->color_text_field.g, + extended->color_text_field.b, extended->color_text_field.a); + LOG_DEBUG(Lib_Ime, "extended: color_preedit={{{},{},{},{}}}", extended->color_preedit.r, + extended->color_preedit.g, extended->color_preedit.b, extended->color_preedit.a); + LOG_DEBUG(Lib_Ime, "extended: color_button_default={{{},{},{},{}}}", + extended->color_button_default.r, extended->color_button_default.g, + extended->color_button_default.b, extended->color_button_default.a); + LOG_DEBUG(Lib_Ime, "extended: color_button_function={{{},{},{},{}}}", + extended->color_button_function.r, extended->color_button_function.g, + extended->color_button_function.b, extended->color_button_function.a); + LOG_DEBUG(Lib_Ime, "extended: color_button_symbol={{{},{},{},{}}}", + extended->color_button_symbol.r, extended->color_button_symbol.g, + extended->color_button_symbol.b, extended->color_button_symbol.a); + LOG_DEBUG(Lib_Ime, "extended: color_text={{{},{},{},{}}}", extended->color_text.r, + extended->color_text.g, extended->color_text.b, extended->color_text.a); + LOG_DEBUG(Lib_Ime, "extended: color_special={{{},{},{},{}}}", extended->color_special.r, + extended->color_special.g, extended->color_special.b, extended->color_special.a); + LOG_DEBUG(Lib_Ime, "extended: priority={}", static_cast(extended->priority)); + LOG_DEBUG(Lib_Ime, "extended: additional_dictionary_path={:p}", + static_cast(extended->additional_dictionary_path)); + LOG_DEBUG(Lib_Ime, "extended: ext_keyboard_filter={:p}", + reinterpret_cast(extended->ext_keyboard_filter)); + LOG_DEBUG(Lib_Ime, "extended: disable_device={:032b}", + static_cast(extended->disable_device)); + LOG_DEBUG(Lib_Ime, "extended: ext_keyboard_mode={}", extended->ext_keyboard_mode); + } + + if (param->user_id < 1 || param->user_id > 4) { + LOG_ERROR(Lib_Ime, "sceImeOpen: Invalid user_id ({})", static_cast(param->user_id)); + return Error::INVALID_USER_ID; + } + + if (!magic_enum::enum_contains(param->type)) { + LOG_ERROR(Lib_Ime, "sceImeOpen: Invalid type ({})", static_cast(param->type)); + return Error::INVALID_TYPE; + } + + if (static_cast(param->supported_languages) & ~kValidOrbisImeLanguageMask) { + LOG_ERROR(Lib_Ime, "sceImeOpen: supported_languages has invalid bits (0x{:016X})", + static_cast(param->supported_languages)); + return Error::INVALID_SUPPORTED_LANGUAGES; + } + + if (!magic_enum::enum_contains(param->enter_label)) { + LOG_ERROR(Lib_Ime, "sceImeOpen: Invalid enter_label ({})", + static_cast(param->enter_label)); + return Error::INVALID_ENTER_LABEL; + } + + if (!magic_enum::enum_contains(param->input_method)) { + LOG_ERROR(Lib_Ime, "sceImeOpen: Invalid input_method ({})", + static_cast(param->input_method)); + return Error::INVALID_INPUT_METHOD; + } + + if (static_cast(param->option) & ~kValidImeOptionMask) { + LOG_ERROR(Lib_Ime, "sceImeOpen: option has invalid bits set (0x{:X}), mask=(0x{:X})", + static_cast(param->option), kValidImeOptionMask); + return Error::INVALID_OPTION; + } + + if (param->maxTextLength == 0 || param->maxTextLength > ORBIS_IME_DIALOG_MAX_TEXT_LENGTH) { + LOG_ERROR(Lib_Ime, "sceImeOpen: maxTextLength invalid ({})", param->maxTextLength); + return Error::INVALID_MAX_TEXT_LENGTH; + } + + if (!param->inputTextBuffer) { + LOG_ERROR(Lib_Ime, "sceImeOpen: inputTextBuffer is NULL"); + return Error::INVALID_INPUT_TEXT_BUFFER; + } + + bool useHighRes = True(param->option & OrbisImeOption::USE_OVER_2K_COORDINATES); + const float maxWidth = useHighRes ? 3840.0f : 1920.0f; + const float maxHeight = useHighRes ? 2160.0f : 1080.0f; + + if (param->posx < 0.0f || param->posx >= maxWidth) { + LOG_ERROR(Lib_Ime, "sceImeOpen: posx out of range (%.2f), max allowed %.0f", param->posx, + maxWidth); + return Error::INVALID_POSX; + } + if (param->posy < 0.0f || param->posy >= maxHeight) { + LOG_ERROR(Lib_Ime, "sceImeOpen: posy out of range (%.2f), max allowed %.0f", param->posy, + maxHeight); + return Error::INVALID_POSY; + } + + if (!magic_enum::enum_contains(param->horizontal_alignment)) { + LOG_ERROR(Lib_Ime, "sceImeOpen: Invalid horizontal_alignment ({})", + static_cast(param->horizontal_alignment)); + return Error::INVALID_HORIZONTALIGNMENT; + } + if (!magic_enum::enum_contains(param->vertical_alignment)) { + LOG_ERROR(Lib_Ime, "sceImeOpen: Invalid vertical_alignment ({})", + static_cast(param->vertical_alignment)); + return Error::INVALID_VERTICALALIGNMENT; + } + + if (extended) { + u32 ext_option_value = static_cast(extended->option); + if (ext_option_value & ~kValidImeExtOptionMask) { + LOG_ERROR(Lib_Ime, "sceImeOpen: extended->option has invalid bits set (0x{:X})", + ext_option_value); + return Error::INVALID_EXTENDED; + } + } + + if (!param->work) { + LOG_ERROR(Lib_Ime, "sceImeOpen: work buffer is NULL"); + return Error::INVALID_WORK; + } + + for (unsigned i = 0; i < sizeof(param->reserved); ++i) { + if (param->reserved[i] != 0) { + LOG_ERROR(Lib_Ime, "sceImeOpen: reserved field must be zeroed"); + return Error::INVALID_RESERVED; + } + } + + // Todo: validate arg and handler + if (g_ime_handler) { + LOG_ERROR(Lib_Ime, "sceImeOpen: Error BUSY"); return Error::BUSY; } g_ime_handler = std::make_unique(param); + LOG_INFO(Lib_Ime, "sceImeOpen: OK"); return Error::OK; } @@ -324,7 +519,7 @@ int PS4_SYSV_ABI sceImeOpenInternal() { } void PS4_SYSV_ABI sceImeParamInit(OrbisImeParam* param) { - LOG_INFO(Lib_Ime, "called"); + LOG_INFO(Lib_Ime, "sceImeParamInit called"); if (!param) { return; diff --git a/src/core/libraries/ime/ime.h b/src/core/libraries/ime/ime.h index 6691965b8..555ac0f7d 100644 --- a/src/core/libraries/ime/ime.h +++ b/src/core/libraries/ime/ime.h @@ -18,7 +18,7 @@ int PS4_SYSV_ABI InitializeImeModule(); int PS4_SYSV_ABI sceImeCheckFilterText(); int PS4_SYSV_ABI sceImeCheckRemoteEventParam(); int PS4_SYSV_ABI sceImeCheckUpdateTextInfo(); -int PS4_SYSV_ABI sceImeClose(); +Error PS4_SYSV_ABI sceImeClose(); int PS4_SYSV_ABI sceImeConfigGet(); int PS4_SYSV_ABI sceImeConfigSet(); int PS4_SYSV_ABI sceImeConfirmCandidate(); @@ -33,10 +33,11 @@ int PS4_SYSV_ABI sceImeFilterText(); int PS4_SYSV_ABI sceImeForTestFunction(); int PS4_SYSV_ABI sceImeGetPanelPositionAndForm(); Error PS4_SYSV_ABI sceImeGetPanelSize(const OrbisImeParam* param, u32* width, u32* height); -Error PS4_SYSV_ABI sceImeKeyboardClose(s32 userId); +Error PS4_SYSV_ABI sceImeKeyboardClose(Libraries::UserService::OrbisUserServiceUserId userId); int PS4_SYSV_ABI sceImeKeyboardGetInfo(); int PS4_SYSV_ABI sceImeKeyboardGetResourceId(); -Error PS4_SYSV_ABI sceImeKeyboardOpen(s32 userId, const OrbisImeKeyboardParam* param); +Error PS4_SYSV_ABI sceImeKeyboardOpen(Libraries::UserService::OrbisUserServiceUserId userId, + const OrbisImeKeyboardParam* param); int PS4_SYSV_ABI sceImeKeyboardOpenInternal(); int PS4_SYSV_ABI sceImeKeyboardSetMode(); int PS4_SYSV_ABI sceImeKeyboardUpdate(); diff --git a/src/core/libraries/ime/ime_common.h b/src/core/libraries/ime/ime_common.h index 5c0030030..13f2bfa8f 100644 --- a/src/core/libraries/ime/ime_common.h +++ b/src/core/libraries/ime/ime_common.h @@ -3,6 +3,8 @@ #pragma once +#include +#include #include "common/enum.h" #include "common/types.h" #include "core/libraries/rtc/rtc.h" @@ -10,8 +12,28 @@ constexpr u32 ORBIS_IME_MAX_TEXT_LENGTH = 2048; constexpr u32 ORBIS_IME_DIALOG_MAX_TEXT_LENGTH = 2048; +template +const std::underlying_type_t generate_full_mask() { + static_assert(std::is_enum_v, "E must be an enum type."); + static_assert(magic_enum::customize::enum_range::is_flags, + "E must be marked as is_flags = true."); + + using U = std::underlying_type_t; + const auto values = magic_enum::enum_values(); + U mask = 0; + + // Use index-based loop for better constexpr compatibility + for (std::size_t i = 0; i < values.size(); ++i) { + mask |= static_cast(values[i]); + } + + return mask; +} + enum class Error : u32 { OK = 0x0, + + // ImeDialog library BUSY = 0x80bc0001, NOT_OPENED = 0x80bc0002, NO_MEMORY = 0x80bc0003, @@ -46,6 +68,8 @@ enum class Error : u32 { INVALID_RESERVED = 0x80bc0032, INVALID_TIMING = 0x80bc0033, INTERNAL = 0x80bc00ff, + + // Ime library DIALOG_INVALID_TITLE = 0x80bc0101, DIALOG_NOT_RUNNING = 0x80bc0105, DIALOG_NOT_FINISHED = 0x80bc0106, @@ -67,9 +91,44 @@ enum class OrbisImeOption : u32 { DISABLE_POSITION_ADJUSTMENT = 2048, EXPANDED_PREEDIT_BUFFER = 4096, USE_JAPANESE_EISUU_KEY_AS_CAPSLOCK = 8192, - USE_2K_COORDINATES = 16384, + USE_OVER_2K_COORDINATES = 16384, }; DECLARE_ENUM_FLAG_OPERATORS(OrbisImeOption); +template <> +struct magic_enum::customize::enum_range { + static constexpr bool is_flags = true; +}; +const u32 kValidImeOptionMask = generate_full_mask(); + +enum class OrbisImeExtOption : u32 { + DEFAULT = 0x00000000, + SET_PRIORITY = 0x00000002, + PRIORITY_FULL_WIDTH = 0x00000008, + PRIORITY_FIXED_PANEL = 0x00000010, + DISABLE_POINTER = 0x00000040, + ENABLE_ADDITIONAL_DICTIONARY = 0x00000080, + DISABLE_STARTUP_SE = 0x00000100, + DISABLE_LIST_FOR_EXT_KEYBOARD = 0x00000200, + HIDE_KEYPANEL_IF_EXT_KEYBOARD = 0x00000400, + INIT_EXT_KEYBOARD_MODE = 0x00000800, + + ENABLE_ACCESSIBILITY = 0x00001000, // ImeDialog unly + ADDITIONAL_DICTIONARY_PRIORITY_MODE = 0x00004000, // ImeDialog only +}; +DECLARE_ENUM_FLAG_OPERATORS(OrbisImeExtOption); + +constexpr u32 kValidImeExtOptionMask = static_cast( + OrbisImeExtOption::SET_PRIORITY | OrbisImeExtOption::PRIORITY_FULL_WIDTH | + OrbisImeExtOption::PRIORITY_FIXED_PANEL | OrbisImeExtOption::DISABLE_POINTER | + OrbisImeExtOption::ENABLE_ADDITIONAL_DICTIONARY | OrbisImeExtOption::DISABLE_STARTUP_SE | + OrbisImeExtOption::DISABLE_LIST_FOR_EXT_KEYBOARD | + OrbisImeExtOption::HIDE_KEYPANEL_IF_EXT_KEYBOARD | OrbisImeExtOption::INIT_EXT_KEYBOARD_MODE); + +template <> +struct magic_enum::customize::enum_range { + static constexpr bool is_flags = true; +}; +const u32 kValidImeDialogExtOptionMask = generate_full_mask(); enum class OrbisImeLanguage : u64 { DANISH = 0x0000000000000001, @@ -105,6 +164,112 @@ enum class OrbisImeLanguage : u64 { }; DECLARE_ENUM_FLAG_OPERATORS(OrbisImeLanguage); +template <> +struct magic_enum::customize::enum_range { + static constexpr bool is_flags = true; +}; +const u64 kValidOrbisImeLanguageMask = generate_full_mask(); + +enum class OrbisImeDisableDevice : u32 { + DEFAULT = 0x00000000, + CONTROLLER = 0x00000001, + EXT_KEYBOARD = 0x00000002, + REMOTE_OSK = 0x00000004, +}; +DECLARE_ENUM_FLAG_OPERATORS(OrbisImeDisableDevice); +template <> +struct magic_enum::customize::enum_range { + static constexpr bool is_flags = true; +}; +const u32 kValidOrbisImeDisableDeviceMask = generate_full_mask(); + +enum class OrbisImeInputMethodState : u32 { + PREEDIT = 0x01000000, + SELECTED = 0x02000000, + NATIVE = 0x04000000, + NATIVE2 = 0x08000000, + FULL_WIDTH = 0x10000000, +}; +DECLARE_ENUM_FLAG_OPERATORS(OrbisImeInputMethodState); +template <> +struct magic_enum::customize::enum_range { + static constexpr bool is_flags = true; +}; +const u32 kValidOrbisImeInputMethodStateMask = generate_full_mask(); + +enum class OrbisImeInitExtKeyboardMode : u32 { + ISABLE_ARABIC_INDIC_NUMERALS = 0x00000001, + ENABLE_FORMAT_CHARACTERS = 0x00000002, + INPUT_METHOD_STATE_NATIVE = 0x04000000, + INPUT_METHOD_STATE_NATIVE2 = 0x08000000, + INPUT_METHOD_STATE_FULL_WIDTH = 0x10000000, +}; +DECLARE_ENUM_FLAG_OPERATORS(OrbisImeInitExtKeyboardMode); +template <> +struct magic_enum::customize::enum_range { + static constexpr bool is_flags = true; +}; +const u32 kValidOrbisImeInitExtKeyboardModeMask = generate_full_mask(); + +enum class OrbisImeKeycodeState : u32 { + KEYCODE_VALID = 0x00000001, + CHARACTER_VALID = 0x00000002, + WITH_IME = 0x00000004, + FROM_OSK = 0x00000008, + FROM_OSK_SHORTCUT = 0x00000010, + FROM_IME_OPERATION = 0x00000020, + REPLACE_CHARACTER = 0x00000040, + CONTINUOUS_EVENT = 0x00000080, + MODIFIER_L_CTRL = 0x00000100, + MODIFIER_L_SHIFT = 0x00000200, + MODIFIER_L_ALT = 0x00000400, + MODIFIER_L_GUI = 0x00000800, + MODIFIER_R_CTRL = 0x00001000, + MODIFIER_R_SHIFT = 0x00002000, + MODIFIER_R_ALT = 0x00004000, + MODIFIER_R_GUI = 0x00008000, + LED_NUM_LOCK = 0x00010000, + LED_CAPS_LOCK = 0x00020000, + LED_SCROLL_LOCK = 0x00040000, + RESERVED1 = 0x00080000, + RESERVED2 = 0x00100000, + FROM_IME_INPUT = 0x00200000, +}; +DECLARE_ENUM_FLAG_OPERATORS(OrbisImeKeycodeState); +template <> +struct magic_enum::customize::enum_range { + static constexpr bool is_flags = true; +}; +const u32 kValidOrbisImeKeycodeStateMask = generate_full_mask(); + +enum class OrbisImeKeyboardOption : u32 { + Default = 0, + Repeat = 1, + RepeatEachKey = 2, + AddOsk = 4, + EffectiveWithIme = 8, + DisableResume = 16, + DisableCapslockWithoutShift = 32, +}; +DECLARE_ENUM_FLAG_OPERATORS(OrbisImeKeyboardOption) +template <> +struct magic_enum::customize::enum_range { + static constexpr bool is_flags = true; +}; +const u32 kValidOrbisImeKeyboardOptionMask = generate_full_mask(); + +enum class OrbisImeKeyboardMode : u32 { + Auto = 0, + Manual = 1, + Alphabet = 0, + Native = 2, + Part = 4, + Katakana = 8, + Hkana = 16, + ArabicIndicNumerals = 32, + DisableFormatCharacters = 64, +}; + enum class OrbisImeType : u32 { Default = 0, BasicLatin = 1, @@ -260,13 +425,13 @@ struct OrbisImeKeycode { char16_t character; u32 status; OrbisImeKeyboardType type; - s32 user_id; // Todo: switch to OrbisUserServiceUserId + Libraries::UserService::OrbisUserServiceUserId user_id; u32 resource_id; Libraries::Rtc::OrbisRtcTick timestamp; }; struct OrbisImeKeyboardResourceIdArray { - s32 user_id; // Todo: switch to OrbisUserServiceUserId + Libraries::UserService::OrbisUserServiceUserId user_id; u32 resource_id[5]; }; @@ -322,17 +487,6 @@ using OrbisImeTextFilter = PS4_SYSV_ABI int (*)(char16_t* outText, u32* outTextL using OrbisImeEventHandler = PS4_SYSV_ABI void (*)(void* arg, const OrbisImeEvent* e); -enum class OrbisImeKeyboardOption : u32 { - Default = 0, - Repeat = 1, - RepeatEachKey = 2, - AddOsk = 4, - EffectiveWithIme = 8, - DisableResume = 16, - DisableCapslockWithoutShift = 32, -}; -DECLARE_ENUM_FLAG_OPERATORS(OrbisImeKeyboardOption) - struct OrbisImeKeyboardParam { OrbisImeKeyboardOption option; s8 reserved1[4]; @@ -342,9 +496,9 @@ struct OrbisImeKeyboardParam { }; struct OrbisImeParam { - s32 user_id; // Todo: switch to OrbisUserServiceUserId + Libraries::UserService::OrbisUserServiceUserId user_id; OrbisImeType type; - u64 supported_languages; // OrbisImeLanguage flags + OrbisImeLanguage supported_languages; OrbisImeEnterLabel enter_label; OrbisImeInputMethod input_method; OrbisImeTextFilter filter; @@ -369,9 +523,9 @@ struct OrbisImeCaret { }; struct OrbisImeDialogParam { - s32 user_id; + Libraries::UserService::OrbisUserServiceUserId user_id; OrbisImeType type; - u64 supported_languages; // OrbisImeLanguage flags + OrbisImeLanguage supported_languages; OrbisImeEnterLabel enter_label; OrbisImeInputMethod input_method; OrbisImeTextFilter filter; @@ -388,7 +542,7 @@ struct OrbisImeDialogParam { }; struct OrbisImeParamExtended { - u32 option; // OrbisImeExtOption flags + OrbisImeExtOption option; OrbisImeColor color_base; OrbisImeColor color_line; OrbisImeColor color_text_field; @@ -401,7 +555,7 @@ struct OrbisImeParamExtended { OrbisImePanelPriority priority; char* additional_dictionary_path; OrbisImeExtKeyboardFilter ext_keyboard_filter; - u32 disable_device; + OrbisImeDisableDevice disable_device; u32 ext_keyboard_mode; s8 reserved[60]; }; diff --git a/src/core/libraries/ime/ime_dialog.cpp b/src/core/libraries/ime/ime_dialog.cpp index 21bb47bfc..6578b6249 100644 --- a/src/core/libraries/ime/ime_dialog.cpp +++ b/src/core/libraries/ime/ime_dialog.cpp @@ -149,20 +149,47 @@ OrbisImeDialogStatus PS4_SYSV_ABI sceImeDialogGetStatus() { } Error PS4_SYSV_ABI sceImeDialogInit(OrbisImeDialogParam* param, OrbisImeParamExtended* extended) { - LOG_INFO(Lib_ImeDialog, ">> sceImeDialogInit: entering, param={}, extended={}", + LOG_INFO(Lib_ImeDialog, "sceImeDialogInit: entering, param={}, extended={}", static_cast(param), static_cast(extended)); - if (g_ime_dlg_status != OrbisImeDialogStatus::None) { - LOG_ERROR(Lib_ImeDialog, "sceImeDialogInit: busy (status=%u)", (u32)g_ime_dlg_status); - return Error::BUSY; - } if (param == nullptr) { LOG_ERROR(Lib_ImeDialog, "sceImeDialogInit: param is null"); return Error::INVALID_ADDRESS; + } else { + LOG_INFO(Lib_ImeDialog, "sceImeDialogInit: param.user_id = {}", + static_cast(param->user_id)); + LOG_INFO(Lib_ImeDialog, "sceImeDialogInit: param.type = {}", static_cast(param->type)); + LOG_INFO(Lib_ImeDialog, "sceImeDialogInit: param.supported_languages = 0x{:X}", + static_cast(param->supported_languages)); + LOG_INFO(Lib_ImeDialog, "sceImeDialogInit: param.enter_label = {}", + static_cast(param->enter_label)); + LOG_INFO(Lib_ImeDialog, "sceImeDialogInit: param.input_method = {}", + static_cast(param->input_method)); + LOG_INFO(Lib_ImeDialog, "sceImeDialogInit: param.filter = {}", (void*)param->filter); + LOG_INFO(Lib_ImeDialog, "sceImeDialogInit: param.option = 0x{:X}", + static_cast(param->option)); + LOG_INFO(Lib_ImeDialog, "sceImeDialogInit: param.max_text_length = {}", + param->max_text_length); + LOG_INFO(Lib_ImeDialog, "sceImeDialogInit: param.input_text_buffer = {}", + (void*)param->input_text_buffer); + LOG_INFO(Lib_ImeDialog, "sceImeDialogInit: param.posx = {}", param->posx); + LOG_INFO(Lib_ImeDialog, "sceImeDialogInit: param.posy = {}", param->posy); + LOG_INFO(Lib_ImeDialog, "sceImeDialogInit: param.horizontal_alignment = {}", + static_cast(param->horizontal_alignment)); + LOG_INFO(Lib_ImeDialog, "sceImeDialogInit: param.vertical_alignment = {}", + static_cast(param->vertical_alignment)); + LOG_INFO(Lib_ImeDialog, "sceImeDialogInit: param.placeholder = {}", + param->placeholder ? "" : "NULL"); + LOG_INFO(Lib_ImeDialog, "sceImeDialogInit: param.title = {}", + param->title ? "" : "NULL"); + } + if (g_ime_dlg_status != OrbisImeDialogStatus::None) { + LOG_ERROR(Lib_ImeDialog, "sceImeDialogInit: busy (status={})", (u32)g_ime_dlg_status); + return Error::BUSY; } if (!magic_enum::enum_contains(param->type)) { - LOG_ERROR(Lib_ImeDialog, "sceImeDialogInit: invalid param->type=%u", (u32)param->type); + LOG_ERROR(Lib_ImeDialog, "sceImeDialogInit: invalid param->type={}", (u32)param->type); return Error::INVALID_ADDRESS; } @@ -170,14 +197,16 @@ Error PS4_SYSV_ABI sceImeDialogInit(OrbisImeDialogParam* param, OrbisImeParamExt // TODO: do correct param->supportedLanguages validation if (param->posx < 0.0f || - param->posx >= MAX_X_POSITIONS[False(param->option & OrbisImeOption::USE_2K_COORDINATES)]) { - LOG_ERROR(Lib_ImeDialog, "sceImeDialogInit: invalid posx=%f", param->posx); + param->posx >= + MAX_X_POSITIONS[False(param->option & OrbisImeOption::USE_OVER_2K_COORDINATES)]) { + LOG_ERROR(Lib_ImeDialog, "sceImeDialogInit: invalid posx={}", param->posx); return Error::INVALID_POSX; } if (param->posy < 0.0f || - param->posy >= MAX_Y_POSITIONS[False(param->option & OrbisImeOption::USE_2K_COORDINATES)]) { - LOG_ERROR(Lib_ImeDialog, "sceImeDialogInit: invalid posy=%f", param->posy); + param->posy >= + MAX_Y_POSITIONS[False(param->option & OrbisImeOption::USE_OVER_2K_COORDINATES)]) { + LOG_ERROR(Lib_ImeDialog, "sceImeDialogInit: invalid posy={}", param->posy); return Error::INVALID_POSY; } @@ -192,7 +221,7 @@ Error PS4_SYSV_ABI sceImeDialogInit(OrbisImeDialogParam* param, OrbisImeParamExt } if (!IsValidOption(param->option, param->type)) { - LOG_ERROR(Lib_ImeDialog, "sceImeDialogInit: invalid option=0x%X for type=%u", + LOG_ERROR(Lib_ImeDialog, "sceImeDialogInit: invalid option=0x{:X}for type={}", static_cast(param->option), (u32)param->type); return Error::INVALID_PARAM; } @@ -204,25 +233,27 @@ Error PS4_SYSV_ABI sceImeDialogInit(OrbisImeDialogParam* param, OrbisImeParamExt if (extended) { if (!magic_enum::enum_contains(extended->priority)) { - LOG_INFO(Lib_ImeDialog, "Invalid extended->priority"); + LOG_INFO(Lib_ImeDialog, "sceImeDialogInit: Invalid extended->priority"); return Error::INVALID_EXTENDED; } // TODO: do correct extended->option validation if ((extended->ext_keyboard_mode & 0xe3fffffc) != 0) { - LOG_INFO(Lib_ImeDialog, "Invalid extended->extKeyboardMode"); + LOG_INFO(Lib_ImeDialog, "sceImeDialogInit: Invalid extended->extKeyboardMode"); return Error::INVALID_EXTENDED; } - if (extended->disable_device > 7) { - LOG_INFO(Lib_ImeDialog, "Invalid extended->disableDevice"); + if (static_cast(extended->disable_device) & ~kValidOrbisImeDisableDeviceMask) { + LOG_ERROR(Lib_ImeDialog, + "sceImeDialogInit: disable_device has invalid bits set (0x{:X})", + static_cast(extended->disable_device)); return Error::INVALID_EXTENDED; } } if (param->max_text_length == 0 || param->max_text_length > ORBIS_IME_MAX_TEXT_LENGTH) { - LOG_ERROR(Lib_ImeDialog, "sceImeDialogInit: invalid max_text_length=%u", + LOG_ERROR(Lib_ImeDialog, "sceImeDialogInit: invalid max_text_length={}", param->max_text_length); return Error::INVALID_MAX_TEXT_LENGTH; } @@ -238,7 +269,7 @@ Error PS4_SYSV_ABI sceImeDialogInit(OrbisImeDialogParam* param, OrbisImeParamExt g_ime_dlg_status = OrbisImeDialogStatus::Running; g_ime_dlg_ui = ImeDialogUi(&g_ime_dlg_state, &g_ime_dlg_status, &g_ime_dlg_result); - LOG_INFO(Lib_ImeDialog, "<< sceImeDialogInit: successful, status now=Running"); + LOG_INFO(Lib_ImeDialog, "sceImeDialogInit: successful, status now=Running"); return Error::OK; } From 2ae7037c089d17b166ca2645d86b822dc227c0ba Mon Sep 17 00:00:00 2001 From: TheTurtle Date: Fri, 18 Jul 2025 13:14:41 +0300 Subject: [PATCH 18/19] texture_cache: Clamp buffer image height to microtile height (#3261) Co-authored-by: georgemoralis --- src/video_core/buffer_cache/buffer_cache.cpp | 6 +++--- .../texture_cache/texture_cache.cpp | 19 +++++++++---------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/video_core/buffer_cache/buffer_cache.cpp b/src/video_core/buffer_cache/buffer_cache.cpp index 42e3c61a5..c5e5d18f8 100644 --- a/src/video_core/buffer_cache/buffer_cache.cpp +++ b/src/video_core/buffer_cache/buffer_cache.cpp @@ -961,15 +961,15 @@ bool BufferCache::SynchronizeBufferFromImage(Buffer& buffer, VAddr device_addr, const u32 height = std::max(image.info.size.height >> m, 1u); const u32 depth = image.info.props.is_volume ? std::max(image.info.size.depth >> m, 1u) : 1u; - const auto& [mip_size, mip_pitch, mip_height, mip_ofs] = image.info.mips_layout[m]; + const auto [mip_size, mip_pitch, mip_height, mip_ofs] = image.info.mips_layout[m]; offset += mip_ofs; if (offset + mip_size > max_offset) { break; } copies.push_back({ .bufferOffset = offset, - .bufferRowLength = static_cast(mip_pitch), - .bufferImageHeight = static_cast(mip_height), + .bufferRowLength = mip_pitch, + .bufferImageHeight = mip_height, .imageSubresource{ .aspectMask = image.aspect_mask & ~vk::ImageAspectFlagBits::eStencil, .mipLevel = m, diff --git a/src/video_core/texture_cache/texture_cache.cpp b/src/video_core/texture_cache/texture_cache.cpp index a9c65e7ad..fa24728ad 100644 --- a/src/video_core/texture_cache/texture_cache.cpp +++ b/src/video_core/texture_cache/texture_cache.cpp @@ -605,28 +605,27 @@ void TextureCache::RefreshImage(Image& image, Vulkan::Scheduler* custom_schedule const u32 height = std::max(image.info.size.height >> m, 1u); const u32 depth = image.info.props.is_volume ? std::max(image.info.size.depth >> m, 1u) : 1u; - const auto& mip = image.info.mips_layout[m]; + const auto [mip_size, mip_pitch, mip_height, mip_offset] = image.info.mips_layout[m]; // Protect GPU modified resources from accidental CPU reuploads. if (is_gpu_modified && !is_gpu_dirty) { const u8* addr = std::bit_cast(image.info.guest_address); - const u64 hash = XXH3_64bits(addr + mip.offset, mip.size); + const u64 hash = XXH3_64bits(addr + mip_offset, mip_size); if (image.mip_hashes[m] == hash) { continue; } image.mip_hashes[m] = hash; } - auto mip_pitch = static_cast(mip.pitch); - auto mip_height = static_cast(mip.height); - - auto image_extent_width = mip_pitch ? std::min(mip_pitch, width) : width; - auto image_extent_height = mip_height ? std::min(mip_height, height) : height; + const u32 extent_width = mip_pitch ? std::min(mip_pitch, width) : width; + const u32 extent_height = mip_height ? std::min(mip_height, height) : height; + const u32 height_aligned = + mip_height && image.info.IsTiled() ? std::max(mip_height, 8U) : mip_height; image_copy.push_back({ - .bufferOffset = mip.offset, + .bufferOffset = mip_offset, .bufferRowLength = mip_pitch, - .bufferImageHeight = mip_height ? std::max(mip_height, 8U) : mip_height, + .bufferImageHeight = height_aligned, .imageSubresource{ .aspectMask = image.aspect_mask & ~vk::ImageAspectFlagBits::eStencil, .mipLevel = m, @@ -634,7 +633,7 @@ void TextureCache::RefreshImage(Image& image, Vulkan::Scheduler* custom_schedule .layerCount = num_layers, }, .imageOffset = {0, 0, 0}, - .imageExtent = {image_extent_width, image_extent_height, depth}, + .imageExtent = {extent_width, extent_height, depth}, }); } From 0b72a795eb12532c359ebbe9a507b7fbab105b49 Mon Sep 17 00:00:00 2001 From: TheTurtle Date: Sat, 19 Jul 2025 02:39:54 +0300 Subject: [PATCH 19/19] vk_rasterizer: Improve stencil clears (#3268) --- src/video_core/renderer_vulkan/vk_rasterizer.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index c5f894b10..c3e221739 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -1211,11 +1211,13 @@ void Rasterizer::UpdateDepthStencilState() const { } : front_ops; dynamic_state.SetStencilOps(front_ops, back_ops); + const bool stencil_clear = regs.depth_render_control.stencil_clear_enable; const auto front = regs.stencil_ref_front; const auto back = regs.depth_control.backface_enable ? regs.stencil_ref_back : regs.stencil_ref_front; dynamic_state.SetStencilReferences(front.stencil_test_val, back.stencil_test_val); - dynamic_state.SetStencilWriteMasks(front.stencil_write_mask, back.stencil_write_mask); + dynamic_state.SetStencilWriteMasks(!stencil_clear ? front.stencil_write_mask.Value() : 0U, + !stencil_clear ? back.stencil_write_mask.Value() : 0U); dynamic_state.SetStencilCompareMasks(front.stencil_mask, back.stencil_mask); } }