Merge pull request #19556 from hrydgard/another-bunch
Some checks failed
Build / build-windows (ARM64) (push) Has been cancelled
Build / build-windows (x64) (push) Has been cancelled
Build / build-uwp (push) Has been cancelled
Build / build (./b.sh --headless --unittest --fat --no-png --no-sdl2, clang, clang++, test, macos, macos-latest) (push) Has been cancelled
Build / build (./b.sh --headless --unittest, clang, clang++, test, clang-normal, ubuntu-latest) (push) Has been cancelled
Build / build (./b.sh --headless --unittest, gcc, g++, gcc-normal, ubuntu-latest) (push) Has been cancelled
Build / build (./b.sh --ios, clang, clang++, ios, ios, macos-latest) (push) Has been cancelled
Build / build (./b.sh --libretro_android ppsspp_libretro, clang, clang++, android, android-libretro, ubuntu-latest) (push) Has been cancelled
Build / build (./b.sh --qt, gcc, g++, qt, qt, ubuntu-latest) (push) Has been cancelled
Build / build (cd android && ./ab.sh -j2 APP_ABI=arm64-v8a OPENXR=1, clang, clang++, android, android-vr, ubuntu-latest) (push) Has been cancelled
Build / build (cd android && ./ab.sh -j2 APP_ABI=arm64-v8a UNITTEST=1 HEADLESS=1, clang, clang++, android, android-arm64, ubuntu-latest) (push) Has been cancelled
Build / build (cd android && ./ab.sh -j2 APP_ABI=armeabi-v7a UNITTEST=1 HEADLESS=1, clang, clang++, android, android-arm32, ubuntu-latest) (push) Has been cancelled
Build / build (cd android && ./ab.sh -j2 APP_ABI=x86_64 UNITTEST=1 HEADLESS=1, clang, clang++, android, android-x86_64, ubuntu-latest) (push) Has been cancelled
Build / build (make -C libretro -f Makefile -j2, clang, clang++, libretro, clang-libretro, ubuntu-latest) (push) Has been cancelled
Build / build (make -C libretro -f Makefile -j2, gcc, g++, libretro, gcc-libretro, ubuntu-latest) (push) Has been cancelled
Build / build_test_headless_alpine (push) Has been cancelled
Generate Docker Layer / build (push) Has been cancelled
Build / test-windows (push) Has been cancelled
Build / test (macos-latest) (push) Has been cancelled
Build / test (ubuntu-latest) (push) Has been cancelled

Another bunch of pre-release fixes
This commit is contained in:
Henrik Rydgård 2024-10-25 23:07:08 +02:00 committed by GitHub
commit 3289614348
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
61 changed files with 160 additions and 104 deletions

View File

@ -370,8 +370,10 @@ void VulkanRenderManager::StartThreads() {
// Called from main thread.
void VulkanRenderManager::StopThreads() {
// Make sure we don't have an open render pass.
EndCurRenderStep();
// Make sure we don't have an open non-backbuffer render pass
if (curRenderStep_ && curRenderStep_->render.framebuffer != nullptr) {
EndCurRenderStep();
}
// Not sure this is a sensible check - should be ok even if not.
// _dbg_assert_(steps_.empty());
@ -1140,6 +1142,8 @@ void VulkanRenderManager::CopyImageToMemorySync(VkImage image, int mipLevel, int
// Need to call this after FlushSync so the pixels are guaranteed to be ready in CPU-accessible VRAM.
queueRunner_.CopyReadbackBuffer(frameData_[vulkan_->GetCurFrame()], nullptr, w, h, destFormat, destFormat, pixelStride, pixels);
_dbg_assert_(steps_.empty());
}
static void RemoveDrawCommands(FastVec<VkRenderData> *cmds) {
@ -1338,8 +1342,6 @@ void VulkanRenderManager::BlitFramebuffer(VKRFramebuffer *src, VkRect2D srcRect,
}
}
EndCurRenderStep();
// Sanity check. Added an assert to try to gather more info.
// Got this assert in NPJH50443 FINAL FANTASY TYPE-0, but pretty rare. Moving back to debug assert.
if (aspectMask & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) {
@ -1352,6 +1354,8 @@ void VulkanRenderManager::BlitFramebuffer(VKRFramebuffer *src, VkRect2D srcRect,
}
}
EndCurRenderStep();
VKRStep *step = new VKRStep{ VKRStepType::BLIT };
step->blit.aspectMask = aspectMask;
step->blit.src = src;

View File

@ -30,34 +30,36 @@ bool UIScreen::UseVerticalLayout() const {
}
void UIScreen::DoRecreateViews() {
if (recreateViews_) {
std::lock_guard<std::recursive_mutex> guard(screenManager()->inputLock_);
if (!recreateViews_) {
return;
}
UI::PersistMap persisted;
bool persisting = root_ != nullptr;
if (persisting) {
root_->PersistData(UI::PERSIST_SAVE, "root", persisted);
}
std::lock_guard<std::recursive_mutex> guard(screenManager()->inputLock_);
delete root_;
root_ = nullptr;
CreateViews();
UI::View *defaultView = root_ ? root_->GetDefaultFocusView() : nullptr;
if (defaultView && defaultView->GetVisibility() == UI::V_VISIBLE) {
defaultView->SetFocus();
}
recreateViews_ = false;
UI::PersistMap persisted;
bool persisting = root_ != nullptr;
if (persisting) {
root_->PersistData(UI::PERSIST_SAVE, "root", persisted);
}
if (persisting && root_ != nullptr) {
root_->PersistData(UI::PERSIST_RESTORE, "root", persisted);
delete root_;
root_ = nullptr;
CreateViews();
UI::View *defaultView = root_ ? root_->GetDefaultFocusView() : nullptr;
if (defaultView && defaultView->GetVisibility() == UI::V_VISIBLE) {
defaultView->SetFocus();
}
recreateViews_ = false;
// Update layout and refocus so things scroll into view.
// This is for resizing down, when focused on something now offscreen.
UI::LayoutViewHierarchy(*screenManager()->getUIContext(), root_, ignoreInsets_);
UI::View *focused = UI::GetFocusedView();
if (focused) {
root_->SubviewFocused(focused);
}
if (persisting && root_ != nullptr) {
root_->PersistData(UI::PERSIST_RESTORE, "root", persisted);
// Update layout and refocus so things scroll into view.
// This is for resizing down, when focused on something now offscreen.
UI::LayoutViewHierarchy(*screenManager()->getUIContext(), root_, ignoreInsets_);
UI::View *focused = UI::GetFocusedView();
if (focused) {
root_->SubviewFocused(focused);
}
}
}

View File

@ -72,6 +72,9 @@ void Event::Add(std::function<EventReturn(EventParams&)> func) {
// Call this from input thread or whatever, it doesn't matter
void Event::Trigger(EventParams &e) {
if (handlers_.empty()) {
return;
}
EventTriggered(this, e);
}

View File

@ -395,6 +395,17 @@ NPDRMDemoBlockDevice::NPDRMDemoBlockDevice(FileLoader *fileLoader)
ERROR_LOG(Log::Loader, "Invalid NPUMDIMG header!");
}
u32 psar_id;
fileLoader->ReadAt(psarOffset, 4, 1, &psar_id);
INFO_LOG(Log::Loader, "NPDRM: PSAR ID: %08x");
// PS1 PSAR begins with "PSISOIMG0000"
if (psar_id == 'SISP') {
lbaSize_ = 0; // Mark invalid
ERROR_LOG(Log::Loader, "PSX not supported! Should have been caught earlier.");
return;
}
kirk_init();
// getkey

View File

@ -413,7 +413,11 @@ void __KernelReturnFromInterrupt()
PendingInterrupt pend = pendingInterrupts.front();
pendingInterrupts.pop_front();
intrHandlers[pend.intr]->handleResult(pend);
if (pend.intr >= 0 && pend.intr < ARRAY_SIZE(intrHandlers)) {
intrHandlers[pend.intr]->handleResult(pend);
} else {
_assert_msg_(false, "Bad pend.intr: %d", pend.intr);
}
inInterrupt = false;
// Restore context after running the interrupt.

View File

@ -594,7 +594,6 @@ bool PSP_Reboot(std::string *error_string) {
}
void PSP_BeginHostFrame() {
// Reapply the graphics state of the PSP
if (gpu) {
gpu->BeginHostFrame();
}

View File

@ -1118,7 +1118,7 @@ bool GenerateFragmentShader(const FShaderID &id, char *buffer, const ShaderLangu
WRITE(p, " v.rgb = abs(v.rgb - destColor.rgb);\n");
break;
default:
*errorString = "Bad replace blend eq";
*errorString = StringFromFormat("Bad replace blend eq: %d", (int)replaceBlendEq);
return false;
}
}

View File

@ -89,6 +89,7 @@ void FramebufferManagerCommon::Init(int msaaLevel) {
NotifyRenderResized(msaaLevel);
}
// Returns true if we need to stop the render thread
bool FramebufferManagerCommon::UpdateRenderSize(int msaaLevel) {
const bool newRender = renderWidth_ != (float)PSP_CoreParameter().renderWidth || renderHeight_ != (float)PSP_CoreParameter().renderHeight || msaaLevel_ != msaaLevel;
@ -111,6 +112,11 @@ bool FramebufferManagerCommon::UpdateRenderSize(int msaaLevel) {
useBufferedRendering_ = newBuffered;
presentation_->UpdateRenderSize(renderWidth_, renderHeight_);
// If just switching TO buffered rendering, no need to pause the threads. In fact this causes problems due to the open backbuffer renderpass.
if (!useBufferedRendering_ && newBuffered) {
return false;
}
return newRender || newSettings;
}

View File

@ -293,11 +293,10 @@ ReplaceBlendType ReplaceBlendWithShader(GEBufferFormat bufferFormat) {
case GE_BLENDMODE_MUL_AND_ADD:
case GE_BLENDMODE_MUL_AND_SUBTRACT:
case GE_BLENDMODE_MUL_AND_SUBTRACT_REVERSE:
// Handled below.
// Other blend equations simply don't blend on hardware.
break;
default:
// Other blend equations simply don't blend on hardware.
return REPLACE_BLEND_NO;
}
@ -849,6 +848,8 @@ static const BlendEq eqLookupNoMinMax[] = {
BlendEq::ADD, // GE_BLENDMODE_MIN
BlendEq::ADD, // GE_BLENDMODE_MAX
BlendEq::ADD, // GE_BLENDMODE_ABSDIFF
BlendEq::ADD,
BlendEq::ADD,
};
static const BlendEq eqLookup[] = {
@ -858,6 +859,8 @@ static const BlendEq eqLookup[] = {
BlendEq::MIN, // GE_BLENDMODE_MIN
BlendEq::MAX, // GE_BLENDMODE_MAX
BlendEq::MAX, // GE_BLENDMODE_ABSDIFF
BlendEq::ADD,
BlendEq::ADD,
};
static BlendFactor toDualSource(BlendFactor blendfunc) {

View File

@ -277,6 +277,13 @@ bool FragmentIdNeedsFramebufferRead(const FShaderID &id) {
(ReplaceBlendType)id.Bits(FS_BIT_REPLACE_BLEND, 3) == REPLACE_BLEND_READ_FRAMEBUFFER;
}
inline u32 SanitizeBlendMode(GEBlendMode mode) {
if (mode > GE_BLENDMODE_ABSDIFF)
return GE_BLENDMODE_MUL_AND_ADD; // Not sure what the undefined modes are.
else
return mode;
}
// Here we must take all the bits of the gstate that determine what the fragment shader will
// look like, and concatenate them together into an ID.
void ComputeFragmentShaderID(FShaderID *id_out, const ComputedPipelineState &pipelineState, const Draw::Bugs &bugs) {
@ -371,7 +378,7 @@ void ComputeFragmentShaderID(FShaderID *id_out, const ComputedPipelineState &pip
// 3 bits.
id.SetBits(FS_BIT_REPLACE_BLEND, 3, replaceBlend);
// 11 bits total.
id.SetBits(FS_BIT_BLENDEQ, 3, gstate.getBlendEq());
id.SetBits(FS_BIT_BLENDEQ, 3, SanitizeBlendMode(gstate.getBlendEq()));
id.SetBits(FS_BIT_BLENDFUNC_A, 4, gstate.getBlendFuncA());
id.SetBits(FS_BIT_BLENDFUNC_B, 4, gstate.getBlendFuncB());
}

View File

@ -1867,6 +1867,18 @@ void GPUCommon::DoBlockTransfer(u32 skipDrawReason) {
}
bool GPUCommon::PerformMemoryCopy(u32 dest, u32 src, int size, GPUCopyFlag flags) {
/*
// TODO: Should add this. But let's do it after the 1.18 release.
if (dest == 0 || src == 0) {
_dbg_assert_msg_(false, "Bad PerformMemoryCopy: %08x -> %08x, size %d (flag: %d)", src, dest, size, (int)flags);
return false;
}
*/
if (size == 0) {
_dbg_assert_msg_(false, "Zero-sized PerformMemoryCopy: %08x -> %08x, size %d (flag: %d)", src, dest, size, (int)flags);
// Let's not ignore this yet but if we hit this, we should investigate.
}
// Track stray copies of a framebuffer in RAM. MotoGP does this.
if (framebufferManager_->MayIntersectFramebufferColor(src) || framebufferManager_->MayIntersectFramebufferColor(dest)) {
if (!framebufferManager_->NotifyFramebufferCopy(src, dest, size, flags, gstate_c.skipDrawReason)) {

View File

@ -4,9 +4,9 @@ version = 3
[[package]]
name = "anstream"
version = "0.6.15"
version = "0.6.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526"
checksum = "23a1e53f0f5d86382dafe1cf314783b2044280f406e7e1506368220ad11b1338"
dependencies = [
"anstyle",
"anstyle-parse",
@ -19,33 +19,33 @@ dependencies = [
[[package]]
name = "anstyle"
version = "1.0.8"
version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1"
checksum = "8365de52b16c035ff4fcafe0092ba9390540e3e352870ac09933bebcaa2c8c56"
[[package]]
name = "anstyle-parse"
version = "0.2.5"
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb"
checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9"
dependencies = [
"utf8parse",
]
[[package]]
name = "anstyle-query"
version = "1.1.1"
version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a"
checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c"
dependencies = [
"windows-sys",
]
[[package]]
name = "anstyle-wincon"
version = "3.0.4"
version = "3.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8"
checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125"
dependencies = [
"anstyle",
"windows-sys",
@ -93,9 +93,9 @@ checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97"
[[package]]
name = "colorchoice"
version = "1.0.2"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0"
checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990"
[[package]]
name = "heck"
@ -118,9 +118,9 @@ dependencies = [
[[package]]
name = "proc-macro2"
version = "1.0.87"
version = "1.0.89"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b3e4daa0dcf6feba26f985457cdf104d4b4256fc5a09547140f3631bb076b19a"
checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e"
dependencies = [
"unicode-ident",
]
@ -142,9 +142,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
[[package]]
name = "syn"
version = "2.0.79"
version = "2.0.85"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590"
checksum = "5023162dfcd14ef8f32034d8bcd4cc5ddc61ef7a247c024a33e24e1f24d21b56"
dependencies = [
"proc-macro2",
"quote",
@ -165,9 +165,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
[[package]]
name = "windows-sys"
version = "0.52.0"
version = "0.59.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
dependencies = [
"windows-targets",
]

View File

@ -1395,6 +1395,10 @@ ScreenRenderFlags EmuScreen::render(ScreenRenderMode mode) {
if (!framebufferBound) {
draw->BindFramebufferAsRenderTarget(nullptr, { RPAction::CLEAR, RPAction::CLEAR, RPAction::CLEAR, }, "EmuScreen_Behind");
}
Draw::BackendState state = draw->GetCurrentBackendState();
_assert_msg_(!state.valid || state.passes >= 1, "skipB: %d sw: %d mode: %d back: %d tag: %s", (int)skipBufferEffects, (int)g_Config.bSoftwareRendering, (int)mode, (int)g_Config.iGPUBackend, screenManager()->topScreen()->tag());
// Need to make sure the UI texture is available, for "darken".
screenManager()->getUIContext()->BeginFrame();
draw->SetViewport(viewport);
@ -1515,13 +1519,12 @@ ScreenRenderFlags EmuScreen::render(ScreenRenderMode mode) {
draw->BindFramebufferAsRenderTarget(nullptr, { RPAction::CLEAR, RPAction::CLEAR, RPAction::CLEAR, clearColor }, "EmuScreen_NoFrame");
draw->SetViewport(viewport);
draw->SetScissorRect(0, 0, g_display.pixel_xres, g_display.pixel_yres);
framebufferBound = true;
}
Draw::BackendState state = draw->GetCurrentBackendState();
// We allow if !state.valid, that means it's not the Vulkan backend.
_assert_msg_(!state.valid || state.passes >= 1, "skipB: %d sw: %d mode: %d back: %d", (int)skipBufferEffects, (int)g_Config.bSoftwareRendering, (int)mode, (int)g_Config.iGPUBackend);
_assert_msg_(!state.valid || state.passes >= 1, "skipB: %d sw: %d mode: %d back: %d bound: %d", (int)skipBufferEffects, (int)g_Config.bSoftwareRendering, (int)mode, (int)g_Config.iGPUBackend, (int)framebufferBound);
screenManager()->getUIContext()->BeginFrame();

View File

@ -1765,5 +1765,6 @@ UI::EventReturn GridSettingsPopupScreen::GridMinusClick(UI::EventParams &e) {
UI::EventReturn GridSettingsPopupScreen::OnRecentClearClick(UI::EventParams &e) {
g_Config.ClearRecentIsos();
OnRecentChanged.Trigger(e);
TriggerFinish(DR_OK);
return UI::EVENT_DONE;
}

View File

@ -813,7 +813,7 @@ void CreditsScreen::CreateViews() {
root_->Add(new Button(cr->T("Discord"), new AnchorLayoutParams(260, 64, 10, NONE, NONE, 232, false)))->OnClick.Handle(this, &CreditsScreen::OnDiscord);
root_->Add(new Button("www.ppsspp.org", new AnchorLayoutParams(260, 64, 10, NONE, NONE, 10, false)))->OnClick.Handle(this, &CreditsScreen::OnPPSSPPOrg);
root_->Add(new Button(cr->T("Privacy Policy"), new AnchorLayoutParams(260, 64, 10, NONE, NONE, 84, false)))->OnClick.Handle(this, &CreditsScreen::OnPrivacy);
root_->Add(new Button(cr->T("Twitter @PPSSPP_emu"), new AnchorLayoutParams(260, 64, NONE, NONE, 10, rightYOffset + 84, false)))->OnClick.Handle(this, &CreditsScreen::OnTwitter);
root_->Add(new Button(cr->T("X @PPSSPP_emu"), new AnchorLayoutParams(260, 64, NONE, NONE, 10, rightYOffset + 84, false)))->OnClick.Handle(this, &CreditsScreen::OnX);
#if PPSSPP_PLATFORM(ANDROID) || PPSSPP_PLATFORM(IOS)
root_->Add(new Button(cr->T("Share PPSSPP"), new AnchorLayoutParams(260, 64, NONE, NONE, 10, rightYOffset + 158, false)))->OnClick.Handle(this, &CreditsScreen::OnShare);
@ -834,7 +834,8 @@ UI::EventReturn CreditsScreen::OnSupport(UI::EventParams &e) {
return UI::EVENT_DONE;
}
UI::EventReturn CreditsScreen::OnTwitter(UI::EventParams &e) {
UI::EventReturn CreditsScreen::OnX(UI::EventParams &e) {
// Not sure we should change to x.com here, given various platform URL handlers etc. We can probably change it soon.
System_LaunchUrl(LaunchUrlType::BROWSER_URL, "https://twitter.com/PPSSPP_emu");
return UI::EVENT_DONE;
}

View File

@ -176,7 +176,7 @@ private:
UI::EventReturn OnForums(UI::EventParams &e);
UI::EventReturn OnDiscord(UI::EventParams &e);
UI::EventReturn OnShare(UI::EventParams &e);
UI::EventReturn OnTwitter(UI::EventParams &e);
UI::EventReturn OnX(UI::EventParams &e);
double startTime_ = 0.0;
};

View File

@ -121,7 +121,7 @@ static double g_lastActivity = 0.0;
static double g_lastKeepAwake = 0.0;
// Time until we stop considering the core active without user input.
// Should this be configurable? 2 hours currently.
static const double ACTIVITY_IDLE_TIMEOUT = 2.0 * 3600.0;
static constexpr double ACTIVITY_IDLE_TIMEOUT = 2.0 * 3600.0;
void System_LaunchUrl(LaunchUrlType urlType, const char *url) {
ShellExecute(NULL, L"open", ConvertUTF8ToWString(url).c_str(), NULL, NULL, SW_SHOWNORMAL);

View File

@ -1070,9 +1070,9 @@ translators3 =ma1feesm
translators4 =عمر أنور عجلان
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = ‎الموقع الألكتروني
written = ‎مكتوب في لغة C++ من أجل السرعة والمتانة
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = ‎تصفح الألعاب

View File

@ -1062,9 +1062,9 @@ translators3 =
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = Check out the website:
written = Written in C++ for speed and portability
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = Browse games

View File

@ -1062,9 +1062,9 @@ translators3 =
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = Хвърлете едно око на уеб сайта ни:
written = Написано в C++ за бързина и съвместимост
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = Browse games

View File

@ -1062,9 +1062,9 @@ translators3 =
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = Check out the website:
written = Written in C++ for speed and portability
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = Browse games

View File

@ -1062,9 +1062,9 @@ translators3 =
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = Navštivte naši stránku:
written = Vytvořeno v jazyce C++ pro rychlost a přenosnost
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = Browse games

View File

@ -1062,9 +1062,9 @@ translators3 =
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = Mere info på webside:
written = Skrevet i C++ for hastighed og portabilitet
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = Browse games

View File

@ -1062,9 +1062,9 @@ translators3 =
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = Mehr Infos auf der Webseite:
written = Programmiert in C++ für Geschwindigkeit und Portabilität
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = Spiele durchsuchen

View File

@ -1062,9 +1062,9 @@ translators3 =
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = Ollongngi todai situsna mane:
written = Pake C++ digaraka yamo na malassi
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = Browse games

View File

@ -1037,9 +1037,9 @@ translators3 = The Dax, wuspring, hrydgard, adrian17
translators4 = papel
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = Check out the website:
written = Written in C++ for speed and portability
X @PPSSPP_emu = X @PPSSPP_emu
[MemStick]
Already contains PSP data = Already contains PSP data

View File

@ -1063,9 +1063,9 @@ translators3 =
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = Sitio web oficial:
written = Escrito en lenguaje C++ para una mejor portabilidad y velocidad
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = Buscar juegos

View File

@ -1062,9 +1062,9 @@ translators3 =
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = Sitio web oficial
written = Escrito en lenguaje C++ para una mejor portabilidad y velocidad
X @PPSSPP_emu = X @PPSSPP_emu
[PSPSettings]

View File

@ -1062,9 +1062,9 @@ translators3 =
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = توییتر @PPSSPP_emu
website = :سری به وبسایت بزنید
written = ‎نوشته شده است C++ برای سریع و پرتابل بودن، نرم افزار با زبان برنامه نویسی
X @PPSSPP_emu = توییتر @PPSSPP_emu
[RemoteISO]
Browse Games = Browse games

View File

@ -1062,9 +1062,9 @@ translators3 =
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = Tutustu verkkosivustoon:
written = Kirjoitettu C++:ssa nopeutta ja siirrettävyyttä varten
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = Selaa pelejä

View File

@ -1053,9 +1053,9 @@ testing = tests
this translation by = Traduction française : vnctdj
title = Un émulateur de PSP rapide et portable
tools = Outils libres utilisés :
Twitter @PPSSPP_emu = Twitter de PPSSPP
website = Visitez notre site :
written = Écrit en C++ pour la vitesse et la portabilité
X @PPSSPP_emu = X de PPSSPP
[RemoteISO]
Browse Games = Parcourir les jeux

View File

@ -1062,9 +1062,9 @@ translators3 =
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = Sitio web oficial:
written = Escrito en linguaxe C++ para unha mellor portabilidade e velocidade
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = Browse games

View File

@ -1062,9 +1062,9 @@ translators3 =
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = Επισκεφθείτε την ιστοσελίδα:
written = Γραμμένο σε C++ για ταχύτητα και φορητότητα
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = Περιήγηση παιχνιδιών

View File

@ -1062,9 +1062,9 @@ translators3 =
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = :כנסו אל האתר
written = למהירות וניידות C++ נכתב ב
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = Browse games

View File

@ -1062,9 +1062,9 @@ translators3 =
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = רתאה לא וסנכ:
written = ב בתכנ ++C תודיינו תוריהמל
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = Browse games

View File

@ -1062,9 +1062,9 @@ translators3 = The Dax, wuspring, hrydgard, adrian17
translators4 = HiImBrala, Carlson
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = Pogledaj stranicu:
written = Napisan u C++ za brzinu i za pokretnost
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = Pretraži igre

View File

@ -1062,9 +1062,9 @@ translators3 = NABN00B
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = X @PPSSPP_emu
website = Nézd meg a honlapot:
written = C++ban írva a sebességért és portolhatóságért
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = Játékok tallózása

View File

@ -1062,9 +1062,9 @@ translators3 = niznet
translators4 = mupralsh
translators5 = eerdfz
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = Kunjungi situs:
written = Ditulis dalam bahasa C++ demi kecepatan dan portabilitas
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = Telusuri permainan

View File

@ -1031,9 +1031,9 @@ translators3 = The Dax, wuspring, hrydgard, adrian17
translators4 = papel
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter
website = Da' un'occhiata al sito web:
written = Scritto in C++ per velocità e portabilità
X @PPSSPP_emu = X @PPSSPP_emu
[MemStick]
Already contains PSP data = Contiene già dati PSP

View File

@ -1030,9 +1030,9 @@ translators3 =
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = ウェブサイトはこちら:
written = 速度と移植性を保つためにC++で書かれています
X @PPSSPP_emu = X @PPSSPP_emu
[MemStick]
Already contains PSP data = 既にPSPデータが存在しています。

View File

@ -1062,9 +1062,9 @@ translators3 =
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = Ngunjungi situs web kita:
written = Ditulis dalam C++ Kanggo kacepetan lan portabilitas
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = Browse games

View File

@ -1013,9 +1013,9 @@ translators3 =
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = 트위터 @PPSSPP_emu
website = 웹사이트를 확인하세요:
written = 속도와 이식성을 위해 C++로 작성되었습니다.
X @PPSSPP_emu = 트위터 @PPSSPP_emu
[MemStick]
Already contains PSP data = 이미 PSP 데이터가 포함되어 있습니다.

View File

@ -1027,9 +1027,9 @@ translators3 = The Dax, wuspring, hrydgard, adrian17
translators4 = papel, Mhamad99
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = Check out the website:
written = Written in C++ for speed and portability
X @PPSSPP_emu = X @PPSSPP_emu
[MemStick]
Already contains PSP data = Already contains PSP data

View File

@ -1062,9 +1062,9 @@ translators3 =
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = ກວດສອບຂໍ້ມູນທີ່ເວັບໄຊ:
written = ຂຽນໂດຍພາສາ C++ ເພື່ອປະສິດທິພາບ, ຄວາມໄວ ແລະຄວາມສະຖຽນ
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = Browse games

View File

@ -1062,9 +1062,9 @@ translators3 = vnctdj
translators4 = SViper
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = Check out the website:
written = Parašyta C++ kalboje dėl greičio ir portabilumo
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = Browse games

View File

@ -1062,9 +1062,9 @@ translators3 = The Dax, wuspring, hrydgard, adrian17
translators4 = papel, AG Richard, Zie Nozie,
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = Lihat laman web:
written = Ditulis dengan C++ untuk kelajuan dan mudah alih
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = Browse games

View File

@ -1062,9 +1062,9 @@ translators3 =
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = Bezoek de website:
written = Geschreven in C++ voor snelheid en draagbaarheid
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = Games bladeren...

View File

@ -1062,9 +1062,9 @@ translators3 =
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = Check out the website:
written = Written in C++ for speed and portability
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = Browse games

View File

@ -10,7 +10,7 @@ Achievements = Osiągnięcia
Achievements are disabled = Osiągnięcia są wyłączone
Achievements enabled = Osiągnięcia włączone
Achievements with active challenges = Osiągnięcia z aktywnymi wyzwaniami
Allow Save State in Hardcore Mode (but not Load State) = Pozwól na zapis stanu w Trybie Wyzwania (bez wczytywania zapisów)
Allow Save State in Hardcore Mode (but not Load State) = Pozwól na zapis stanu w Trybie Wyzwania (bez wczytywania zapisów)
Almost completed achievements = Prawie ukończone osiągnięcia
Around me = Wokół mnie
Can't log in to RetroAchievements right now = W tym momencie nie można zalogować do RetroAchievements
@ -62,7 +62,7 @@ Unsupported achievements = Niewspierane osiągnięcia
Alternate speed volume = Alternatywna prędkość emulacji
Audio backend = Sterownik dźwięku (wymagany restart)
Audio Error = Błąd Audio
Audio file format not supported. Must be WAV or MP3. = Niewspierany format pliku dźwiękowego. Plik musi być w formacie WAV lub MP3.
Audio file format not supported. Must be WAV or MP3. = Niewspierany format pliku dźwiękowego. Plik musi być w formacie WAV lub MP3.
AudioBufferingForBluetooth = Bufory dźwięku dost. do Bluetooth (wolniejsze)
Auto = Automatyczny
Device = Urządzenie
@ -1067,9 +1067,9 @@ translators3 = Poprzednią edycję tłumaczenia stworzyli:
translators4 = hrydgard, The Dax, mikusp, adrian17
translators5 =
translators6 =
Twitter @PPSSPP_emu = X (Twitter): @PPSSPP_emu
website = Zajrzyj na stronę:
written = Napisano w C++ dla wydajności i mobilności
X @PPSSPP_emu = X: @PPSSPP_emu
[RemoteISO]
Browse Games = Przeglądaj gry

View File

@ -1037,9 +1037,9 @@ translators3 =
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = Verifique o site da web:
written = Escrito em C++ pela velocidade e portabilidade
X @PPSSPP_emu = X @PPSSPP_emu
[MemStick]
Already contains PSP data = Já contém dados do PSP

View File

@ -1056,9 +1056,9 @@ translators3 =
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter/X @PPSSPP_emu
website = Verifica o website:
written = PPSSPP foi escrito em C++ pela sua velocidade e portabilidade
X @PPSSPP_emu = X @PPSSPP_emu
[MemStick]
Already contains PSP data = Já contém dados da PSP

View File

@ -1063,9 +1063,9 @@ translators3 =
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = Uitați-vă la site:
written = Scris in C++ pt. viteză si portabilitate
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = Browse games

View File

@ -1030,9 +1030,9 @@ translators3 = Hasster
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = Посетите наш веб-сайт:
written = Написан на C++ для скорости и портируемости
X @PPSSPP_emu = X @PPSSPP_emu
[MemStick]
Already contains PSP data = Уже содержит данные PSP

View File

@ -1014,9 +1014,9 @@ translators3 =
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = Kolla in webbsidan:
written = Skriven i C++ - prestanda och portabilitet
X @PPSSPP_emu = X @PPSSPP_emu
[PSPSettings]
Auto = Auto

View File

@ -1063,9 +1063,9 @@ translators3 = Adriane Justine Tan
translators4 = John Cyrill Corsanes (@jcchikikomori)
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = Puntahan ang Website:
written = Nakasulat sa C++ para sa bilis at portability
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = I-browse ang mga laro

View File

@ -1079,9 +1079,9 @@ translators3 = Benjamin B. Gates
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = ไปที่ Twitter
website = เพิ่มเติมข้อมูลได้ที่เว็บไซต์:
written = เขียนโดยใช้ภาษา C++ เพื่อความรวดเร็ว และความเสถียร
X @PPSSPP_emu = ไปที่ X
[RemoteISO]
Browse Games = ค้นหาไปยังเกม

View File

@ -1063,9 +1063,9 @@ translators3 = mygizli04
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = X @PPSSPP_emu
website = PPSSPP.org
written = Hız ve Taşınabilirlik için C++ ile Yazıldı
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = Oyunlara bak...

View File

@ -1062,9 +1062,9 @@ translators3 = Якщо у вас є пропозиції щодо перекл
translators4 = або знайшли помилки, напишіть мені:
translators5 = ser.gutsalyuk@gmail.com
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = Відвідайте наш веб-сайт :
written = Написаний на C++ для швидкості \nта підтримці декількох платформ.
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = Перегляд ігор

View File

@ -1062,9 +1062,9 @@ translators3 = The Dax, wuspring, hrydgard, adrian17
translators4 = papel, chinhodado, xsacha , zminhquanz
translators5 = Huy Song Tử,
translators6 =
Twitter @PPSSPP_emu = Twitter @PPSSPP_emu
website = Xem trên website:
written = Được viết bằng C++ cho tốc độ và portability
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = Duyệt games

View File

@ -1063,9 +1063,9 @@ translators3 = xzapk、Arthur200000、Playhi、PeaceShi
translators4 = Nargacuga、driver1998、xujibbs、Croden1999
translators5 =
translators6 =
Twitter @PPSSPP_emu = X (Twitter)
website = 请查阅官方网站
written = 使用C++编写以保证速度与移植性
X @PPSSPP_emu = X @PPSSPP_emu
[RemoteISO]
Browse Games = 浏览游戏

View File

@ -1030,9 +1030,9 @@ translators3 =
translators4 =
translators5 =
translators6 =
Twitter @PPSSPP_emu = Twitter
website = 歡迎造訪我們的網站:
written = 使用 C++ 編寫,以保證建置速度和相容性
X @PPSSPP_emu = X @PPSSPP_emu
[MemStick]
Already contains PSP data = 已包含 PSP 資料