aboutsummaryrefslogtreecommitdiff
path: root/src/shader_recompiler/frontend/maxwell/structured_control_flow.cpp
Commit message (Collapse)AuthorAgeFilesLines
* shader_recompiler: translate Switch 2 task and mesh programsTakoroka3 days1-4/+25
| | | | | | | | | | | | | | | | | | | | | | | Mario Kart World draws some of its geometry with NVN task and mesh programs (the task program culls and writes the mesh workgroup count and a payload to its stage buffer; each mesh workgroup reads it back and writes vertices and primitives). Add Task and Mesh stages and translate them for VK_EXT_mesh_shader: - the ISBE pseudo instruction from the lowering becomes reads and writes of an emulated stage buffer: the task's output region is the task payload, the mesh output regions live in workgroup memory - every EXIT of these stages jumps to one final return, so all invocations reach the epilogue: a barrier, then OpEmitMeshTasksEXT, or OpSetMeshOutputsEXT and a copy of the 32-element vertex and primitive groups (lines named by the mesh header's and the pass-through geometry header's output maps) to arrayed and per-primitive outputs - Sirit lacks the two mesh instructions: they are emitted as OpStore markers and replaced after assembly - fragment inputs a mesh program writes per primitive get PerPrimitiveEXT The captured task and mesh programs of the title translate to SPIR-V that spirv-val accepts.
* [common] Switch to boost::unordered_flat containers (#4326)crueter2026-08-311-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Replaces all instances of ankerl's unordered map/set with boost's `unordered_flat_*` classes. This uses std::hash since boost::hash is actually a lot slower. Also adds an abstraction layer in `Common` so future changes are quicker and easier. Other implementation details: - ankerl provided hash specializations for tuple and pair, so those were ported here - std::erase_if doesn't work on boost, so just used the ADL'd erase_if This should be about equal or superior performance as unordered_dense for everything except iteration. Signed-off-by: crueter <crueter@eden-emu.dev> - [x] I have read and followed the [Contribution Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CONTRIBUTING.md#code-contributions). - [x] I have read and followed the [AI Policy](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/AI.md) - [x] I have read and followed the [Coding Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/Coding.md) to the best of my ability. ------------------- Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4326 Reviewed-by: Lizzie and Samuel <lizzie@eden-emu.dev> Reviewed-by: MaranBr <maranbr@eden-emu.dev>
* [fmt] use {#:x} instead of 0x{:#x} (#4170)lizzie2026-07-251-1/+1
| | | | | | | | | | continuation of #309 but applying to even more files than before :) also makes them lowercase because `0xfafafa` is better as `0XFAFAFA` Signed-off-by: lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4170 Reviewed-by: CamilleLaVey <camillelavey99@gmail.com> Reviewed-by: Maufeat <sahyno1996@gmail.com>
* [maxwell] Fix Flow::Block comp error (#3882)crueter2026-04-251-1/+1
| | | | | | | Signed-off-by: crueter <crueter@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3882 Reviewed-by: Lizzie <lizzie@eden-emu.dev> Reviewed-by: MaranBr <maranbr@eden-emu.dev>
* [*] change all std::unordered_map and std::unordered_set into ↵lizzie2026-02-101-3/+3
| | | | | | | | | | | | | | | | | | | ankerl::unordered_dense::map/set variants (#3442) mainly doing this to reduce memory footprint; we all know how nice ankerl::unordered_dense is in theory 4x faster - in practice these maps arent that "hot" anyways so not likely to have much perf gained i just want to reduce mem fragmentation to ease my porting process, plus it helps other platforms as well (ahem weak Mediatek devices) :) Signed-off-by: lizzie <lizzie@eden-emu.dev> Co-authored-by: Caio Oliveira <caiooliveirafarias0@gmail.com> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3442 Reviewed-by: DraVee <dravee@eden-emu.dev> Reviewed-by: CamilleLaVey <camillelavey99@gmail.com> Co-authored-by: lizzie <lizzie@eden-emu.dev> Co-committed-by: lizzie <lizzie@eden-emu.dev>
* [Maxwell]: Fix shaders compilation memory leak (#2606)Gamer642025-10-011-0/+1
| | | | | | | | | | | | | Co-authored-by: collecting <collecting@citron-emu.org> "The ObjectPool<Statement> was never being cleared after use. When compiling complex shaders, this would allocate gigabytes of memory, causing the emulator to run out of RAM and be killed by the operating system. This is a critical fix that prevents out-of-memory crashes on all operating systems when playing games with complex shaders." Co-authored-by: Gamer64 <76565986+Gamer64ytb@users.noreply.github.com> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2606 Reviewed-by: MaranBr <maranbr@eden-emu.dev> Reviewed-by: Shinmegumi <shinmegumi@eden-emu.dev> Co-authored-by: Gamer64 <gamer64@eden-emu.dev> Co-committed-by: Gamer64 <gamer64@eden-emu.dev>
* [common] remove ranges polyfill (#2546)lizzie2025-09-241-1/+4
| | | | | | | | | Signed-off-by: lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2546 Reviewed-by: MaranBr <maranbr@eden-emu.dev> Reviewed-by: crueter <crueter@eden-emu.dev> Co-authored-by: lizzie <lizzie@eden-emu.dev> Co-committed-by: lizzie <lizzie@eden-emu.dev>
* Update fmt to allow for v11crueter2025-04-101-1/+1
| | | Signed-off-by: swurl <swurl@swurl.xyz>
* general: fix compile for Apple ClangLiam2022-11-221-0/+1
|
* Shader Decompiler: Fix dangerous behavior of invalid iterator insertion.Fernando Sahmkow2022-10-061-3/+3
|
* structured_control_flow: Remove constexpr Flow::Blocklat9nq2022-06-131-6/+0
| | | | | | This seems to be unsupported in newer libstdc++ versions due to Flow::Block's base class being a non-literal type. It's not clear to me why this was permitted in earlier versions.
* general: Convert source file copyright comments over to SPDXMorph2022-04-231-3/+2
| | | | | This formats all copyright comments according to SPDX formatting guidelines. Additionally, this resolves the remaining GPLv2 only licensed files by relicensing them to GPLv2.0-or-later.
* shader_recompiler: Reduce unused includesameerj2022-03-201-2/+0
|
* structured_control_flow: Skip reordering nested demote branches.ameerj2021-08-301-0/+11
| | | | Nested demote branches add complexity with combining the condition if it has not been initialized yet. Skip them for the time being.
* structured_control_flow: Conditionally invoke demote reorder passameerj2021-08-301-4/+6
| | | | This is only needed on select drivers when a fragment shader discards/demotes.
* structured_control_flow: Add DemoteCombinationPassameerj2021-08-281-1/+107
| | | | | Some drivers misread data when demotes are interleaved in the program. This moves demote branches to be checked at the end of the program. Fixes "wireframe" issue in Pokemon SwSh on some drivers
* shader: Avoid usage of C++20 ranges to build in clangReinUsesLisp2021-07-221-4/+4
|
* shader_recompiler, video_core: Resolve clang errorslat9nq2021-07-221-7/+2
| | | | | | | | | | Silences the following warnings-turned-errors: -Wsign-conversion -Wunused-private-field -Wbraced-scalar-init -Wunused-variable And some other errors
* shader: GCC fmt 8.0.0 fixeslat9nq2021-07-221-1/+1
|
* shader: Move loop safety tests to code emissionReinUsesLisp2021-07-221-33/+4
|
* shader: Calibrate loop safety thresholdReinUsesLisp2021-07-221-1/+1
|
* shader: Fix loop safety to SSA passReinUsesLisp2021-07-221-1/+3
|
* shader: Add shader loop safety check settingslat9nq2021-07-221-4/+38
| | | | Also add a setting for enable Nsight Aftermath.
* shader: Always initialize up reference in structure control flowReinUsesLisp2021-07-221-31/+36
| | | | Fixes ubsan issue.
* shader: Read branch conditions from an instructionReinUsesLisp2021-07-221-6/+3
| | | | Fixes the identity removal pass.
* shader_recompiler: GCC fixeslat9nq2021-07-221-24/+24
| | | | | Fixes members of unnamed union not being accessible, and one function without a declaration.
* glasm: Initial implementation of phi nodes on GLASMReinUsesLisp2021-07-221-3/+3
|
* glasm: Rework control flow introducing a syntax listReinUsesLisp2021-07-221-99/+136
| | | | | This commit regresses VertexA shaders, their transformation pass has to be adapted to the new control flow.
* shader: Fix gcc warningsReinUsesLisp2021-07-221-1/+1
|
* shader: Improve goto removal algorithm complexityReinUsesLisp2021-07-221-49/+28
| | | | | Find sibling node containing a nephew searching from the nephew itself instead of the uncle.
* shader: Move siblings check to a separate function and comment them outReinUsesLisp2021-07-221-16/+21
|
* shader: Mark blocks with no end branch as unreachableReinUsesLisp2021-07-221-2/+7
|
* shader_recompiler,video_core: Cleanup some GCC and Clang errorslat9nq2021-07-221-2/+1
| | | | | | | | | | | | | | | | | Mostly fixing unused *, implicit conversion, braced scalar init, fpermissive, and some others. Some Clang errors likely remain in video_core, and std::ranges is still a pertinent issue in shader_recompiler shader_recompiler: cmake: Force bracket depth to 1024 on Clang Increases the maximum fold expression depth thread_worker: Include condition_variable Don't use list initializers in control flow Co-authored-by: ReinUsesLisp <reinuseslisp@airmail.cc>
* shader: Fix indirect branches to scheduler instructionsReinUsesLisp2021-07-221-3/+3
|
* shader: Implement BRXFernandoS272021-07-221-0/+57
|
* shader: Fix structured control flow on KIL instructionsReinUsesLisp2021-07-221-3/+6
| | | | | This could potentially leave unvisited blocks, leading to illegal phi nodes.
* shader: Properly insert Prologue instructionReinUsesLisp2021-07-221-1/+2
|
* shader: Implement NDC [-1, 1], attribute types and default varying ↵ReinUsesLisp2021-07-221-1/+6
| | | | initialization
* shader: Add partial rasterizer integrationReinUsesLisp2021-07-221-0/+18
|
* shader: Implement CAL inlining function callsReinUsesLisp2021-07-221-0/+770