1
0
Fork 0
Commit Graph

268 Commits

Author SHA1 Message Date
Lukas Tenbrink ccdc5862e9 Add `LocalVector.erase_unordered`, mimicking `erase` but with `remove_at_unordered`, to remove duplicate logic.
`erase_unordered` should be preferred over `erase` where order is not important, for its performance benefits.

Co-authored-by: smix8 <smix8@users.noreply.github.com>
2025-03-31 13:31:53 +02:00
Rémi Verschelde afc7398c2b
Merge pull request #104616 from ibrahn/init-cmd-q-pending-and-gles3-skymatdata
Fix uninitialized member vars in CommandQueueMT and RasterizerSceneGLES3
2025-03-28 17:30:37 +01:00
Rémi Verschelde 4a31936bc1
Merge pull request #104693 from mihe/local-vector-move
Optimize `LocalVector::push_back` for non-trivial objects
2025-03-28 14:34:49 +01:00
Rémi Verschelde 76c30189fa
Merge pull request #103923 from Ivorforce/span-array-init
Add C array constructor to `Span`.
2025-03-28 14:32:14 +01:00
Mikael Hermansson 5c5b9847da Optimize `LocalVector::push_back` for non-trivial objects 2025-03-27 14:22:30 +01:00
Ibrahn Sahir c9352f06f7 Fix uninitialised member vars in CommandQueueMT and RasterizerSceneGLES3 2025-03-25 17:19:16 +00:00
Thaddeus Crews 8f16b86d7e
Core: Include `intrin.h` for MSVC 2025-03-24 15:19:49 -05:00
Thaddeus Crews 4c9086312d
Merge pull request #103698 from AThousandShips/fix_a_hash_map_construct
[Core] Fix `AHashMap` constructors reserving too few elements
2025-03-23 19:03:59 -05:00
Thaddeus Crews f09ee0171a
Style: Begin integrating simple `.clangd` fixes 2025-03-22 13:24:35 -05:00
Rémi Verschelde 64bd03269f
Merge pull request #104286 from Ivorforce/localvector-find
Harmonize `String`, `Vector` and `LocalVector` `find` and `rfind`.
2025-03-19 12:27:27 +01:00
Lukas Tenbrink fde71e0382 Harmonize `String`, `Vector` and `LocalVector` `find` and `rfind`.
Use `Span::find` for `LocalVector::find`, accepting negative `p_from`.
Return `-1` for invalid `p_from` values in `rfind`.
Accept negative values for `p_from` in `find`, starting from the back.
2025-03-18 12:37:36 +01:00
Thaddeus Crews 4320800621
Core: Expand `is_zero_constructible` coverage 2025-03-17 11:45:26 -05:00
Lukas Tenbrink 49e860159a Move `CowData` `find`, `rfind` and `count` to `Span`. 2025-03-16 03:31:11 +01:00
Lukas Tenbrink 78221946cc Add C array constructor to `Span`. [skip ci] 2025-03-12 16:48:16 +01:00
Thaddeus Crews 74907876d3
Merge pull request #103759 from Ivorforce/zero-constructible
Optimize `Array.resize` by using `memset` (through new `is_zero_constructible` type trait)
2025-03-12 10:31:55 -05:00
Lukas Tenbrink 75bc471965 Add `is_zero_constructible` to denote if a type can be semi-trivially constructed with all 0 bytes.
Optimize `CowData` and `LocalVector` resize for zero constructible types.
Mark several compatible types as `is_zero_constructible`.
2025-03-12 09:49:24 +01:00
Lukas Tenbrink 55a7de93c7 Add iteration to `Span`. 2025-03-11 23:46:25 +01:00
Lukas Tenbrink f5cb739a18 Add `Span` conversion to `LocalVector`. 2025-03-10 22:30:39 +01:00
Thaddeus Crews a13067e61f
Merge pull request #97553 from AThousandShips/semantic_equal
[Core] Add `is_same` to types that have float components
2025-03-10 10:01:05 -05:00
Lukas Tenbrink 605b62cd29 Add `Span` struct (replacing `StrRange`). Spans represent read-only access to a contiguous array, resembling `std::span`. 2025-03-09 18:19:51 +01:00
Thaddeus Crews 324512e11c
Style: Replace header guards with `#pragma once` 2025-03-07 17:33:47 -06:00
A Thousand Ships fad8134dca
[Core] Fix `AHashMap` constructors reserving too few elements 2025-03-06 15:28:37 +01:00
Pāvels Nadtočajevs bdb5d522d1 Use atomic flag to prevent `flush_if_pending` from reading unlocked `command_mem`. 2025-02-25 23:26:43 +02:00
A Thousand Ships e825085978
[Core] Add `is_same` to types that have float components
Compares `NaN` as equal.

Added to:
* `AABB`
* `Basis`
* `Color`
* `Plane`
* `Projection`
* `Quaternion`
* `Rect2`
* `Transform2D`
* `Transform3D`
* `Vector2`
* `Vector3`
* `Vector4`

And added as a method in `Math`
2025-02-03 19:25:50 +01:00
Matias N. Goldberg 7b2f1e1d09 Fix union order to simplify empty initializers
This is a followup to PR #101344 (commit
0e06eb80bc).

Some of them were not an issue because Godot was initializing all
members, but they were "fixed" just in case since it could become a
problem in the future.

Valgrind was specifically complaining about HashMapData &
GlobalPipelineData.
2025-01-14 19:05:01 -03:00
Lukas Tenbrink cf145de21e Revert regression (GH-31736) of memory unsafe append_array (append vector to itself). Add comments to prevent future regressions. 2025-01-10 15:30:36 +01:00
Aarni Koskela f134769506 Fix various typos
* Add TODO notes for typos that should be fixed for 5.0

Co-authored-by: Rémi Verschelde <rverschelde@gmail.com>
2025-01-08 14:47:42 +02:00
Rémi Verschelde 1aaf20b1f1
Merge pull request #98488 from RandomShaper/lockless_rid_fetch_pro
Fix `RID_Owner` synchronization
2025-01-06 08:38:14 +01:00
Pedro J. Estébanez de7e4efef8 Fix RID_Owner synchronization 2025-01-03 17:05:36 +01:00
Rémi Verschelde 21e6671740
Merge pull request #100937 from Repiteo/style/clang-format-sync
Style: Enforce `AllowShortFunctionsOnASingleLine`
2025-01-03 00:49:44 +01:00
Rémi Verschelde dd7d36e803
Merge pull request #100770 from hpvb/command-queue-mt
Core: Refactor CommandQueueMT to use vararg templates for performance and maintainability
2025-01-03 00:49:02 +01:00
Thaddeus Crews e06d83860d
Style: Enforce `AllowShortFunctionsOnASingleLine` 2025-01-02 10:09:41 -06:00
HP van Braam cccd2432c3 Refactor CommandQueueMT to use vararg templates
In order to make CommandQueueMT more maintainable this PR changes the
previous macro hell with variadic templates instead. This makes the
class far more explicit and will allow us to more easily change the way
the class functions in the future.

Furthermore this refactoring has allowed for some optimizations. In
particular by using std::forward to delay the decision of decaying the
type to as late as possible we are able to move the data from the
callsite into our Command buffer and later move it to the call.

In practice what this means is that compared to the old version instead
of copying values 3 times, we can now get away with 1 copy, and 1 move
for lvalues, and just 2 moves for rvalues. This saves quite a few
operations in a hot codepath.

We also now test to make sure that the amount of copies and moves are
what we expect. This way we can spot performance regressions in this
code easily.

Somewhat unscientifically, running TPS-demo by pressing enter and not
touching the controls average mspf, repeatable across many runs:

before: 6.467
after : 6.202
2025-01-02 15:35:08 +01:00
Thaddeus Crews 08d4dd7fd8
Merge pull request #100694 from Ivorforce/cowdata-destruct-graciously
Destruct `CowData` more graciously by avoiding accidentally exposing a half-destructed buffer.
2024-12-23 11:15:18 -06:00
Lukas Tenbrink 25cd923ea1 Destruct `CowData` more graciously by avoiding accidentally exposing a half-destructed buffer. This can avoid problems if any of the destructed objects tries to access the data while it's being destructed. 2024-12-21 20:01:03 +01:00
Lukas Tenbrink 0e32f3b957 Make `LocalVector` -> `Vector` automatic conversion safe for non-trivial types. 2024-12-21 10:28:57 +01:00
Thaddeus Crews 151e7fc687
Merge pull request #100477 from Ivorforce/cowdata-move-insert-n-remove
Optimize `CowData` and `LocalVector` functions `.insert` and `.remove_at` by using move semantics.
2024-12-19 20:00:20 -06:00
Thaddeus Crews 1b8a2d930f
Merge pull request #100474 from Ivorforce/cowdata-abstract-realloc
Abstract `CowData`'s reallocations into `_realloc` to consolidate duplicate logic.
2024-12-19 20:00:19 -06:00
Thaddeus Crews bf9ef5f8a5
Merge pull request #100564 from YYF233333/iwyu
Remove unused headers in core
2024-12-19 19:59:55 -06:00
Thaddeus Crews 92615f24e7
Merge pull request #100563 from Ivorforce/move-semantics-list
Add move semantics (constructor, operator=) to `List`.
2024-12-19 19:59:54 -06:00
Thaddeus Crews 0b01f3cc14
Merge pull request #100560 from Ivorforce/localvector-move-semantics
Add `LocalVector` move semantics (constructor and operator=).
2024-12-19 19:59:51 -06:00
Lukas Tenbrink 8483d794ff Abstract `CowData`'s reallocations into `_realloc` to consolidate duplicate logic. 2024-12-19 17:27:16 +01:00
Lukas Tenbrink 3564e7c231 Add `LocalVector` move semantics (constructor and operator=). 2024-12-19 15:05:05 +01:00
Lukas Tenbrink 19992e3284 Add move semantics (constructor, operator=) to `List`. 2024-12-19 15:04:15 +01:00
Thaddeus Crews 361e3b4fe8
Core: Expand `std::initializer_list` support 2024-12-18 18:46:59 -06:00
Yufeng Ying be86ce3103 Apply iwyu suggestion in core. 2024-12-19 00:43:47 +08:00
HP van Braam 240f510fa7 Core ubsan fixes
This fixes UBSAN errors reported by running our testsuite, importing the
TPS demo, and running the TPS demo. I have tried, wherever possible, to
fix issues related to reported issues but not directly reported by UBSAN
because thse code paths just happened to not have been exercised in
these cases.

These fixes apply only to errors reported, and caused by, core/

The following things have been changed:

* Make sure there are no implicit sign changing casts in core.
* Explicitly type enums that are part of a public API such that users of
  the API cannot pass in wrongly-sized values leading to potential stack
  corruption.
* Ensure that memcpy is never called with invalid or null pointers as
  this is undefined behavior, and when the engine is built with
  optimizations turned on leads to memory corruption and hard to debug
  crashes.
* Replace enum values only used as static values with constexpr static
  const values instead. This has no runtime overhead. This makes it so
  that the size of the enums is explicit.
* Make sure that nan and inf is handled consistently in String.
* Implement a _to_int template to ensure that all of the paths use the
  same algorhithm, and correct the negative integer case.
* Changed the way the json serializer precision work, and added tests to
  verify the new behavior. The behavior doesn't quite match master in
  particulary for negative doubles as the original code tried to cast -inf
  to an int. This then led to negative doubles losing all but one of
  their decimal points when serializing. Behavior in GDScript remains
  unchanged.
2024-12-18 14:31:12 +01:00
Lukas Tenbrink a636c04244 Optimize `CowData` and `LocalVector` functions `.insert` and `.remove_at` by using move semantics. 2024-12-17 14:10:10 +01:00
Lukas Tenbrink 57073ba14e Add move constructor and move assignment to CowData, String, Char16String, CharString and Vector. 2024-12-11 15:52:15 +01:00
Sai Nane 66b7d5f1b5 Remove apparent contradiction in vector.h header
3205a92ad8 was a major commit which removed `PoolVector`, and replaced
most references to `PoolVector` with `Vector` instead. In most cases,
this was appropriate, given that `PoolVector` was being replaced with
`Vector`, as an effective generalist in 64-bit address space layouts.

However, vector.h itself was left with an artifact advising the reader
to use `Vector` instead of `Vector` for large arrays. While this led
to a fascinating deep dive, and hopefully improved some of the
documentation along the way, it's probably best to clean this up for
the next person.
2024-12-10 01:51:30 +00:00