early-access version 3940
This commit is contained in:
parent
d05c5685fb
commit
e3b48b1c46
6 changed files with 15 additions and 12 deletions
|
@ -1,7 +1,7 @@
|
||||||
yuzu emulator early access
|
yuzu emulator early access
|
||||||
=============
|
=============
|
||||||
|
|
||||||
This is the source code for early-access 3939.
|
This is the source code for early-access 3940.
|
||||||
|
|
||||||
## Legal Notice
|
## Legal Notice
|
||||||
|
|
||||||
|
|
|
@ -822,11 +822,13 @@ void GDBStub::HandleRcmd(const std::vector<u8>& command) {
|
||||||
const char i = True(mem_info.attribute & MemoryAttribute::IpcLocked) ? 'I' : '-';
|
const char i = True(mem_info.attribute & MemoryAttribute::IpcLocked) ? 'I' : '-';
|
||||||
const char d = True(mem_info.attribute & MemoryAttribute::DeviceShared) ? 'D' : '-';
|
const char d = True(mem_info.attribute & MemoryAttribute::DeviceShared) ? 'D' : '-';
|
||||||
const char u = True(mem_info.attribute & MemoryAttribute::Uncached) ? 'U' : '-';
|
const char u = True(mem_info.attribute & MemoryAttribute::Uncached) ? 'U' : '-';
|
||||||
|
const char p =
|
||||||
|
True(mem_info.attribute & MemoryAttribute::PermissionLocked) ? 'P' : '-';
|
||||||
|
|
||||||
reply +=
|
reply += fmt::format(" {:#012x} - {:#012x} {} {} {}{}{}{}{} [{}, {}]\n",
|
||||||
fmt::format(" {:#012x} - {:#012x} {} {} {}{}{}{} [{}, {}]\n",
|
mem_info.base_address,
|
||||||
mem_info.base_address, mem_info.base_address + mem_info.size - 1,
|
mem_info.base_address + mem_info.size - 1, perm, state, l, i,
|
||||||
perm, state, l, i, d, u, mem_info.ipc_count, mem_info.device_count);
|
d, u, p, mem_info.ipc_count, mem_info.device_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
const uintptr_t next_address = mem_info.base_address + mem_info.size;
|
const uintptr_t next_address = mem_info.base_address + mem_info.size;
|
||||||
|
|
|
@ -149,7 +149,7 @@ u64 KProcess::GetTotalPhysicalMemoryUsed() {
|
||||||
}
|
}
|
||||||
|
|
||||||
u64 KProcess::GetTotalPhysicalMemoryUsedWithoutSystemResource() {
|
u64 KProcess::GetTotalPhysicalMemoryUsedWithoutSystemResource() {
|
||||||
return this->GetTotalPhysicalMemoryUsed() - this->GetSystemResourceUsage();
|
return this->GetTotalPhysicalMemoryUsed() - this->GetSystemResourceSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KProcess::ReleaseUserException(KThread* thread) {
|
bool KProcess::ReleaseUserException(KThread* thread) {
|
||||||
|
|
|
@ -76,7 +76,7 @@ Result MapUnmapMemorySanityChecks(const KPageTable& manager, u64 dst_addr, u64 s
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
Result SetMemoryPermission(Core::System& system, u64 address, u64 size, MemoryPermission perm) {
|
Result SetMemoryPermission(Core::System& system, u64 address, u64 size, MemoryPermission perm) {
|
||||||
LOG_DEBUG(Kernel_SVC, "called, address=0x{:016X}, size=0x{:X}, perm=0x{:08X", address, size,
|
LOG_DEBUG(Kernel_SVC, "called, address=0x{:016X}, size=0x{:X}, perm=0x{:08X}", address, size,
|
||||||
perm);
|
perm);
|
||||||
|
|
||||||
// Validate address / size.
|
// Validate address / size.
|
||||||
|
|
|
@ -41,7 +41,7 @@ bool BufferQueueCore::WaitForDequeueCondition(std::unique_lock<std::mutex>& lk)
|
||||||
s32 BufferQueueCore::GetMinUndequeuedBufferCountLocked(bool async) const {
|
s32 BufferQueueCore::GetMinUndequeuedBufferCountLocked(bool async) const {
|
||||||
// If DequeueBuffer is allowed to error out, we don't have to add an extra buffer.
|
// If DequeueBuffer is allowed to error out, we don't have to add an extra buffer.
|
||||||
if (!use_async_buffer) {
|
if (!use_async_buffer) {
|
||||||
return max_acquired_buffer_count;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dequeue_buffer_cannot_block || async) {
|
if (dequeue_buffer_cannot_block || async) {
|
||||||
|
@ -52,7 +52,7 @@ s32 BufferQueueCore::GetMinUndequeuedBufferCountLocked(bool async) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 BufferQueueCore::GetMinMaxBufferCountLocked(bool async) const {
|
s32 BufferQueueCore::GetMinMaxBufferCountLocked(bool async) const {
|
||||||
return GetMinUndequeuedBufferCountLocked(async) + 1;
|
return GetMinUndequeuedBufferCountLocked(async);
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 BufferQueueCore::GetMaxBufferCountLocked(bool async) const {
|
s32 BufferQueueCore::GetMaxBufferCountLocked(bool async) const {
|
||||||
|
@ -61,7 +61,7 @@ s32 BufferQueueCore::GetMaxBufferCountLocked(bool async) const {
|
||||||
|
|
||||||
if (override_max_buffer_count != 0) {
|
if (override_max_buffer_count != 0) {
|
||||||
ASSERT(override_max_buffer_count >= min_buffer_count);
|
ASSERT(override_max_buffer_count >= min_buffer_count);
|
||||||
max_buffer_count = override_max_buffer_count;
|
return override_max_buffer_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Any buffers that are dequeued by the producer or sitting in the queue waiting to be consumed
|
// Any buffers that are dequeued by the producer or sitting in the queue waiting to be consumed
|
||||||
|
|
|
@ -134,7 +134,7 @@ Status BufferQueueProducer::WaitForFreeSlotThenRelock(bool async, s32* found, St
|
||||||
const s32 max_buffer_count = core->GetMaxBufferCountLocked(async);
|
const s32 max_buffer_count = core->GetMaxBufferCountLocked(async);
|
||||||
if (async && core->override_max_buffer_count) {
|
if (async && core->override_max_buffer_count) {
|
||||||
if (core->override_max_buffer_count < max_buffer_count) {
|
if (core->override_max_buffer_count < max_buffer_count) {
|
||||||
LOG_ERROR(Service_Nvnflinger, "async mode is invalid with buffer count override");
|
*found = BufferQueueCore::INVALID_BUFFER_SLOT;
|
||||||
return Status::BadValue;
|
return Status::BadValue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -142,7 +142,8 @@ Status BufferQueueProducer::WaitForFreeSlotThenRelock(bool async, s32* found, St
|
||||||
// Free up any buffers that are in slots beyond the max buffer count
|
// Free up any buffers that are in slots beyond the max buffer count
|
||||||
for (s32 s = max_buffer_count; s < BufferQueueDefs::NUM_BUFFER_SLOTS; ++s) {
|
for (s32 s = max_buffer_count; s < BufferQueueDefs::NUM_BUFFER_SLOTS; ++s) {
|
||||||
ASSERT(slots[s].buffer_state == BufferState::Free);
|
ASSERT(slots[s].buffer_state == BufferState::Free);
|
||||||
if (slots[s].graphic_buffer != nullptr) {
|
if (slots[s].graphic_buffer != nullptr && slots[s].buffer_state == BufferState::Free &&
|
||||||
|
!slots[s].is_preallocated) {
|
||||||
core->FreeBufferLocked(s);
|
core->FreeBufferLocked(s);
|
||||||
*return_flags |= Status::ReleaseAllBuffers;
|
*return_flags |= Status::ReleaseAllBuffers;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue