diff options
Diffstat (limited to 'src/shaders')
| -rw-r--r-- | src/shaders/debug/debug_print.wgsl | 241 |
1 files changed, 44 insertions, 197 deletions
diff --git a/src/shaders/debug/debug_print.wgsl b/src/shaders/debug/debug_print.wgsl index 7e6debe..386e7b5 100644 --- a/src/shaders/debug/debug_print.wgsl +++ b/src/shaders/debug/debug_print.wgsl @@ -14,205 +14,52 @@ const ink_color = vec4f(1.0, 1.0, 0.0, 1.0); // yellow // Returns lit pixel (0 or 1) for ASCII code [0x20-0x7E], row r [0-7], col c [0-7]. -// Encoding: 2 u32s per glyph; hi covers rows 0-3, lo covers rows 4-7. -// Within each u32, row r occupies bits [(3-r%4)*8+7 : (3-r%4)*8]. +// Encoding: 36 unique rows stored as a dictionary of 36 u8s. +// Individual rows are 6-bit indices packed sequentially (760 rows * 6 bits = 4560 bits = 572 bytes + 1 sentinel). fn _dbg_char(ascii: u32, r: u32, c: u32) -> u32 { - let idx = (clamp(ascii, 0x20u, 0x7Eu) - 0x20u) * 2u; - let data = array<u32, 190>( - // 0x20 ' ' - 0x00000000u, 0x00000000u, - // 0x21 '!' - 0x18181818u, 0x00180000u, - // 0x22 '"' - 0x66660000u, 0x00000000u, - // 0x23 '#' - 0x36367F36u, 0x7F363600u, - // 0x24 '$' - 0x183E603Cu, 0x067C1800u, - // 0x25 '%' - 0x62660C18u, 0x30664600u, - // 0x26 '&' - 0x386C6876u, 0xDCCC7600u, - // 0x27 "'" - 0x18183000u, 0x00000000u, - // 0x28 '(' - 0x0C183030u, 0x30180C00u, - // 0x29 ')' - 0x30180C0Cu, 0x0C183000u, - // 0x2A '*' - 0x00663CFFu, 0x3C660000u, - // 0x2B '+' - 0x0018187Eu, 0x18180000u, - // 0x2C ',' - 0x00000000u, 0x00181830u, - // 0x2D '-' - 0x0000007Eu, 0x00000000u, - // 0x2E '.' - 0x00000000u, 0x00181800u, - // 0x2F '/' - 0x00060C18u, 0x30600000u, - // 0x30 '0' - 0x3C666E76u, 0x66663C00u, - // 0x31 '1' - 0x18381818u, 0x18187E00u, - // 0x32 '2' - 0x3C66060Cu, 0x18307E00u, - // 0x33 '3' - 0x3C66061Cu, 0x06663C00u, - // 0x34 '4' - 0x0C1C2C4Cu, 0x7E0C0C00u, - // 0x35 '5' - 0x7E607C06u, 0x06663C00u, - // 0x36 '6' - 0x1C30607Cu, 0x66663C00u, - // 0x37 '7' - 0x7E060C18u, 0x18181800u, - // 0x38 '8' - 0x3C66663Cu, 0x66663C00u, - // 0x39 '9' - 0x3C66663Eu, 0x060C3800u, - // 0x3A ':' - 0x00181800u, 0x00181800u, - // 0x3B ';' - 0x00181800u, 0x00181830u, - // 0x3C '<' - 0x0E183060u, 0x30180E00u, - // 0x3D '=' - 0x00007E00u, 0x007E0000u, - // 0x3E '>' - 0x70180C06u, 0x0C187000u, - // 0x3F '?' - 0x3C66060Cu, 0x18001800u, - // 0x40 '@' - 0x3C666E6Au, 0x6E603C00u, - // 0x41 'A' - 0x183C6666u, 0x7E666600u, - // 0x42 'B' - 0x7C66667Cu, 0x66667C00u, - // 0x43 'C' - 0x3C666060u, 0x60663C00u, - // 0x44 'D' - 0x786C6666u, 0x666C7800u, - // 0x45 'E' - 0x7E60607Cu, 0x60607E00u, - // 0x46 'F' - 0x7E60607Cu, 0x60606000u, - // 0x47 'G' - 0x3C66606Eu, 0x66663C00u, - // 0x48 'H' - 0x6666667Eu, 0x66666600u, - // 0x49 'I' - 0x3C181818u, 0x18183C00u, - // 0x4A 'J' - 0x1E0C0C0Cu, 0x0C6C3800u, - // 0x4B 'K' - 0x666C7870u, 0x786C6600u, - // 0x4C 'L' - 0x60606060u, 0x60607E00u, - // 0x4D 'M' - 0xC6EEFED6u, 0xC6C6C600u, - // 0x4E 'N' - 0x66767E6Eu, 0x66666600u, - // 0x4F 'O' - 0x3C666666u, 0x66663C00u, - // 0x50 'P' - 0x7C66667Cu, 0x60606000u, - // 0x51 'Q' - 0x3C666666u, 0x663C0E00u, - // 0x52 'R' - 0x7C66667Cu, 0x786C6600u, - // 0x53 'S' - 0x3C66603Cu, 0x06663C00u, - // 0x54 'T' - 0x7E181818u, 0x18181800u, - // 0x55 'U' - 0x66666666u, 0x66663C00u, - // 0x56 'V' - 0x66666666u, 0x663C1800u, - // 0x57 'W' - 0xC6C6C6D6u, 0xFEEEC600u, - // 0x58 'X' - 0x66663C18u, 0x3C666600u, - // 0x59 'Y' - 0x6666663Cu, 0x18181800u, - // 0x5A 'Z' - 0x7E060C18u, 0x30607E00u, - // 0x5B '[' - 0x3C303030u, 0x30303C00u, - // 0x5C '\' - 0x00603018u, 0x0C060000u, - // 0x5D ']' - 0x3C0C0C0Cu, 0x0C0C3C00u, - // 0x5E '^' - 0x10386CC6u, 0x00000000u, - // 0x5F '_' - 0x00000000u, 0x000000FFu, - // 0x60 '`' - 0x30180C00u, 0x00000000u, - // 0x61 'a' - 0x00003C06u, 0x3E663E00u, - // 0x62 'b' - 0x60607C66u, 0x66667C00u, - // 0x63 'c' - 0x00003C66u, 0x60663C00u, - // 0x64 'd' - 0x06063E66u, 0x66663E00u, - // 0x65 'e' - 0x00003C66u, 0x7E603C00u, - // 0x66 'f' - 0x0E18187Cu, 0x18181800u, - // 0x67 'g' - 0x00003E66u, 0x663E063Cu, - // 0x68 'h' - 0x60607C66u, 0x66666600u, - // 0x69 'i' - 0x18003818u, 0x18183C00u, - // 0x6A 'j' - 0x06000606u, 0x0606663Cu, - // 0x6B 'k' - 0x6060666Cu, 0x786C6600u, - // 0x6C 'l' - 0x38181818u, 0x18183C00u, - // 0x6D 'm' - 0x0000C6EEu, 0xFED6C600u, - // 0x6E 'n' - 0x00007C66u, 0x66666600u, - // 0x6F 'o' - 0x00003C66u, 0x66663C00u, - // 0x70 'p' - 0x00007C66u, 0x667C6060u, - // 0x71 'q' - 0x00003E66u, 0x663E0606u, - // 0x72 'r' - 0x00007C66u, 0x60606000u, - // 0x73 's' - 0x00003C60u, 0x3C063C00u, - // 0x74 't' - 0x18187E18u, 0x18180E00u, - // 0x75 'u' - 0x00006666u, 0x66663E00u, - // 0x76 'v' - 0x00006666u, 0x663C1800u, - // 0x77 'w' - 0x0000C6C6u, 0xD6FE6C00u, - // 0x78 'x' - 0x0000663Cu, 0x183C6600u, - // 0x79 'y' - 0x00006666u, 0x663E063Cu, - // 0x7A 'z' - 0x00007E0Cu, 0x18307E00u, - // 0x7B '{' - 0x0E181870u, 0x18180E00u, - // 0x7C '|' - 0x18181818u, 0x18181800u, - // 0x7D '}' - 0x7018180Eu, 0x18187000u, - // 0x7E '~' - 0x76DC0000u, 0x00000000u, + let clamp_ascii = clamp(ascii, 0x20u, 0x7Eu); + let global_row = (clamp_ascii - 0x20u) * 8u + r; + let start_bit = global_row * 6u; + let byte_idx = start_bit / 8u; + let bit_shift = start_bit % 8u; + + let dict = array<u32, 9>( + 0x70306000u, 0x78381808u, 0x1C6C0C34u, 0x32627C3Cu, 0x16664606u, 0x0E763656u, 0x7E3E1E6Eu, 0x6B3363FEu, + 0xFF7F773Bu + ); + + let bitstream = array<u32, 145>( + 0x00000000u, 0x51450000u, 0x00014014u, 0x00000492u, 0xC28A0000u, 0x00A29C29u, 0x81310345u, 0x24910056u, + 0x00E48914u, 0xA061354Bu, 0x91450187u, 0x00000000u, 0x49249142u, 0x21490021u, 0x00914208u, 0x8C8CC480u, + 0x51400004u, 0x0001456Cu, 0x40000000u, 0x00002451u, 0x0000006Cu, 0x40000000u, 0x20400051u, 0x00040914u, + 0x9261648Cu, 0x52C500C4u, 0x01B14514u, 0x4508148Cu, 0x148C01B2u, 0x00C48118u, 0x9B3C8182u, 0xA41B0020u, + 0x00C48105u, 0x92690246u, 0x205B00C4u, 0x00514514u, 0x9231248Cu, 0x248C00C4u, 0x00B08135u, 0x40005140u, + 0x51400051u, 0x24514000u, 0x49409143u, 0xB0000031u, 0x0006C001u, 0x42042157u, 0x148C0171u, 0x00500508u, + 0x1651648Cu, 0x230500C4u, 0x01249B49u, 0x9269249Au, 0x048C01A4u, 0x00C49041u, 0x52492559u, 0x041B0195u, + 0x01B41069u, 0x1069041Bu, 0x048C0104u, 0x00C49259u, 0x926D2492u, 0x514C0124u, 0x00C14514u, 0x42082087u, + 0x955200B5u, 0x0125595Du, 0x10410410u, 0x285D01B4u, 0x01D75D7Eu, 0x9259B612u, 0x248C0124u, 0x00C49249u, + 0x1069249Au, 0x248C0104u, 0x00331249u, 0x5969249Au, 0x048C0125u, 0x00C48131u, 0x4514515Bu, 0x24920051u, + 0x00C49249u, 0x12492492u, 0xD75D0053u, 0x01D8627Du, 0x8C14C492u, 0x24920124u, 0x00514531u, 0x0914205Bu, + 0x924C01B4u, 0x00C24924u, 0x42149400u, 0x208C0000u, 0x00C08208u, 0x007552C4u, 0x00000000u, 0x8C000000u, + 0x00002149u, 0xC0000000u, 0x00D48D04u, 0x9249A410u, 0xC00001A4u, 0x00C49048u, 0x9248D041u, 0xC00000D4u, + 0x00C41B48u, 0x45685143u, 0xD0000051u, 0x30135248u, 0x9249A410u, 0xB0050124u, 0x00C14514u, 0x41041001u, + 0x24103120u, 0x01255955u, 0x4514514Bu, 0xD00000C1u, 0x01D7E285u, 0x9249A000u, 0xC0000124u, 0x00C49248u, + 0x9249A000u, 0xD0004106u, 0x04135248u, 0x1049A000u, 0xC0000104u, 0x00C04C40u, 0x4515B145u, 0x20000031u, + 0x00D49249u, 0x12492000u, 0xD0000053u, 0x01589F75u, 0x05312000u, 0x20000123u, 0x30135249u, 0x4509B000u, + 0x514301B2u, 0x0031455Cu, 0x45145145u, 0x51570051u, 0x0171450Cu, 0x00000818u, 0x00000000u, 0x00000000u, + 0x00000000u ); - let word = data[idx + (r / 4u)]; - let shift = (3u - (r % 4u)) * 8u + (7u - c); - return (word >> shift) & 1u; + + let word_idx = byte_idx / 4u; + let shift = (byte_idx % 4u) * 8u; + let shift2 = 32u - (shift | select(0u, 16u, shift == 0u)); + let w = ((bitstream[word_idx] >> shift) | (bitstream[word_idx + 1u] << shift2)) & 0xFFFFu; + + let row_idx = (w >> bit_shift) & 0x3Fu; + + let row_byte = (dict[row_idx / 4u] >> ((row_idx % 4u) * 8u)) & 0xFFu; + + return (row_byte >> c) & 1u; } // Overlays a f32 value onto col, returning updated RGB. |
