github.com/cybriq/giocore@v0.0.7-0.20210703034601-cfb9cb5f3900/gpu/shaders/pathseg.h (about) 1 // SPDX-License-Identifier: Apache-2.0 OR MIT OR Unlicense 2 3 // Code auto-generated by piet-gpu-derive 4 5 struct PathCubicRef { 6 uint offset; 7 }; 8 9 struct PathSegRef { 10 uint offset; 11 }; 12 13 struct PathCubic { 14 vec2 p0; 15 vec2 p1; 16 vec2 p2; 17 vec2 p3; 18 uint path_ix; 19 uint trans_ix; 20 vec2 stroke; 21 }; 22 23 #define PathCubic_size 48 24 25 PathCubicRef PathCubic_index(PathCubicRef ref, uint index) { 26 return PathCubicRef(ref.offset + index * PathCubic_size); 27 } 28 29 #define PathSeg_Nop 0 30 #define PathSeg_Cubic 1 31 #define PathSeg_size 52 32 33 PathSegRef PathSeg_index(PathSegRef ref, uint index) { 34 return PathSegRef(ref.offset + index * PathSeg_size); 35 } 36 37 struct PathSegTag { 38 uint tag; 39 uint flags; 40 }; 41 42 PathCubic PathCubic_read(Alloc a, PathCubicRef ref) { 43 uint ix = ref.offset >> 2; 44 uint raw0 = read_mem(a, ix + 0); 45 uint raw1 = read_mem(a, ix + 1); 46 uint raw2 = read_mem(a, ix + 2); 47 uint raw3 = read_mem(a, ix + 3); 48 uint raw4 = read_mem(a, ix + 4); 49 uint raw5 = read_mem(a, ix + 5); 50 uint raw6 = read_mem(a, ix + 6); 51 uint raw7 = read_mem(a, ix + 7); 52 uint raw8 = read_mem(a, ix + 8); 53 uint raw9 = read_mem(a, ix + 9); 54 uint raw10 = read_mem(a, ix + 10); 55 uint raw11 = read_mem(a, ix + 11); 56 PathCubic s; 57 s.p0 = vec2(uintBitsToFloat(raw0), uintBitsToFloat(raw1)); 58 s.p1 = vec2(uintBitsToFloat(raw2), uintBitsToFloat(raw3)); 59 s.p2 = vec2(uintBitsToFloat(raw4), uintBitsToFloat(raw5)); 60 s.p3 = vec2(uintBitsToFloat(raw6), uintBitsToFloat(raw7)); 61 s.path_ix = raw8; 62 s.trans_ix = raw9; 63 s.stroke = vec2(uintBitsToFloat(raw10), uintBitsToFloat(raw11)); 64 return s; 65 } 66 67 void PathCubic_write(Alloc a, PathCubicRef ref, PathCubic s) { 68 uint ix = ref.offset >> 2; 69 write_mem(a, ix + 0, floatBitsToUint(s.p0.x)); 70 write_mem(a, ix + 1, floatBitsToUint(s.p0.y)); 71 write_mem(a, ix + 2, floatBitsToUint(s.p1.x)); 72 write_mem(a, ix + 3, floatBitsToUint(s.p1.y)); 73 write_mem(a, ix + 4, floatBitsToUint(s.p2.x)); 74 write_mem(a, ix + 5, floatBitsToUint(s.p2.y)); 75 write_mem(a, ix + 6, floatBitsToUint(s.p3.x)); 76 write_mem(a, ix + 7, floatBitsToUint(s.p3.y)); 77 write_mem(a, ix + 8, s.path_ix); 78 write_mem(a, ix + 9, s.trans_ix); 79 write_mem(a, ix + 10, floatBitsToUint(s.stroke.x)); 80 write_mem(a, ix + 11, floatBitsToUint(s.stroke.y)); 81 } 82 83 PathSegTag PathSeg_tag(Alloc a, PathSegRef ref) { 84 uint tag_and_flags = read_mem(a, ref.offset >> 2); 85 return PathSegTag(tag_and_flags & 0xffff, tag_and_flags >> 16); 86 } 87 88 PathCubic PathSeg_Cubic_read(Alloc a, PathSegRef ref) { 89 return PathCubic_read(a, PathCubicRef(ref.offset + 4)); 90 } 91 92 void PathSeg_Nop_write(Alloc a, PathSegRef ref) { 93 write_mem(a, ref.offset >> 2, PathSeg_Nop); 94 } 95 96 void PathSeg_Cubic_write(Alloc a, PathSegRef ref, uint flags, PathCubic s) { 97 write_mem(a, ref.offset >> 2, (flags << 16) | PathSeg_Cubic); 98 PathCubic_write(a, PathCubicRef(ref.offset + 4), s); 99 } 100