| Commit message (Collapse) | Author | Age | Files | Lines |
| |\
| |
| | |
MKW performance improvements
|
| | |
| |
| |
| |
| |
| | |
Adapted from sylvieistaken/selevet-eglantine performance builds, including 8b076b167ffc5ca1ba8ffedcd00e255accbe018c and d8c95fef. Preserve upstream command-list coherency and submission ordering.
Assisted by Codex.
|
| |/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Writing any register outside the instance loop's own methods now draws the
waiting instances first, so the batch sees the base instance it was begun
with. When a title writes another register in the middle of a loop, such
as a per-instance constant buffer, the loop is drawn in several batches,
and each later batch started again at global_base_instance_index with one
extra instance, so it used the instance IDs of the first records.
Count the instances already drawn for the current loop and start the next
batch after them, without the extra first-instance draw. A loop that is
not split is drawn exactly as before.
Follow-up to 2ad0830d2f and eb99da6072.
Assisted-by: Claude Sonnet 5.5 (implementation and commit message)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A draw of N instances arrives as Begin(First)/End and N-1 Begin(Subsequent)/
End pairs. The draw manager draws the first at once and the rest together at
DrawDeferred, which ran at the next Begin(First) or when the macro returned.
NVN's draw macros reset the base instance register and its copy in
c[0][0x644] right after the loop, before returning, so the deferred instances
were drawn with base instance 0 and read the first records of the instance
buffer instead of their own.
In Mario Kart World every tree mesh is drawn this way, from one shared
instance buffer: each mesh got other meshes' transforms, which showed as
low-detail, inflated or scattered trees.
Any write other than the loop's own methods (draw begin/end, vertex and
index counts, inline indices) now draws the waiting instances first.
|
| |
|
|
|
| |
This reverts commit 535b676970. The Switch 2 support comes from the nx2
work instead, merged next.
|
| |
|
|
|
|
|
|
|
|
|
| |
Bring the NS2 patch and local follow-up fixes onto Eglantine master.
Includes native graphics services, instruction translation, syncpoint
cancellation acknowledgement, texture handling and diagnostics.
Experimental checkpoint; not ready to merge. The original Eden build
passed, but this rebased branch has not been built or tested.
Assisted-by: OpenAI Codex (implementation, debugging, tests and PR preparation)
|
| |
|
|
|
|
|
|
|
| |
Inline index draws arrive as a batch but were processed one word at a time, so each index ran through the full per-method path and got appended a byte at a time.
Handle the whole batch in one pass instead, updating state once and appending all the indices together. Replay shadow control still goes word by word since it has to reload each one.
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4083
Reviewed-by: Lizzie <lizzie@eden-emu.dev>
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
on hot paths (#3758)
usual indirection removal
helps very slightly to codegen
the idea is basically to reduce the amount of pointer deference overall in the code, and use idiomatic std::variant<>-isms to not rely on vtables/unique_ptr overhead
this should allow the compiler to emit better code
of course it's a tiny optimisation and only CPU side, but allows us to reduce indirection which is almost always a good thing
"but youre passing more parameters to the function!!!" its literally memoized into a register my friend
Signed-off-by: lizzie <lizzie@eden-emu.dev>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3758
Reviewed-by: crueter <crueter@eden-emu.dev>
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |\
| |
| | |
video_core: Adjust topology update logic and Adjust Clear Manage
|
| | | |
|
| | | |
|
| | | |
|
| |/ |
|
| |
|