eden/tools
lizzie 2068b5d452
Some checks are pending
tx-src / sources (push) Waiting to run
Check Strings / check-strings (push) Waiting to run
[vk] Clamp dynamic descriptors based on device limits (#4115)
Should fix this specific crash
```
* thread #82, name = 'GPU', stop reason = Exception 0xc0000005 encountered at address 0x7ff7e5193e89: Access violation reading location 0x00000098
  * frame #0: 0x00007ff7e5193e89 eden.exe`std::unique_ptr<Vulkan::Scheduler::CommandChunk,std::default_delete<Vulkan::Scheduler::CommandChunk> >::operator->(this=<unavailable>) at memory:3453 [inlined]
    frame #1: 0x00007ff7e5193e81 eden.exe`void Vulkan::Scheduler::DispatchWork(this=0x0000000000000000) at vk_scheduler.cpp:146
    frame #2: 0x00007ff7e5193d8f eden.exe`void Vulkan::Scheduler::WaitWorker(this=<unavailable>) at vk_scheduler.cpp:133
    frame #3: 0x00007ff7e54f472e eden.exe`void Vulkan::UpdateDescriptorQueue::Acquire(this=0x0000026c77cfb4b8) at vk_update_descriptor.cpp:41
    frame #4: 0x00007ff7e5537a43 eden.exe`void Vulkan::ASTCDecoderPass::Assemble(this=0x0000026c794fba10, image=0x0000026cfb794850, map=0x00000025e28fcb30, swizzles=<unavailable>) at vk_compute_pass.cpp:603
    frame #5: 0x00007ff7e55043e1 eden.exe`void Vulkan::TextureCacheRuntime::AccelerateImageUpload(this=<unavailable>, image=0x0000026cfb794850, map=0x00000025e28fcb30, swizzles=size=10, z_start=0, z_count=0) at vk_texture_cache.cpp:2482
    frame #6: 0x00007ff7e5516592 eden.exe`void VideoCommon::TextureCache<struct Vulkan::TextureCacheParams>::UploadImageContents<struct Vulkan::StagingBufferRef>(this=<unavailable>, image=0x0000026cfb794850, staging=0x00000025e28fcb30) at texture_cache.h:1147
    frame #7: 0x00007ff7e551523d eden.exe`void VideoCommon::TextureCache<struct Vulkan::TextureCacheParams>::RefreshContents(this=0x0000026c794fd800, image=0x0000026cfb794850, image_id=(index = 3801072224)) at texture_cache.h:1133
    frame #8: 0x00007ff7e5517b50 eden.exe`struct Common::SlotId VideoCommon::TextureCache<struct Vulkan::TextureCacheParams>::JoinImages(this=0x0000026c794fd800, info=<unavailable>, gpu_addr=25374426112, cpu_addr=2254181376) at texture_cache.h:1644
    frame #9: 0x00007ff7e5516ff6 eden.exe`struct Common::SlotId VideoCommon::TextureCache<struct Vulkan::TextureCacheParams>::InsertImage(this=0x0000026c794fd800, info=0x00000025e28fd270, gpu_addr=25374426112, options=0x0) at texture_cache.h:1513
    frame #10: 0x00007ff7e5516a60 eden.exe`struct Common::SlotId VideoCommon::TextureCache<struct Vulkan::TextureCacheParams>::FindOrInsertImage(this=0x0000026c794fd800, info=0x00000025e28fd270, gpu_addr=25374426112, options=0x0) at texture_cache.h:1194
    frame #11: 0x00007ff7e5515a13 eden.exe`struct Common::SlotId VideoCommon::TextureCache<struct Vulkan::TextureCacheParams>::CreateImageView(this=0x0000026c794fd800, config=0x00000025e28fd370) at texture_cache.h:1173
    frame #12: 0x00007ff7e550cd64 eden.exe`struct Common::SlotId VideoCommon::TextureCache<struct Vulkan::TextureCacheParams>::VisitImageView(this=0x0000026c794fd800, index=4586, compute=<unavailable>) at texture_cache.h:554
    frame #13: 0x00007ff7e550d181 eden.exe`void VideoCommon::TextureCache<struct Vulkan::TextureCacheParams>::FillImageViews(this=0x0000026c794fd800, views=size=5, compute=<unavailable>, blacklist=<unavailable>) at texture_cache.h:227
    frame #14: 0x00007ff7e58896e4 eden.exe`Vulkan::GraphicsPipeline::ConfigureImpl<Vulkan::(anonymous namespace)::SimpleStorageSpec>(this=0x0000026f865c1a60, is_indexed=<unavailable>) at vk_graphics_pipeline.cpp:415
    frame #15: 0x00007ff7e5889479 eden.exe`<lambda_1>::operator(pl=<unavailable>, is_indexed=<unavailable>) at vk_graphics_pipeline.h:123 [inlined]
    frame #16: 0x00007ff7e5889474 eden.exe`<lambda_1>::__invoke(pl=<unavailable>, is_indexed=<unavailable>) at vk_graphics_pipeline.h:123
    frame #17: 0x00007ff7e519d2a8 eden.exe`Vulkan::GraphicsPipeline::Configure(this=0x0000026f865c1a60, is_indexed=<unavailable>) at vk_graphics_pipeline.h:105 [inlined]
    frame #18: 0x00007ff7e519d29d eden.exe`Vulkan::RasterizerVulkan::PrepareDraw<`lambda at D:\a\g\g\eden-source\src\video_core\renderer_vulkan\vk_rasterizer.cpp:256:29'>(this=0x0000026c764f9368, is_indexed=<unavailable>, draw_func=0x00000025e28fdb80) at vk_rasterizer.cpp:244
    frame #19: 0x00007ff7e519d1db eden.exe`void Vulkan::RasterizerVulkan::Draw(this=<unavailable>, is_indexed=<unavailable>, instance_count=<unavailable>) at vk_rasterizer.cpp:256
    frame #20: 0x00007ff7e50d9025 eden.exe`void Tegra::HLE_DrawIndexedIndirect::Fallback(this=0x0000026f2af85118, maxwell3d=0x0000026ccbf9eb00, parameters=size=6) at macro.cpp:178
    frame #21: 0x00007ff7e50d8f21 eden.exe`void Tegra::HLE_DrawIndexedIndirect::Execute(this=0x0000026f2af85118, maxwell3d=0x0000026ccbf9eb00, parameters=size=6) at macro.cpp:129
    frame #22: 0x00007ff7e50db607 eden.exe`Tegra::MacroEngine::Execute::<lambda_0>::operator(this=0x00000025e28fde70, acm= Active Type = Tegra::HLE_DrawIndexedIndirect ) at macro.cpp:1362
    frame #23: 0x00007ff7e50dada0 eden.exe`void Tegra::MacroEngine::Execute(this=0x0000026ccbfaa020, maxwell3d=0x0000026ccbf9eb00, method=418, parameters=<unavailable>) at macro.cpp:1392
    frame #24: 0x00007ff7e4ef062b eden.exe`void Tegra::Engines::Maxwell3D::CallMacroMethod(this=0x0000026ccbf9eb00, method=<unavailable>, parameters=<unavailable>) at maxwell_3d.cpp:390
    frame #25: 0x00007ff7e4ef04be eden.exe`void Tegra::Engines::Maxwell3D::ProcessMacro(this=0x0000026ccbf9eb00, method=<unavailable>, base_start=<unavailable>, amount=5, is_last_call=<unavailable>) at maxwell_3d.cpp:223
    frame #26: 0x00007ff7e4ef1673 eden.exe`void Tegra::Engines::Maxwell3D::CallMultiMethod(this=<unavailable>, method=<unavailable>, base_start=0x000001ea398e22f4, amount=<unavailable>, methods_pending=5) at maxwell_3d.cpp:419
    frame #27: 0x00007ff7e4ef535a eden.exe`void Tegra::DmaPusher::CallMultiMethod(this=<unavailable>, base_start=0x000001ea398e22f4, num_methods=<unavailable>) const at dma_pusher.cpp:201
    frame #28: 0x00007ff7e4ef5023 eden.exe`void Tegra::DmaPusher::ProcessCommands(this=0x0000026ccbfba698, commands=size=36) at dma_pusher.cpp:120
    frame #29: 0x00007ff7e4ef4ced eden.exe`bool Tegra::DmaPusher::Step(this=0x0000026ccbfba698) at dma_pusher.cpp:88
    frame #30: 0x00007ff7e4ef49f8 eden.exe`void Tegra::DmaPusher::DispatchCalls(this=0x0000026ccbfba698) at dma_pusher.cpp:40
    frame #31: 0x00007ff7e4ede797 eden.exe`void Tegra::Control::Scheduler::Push(this=<unavailable>, channel=-493895072, entries=0x00000025e28fe2e0) at scheduler.cpp:31
    frame #32: 0x00007ff7e4eedc7b eden.exe`VideoCommon::GPUThread::ThreadManager::StartThread::<lambda_0>::operator(this=<unavailable>, stop_token=stop_token @ 0x00000025e28ffb40) at gpu_thread.cpp:42 [inlined]
    frame #33: 0x00007ff7e4eedae8 eden.exe`std::invoke(_Obj=<unavailable>, _Arg1=0x0000026ccb3edef0) at type_traits:1680 [inlined]
    frame #34: 0x00007ff7e4eedac1 eden.exe`std:🧵:_Invoke<std::tuple<`lambda at D:\a\g\g\eden-source\src\video_core\gpu_thread.cpp:29:27',std::stop_token>,0,1>(_RawVals=0x0000026ccb3edef0) at thread:60
    frame #35: 0x00007ff8e87a37b0 ucrtbase.dll`wcsrchr + 336
    ```

Signed-off-by: lizzie <lizzie@eden-emu.dev>

Co-authored-by: CamilleLaVey <camillelavey99@gmail.com>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4115
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
2026-06-30 04:33:30 +02:00
..
cpm [cmake] Update CPMUtil (#4123) 2026-06-26 02:22:04 +02:00
maxwell-disas [tools] add separate maxwell disassembler, ir dumper, and spirv translator (#3453) 2026-05-24 01:05:07 +02:00
maxwell-ir [vk] Clamp dynamic descriptors based on device limits (#4115) 2026-06-30 04:33:30 +02:00
maxwell-spirv [vk] Clamp dynamic descriptors based on device limits (#4115) 2026-06-30 04:33:30 +02:00
translations [tools] refactor, use #!/bin/sh, update license files (#3998) 2026-05-22 21:15:31 +02:00
windows [tools] refactor, use #!/bin/sh, update license files (#3998) 2026-05-22 21:15:31 +02:00
clang-format.sh [tools] refactor, use #!/bin/sh, update license files (#3998) 2026-05-22 21:15:31 +02:00
cpm-fetch-all.sh [cmake, docs, tools] update CPMUtil (#3183) 2025-12-31 17:16:46 +01:00
cpmutil.sh [cmake] Update CPMUtil (#4123) 2026-06-26 02:22:04 +02:00
cpp-lint.sh [*] basic in-house cpp linting (#4039) 2026-06-04 05:49:07 +02:00
dtrace-tool.pl [tools] refactor, use #!/bin/sh, update license files (#3998) 2026-05-22 21:15:31 +02:00
fuzzsettings.cpp [qt] fix various crashes due to invalid/corrupted/outdated settings (#4070) 2026-06-14 20:48:24 +02:00
fuzzsettings.sh [qt] fix various crashes due to invalid/corrupted/outdated settings (#4070) 2026-06-14 20:48:24 +02:00
gendynarm.cpp [dynarmic] cleanup duplicate code and reimpls of std::* bit stuff (#4017) 2026-05-31 04:18:12 +02:00
generate_converters.py [tools, hle/kernel] generate condensed version of svc.cpp; move svc_generator.py and generate_converters.py to tools (#2791) 2025-11-07 17:00:53 +01:00
lanczos-gen.pl [tools] refactor, use #!/bin/sh, update license files (#3998) 2026-05-22 21:15:31 +02:00
llvmpipe-run.sh [tools] refactor, use #!/bin/sh, update license files (#3998) 2026-05-22 21:15:31 +02:00
optimize-assets.sh [tools] refactor, use #!/bin/sh, update license files (#3998) 2026-05-22 21:15:31 +02:00
README.md [qt] fix various crashes due to invalid/corrupted/outdated settings (#4070) 2026-06-14 20:48:24 +02:00
shellcheck.sh [cmake, tools, docs] Update CPMUtil (#2790) 2025-10-20 03:43:15 +02:00
stale-translations.sh [tools] refactor, use #!/bin/sh, update license files (#3998) 2026-05-22 21:15:31 +02:00
svc_generator.py [tools] refactor, use #!/bin/sh, update license files (#3998) 2026-05-22 21:15:31 +02:00
unused-strings.sh [tools] refactor, use #!/bin/sh, update license files (#3998) 2026-05-22 21:15:31 +02:00
update-icons.sh [dist] New 2026 Saint Patrick's icon; drop named variants (#3617) 2026-02-23 19:54:48 +01:00
VectorDrawable2Svg.py [android] Android 7.0 support (#2654) 2025-10-14 20:47:17 +02:00

Tools

Tools for Eden and other subprojects. When adding new scripts please use #!/bin/sh -e or #!/usr/bin/env <interpreter> (for .py, .rb, or .perl). Keep scripts POSIX compliant (i.e not require hard bash to run, just plain old sh).

Third-Party

Binaries

  • maxwell-spirv: Converts Maxwell shaders (dumped from .ash files) into SPIR-V code (emitted into STDOUT).
  • maxwell-disas: Dumb raw Maxwell dissasembler.
  • maxwell-ir: Dump generated IR of Maxwell shaders.

Scripts

  • generate_converters.py: Generates converters for given formats of textures (C++ helper).
  • svc_generator.py: Generates the files src/core/hle/kernel/svc.cpp and src/core/hle/kernel/svc.h based off prototypes.
  • shellcheck.sh: Ensure POSIX compliance (and syntax sanity) for all tools in this directory and subdirectories.
  • llvmpipe-run.sh: Sets environment variables needed to run any command (or Eden) with llvmpipe.
  • optimize-assets.sh: Optimizes PNG assets with OptiPng.
  • update-cpm.sh: Updates CPM.cmake to the latest version.
  • update-icons.sh: Rebuild all icons (macOS, Windows, bitmaps) based on the master SVG file (dist/dev.eden_emu.eden.svg)
    • Also optimizes the master SVG
    • Requires: png2icns (libicns), ImageMagick, svgo
  • dtrace-tool.sh
  • lanczos-gen.pl: Generates constants for the Lanczos filter.
  • clang-format.sh: Runs clang-format on the entire codebase.
    • Requires: clang
  • find-unused-strings.sh: Find any unused strings in the Android app (XML -> Kotlin).
  • cpp-lint.sh: Homemade dumb C++ linter.
  • fuzzsettings.cpp: Fuzz settings files.

Android

It's recommended to run these scritps after almost any Android change, as they are relatively fast and important both for APK bloat and CI.

  • unused-strings.sh: Finds unused strings in strings.xml files.
  • stale-translations.sh: Finds translated strings that aren't present in the source strings.xml file.

Translations