setup.h raw

   1  // SPDX-License-Identifier: Apache-2.0 OR MIT OR Unlicense
   2  
   3  // Various constants for the sizes of groups and tiles.
   4  
   5  // Much of this will be made dynamic in various ways, but for now it's easiest
   6  // to hardcode and keep all in one place.
   7  
   8  // A LG_WG_FACTOR of n scales workgroup sizes by 2^n. Use 0 for a
   9  // maximum workgroup size of 128, or 1 for a maximum size of 256.
  10  #define LG_WG_FACTOR 0
  11  #define WG_FACTOR (1<<LG_WG_FACTOR)
  12  
  13  #define TILE_WIDTH_PX 32
  14  #define TILE_HEIGHT_PX 32
  15  
  16  #define PTCL_INITIAL_ALLOC 1024
  17  
  18  // These should probably be renamed and/or reworked. In the binning
  19  // kernel, they represent the number of bins. Also, the workgroup size
  20  // of that kernel is equal to the number of bins, but should probably
  21  // be more flexible (it's 512 in the K&L paper).
  22  #define N_TILE_X 16
  23  #define N_TILE_Y (8 * WG_FACTOR)
  24  #define N_TILE (N_TILE_X * N_TILE_Y)
  25  #define LG_N_TILE (7 + LG_WG_FACTOR)
  26  #define N_SLICE (N_TILE / 32)
  27  
  28  struct Config {
  29      uint n_elements; // paths
  30      uint n_pathseg;
  31      uint width_in_tiles;
  32      uint height_in_tiles;
  33      Alloc tile_alloc;
  34      Alloc bin_alloc;
  35      Alloc ptcl_alloc;
  36      Alloc pathseg_alloc;
  37      Alloc anno_alloc;
  38      Alloc trans_alloc;
  39  };
  40  
  41  // Fill modes.
  42  #define MODE_NONZERO 0
  43  #define MODE_STROKE 1
  44  
  45  // Size of kernel4 clip state, in words.
  46  #define CLIP_STATE_SIZE 2
  47  
  48  // fill_mode_from_flags extracts the fill mode from tag flags.
  49  uint fill_mode_from_flags(uint flags) {
  50      return flags & 0x1;
  51  }
  52