From a2c2048534d13d43e1685e10d66ee2105bb086ca Mon Sep 17 00:00:00 2001 From: Jaby Date: Mon, 26 Jun 2023 20:40:30 +0200 Subject: [PATCH] Make Linked elements BSS conform --- .../src/FontWriter/font_writer.cpp | 1 + .../PSX/GPU/Primitives/linked_elements.hpp | 22 ++++++++++++++----- include/PSX/GPU/gpu.hpp | 2 +- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/examples/PoolBox/application/src/FontWriter/font_writer.cpp b/examples/PoolBox/application/src/FontWriter/font_writer.cpp index bf80eb3a..9f0705b3 100644 --- a/examples/PoolBox/application/src/FontWriter/font_writer.cpp +++ b/examples/PoolBox/application/src/FontWriter/font_writer.cpp @@ -22,6 +22,7 @@ namespace FontWriter { reset_links(); for(auto& char_array : TextBuffer) { for(auto& single_char : char_array) { + single_char.set_link_identitiy(); single_char->set_identitiy(); single_char->clut = GPU::PageClut(Assets::FontTIM.get_clut_x(), Assets::FontTIM.get_clut_y()); } diff --git a/include/PSX/GPU/Primitives/linked_elements.hpp b/include/PSX/GPU/Primitives/linked_elements.hpp index 45c8f49e..b9bb661a 100644 --- a/include/PSX/GPU/Primitives/linked_elements.hpp +++ b/include/PSX/GPU/Primitives/linked_elements.hpp @@ -10,18 +10,26 @@ namespace JabyEngine { static constexpr uint32_t TerminationValue = 0x00FFFFFF; - uint32_t value = TerminationValue; + static constexpr uint32_t default_link_value(size_t size) { + return SizeRange.as_value(size >> 2) | TerminationValue; + } + + uint32_t link_value; constexpr Link() = default; - constexpr Link(size_t size) : value(SizeRange.as_value(size >> 2) | TerminationValue) { + constexpr Link(size_t size) : link_value(default_link_value(size)) { + } + + constexpr void set_link_identitiy(size_t size) { + this->link_value = default_link_value(size); } void set_adr(const void* adr) { - this->value = bit::value::set_normalized(this->value, AdrRange.with(reinterpret_cast(adr))); + this->link_value = bit::value::set_normalized(this->link_value, AdrRange.with(reinterpret_cast(adr))); } void* get_adr() const { - return reinterpret_cast(bit::value::get_normalized(this->value, AdrRange)); + return reinterpret_cast(bit::value::get_normalized(this->link_value, AdrRange)); } template @@ -45,7 +53,7 @@ namespace JabyEngine { } constexpr void terminate() { - this->value |= TerminationValue; + this->link_value |= TerminationValue; } }; @@ -59,6 +67,10 @@ namespace JabyEngine { constexpr LinkedElement(const T& element) : Link(sizeof(T)), element(element) { } + constexpr void set_link_identitiy() { + Link::set_link_identitiy(sizeof(T)); + } + constexpr const T* operator->() const { return &this->element; } diff --git a/include/PSX/GPU/gpu.hpp b/include/PSX/GPU/gpu.hpp index 83540ec7..2bc00fff 100644 --- a/include/PSX/GPU/gpu.hpp +++ b/include/PSX/GPU/gpu.hpp @@ -43,7 +43,7 @@ namespace JabyEngine { template static void render(const LinkedElement& linked_primitives) { - internal::render_dma(&linked_primitives.value); + internal::render_dma(&linked_primitives.link_value); } template