diff options
author | ReinUsesLisp <[email protected]> | 2019-05-10 04:17:48 -0300 |
---|---|---|
committer | ReinUsesLisp <[email protected]> | 2019-06-20 21:36:12 -0300 |
commit | 345e73f2feb0701e3c3099d002a1c21fb524eae4 (patch) | |
tree | c8c934dfec804d04a29f8ee27124274f5f999fb8 /src/common/alignment.h | |
parent | 28d7c2f5a5089051410d37a03d5a4a42e4230842 (diff) | |
download | yuzu-android-345e73f2feb0701e3c3099d002a1c21fb524eae4.tar.gz yuzu-android-345e73f2feb0701e3c3099d002a1c21fb524eae4.zip |
video_core: Use un-shifted block sizes to avoid integer divisions
Instead of storing all block width, height and depths in their shifted
form:
block_width = 1U << block_shift;
Store them like they are provided by the emulated hardware (their
block_shift form). This way we can avoid doing the costly
Common::AlignUp operation to align texture sizes and drop CPU integer
divisions with bitwise logic (defined in Common::AlignBits).
Diffstat (limited to 'src/common/alignment.h')
-rw-r--r-- | src/common/alignment.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/common/alignment.h b/src/common/alignment.h index d94a2291f..3379a6967 100644 --- a/src/common/alignment.h +++ b/src/common/alignment.h @@ -20,6 +20,11 @@ constexpr T AlignDown(T value, std::size_t size) { } template <typename T> +constexpr T AlignBits(T value, T align) { + return (value + ((1 << align) - 1)) >> align << align; +} + +template <typename T> constexpr bool Is4KBAligned(T value) { static_assert(std::is_unsigned_v<T>, "T must be an unsigned value."); return (value & 0xFFF) == 0; |