Compare commits
30 Commits
Author | SHA1 | Date |
---|---|---|
psucien | 4182740384 | |
psucien | ca1613258f | |
georgemoralis | 3d375a28eb | |
jnack | 69d4fecdfe | |
Xphalnos | 7886761476 | |
squidbus | 6080066f75 | |
georgemoralis | f1fe6b9f96 | |
squidbus | 6e552aac6a | |
adjonesey | 0f87d1e3d4 | |
georgemoralis | 68fa5e292f | |
bigol83 | bdfff5e8ea | |
georgemoralis | cdd193d5b1 | |
georgemoralis | 30ab2b7f71 | |
DanielSvoboda | f2b6843f9d | |
squidbus | a17150960f | |
Grégoire Hage | 1651db24fe | |
IndecisiveTurtle | 6bf42aa985 | |
georgemoralis | 8d41695e74 | |
IndecisiveTurtle | cb5190e31a | |
IndecisiveTurtle | cf706f8cc7 | |
IndecisiveTurtle | 6fbbe3d79b | |
IndecisiveTurtle | fab390b860 | |
Plínio Larrubia | 5a96ac1a4f | |
georgemoralis | ac2fa103fa | |
georgemoralis | 7e7854346d | |
DanielSvoboda | 751f6f9bab | |
Flamy | 1c835a1aa4 | |
georgemoralis | 07c8c28000 | |
TheTurtle | 66e96dd944 | |
DanielSvoboda | aef7498c49 |
|
@ -82,3 +82,6 @@
|
||||||
path = externals/ffmpeg-core
|
path = externals/ffmpeg-core
|
||||||
url = https://github.com/shadps4-emu/ext-ffmpeg-core.git
|
url = https://github.com/shadps4-emu/ext-ffmpeg-core.git
|
||||||
shallow = true
|
shallow = true
|
||||||
|
[submodule "externals/half"]
|
||||||
|
path = externals/half
|
||||||
|
url = https://github.com/ROCm/half.git
|
||||||
|
|
|
@ -644,6 +644,9 @@ if (APPLE)
|
||||||
|
|
||||||
# Replacement for std::chrono::time_zone
|
# Replacement for std::chrono::time_zone
|
||||||
target_link_libraries(shadps4 PRIVATE date::date-tz)
|
target_link_libraries(shadps4 PRIVATE date::date-tz)
|
||||||
|
|
||||||
|
# Half float conversions for F16C patches
|
||||||
|
target_link_libraries(shadps4 PRIVATE half)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (NOT ENABLE_QT_GUI)
|
if (NOT ENABLE_QT_GUI)
|
||||||
|
|
|
@ -142,11 +142,17 @@ if (WIN32)
|
||||||
target_compile_options(sirit PUBLIC "-Wno-error=unused-command-line-argument")
|
target_compile_options(sirit PUBLIC "-Wno-error=unused-command-line-argument")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# date
|
if (APPLE)
|
||||||
if (APPLE AND NOT TARGET date::date-tz)
|
# half
|
||||||
|
add_library(half INTERFACE)
|
||||||
|
target_include_directories(half INTERFACE half/include)
|
||||||
|
|
||||||
|
# date
|
||||||
|
if (NOT TARGET date::date-tz)
|
||||||
option(BUILD_TZ_LIB "" ON)
|
option(BUILD_TZ_LIB "" ON)
|
||||||
option(USE_SYSTEM_TZ_DB "" ON)
|
option(USE_SYSTEM_TZ_DB "" ON)
|
||||||
add_subdirectory(date)
|
add_subdirectory(date)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Tracy
|
# Tracy
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit d59c84d388c805022e2bddea08aa41cbe7e43e55
|
Subproject commit 12cbda959b6df2af119a76a73ff906c2bed36884
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 1ddada225144cac0de8f6b5c0dd9acffd99a2e68
|
|
@ -1 +1 @@
|
||||||
Subproject commit 1115dad3ffa0994e3f43b693d9b9cc99944c64c1
|
Subproject commit 2c48a1a50203bbaf1e3d0d64c5d726d56f8d3bb3
|
|
@ -1 +1 @@
|
||||||
Subproject commit 8db09231c448b913ae905d5237ce2eca46e3fe87
|
Subproject commit 37090c74cc6e680f2bc334cac8fd182f7634a1f6
|
|
@ -1 +1 @@
|
||||||
Subproject commit cc0bee4fd46ea1f5db147d63ea545208cc9e8405
|
Subproject commit 4b740127230472779c4a4d71e1a75aaa3a367a2d
|
|
@ -1 +1 @@
|
||||||
Subproject commit aabb091ae37068498751fd58202a9854408ecb0e
|
Subproject commit ccdf68421bc8eb85693f573080fc0a5faad862db
|
|
@ -15,6 +15,7 @@
|
||||||
#else
|
#else
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
|
#include <half.hpp>
|
||||||
#include <sys/sysctl.h>
|
#include <sys/sysctl.h>
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -30,6 +31,12 @@ static Xbyak::Reg ZydisToXbyakRegister(const ZydisRegister reg) {
|
||||||
if (reg >= ZYDIS_REGISTER_RAX && reg <= ZYDIS_REGISTER_R15) {
|
if (reg >= ZYDIS_REGISTER_RAX && reg <= ZYDIS_REGISTER_R15) {
|
||||||
return Xbyak::Reg64(reg - ZYDIS_REGISTER_RAX + Xbyak::Operand::RAX);
|
return Xbyak::Reg64(reg - ZYDIS_REGISTER_RAX + Xbyak::Operand::RAX);
|
||||||
}
|
}
|
||||||
|
if (reg >= ZYDIS_REGISTER_XMM0 && reg <= ZYDIS_REGISTER_XMM31) {
|
||||||
|
return Xbyak::Xmm(reg - ZYDIS_REGISTER_XMM0 + xmm0.getIdx());
|
||||||
|
}
|
||||||
|
if (reg >= ZYDIS_REGISTER_YMM0 && reg <= ZYDIS_REGISTER_YMM31) {
|
||||||
|
return Xbyak::Ymm(reg - ZYDIS_REGISTER_YMM0 + ymm0.getIdx());
|
||||||
|
}
|
||||||
UNREACHABLE_MSG("Unsupported register: {}", static_cast<u32>(reg));
|
UNREACHABLE_MSG("Unsupported register: {}", static_cast<u32>(reg));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,6 +73,12 @@ static Xbyak::Address ZydisToXbyakMemoryOperand(const ZydisDecodedOperand& opera
|
||||||
return ptr[expression];
|
return ptr[expression];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static u64 ZydisToXbyakImmediateOperand(const ZydisDecodedOperand& operand) {
|
||||||
|
ASSERT_MSG(operand.type == ZYDIS_OPERAND_TYPE_IMMEDIATE,
|
||||||
|
"Expected immediate operand, got type: {}", static_cast<u32>(operand.type));
|
||||||
|
return operand.imm.value.u;
|
||||||
|
}
|
||||||
|
|
||||||
static std::unique_ptr<Xbyak::Operand> ZydisToXbyakOperand(const ZydisDecodedOperand& operand) {
|
static std::unique_ptr<Xbyak::Operand> ZydisToXbyakOperand(const ZydisDecodedOperand& operand) {
|
||||||
switch (operand.type) {
|
switch (operand.type) {
|
||||||
case ZYDIS_OPERAND_TYPE_REGISTER: {
|
case ZYDIS_OPERAND_TYPE_REGISTER: {
|
||||||
|
@ -110,51 +123,135 @@ static Xbyak::Reg AllocateScratchRegister(
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
|
|
||||||
static constexpr u32 MaxSavedRegisters = 3;
|
static pthread_key_t stack_pointer_slot;
|
||||||
static pthread_key_t register_save_slots[MaxSavedRegisters];
|
static pthread_key_t patch_stack_slot;
|
||||||
static std::once_flag register_save_init_flag;
|
static std::once_flag patch_context_slots_init_flag;
|
||||||
|
|
||||||
static_assert(sizeof(void*) == sizeof(u64),
|
static_assert(sizeof(void*) == sizeof(u64),
|
||||||
"Cannot fit a register inside a thread local storage slot.");
|
"Cannot fit a register inside a thread local storage slot.");
|
||||||
|
|
||||||
static void InitializeRegisterSaveSlots() {
|
static void InitializePatchContextSlots() {
|
||||||
for (u32 i = 0; i < MaxSavedRegisters; i++) {
|
ASSERT_MSG(pthread_key_create(&stack_pointer_slot, nullptr) == 0,
|
||||||
ASSERT_MSG(pthread_key_create(®ister_save_slots[i], nullptr) == 0,
|
"Unable to allocate thread-local register for stack pointer.");
|
||||||
"Unable to allocate thread-local register save slot {}", i);
|
ASSERT_MSG(pthread_key_create(&patch_stack_slot, nullptr) == 0,
|
||||||
|
"Unable to allocate thread-local register for patch stack.");
|
||||||
|
}
|
||||||
|
|
||||||
|
void InitializeThreadPatchStack() {
|
||||||
|
std::call_once(patch_context_slots_init_flag, InitializePatchContextSlots);
|
||||||
|
|
||||||
|
const auto* patch_stack = std::malloc(0x1000);
|
||||||
|
pthread_setspecific(patch_stack_slot, patch_stack);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CleanupThreadPatchStack() {
|
||||||
|
std::call_once(patch_context_slots_init_flag, InitializePatchContextSlots);
|
||||||
|
|
||||||
|
auto* patch_stack = pthread_getspecific(patch_stack_slot);
|
||||||
|
if (patch_stack != nullptr) {
|
||||||
|
std::free(patch_stack);
|
||||||
|
pthread_setspecific(patch_stack_slot, nullptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SaveRegisters(Xbyak::CodeGenerator& c, const std::initializer_list<Xbyak::Reg> regs) {
|
/// Saves the stack pointer to thread local storage and loads the patch stack.
|
||||||
ASSERT_MSG(regs.size() <= MaxSavedRegisters, "Not enough space to save {} registers.",
|
static void SaveStack(Xbyak::CodeGenerator& c) {
|
||||||
regs.size());
|
std::call_once(patch_context_slots_init_flag, InitializePatchContextSlots);
|
||||||
|
|
||||||
std::call_once(register_save_init_flag, &InitializeRegisterSaveSlots);
|
|
||||||
|
|
||||||
u32 index = 0;
|
|
||||||
for (const auto& reg : regs) {
|
|
||||||
const auto offset = reinterpret_cast<void*>(register_save_slots[index++] * sizeof(void*));
|
|
||||||
|
|
||||||
|
// Save stack pointer and load patch stack.
|
||||||
c.putSeg(gs);
|
c.putSeg(gs);
|
||||||
c.mov(qword[offset], reg.cvt64());
|
c.mov(qword[reinterpret_cast<void*>(stack_pointer_slot * sizeof(void*))], rsp);
|
||||||
}
|
c.putSeg(gs);
|
||||||
|
c.mov(rsp, qword[reinterpret_cast<void*>(patch_stack_slot * sizeof(void*))]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Restores the stack pointer from thread local storage.
|
||||||
|
static void RestoreStack(Xbyak::CodeGenerator& c) {
|
||||||
|
std::call_once(patch_context_slots_init_flag, InitializePatchContextSlots);
|
||||||
|
|
||||||
|
// Save patch stack pointer and load original stack.
|
||||||
|
c.putSeg(gs);
|
||||||
|
c.mov(qword[reinterpret_cast<void*>(patch_stack_slot * sizeof(void*))], rsp);
|
||||||
|
c.putSeg(gs);
|
||||||
|
c.mov(rsp, qword[reinterpret_cast<void*>(stack_pointer_slot * sizeof(void*))]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
// These utilities are not implemented as we can't save anything to thread local storage without
|
||||||
|
// temporary registers.
|
||||||
|
void InitializeThreadPatchStack() {
|
||||||
|
// No-op
|
||||||
|
}
|
||||||
|
|
||||||
|
void CleanupThreadPatchStack() {
|
||||||
|
// No-op
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Saves the stack pointer to thread local storage and loads the patch stack.
|
||||||
|
static void SaveStack(Xbyak::CodeGenerator& c) {
|
||||||
|
UNIMPLEMENTED();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Restores the stack pointer from thread local storage.
|
||||||
|
static void RestoreStack(Xbyak::CodeGenerator& c) {
|
||||||
|
UNIMPLEMENTED();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Switches to the patch stack, saves registers, and restores the original stack.
|
||||||
|
static void SaveRegisters(Xbyak::CodeGenerator& c, const std::initializer_list<Xbyak::Reg> regs) {
|
||||||
|
SaveStack(c);
|
||||||
|
for (const auto& reg : regs) {
|
||||||
|
c.push(reg.cvt64());
|
||||||
|
}
|
||||||
|
RestoreStack(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Switches to the patch stack, restores registers, and restores the original stack.
|
||||||
static void RestoreRegisters(Xbyak::CodeGenerator& c,
|
static void RestoreRegisters(Xbyak::CodeGenerator& c,
|
||||||
const std::initializer_list<Xbyak::Reg> regs) {
|
const std::initializer_list<Xbyak::Reg> regs) {
|
||||||
ASSERT_MSG(regs.size() <= MaxSavedRegisters, "Not enough space to restore {} registers.",
|
SaveStack(c);
|
||||||
regs.size());
|
|
||||||
|
|
||||||
std::call_once(register_save_init_flag, &InitializeRegisterSaveSlots);
|
|
||||||
|
|
||||||
u32 index = 0;
|
|
||||||
for (const auto& reg : regs) {
|
for (const auto& reg : regs) {
|
||||||
const auto offset = reinterpret_cast<void*>(register_save_slots[index++] * sizeof(void*));
|
c.pop(reg.cvt64());
|
||||||
|
}
|
||||||
|
RestoreStack(c);
|
||||||
|
}
|
||||||
|
|
||||||
c.putSeg(gs);
|
/// Switches to the patch stack and stores all registers.
|
||||||
c.mov(reg.cvt64(), qword[offset]);
|
static void SaveContext(Xbyak::CodeGenerator& c) {
|
||||||
|
SaveStack(c);
|
||||||
|
for (int reg = Xbyak::Operand::RAX; reg <= Xbyak::Operand::R15; reg++) {
|
||||||
|
c.push(Xbyak::Reg64(reg));
|
||||||
|
}
|
||||||
|
for (int reg = 0; reg <= 7; reg++) {
|
||||||
|
c.sub(rsp, 32);
|
||||||
|
c.vmovdqu(ptr[rsp], Xbyak::Ymm(reg));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Restores all registers and restores the original stack.
|
||||||
|
/// If the destination is a register, it is not restored to preserve the output.
|
||||||
|
static void RestoreContext(Xbyak::CodeGenerator& c, const Xbyak::Operand& dst) {
|
||||||
|
for (int reg = 7; reg >= 0; reg--) {
|
||||||
|
if ((!dst.isXMM() && !dst.isYMM()) || dst.getIdx() != reg) {
|
||||||
|
c.vmovdqu(Xbyak::Ymm(reg), ptr[rsp]);
|
||||||
|
}
|
||||||
|
c.add(rsp, 32);
|
||||||
|
}
|
||||||
|
for (int reg = Xbyak::Operand::R15; reg >= Xbyak::Operand::RAX; reg--) {
|
||||||
|
if (!dst.isREG() || dst.getIdx() != reg) {
|
||||||
|
c.pop(Xbyak::Reg64(reg));
|
||||||
|
} else {
|
||||||
|
c.add(rsp, 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RestoreStack(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
|
||||||
static void GenerateANDN(const ZydisDecodedOperand* operands, Xbyak::CodeGenerator& c) {
|
static void GenerateANDN(const ZydisDecodedOperand* operands, Xbyak::CodeGenerator& c) {
|
||||||
const auto dst = ZydisToXbyakRegisterOperand(operands[0]);
|
const auto dst = ZydisToXbyakRegisterOperand(operands[0]);
|
||||||
const auto src1 = ZydisToXbyakRegisterOperand(operands[1]);
|
const auto src1 = ZydisToXbyakRegisterOperand(operands[1]);
|
||||||
|
@ -204,9 +301,9 @@ static void GenerateBEXTR(const ZydisDecodedOperand* operands, Xbyak::CodeGenera
|
||||||
c.and_(dst, scratch2);
|
c.and_(dst, scratch2);
|
||||||
|
|
||||||
if (dst.getIdx() == shift.getIdx()) {
|
if (dst.getIdx() == shift.getIdx()) {
|
||||||
RestoreRegisters(c, {scratch1, scratch2});
|
RestoreRegisters(c, {scratch2, scratch1});
|
||||||
} else {
|
} else {
|
||||||
RestoreRegisters(c, {scratch1, scratch2, shift});
|
RestoreRegisters(c, {shift, scratch2, scratch1});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -258,10 +355,138 @@ static void GenerateBLSR(const ZydisDecodedOperand* operands, Xbyak::CodeGenerat
|
||||||
RestoreRegisters(c, {scratch});
|
RestoreRegisters(c, {scratch});
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FilterRosetta2Only(const ZydisDecodedOperand*) {
|
static __attribute__((sysv_abi)) void PerformVCVTPH2PS(float* out, const half_float::half* in,
|
||||||
|
const u32 count) {
|
||||||
|
for (u32 i = 0; i < count; i++) {
|
||||||
|
out[i] = half_float::half_cast<float>(in[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void GenerateVCVTPH2PS(const ZydisDecodedOperand* operands, Xbyak::CodeGenerator& c) {
|
||||||
|
const auto dst = ZydisToXbyakRegisterOperand(operands[0]);
|
||||||
|
const auto src = ZydisToXbyakOperand(operands[1]);
|
||||||
|
|
||||||
|
const auto float_count = dst.getBit() / 32;
|
||||||
|
const auto byte_count = float_count * 4;
|
||||||
|
|
||||||
|
SaveContext(c);
|
||||||
|
|
||||||
|
// Allocate stack space for outputs and load into first parameter.
|
||||||
|
c.sub(rsp, byte_count);
|
||||||
|
c.mov(rdi, rsp);
|
||||||
|
|
||||||
|
if (src->isXMM()) {
|
||||||
|
// Allocate stack space for inputs and load into second parameter.
|
||||||
|
c.sub(rsp, byte_count);
|
||||||
|
c.mov(rsi, rsp);
|
||||||
|
|
||||||
|
// Move input to the allocated space.
|
||||||
|
c.movdqu(ptr[rsp], *reinterpret_cast<Xbyak::Xmm*>(src.get()));
|
||||||
|
} else {
|
||||||
|
c.lea(rsi, src->getAddress());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load float count into third parameter.
|
||||||
|
c.mov(rdx, float_count);
|
||||||
|
|
||||||
|
c.mov(rax, reinterpret_cast<u64>(PerformVCVTPH2PS));
|
||||||
|
c.call(rax);
|
||||||
|
|
||||||
|
if (src->isXMM()) {
|
||||||
|
// Clean up after inputs space.
|
||||||
|
c.add(rsp, byte_count);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load outputs into destination register and clean up space.
|
||||||
|
if (dst.isYMM()) {
|
||||||
|
c.vmovdqu(*reinterpret_cast<const Xbyak::Ymm*>(&dst), ptr[rsp]);
|
||||||
|
} else {
|
||||||
|
c.movdqu(*reinterpret_cast<const Xbyak::Xmm*>(&dst), ptr[rsp]);
|
||||||
|
}
|
||||||
|
c.add(rsp, byte_count);
|
||||||
|
|
||||||
|
RestoreContext(c, dst);
|
||||||
|
}
|
||||||
|
|
||||||
|
using SingleToHalfFloatConverter = half_float::half (*)(float);
|
||||||
|
static const SingleToHalfFloatConverter SingleToHalfFloatConverters[4] = {
|
||||||
|
half_float::half_cast<half_float::half, std::round_to_nearest, float>,
|
||||||
|
half_float::half_cast<half_float::half, std::round_toward_neg_infinity, float>,
|
||||||
|
half_float::half_cast<half_float::half, std::round_toward_infinity, float>,
|
||||||
|
half_float::half_cast<half_float::half, std::round_toward_zero, float>,
|
||||||
|
};
|
||||||
|
|
||||||
|
static __attribute__((sysv_abi)) void PerformVCVTPS2PH(half_float::half* out, const float* in,
|
||||||
|
const u32 count, const u8 rounding_mode) {
|
||||||
|
const auto conversion_func = SingleToHalfFloatConverters[rounding_mode];
|
||||||
|
|
||||||
|
for (u32 i = 0; i < count; i++) {
|
||||||
|
out[i] = conversion_func(in[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void GenerateVCVTPS2PH(const ZydisDecodedOperand* operands, Xbyak::CodeGenerator& c) {
|
||||||
|
const auto dst = ZydisToXbyakOperand(operands[0]);
|
||||||
|
const auto src = ZydisToXbyakRegisterOperand(operands[1]);
|
||||||
|
const auto ctrl = ZydisToXbyakImmediateOperand(operands[2]);
|
||||||
|
|
||||||
|
const auto float_count = src.getBit() / 32;
|
||||||
|
const auto byte_count = float_count * 4;
|
||||||
|
|
||||||
|
SaveContext(c);
|
||||||
|
|
||||||
|
if (dst->isXMM()) {
|
||||||
|
// Allocate stack space for outputs and load into first parameter.
|
||||||
|
c.sub(rsp, byte_count);
|
||||||
|
c.mov(rdi, rsp);
|
||||||
|
} else {
|
||||||
|
c.lea(rdi, dst->getAddress());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allocate stack space for inputs and load into second parameter.
|
||||||
|
c.sub(rsp, byte_count);
|
||||||
|
c.mov(rsi, rsp);
|
||||||
|
|
||||||
|
// Move input to the allocated space.
|
||||||
|
if (src.isYMM()) {
|
||||||
|
c.vmovdqu(ptr[rsp], *reinterpret_cast<const Xbyak::Ymm*>(&src));
|
||||||
|
} else {
|
||||||
|
c.movdqu(ptr[rsp], *reinterpret_cast<const Xbyak::Xmm*>(&src));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load float count into third parameter.
|
||||||
|
c.mov(rdx, float_count);
|
||||||
|
|
||||||
|
// Load rounding mode into fourth parameter.
|
||||||
|
if (ctrl & 4) {
|
||||||
|
// Load from MXCSR.RC.
|
||||||
|
c.stmxcsr(ptr[rsp - 4]);
|
||||||
|
c.mov(rcx, ptr[rsp - 4]);
|
||||||
|
c.shr(rcx, 13);
|
||||||
|
c.and_(rcx, 3);
|
||||||
|
} else {
|
||||||
|
c.mov(rcx, ctrl & 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
c.mov(rax, reinterpret_cast<u64>(PerformVCVTPS2PH));
|
||||||
|
c.call(rax);
|
||||||
|
|
||||||
|
// Clean up after inputs space.
|
||||||
|
c.add(rsp, byte_count);
|
||||||
|
|
||||||
|
if (dst->isXMM()) {
|
||||||
|
// Load outputs into destination register and clean up space.
|
||||||
|
c.movdqu(*reinterpret_cast<Xbyak::Xmm*>(dst.get()), ptr[rsp]);
|
||||||
|
c.add(rsp, byte_count);
|
||||||
|
}
|
||||||
|
|
||||||
|
RestoreContext(c, *dst);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool FilterRosetta2Only(const ZydisDecodedOperand*) {
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
size_t size = sizeof(ret);
|
size_t size = sizeof(ret);
|
||||||
if (sysctlbyname("sysctl.proc_translated", &ret, &size, NULL, 0) != 0) {
|
if (sysctlbyname("sysctl.proc_translated", &ret, &size, nullptr, 0) != 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -339,12 +564,16 @@ static const std::unordered_map<ZydisMnemonic, PatchInfo> Patches = {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
// BMI1 instructions that are not supported by Rosetta 2 on Apple Silicon.
|
// Patches for instruction sets not supported by Rosetta 2.
|
||||||
|
// BMI1
|
||||||
{ZYDIS_MNEMONIC_ANDN, {FilterRosetta2Only, GenerateANDN, true}},
|
{ZYDIS_MNEMONIC_ANDN, {FilterRosetta2Only, GenerateANDN, true}},
|
||||||
{ZYDIS_MNEMONIC_BEXTR, {FilterRosetta2Only, GenerateBEXTR, true}},
|
{ZYDIS_MNEMONIC_BEXTR, {FilterRosetta2Only, GenerateBEXTR, true}},
|
||||||
{ZYDIS_MNEMONIC_BLSI, {FilterRosetta2Only, GenerateBLSI, true}},
|
{ZYDIS_MNEMONIC_BLSI, {FilterRosetta2Only, GenerateBLSI, true}},
|
||||||
{ZYDIS_MNEMONIC_BLSMSK, {FilterRosetta2Only, GenerateBLSMSK, true}},
|
{ZYDIS_MNEMONIC_BLSMSK, {FilterRosetta2Only, GenerateBLSMSK, true}},
|
||||||
{ZYDIS_MNEMONIC_BLSR, {FilterRosetta2Only, GenerateBLSR, true}},
|
{ZYDIS_MNEMONIC_BLSR, {FilterRosetta2Only, GenerateBLSR, true}},
|
||||||
|
// F16C
|
||||||
|
{ZYDIS_MNEMONIC_VCVTPH2PS, {FilterRosetta2Only, GenerateVCVTPH2PS, true}},
|
||||||
|
{ZYDIS_MNEMONIC_VCVTPS2PH, {FilterRosetta2Only, GenerateVCVTPS2PH, true}},
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,12 @@ class CodeGenerator;
|
||||||
|
|
||||||
namespace Core {
|
namespace Core {
|
||||||
|
|
||||||
|
/// Initializes a stack for the current thread for use by patch implementations.
|
||||||
|
void InitializeThreadPatchStack();
|
||||||
|
|
||||||
|
/// Cleans up the patch stack for the current thread.
|
||||||
|
void CleanupThreadPatchStack();
|
||||||
|
|
||||||
/// Patches CPU instructions that cannot run as-is on the host.
|
/// Patches CPU instructions that cannot run as-is on the host.
|
||||||
void PatchInstructions(u64 segment_addr, u64 segment_size, Xbyak::CodeGenerator& c);
|
void PatchInstructions(u64 segment_addr, u64 segment_size, Xbyak::CodeGenerator& c);
|
||||||
|
|
||||||
|
|
|
@ -1,17 +1,16 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
// Generated By moduleGenerator
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <common/path_util.h>
|
|
||||||
#include <common/singleton.h>
|
|
||||||
#include <core/file_format/psf.h>
|
|
||||||
#include <core/file_sys/fs.h>
|
|
||||||
|
|
||||||
#include "app_content.h"
|
#include "app_content.h"
|
||||||
#include "common/io_file.h"
|
#include "common/io_file.h"
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
|
#include "common/path_util.h"
|
||||||
|
#include "common/singleton.h"
|
||||||
#include "common/string_util.h"
|
#include "common/string_util.h"
|
||||||
|
#include "core/file_format/psf.h"
|
||||||
|
#include "core/file_sys/fs.h"
|
||||||
#include "core/libraries/error_codes.h"
|
#include "core/libraries/error_codes.h"
|
||||||
#include "core/libraries/libs.h"
|
#include "core/libraries/libs.h"
|
||||||
|
|
||||||
|
|
|
@ -2,9 +2,10 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <common/assert.h>
|
|
||||||
#include <magic_enum.hpp>
|
#include <magic_enum.hpp>
|
||||||
|
|
||||||
#include "audio_core/sdl_audio.h"
|
#include "audio_core/sdl_audio.h"
|
||||||
|
#include "common/assert.h"
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#include "core/libraries/audio/audioout.h"
|
#include "core/libraries/audio/audioout.h"
|
||||||
#include "core/libraries/error_codes.h"
|
#include "core/libraries/error_codes.h"
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
// Generated By moduleGenerator
|
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#include "core/libraries/error_codes.h"
|
#include "core/libraries/error_codes.h"
|
||||||
#include "core/libraries/libs.h"
|
#include "core/libraries/libs.h"
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
// Generated By moduleGenerator
|
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#include "core/libraries/error_codes.h"
|
#include "core/libraries/error_codes.h"
|
||||||
#include "core/libraries/libs.h"
|
#include "core/libraries/libs.h"
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
// Generated By moduleGenerator
|
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#include "core/libraries/error_codes.h"
|
#include "core/libraries/error_codes.h"
|
||||||
#include "core/libraries/libs.h"
|
#include "core/libraries/libs.h"
|
||||||
|
|
|
@ -650,12 +650,12 @@ s32 PS4_SYSV_ABI sceGnmDrawIndexAuto(u32* cmdbuf, u32 size, u32 index_count, u32
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 PS4_SYSV_ABI sceGnmDrawIndexIndirect(u32* cmdbuf, u32 size, u32 data_offset, u32 shader_stage,
|
s32 PS4_SYSV_ABI sceGnmDrawIndexIndirect(u32* cmdbuf, u32 size, u32 data_offset, u32 shader_stage,
|
||||||
u32 vertex_sgpr_offset, u32 instance_vgpr_offset,
|
u32 vertex_sgpr_offset, u32 instance_sgpr_offset,
|
||||||
u32 flags) {
|
u32 flags) {
|
||||||
LOG_TRACE(Lib_GnmDriver, "called");
|
LOG_TRACE(Lib_GnmDriver, "called");
|
||||||
|
|
||||||
if (cmdbuf && (size == 9) && (shader_stage < ShaderStages::Max) &&
|
if (cmdbuf && (size == 9) && (shader_stage < ShaderStages::Max) &&
|
||||||
(vertex_sgpr_offset < 0x10u) && (instance_vgpr_offset < 0x10u)) {
|
(vertex_sgpr_offset < 0x10u) && (instance_sgpr_offset < 0x10u)) {
|
||||||
|
|
||||||
const auto predicate = flags & 1 ? PM4Predicate::PredEnable : PM4Predicate::PredDisable;
|
const auto predicate = flags & 1 ? PM4Predicate::PredEnable : PM4Predicate::PredDisable;
|
||||||
cmdbuf = WriteHeader<PM4ItOpcode::DrawIndexIndirect>(
|
cmdbuf = WriteHeader<PM4ItOpcode::DrawIndexIndirect>(
|
||||||
|
@ -665,7 +665,7 @@ s32 PS4_SYSV_ABI sceGnmDrawIndexIndirect(u32* cmdbuf, u32 size, u32 data_offset,
|
||||||
|
|
||||||
cmdbuf[0] = data_offset;
|
cmdbuf[0] = data_offset;
|
||||||
cmdbuf[1] = vertex_sgpr_offset == 0 ? 0 : (vertex_sgpr_offset & 0xffffu) + sgpr_offset;
|
cmdbuf[1] = vertex_sgpr_offset == 0 ? 0 : (vertex_sgpr_offset & 0xffffu) + sgpr_offset;
|
||||||
cmdbuf[2] = instance_vgpr_offset == 0 ? 0 : (instance_vgpr_offset & 0xffffu) + sgpr_offset;
|
cmdbuf[2] = instance_sgpr_offset == 0 ? 0 : (instance_sgpr_offset & 0xffffu) + sgpr_offset;
|
||||||
cmdbuf[3] = 0;
|
cmdbuf[3] = 0;
|
||||||
|
|
||||||
cmdbuf += 4;
|
cmdbuf += 4;
|
||||||
|
@ -707,11 +707,11 @@ s32 PS4_SYSV_ABI sceGnmDrawIndexOffset(u32* cmdbuf, u32 size, u32 index_offset,
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 PS4_SYSV_ABI sceGnmDrawIndirect(u32* cmdbuf, u32 size, u32 data_offset, u32 shader_stage,
|
s32 PS4_SYSV_ABI sceGnmDrawIndirect(u32* cmdbuf, u32 size, u32 data_offset, u32 shader_stage,
|
||||||
u32 vertex_sgpr_offset, u32 instance_vgpr_offset, u32 flags) {
|
u32 vertex_sgpr_offset, u32 instance_sgpr_offset, u32 flags) {
|
||||||
LOG_TRACE(Lib_GnmDriver, "called");
|
LOG_TRACE(Lib_GnmDriver, "called");
|
||||||
|
|
||||||
if (cmdbuf && (size == 9) && (shader_stage < ShaderStages::Max) &&
|
if (cmdbuf && (size == 9) && (shader_stage < ShaderStages::Max) &&
|
||||||
(vertex_sgpr_offset < 0x10u) && (instance_vgpr_offset < 0x10u)) {
|
(vertex_sgpr_offset < 0x10u) && (instance_sgpr_offset < 0x10u)) {
|
||||||
|
|
||||||
const auto predicate = flags & 1 ? PM4Predicate::PredEnable : PM4Predicate::PredDisable;
|
const auto predicate = flags & 1 ? PM4Predicate::PredEnable : PM4Predicate::PredDisable;
|
||||||
cmdbuf = WriteHeader<PM4ItOpcode::DrawIndirect>(cmdbuf, 4, PM4ShaderType::ShaderGraphics,
|
cmdbuf = WriteHeader<PM4ItOpcode::DrawIndirect>(cmdbuf, 4, PM4ShaderType::ShaderGraphics,
|
||||||
|
@ -721,7 +721,7 @@ s32 PS4_SYSV_ABI sceGnmDrawIndirect(u32* cmdbuf, u32 size, u32 data_offset, u32
|
||||||
|
|
||||||
cmdbuf[0] = data_offset;
|
cmdbuf[0] = data_offset;
|
||||||
cmdbuf[1] = vertex_sgpr_offset == 0 ? 0 : (vertex_sgpr_offset & 0xffffu) + sgpr_offset;
|
cmdbuf[1] = vertex_sgpr_offset == 0 ? 0 : (vertex_sgpr_offset & 0xffffu) + sgpr_offset;
|
||||||
cmdbuf[2] = instance_vgpr_offset == 0 ? 0 : (instance_vgpr_offset & 0xffffu) + sgpr_offset;
|
cmdbuf[2] = instance_sgpr_offset == 0 ? 0 : (instance_sgpr_offset & 0xffffu) + sgpr_offset;
|
||||||
cmdbuf[3] = 2; // auto index
|
cmdbuf[3] = 2; // auto index
|
||||||
|
|
||||||
cmdbuf += 4;
|
cmdbuf += 4;
|
||||||
|
|
|
@ -45,7 +45,7 @@ s32 PS4_SYSV_ABI sceGnmDrawIndex(u32* cmdbuf, u32 size, u32 index_count, uintptr
|
||||||
u32 flags, u32 type);
|
u32 flags, u32 type);
|
||||||
s32 PS4_SYSV_ABI sceGnmDrawIndexAuto(u32* cmdbuf, u32 size, u32 index_count, u32 flags);
|
s32 PS4_SYSV_ABI sceGnmDrawIndexAuto(u32* cmdbuf, u32 size, u32 index_count, u32 flags);
|
||||||
s32 PS4_SYSV_ABI sceGnmDrawIndexIndirect(u32* cmdbuf, u32 size, u32 data_offset, u32 shader_stage,
|
s32 PS4_SYSV_ABI sceGnmDrawIndexIndirect(u32* cmdbuf, u32 size, u32 data_offset, u32 shader_stage,
|
||||||
u32 vertex_sgpr_offset, u32 instance_vgpr_offset,
|
u32 vertex_sgpr_offset, u32 instance_sgpr_offset,
|
||||||
u32 flags);
|
u32 flags);
|
||||||
int PS4_SYSV_ABI sceGnmDrawIndexIndirectCountMulti();
|
int PS4_SYSV_ABI sceGnmDrawIndexIndirectCountMulti();
|
||||||
int PS4_SYSV_ABI sceGnmDrawIndexIndirectMulti();
|
int PS4_SYSV_ABI sceGnmDrawIndexIndirectMulti();
|
||||||
|
@ -53,7 +53,7 @@ int PS4_SYSV_ABI sceGnmDrawIndexMultiInstanced();
|
||||||
s32 PS4_SYSV_ABI sceGnmDrawIndexOffset(u32* cmdbuf, u32 size, u32 index_offset, u32 index_count,
|
s32 PS4_SYSV_ABI sceGnmDrawIndexOffset(u32* cmdbuf, u32 size, u32 index_offset, u32 index_count,
|
||||||
u32 flags);
|
u32 flags);
|
||||||
s32 PS4_SYSV_ABI sceGnmDrawIndirect(u32* cmdbuf, u32 size, u32 data_offset, u32 shader_stage,
|
s32 PS4_SYSV_ABI sceGnmDrawIndirect(u32* cmdbuf, u32 size, u32 data_offset, u32 shader_stage,
|
||||||
u32 vertex_sgpr_offset, u32 instance_vgpr_offset, u32 flags);
|
u32 vertex_sgpr_offset, u32 instance_sgpr_offset, u32 flags);
|
||||||
int PS4_SYSV_ABI sceGnmDrawIndirectCountMulti();
|
int PS4_SYSV_ABI sceGnmDrawIndirectCountMulti();
|
||||||
int PS4_SYSV_ABI sceGnmDrawIndirectMulti();
|
int PS4_SYSV_ABI sceGnmDrawIndirectMulti();
|
||||||
u32 PS4_SYSV_ABI sceGnmDrawInitDefaultHardwareState(u32* cmdbuf, u32 size);
|
u32 PS4_SYSV_ABI sceGnmDrawInitDefaultHardwareState(u32* cmdbuf, u32 size);
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
#include <common/assert.h>
|
#include "common/assert.h"
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#include "core/libraries/error_codes.h"
|
#include "core/libraries/error_codes.h"
|
||||||
#include "core/libraries/libs.h"
|
#include "core/libraries/libs.h"
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
||||||
#include "core/libraries/error_codes.h"
|
#include "core/libraries/error_codes.h"
|
||||||
#include "event_flag_obj.h"
|
#include "event_flag_obj.h"
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,10 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <condition_variable>
|
#include <condition_variable>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
|
|
||||||
#include "common/types.h"
|
#include "common/types.h"
|
||||||
|
|
||||||
namespace Libraries::Kernel {
|
namespace Libraries::Kernel {
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
||||||
#include "common/assert.h"
|
#include "common/assert.h"
|
||||||
#include "core/libraries/kernel/event_queue.h"
|
#include "core/libraries/kernel/event_queue.h"
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#include "common/types.h"
|
#include "common/types.h"
|
||||||
|
|
||||||
namespace Core::Loader {
|
namespace Core::Loader {
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
#include <bit>
|
#include <bit>
|
||||||
|
|
||||||
#include "common/alignment.h"
|
#include "common/alignment.h"
|
||||||
#include "common/assert.h"
|
#include "common/assert.h"
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
|
|
|
@ -4,12 +4,14 @@
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <semaphore>
|
#include <semaphore>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
||||||
#include "common/alignment.h"
|
#include "common/alignment.h"
|
||||||
#include "common/assert.h"
|
#include "common/assert.h"
|
||||||
#include "common/error.h"
|
#include "common/error.h"
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#include "common/singleton.h"
|
#include "common/singleton.h"
|
||||||
#include "common/thread.h"
|
#include "common/thread.h"
|
||||||
|
#include "core/cpu_patches.h"
|
||||||
#include "core/libraries/error_codes.h"
|
#include "core/libraries/error_codes.h"
|
||||||
#include "core/libraries/kernel/libkernel.h"
|
#include "core/libraries/kernel/libkernel.h"
|
||||||
#include "core/libraries/kernel/thread_management.h"
|
#include "core/libraries/kernel/thread_management.h"
|
||||||
|
@ -985,6 +987,7 @@ static void cleanup_thread(void* arg) {
|
||||||
destructor(value);
|
destructor(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Core::CleanupThreadPatchStack();
|
||||||
thread->is_almost_done = true;
|
thread->is_almost_done = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -992,6 +995,7 @@ static void* run_thread(void* arg) {
|
||||||
auto* thread = static_cast<ScePthread>(arg);
|
auto* thread = static_cast<ScePthread>(arg);
|
||||||
Common::SetCurrentThreadName(thread->name.c_str());
|
Common::SetCurrentThreadName(thread->name.c_str());
|
||||||
auto* linker = Common::Singleton<Core::Linker>::Instance();
|
auto* linker = Common::Singleton<Core::Linker>::Instance();
|
||||||
|
Core::InitializeThreadPatchStack();
|
||||||
linker->InitTlsForThread(false);
|
linker->InitTlsForThread(false);
|
||||||
void* ret = nullptr;
|
void* ret = nullptr;
|
||||||
g_pthread_self = thread;
|
g_pthread_self = thread;
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <sched.h>
|
#include <sched.h>
|
||||||
|
|
||||||
#include "common/types.h"
|
#include "common/types.h"
|
||||||
|
|
||||||
namespace Core::Loader {
|
namespace Core::Loader {
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
|
|
||||||
#include "common/assert.h"
|
#include "common/assert.h"
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#include "core/libraries/error_codes.h"
|
#include "core/libraries/error_codes.h"
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
||||||
#include "common/assert.h"
|
#include "common/assert.h"
|
||||||
#include "common/debug.h"
|
#include "common/debug.h"
|
||||||
#include "common/native_clock.h"
|
#include "common/native_clock.h"
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#include "core/libraries/error_codes.h"
|
#include "core/libraries/error_codes.h"
|
||||||
#include "core/libraries/libs.h"
|
#include "core/libraries/libs.h"
|
||||||
|
|
|
@ -2,13 +2,18 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
#include "common/config.h"
|
#include "common/config.h"
|
||||||
|
#include "core/libraries/ajm/ajm.h"
|
||||||
#include "core/libraries/app_content/app_content.h"
|
#include "core/libraries/app_content/app_content.h"
|
||||||
#include "core/libraries/audio/audioin.h"
|
#include "core/libraries/audio/audioin.h"
|
||||||
#include "core/libraries/audio/audioout.h"
|
#include "core/libraries/audio/audioout.h"
|
||||||
|
#include "core/libraries/avplayer/avplayer.h"
|
||||||
|
#include "core/libraries/dialogs/error_dialog.h"
|
||||||
|
#include "core/libraries/dialogs/ime_dialog.h"
|
||||||
#include "core/libraries/disc_map/disc_map.h"
|
#include "core/libraries/disc_map/disc_map.h"
|
||||||
#include "core/libraries/gnmdriver/gnmdriver.h"
|
#include "core/libraries/gnmdriver/gnmdriver.h"
|
||||||
#include "core/libraries/kernel/libkernel.h"
|
#include "core/libraries/kernel/libkernel.h"
|
||||||
#include "core/libraries/libc_internal/libc_internal.h"
|
#include "core/libraries/libc_internal/libc_internal.h"
|
||||||
|
#include "core/libraries/libpng/pngdec.h"
|
||||||
#include "core/libraries/libs.h"
|
#include "core/libraries/libs.h"
|
||||||
#include "core/libraries/network/http.h"
|
#include "core/libraries/network/http.h"
|
||||||
#include "core/libraries/network/net.h"
|
#include "core/libraries/network/net.h"
|
||||||
|
@ -32,11 +37,6 @@
|
||||||
#include "core/libraries/system/userservice.h"
|
#include "core/libraries/system/userservice.h"
|
||||||
#include "core/libraries/usbd/usbd.h"
|
#include "core/libraries/usbd/usbd.h"
|
||||||
#include "core/libraries/videoout/video_out.h"
|
#include "core/libraries/videoout/video_out.h"
|
||||||
#include "src/core/libraries/ajm/ajm.h"
|
|
||||||
#include "src/core/libraries/avplayer/avplayer.h"
|
|
||||||
#include "src/core/libraries/dialogs/error_dialog.h"
|
|
||||||
#include "src/core/libraries/dialogs/ime_dialog.h"
|
|
||||||
#include "src/core/libraries/libpng/pngdec.h"
|
|
||||||
|
|
||||||
namespace Libraries {
|
namespace Libraries {
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#include "core/loader/elf.h"
|
#include "core/loader/elf.h"
|
||||||
#include "core/loader/symbols_resolver.h"
|
#include "core/loader/symbols_resolver.h"
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
// Generated By moduleGenerator
|
|
||||||
#include "common/config.h"
|
#include "common/config.h"
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#include "core/libraries/error_codes.h"
|
#include "core/libraries/error_codes.h"
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
// Generated By moduleGenerator
|
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#include "core/libraries/error_codes.h"
|
#include "core/libraries/error_codes.h"
|
||||||
#include "core/libraries/libs.h"
|
#include "core/libraries/libs.h"
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
// Generated By moduleGenerator
|
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
|
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
// Generated By moduleGenerator
|
#include "common/assert.h"
|
||||||
#include <common/assert.h>
|
|
||||||
#include <common/singleton.h>
|
|
||||||
#include "common/config.h"
|
#include "common/config.h"
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
|
#include "common/singleton.h"
|
||||||
#include "core/libraries/error_codes.h"
|
#include "core/libraries/error_codes.h"
|
||||||
#include "core/libraries/libs.h"
|
#include "core/libraries/libs.h"
|
||||||
#include "input/controller.h"
|
#include "input/controller.h"
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
#include <core/file_format/playgo_chunk.h>
|
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#include "common/singleton.h"
|
#include "common/singleton.h"
|
||||||
|
#include "core/file_format/playgo_chunk.h"
|
||||||
#include "core/libraries/error_codes.h"
|
#include "core/libraries/error_codes.h"
|
||||||
#include "core/libraries/libs.h"
|
#include "core/libraries/libs.h"
|
||||||
#include "core/libraries/system/systemservice.h"
|
#include "core/libraries/system/systemservice.h"
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "common/types.h"
|
#include "common/types.h"
|
||||||
#include "playgo_types.h"
|
#include "playgo_types.h"
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "common/types.h"
|
#include "common/types.h"
|
||||||
|
|
||||||
namespace Core::Loader {
|
namespace Core::Loader {
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
// Generated By moduleGenerator
|
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
|
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#include "core/libraries/error_codes.h"
|
#include "core/libraries/error_codes.h"
|
||||||
#include "core/libraries/libs.h"
|
#include "core/libraries/libs.h"
|
||||||
|
|
|
@ -3,12 +3,13 @@
|
||||||
|
|
||||||
#include <span>
|
#include <span>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <common/path_util.h>
|
|
||||||
#include <common/singleton.h>
|
|
||||||
#include <core/file_format/psf.h>
|
|
||||||
#include <core/file_sys/fs.h>
|
|
||||||
#include "common/assert.h"
|
#include "common/assert.h"
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
|
#include "common/path_util.h"
|
||||||
|
#include "common/singleton.h"
|
||||||
|
#include "core/file_format/psf.h"
|
||||||
|
#include "core/file_sys/fs.h"
|
||||||
#include "core/libraries/error_codes.h"
|
#include "core/libraries/error_codes.h"
|
||||||
#include "core/libraries/libs.h"
|
#include "core/libraries/libs.h"
|
||||||
#include "core/libraries/save_data/savedata.h"
|
#include "core/libraries/save_data/savedata.h"
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
// Generated By moduleGenerator
|
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#include "core/libraries/error_codes.h"
|
#include "core/libraries/error_codes.h"
|
||||||
#include "core/libraries/libs.h"
|
#include "core/libraries/libs.h"
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
// Generated By moduleGenerator
|
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#include "common/singleton.h"
|
#include "common/singleton.h"
|
||||||
#include "core/libraries/error_codes.h"
|
#include "core/libraries/error_codes.h"
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "common/types.h"
|
#include "common/types.h"
|
||||||
|
|
||||||
namespace Core::Loader {
|
namespace Core::Loader {
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <string_view>
|
#include <string_view>
|
||||||
|
|
||||||
#include "common/assert.h"
|
#include "common/assert.h"
|
||||||
#include "common/types.h"
|
#include "common/types.h"
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
|
|
||||||
#include "common/assert.h"
|
#include "common/assert.h"
|
||||||
#include "common/config.h"
|
#include "common/config.h"
|
||||||
#include "common/debug.h"
|
#include "common/debug.h"
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include "common/thread.h"
|
#include "common/thread.h"
|
||||||
#include "core/aerolib/aerolib.h"
|
#include "core/aerolib/aerolib.h"
|
||||||
#include "core/aerolib/stubs.h"
|
#include "core/aerolib/stubs.h"
|
||||||
|
#include "core/cpu_patches.h"
|
||||||
#include "core/libraries/kernel/memory_management.h"
|
#include "core/libraries/kernel/memory_management.h"
|
||||||
#include "core/libraries/kernel/thread_management.h"
|
#include "core/libraries/kernel/thread_management.h"
|
||||||
#include "core/linker.h"
|
#include "core/linker.h"
|
||||||
|
@ -85,6 +86,7 @@ void Linker::Execute() {
|
||||||
// Init primary thread.
|
// Init primary thread.
|
||||||
Common::SetCurrentThreadName("GAME_MainThread");
|
Common::SetCurrentThreadName("GAME_MainThread");
|
||||||
Libraries::Kernel::pthreadInitSelfMainThread();
|
Libraries::Kernel::pthreadInitSelfMainThread();
|
||||||
|
InitializeThreadPatchStack();
|
||||||
InitTlsForThread(true);
|
InitTlsForThread(true);
|
||||||
|
|
||||||
// Start shared library modules
|
// Start shared library modules
|
||||||
|
@ -104,6 +106,8 @@ void Linker::Execute() {
|
||||||
RunMainEntry(m->GetEntryAddress(), &p, ProgramExitFunc);
|
RunMainEntry(m->GetEntryAddress(), &p, ProgramExitFunc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CleanupThreadPatchStack();
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 Linker::LoadModule(const std::filesystem::path& elf_name, bool is_dynamic) {
|
s32 Linker::LoadModule(const std::filesystem::path& elf_name, bool is_dynamic) {
|
||||||
|
|
|
@ -130,7 +130,7 @@ void CheatsPatches::setupUI() {
|
||||||
// Call the method to fill the list of cheat files
|
// Call the method to fill the list of cheat files
|
||||||
populateFileListCheats();
|
populateFileListCheats();
|
||||||
|
|
||||||
QLabel* repositoryLabel = new QLabel("Repository:");
|
QLabel* repositoryLabel = new QLabel(tr("Repository:"));
|
||||||
repositoryLabel->setAlignment(Qt::AlignLeft);
|
repositoryLabel->setAlignment(Qt::AlignLeft);
|
||||||
repositoryLabel->setAlignment(Qt::AlignVCenter);
|
repositoryLabel->setAlignment(Qt::AlignVCenter);
|
||||||
|
|
||||||
|
@ -175,7 +175,8 @@ void CheatsPatches::setupUI() {
|
||||||
|
|
||||||
int ret = QMessageBox::warning(
|
int ret = QMessageBox::warning(
|
||||||
this, tr("Delete File"),
|
this, tr("Delete File"),
|
||||||
QString(tr("Do you want to delete the selected file?\n%1")).arg(selectedFileName),
|
QString(tr("Do you want to delete the selected file?\\n%1").replace("\\n", "\n"))
|
||||||
|
.arg(selectedFileName),
|
||||||
QMessageBox::Yes | QMessageBox::No);
|
QMessageBox::Yes | QMessageBox::No);
|
||||||
|
|
||||||
if (ret == QMessageBox::Yes) {
|
if (ret == QMessageBox::Yes) {
|
||||||
|
@ -1123,7 +1124,7 @@ void CheatsPatches::addPatchesToLayout(const QString& filePath) {
|
||||||
void CheatsPatches::updateNoteTextEdit(const QString& patchName) {
|
void CheatsPatches::updateNoteTextEdit(const QString& patchName) {
|
||||||
if (m_patchInfos.contains(patchName)) {
|
if (m_patchInfos.contains(patchName)) {
|
||||||
const PatchInfo& patchInfo = m_patchInfos[patchName];
|
const PatchInfo& patchInfo = m_patchInfos[patchName];
|
||||||
QString text = QString(tr("Name:") + " %1\n" + tr("Author:") + " %2\n\n%3")
|
QString text = QString(tr("Name:") + " %1\n" + tr("Author: ") + "%2\n\n%3")
|
||||||
.arg(patchInfo.name)
|
.arg(patchInfo.name)
|
||||||
.arg(patchInfo.author)
|
.arg(patchInfo.author)
|
||||||
.arg(patchInfo.note);
|
.arg(patchInfo.note);
|
||||||
|
|
|
@ -36,6 +36,7 @@ public:
|
||||||
void downloadCheats(const QString& source, const QString& m_gameSerial,
|
void downloadCheats(const QString& source, const QString& m_gameSerial,
|
||||||
const QString& m_gameVersion, bool showMessageBox);
|
const QString& m_gameVersion, bool showMessageBox);
|
||||||
void downloadPatches(const QString repository, const bool showMessageBox);
|
void downloadPatches(const QString repository, const bool showMessageBox);
|
||||||
|
void createFilesJson(const QString& repository);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void downloadFinished();
|
void downloadFinished();
|
||||||
|
@ -58,7 +59,6 @@ private:
|
||||||
void applyCheat(const QString& modName, bool enabled);
|
void applyCheat(const QString& modName, bool enabled);
|
||||||
void applyPatch(const QString& patchName, bool enabled);
|
void applyPatch(const QString& patchName, bool enabled);
|
||||||
|
|
||||||
void createFilesJson(const QString& repository);
|
|
||||||
void uncheckAllCheatCheckBoxes();
|
void uncheckAllCheatCheckBoxes();
|
||||||
void updateNoteTextEdit(const QString& patchName);
|
void updateNoteTextEdit(const QString& patchName);
|
||||||
|
|
||||||
|
|
|
@ -140,7 +140,7 @@ public:
|
||||||
new CheatsPatches(gameName, gameSerial, gameVersion, gameSize, gameImage);
|
new CheatsPatches(gameName, gameSerial, gameVersion, gameSize, gameImage);
|
||||||
cheatsPatches->show();
|
cheatsPatches->show();
|
||||||
connect(widget->parent(), &QWidget::destroyed, cheatsPatches,
|
connect(widget->parent(), &QWidget::destroyed, cheatsPatches,
|
||||||
[widget, cheatsPatches]() { cheatsPatches->deleteLater(); });
|
[cheatsPatches]() { cheatsPatches->deleteLater(); });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selected == &openTrophyViewer) {
|
if (selected == &openTrophyViewer) {
|
||||||
|
|
|
@ -366,7 +366,7 @@ void MainWindow::CreateConnects() {
|
||||||
|
|
||||||
panelDialog->accept();
|
panelDialog->accept();
|
||||||
});
|
});
|
||||||
connect(downloadAllPatchesButton, &QPushButton::clicked, this, [this, panelDialog]() {
|
connect(downloadAllPatchesButton, &QPushButton::clicked, [panelDialog]() {
|
||||||
QEventLoop eventLoop;
|
QEventLoop eventLoop;
|
||||||
int pendingDownloads = 0;
|
int pendingDownloads = 0;
|
||||||
|
|
||||||
|
@ -391,6 +391,8 @@ void MainWindow::CreateConnects() {
|
||||||
nullptr, tr("Download Complete"),
|
nullptr, tr("Download Complete"),
|
||||||
QString(tr("Patches Downloaded Successfully!") + "\n" +
|
QString(tr("Patches Downloaded Successfully!") + "\n" +
|
||||||
tr("All Patches available for all games have been downloaded.")));
|
tr("All Patches available for all games have been downloaded.")));
|
||||||
|
cheatsPatches->createFilesJson("GoldHEN");
|
||||||
|
cheatsPatches->createFilesJson("shadPS4");
|
||||||
panelDialog->accept();
|
panelDialog->accept();
|
||||||
});
|
});
|
||||||
panelDialog->exec();
|
panelDialog->exec();
|
||||||
|
@ -640,24 +642,24 @@ void MainWindow::InstallDragDropPkg(std::filesystem::path file, int pkgNum, int
|
||||||
double appD = game_app_version.toDouble();
|
double appD = game_app_version.toDouble();
|
||||||
double pkgD = pkg_app_version.toDouble();
|
double pkgD = pkg_app_version.toDouble();
|
||||||
if (pkgD == appD) {
|
if (pkgD == appD) {
|
||||||
msgBox.setText(QString(tr("Patch detected!\nPKG and Game versions match!: "
|
msgBox.setText(QString(tr("Patch detected!") + "\n" +
|
||||||
"%1\nWould you like ") +
|
tr("PKG and Game versions match: ") + pkg_app_version +
|
||||||
tr("to overwrite?"))
|
"\n" + tr("Would you like to overwrite?")));
|
||||||
.arg(pkg_app_version));
|
|
||||||
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
|
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
|
||||||
msgBox.setDefaultButton(QMessageBox::No);
|
msgBox.setDefaultButton(QMessageBox::No);
|
||||||
} else if (pkgD < appD) {
|
} else if (pkgD < appD) {
|
||||||
msgBox.setText(QString(tr("Patch detected!\nPKG Version %1 is older ") +
|
msgBox.setText(QString(tr("Patch detected!") + "\n" +
|
||||||
tr("than installed version!: %2\nWould you like ") +
|
tr("PKG Version %1 is older than installed version: ")
|
||||||
tr("to overwrite?"))
|
.arg(pkg_app_version) +
|
||||||
.arg(pkg_app_version, game_app_version));
|
game_app_version + "\n" +
|
||||||
|
tr("Would you like to overwrite?")));
|
||||||
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
|
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
|
||||||
msgBox.setDefaultButton(QMessageBox::No);
|
msgBox.setDefaultButton(QMessageBox::No);
|
||||||
} else {
|
} else {
|
||||||
msgBox.setText(
|
msgBox.setText(QString(tr("Patch detected!") + "\n" +
|
||||||
QString(tr("Patch detected!\nGame is installed: %1\nWould you like ") +
|
tr("Game is installed: ") + game_app_version + "\n" +
|
||||||
tr("to install Patch: %2?"))
|
tr("Would you like to install Patch: ") +
|
||||||
.arg(game_app_version, pkg_app_version));
|
pkg_app_version + " ?"));
|
||||||
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
|
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
|
||||||
msgBox.setDefaultButton(QMessageBox::No);
|
msgBox.setDefaultButton(QMessageBox::No);
|
||||||
}
|
}
|
||||||
|
@ -683,9 +685,9 @@ void MainWindow::InstallDragDropPkg(std::filesystem::path file, int pkgNum, int
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
msgBox.setText(
|
msgBox.setText(QString(tr("DLC already installed:") + "\n" +
|
||||||
QString("DLC already installed\n%1\nWould you like to overwrite?")
|
QString::fromStdString(addon_extract_path.string()) +
|
||||||
.arg(QString::fromStdString(addon_extract_path.string())));
|
"\n\n" + tr("Would you like to overwrite?")));
|
||||||
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
|
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
|
||||||
msgBox.setDefaultButton(QMessageBox::No);
|
msgBox.setDefaultButton(QMessageBox::No);
|
||||||
int result = msgBox.exec();
|
int result = msgBox.exec();
|
||||||
|
@ -696,9 +698,9 @@ void MainWindow::InstallDragDropPkg(std::filesystem::path file, int pkgNum, int
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
msgBox.setText(
|
msgBox.setText(QString(tr("Game already installed") + "\n" +
|
||||||
QString(tr("Game already installed\n%1\nWould you like to overwrite?"))
|
QString::fromStdString(extract_path.string()) + "\n" +
|
||||||
.arg(QString::fromStdString(extract_path.string())));
|
tr("Would you like to overwrite?")));
|
||||||
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
|
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
|
||||||
msgBox.setDefaultButton(QMessageBox::No);
|
msgBox.setDefaultButton(QMessageBox::No);
|
||||||
int result = msgBox.exec();
|
int result = msgBox.exec();
|
||||||
|
|
|
@ -566,44 +566,34 @@
|
||||||
<translation>PKG-udtrækning</translation>
|
<translation>PKG-udtrækning</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="633"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
|
<source>Patch detected!</source>
|
||||||
<translation>Patch opdaget!\nPKG- og spilversioner stemmer overens!: %1\nVil du </translation>
|
<translation>Opdatering detekteret!</translation>
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="634"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>overskrive?</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="639"/>
|
|
||||||
<source>Patch detected!\nPKG Version %1 is older </source>
|
|
||||||
<translation>Patch opdaget!\nPKG-version %1 er ældre </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="640"/>
|
|
||||||
<source>than installed version!: %2\nWould you like </source>
|
|
||||||
<translation>end installeret version!: %2\nVil du </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="641"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>overskrive?</translation>
|
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="646"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
|
<source>PKG and Game versions match: </source>
|
||||||
<translation>Patch opdaget!\nSpillet er installeret: %1\nVil du </translation>
|
<translation>PKG og spilversioner matcher: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="647"/>
|
<location filename="../main_window.cpp" line="647"/>
|
||||||
<source>to install Patch: %2?</source>
|
<source>Would you like to overwrite?</source>
|
||||||
<translation>installere patch: %2?</translation>
|
<translation>Vil du overskrive?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="659"/>
|
<location filename="../main_window.cpp" line="639"/>
|
||||||
<source>Game already installed\n%1\nWould you like to overwrite?</source>
|
<source>PKG Version %1 is older than installed version: </source>
|
||||||
<translation>Spil allerede installeret\n%1\nVil du overskrive?</translation>
|
<translation>PKG Version %1 er ældre end den installerede version: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Game is installed: </source>
|
||||||
|
<translation>Spillet er installeret: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Would you like to install Patch: </source>
|
||||||
|
<translation>Vil du installere opdateringen: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="673"/>
|
<location filename="../main_window.cpp" line="673"/>
|
||||||
|
@ -613,7 +603,17 @@
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
<source>Would you like to install DLC: %1?</source>
|
<source>Would you like to install DLC: %1?</source>
|
||||||
<translation>Would you like to install DLC: %1?</translation>
|
<translation>Vil du installere DLC: %1?</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="688"/>
|
||||||
|
<source>DLC already installed:</source>
|
||||||
|
<translation>DLC allerede installeret:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="701"/>
|
||||||
|
<source>Game already installed</source>
|
||||||
|
<translation>Spillet er allerede installeret</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
|
|
|
@ -566,54 +566,54 @@
|
||||||
<translation>PKG-Extraktion</translation>
|
<translation>PKG-Extraktion</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="633"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
|
<source>Patch detected!</source>
|
||||||
<translation>Patch erkannt!\nPKG- und Spielversion stimmen überein!: %1\nMöchten Sie </translation>
|
<translation>Patch erkannt!</translation>
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="634"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>überschreiben?</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="639"/>
|
|
||||||
<source>Patch detected!\nPKG Version %1 is older </source>
|
|
||||||
<translation>Patch erkannt!\nPKG-Version %1 ist älter </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="640"/>
|
|
||||||
<source>than installed version!: %2\nWould you like </source>
|
|
||||||
<translation>als die installierte Version!: %2\nMöchten Sie </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="641"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>überschreiben?</translation>
|
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="646"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
|
<source>PKG and Game versions match: </source>
|
||||||
<translation>Patch erkannt!\nSpiel ist installiert: %1\nMöchten Sie </translation>
|
<translation>PKG- und Spielversionen stimmen überein: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="647"/>
|
<location filename="../main_window.cpp" line="647"/>
|
||||||
<source>to install Patch: %2?</source>
|
<source>Would you like to overwrite?</source>
|
||||||
<translation>Patch installieren: %2?</translation>
|
<translation>Würden Sie gerne überschreiben?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="659"/>
|
<location filename="../main_window.cpp" line="639"/>
|
||||||
<source>Game already installed\n%1\nWould you like to overwrite?</source>
|
<source>PKG Version %1 is older than installed version: </source>
|
||||||
<translation>Spiel bereits installiert\n%1\nMöchten Sie überschreiben?</translation>
|
<translation>PKG-Version %1 ist älter als die installierte Version: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Game is installed: </source>
|
||||||
|
<translation>Spiel ist installiert: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Would you like to install Patch: </source>
|
||||||
|
<translation>Möchten Sie den Patch installieren: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="673"/>
|
<location filename="../main_window.cpp" line="673"/>
|
||||||
<source>DLC Installation</source>
|
<source>DLC Installation</source>
|
||||||
<translation>DLC Installation</translation>
|
<translation>DLC-Installation</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
<source>Would you like to install DLC: %1?</source>
|
<source>Would you like to install DLC: %1?</source>
|
||||||
<translation>Would you like to install DLC: %1?</translation>
|
<translation>Würden Sie gerne DLC installieren: %1?</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="688"/>
|
||||||
|
<source>DLC already installed:</source>
|
||||||
|
<translation>DLC bereits installiert:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="701"/>
|
||||||
|
<source>Game already installed</source>
|
||||||
|
<translation>Spiel bereits installiert</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
|
|
|
@ -566,54 +566,54 @@
|
||||||
<translation>Εξαγωγή PKG</translation>
|
<translation>Εξαγωγή PKG</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="633"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
|
<source>Patch detected!</source>
|
||||||
<translation>Ανίχνευση Patch!\nΟι εκδόσεις PKG και παιχνιδιού ταιριάζουν!: %1\nΘέλετε </translation>
|
<translation>Αναγνώριση ενημέρωσης!</translation>
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="634"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>να αντικαταστήσετε;</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="639"/>
|
|
||||||
<source>Patch detected!\nPKG Version %1 is older </source>
|
|
||||||
<translation>Ανίχνευση Patch!\nΗ έκδοση PKG %1 είναι παλαιότερη </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="640"/>
|
|
||||||
<source>than installed version!: %2\nWould you like </source>
|
|
||||||
<translation>από την εγκατεστημένη έκδοση!: %2\nΘέλετε </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="641"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>να αντικαταστήσετε;</translation>
|
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="646"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
|
<source>PKG and Game versions match: </source>
|
||||||
<translation>Ανίχνευση Patch!\nΤο παιχνίδι είναι εγκατεστημένο: %1\nΘέλετε </translation>
|
<translation>Οι εκδόσεις PKG και παιχνιδιού ταιριάζουν: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="647"/>
|
<location filename="../main_window.cpp" line="647"/>
|
||||||
<source>to install Patch: %2?</source>
|
<source>Would you like to overwrite?</source>
|
||||||
<translation>να εγκαταστήσετε το Patch: %2;</translation>
|
<translation>Θέλετε να αντικαταστήσετε;</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="659"/>
|
<location filename="../main_window.cpp" line="639"/>
|
||||||
<source>Game already installed\n%1\nWould you like to overwrite?</source>
|
<source>PKG Version %1 is older than installed version: </source>
|
||||||
<translation>Το παιχνίδι είναι ήδη εγκατεστημένο\n%1\nΘέλετε να αντικαταστήσετε;</translation>
|
<translation>Η έκδοση PKG %1 είναι παλαιότερη από την εγκατεστημένη έκδοση: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Game is installed: </source>
|
||||||
|
<translation>Το παιχνίδι είναι εγκατεστημένο: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Would you like to install Patch: </source>
|
||||||
|
<translation>Θέλετε να εγκαταστήσετε την ενημέρωση: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="673"/>
|
<location filename="../main_window.cpp" line="673"/>
|
||||||
<source>DLC Installation</source>
|
<source>DLC Installation</source>
|
||||||
<translation>DLC Installation</translation>
|
<translation>Εγκατάσταση DLC</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
<source>Would you like to install DLC: %1?</source>
|
<source>Would you like to install DLC: %1?</source>
|
||||||
<translation>Would you like to install DLC: %1?</translation>
|
<translation>Θέλετε να εγκαταστήσετε το DLC: %1;</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="688"/>
|
||||||
|
<source>DLC already installed:</source>
|
||||||
|
<translation>DLC ήδη εγκατεστημένο:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="701"/>
|
||||||
|
<source>Game already installed</source>
|
||||||
|
<translation>Παιχνίδι ήδη εγκατεστημένο</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
|
|
|
@ -566,44 +566,34 @@
|
||||||
<translation>PKG Extraction</translation>
|
<translation>PKG Extraction</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="633"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
|
<source>Patch detected!</source>
|
||||||
<translation>Patch detected!\nPKG and Game versions match!: %1\nWould you like </translation>
|
<translation>Patch detected!</translation>
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="634"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>to overwrite?</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="639"/>
|
|
||||||
<source>Patch detected!\nPKG Version %1 is older </source>
|
|
||||||
<translation>Patch detected!\nPKG Version %1 is older </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="640"/>
|
|
||||||
<source>than installed version!: %2\nWould you like </source>
|
|
||||||
<translation>than installed version!: %2\nWould you like </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="641"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>to overwrite?</translation>
|
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="646"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
|
<source>PKG and Game versions match: </source>
|
||||||
<translation>Patch detected!\nGame is installed: %1\nWould you like </translation>
|
<translation>PKG and Game versions match: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="647"/>
|
<location filename="../main_window.cpp" line="647"/>
|
||||||
<source>to install Patch: %2?</source>
|
<source>Would you like to overwrite?</source>
|
||||||
<translation>to install Patch: %2?</translation>
|
<translation>Would you like to overwrite?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="659"/>
|
<location filename="../main_window.cpp" line="639"/>
|
||||||
<source>Game already installed\n%1\nWould you like to overwrite?</source>
|
<source>PKG Version %1 is older than installed version: </source>
|
||||||
<translation>Game already installed\n%1\nWould you like to overwrite?</translation>
|
<translation>PKG Version %1 is older than installed version: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Game is installed: </source>
|
||||||
|
<translation>Game is installed: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Would you like to install Patch: </source>
|
||||||
|
<translation>Would you like to install Patch: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="673"/>
|
<location filename="../main_window.cpp" line="673"/>
|
||||||
|
@ -615,6 +605,16 @@
|
||||||
<source>Would you like to install DLC: %1?</source>
|
<source>Would you like to install DLC: %1?</source>
|
||||||
<translation>Would you like to install DLC: %1?</translation>
|
<translation>Would you like to install DLC: %1?</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="688"/>
|
||||||
|
<source>DLC already installed:</source>
|
||||||
|
<translation>DLC already installed:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="701"/>
|
||||||
|
<source>Game already installed</source>
|
||||||
|
<translation>Game already installed</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
<source>PKG is a patch, please install the game first!</source>
|
<source>PKG is a patch, please install the game first!</source>
|
||||||
|
|
|
@ -566,54 +566,54 @@
|
||||||
<translation>Extracción de PKG</translation>
|
<translation>Extracción de PKG</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="633"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
|
<source>Patch detected!</source>
|
||||||
<translation>¡Parche detectado!\n¡La versión de PKG y del juego coinciden!: %1\n¿Te gustaría </translation>
|
<translation>¡Actualización detectada!</translation>
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="634"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>¿sobrescribir?</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="639"/>
|
|
||||||
<source>Patch detected!\nPKG Version %1 is older </source>
|
|
||||||
<translation>¡Parche detectado!\nLa versión de PKG %1 es más antigua </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="640"/>
|
|
||||||
<source>than installed version!: %2\nWould you like </source>
|
|
||||||
<translation>que la versión instalada!: %2\n¿Te gustaría </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="641"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>¿sobrescribir?</translation>
|
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="646"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
|
<source>PKG and Game versions match: </source>
|
||||||
<translation>¡Parche detectado!\nJuego está instalado: %1\n¿Te gustaría </translation>
|
<translation>Las versiones de PKG y del juego coinciden: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="647"/>
|
<location filename="../main_window.cpp" line="647"/>
|
||||||
<source>to install Patch: %2?</source>
|
<source>Would you like to overwrite?</source>
|
||||||
<translation>¿instalar el parche: %2?</translation>
|
<translation>¿Desea sobrescribir?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="659"/>
|
<location filename="../main_window.cpp" line="639"/>
|
||||||
<source>Game already installed\n%1\nWould you like to overwrite?</source>
|
<source>PKG Version %1 is older than installed version: </source>
|
||||||
<translation>Juego ya instalado\n%1\n¿Te gustaría sobrescribirlo?</translation>
|
<translation>La versión de PKG %1 es más antigua que la versión instalada: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Game is installed: </source>
|
||||||
|
<translation>El juego está instalado: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Would you like to install Patch: </source>
|
||||||
|
<translation>¿Desea instalar la actualización: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="673"/>
|
<location filename="../main_window.cpp" line="673"/>
|
||||||
<source>DLC Installation</source>
|
<source>DLC Installation</source>
|
||||||
<translation>DLC Installation</translation>
|
<translation>Instalación de DLC</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
<source>Would you like to install DLC: %1?</source>
|
<source>Would you like to install DLC: %1?</source>
|
||||||
<translation>Would you like to install DLC: %1?</translation>
|
<translation>¿Desea instalar el DLC: %1?</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="688"/>
|
||||||
|
<source>DLC already installed:</source>
|
||||||
|
<translation>DLC ya instalado:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="701"/>
|
||||||
|
<source>Game already installed</source>
|
||||||
|
<translation>Juego ya instalado</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
|
|
|
@ -566,54 +566,54 @@
|
||||||
<translation>PKG:n purku</translation>
|
<translation>PKG:n purku</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="633"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
|
<source>Patch detected!</source>
|
||||||
<translation>Korjaus havaittu!\nPKG:n ja pelin versiot vastaavat!: %1\nHaluatko </translation>
|
<translation>Päivitys havaittu!</translation>
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="634"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>korvata?</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="639"/>
|
|
||||||
<source>Patch detected!\nPKG Version %1 is older </source>
|
|
||||||
<translation>Korjaus havaittu!\nPKG Version %1 on vanhempi </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="640"/>
|
|
||||||
<source>than installed version!: %2\nWould you like </source>
|
|
||||||
<translation>kuin asennettu versio!: %2\nHaluatko </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="641"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>korvata?</translation>
|
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="646"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
|
<source>PKG and Game versions match: </source>
|
||||||
<translation>Korjaus havaittu!\nPeli on asennettu: %1\nHaluatko </translation>
|
<translation>PKG- ja peliversiot vastaavat: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="647"/>
|
<location filename="../main_window.cpp" line="647"/>
|
||||||
<source>to install Patch: %2?</source>
|
<source>Would you like to overwrite?</source>
|
||||||
<translation>asentaa korjaus: %2?</translation>
|
<translation>Haluatko korvata?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="659"/>
|
<location filename="../main_window.cpp" line="639"/>
|
||||||
<source>Game already installed\n%1\nWould you like to overwrite?</source>
|
<source>PKG Version %1 is older than installed version: </source>
|
||||||
<translation>Peli on jo asennettu\n%1\nHaluatko korvata sen?</translation>
|
<translation>PKG-versio %1 on vanhempi kuin asennettu versio: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Game is installed: </source>
|
||||||
|
<translation>Peli on asennettu: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Would you like to install Patch: </source>
|
||||||
|
<translation>Haluatko asentaa päivityksen: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="673"/>
|
<location filename="../main_window.cpp" line="673"/>
|
||||||
<source>DLC Installation</source>
|
<source>DLC Installation</source>
|
||||||
<translation>DLC Installation</translation>
|
<translation>DLC-asennus</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
<source>Would you like to install DLC: %1?</source>
|
<source>Would you like to install DLC: %1?</source>
|
||||||
<translation>Would you like to install DLC: %1?</translation>
|
<translation>Haluatko asentaa DLC:n: %1?</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="688"/>
|
||||||
|
<source>DLC already installed:</source>
|
||||||
|
<translation>DLC on jo asennettu:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="701"/>
|
||||||
|
<source>Game already installed</source>
|
||||||
|
<translation>Peli on jo asennettu</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
|
|
|
@ -566,54 +566,54 @@
|
||||||
<translation>Extraction du PKG</translation>
|
<translation>Extraction du PKG</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="633"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
|
<source>Patch detected!</source>
|
||||||
<translation>Patch détecté !\nLa version du PKG et du jeu correspondent : %1\nSouhaitez-vous </translation>
|
<translation>Patch détecté !</translation>
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="634"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>écraser ?</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="639"/>
|
|
||||||
<source>Patch detected!\nPKG Version %1 is older </source>
|
|
||||||
<translation>Patch détecté !\nVersion PKG %1 est plus ancienne </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="640"/>
|
|
||||||
<source>than installed version!: %2\nWould you like </source>
|
|
||||||
<translation>que la version installée ! : %2\nSouhaitez-vous </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="641"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>écraser ?</translation>
|
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="646"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
|
<source>PKG and Game versions match: </source>
|
||||||
<translation>Patch détecté !\nJeu est installé : %1\nSouhaitez-vous </translation>
|
<translation>Les versions PKG et jeu correspondent : </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="647"/>
|
<location filename="../main_window.cpp" line="647"/>
|
||||||
<source>to install Patch: %2?</source>
|
<source>Would you like to overwrite?</source>
|
||||||
<translation>installer le patch : %2 ?</translation>
|
<translation>Souhaitez-vous remplacer ?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="659"/>
|
<location filename="../main_window.cpp" line="639"/>
|
||||||
<source>Game already installed\n%1\nWould you like to overwrite?</source>
|
<source>PKG Version %1 is older than installed version: </source>
|
||||||
<translation>Jeu déjà installé\n%1\nSouhaitez-vous écraser ?</translation>
|
<translation>La version PKG %1 est plus ancienne que la version installée : </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Game is installed: </source>
|
||||||
|
<translation>Jeu installé : </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Would you like to install Patch: </source>
|
||||||
|
<translation>Souhaitez-vous installer le patch : </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="673"/>
|
<location filename="../main_window.cpp" line="673"/>
|
||||||
<source>DLC Installation</source>
|
<source>DLC Installation</source>
|
||||||
<translation>DLC Installation</translation>
|
<translation>Installation du DLC</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
<source>Would you like to install DLC: %1?</source>
|
<source>Would you like to install DLC: %1?</source>
|
||||||
<translation>Would you like to install DLC: %1?</translation>
|
<translation>Souhaitez-vous installer le DLC : %1 ?</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="688"/>
|
||||||
|
<source>DLC already installed:</source>
|
||||||
|
<translation>DLC déjà installé :</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="701"/>
|
||||||
|
<source>Game already installed</source>
|
||||||
|
<translation>Jeu déjà installé</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
|
|
|
@ -566,54 +566,54 @@
|
||||||
<translation>PKG kicsomagolás</translation>
|
<translation>PKG kicsomagolás</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="633"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
|
<source>Patch detected!</source>
|
||||||
<translation>Javítás észlelve!\nA PKG és a játék verziók egyeznek: %1\nSzeretnéd </translation>
|
<translation>Frissítés észlelve!</translation>
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="634"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>felülírni?</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="639"/>
|
|
||||||
<source>Patch detected!\nPKG Version %1 is older </source>
|
|
||||||
<translation>Javítás észlelve!\nA PKG verzió %1 régebbi </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="640"/>
|
|
||||||
<source>than installed version!: %2\nWould you like </source>
|
|
||||||
<translation>mint a telepített verzió: %2\nSzeretnéd </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="641"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>felülírni?</translation>
|
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="646"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
|
<source>PKG and Game versions match: </source>
|
||||||
<translation>Javítás észlelve!\nA játék telepítve van: %1\nSzeretnéd </translation>
|
<translation>A PKG és a játék verziói egyeznek: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="647"/>
|
<location filename="../main_window.cpp" line="647"/>
|
||||||
<source>to install Patch: %2?</source>
|
<source>Would you like to overwrite?</source>
|
||||||
<translation>a javítást telepíteni: %2?</translation>
|
<translation>Szeretné felülírni?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="659"/>
|
<location filename="../main_window.cpp" line="639"/>
|
||||||
<source>Game already installed\n%1\nWould you like to overwrite?</source>
|
<source>PKG Version %1 is older than installed version: </source>
|
||||||
<translation>A játék már telepítve van\n%1\nSzeretnéd felülírni?</translation>
|
<translation>A %1-es PKG verzió régebbi, mint a telepített verzió: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Game is installed: </source>
|
||||||
|
<translation>A játék telepítve van: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Would you like to install Patch: </source>
|
||||||
|
<translation>Szeretné telepíteni a frissítést: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="673"/>
|
<location filename="../main_window.cpp" line="673"/>
|
||||||
<source>DLC Installation</source>
|
<source>DLC Installation</source>
|
||||||
<translation>DLC Installation</translation>
|
<translation>DLC Telepítés</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
<source>Would you like to install DLC: %1?</source>
|
<source>Would you like to install DLC: %1?</source>
|
||||||
<translation>Would you like to install DLC: %1?</translation>
|
<translation>Szeretné telepíteni a DLC-t: %1?</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="688"/>
|
||||||
|
<source>DLC already installed:</source>
|
||||||
|
<translation>DLC már telepítve:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="701"/>
|
||||||
|
<source>Game already installed</source>
|
||||||
|
<translation>A játék már telepítve van</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
|
|
|
@ -566,54 +566,54 @@
|
||||||
<translation>Ekstraksi PKG</translation>
|
<translation>Ekstraksi PKG</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="633"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
|
<source>Patch detected!</source>
|
||||||
<translation>Patch terdeteksi!\nVersi PKG dan Game cocok!: %1\nApakah Anda ingin </translation>
|
<translation>Patch terdeteksi!</translation>
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="634"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>menimpa?</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="639"/>
|
|
||||||
<source>Patch detected!\nPKG Version %1 is older </source>
|
|
||||||
<translation>Patch terdeteksi!\nVersi PKG %1 lebih lama </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="640"/>
|
|
||||||
<source>than installed version!: %2\nWould you like </source>
|
|
||||||
<translation>daripada versi yang terpasang!: %2\nApakah Anda ingin </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="641"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>menimpa?</translation>
|
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="646"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
|
<source>PKG and Game versions match: </source>
|
||||||
<translation>Patch terdeteksi!\nGame terpasang: %1\nApakah Anda ingin </translation>
|
<translation>Versi PKG dan Game cocok: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="647"/>
|
<location filename="../main_window.cpp" line="647"/>
|
||||||
<source>to install Patch: %2?</source>
|
<source>Would you like to overwrite?</source>
|
||||||
<translation>memasang Patch: %2?</translation>
|
<translation>Apakah Anda ingin menimpa?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="659"/>
|
<location filename="../main_window.cpp" line="639"/>
|
||||||
<source>Game already installed\n%1\nWould you like to overwrite?</source>
|
<source>PKG Version %1 is older than installed version: </source>
|
||||||
<translation>Game sudah terpasang\n%1\nApakah Anda ingin menimpa?</translation>
|
<translation>Versi PKG %1 lebih lama dari versi yang terpasang: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Game is installed: </source>
|
||||||
|
<translation>Game telah terpasang: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Would you like to install Patch: </source>
|
||||||
|
<translation>Apakah Anda ingin menginstal patch: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="673"/>
|
<location filename="../main_window.cpp" line="673"/>
|
||||||
<source>DLC Installation</source>
|
<source>DLC Installation</source>
|
||||||
<translation>DLC Installation</translation>
|
<translation>Instalasi DLC</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
<source>Would you like to install DLC: %1?</source>
|
<source>Would you like to install DLC: %1?</source>
|
||||||
<translation>Would you like to install DLC: %1?</translation>
|
<translation>Apakah Anda ingin menginstal DLC: %1?</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="688"/>
|
||||||
|
<source>DLC already installed:</source>
|
||||||
|
<translation>DLC sudah terpasang:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="701"/>
|
||||||
|
<source>Game already installed</source>
|
||||||
|
<translation>Game sudah terpasang</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
|
|
|
@ -181,7 +181,7 @@
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window_ui.h" line="318"/>
|
<location filename="../main_window_ui.h" line="318"/>
|
||||||
<source>Install application from a .pkg file</source>
|
<source>Install application from a .pkg file</source>
|
||||||
<translation>Installa applicazione da un file .pkg file</translation>
|
<translation>Installa applicazione da un file .pkg</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window_ui.h" line="320"/>
|
<location filename="../main_window_ui.h" line="320"/>
|
||||||
|
@ -236,7 +236,7 @@
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window_ui.h" line="338"/>
|
<location filename="../main_window_ui.h" line="338"/>
|
||||||
<source>List View</source>
|
<source>List View</source>
|
||||||
<translation>Visualizzazione lista</translation>
|
<translation>Visualizzazione Lista</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window_ui.h" line="340"/>
|
<location filename="../main_window_ui.h" line="340"/>
|
||||||
|
@ -341,7 +341,7 @@
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window_ui.h" line="364"/>
|
<location filename="../main_window_ui.h" line="364"/>
|
||||||
<source>toolBar</source>
|
<source>toolBar</source>
|
||||||
<translation>barra strumenti</translation>
|
<translation>Barra strumenti</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
|
@ -566,44 +566,34 @@
|
||||||
<translation>Estrazione file PKG</translation>
|
<translation>Estrazione file PKG</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="633"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
|
<source>Patch detected!</source>
|
||||||
<translation>Patch rilevata! Il\nPKG e la versione del gioco coincidono!: %1\nVuoi </translation>
|
<translation>Patch rilevata!</translation>
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="634"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>sovrascrivere?</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="639"/>
|
|
||||||
<source>Patch detected!\nPKG Version %1 is older </source>
|
|
||||||
<translation>Patch rilevata! La \nPKG Versione %1 è più vecchia </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="640"/>
|
|
||||||
<source>than installed version!: %2\nWould you like </source>
|
|
||||||
<translation>della versione installata!: %2\nVuoi </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="641"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>sovrascrivere?</translation>
|
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="646"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
|
<source>PKG and Game versions match: </source>
|
||||||
<translation>Patch rilevata!\nGioco installato: %1\Vuoi </translation>
|
<translation>Le versioni di PKG e del gioco corrispondono: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="647"/>
|
<location filename="../main_window.cpp" line="647"/>
|
||||||
<source>to install Patch: %2?</source>
|
<source>Would you like to overwrite?</source>
|
||||||
<translation>installare la Patch: %2?</translation>
|
<translation>Vuoi sovrascrivere?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="659"/>
|
<location filename="../main_window.cpp" line="639"/>
|
||||||
<source>Game already installed\n%1\nWould you like to overwrite?</source>
|
<source>PKG Version %1 is older than installed version: </source>
|
||||||
<translation>Gioco già installato\n%1\nVuoi sovrascrivere??</translation>
|
<translation>La versione PKG %1 è più vecchia rispetto alla versione installata: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Game is installed: </source>
|
||||||
|
<translation>Gioco installato: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Would you like to install Patch: </source>
|
||||||
|
<translation>Vuoi installare la patch: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="673"/>
|
<location filename="../main_window.cpp" line="673"/>
|
||||||
|
@ -615,6 +605,16 @@
|
||||||
<source>Would you like to install DLC: %1?</source>
|
<source>Would you like to install DLC: %1?</source>
|
||||||
<translation>Vuoi installare il DLC: %1?</translation>
|
<translation>Vuoi installare il DLC: %1?</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="688"/>
|
||||||
|
<source>DLC already installed:</source>
|
||||||
|
<translation>DLC già installato:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="701"/>
|
||||||
|
<source>Game already installed</source>
|
||||||
|
<translation>Gioco già installato</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
<source>PKG is a patch, please install the game first!</source>
|
<source>PKG is a patch, please install the game first!</source>
|
||||||
|
@ -651,12 +651,12 @@
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="44"/>
|
<location filename="../cheats_patches.cpp" line="44"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
<translation>Cheat / Patch</translation>
|
<translation>Trucchi / Patch</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="50"/>
|
<location filename="../cheats_patches.cpp" line="50"/>
|
||||||
<source>defaultTextEdit_MSG</source>
|
<source>defaultTextEdit_MSG</source>
|
||||||
<translation>I cheats/patches sono sperimentali.\nUtilizzali con cautela.\n\nScarica i cheats singolarmente selezionando il repository e cliccando sul pulsante di download.\nNella scheda Patches, puoi scaricare tutti i patch in una volta sola, scegliere quali vuoi utilizzare e salvare la tua selezione.\n\nPoiché non sviluppiamo i Cheats/Patches,\nper favore segnala i problemi all'autore del cheat.\n\nHai creato un nuovo cheat? Visita:\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
|
<translation>I trucchi e le patch sono sperimentali.\nUtilizzali con cautela.\n\nScarica i trucchi singolarmente selezionando l'archivio e cliccando sul pulsante di download.\nNella scheda Patch, puoi scaricare tutte le patch in una volta sola, scegliere quali vuoi utilizzare e salvare la tua selezione.\n\nPoiché non sviluppiamo i trucchi e le patch,\nper favore segnala i problemi all'autore dei trucchi.\n\nHai creato un nuovo trucco? Visita:\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="69"/>
|
<location filename="../cheats_patches.cpp" line="69"/>
|
||||||
|
|
|
@ -566,54 +566,54 @@
|
||||||
<translation>PKG抽出</translation>
|
<translation>PKG抽出</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="633"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
|
<source>Patch detected!</source>
|
||||||
<translation>パッチが検出されました!\nPKGとゲームバージョンが一致しています!: %1\n上書きしますか</translation>
|
<translation>パッチが検出されました!</translation>
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="634"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>上書きしますか?</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="639"/>
|
|
||||||
<source>Patch detected!\nPKG Version %1 is older </source>
|
|
||||||
<translation>パッチが検出されました!\nPKGバージョン %1 は古い </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="640"/>
|
|
||||||
<source>than installed version!: %2\nWould you like </source>
|
|
||||||
<translation>インストールされているバージョンよりも古いです!: %2\n上書きしますか</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="641"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>上書きしますか?</translation>
|
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="646"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
|
<source>PKG and Game versions match: </source>
|
||||||
<translation>パッチが検出されました!\nゲームがインストールされています: %1\nインストールしますか</translation>
|
<translation>PKGとゲームのバージョンが一致しています: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="647"/>
|
<location filename="../main_window.cpp" line="647"/>
|
||||||
<source>to install Patch: %2?</source>
|
<source>Would you like to overwrite?</source>
|
||||||
<translation>パッチをインストールしますか: %2?</translation>
|
<translation>上書きしてもよろしいですか?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="659"/>
|
<location filename="../main_window.cpp" line="639"/>
|
||||||
<source>Game already installed\n%1\nWould you like to overwrite?</source>
|
<source>PKG Version %1 is older than installed version: </source>
|
||||||
<translation>ゲームはすでにインストールされています\n%1\n上書きしますか?</translation>
|
<translation>PKGバージョン %1 はインストールされているバージョンよりも古いです: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Game is installed: </source>
|
||||||
|
<translation>ゲームはインストール済みです: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Would you like to install Patch: </source>
|
||||||
|
<translation>パッチをインストールしてもよろしいですか: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="673"/>
|
<location filename="../main_window.cpp" line="673"/>
|
||||||
<source>DLC Installation</source>
|
<source>DLC Installation</source>
|
||||||
<translation>DLC Installation</translation>
|
<translation>DLCのインストール</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
<source>Would you like to install DLC: %1?</source>
|
<source>Would you like to install DLC: %1?</source>
|
||||||
<translation>Would you like to install DLC: %1?</translation>
|
<translation>DLCをインストールしてもよろしいですか: %1?</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="688"/>
|
||||||
|
<source>DLC already installed:</source>
|
||||||
|
<translation>DLCはすでにインストールされています:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="701"/>
|
||||||
|
<source>Game already installed</source>
|
||||||
|
<translation>ゲームはすでにインストールされています</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
|
|
|
@ -566,44 +566,34 @@
|
||||||
<translation>PKG Extraction</translation>
|
<translation>PKG Extraction</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="633"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
|
<source>Patch detected!</source>
|
||||||
<translation>Patch detected!\nPKG and Game versions match!: %1\nWould you like </translation>
|
<translation>Patch detected!</translation>
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="634"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>to overwrite?</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="639"/>
|
|
||||||
<source>Patch detected!\nPKG Version %1 is older </source>
|
|
||||||
<translation>Patch detected!\nPKG Version %1 is older </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="640"/>
|
|
||||||
<source>than installed version!: %2\nWould you like </source>
|
|
||||||
<translation>than installed version!: %2\nWould you like </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="641"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>to overwrite?</translation>
|
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="646"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
|
<source>PKG and Game versions match: </source>
|
||||||
<translation>Patch detected!\nGame is installed: %1\nWould you like </translation>
|
<translation>PKG and Game versions match: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="647"/>
|
<location filename="../main_window.cpp" line="647"/>
|
||||||
<source>to install Patch: %2?</source>
|
<source>Would you like to overwrite?</source>
|
||||||
<translation>to install Patch: %2?</translation>
|
<translation>Would you like to overwrite?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="659"/>
|
<location filename="../main_window.cpp" line="639"/>
|
||||||
<source>Game already installed\n%1\nWould you like to overwrite?</source>
|
<source>PKG Version %1 is older than installed version: </source>
|
||||||
<translation>Game already installed\n%1\nWould you like to overwrite?</translation>
|
<translation>PKG Version %1 is older than installed version: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Game is installed: </source>
|
||||||
|
<translation>Game is installed: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Would you like to install Patch: </source>
|
||||||
|
<translation>Would you like to install Patch: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="673"/>
|
<location filename="../main_window.cpp" line="673"/>
|
||||||
|
@ -615,6 +605,16 @@
|
||||||
<source>Would you like to install DLC: %1?</source>
|
<source>Would you like to install DLC: %1?</source>
|
||||||
<translation>Would you like to install DLC: %1?</translation>
|
<translation>Would you like to install DLC: %1?</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="688"/>
|
||||||
|
<source>DLC already installed:</source>
|
||||||
|
<translation>DLC already installed:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="701"/>
|
||||||
|
<source>Game already installed</source>
|
||||||
|
<translation>Game already installed</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
<source>PKG is a patch, please install the game first!</source>
|
<source>PKG is a patch, please install the game first!</source>
|
||||||
|
|
|
@ -566,54 +566,54 @@
|
||||||
<translation>PKG ištraukimas</translation>
|
<translation>PKG ištraukimas</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="633"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
|
<source>Patch detected!</source>
|
||||||
<translation>Pataisa aptikta!\nPKG ir žaidimo versijos atitinka!: %1\nAr norėtumėte </translation>
|
<translation>Rasta atnaujinimą!</translation>
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="634"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>perrašyti?</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="639"/>
|
|
||||||
<source>Patch detected!\nPKG Version %1 is older </source>
|
|
||||||
<translation>Pataisa aptikta!\nPKG versija %1 yra senesnė </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="640"/>
|
|
||||||
<source>than installed version!: %2\nWould you like </source>
|
|
||||||
<translation>nei įdiegta versija!: %2\nAr norėtumėte </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="641"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>perrašyti?</translation>
|
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="646"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
|
<source>PKG and Game versions match: </source>
|
||||||
<translation>Pataisa aptikta!\nŽaidimas įdiegtas: %1\nAr norėtumėte </translation>
|
<translation>PKG ir žaidimo versijos sutampa: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="647"/>
|
<location filename="../main_window.cpp" line="647"/>
|
||||||
<source>to install Patch: %2?</source>
|
<source>Would you like to overwrite?</source>
|
||||||
<translation>įdiegti pataisą: %2?</translation>
|
<translation>Ar norite perrašyti?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="659"/>
|
<location filename="../main_window.cpp" line="639"/>
|
||||||
<source>Game already installed\n%1\nWould you like to overwrite?</source>
|
<source>PKG Version %1 is older than installed version: </source>
|
||||||
<translation>Žaidimas jau įdiegtas\n%1\nAr norėtumėte perrašyti?</translation>
|
<translation>PKG versija %1 yra senesnė nei įdiegta versija: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Game is installed: </source>
|
||||||
|
<translation>Žaidimas įdiegtas: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Would you like to install Patch: </source>
|
||||||
|
<translation>Ar norite įdiegti atnaujinimą: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="673"/>
|
<location filename="../main_window.cpp" line="673"/>
|
||||||
<source>DLC Installation</source>
|
<source>DLC Installation</source>
|
||||||
<translation>DLC Installation</translation>
|
<translation>DLC diegimas</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
<source>Would you like to install DLC: %1?</source>
|
<source>Would you like to install DLC: %1?</source>
|
||||||
<translation>Would you like to install DLC: %1?</translation>
|
<translation>Ar norite įdiegti DLC: %1?</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="688"/>
|
||||||
|
<source>DLC already installed:</source>
|
||||||
|
<translation>DLC jau įdiegtas:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="701"/>
|
||||||
|
<source>Game already installed</source>
|
||||||
|
<translation>Žaidimas jau įdiegtas</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
|
|
|
@ -566,54 +566,54 @@
|
||||||
<translation>PKG-ekstraksjon</translation>
|
<translation>PKG-ekstraksjon</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="633"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
|
<source>Patch detected!</source>
|
||||||
<translation>Oppdatering oppdaget!\nPKG og spillversjoner stemmer!: %1\nØnsker du å </translation>
|
<translation>Oppdatering oppdaget!</translation>
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="634"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>overskrive?</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="639"/>
|
|
||||||
<source>Patch detected!\nPKG Version %1 is older </source>
|
|
||||||
<translation>Oppdatering oppdaget!\nPKG-versjon %1 er eldre </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="640"/>
|
|
||||||
<source>than installed version!: %2\nWould you like </source>
|
|
||||||
<translation>enn installert versjon!: %2\nØnsker du å </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="641"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>overskrive?</translation>
|
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="646"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
|
<source>PKG and Game versions match: </source>
|
||||||
<translation>Oppdatering oppdaget!\nSpillet er installert: %1\nØnsker du å </translation>
|
<translation>PKG- og spillversjoner stemmer overens: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="647"/>
|
<location filename="../main_window.cpp" line="647"/>
|
||||||
<source>to install Patch: %2?</source>
|
<source>Would you like to overwrite?</source>
|
||||||
<translation>installere oppdateringen: %2?</translation>
|
<translation>Ønsker du å overskrive?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="659"/>
|
<location filename="../main_window.cpp" line="639"/>
|
||||||
<source>Game already installed\n%1\nWould you like to overwrite?</source>
|
<source>PKG Version %1 is older than installed version: </source>
|
||||||
<translation>Spill allerede installert\n%1\nØnsker du å overskrive?</translation>
|
<translation>PKG-versjon %1 er eldre enn installert versjon: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Game is installed: </source>
|
||||||
|
<translation>Spillet er installert: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Would you like to install Patch: </source>
|
||||||
|
<translation>Ønsker du å installere oppdateringen: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="673"/>
|
<location filename="../main_window.cpp" line="673"/>
|
||||||
<source>DLC Installation</source>
|
<source>DLC Installation</source>
|
||||||
<translation>DLC Installation</translation>
|
<translation>DLC-installasjon</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
<source>Would you like to install DLC: %1?</source>
|
<source>Would you like to install DLC: %1?</source>
|
||||||
<translation>Would you like to install DLC: %1?</translation>
|
<translation>Ønsker du å installere DLC: %1?</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="688"/>
|
||||||
|
<source>DLC already installed:</source>
|
||||||
|
<translation>DLC allerede installert:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="701"/>
|
||||||
|
<source>Game already installed</source>
|
||||||
|
<translation>Spillet er allerede installert</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
|
|
|
@ -566,54 +566,54 @@
|
||||||
<translation>PKG-extractie</translation>
|
<translation>PKG-extractie</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="633"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
|
<source>Patch detected!</source>
|
||||||
<translation>Patch gedetecteerd!\nPKG en spelversies komen overeen!: %1\nWil je </translation>
|
<translation>Patch gedetecteerd!</translation>
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="634"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>overschrijven?</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="639"/>
|
|
||||||
<source>Patch detected!\nPKG Version %1 is older </source>
|
|
||||||
<translation>Patch gedetecteerd!\nPKG-versie %1 is ouder </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="640"/>
|
|
||||||
<source>than installed version!: %2\nWould you like </source>
|
|
||||||
<translation>dan de geïnstalleerde versie!: %2\nWil je </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="641"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>overschrijven?</translation>
|
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="646"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
|
<source>PKG and Game versions match: </source>
|
||||||
<translation>Patch gedetecteerd!\nSpel is geïnstalleerd: %1\nWil je </translation>
|
<translation>PKG- en gameversies komen overeen: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="647"/>
|
<location filename="../main_window.cpp" line="647"/>
|
||||||
<source>to install Patch: %2?</source>
|
<source>Would you like to overwrite?</source>
|
||||||
<translation>de patch installeren: %2?</translation>
|
<translation>Wilt u overschrijven?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="659"/>
|
<location filename="../main_window.cpp" line="639"/>
|
||||||
<source>Game already installed\n%1\nWould you like to overwrite?</source>
|
<source>PKG Version %1 is older than installed version: </source>
|
||||||
<translation>Spel al geïnstalleerd\n%1\nWil je het overschrijven?</translation>
|
<translation>PKG-versie %1 is ouder dan de geïnstalleerde versie: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Game is installed: </source>
|
||||||
|
<translation>Game is geïnstalleerd: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Would you like to install Patch: </source>
|
||||||
|
<translation>Wilt u de patch installeren: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="673"/>
|
<location filename="../main_window.cpp" line="673"/>
|
||||||
<source>DLC Installation</source>
|
<source>DLC Installation</source>
|
||||||
<translation>DLC Installation</translation>
|
<translation>DLC-installatie</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
<source>Would you like to install DLC: %1?</source>
|
<source>Would you like to install DLC: %1?</source>
|
||||||
<translation>Would you like to install DLC: %1?</translation>
|
<translation>Wilt u DLC installeren: %1?</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="688"/>
|
||||||
|
<source>DLC already installed:</source>
|
||||||
|
<translation>DLC al geïnstalleerd:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="701"/>
|
||||||
|
<source>Game already installed</source>
|
||||||
|
<translation>Game al geïnstalleerd</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
|
|
|
@ -566,54 +566,54 @@
|
||||||
<translation>Ekstrakcja PKG</translation>
|
<translation>Ekstrakcja PKG</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="633"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
|
<source>Patch detected!</source>
|
||||||
<translation>Wykryto poprawkę!\nWersje PKG i gry pasują do siebie!: %1\nCzy chcesz </translation>
|
<translation>Wykryto łatkę!</translation>
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="634"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>nadpisać?</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="639"/>
|
|
||||||
<source>Patch detected!\nPKG Version %1 is older </source>
|
|
||||||
<translation>Wykryto poprawkę!\nWersja PKG %1 jest starsza </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="640"/>
|
|
||||||
<source>than installed version!: %2\nWould you like </source>
|
|
||||||
<translation>niż zainstalowana wersja!: %2\nCzy chcesz </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="641"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>nadpisać?</translation>
|
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="646"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
|
<source>PKG and Game versions match: </source>
|
||||||
<translation>Wykryto poprawkę!\nGra jest zainstalowana: %1\nCzy chcesz </translation>
|
<translation>Wersje PKG i gry są zgodne: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="647"/>
|
<location filename="../main_window.cpp" line="647"/>
|
||||||
<source>to install Patch: %2?</source>
|
<source>Would you like to overwrite?</source>
|
||||||
<translation>zainstalować poprawkę: %2?</translation>
|
<translation>Czy chcesz nadpisać?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="659"/>
|
<location filename="../main_window.cpp" line="639"/>
|
||||||
<source>Game already installed\n%1\nWould you like to overwrite?</source>
|
<source>PKG Version %1 is older than installed version: </source>
|
||||||
<translation>Gra już zainstalowana\n%1\nCzy chcesz ją nadpisać?</translation>
|
<translation>Wersja PKG %1 jest starsza niż zainstalowana wersja: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Game is installed: </source>
|
||||||
|
<translation>Gra jest zainstalowana: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Would you like to install Patch: </source>
|
||||||
|
<translation>Czy chcesz zainstalować łatkę: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="673"/>
|
<location filename="../main_window.cpp" line="673"/>
|
||||||
<source>DLC Installation</source>
|
<source>DLC Installation</source>
|
||||||
<translation>Instalacja dodadkowej zawartości (DLC)</translation>
|
<translation>Instalacja DLC</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
<source>Would you like to install DLC: %1?</source>
|
<source>Would you like to install DLC: %1?</source>
|
||||||
<translation>Czy na pewno chcesz zainstalować dodatkową zawartość (DLC): %1?</translation>
|
<translation>Czy chcesz zainstalować DLC: %1?</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="688"/>
|
||||||
|
<source>DLC already installed:</source>
|
||||||
|
<translation>DLC już zainstalowane:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="701"/>
|
||||||
|
<source>Game already installed</source>
|
||||||
|
<translation>Gra już zainstalowana</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
|
|
|
@ -37,7 +37,7 @@
|
||||||
<message>
|
<message>
|
||||||
<location filename="../game_info.cpp" line="26"/>
|
<location filename="../game_info.cpp" line="26"/>
|
||||||
<source>Loading game list, please wait :3</source>
|
<source>Loading game list, please wait :3</source>
|
||||||
<translation>Carregando lista de jogos, por favor aguarde :3</translation>
|
<translation>Carregando a lista de jogos, por favor aguarde :3</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../game_info.cpp" line="26"/>
|
<location filename="../game_info.cpp" line="26"/>
|
||||||
|
@ -256,7 +256,7 @@
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window_ui.h" line="343"/>
|
<location filename="../main_window_ui.h" line="343"/>
|
||||||
<source>Download Cheats/Patches</source>
|
<source>Download Cheats/Patches</source>
|
||||||
<translation>Baixar Trapaças / Patches</translation>
|
<translation>Baixar Cheats/Patches</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window_ui.h" line="345"/>
|
<location filename="../main_window_ui.h" line="345"/>
|
||||||
|
@ -291,7 +291,7 @@
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window_ui.h" line="354"/>
|
<location filename="../main_window_ui.h" line="354"/>
|
||||||
<source>Game List Mode</source>
|
<source>Game List Mode</source>
|
||||||
<translation>Modo de Lista de Jogos</translation>
|
<translation>Modo da Lista de Jogos</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window_ui.h" line="355"/>
|
<location filename="../main_window_ui.h" line="355"/>
|
||||||
|
@ -425,7 +425,7 @@
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="235"/>
|
<location filename="../settings_dialog.ui" line="235"/>
|
||||||
<source>Log Filter</source>
|
<source>Log Filter</source>
|
||||||
<translation>Filtro</translation>
|
<translation>Filtro do Registro</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="272"/>
|
<location filename="../settings_dialog.ui" line="272"/>
|
||||||
|
@ -508,12 +508,12 @@
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="326"/>
|
<location filename="../main_window.cpp" line="326"/>
|
||||||
<source>Download Cheats For All Installed Games</source>
|
<source>Download Cheats For All Installed Games</source>
|
||||||
<translation>Baixar Trapaças para todos os jogos instalados</translation>
|
<translation>Baixar Cheats para Todos os Jogos Instalados</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="328"/>
|
<location filename="../main_window.cpp" line="328"/>
|
||||||
<source>Download Patches For All Games</source>
|
<source>Download Patches For All Games</source>
|
||||||
<translation>Baixar Patches para todos os jogos</translation>
|
<translation>Baixar Patches para Todos os Jogos</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="363"/>
|
<location filename="../main_window.cpp" line="363"/>
|
||||||
|
@ -523,7 +523,7 @@
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="364"/>
|
<location filename="../main_window.cpp" line="364"/>
|
||||||
<source>You have downloaded cheats for all the games you have installed.</source>
|
<source>You have downloaded cheats for all the games you have installed.</source>
|
||||||
<translation>Você baixou trapaças para todos os jogos que instalou.</translation>
|
<translation>Você baixou cheats para todos os jogos que instalou.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="391"/>
|
<location filename="../main_window.cpp" line="391"/>
|
||||||
|
@ -566,64 +566,64 @@
|
||||||
<translation>Extração de PKG</translation>
|
<translation>Extração de PKG</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="633"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
|
<source>Patch detected!</source>
|
||||||
<translation>Patch detectado!\nVersões PKG e do Jogo correspondem!: %1\nGostaria de </translation>
|
<translation>Atualização detectada!</translation>
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="634"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>substituir?</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="639"/>
|
|
||||||
<source>Patch detected!\nPKG Version %1 is older </source>
|
|
||||||
<translation>Patch detectado!\nVersão PKG %1 é mais antiga </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="640"/>
|
|
||||||
<source>than installed version!: %2\nWould you like </source>
|
|
||||||
<translation>do que a versão instalada!: %2\nGostaria de </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="641"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>substituir?</translation>
|
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="646"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
|
<source>PKG and Game versions match: </source>
|
||||||
<translation>Patch detectado!\nJogo está instalado: %1\nGostaria de </translation>
|
<translation>As versões do PKG e do Jogo são igual: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="647"/>
|
<location filename="../main_window.cpp" line="647"/>
|
||||||
<source>to install Patch: %2?</source>
|
<source>Would you like to overwrite?</source>
|
||||||
<translation>instalar o Patch: %2?</translation>
|
<translation>Gostaria de substituir?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="659"/>
|
<location filename="../main_window.cpp" line="639"/>
|
||||||
<source>Game already installed\n%1\nWould you like to overwrite?</source>
|
<source>PKG Version %1 is older than installed version: </source>
|
||||||
<translation>Jogo já instalado\n%1\nGostaria de substituir?</translation>
|
<translation>Versão do PKG %1 é mais antiga do que a versão instalada: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Game is installed: </source>
|
||||||
|
<translation>Jogo instalado: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Would you like to install Patch: </source>
|
||||||
|
<translation>Você gostaria de instalar a atualização: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="673"/>
|
<location filename="../main_window.cpp" line="673"/>
|
||||||
<source>DLC Installation</source>
|
<source>DLC Installation</source>
|
||||||
<translation>DLC Installation</translation>
|
<translation>Instalação de DLC</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
<source>Would you like to install DLC: %1?</source>
|
<source>Would you like to install DLC: %1?</source>
|
||||||
<translation>Would you like to install DLC: %1?</translation>
|
<translation>Você gostaria de instalar o DLC: %1?</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="688"/>
|
||||||
|
<source>DLC already installed:</source>
|
||||||
|
<translation>DLC já instalada:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="701"/>
|
||||||
|
<source>Game already installed</source>
|
||||||
|
<translation>O jogo já está instalado:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
<source>PKG is a patch, please install the game first!</source>
|
<source>PKG is a patch, please install the game first!</source>
|
||||||
<translation>PKG é um patch, por favor, instale o jogo primeiro!</translation>
|
<translation>O PKG é um patch, por favor, instale o jogo primeiro!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="681"/>
|
<location filename="../main_window.cpp" line="681"/>
|
||||||
<source>PKG ERROR</source>
|
<source>PKG ERROR</source>
|
||||||
<translation>ERRO PKG</translation>
|
<translation>ERRO de PKG</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="693"/>
|
<location filename="../main_window.cpp" line="693"/>
|
||||||
|
@ -651,12 +651,12 @@
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="44"/>
|
<location filename="../cheats_patches.cpp" line="44"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
<translation>Trapaças / Patches</translation>
|
<translation>Cheats / Patches</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="50"/>
|
<location filename="../cheats_patches.cpp" line="50"/>
|
||||||
<source>defaultTextEdit_MSG</source>
|
<source>defaultTextEdit_MSG</source>
|
||||||
<translation>Trapaças/Patches são experimentais.\nUse com cautela.\n\nBaixe as trapaças individualmente selecionando o repositório e clicando no botão de download.\nNa aba Patches, você pode baixar todos os Patches de uma vez, escolher qual deseja usar e salvar a opção.\n\nComo não desenvolvemos as Trapaças/Patches,\npor favor, reporte problemas relacionados ao autor da trapaça.\n\nCriou uma nova trapaça? Visite:\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
|
<translation>Cheats/Patches são experimentais.\nUse com cautela.\n\nBaixe os cheats individualmente selecionando o repositório e clicando no botão de download.\nNa aba Patches, você pode baixar todos os Patches de uma vez, escolha qual deseja usar e salve a opção.\n\nComo não desenvolvemos os Cheats/Patches,\npor favor, reporte problemas relacionados ao autor do cheat.\n\nCriou um novo cheat? Visite:\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="69"/>
|
<location filename="../cheats_patches.cpp" line="69"/>
|
||||||
|
@ -666,7 +666,7 @@
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="79"/>
|
<location filename="../cheats_patches.cpp" line="79"/>
|
||||||
<source>Serial: </source>
|
<source>Serial: </source>
|
||||||
<translation>Série: </translation>
|
<translation>Serial: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="83"/>
|
<location filename="../cheats_patches.cpp" line="83"/>
|
||||||
|
@ -681,7 +681,7 @@
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="126"/>
|
<location filename="../cheats_patches.cpp" line="126"/>
|
||||||
<source>Select Cheat File:</source>
|
<source>Select Cheat File:</source>
|
||||||
<translation>Selecione o Arquivo de Trapaça:</translation>
|
<translation>Selecione o Arquivo de Cheat:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="133"/>
|
<location filename="../cheats_patches.cpp" line="133"/>
|
||||||
|
@ -691,7 +691,7 @@
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="149"/>
|
<location filename="../cheats_patches.cpp" line="149"/>
|
||||||
<source>Download Cheats</source>
|
<source>Download Cheats</source>
|
||||||
<translation>Baixar Trapaças</translation>
|
<translation>Baixar Cheats</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="155"/>
|
<location filename="../cheats_patches.cpp" line="155"/>
|
||||||
|
@ -706,7 +706,7 @@
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="170"/>
|
<location filename="../cheats_patches.cpp" line="170"/>
|
||||||
<source>You can delete the cheats you don't want after downloading them.</source>
|
<source>You can delete the cheats you don't want after downloading them.</source>
|
||||||
<translation>Você pode excluir as trapaças que não deseja após baixá-las.</translation>
|
<translation>Você pode excluir os cheats que não deseja após baixá-las.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="178"/>
|
<location filename="../cheats_patches.cpp" line="178"/>
|
||||||
|
@ -731,7 +731,7 @@
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="256"/>
|
<location filename="../cheats_patches.cpp" line="256"/>
|
||||||
<source>Cheats</source>
|
<source>Cheats</source>
|
||||||
<translation>Trapaças</translation>
|
<translation>Cheats</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="257"/>
|
<location filename="../cheats_patches.cpp" line="257"/>
|
||||||
|
@ -756,7 +756,7 @@
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="316"/>
|
<location filename="../cheats_patches.cpp" line="316"/>
|
||||||
<source>No patch file found for the current serial.</source>
|
<source>No patch file found for the current serial.</source>
|
||||||
<translation>Nenhum arquivo de patch encontrado para a série atual.</translation>
|
<translation>Nenhum arquivo de patch encontrado para o serial atual.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="323"/>
|
<location filename="../cheats_patches.cpp" line="323"/>
|
||||||
|
@ -816,22 +816,22 @@
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="556"/>
|
<location filename="../cheats_patches.cpp" line="556"/>
|
||||||
<source>Cheats Not Found</source>
|
<source>Cheats Not Found</source>
|
||||||
<translation>Trapaças Não Encontradas</translation>
|
<translation>Cheats Não Encontrados</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="556"/>
|
<location filename="../cheats_patches.cpp" line="556"/>
|
||||||
<source>CheatsNotFound_MSG</source>
|
<source>CheatsNotFound_MSG</source>
|
||||||
<translation>Nenhuma trapaça encontrada para este jogo nesta versão do repositório selecionado, tente outro repositório ou uma versão diferente do jogo.</translation>
|
<translation>Nenhum cheat encontrado para este jogo nesta versão do repositório selecionado, tente outro repositório ou uma versão diferente do jogo.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="593"/>
|
<location filename="../cheats_patches.cpp" line="593"/>
|
||||||
<source>Cheats Downloaded Successfully</source>
|
<source>Cheats Downloaded Successfully</source>
|
||||||
<translation>Trapaças Baixadas com Sucesso</translation>
|
<translation>Cheats Baixados com Sucesso</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="594"/>
|
<location filename="../cheats_patches.cpp" line="594"/>
|
||||||
<source>CheatsDownloadedSuccessfully_MSG</source>
|
<source>CheatsDownloadedSuccessfully_MSG</source>
|
||||||
<translation>Você baixou as trapaças com sucesso. Para esta versão do jogo a partir do repositório selecionado.Você pode tentar baixar de outro repositório, se estiver disponível, também será possível usá-lo selecionando o arquivo da lista.</translation>
|
<translation>Você baixou os cheats com sucesso. Para esta versão do jogo a partir do repositório selecionado. Você pode tentar baixar de outro repositório, se estiver disponível, também será possível usá-lo selecionando o arquivo da lista.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="747"/>
|
<location filename="../cheats_patches.cpp" line="747"/>
|
||||||
|
@ -851,7 +851,7 @@
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="763"/>
|
<location filename="../cheats_patches.cpp" line="763"/>
|
||||||
<source>DownloadComplete_MSG</source>
|
<source>DownloadComplete_MSG</source>
|
||||||
<translation>Patches Baixados com Sucesso! Todos os patches disponíveis para todos os jogos foram baixados, não é necessário baixá-los individualmente para cada jogo como acontece com as Trapaças.</translation>
|
<translation>Patches Baixados com Sucesso! Todos os patches disponíveis para todos os jogos foram baixados, não é necessário baixá-los individualmente para cada jogo como acontece com os Cheats.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="773"/>
|
<location filename="../cheats_patches.cpp" line="773"/>
|
||||||
|
@ -871,7 +871,7 @@
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="819"/>
|
<location filename="../cheats_patches.cpp" line="819"/>
|
||||||
<source>XML ERROR:</source>
|
<source>XML ERROR:</source>
|
||||||
<translation>ERRO XML:</translation>
|
<translation>ERRO de XML:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="826"/>
|
<location filename="../cheats_patches.cpp" line="826"/>
|
||||||
|
@ -886,7 +886,7 @@
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="997"/>
|
<location filename="../cheats_patches.cpp" line="997"/>
|
||||||
<source>Directory does not exist:</source>
|
<source>Directory does not exist:</source>
|
||||||
<translation>Diretório não existe:</translation>
|
<translation>O Diretório não existe:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="1006"/>
|
<location filename="../cheats_patches.cpp" line="1006"/>
|
||||||
|
|
|
@ -566,54 +566,54 @@
|
||||||
<translation>Extracție PKG</translation>
|
<translation>Extracție PKG</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="633"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
|
<source>Patch detected!</source>
|
||||||
<translation>Patch detectat!\nVersiunile PKG și Joc se potrivesc!: %1\nAi dori să </translation>
|
<translation>Patch detectat!</translation>
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="634"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>să suprascrii?</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="639"/>
|
|
||||||
<source>Patch detected!\nPKG Version %1 is older </source>
|
|
||||||
<translation>Patch detectat!\nVersiunea PKG %1 este mai veche </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="640"/>
|
|
||||||
<source>than installed version!: %2\nWould you like </source>
|
|
||||||
<translation>decât versiunea instalată!: %2\nAi dori să </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="641"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>să suprascrii?</translation>
|
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="646"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
|
<source>PKG and Game versions match: </source>
|
||||||
<translation>Patch detectat!\nJocul este instalat: %1\nAi dori să </translation>
|
<translation>Versiunile PKG și ale jocului sunt compatibile: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="647"/>
|
<location filename="../main_window.cpp" line="647"/>
|
||||||
<source>to install Patch: %2?</source>
|
<source>Would you like to overwrite?</source>
|
||||||
<translation>să instalezi Patch-ul: %2?</translation>
|
<translation>Doriți să suprascrieți?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="659"/>
|
<location filename="../main_window.cpp" line="639"/>
|
||||||
<source>Game already installed\n%1\nWould you like to overwrite?</source>
|
<source>PKG Version %1 is older than installed version: </source>
|
||||||
<translation>Jocul este deja instalat\n%1\nAi dori să suprascrii?</translation>
|
<translation>Versiunea PKG %1 este mai veche decât versiunea instalată: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Game is installed: </source>
|
||||||
|
<translation>Jocul este instalat: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Would you like to install Patch: </source>
|
||||||
|
<translation>Doriți să instalați patch-ul: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="673"/>
|
<location filename="../main_window.cpp" line="673"/>
|
||||||
<source>DLC Installation</source>
|
<source>DLC Installation</source>
|
||||||
<translation>DLC Installation</translation>
|
<translation>Instalare DLC</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
<source>Would you like to install DLC: %1?</source>
|
<source>Would you like to install DLC: %1?</source>
|
||||||
<translation>Would you like to install DLC: %1?</translation>
|
<translation>Doriți să instalați DLC-ul: %1?</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="688"/>
|
||||||
|
<source>DLC already installed:</source>
|
||||||
|
<translation>DLC deja instalat:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="701"/>
|
||||||
|
<source>Game already installed</source>
|
||||||
|
<translation>Jocul deja instalat</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
|
|
|
@ -93,7 +93,7 @@
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="48"/>
|
<location filename="../gui_context_menus.h" line="48"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
<translation>Читы / Патчи</translation>
|
<translation>Читы и патчи</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="49"/>
|
<location filename="../gui_context_menus.h" line="49"/>
|
||||||
|
@ -256,7 +256,7 @@
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window_ui.h" line="343"/>
|
<location filename="../main_window_ui.h" line="343"/>
|
||||||
<source>Download Cheats/Patches</source>
|
<source>Download Cheats/Patches</source>
|
||||||
<translation>Скачать Читы / Патчи</translation>
|
<translation>Скачать читы или патчи</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window_ui.h" line="345"/>
|
<location filename="../main_window_ui.h" line="345"/>
|
||||||
|
@ -566,54 +566,54 @@
|
||||||
<translation>Извлечение PKG</translation>
|
<translation>Извлечение PKG</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="633"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
|
<source>Patch detected!</source>
|
||||||
<translation>Обнаружен патч!\nВерсии PKG и игры совпадают!: %1\nХотите </translation>
|
<translation>Обнаружен патч!</translation>
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="634"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>перезаписать?</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="639"/>
|
|
||||||
<source>Patch detected!\nPKG Version %1 is older </source>
|
|
||||||
<translation>Обнаружен патч!\nВерсия PKG %1 устарела </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="640"/>
|
|
||||||
<source>than installed version!: %2\nWould you like </source>
|
|
||||||
<translation>по сравнению с установленной версией!: %2\nХотите </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="641"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>перезаписать?</translation>
|
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="646"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
|
<source>PKG and Game versions match: </source>
|
||||||
<translation>Обнаружен патч!\nИгра установлена: %1\nХотите </translation>
|
<translation>Версии PKG и игры совпадают: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="647"/>
|
<location filename="../main_window.cpp" line="647"/>
|
||||||
<source>to install Patch: %2?</source>
|
<source>Would you like to overwrite?</source>
|
||||||
<translation>установить патч: %2?</translation>
|
<translation>Хотите перезаписать?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="659"/>
|
<location filename="../main_window.cpp" line="639"/>
|
||||||
<source>Game already installed\n%1\nWould you like to overwrite?</source>
|
<source>PKG Version %1 is older than installed version: </source>
|
||||||
<translation>Игра уже установлена\n%1\nХотите перезаписать?</translation>
|
<translation>Версия PKG %1 старее установленной версии: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Game is installed: </source>
|
||||||
|
<translation>Игра установлена: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Would you like to install Patch: </source>
|
||||||
|
<translation>Хотите установить патч: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="673"/>
|
<location filename="../main_window.cpp" line="673"/>
|
||||||
<source>DLC Installation</source>
|
<source>DLC Installation</source>
|
||||||
<translation>DLC Installation</translation>
|
<translation>Установка DLC</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
<source>Would you like to install DLC: %1?</source>
|
<source>Would you like to install DLC: %1?</source>
|
||||||
<translation>Would you like to install DLC: %1?</translation>
|
<translation>Вы хотите установить DLC: %1??</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="688"/>
|
||||||
|
<source>DLC already installed:</source>
|
||||||
|
<translation>DLC уже установлен:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="701"/>
|
||||||
|
<source>Game already installed</source>
|
||||||
|
<translation>Игра уже установлена</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
|
@ -638,7 +638,7 @@
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="704"/>
|
<location filename="../main_window.cpp" line="704"/>
|
||||||
<source>Game successfully installed at %1</source>
|
<source>Game successfully installed at %1</source>
|
||||||
<translation>Игра успешно установлена по адресу %1</translation>
|
<translation>Игра успешно установлена в %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="725"/>
|
<location filename="../main_window.cpp" line="725"/>
|
||||||
|
@ -651,12 +651,12 @@
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="44"/>
|
<location filename="../cheats_patches.cpp" line="44"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
<translation>Читы / Патчи</translation>
|
<translation>Читы и патчи</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="50"/>
|
<location filename="../cheats_patches.cpp" line="50"/>
|
||||||
<source>defaultTextEdit_MSG</source>
|
<source>defaultTextEdit_MSG</source>
|
||||||
<translation>Cheats/Patches sunt experimentale.\nUtilizați cu prudență.\n\nDescărcați cheats individual prin selectarea depozitului și făcând clic pe butonul de descărcare.\nÎn fila Patches, puteți descărca toate patch-urile deodată, alege pe cele pe care doriți să le utilizați și salvați selecția.\n\nDeoarece nu dezvoltăm Cheats/Patches,\nte rugăm să raportezi problemele autorului cheat-ului.\n\nAi creat un nou cheat? Vizitează:\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
|
<translation>Читы и патчи экспериментальны.\nИспользуйте с осторожностью.\n\nСкачивайте читы, выбрав репозиторий и нажав на кнопку загрузки.\nВо вкладке "Патчи" вы можете скачать все патчи сразу, выбирать какие вы хотите использовать, и сохранять выбор.\n\nПоскольку мы не разрабатываем читы/патчи,\nпожалуйста сообщайте о проблемах автору чита/патча.\n\nСоздали новый чит? Посетите:\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="69"/>
|
<location filename="../cheats_patches.cpp" line="69"/>
|
||||||
|
|
|
@ -566,54 +566,54 @@
|
||||||
<translation>PKG Çıkartma</translation>
|
<translation>PKG Çıkartma</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="633"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
|
<source>Patch detected!</source>
|
||||||
<translation>Yama tespit edildi!\nPKG ve Oyun sürümleri uyuyor!: %1\nÜzerine yazmak ister misiniz?</translation>
|
<translation>Yamanın tespit edildi!</translation>
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="634"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>üzerine yazmak?</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="639"/>
|
|
||||||
<source>Patch detected!\nPKG Version %1 is older </source>
|
|
||||||
<translation>Yama tespit edildi!\nPKG Sürümü %1 daha eski </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="640"/>
|
|
||||||
<source>than installed version!: %2\nWould you like </source>
|
|
||||||
<translation>yüklü sürümden!: %2\nÜzerine yazmak ister misiniz?</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="641"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>üzerine yazmak?</translation>
|
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="646"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
|
<source>PKG and Game versions match: </source>
|
||||||
<translation>Yama tespit edildi!\nOyun yüklü: %1\nÜzerine yazmak ister misiniz?</translation>
|
<translation>PKG ve oyun sürümleri uyumlu: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="647"/>
|
<location filename="../main_window.cpp" line="647"/>
|
||||||
<source>to install Patch: %2?</source>
|
<source>Would you like to overwrite?</source>
|
||||||
<translation>Yamayı kurmak ister misiniz: %2?</translation>
|
<translation>Üzerine yazmak ister misiniz?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="659"/>
|
<location filename="../main_window.cpp" line="639"/>
|
||||||
<source>Game already installed\n%1\nWould you like to overwrite?</source>
|
<source>PKG Version %1 is older than installed version: </source>
|
||||||
<translation>Oyun zaten yüklü\n%1\nÜzerine yazmak ister misiniz?</translation>
|
<translation>PKG Sürümü %1, kurulu sürümden daha eski: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Game is installed: </source>
|
||||||
|
<translation>Oyun yüklendi: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Would you like to install Patch: </source>
|
||||||
|
<translation>Yamanın yüklenmesini ister misiniz: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="673"/>
|
<location filename="../main_window.cpp" line="673"/>
|
||||||
<source>DLC Installation</source>
|
<source>DLC Installation</source>
|
||||||
<translation>DLC Installation</translation>
|
<translation>DLC Yükleme</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
<source>Would you like to install DLC: %1?</source>
|
<source>Would you like to install DLC: %1?</source>
|
||||||
<translation>Would you like to install DLC: %1?</translation>
|
<translation>DLC'yi yüklemek ister misiniz: %1?</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="688"/>
|
||||||
|
<source>DLC already installed:</source>
|
||||||
|
<translation>DLC zaten yüklü:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="701"/>
|
||||||
|
<source>Game already installed</source>
|
||||||
|
<translation>Oyun zaten yüklü</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
|
|
|
@ -566,54 +566,54 @@
|
||||||
<translation>Giải nén PKG</translation>
|
<translation>Giải nén PKG</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="633"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
|
<source>Patch detected!</source>
|
||||||
<translation>Đã phát hiện bản vá!\nPhiên bản PKG và trò chơi khớp!: %1\nBạn có muốn </translation>
|
<translation>Đã phát hiện bản vá!</translation>
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="634"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>ghi đè không?</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="639"/>
|
|
||||||
<source>Patch detected!\nPKG Version %1 is older </source>
|
|
||||||
<translation>Đã phát hiện bản vá!\nPhiên bản PKG %1 cũ hơn </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="640"/>
|
|
||||||
<source>than installed version!: %2\nWould you like </source>
|
|
||||||
<translation>so với phiên bản đã cài đặt!: %2\nBạn có muốn </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="641"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>ghi đè không?</translation>
|
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="646"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
|
<source>PKG and Game versions match: </source>
|
||||||
<translation>Đã phát hiện bản vá!\nTrò chơi đã được cài đặt: %1\nBạn có muốn </translation>
|
<translation>Các phiên bản PKG và trò chơi khớp nhau: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="647"/>
|
<location filename="../main_window.cpp" line="647"/>
|
||||||
<source>to install Patch: %2?</source>
|
<source>Would you like to overwrite?</source>
|
||||||
<translation>cài đặt bản vá: %2?</translation>
|
<translation>Bạn có muốn ghi đè không?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="659"/>
|
<location filename="../main_window.cpp" line="639"/>
|
||||||
<source>Game already installed\n%1\nWould you like to overwrite?</source>
|
<source>PKG Version %1 is older than installed version: </source>
|
||||||
<translation>Trò chơi đã được cài đặt\n%1\nBạn có muốn ghi đè không?</translation>
|
<translation>Phiên bản PKG %1 cũ hơn phiên bản đã cài đặt: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Game is installed: </source>
|
||||||
|
<translation>Trò chơi đã được cài đặt: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Would you like to install Patch: </source>
|
||||||
|
<translation>Bạn có muốn cài đặt bản vá: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="673"/>
|
<location filename="../main_window.cpp" line="673"/>
|
||||||
<source>DLC Installation</source>
|
<source>DLC Installation</source>
|
||||||
<translation>DLC Installation</translation>
|
<translation>Cài đặt DLC</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
<source>Would you like to install DLC: %1?</source>
|
<source>Would you like to install DLC: %1?</source>
|
||||||
<translation>Would you like to install DLC: %1?</translation>
|
<translation>Bạn có muốn cài đặt DLC: %1?</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="688"/>
|
||||||
|
<source>DLC already installed:</source>
|
||||||
|
<translation>DLC đã được cài đặt:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="701"/>
|
||||||
|
<source>Game already installed</source>
|
||||||
|
<translation>Trò chơi đã được cài đặt</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
|
|
|
@ -566,54 +566,54 @@
|
||||||
<translation>PKG 解压</translation>
|
<translation>PKG 解压</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="633"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
|
<source>Patch detected!</source>
|
||||||
<translation>检测到补丁!\nPKG 和游戏版本匹配:%1\n您想要 </translation>
|
<translation>检测到补丁!</translation>
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="634"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>覆盖吗?</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="639"/>
|
|
||||||
<source>Patch detected!\nPKG Version %1 is older </source>
|
|
||||||
<translation>检测到补丁!\nPKG 版本 %1 较旧 </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="640"/>
|
|
||||||
<source>than installed version!: %2\nWould you like </source>
|
|
||||||
<translation>与已安装版本相比:%2\n您想要 </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="641"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>覆盖吗?</translation>
|
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="646"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
|
<source>PKG and Game versions match: </source>
|
||||||
<translation>检测到补丁!\n游戏已安装:%1\n您想要 </translation>
|
<translation>PKG 和游戏版本匹配: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="647"/>
|
<location filename="../main_window.cpp" line="647"/>
|
||||||
<source>to install Patch: %2?</source>
|
<source>Would you like to overwrite?</source>
|
||||||
<translation>安装补丁:%2?</translation>
|
<translation>您想要覆盖吗?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="659"/>
|
<location filename="../main_window.cpp" line="639"/>
|
||||||
<source>Game already installed\n%1\nWould you like to overwrite?</source>
|
<source>PKG Version %1 is older than installed version: </source>
|
||||||
<translation>游戏已安装\n%1\n您想要覆盖吗?</translation>
|
<translation>PKG 版本 %1 比已安装版本更旧: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Game is installed: </source>
|
||||||
|
<translation>游戏已安装: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Would you like to install Patch: </source>
|
||||||
|
<translation>您想安装补丁吗: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="673"/>
|
<location filename="../main_window.cpp" line="673"/>
|
||||||
<source>DLC Installation</source>
|
<source>DLC Installation</source>
|
||||||
<translation>DLC Installation</translation>
|
<translation>DLC 安装</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
<source>Would you like to install DLC: %1?</source>
|
<source>Would you like to install DLC: %1?</source>
|
||||||
<translation>Would you like to install DLC: %1?</translation>
|
<translation>您想安装 DLC: %1 吗?</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="688"/>
|
||||||
|
<source>DLC already installed:</source>
|
||||||
|
<translation>DLC 已经安装:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="701"/>
|
||||||
|
<source>Game already installed</source>
|
||||||
|
<translation>游戏已经安装</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
|
|
|
@ -566,54 +566,54 @@
|
||||||
<translation>PKG 解壓縮</translation>
|
<translation>PKG 解壓縮</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="633"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
|
<source>Patch detected!</source>
|
||||||
<translation>偵測到修補檔!\nPKG 和遊戲版本匹配!: %1\n您是否希望 </translation>
|
<translation>檢測到補丁!</translation>
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="634"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>覆蓋嗎?</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="639"/>
|
|
||||||
<source>Patch detected!\nPKG Version %1 is older </source>
|
|
||||||
<translation>偵測到修補檔!\nPKG 版本 %1 較舊 </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="640"/>
|
|
||||||
<source>than installed version!: %2\nWould you like </source>
|
|
||||||
<translation>比安裝的版本舊!: %2\n您是否希望 </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../main_window.cpp" line="641"/>
|
|
||||||
<source>to overwrite?</source>
|
|
||||||
<translation>覆蓋嗎?</translation>
|
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="646"/>
|
<location filename="../main_window.cpp" line="646"/>
|
||||||
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
|
<source>PKG and Game versions match: </source>
|
||||||
<translation>偵測到修補檔!\n遊戲已安裝: %1\n您是否希望 </translation>
|
<translation>PKG 和遊戲版本匹配: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="647"/>
|
<location filename="../main_window.cpp" line="647"/>
|
||||||
<source>to install Patch: %2?</source>
|
<source>Would you like to overwrite?</source>
|
||||||
<translation>安裝修補檔: %2?</translation>
|
<translation>您想要覆蓋嗎?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="659"/>
|
<location filename="../main_window.cpp" line="639"/>
|
||||||
<source>Game already installed\n%1\nWould you like to overwrite?</source>
|
<source>PKG Version %1 is older than installed version: </source>
|
||||||
<translation>遊戲已經安裝\n%1\n您是否希望覆蓋?</translation>
|
<translation>PKG 版本 %1 比已安裝版本更舊: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Game is installed: </source>
|
||||||
|
<translation>遊戲已安裝: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
|
<source>Would you like to install Patch: </source>
|
||||||
|
<translation>您想要安裝補丁嗎: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="673"/>
|
<location filename="../main_window.cpp" line="673"/>
|
||||||
<source>DLC Installation</source>
|
<source>DLC Installation</source>
|
||||||
<translation>DLC Installation</translation>
|
<translation>DLC 安裝</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
<source>Would you like to install DLC: %1?</source>
|
<source>Would you like to install DLC: %1?</source>
|
||||||
<translation>Would you like to install DLC: %1?</translation>
|
<translation>您想要安裝 DLC: %1 嗎?</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="688"/>
|
||||||
|
<source>DLC already installed:</source>
|
||||||
|
<translation>DLC 已經安裝:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../main_window.cpp" line="701"/>
|
||||||
|
<source>Game already installed</source>
|
||||||
|
<translation>遊戲已經安裝</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
|
|
|
@ -187,6 +187,7 @@ void DefineEntryPoint(const IR::Program& program, EmitContext& ctx, Id main) {
|
||||||
ctx.AddCapability(spv::Capability::Int64);
|
ctx.AddCapability(spv::Capability::Int64);
|
||||||
if (info.has_storage_images || info.has_image_buffers) {
|
if (info.has_storage_images || info.has_image_buffers) {
|
||||||
ctx.AddCapability(spv::Capability::StorageImageExtendedFormats);
|
ctx.AddCapability(spv::Capability::StorageImageExtendedFormats);
|
||||||
|
ctx.AddCapability(spv::Capability::StorageImageReadWithoutFormat);
|
||||||
ctx.AddCapability(spv::Capability::StorageImageWriteWithoutFormat);
|
ctx.AddCapability(spv::Capability::StorageImageWriteWithoutFormat);
|
||||||
}
|
}
|
||||||
if (info.has_texel_buffers) {
|
if (info.has_texel_buffers) {
|
||||||
|
|
|
@ -266,7 +266,8 @@ Id EmitLoadBufferFormatF32(EmitContext& ctx, IR::Inst* inst, u32 handle, Id addr
|
||||||
const auto& buffer = ctx.texture_buffers[handle];
|
const auto& buffer = ctx.texture_buffers[handle];
|
||||||
const Id tex_buffer = ctx.OpLoad(buffer.image_type, buffer.id);
|
const Id tex_buffer = ctx.OpLoad(buffer.image_type, buffer.id);
|
||||||
const Id coord = ctx.OpIAdd(ctx.U32[1], address, buffer.coord_offset);
|
const Id coord = ctx.OpIAdd(ctx.U32[1], address, buffer.coord_offset);
|
||||||
Id texel = ctx.OpImageFetch(buffer.result_type, tex_buffer, coord);
|
Id texel = buffer.is_storage ? ctx.OpImageRead(buffer.result_type, tex_buffer, coord)
|
||||||
|
: ctx.OpImageFetch(buffer.result_type, tex_buffer, coord);
|
||||||
if (buffer.is_integer) {
|
if (buffer.is_integer) {
|
||||||
texel = ctx.OpBitcast(ctx.F32[4], texel);
|
texel = ctx.OpBitcast(ctx.F32[4], texel);
|
||||||
}
|
}
|
||||||
|
|
|
@ -406,6 +406,7 @@ void EmitContext::DefineTextureBuffers() {
|
||||||
.image_type = image_type,
|
.image_type = image_type,
|
||||||
.result_type = sampled_type[4],
|
.result_type = sampled_type[4],
|
||||||
.is_integer = is_integer,
|
.is_integer = is_integer,
|
||||||
|
.is_storage = desc.is_written,
|
||||||
});
|
});
|
||||||
interfaces.push_back(id);
|
interfaces.push_back(id);
|
||||||
}
|
}
|
||||||
|
|
|
@ -215,6 +215,7 @@ public:
|
||||||
Id image_type;
|
Id image_type;
|
||||||
Id result_type;
|
Id result_type;
|
||||||
bool is_integer;
|
bool is_integer;
|
||||||
|
bool is_storage;
|
||||||
};
|
};
|
||||||
|
|
||||||
u32& binding;
|
u32& binding;
|
||||||
|
|
|
@ -31,6 +31,8 @@ void Translator::EmitScalarAlu(const GcnInst& inst) {
|
||||||
return S_OR_B64(NegateMode::Result, false, inst);
|
return S_OR_B64(NegateMode::Result, false, inst);
|
||||||
case Opcode::S_XOR_B64:
|
case Opcode::S_XOR_B64:
|
||||||
return S_OR_B64(NegateMode::None, true, inst);
|
return S_OR_B64(NegateMode::None, true, inst);
|
||||||
|
case Opcode::S_XNOR_B64:
|
||||||
|
return S_OR_B64(NegateMode::Result, true, inst);
|
||||||
case Opcode::S_ORN2_B64:
|
case Opcode::S_ORN2_B64:
|
||||||
return S_OR_B64(NegateMode::Src1, false, inst);
|
return S_OR_B64(NegateMode::Src1, false, inst);
|
||||||
case Opcode::S_AND_B64:
|
case Opcode::S_AND_B64:
|
||||||
|
|
|
@ -436,6 +436,7 @@ void Translator::EmitFlowControl(u32 pc, const GcnInst& inst) {
|
||||||
case Opcode::S_CBRANCH_SCC1:
|
case Opcode::S_CBRANCH_SCC1:
|
||||||
case Opcode::S_CBRANCH_VCCNZ:
|
case Opcode::S_CBRANCH_VCCNZ:
|
||||||
case Opcode::S_CBRANCH_VCCZ:
|
case Opcode::S_CBRANCH_VCCZ:
|
||||||
|
case Opcode::S_CBRANCH_EXECNZ:
|
||||||
case Opcode::S_BRANCH:
|
case Opcode::S_BRANCH:
|
||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -368,6 +368,36 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span<const u32> dcb, std::span<c
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case PM4ItOpcode::DrawIndirect: {
|
||||||
|
const auto* draw_indirect = reinterpret_cast<const PM4CmdDrawIndirect*>(header);
|
||||||
|
const auto offset = draw_indirect->data_offset;
|
||||||
|
const auto ib_address = mapped_queues[GfxQueueId].indirect_args_addr;
|
||||||
|
const auto size = sizeof(PM4CmdDrawIndirect::DrawInstancedArgs);
|
||||||
|
if (rasterizer) {
|
||||||
|
const auto cmd_address = reinterpret_cast<const void*>(header);
|
||||||
|
rasterizer->ScopeMarkerBegin(fmt::format("dcb:{}:DrawIndirect", cmd_address));
|
||||||
|
rasterizer->Breadcrumb(u64(cmd_address));
|
||||||
|
rasterizer->DrawIndirect(false, ib_address, offset, size);
|
||||||
|
rasterizer->ScopeMarkerEnd();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PM4ItOpcode::DrawIndexIndirect: {
|
||||||
|
const auto* draw_index_indirect =
|
||||||
|
reinterpret_cast<const PM4CmdDrawIndexIndirect*>(header);
|
||||||
|
const auto offset = draw_index_indirect->data_offset;
|
||||||
|
const auto ib_address = mapped_queues[GfxQueueId].indirect_args_addr;
|
||||||
|
const auto size = sizeof(PM4CmdDrawIndexIndirect::DrawIndexInstancedArgs);
|
||||||
|
if (rasterizer) {
|
||||||
|
const auto cmd_address = reinterpret_cast<const void*>(header);
|
||||||
|
rasterizer->ScopeMarkerBegin(
|
||||||
|
fmt::format("dcb:{}:DrawIndexIndirect", cmd_address));
|
||||||
|
rasterizer->Breadcrumb(u64(cmd_address));
|
||||||
|
rasterizer->DrawIndirect(true, ib_address, offset, size);
|
||||||
|
rasterizer->ScopeMarkerEnd();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
case PM4ItOpcode::DispatchDirect: {
|
case PM4ItOpcode::DispatchDirect: {
|
||||||
const auto* dispatch_direct = reinterpret_cast<const PM4CmdDispatchDirect*>(header);
|
const auto* dispatch_direct = reinterpret_cast<const PM4CmdDispatchDirect*>(header);
|
||||||
regs.cs_program.dim_x = dispatch_direct->dim_x;
|
regs.cs_program.dim_x = dispatch_direct->dim_x;
|
||||||
|
@ -488,6 +518,7 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span<const u32> dcb, std::span<c
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case PM4ItOpcode::PfpSyncMe: {
|
case PM4ItOpcode::PfpSyncMe: {
|
||||||
|
rasterizer->CpSync();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -253,20 +253,6 @@ struct PM4CmdDrawIndexAuto {
|
||||||
u32 draw_initiator;
|
u32 draw_initiator;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PM4CmdDrawIndirect {
|
|
||||||
PM4Type3Header header; ///< header
|
|
||||||
u32 data_offset; ///< DWORD aligned offset
|
|
||||||
union {
|
|
||||||
u32 dw2;
|
|
||||||
BitField<0, 16, u32> base_vtx_loc; ///< base vertex location
|
|
||||||
};
|
|
||||||
union {
|
|
||||||
u32 dw3;
|
|
||||||
BitField<0, 16, u32> start_inst_loc; ///< start instance location
|
|
||||||
};
|
|
||||||
u32 draw_initiator; ///< Draw Initiator Register
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class DataSelect : u32 {
|
enum class DataSelect : u32 {
|
||||||
None = 0,
|
None = 0,
|
||||||
Data32Low = 1,
|
Data32Low = 1,
|
||||||
|
@ -740,4 +726,51 @@ struct PM4CmdDispatchIndirect {
|
||||||
u32 dispatch_initiator; ///< Dispatch Initiator Register
|
u32 dispatch_initiator; ///< Dispatch Initiator Register
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct PM4CmdDrawIndirect {
|
||||||
|
struct DrawInstancedArgs {
|
||||||
|
u32 vertex_count_per_instance;
|
||||||
|
u32 instance_count;
|
||||||
|
u32 start_vertex_location;
|
||||||
|
u32 start_instance_location;
|
||||||
|
};
|
||||||
|
|
||||||
|
PM4Type3Header header; ///< header
|
||||||
|
u32 data_offset; ///< Byte aligned offset where the required data structure starts
|
||||||
|
union {
|
||||||
|
u32 dw2;
|
||||||
|
BitField<0, 16, u32> base_vtx_loc; ///< Offset where the CP will write the
|
||||||
|
///< BaseVertexLocation it fetched from memory
|
||||||
|
};
|
||||||
|
union {
|
||||||
|
u32 dw3;
|
||||||
|
BitField<0, 16, u32> start_inst_loc; ///< Offset where the CP will write the
|
||||||
|
///< StartInstanceLocation it fetched from memory
|
||||||
|
};
|
||||||
|
u32 draw_initiator; ///< Draw Initiator Register
|
||||||
|
};
|
||||||
|
|
||||||
|
struct PM4CmdDrawIndexIndirect {
|
||||||
|
struct DrawIndexInstancedArgs {
|
||||||
|
u32 index_count_per_instance;
|
||||||
|
u32 instance_count;
|
||||||
|
u32 start_index_location;
|
||||||
|
u32 base_vertex_location;
|
||||||
|
u32 start_instance_location;
|
||||||
|
};
|
||||||
|
|
||||||
|
PM4Type3Header header; ///< header
|
||||||
|
u32 data_offset; ///< Byte aligned offset where the required data structure starts
|
||||||
|
union {
|
||||||
|
u32 dw2;
|
||||||
|
BitField<0, 16, u32> base_vtx_loc; ///< Offset where the CP will write the
|
||||||
|
///< BaseVertexLocation it fetched from memory
|
||||||
|
};
|
||||||
|
union { // NOTE: this one is undocumented in AMD spec, but Gnm driver writes this field
|
||||||
|
u32 dw3;
|
||||||
|
BitField<0, 16, u32> start_inst_loc; ///< Offset where the CP will write the
|
||||||
|
///< StartInstanceLocation it fetched from memory
|
||||||
|
};
|
||||||
|
u32 draw_initiator; ///< Draw Initiator Register
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace AmdGpu
|
} // namespace AmdGpu
|
||||||
|
|
|
@ -119,7 +119,7 @@ vk::BufferView Buffer::View(u32 offset, u32 size, bool is_written, AmdGpu::DataF
|
||||||
dfmt == view.dfmt && nfmt == view.nfmt;
|
dfmt == view.dfmt && nfmt == view.nfmt;
|
||||||
})};
|
})};
|
||||||
if (it != views.end()) {
|
if (it != views.end()) {
|
||||||
return it->handle;
|
return *it->handle;
|
||||||
}
|
}
|
||||||
const vk::BufferUsageFlags2CreateInfoKHR usage_flags = {
|
const vk::BufferUsageFlags2CreateInfoKHR usage_flags = {
|
||||||
.usage = is_written ? vk::BufferUsageFlagBits2KHR::eStorageTexelBuffer
|
.usage = is_written ? vk::BufferUsageFlagBits2KHR::eStorageTexelBuffer
|
||||||
|
@ -138,9 +138,9 @@ vk::BufferView Buffer::View(u32 offset, u32 size, bool is_written, AmdGpu::DataF
|
||||||
.is_written = is_written,
|
.is_written = is_written,
|
||||||
.dfmt = dfmt,
|
.dfmt = dfmt,
|
||||||
.nfmt = nfmt,
|
.nfmt = nfmt,
|
||||||
.handle = instance->GetDevice().createBufferView(view_ci),
|
.handle = instance->GetDevice().createBufferViewUnique(view_ci),
|
||||||
});
|
});
|
||||||
return views.back().handle;
|
return *views.back().handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr u64 WATCHES_INITIAL_RESERVE = 0x4000;
|
constexpr u64 WATCHES_INITIAL_RESERVE = 0x4000;
|
||||||
|
|
|
@ -134,7 +134,7 @@ public:
|
||||||
bool is_written;
|
bool is_written;
|
||||||
AmdGpu::DataFormat dfmt;
|
AmdGpu::DataFormat dfmt;
|
||||||
AmdGpu::NumberFormat nfmt;
|
AmdGpu::NumberFormat nfmt;
|
||||||
vk::BufferView handle;
|
vk::UniqueBufferView handle;
|
||||||
};
|
};
|
||||||
std::vector<BufferView> views;
|
std::vector<BufferView> views;
|
||||||
};
|
};
|
||||||
|
|
|
@ -228,11 +228,12 @@ u32 BufferCache::BindIndexBuffer(bool& is_indexed, u32 index_offset) {
|
||||||
return regs.num_indices;
|
return regs.num_indices;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<Buffer*, u32> BufferCache::ObtainBuffer(VAddr device_addr, u32 size, bool is_written) {
|
std::pair<Buffer*, u32> BufferCache::ObtainBuffer(VAddr device_addr, u32 size, bool is_written,
|
||||||
|
bool is_texel_buffer) {
|
||||||
std::scoped_lock lk{mutex};
|
std::scoped_lock lk{mutex};
|
||||||
static constexpr u64 StreamThreshold = CACHING_PAGESIZE;
|
static constexpr u64 StreamThreshold = CACHING_PAGESIZE;
|
||||||
const bool is_gpu_dirty = memory_tracker.IsRegionGpuModified(device_addr, size);
|
const bool is_gpu_dirty = memory_tracker.IsRegionGpuModified(device_addr, size);
|
||||||
if (!is_written && size < StreamThreshold && !is_gpu_dirty) {
|
if (!is_written && !is_texel_buffer && size <= StreamThreshold && !is_gpu_dirty) {
|
||||||
// For small uniform buffers that have not been modified by gpu
|
// For small uniform buffers that have not been modified by gpu
|
||||||
// use device local stream buffer to reduce renderpass breaks.
|
// use device local stream buffer to reduce renderpass breaks.
|
||||||
const u64 offset = stream_buffer.Copy(device_addr, size, instance.UniformMinAlignment());
|
const u64 offset = stream_buffer.Copy(device_addr, size, instance.UniformMinAlignment());
|
||||||
|
|
|
@ -66,7 +66,8 @@ public:
|
||||||
u32 BindIndexBuffer(bool& is_indexed, u32 index_offset);
|
u32 BindIndexBuffer(bool& is_indexed, u32 index_offset);
|
||||||
|
|
||||||
/// Obtains a buffer for the specified region.
|
/// Obtains a buffer for the specified region.
|
||||||
[[nodiscard]] std::pair<Buffer*, u32> ObtainBuffer(VAddr gpu_addr, u32 size, bool is_written);
|
[[nodiscard]] std::pair<Buffer*, u32> ObtainBuffer(VAddr gpu_addr, u32 size, bool is_written,
|
||||||
|
bool is_texel_buffer = false);
|
||||||
|
|
||||||
/// Obtains a temporary buffer for usage in texture cache.
|
/// Obtains a temporary buffer for usage in texture cache.
|
||||||
[[nodiscard]] std::pair<const Buffer*, u32> ObtainTempBuffer(VAddr gpu_addr, u32 size);
|
[[nodiscard]] std::pair<const Buffer*, u32> ObtainTempBuffer(VAddr gpu_addr, u32 size);
|
||||||
|
|
|
@ -287,8 +287,8 @@ vk::BorderColor BorderColor(AmdGpu::BorderColor color) {
|
||||||
|
|
||||||
std::span<const vk::Format> GetAllFormats() {
|
std::span<const vk::Format> GetAllFormats() {
|
||||||
static constexpr std::array formats{
|
static constexpr std::array formats{
|
||||||
|
vk::Format::eA2B10G10R10SnormPack32,
|
||||||
vk::Format::eA2B10G10R10UnormPack32,
|
vk::Format::eA2B10G10R10UnormPack32,
|
||||||
vk::Format::eA2R10G10B10SnormPack32,
|
|
||||||
vk::Format::eA2R10G10B10UnormPack32,
|
vk::Format::eA2R10G10B10UnormPack32,
|
||||||
vk::Format::eB5G6R5UnormPack16,
|
vk::Format::eB5G6R5UnormPack16,
|
||||||
vk::Format::eB8G8R8A8Srgb,
|
vk::Format::eB8G8R8A8Srgb,
|
||||||
|
@ -424,6 +424,10 @@ vk::Format SurfaceFormat(AmdGpu::DataFormat data_format, AmdGpu::NumberFormat nu
|
||||||
num_format == AmdGpu::NumberFormat::Unorm) {
|
num_format == AmdGpu::NumberFormat::Unorm) {
|
||||||
return vk::Format::eA2B10G10R10UnormPack32;
|
return vk::Format::eA2B10G10R10UnormPack32;
|
||||||
}
|
}
|
||||||
|
if (data_format == AmdGpu::DataFormat::Format2_10_10_10 &&
|
||||||
|
num_format == AmdGpu::NumberFormat::Snorm) {
|
||||||
|
return vk::Format::eA2B10G10R10SnormPack32;
|
||||||
|
}
|
||||||
if (data_format == AmdGpu::DataFormat::FormatBc7 && num_format == AmdGpu::NumberFormat::Srgb) {
|
if (data_format == AmdGpu::DataFormat::FormatBc7 && num_format == AmdGpu::NumberFormat::Srgb) {
|
||||||
return vk::Format::eBc7SrgbBlock;
|
return vk::Format::eBc7SrgbBlock;
|
||||||
}
|
}
|
||||||
|
@ -472,14 +476,6 @@ vk::Format SurfaceFormat(AmdGpu::DataFormat data_format, AmdGpu::NumberFormat nu
|
||||||
num_format == AmdGpu::NumberFormat::Snorm) {
|
num_format == AmdGpu::NumberFormat::Snorm) {
|
||||||
return vk::Format::eR16G16Snorm;
|
return vk::Format::eR16G16Snorm;
|
||||||
}
|
}
|
||||||
if (data_format == AmdGpu::DataFormat::Format2_10_10_10 &&
|
|
||||||
num_format == AmdGpu::NumberFormat::Unorm) {
|
|
||||||
return vk::Format::eA2R10G10B10UnormPack32;
|
|
||||||
}
|
|
||||||
if (data_format == AmdGpu::DataFormat::Format2_10_10_10 &&
|
|
||||||
num_format == AmdGpu::NumberFormat::Snorm) {
|
|
||||||
return vk::Format::eA2R10G10B10SnormPack32;
|
|
||||||
}
|
|
||||||
if (data_format == AmdGpu::DataFormat::Format10_11_11 &&
|
if (data_format == AmdGpu::DataFormat::Format10_11_11 &&
|
||||||
num_format == AmdGpu::NumberFormat::Float) {
|
num_format == AmdGpu::NumberFormat::Float) {
|
||||||
return vk::Format::eB10G11R11UfloatPack32;
|
return vk::Format::eB10G11R11UfloatPack32;
|
||||||
|
|
|
@ -127,7 +127,7 @@ bool ComputePipeline::BindResources(VideoCore::BufferCache& buffer_cache,
|
||||||
}
|
}
|
||||||
const u32 size = vsharp.GetSize();
|
const u32 size = vsharp.GetSize();
|
||||||
if (desc.is_written) {
|
if (desc.is_written) {
|
||||||
texture_cache.InvalidateMemory(address, size, true);
|
texture_cache.InvalidateMemory(address, size);
|
||||||
}
|
}
|
||||||
const u32 alignment =
|
const u32 alignment =
|
||||||
is_storage ? instance.StorageMinAlignment() : instance.UniformMinAlignment();
|
is_storage ? instance.StorageMinAlignment() : instance.UniformMinAlignment();
|
||||||
|
@ -167,11 +167,11 @@ bool ComputePipeline::BindResources(VideoCore::BufferCache& buffer_cache,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (desc.is_written) {
|
if (desc.is_written) {
|
||||||
texture_cache.InvalidateMemory(address, size, true);
|
texture_cache.InvalidateMemory(address, size);
|
||||||
}
|
}
|
||||||
const u32 alignment = instance.TexelBufferMinAlignment();
|
const u32 alignment = instance.TexelBufferMinAlignment();
|
||||||
const auto [vk_buffer, offset] =
|
const auto [vk_buffer, offset] =
|
||||||
buffer_cache.ObtainBuffer(address, size, desc.is_written);
|
buffer_cache.ObtainBuffer(address, size, desc.is_written, true);
|
||||||
const u32 fmt_stride = AmdGpu::NumBits(vsharp.GetDataFmt()) >> 3;
|
const u32 fmt_stride = AmdGpu::NumBits(vsharp.GetDataFmt()) >> 3;
|
||||||
ASSERT_MSG(fmt_stride == vsharp.GetStride(),
|
ASSERT_MSG(fmt_stride == vsharp.GetStride(),
|
||||||
"Texel buffer stride must match format stride");
|
"Texel buffer stride must match format stride");
|
||||||
|
|
|
@ -322,7 +322,7 @@ void GraphicsPipeline::BuildDescSetLayout() {
|
||||||
.descriptorType = tex_buffer.is_written ? vk::DescriptorType::eStorageTexelBuffer
|
.descriptorType = tex_buffer.is_written ? vk::DescriptorType::eStorageTexelBuffer
|
||||||
: vk::DescriptorType::eUniformTexelBuffer,
|
: vk::DescriptorType::eUniformTexelBuffer,
|
||||||
.descriptorCount = 1,
|
.descriptorCount = 1,
|
||||||
.stageFlags = vk::ShaderStageFlagBits::eCompute,
|
.stageFlags = vk::ShaderStageFlagBits::eVertex | vk::ShaderStageFlagBits::eFragment,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
for (const auto& image : stage->images) {
|
for (const auto& image : stage->images) {
|
||||||
|
@ -412,7 +412,7 @@ void GraphicsPipeline::BindResources(const Liverpool::Regs& regs,
|
||||||
const u32 size = vsharp.GetSize();
|
const u32 size = vsharp.GetSize();
|
||||||
const u32 alignment = instance.TexelBufferMinAlignment();
|
const u32 alignment = instance.TexelBufferMinAlignment();
|
||||||
const auto [vk_buffer, offset] =
|
const auto [vk_buffer, offset] =
|
||||||
buffer_cache.ObtainBuffer(address, size, tex_buffer.is_written);
|
buffer_cache.ObtainBuffer(address, size, tex_buffer.is_written, true);
|
||||||
const u32 fmt_stride = AmdGpu::NumBits(vsharp.GetDataFmt()) >> 3;
|
const u32 fmt_stride = AmdGpu::NumBits(vsharp.GetDataFmt()) >> 3;
|
||||||
ASSERT_MSG(fmt_stride == vsharp.GetStride(),
|
ASSERT_MSG(fmt_stride == vsharp.GetStride(),
|
||||||
"Texel buffer stride must match format stride");
|
"Texel buffer stride must match format stride");
|
||||||
|
@ -422,7 +422,7 @@ void GraphicsPipeline::BindResources(const Liverpool::Regs& regs,
|
||||||
ASSERT(adjust % fmt_stride == 0);
|
ASSERT(adjust % fmt_stride == 0);
|
||||||
push_data.AddOffset(binding, adjust / fmt_stride);
|
push_data.AddOffset(binding, adjust / fmt_stride);
|
||||||
}
|
}
|
||||||
buffer_view = vk_buffer->View(offset, size + adjust, tex_buffer.is_written,
|
buffer_view = vk_buffer->View(offset_aligned, size + adjust, tex_buffer.is_written,
|
||||||
vsharp.GetDataFmt(), vsharp.GetNumberFmt());
|
vsharp.GetDataFmt(), vsharp.GetNumberFmt());
|
||||||
}
|
}
|
||||||
set_writes.push_back({
|
set_writes.push_back({
|
||||||
|
|
|
@ -220,12 +220,12 @@ bool Instance::CreateDevice() {
|
||||||
const bool maintenance5 = add_extension(VK_KHR_MAINTENANCE_5_EXTENSION_NAME);
|
const bool maintenance5 = add_extension(VK_KHR_MAINTENANCE_5_EXTENSION_NAME);
|
||||||
add_extension(VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME);
|
add_extension(VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME);
|
||||||
add_extension(VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME);
|
add_extension(VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME);
|
||||||
const bool has_sync2 = add_extension(VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME);
|
|
||||||
|
|
||||||
|
if (Config::isMarkersEnabled()) {
|
||||||
|
const bool has_sync2 = add_extension(VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME);
|
||||||
if (has_sync2) {
|
if (has_sync2) {
|
||||||
has_nv_checkpoints = Config::isMarkersEnabled()
|
has_nv_checkpoints = add_extension(VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME);
|
||||||
? add_extension(VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME)
|
}
|
||||||
: false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
|
|
|
@ -38,7 +38,9 @@ const GraphicsPipeline* PipelineCache::GetGraphicsPipeline() {
|
||||||
LOG_TRACE(Render_Vulkan, "FMask decompression pass skipped");
|
LOG_TRACE(Render_Vulkan, "FMask decompression pass skipped");
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
RefreshGraphicsKey();
|
if (!RefreshGraphicsKey()) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
const auto [it, is_new] = graphics_pipelines.try_emplace(graphics_key);
|
const auto [it, is_new] = graphics_pipelines.try_emplace(graphics_key);
|
||||||
if (is_new) {
|
if (is_new) {
|
||||||
it.value() = std::make_unique<GraphicsPipeline>(instance, scheduler, graphics_key,
|
it.value() = std::make_unique<GraphicsPipeline>(instance, scheduler, graphics_key,
|
||||||
|
@ -49,7 +51,9 @@ const GraphicsPipeline* PipelineCache::GetGraphicsPipeline() {
|
||||||
}
|
}
|
||||||
|
|
||||||
const ComputePipeline* PipelineCache::GetComputePipeline() {
|
const ComputePipeline* PipelineCache::GetComputePipeline() {
|
||||||
RefreshComputeKey();
|
if (!RefreshComputeKey()) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
const auto [it, is_new] = compute_pipelines.try_emplace(compute_key);
|
const auto [it, is_new] = compute_pipelines.try_emplace(compute_key);
|
||||||
if (is_new) {
|
if (is_new) {
|
||||||
it.value() = std::make_unique<ComputePipeline>(instance, scheduler, *pipeline_cache,
|
it.value() = std::make_unique<ComputePipeline>(instance, scheduler, *pipeline_cache,
|
||||||
|
@ -59,7 +63,16 @@ const ComputePipeline* PipelineCache::GetComputePipeline() {
|
||||||
return pipeline;
|
return pipeline;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PipelineCache::RefreshGraphicsKey() {
|
bool ShouldSkipShader(u64 shader_hash, const char* shader_type) {
|
||||||
|
static constexpr std::array<u64, 0> skip_hashes = {};
|
||||||
|
if (std::ranges::contains(skip_hashes, shader_hash)) {
|
||||||
|
LOG_WARNING(Render_Vulkan, "Skipped {} shader hash {:#x}.", shader_type, shader_hash);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PipelineCache::RefreshGraphicsKey() {
|
||||||
auto& regs = liverpool->regs;
|
auto& regs = liverpool->regs;
|
||||||
auto& key = graphics_key;
|
auto& key = graphics_key;
|
||||||
|
|
||||||
|
@ -160,18 +173,26 @@ void PipelineCache::RefreshGraphicsKey() {
|
||||||
infos[i] = nullptr;
|
infos[i] = nullptr;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (ShouldSkipShader(bininfo->shader_hash, "graphics")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
const auto stage = Shader::Stage{i};
|
const auto stage = Shader::Stage{i};
|
||||||
const GuestProgram guest_pgm{pgm, stage};
|
const GuestProgram guest_pgm{pgm, stage};
|
||||||
std::tie(infos[i], modules[i], key.stage_hashes[i]) =
|
std::tie(infos[i], modules[i], key.stage_hashes[i]) =
|
||||||
shader_cache->GetProgram(guest_pgm, binding);
|
shader_cache->GetProgram(guest_pgm, binding);
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PipelineCache::RefreshComputeKey() {
|
bool PipelineCache::RefreshComputeKey() {
|
||||||
u32 binding{};
|
u32 binding{};
|
||||||
const auto* cs_pgm = &liverpool->regs.cs_program;
|
const auto* cs_pgm = &liverpool->regs.cs_program;
|
||||||
const GuestProgram guest_pgm{cs_pgm, Shader::Stage::Compute};
|
const GuestProgram guest_pgm{cs_pgm, Shader::Stage::Compute};
|
||||||
|
if (ShouldSkipShader(guest_pgm.hash, "compute")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
std::tie(infos[0], modules[0], compute_key) = shader_cache->GetProgram(guest_pgm, binding);
|
std::tie(infos[0], modules[0], compute_key) = shader_cache->GetProgram(guest_pgm, binding);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Vulkan
|
} // namespace Vulkan
|
||||||
|
|
|
@ -30,8 +30,8 @@ public:
|
||||||
const ComputePipeline* GetComputePipeline();
|
const ComputePipeline* GetComputePipeline();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void RefreshGraphicsKey();
|
bool RefreshGraphicsKey();
|
||||||
void RefreshComputeKey();
|
bool RefreshComputeKey();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const Instance& instance;
|
const Instance& instance;
|
||||||
|
|
|
@ -29,6 +29,19 @@ Rasterizer::Rasterizer(const Instance& instance_, Scheduler& scheduler_,
|
||||||
|
|
||||||
Rasterizer::~Rasterizer() = default;
|
Rasterizer::~Rasterizer() = default;
|
||||||
|
|
||||||
|
void Rasterizer::CpSync() {
|
||||||
|
scheduler.EndRendering();
|
||||||
|
auto cmdbuf = scheduler.CommandBuffer();
|
||||||
|
|
||||||
|
const vk::MemoryBarrier ib_barrier{
|
||||||
|
.srcAccessMask = vk::AccessFlagBits::eShaderWrite,
|
||||||
|
.dstAccessMask = vk::AccessFlagBits::eIndirectCommandRead,
|
||||||
|
};
|
||||||
|
cmdbuf.pipelineBarrier(vk::PipelineStageFlagBits::eComputeShader,
|
||||||
|
vk::PipelineStageFlagBits::eDrawIndirect,
|
||||||
|
vk::DependencyFlagBits::eByRegion, ib_barrier, {}, {});
|
||||||
|
}
|
||||||
|
|
||||||
void Rasterizer::Draw(bool is_indexed, u32 index_offset) {
|
void Rasterizer::Draw(bool is_indexed, u32 index_offset) {
|
||||||
RENDERER_TRACE;
|
RENDERER_TRACE;
|
||||||
|
|
||||||
|
@ -66,6 +79,45 @@ void Rasterizer::Draw(bool is_indexed, u32 index_offset) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Rasterizer::DrawIndirect(bool is_indexed, VAddr address, u32 offset, u32 size) {
|
||||||
|
RENDERER_TRACE;
|
||||||
|
|
||||||
|
const auto cmdbuf = scheduler.CommandBuffer();
|
||||||
|
const auto& regs = liverpool->regs;
|
||||||
|
const GraphicsPipeline* pipeline = pipeline_cache.GetGraphicsPipeline();
|
||||||
|
if (!pipeline) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ASSERT_MSG(regs.primitive_type != AmdGpu::Liverpool::PrimitiveType::RectList,
|
||||||
|
"Unsupported primitive type for indirect draw");
|
||||||
|
|
||||||
|
try {
|
||||||
|
pipeline->BindResources(regs, buffer_cache, texture_cache);
|
||||||
|
} catch (...) {
|
||||||
|
UNREACHABLE();
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto& vs_info = pipeline->GetStage(Shader::Stage::Vertex);
|
||||||
|
buffer_cache.BindVertexBuffers(vs_info);
|
||||||
|
const u32 num_indices = buffer_cache.BindIndexBuffer(is_indexed, 0);
|
||||||
|
|
||||||
|
BeginRendering();
|
||||||
|
UpdateDynamicState(*pipeline);
|
||||||
|
|
||||||
|
const auto [buffer, base] = buffer_cache.ObtainBuffer(address, size, true);
|
||||||
|
const auto total_offset = base + offset;
|
||||||
|
|
||||||
|
// We can safely ignore both SGPR UD indices and results of fetch shader parsing, as vertex and
|
||||||
|
// instance offsets will be automatically applied by Vulkan from indirect args buffer.
|
||||||
|
|
||||||
|
if (is_indexed) {
|
||||||
|
cmdbuf.drawIndexedIndirect(buffer->Handle(), total_offset, 1, 0);
|
||||||
|
} else {
|
||||||
|
cmdbuf.drawIndirect(buffer->Handle(), total_offset, 1, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Rasterizer::DispatchDirect() {
|
void Rasterizer::DispatchDirect() {
|
||||||
RENDERER_TRACE;
|
RENDERER_TRACE;
|
||||||
|
|
||||||
|
@ -113,19 +165,6 @@ void Rasterizer::DispatchIndirect(VAddr address, u32 offset, u32 size) {
|
||||||
cmdbuf.bindPipeline(vk::PipelineBindPoint::eCompute, pipeline->Handle());
|
cmdbuf.bindPipeline(vk::PipelineBindPoint::eCompute, pipeline->Handle());
|
||||||
const auto [buffer, base] = buffer_cache.ObtainBuffer(address, size, true);
|
const auto [buffer, base] = buffer_cache.ObtainBuffer(address, size, true);
|
||||||
const auto total_offset = base + offset;
|
const auto total_offset = base + offset;
|
||||||
|
|
||||||
// Emulate PFP-to-ME sync packet
|
|
||||||
const vk::BufferMemoryBarrier ib_barrier{
|
|
||||||
.srcAccessMask = vk::AccessFlagBits::eShaderWrite,
|
|
||||||
.dstAccessMask = vk::AccessFlagBits::eIndirectCommandRead,
|
|
||||||
.buffer = buffer->Handle(),
|
|
||||||
.offset = total_offset,
|
|
||||||
.size = size,
|
|
||||||
};
|
|
||||||
cmdbuf.pipelineBarrier(vk::PipelineStageFlagBits::eComputeShader,
|
|
||||||
vk::PipelineStageFlagBits::eDrawIndirect,
|
|
||||||
vk::DependencyFlagBits::eByRegion, {}, ib_barrier, {});
|
|
||||||
|
|
||||||
cmdbuf.dispatchIndirect(buffer->Handle(), total_offset);
|
cmdbuf.dispatchIndirect(buffer->Handle(), total_offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
void Draw(bool is_indexed, u32 index_offset = 0);
|
void Draw(bool is_indexed, u32 index_offset = 0);
|
||||||
|
void DrawIndirect(bool is_indexed, VAddr address, u32 offset, u32 size);
|
||||||
|
|
||||||
void DispatchDirect();
|
void DispatchDirect();
|
||||||
void DispatchIndirect(VAddr address, u32 offset, u32 size);
|
void DispatchIndirect(VAddr address, u32 offset, u32 size);
|
||||||
|
@ -45,6 +46,7 @@ public:
|
||||||
void MapMemory(VAddr addr, u64 size);
|
void MapMemory(VAddr addr, u64 size);
|
||||||
void UnmapMemory(VAddr addr, u64 size);
|
void UnmapMemory(VAddr addr, u64 size);
|
||||||
|
|
||||||
|
void CpSync();
|
||||||
u64 Flush();
|
u64 Flush();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -107,7 +107,7 @@ Shader::Info MakeShaderInfo(const GuestProgram& pgm, const AmdGpu::Liverpool::Re
|
||||||
ShaderCache::ShaderCache(const Instance& instance_, AmdGpu::Liverpool* liverpool_)
|
ShaderCache::ShaderCache(const Instance& instance_, AmdGpu::Liverpool* liverpool_)
|
||||||
: instance{instance_}, liverpool{liverpool_}, inst_pool{8192}, block_pool{512} {
|
: instance{instance_}, liverpool{liverpool_}, inst_pool{8192}, block_pool{512} {
|
||||||
profile = Shader::Profile{
|
profile = Shader::Profile{
|
||||||
.supported_spirv = 0x00010600U,
|
.supported_spirv = instance.ApiVersion() >= VK_API_VERSION_1_3 ? 0x00010600U : 0x00010500U,
|
||||||
.subgroup_size = instance.SubgroupSize(),
|
.subgroup_size = instance.SubgroupSize(),
|
||||||
.support_explicit_workgroup_layout = true,
|
.support_explicit_workgroup_layout = true,
|
||||||
};
|
};
|
||||||
|
|
|
@ -34,10 +34,10 @@ TextureCache::TextureCache(const Vulkan::Instance& instance_, Vulkan::Scheduler&
|
||||||
|
|
||||||
TextureCache::~TextureCache() = default;
|
TextureCache::~TextureCache() = default;
|
||||||
|
|
||||||
void TextureCache::InvalidateMemory(VAddr address, size_t size, bool from_compute) {
|
void TextureCache::InvalidateMemory(VAddr address, size_t size) {
|
||||||
std::unique_lock lock{mutex};
|
std::unique_lock lock{mutex};
|
||||||
ForEachImageInRegion(address, size, [&](ImageId image_id, Image& image) {
|
ForEachImageInRegion(address, size, [&](ImageId image_id, Image& image) {
|
||||||
if (from_compute && !image.Overlaps(address, size)) {
|
if (!image.Overlaps(address, size)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Ensure image is reuploaded when accessed again.
|
// Ensure image is reuploaded when accessed again.
|
||||||
|
|
|
@ -38,7 +38,7 @@ public:
|
||||||
~TextureCache();
|
~TextureCache();
|
||||||
|
|
||||||
/// Invalidates any image in the logical page range.
|
/// Invalidates any image in the logical page range.
|
||||||
void InvalidateMemory(VAddr address, size_t size, bool from_compute = false);
|
void InvalidateMemory(VAddr address, size_t size);
|
||||||
|
|
||||||
/// Evicts any images that overlap the unmapped range.
|
/// Evicts any images that overlap the unmapped range.
|
||||||
void UnmapMemory(VAddr cpu_addr, size_t size);
|
void UnmapMemory(VAddr cpu_addr, size_t size);
|
||||||
|
|
Loading…
Reference in New Issue