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