Force 16 Word limit for Linked List GPU

This commit is contained in:
2024-02-07 22:04:28 -05:00
parent 507615df97
commit 77c0dd28db
5 changed files with 99 additions and 46 deletions

View File

@@ -30,8 +30,8 @@ namespace JabyEngine {
};
// Letters are actually only 16x15 but should be treated 16x16
// TODO: DMA this?
struct Letter : public GPU::internal::LinkedElementCreator<Letter> {
// FIXME: This is to big for Linked Lists. Maybe we do not buffer this at all? Or just double buffer it?
struct Letter /*: public GPU::internal::LinkedElementCreator<Letter>*/ {
CPU2VRAM cmd;
Line lines[BIOS_Font::Size.height - 1];
Line empty_line;
@@ -50,14 +50,14 @@ namespace JabyEngine {
}
};
// v double buffer do not change size without adjusting
Letter::Linked letter_buffer[2*4];
// v ::Linked v double buffer do not change size without adjusting
Letter letter_buffer[2*4];
uint8_t free_idx;
void setup() {
for(auto& letter : this->letter_buffer) {
letter->setup(SizeU16::create(16/4, 16));
letter.set_link_identitiy();
letter.setup(SizeU16::create(16/4, 16));
//letter.set_link_identitiy();
}
this->free_idx = 0;
}
@@ -65,24 +65,24 @@ namespace JabyEngine {
void load_to(const PositionU16& pos, const uint16_t* bit_map) {
auto& cur_letter = this->letter_buffer[this->free_idx++];
cur_letter->load_to(pos, bit_map);
cur_letter.load_to(pos, bit_map);
if((this->free_idx&0x3) == 0) {
cur_letter.terminate();
GPU::render(this->letter_buffer[this->free_idx - 4]);
//cur_letter.terminate();
//GPU::render(this->letter_buffer[this->free_idx - 4]);
this->free_idx &= ~0x7;
}
else {
cur_letter.concat(this->letter_buffer[this->free_idx]);
//cur_letter.concat(this->letter_buffer[this->free_idx]);
}
}
void flush() {
if((this->free_idx&0x3) != 0) {
this->letter_buffer[this->free_idx - 1].terminate();
//this->letter_buffer[this->free_idx - 1].terminate();
const auto idx = this->free_idx > 3 ? 4 : 0;
GPU::render(this->letter_buffer[idx]);
//GPU::render(this->letter_buffer[idx]);
}
}