Compare commits

..

29 commits

Author SHA1 Message Date
12e1396997
[dynarmic] increase cache code size
Some checks failed
eden-license / license-header (pull_request) Failing after 19s
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2025-09-20 16:02:33 +00:00
bb36507950
Fix license headers
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2025-09-20 15:58:18 +00:00
ebf8c4c2f5
[dynarmic] inlined pool in block + slab-like for each block
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2025-09-20 15:58:18 +00:00
da4f998e58
[dynarmic] Allow to skip verification pass
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2025-09-20 15:58:18 +00:00
e25e9431f7
[dynarmic] fix exception posix handler
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2025-09-20 15:58:18 +00:00
c5b0a8ca9c
[dynarmic] use better boost::visitor
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2025-09-20 15:58:18 +00:00
86b6ffd76a
[dynarmic] regalloc use scratchimpl that uses all instead of iteraiting
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2025-09-20 15:58:18 +00:00
3b2daf0f48
[dynarmic] Implement constant folding for CountLeadingZeros, add readXX constnat folding for A64
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2025-09-20 15:58:18 +00:00
ecc35083c1
[dynarmic] unconditional branches always take
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2025-09-20 15:58:18 +00:00
054af1ec15
[dynarmic] fix hardcoded AVX512 registers, use xmm0 instead of xmm16 to align with spec
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2025-09-20 15:58:18 +00:00
91e2de4f5f
[dynarmic] checked code alignment
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2025-09-20 15:58:18 +00:00
6fc91a1310
[dynarmic] remove use of mcl reverse iterator
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2025-09-20 15:58:18 +00:00
6c4e9bec4f
[dynarmic, docs] fastmem docs
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2025-09-20 15:58:18 +00:00
b0b068db4e
[dynarmic, cmake][ remove unusd frontends var
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2025-09-20 15:58:18 +00:00
819fa783f5
[dynarmic] fix android
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2025-09-20 15:58:18 +00:00
5e2cfb5a53
[dynarmic] use ARCHITECTURE_ macros instead of MCL ones
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2025-09-20 15:58:18 +00:00
d8fcad4b25
[dynarmic] add back encoding names (for print_info)
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2025-09-20 15:58:18 +00:00
196a0bb332
[dynarmic] fix ASIMD execution
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2025-09-20 15:58:17 +00:00
5831186a71
[dynarmic] fix tests
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2025-09-20 15:58:17 +00:00
e3260e2ebd
[dynarmic] reduce matcher table noise and cache misses
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2025-09-20 15:58:17 +00:00
5590bf4029
[dynarmic] (prolly makes MSVC crash) - use 128MiB code cache
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2025-09-20 15:58:17 +00:00
be67a57e49
[docs] fastmem draft
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2025-09-20 15:58:17 +00:00
453c7052f9
[dynarmic] fix tests_reader and tests_generator
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2025-09-20 15:58:17 +00:00
0ad0b4fb6f
[dynarmic] reduce use 2 bits for LRU and 4 bits for clog2 of bit size
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2025-09-20 15:58:17 +00:00
0f318e96fb
[dynarmic] use small vector experiment
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2025-09-20 15:58:17 +00:00
d65d8f6532
Fix license headers 2025-09-20 15:58:17 +00:00
b463d8ab79
[dynarmic] reduce opt pass latency
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2025-09-20 15:58:17 +00:00
4b558e5303
[hw_composer]: Add some enhancements to improve its performance and logic (#225)
These changes should mostly improve the performance for most of games and reduce reallocations from framebuffer releases.

Co-authored-by: Gamer64 <76565986+Gamer64ytb@users.noreply.github.com>
Reviewed-on: #225
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Reviewed-by: Lizzie <lizzie@eden-emu.dev>
Co-authored-by: Gamer64 <gamer64@eden-emu.dev>
Co-committed-by: Gamer64 <gamer64@eden-emu.dev>
2025-09-20 17:54:14 +02:00
28b8159da1
[VK] Change barrier to transfer in present manager (#315)
There is no Color_attachment happening here only transfer operation and hence the gpu should only wait for transfer not color_attachment_output_bit(may fix async presentation, not likely though)

Reviewed-on: #315
Reviewed-by: Shinmegumi <shinmegumi@eden-emu.dev>
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Co-authored-by: wildcard <wildcard@eden-emu.dev>
Co-committed-by: wildcard <wildcard@eden-emu.dev>
2025-09-20 17:52:40 +02:00
4 changed files with 37 additions and 3 deletions

View file

@ -211,7 +211,11 @@ std::shared_ptr<Dynarmic::A32::Jit> ArmDynarmic32::MakeJit(Common::PageTable* pa
config.enable_cycle_counting = !m_uses_wall_clock;
// Code cache size - max in ARM is 128MiB, max in x86_64 is 2GiB
#ifdef ARCHITECTURE_arm64
config.code_cache_size = std::uint32_t(128_MiB);
#else
config.code_cache_size = std::uint32_t(512_MiB);
#endif
// Allow memory fault handling to work
if (m_system.DebuggerEnabled()) {

View file

@ -270,7 +270,11 @@ std::shared_ptr<Dynarmic::A64::Jit> ArmDynarmic64::MakeJit(Common::PageTable* pa
config.enable_cycle_counting = !m_uses_wall_clock;
// Code cache size - max in ARM is 128MiB, max in x86_64 is 2GiB
#ifdef ARCHITECTURE_arm64
config.code_cache_size = std::uint32_t(128_MiB);
#else
config.code_cache_size = std::uint32_t(512_MiB);
#endif
// Allow memory fault handling to work
if (m_system.DebuggerEnabled()) {

View file

@ -53,6 +53,19 @@ u32 HardwareComposer::ComposeLocked(f32* out_speed_scale, Display& display,
// Set default speed limit to 100%.
*out_speed_scale = 1.0f;
// If no layers are available, skip the logic.
bool any_visible = false;
for (auto& layer : display.stack.layers) {
if (layer->visible) {
any_visible = true;
break;
}
}
if (!any_visible) {
*out_speed_scale = 1.0f;
return 1;
}
// Determine the number of vsync periods to wait before composing again.
std::optional<s32> swap_interval{};
bool has_acquired_buffer{};
@ -110,7 +123,7 @@ u32 HardwareComposer::ComposeLocked(f32* out_speed_scale, Display& display,
}
// If any new buffers were acquired, we can present.
if (has_acquired_buffer) {
if (has_acquired_buffer && !composition_stack.empty()) {
// Sort by Z-index.
std::stable_sort(composition_stack.begin(), composition_stack.end(),
[&](auto& l, auto& r) { return l.z_index < r.z_index; });
@ -119,6 +132,19 @@ u32 HardwareComposer::ComposeLocked(f32* out_speed_scale, Display& display,
nvdisp.Composite(composition_stack);
}
// Batch framebuffer releases, instead of one-into-one.
std::vector<std::pair<Layer*, Framebuffer*>> to_release;
for (auto& [layer_id, framebuffer] : m_framebuffers) {
if (framebuffer.release_frame_number > m_frame_number || !framebuffer.is_acquired)
continue;
if (auto layer = display.stack.FindLayer(layer_id); layer)
to_release.emplace_back(layer.get(), &framebuffer);
}
for (auto& [layer, framebuffer] : to_release) {
layer->buffer_item_consumer->ReleaseBuffer(framebuffer->item, android::Fence::NoFence());
framebuffer->is_acquired = false;
}
// Advance by at least one frame.
const u32 frame_advance = swap_interval.value_or(1);
m_frame_number += frame_advance;

View file

@ -470,8 +470,8 @@ void PresentManager::CopyToSwapchainImpl(Frame* frame) {
const std::array wait_semaphores = {present_semaphore, *frame->render_ready};
static constexpr std::array<VkPipelineStageFlags, 2> wait_stage_masks{
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
VK_PIPELINE_STAGE_TRANSFER_BIT,
VK_PIPELINE_STAGE_TRANSFER_BIT,
};
const VkSubmitInfo submit_info{