The work was performed by collaboration of TheForge and Google. I am merely splitting it up into smaller PRs and cleaning it up. This is the most "risky" PR so far because the previous ones have been miscellaneous stuff aimed at either [improve debugging](https://github.com/godotengine/godot/pull/90993) (e.g. device lost), [improve Android experience](https://github.com/godotengine/godot/pull/96439) (add Swappy for better Frame Pacing + Pre-Transformed Swapchains for slightly better performance), or harmless [ASTC improvements](https://github.com/godotengine/godot/pull/96045) (better performance by simply toggling a feature when available). However this PR contains larger modifications aimed at improving performance or reducing memory fragmentation. With greater modifications, come greater risks of bugs or breakage. Changes introduced by this PR: TBDR GPUs (e.g. most of Android + iOS + M1 Apple) support rendering to Render Targets that are not backed by actual GPU memory (everything stays in cache). This works as long as load action isn't `LOAD`, and store action must be `DONT_CARE`. This saves VRAM (it also makes painfully obvious when a mistake introduces a performance regression). Of particular usefulness is when doing MSAA and keeping the raw MSAA content is not necessary. Some GPUs get faster when the sampler settings are hard-coded into the GLSL shaders (instead of being dynamically bound at runtime). This required changes to the GLSL shaders, PSO creation routines, Descriptor creation routines, and Descriptor binding routines. - `bool immutable_samplers_enabled = true` Setting it to false enforces the old behavior. Useful for debugging bugs and regressions. Immutable samplers requires that the samplers stay... immutable, hence this boolean is useful if the promise gets broken. We might want to turn this into a `GLOBAL_DEF` setting. Instead of creating dozen/hundreds/thousands of `VkDescriptorSet` every frame that need to be freed individually when they are no longer needed, they all get freed at once by resetting the whole pool. Once the whole pool is no longer in use by the GPU, it gets reset and its memory recycled. Descriptor sets that are created to be kept around for longer or forever (i.e. not created and freed within the same frame) **must not** use linear pools. There may be more than one pool per frame. How many pools per frame Godot ends up with depends on its capacity, and that is controlled by `rendering/rendering_device/vulkan/max_descriptors_per_pool`. - **Possible improvement for later:** It should be possible for Godot to adapt to how many descriptors per pool are needed on a per-key basis (i.e. grow their capacity like `std::vector` does) after rendering a few frames; which would be better than the current solution of having a single global value for all pools (`max_descriptors_per_pool`) that the user needs to tweak. - `bool linear_descriptor_pools_enabled = true` Setting it to false enforces the old behavior. Useful for debugging bugs and regressions. Setting it to false is required when workarounding driver bugs (e.g. Adreno 730). A ridiculous optimization. Ridiculous because the original code should've done this in the first place. Previously Godot was doing the following: 1. Create a command buffer **pool**. One per frame. 2. Create multiple command buffers from the pool in point 1. 3. Call `vkBeginCommandBuffer` on the cmd buffer in point 2. This resets the cmd buffer because Godot requests the `VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT` flag. 4. Add commands to the cmd buffers from point 2. 5. Submit those commands. 6. On frame N + 2, recycle the buffer pool and cmd buffers from pt 1 & 2, and repeat from step 3. The problem here is that step 3 resets each command buffer individually. Initially Godot used to have 1 cmd buffer per pool, thus the impact is very low. But not anymore (specially with Adreno workarounds to force splitting compute dispatches into a new cmd buffer, more on this later). However Godot keeps around a very low amount of command buffers per frame. The recommended method is to reset the whole pool, to reset all cmd buffers at once. Hence the new steps would be: 1. Create a command buffer **pool**. One per frame. 2. Create multiple command buffers from the pool in point 1. 3. Call `vkBeginCommandBuffer` on the cmd buffer in point 2, which is already reset/empty (see step 6). 4. Add commands to the cmd buffers from point 2. 5. Submit those commands. 6. On frame N + 2, recycle the buffer pool and cmd buffers from pt 1 & 2, call `vkResetCommandPool` and repeat from step 3. **Possible issues:** @dariosamo added `transfer_worker` which creates a command buffer pool: ```cpp transfer_worker->command_pool = driver->command_pool_create(transfer_queue_family, RDD::COMMAND_BUFFER_TYPE_PRIMARY); ``` As expected, validation was complaining that command buffers were being reused without being reset (that's good, we now know Validation Layers will warn us of wrong use). I fixed it by adding: ```cpp void RenderingDevice::_wait_for_transfer_worker(TransferWorker *p_transfer_worker) { driver->fence_wait(p_transfer_worker->command_fence); driver->command_pool_reset(p_transfer_worker->command_pool); // ! New line ! ``` **Secondary cmd buffers are subject to the same issue but I didn't alter them. I talked this with Dario and he is aware of this.** Secondary cmd buffers are currently disabled due to other issues (it's disabled on master). - `bool RenderingDeviceCommons::command_pool_reset_enabled` Setting it to false enforces the old behavior. Useful for debugging bugs and regressions. There's no other reason for this boolean. Possibly once it becomes well tested, the boolean could be removed entirely. Adds `command_bind_render_uniform_sets` and `add_draw_list_bind_uniform_sets` (+ compute variants). It performs the same as `add_draw_list_bind_uniform_set` (notice singular vs plural), but on multiple consecutive uniform sets, thus reducing graph and draw call overhead. - `bool descriptor_set_batching = true;` Setting it to false enforces the old behavior. Useful for debugging bugs and regressions. There's no other reason for this boolean. Possibly once it becomes well tested, the boolean could be removed entirely. Godot currently does the following: 1. Fill the entire cmd buffer with commands. 2. `submit()` - Wait with a semaphore for the swapchain. - Trigger a semaphore to indicate when we're done (so the swapchain can submit). 3. `present()` The optimization opportunity here is that 95% of Godot's rendering is done offscreen. Then a fullscreen pass copies everything to the swapchain. Godot doesn't practically render directly to the swapchain. The problem with this is that the GPU has to wait for the swapchain to be released **to start anything**, when we could start *much earlier*. Only the final blit pass must wait for the swapchain. TheForge changed it to the following (more complicated, I'm simplifying the idea): 1. Fill the entire cmd buffer with commands. 2. In `screen_prepare_for_drawing` do `submit()` - There are no semaphore waits for the swapchain. - Trigger a semaphore to indicate when we're done. 3. Fill a new cmd buffer that only does the final blit to the swapchain. 4. `submit()` - Wait with a semaphore for the submit() from step 2. - Wait with a semaphore for the swapchain (so the swapchain can submit). - Trigger a semaphore to indicate when we're done (so the swapchain can submit). 5. `present()` Dario discovered this problem independently while working on a different platform. **However TheForge's solution had to be rewritten from scratch:** The complexity to achieve the solution was high and quite difficult to maintain with the way Godot works now (after Übershaders PR). But on the other hand, re-implementing the solution became much simpler because Dario already had to do something similar: To fix an Adreno 730 driver bug, he had to implement splitting command buffers. **This is exactly what we need!**. Thus it was re-written using this existing functionality for a new purpose. To achieve this, I added a new argument, `bool p_split_cmd_buffer`, to `RenderingDeviceGraph::add_draw_list_begin`, which is only set to true by `RenderingDevice::draw_list_begin_for_screen`. The graph will split the draw list into its own command buffer. - `bool split_swapchain_into_its_own_cmd_buffer = true;` Setting it to false enforces the old behavior. This might be necessary for consoles which follow an alternate solution to the same problem. If not, then we should consider removing it. PR #90993 added `shader_destroy_modules()` but it was not actually in use. This PR adds several places where `shader_destroy_modules()` is called after initialization to free up memory of SPIR-V structures that are no longer needed.
Third party libraries
Please keep categories (## level) listed alphabetically and matching their
respective folder names. Use two empty lines to separate categories for
readability.
amd-fsr
- Upstream: https://github.com/GPUOpen-Effects/FidelityFX-FSR
- Version: 1.0.2 (a21ffb8f6c13233ba336352bdff293894c706575, 2021)
- License: MIT
Files extracted from upstream source:
ffx_a.handffx_fsr1.hfromffx-fsrlicense.txt
amd-fsr2
- Upstream: https://github.com/GPUOpen-Effects/FidelityFX-FSR2
- Version: 2.2.1 (1680d1edd5c034f88ebbbb793d8b88f8842cf804, 2023)
- License: MIT
Files extracted from upstream source:
ffx_*.cppandffx_*.hfromsrc/ffx-fsr2-apishadersfolder fromsrc/ffx-fsr2-apiwithffx_*.hlslfiles excludedLICENSE.txt
Apply patches to add the new options required by Godot and general compilation fixes.
angle
- Upstream: https://chromium.googlesource.com/angle/angle/
- Version: git (chromium/5907, 430a4f559cbc2bcd5d026e8b36ee46ddd80e9651, 2023)
- License: BSD-3-Clause
Files extracted from upstream source:
include/*LICENSE
astcenc
- Upstream: https://github.com/ARM-software/astc-encoder
- Version: 4.8.0 (0d6c9047c5ad19640e2d60fdb8f11a16675e7938, 2024)
- License: Apache 2.0
Files extracted from upstream source:
astcenc_*andastcenc.hfiles fromSourceLICENSE.txt
basis_universal
- Upstream: https://github.com/BinomialLLC/basis_universal
- Version: 1.50.0 (051ad6d8a64bb95a79e8601c317055fd1782ad3e, 2024)
- License: Apache 2.0
Files extracted from upstream source:
encoder/andtranscoder/folders, with the following files removed fromencoder:jpgd.{cpp,h},3rdparty/{qoi.h,tinydds.h,tinyexr.cpp,tinyexr.h}LICENSE
Applied upstream PR https://github.com/BinomialLLC/basis_universal/pull/344 to
fix build with our own copy of zstd (patch in patches).
betsy
- Upstream: https://github.com/darksylinc/betsy
- Version: git (cc723dcae9a6783ae572f64d12a90d60ef8d631a, 2022)
- License: MIT
Files extracted from upstream source:
bc6h.glsl,bc1.glsl,bc4.glsl,CrossPlatformSettings_piece_all.glslandUavCrossPlatform_piece_all.glsl.LICENSE.md
brotli
- Upstream: https://github.com/google/brotli
- Version: 1.1.0 (ed738e842d2fbdf2d6459e39267a633c4a9b2f5d, 2023)
- License: MIT
Files extracted from upstream source:
common/,dec/andinclude/folders fromc/, minus thedictionary.bin*filesLICENSE
certs
- Upstream: Mozilla, via https://github.com/bagder/ca-bundle
- Version: git (4d3fe6683f651d96be1bbef316b201e9b33b274d, 2024), generated from mozilla-release changeset b8ea2342548b8571e58f9176d9555ccdb5ec199f
- License: MPL 2.0
Files extracted from upstream source:
ca-bundle.crtrenamed toca-certificates.crt
clipper2
- Upstream: https://github.com/AngusJohnson/Clipper2
- Version: 1.4.0 (736ddb0b53d97fd5f65dd3d9bbf8a0993eaf387c, 2024)
- License: BSL 1.0
Files extracted from upstream source:
CPP/Clipper2Lib/folder (in root)LICENSE
Apply the patches in the patches/ folder when syncing on newer upstream
commits.
cvtt
- Upstream: https://github.com/elasota/ConvectionKernels
- Version: git (350416daa4e98f1c17ffc273b134d0120a2ef230, 2022)
- License: MIT
Files extracted from upstream source:
- All
.cppand.hfiles except the foldersMakeTablesandetc2packer LICENSE.txt
Changes related to BC6H packing and unpacking made upstream in
2e4b6b2747
have been removed as they caused massive quality regressions. Apply the patches
in the patches/ folder when syncing on newer upstream commits.
d3d12ma
- Upstream: https://github.com/GPUOpen-LibrariesAndSDKs/D3D12MemoryAllocator
- Version: 2.1.0-development (4d16e802e0b9451c9d3c27cd308928c13b73acd6, 2023)
- License: MIT
Files extracted from upstream source:
src/D3D12MemAlloc.cpp,src/D3D12MemAlloc.natvisinclude/D3D12MemAlloc.hLICENSE.txt,NOTICES.txt
Important: Some files have Godot-made changes for use with MinGW.
They are marked with /* GODOT start */ and /* GODOT end */
comments.
directx_headers
- Upstream: https://github.com/microsoft/DirectX-Headers
- Version: 1.611.1 (48f23952bc08a6dce0727339c07cedbc4797356c, 2023)
- License: MIT
Files extracted from upstream source:
include/directx/*.hinclude/dxguids/*.hLICENSE
Important: Some files have Godot-made changes for use with MinGW.
They are marked with /* GODOT start */ and /* GODOT end */
comments.
doctest
- Upstream: https://github.com/onqtam/doctest
- Version: 2.4.11 (ae7a13539fb71f270b87eb2e874fbac80bc8dda2, 2023)
- License: MIT
Files extracted from upstream source:
doctest/doctest.hasdoctest.hLICENSE.txt
embree
- Upstream: https://github.com/embree/embree
- Version: 4.3.1 (daa8de0e714e18ad5e5c9841b67c1950d9c91c51, 2024)
- License: Apache 2.0
Files extracted from upstream:
- All
.cppfiles listed inmodules/raycast/godot_update_embree.py - All header files in the directories listed in
modules/raycast/godot_update_embree.py - All config files listed in
modules/raycast/godot_update_embree.py LICENSE.txt
The modules/raycast/godot_update_embree.py script can be used to pull the
relevant files from the latest Embree release and apply some automatic changes.
Some changes have been made in order to remove exceptions and fix minor build errors.
They are marked with // -- GODOT start -- and // -- GODOT end --
comments. Apply the patches in the patches/ folder when syncing on newer upstream
commits.
enet
- Upstream: https://github.com/lsalzman/enet
- Version: 1.3.18 (2662c0de09e36f2a2030ccc2c528a3e4c9e8138a, 2024)
- License: MIT
Files extracted from upstream source:
- All
.cfiles in the main directory (exceptunix.candwin32.c) - The
include/enet/folder asenet/(exceptunix.handwin32.h) LICENSEfile
Important: enet.h, host.c, protocol.c have been slightly modified
to be usable by Godot's socket implementation and allow IPv6 and DTLS.
Apply the patches in the patches/ folder when syncing on newer upstream
commits.
Three files (godot.cpp, enet/godot.h, enet/godot_ext.h) have been added to
provide ENet socket implementation using Godot classes.
It is still possible to build against a system wide ENet but doing so will limit its functionality to IPv4 only.
etcpak
- Upstream: https://github.com/wolfpld/etcpak
- Version: git (5380688660a3801aec4b25483366027fe0442d7b, 2024)
- License: BSD-3-Clause
Files extracted from upstream source:
- Only the files relevant for compression (i.e.
Process*.cppand their deps):Dither.{cpp,hpp} ForceInline.hpp Math.hpp ProcessCommon.hpp ProcessRGB.{cpp,hpp} ProcessDxtc.{cpp,hpp} Tables.{cpp,hpp} Vector.hpp AUTHORS.txtandLICENSE.txt
fonts
DroidSans*.woff2:- Upstream: https://android.googlesource.com/platform/frameworks/base/+/master/data/fonts/
- Version: ? (pre-2014 commit when DroidSansJapanese.ttf was obsoleted)
- License: Apache 2.0
JetBrainsMono_Regular.woff2:- Upstream: https://github.com/JetBrains/JetBrainsMono
- Version: 2.304 (cd5227bd1f61dff3bbd6c814ceaf7ffd95e947d9, 2023)
- License: OFL-1.1
NotoSans*.woff2:- Upstream: https://github.com/notofonts/latin-greek-cyrillic
- Version: 2.012 (9ea0c8d37bff0c0067b03777f40aa04f2bf78f99, 2023)
- License: OFL-1.1
NotoSansBengali*.woff2:- Upstream: https://github.com/notofonts/bengali
- Version: 2.003 (020a5701f6fc6a363d5eccbae45e37714c0ad686, 2022)
- License: OFL-1.1
NotoSansDevanagari*.woff2:- Upstream: https://github.com/notofonts/devanagari
- Version: 2.004 (f8f27e49da0ec9e5e38ecf3628671f05b24dd955, 2023)
- License: OFL-1.1
NotoSansGeorgian*.woff2:- Upstream: https://github.com/notofonts/georgian
- Version: 2.002 (243ec9aa1d4ec58cc42120d30faac1a102fbfeb9, 2022)
- License: OFL-1.1
NotoSansHebrew*.woff2:- Upstream: https://github.com/notofonts/hebrew
- Version: 2.003 (caa7ab0614fb5b37cc003d9bf3d7d3e765331110, 2022)
- License: OFL-1.1
NotoSansMalayalam*.woff2:- Upstream: https://github.com/notofonts/malayalam
- Version: 2.104 (0fd65e553a6af3dc1c09ed39dfe8933e01c17b32, 2023)
- License: OFL-1.1
NotoSansOriya*.woff2:- Upstream: https://github.com/notofonts/oriya
- Version: 2.005 (9377f242b247df12d0bf4cecd93b9c4b18036fbd, 2023)
- License: OFL-1.1
NotoSansSinhala*.woff2:- Upstream: https://github.com/notofonts/sinhala
- Version: 2.006 (66e5a2ed9797e575222d6e7c5b3710c7bf68be79, 2022)
- License: OFL-1.1
NotoSansTamil*.woff2:- Upstream: https://github.com/notofonts/tamil
- Version: 2.004 (f34a08d1ae3fa810581f63410296d971bdcd62dc, 2023)
- License: OFL-1.1
NotoSansTelugu*.woff2:- Upstream: https://github.com/notofonts/telugu
- Version: 2.004 (68a6a8170cba5b2e9b45029ef36994961e8f614c, 2023)
- License: OFL-1.1
NotoSansThai*.woff2:- Upstream: https://github.com/notofonts/thai
- Version: 2.001 (09af528011390f35abf15cf86068dae208f512c4, 2022)
- License: OFL-1.1
OpenSans_SemiBold.woff2:- Upstream: https://fonts.google.com/specimen/Open+Sans
- Version: 1.10 (downloaded from Google Fonts in February 2021)
- License: Apache 2.0
Vazirmatn*.woff2:- Upstream: https://github.com/rastikerdar/vazirmatn
- Version: 33.003 (83629f877e8f084cc07b47030b5d3a0ff06c76ec, 2022)
- License: OFL-1.1
All fonts are converted from the unhinted .ttf sources using the
https://github.com/google/woff2 tool.
Use UI font variant if available, because it has tight vertical metrics and good for UI.
freetype
- Upstream: https://www.freetype.org
- Version: 2.13.2 (920c5502cc3ddda88f6c7d85ee834ac611bb11cc, 2023)
- License: FreeType License (BSD-like)
Files extracted from upstream source:
src/folder, minus thedlgandtoolssubfolders- These files can be removed:
.dat,.diff,.mk,.rc,README* - In
src/gzip/, keep onlyftgzip.c
- These files can be removed:
include/folder, minus thedlgsubfolderLICENSE.TXTanddocs/FTL.TXT
glad
- Upstream: https://github.com/Dav1dde/glad
- Version: 2.0.4 (d08b1aa01f8fe57498f04d47b5fa8c48725be877, 2023)
- License: CC0 1.0 and Apache 2.0
Files extracted from upstream source:
LICENSE
Files generated from upstream web instance:
EGL/eglplatform.hKHR/khrplatform.hegl.cglad/egl.hgl.cglad/gl.hglx.cglad/glx.h
See the permalinks in glad/gl.h and glad/glx.h to regenrate the files with
a new version of the web instance.
Some changes have been made in order to allow loading OpenGL and OpenGLES APIs at the same time.
See the patches in the patches directory.
glslang
- Upstream: https://github.com/KhronosGroup/glslang
- Version: vulkan-sdk-1.3.283.0 (e8dd0b6903b34f1879520b444634c75ea2deedf5, 2024)
- License: glslang
Version should be kept in sync with the one of the used Vulkan SDK (see vulkan
section).
Files extracted from upstream source:
glslang/folder (except theglslang/HLSLandglslang/ExtensionHeaderssubfolders),SPIRV/folder- Remove C interface code:
CInterface/folders, files matching"*_c[_\.]*"
- Remove C interface code:
- Run
cmake . && makeand copy generatedinclude/glslang/build_info.htoglslang/build_info.h LICENSE.txt- Unnecessary files like
CMakeLists.txtorupdateGrammarremoved
graphite
- Upstream: https://github.com/silnrsi/graphite
- Version: 1.3.14 (27572742003b93dc53dc02c01c237b72c6c25f54, 2022)
- License: MIT
Files extracted from upstream source:
- The
includefolder - The
srcfolder (minusCMakeLists.txtandfiles.mk) COPYING
harfbuzz
- Upstream: https://github.com/harfbuzz/harfbuzz
- Version: 10.0.1 (a1d9bfe62818ef0fa9cf63b6e6d51436b1c93cbc, 2024)
- License: MIT
Files extracted from upstream source:
AUTHORS,COPYING,THANKS- From the
srcfolder, recursively:- All the
.cc,.h,.hhfiles - Except
main.cc,harfbuzz*.cc,failing-alloc.c,test*.cc,hb-wasm*.*
- All the
icu4c
- Upstream: https://github.com/unicode-org/icu
- Version: 76.1 (8eca245c7484ac6cc179e3e5f7c1ea7680810f39, 2024)
- License: Unicode
Files extracted from upstream source:
- The
commonfolder scriptset.*,ucln_in.*,uspoof.cpp"anduspoof_impl.cppfrom thei18nfolderuspoof.hfrom thei18n/unicodefolderLICENSE
Files generated from upstream source:
- The
icudt76l.datbuilt with the providedgodot_data.jsonconfig file (see https://github.com/unicode-org/icu/blob/master/docs/userguide/icu_data/buildtool.md for instructions).
- Download and extract both
icu4c-{version}-src.tgzandicu4c-{version}-data.zip(replacedatasubfolder from the main source archive) - Build ICU with default options:
./runConfigureICU {PLATFORM} && make - Reconfigure ICU with custom data config:
ICU_DATA_FILTER_FILE={GODOT_SOURCE}/thirdparty/icu4c/godot_data.json ./runConfigureICU {PLATFORM} --with-data-packaging=common - Delete
data/outfolder and rebuild data:cd data && rm -rf ./out && make - Copy
source/data/out/icudt76l.datto the{GODOT_SOURCE}/thirdparty/icu4c/icudt76l.dat
jpeg-compressor
- Upstream: https://github.com/richgel999/jpeg-compressor
- Version: 2.00 (aeb7d3b463aa8228b87a28013c15ee50a7e6fcf3, 2020)
- License: Public domain or MIT
Files extracted from upstream source:
jpgd*.{c,h}jpge*.{c,h}
libbacktrace
- Upstream: https://github.com/ianlancetaylor/libbacktrace
- Version: git (4d2dd0b172f2c9192f83ba93425f868f2a13c553, 2022)
- License: BSD-3-Clause
Files extracted from upstream source:
*.{c,h}files for Windows platformLICENSE
libktx
- Upstream: https://github.com/KhronosGroup/KTX-Software
- Version: 4.3.2 (91ace88675ac59a97e55d0378a6602a9ae6b98bd, 2024)
- License: Apache-2.0
Files extracted from upstream source:
LICENSE.mdinclude/lib/dfdutils/LICENSE.adocasLICENSE.dfdutils.adoc(in root)lib/dfdutils/LICENSES/Apache-2.0.txtasApache-2.0.txt(in root)lib/dfdutils/{KHR/,dfd.h,colourspaces.c,createdfd.c,interpretdfd.c,printdfd.c,queries.c,dfd2vk.inl,vk2dfd.*}lib/{basis_sgd.h,formatsize.h,gl_format.h,ktxint.h,uthash.h,vk_format.h,vkformat_enum.h,checkheader.c,swap.c,hashlist.c,vkformat_check.c,vkformat_typesize.c,basis_transcode.cpp,miniz_wrapper.cpp,filestream.*,memstream.*,texture*}other_include/KHR/utils/unused.h
Some Godot-specific changes are applied via patches included in the patches folder.
libogg
- Upstream: https://www.xiph.org/ogg
- Version: 1.3.5 (e1774cd77f471443541596e09078e78fdc342e4f, 2021)
- License: BSD-3-Clause
Files extracted from upstream source:
src/*.{c,h}include/ogg/*.hinogg/(runconfigureto generateconfig_types.h)COPYING
libpng
- Upstream: http://libpng.org/pub/png/libpng.html
- Version: 1.6.43 (ed217e3e601d8e462f7fd1e04bed43ac42212429, 2024)
- License: libpng/zlib
Files extracted from upstream source:
- All
.cand.hfiles of the main directory, apart fromexample.candpngtest.c arm/,intel/andpowerpc/foldersscripts/pnglibconf.h.prebuiltaspnglibconf.hLICENSE
libtheora
- Upstream: https://www.theora.org
- Version: git (7180717276af1ebc7da15c83162d6c5d6203aabf, 2020)
- License: BSD-3-Clause
Files extracted from upstream source:
- All
.cand.hfiles inlib/, exceptarm/andc64x/folders - All
.hfiles ininclude/theora/astheora/ COPYINGandLICENSE
libvorbis
- Upstream: https://www.xiph.org/vorbis
- Version: 1.3.7 (0657aee69dec8508a0011f47f3b69d7538e9d262, 2020)
- License: BSD-3-Clause
Files extracted from upstream source:
lib/*except from:lookups.pl,Makefile.*include/vorbis/*.hasvorbis/COPYING
libwebp
- Upstream: https://chromium.googlesource.com/webm/libwebp/
- Version: 1.4.0 (845d5476a866141ba35ac133f856fa62f0b7445f, 2024)
- License: BSD-3-Clause
Files extracted from upstream source:
src/andsharpyuv/except from.am,.rcand.infilesAUTHORS,COPYING,PATENTS
Patch godot-node-debug-fix.patch workarounds shadowing of Godot's Node class
in the MSVC debugger.
manifold
- Upstream: https://github.com/elalish/manifold
- Version: master (36035428bc32302a9d7c9ee1ecc833fb8394a2a3, 2024)
- License: Apache 2.0
File extracted from upstream source:
src/AUTHORS,LICENSE
mbedtls
- Upstream: https://github.com/Mbed-TLS/mbedtls
- Version: 3.6.1 (71c569d44bf3a8bd53d874c81ee8ac644dd6e9e3, 2024)
- License: Apache 2.0
File extracted from upstream release tarball:
- All
.hfrominclude/mbedtls/tothirdparty/mbedtls/include/mbedtls/and all.hfrominclude/psa/tothirdparty/mbedtls/include/psa/ - All
.cand.hfromlibrary/tothirdparty/mbedtls/library/ - From
library/tothirdparty/mbedtls/library/:- All
.cand.hfiles - Except
bignum_mod.c,block_cipher.c,ecp_curves_new.c,lmots.c,lms.c
- All
- The
LICENSEfile (edited to keep only the Apache 2.0 variant) - Applied the patch
msvc-redeclaration-bug.diffto fix a compilation error with some MSVC versions - Added 2 files
godot_core_mbedtls_platform.candgodot_core_mbedtls_config.hproviding configuration for light bundling with core - Added the file
godot_module_mbedtls_config.hto customize the build configuration when bundling the full library
meshoptimizer
- Upstream: https://github.com/zeux/meshoptimizer
- Version: 0.22 (4affad044571506a5724c9a6f15424f43e86f731, 2024)
- License: MIT
Files extracted from upstream repository:
- All files in
src/ LICENSE.md
A patch is included to modify the simplifier to report only distance error metrics instead of a combination of distance and attribute errors.
mingw-std-threads
- Upstream: https://github.com/meganz/mingw-std-threads
- Version: git (c931bac289dd431f1dd30fc4a5d1a7be36668073, 2023)
- License: BSD-2-clause
Files extracted from upstream repository:
LICENSEmingw.condition_variable.hmingw.invoke.hmingw.mutex.hmingw.shared_mutex.hmingw.thread.h
Once copied, apply godot.patch (needed because Godot is built without exceptions
and to avoid std:: replacements leak in Clang builds).
minimp3
- Upstream: https://github.com/lieff/minimp3
- Version: git (afb604c06bc8beb145fecd42c0ceb5bda8795144, 2021)
- License: CC0 1.0
Files extracted from upstream repository:
minimp3.hminimp3_ex.hLICENSE
Some changes have been made in order to fix Windows on ARM build errors, and
to solve some MSVC warnings. See the patches in the patches directory.
miniupnpc
- Upstream: https://github.com/miniupnp/miniupnp
- Version: 2.2.8 (b55145ec095652289a59c33603f3abafee898273, 2024)
- License: BSD-3-Clause
Files extracted from upstream source:
miniupnpc/src/assrc/miniupnpc/include/asinclude/miniupnpc/- Remove the following test or sample files:
listdevices.c,minihttptestserver.c,miniupnpcmodule.c,upnpc.c,upnperrors.*,test* LICENSE
The only modified file is src/miniupnpcstrings.h, which was created for Godot
(it is usually autogenerated by cmake). Bump the version number for miniupnpc in
that file when upgrading.
minizip
- Upstream: https://www.zlib.net
- Version: 1.3.1 (zlib contrib, 2024)
- License: zlib
Files extracted from the upstream source:
- From
contrib/minizip:{crypt.h,ioapi.{c,h},unzip.{c,h},zip.{c,h}}MiniZip64_info.txt
Important: Some files have Godot-made changes for use in core/io.
They are marked with /* GODOT start */ and /* GODOT end */
comments and a patch is provided in the patches folder.
misc
Collection of single-file libraries used in Godot components.
bcdec.h- Upstream: https://github.com/iOrange/bcdec
- Version: git (3b29f8f44466c7d59852670f82f53905cf627d48, 2024)
- License: MIT
clipper.{cpp,hpp}- Upstream: https://sourceforge.net/projects/polyclipping
- Version: 6.4.2 (2017) + Godot changes (added optional exceptions handling)
- License: BSL-1.0
cubemap_coeffs.h- Upstream: https://research.activision.com/publications/archives/fast-filtering-of-reflection-probes File coeffs_const_8.txt (retrieved April 2020)
- License: MIT
fastlz.{c,h}- Upstream: https://github.com/ariya/FastLZ
- Version: 0.5.0 (4f20f54d46f5a6dd4fae4def134933369b7602d2, 2020)
- License: MIT
ifaddrs-android.{cc,h}- Upstream: https://chromium.googlesource.com/external/webrtc/stable/talk/+/master/base/ifaddrs-android.h
- Version: git (5976650443d68ccfadf1dea24999ee459dd2819d, 2013)
- License: BSD-3-Clause
mikktspace.{c,h}- Upstream: https://archive.blender.org/wiki/index.php/Dev:Shading/Tangent_Space_Normal_Maps/
- Version: 1.0 (2011)
- License: zlib
ok_color.h- Upstream: https://github.com/bottosson/bottosson.github.io/blob/master/misc/ok_color.h
- Version: git (d69831edb90ffdcd08b7e64da3c5405acd48ad2c, 2022)
- License: MIT
- Modifications: License included in header.
ok_color_shader.h- https://www.shadertoy.com/view/7sK3D1
- Version: 2021-09-13
- License: MIT
pcg.{cpp,h}- Upstream: http://www.pcg-random.org
- Version: minimal C implementation, http://www.pcg-random.org/download.html
- License: Apache 2.0
polypartition.{cpp,h}- Upstream: https://github.com/ivanfratric/polypartition (
src/polypartition.{cpp,h}) - Version: git (7bdffb428b2b19ad1c43aa44c714dcc104177e84, 2021)
- Modifications: Change from STL to Godot types (see provided patch).
- License: MIT
- Upstream: https://github.com/ivanfratric/polypartition (
qoa.h- Upstream: https://github.com/phoboslab/qoa
- Version: git (a2d927f8ce78a85e903676a33e0f956e53b89f7d, 2024)
- Modifications: Added implementation through
qoa.c. - License: MIT
r128.{c,h}- Upstream: https://github.com/fahickman/r128
- Version: git (6fc177671c47640d5bb69af10cf4ee91050015a1, 2023)
- License: Public Domain or Unlicense
smaz.{c,h}- Upstream: https://github.com/antirez/smaz
- Version: git (2f625846a775501fb69456567409a8b12f10ea25, 2012)
- License: BSD-3-Clause
- Modifications: use
const char*instead ofchar*for input string
smolv.{cpp,h}- Upstream: https://github.com/aras-p/smol-v
- Version: git (9dd54c379ac29fa148cb1b829bb939ba7381d8f4, 2024)
- License: Public Domain or MIT
stb_rect_pack.h- Upstream: https://github.com/nothings/stb
- Version: 1.01 (af1a5bc352164740c1cc1354942b1c6b72eacb8a, 2021)
- License: Public Domain or Unlicense or MIT
yuv2rgb.h- Upstream: http://wss.co.uk/pinknoise/yuv2rgb/ (to check)
- Version: ?
- License: BSD
msdfgen
- Upstream: https://github.com/Chlumsky/msdfgen
- Version: 1.11 (f12d7ca00091a632a289865b85c3f2e0bfc6542d, 2023)
- License: MIT
Files extracted from the upstream source:
msdfgen.h- Files in
core/folder LICENSE.txt
noise
- Upstream: https://github.com/Auburn/FastNoiseLite
- Version: 1.1.0 (f7af54b56518aa659e1cf9fb103c0b6e36a833d9, 2023)
- License: MIT
Files extracted from the upstream source:
FastNoiseLite.hLICENSE
Some custom changes were made to fix compiler warnings, and can be re-applied with the provided patch.
nvapi
-
Upstream: http://download.nvidia.com/XFree86/nvapi-open-source-sdk
-
Version: R525
-
License: MIT
-
nvapi_minimal.hwas created by usingnvapi.hfrom upstream and removing unnecessary code.
openxr
- Upstream: https://github.com/KhronosGroup/OpenXR-SDK
- Version: 1.1.41 (7d1c0961351bac61fd7bb72d402649d5ac3f2935, 2024)
- License: Apache 2.0
Files extracted from upstream source:
include/src/common/src/loader/src/*.{c,h}src/external/jsoncpp/include/src/external/jsoncpp/src/lib_json/src/external/jsoncpp/{AUTHORS,LICENSE}LICENSEandCOPYING.adoc
Exclude:
src/external/android-jni-wrappersandsrc/external/jnipp(not used yet)- Obsolete
src/xr_generated_dispatch_table.{c,h} - All CMake stuff:
cmake/,CMakeLists.txtand*.cmake - All Gradle stuff:
*gradle*,AndroidManifest.xml - All following files (and their
.licensefiles):*.{def,expsym,in,json,map,pom,rc,txt} - All dotfiles
pcre2
- Upstream: http://www.pcre.org
- Version: 10.43 (3864abdb713f78831dd12d898ab31bbb0fa630b6, 2024)
- License: BSD-3-Clause
Files extracted from upstream source:
- Files listed in the file
NON-AUTOTOOLS-BUILDsteps 1-4 - All
.hfiles insrc/apart frompcre2posix.h src/pcre2_jit_match.csrc/pcre2_jit_misc.csrc/pcre2_ucptables.csrc/sljit/AUTHORSandLICENCE
recastnavigation
- Upstream: https://github.com/recastnavigation/recastnavigation
- Version: 1.6.0 (6dc1667f580357e8a2154c28b7867bea7e8ad3a7, 2023)
- License: zlib
Files extracted from upstream source:
Recast/folder withoutCMakeLists.txtLicense.txt
rvo2
For 2D in rvo2_2d folder
- Upstream: https://github.com/snape/RVO2
- Version: git (f7c5380235f6c9ac8d19cbf71fc94e2d4758b0a3, 2021)
- License: Apache 2.0
For 3D in rvo2_3d folder
- Upstream: https://github.com/snape/RVO2-3D
- Version: git (bfc048670a4e85066e86a1f923d8ea92e3add3b2, 2021)
- License: Apache 2.0
Files extracted from upstream source:
- All
.cppand.hfiles in thesrc/folder except forExport.handRVO.h LICENSE
Important: Nearly all files have Godot-made changes and renames to make the 2D and 3D rvo libraries compatible with each other and solve conflicts and also enrich the feature set originally proposed by these libraries and better integrate them with Godot.
spirv-cross
- Upstream: https://github.com/KhronosGroup/SPIRV-Cross
- Version: vulkan-sdk-1.3.290.0 (5d127b917f080c6f052553c47170ec0ba702e54f, 2024)
- License: Apache 2.0
Files extracted from upstream source:
- All
.cpp,.hppand.hfiles, minusmain.cpp,spirv_cross_c.*,spirv_hlsl.*,spirv_cpp.* include/folderLICENSEandLICENSES/folder, minusCC-BY-4.0.txt
Versions of this SDK do not have to match the vulkan section, as this SDK is required
to generate Metal source from Vulkan SPIR-V.
spirv-reflect
- Upstream: https://github.com/KhronosGroup/SPIRV-Reflect
- Version: vulkan-sdk-1.3.283.0 (ee5b57fba6a986381f998567761bbc064428e645, 2024)
- License: Apache 2.0
Version should be kept in sync with the one of the used Vulkan SDK (see vulkan
section).
Files extracted from upstream source:
spirv_reflect.h,spirv_reflect.cinclude/folderLICENSE
Some downstream changes have been made and are identified by
// -- GODOT begin -- and // -- GODOT end -- comments.
They can be reapplied using the patches included in the patches
folder, in order.
tinyexr
- Upstream: https://github.com/syoyo/tinyexr
- Version: 1.0.8 (6c8742cc8145c8f629698cd8248900990946d6b1, 2024)
- License: BSD-3-Clause
Files extracted from upstream source:
tinyexr.{cc,h}
The tinyexr.cc file was modified to include zlib.h which we provide,
instead of miniz.h as an external dependency.
thorvg
- Upstream: https://github.com/thorvg/thorvg
- Version: 0.15.5 (89ab573acb253567975b2494069c7ee9abc9267c, 2024)
- License: MIT
Files extracted from upstream source:
See thorvg/update-thorvg.sh for extraction instructions. Set the version
number and run the script.
ufbx
- Upstream: https://github.com/ufbx/ufbx
- Version: 0.15.0 (24eea6f40929fe0f679b7950def378edb003afdb, 2024)
- License: MIT
Files extracted from upstream source:
ufbx.{c,h}LICENSE
vhacd
- Upstream: https://github.com/kmammou/v-hacd
- Version: git (1a49edf29c69039df15286181f2f27e17ceb9aef, 2020)
- License: BSD-3-Clause
Files extracted from upstream source:
- From
src/VHACD_Lib/:inc,publicandsrc LICENSE
Some downstream changes have been made and are identified by
// -- GODOT start -- and // -- GODOT end -- comments.
They can be reapplied using the patches included in the vhacd
folder.
volk
- Upstream: https://github.com/zeux/volk
- Version: vulkan-sdk-1.3.283.0 (3a8068a57417940cf2bf9d837a7bb60d015ca2f1, 2024)
- License: MIT
Version should be kept in sync with the one of the used Vulkan SDK (see vulkan
section).
Files extracted from upstream source:
volk.h,volk.cLICENSE.md
vulkan
- Upstream: https://github.com/KhronosGroup/Vulkan-Headers
- Version: vulkan-sdk-1.3.283.0 (eaa319dade959cb61ed2229c8ea42e307cc8f8b3, 2024)
- License: Apache 2.0
Unless there is a specific reason to package a more recent version, please stick to tagged SDK releases. All Vulkan libraries and headers should be kept in sync so:
- Update Vulkan SDK components to the matching tag (see "vulkan")
- Update volk (see "volk")
- Update glslang (see "glslang")
- Update spirv-reflect (see "spirv-reflect")
Files extracted from upstream source:
include/LICENSE.md
vk_enum_string_helper.h is taken from the matching Vulkan-Utility-Libraries
SDK release: https://github.com/KhronosGroup/Vulkan-Utility-Libraries/blob/main/include/vulkan/vk_enum_string_helper.h
vk_mem_alloc.h is taken from https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator
Version: 3.1.0 (009ecd192c1289c7529bff248a16cfe896254816, 2024)
vk_mem_alloc.cpp is a Godot file and should be preserved on updates.
Patches in the patches directory should be re-applied after updates.
wayland
- Upstream: https://gitlab.freedesktop.org/wayland/wayland
- Version: 1.22.0 (b2649cb3ee6bd70828a17e50beb16591e6066288, 2023)
- License: MIT
Files extracted from upstream source:
protocol/wayland.xmlCOPYING
wayland-protocols
- Upstream: https://gitlab.freedesktop.org/wayland/wayland-protocols
- Version: 1.33 (54346071a5f211f2c482889f2c8ee3b5ecda63ab, 2024)
- License: MIT
Files extracted from upstream source:
stable/viewporter/READMEstable/viewporter/viewporter.xmlstable/xdg-shell/READMEstable/xdg-shell/xdg-shell.xmlstaging/fractional-scale/READMEstaging/fractional-scale/fractional-scale-v1.xmlstaging/xdg-activation/READMEstaging/xdg-activation/xdg-activation-v1.xmlstaging/xdg-system-bell/xdg-system-bell-v1.xmlunstable/idle-inhibit/READMEunstable/idle-inhibit/idle-inhibit-unstable-v1.xmlunstable/pointer-constraints/READMEunstable/pointer-constraints/pointer-constraints-unstable-v1.xmlunstable/pointer-gestures/READMEunstable/pointer-gestures/pointer-gestures-unstable-v1.xmlunstable/primary-selection/READMEunstable/primary-selection/primary-selection-unstable-v1.xmlunstable/relative-pointer/READMEunstable/relative-pointer/relative-pointer-unstable-v1.xmlunstable/tablet/READMEunstable/tablet/tablet-unstable-v2.xmlunstable/text-input/READMEunstable/text-input/text-input-unstable-v3.xmlunstable/xdg-decoration/READMEunstable/xdg-decoration/xdg-decoration-unstable-v1.xmlunstable/xdg-foreign/READMEunstable/xdg-foreign/xdg-foreign-unstable-v1.xmlCOPYING
wslay
- Upstream: https://github.com/tatsuhiro-t/wslay
- Version: 1.1.1+git (0e7d106ff89ad6638090fd811a9b2e4c5dda8d40, 2022)
- License: MIT
File extracted from upstream release tarball:
- Run
cmake .to generateconfig.handwslayver.hContents might need tweaking for Godot, review diff - All
.cand.hfiles fromlib/ - All
.hinlib/includes/wslay/aswslay/ wslay/wslay.hhas a small Godot addition to fix MSVC build Seepatches/msvcfix.diffCOPYING
xatlas
- Upstream: https://github.com/jpcy/xatlas
- Version: git (f700c7790aaa030e794b52ba7791a05c085faf0c, 2022)
- License: MIT
Files extracted from upstream source:
source/xatlas/xatlas.{cpp,h}LICENSE
zlib
- Upstream: https://www.zlib.net
- Version: 1.3.1 (2024)
- License: zlib
Files extracted from upstream source:
- All
.cand.hfiles, exceptgz*.candinfback.c LICENSE
zstd
- Upstream: https://github.com/facebook/zstd
- Version: 1.5.6 (794ea1b0afca0f020f4e57b6732332231fb23c70, 2024)
- License: BSD-3-Clause
Files extracted from upstream source:
lib/{common/,compress/,decompress/,zstd.h,zstd_errors.h}LICENSE