• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2017 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can
5  * be found in the LICENSE file.
6  *
7  */
8 
9 #ifndef SKC_COMMON_ONCE
10 #define SKC_COMMON_ONCE
11 
12 #include "types.h"
13 
14 //
15 // structures common to both host and device -- placeholder until
16 // everything shakes out
17 //
18 
19 union skc_transform
20 {
21   //
22   // Transform is always scaled s.t. w2 is 1.0f
23   //
24   skc_float   f32a8[8];
25 
26   skc_float8  f32v8;
27 
28   struct {
29     skc_float sx;
30     skc_float shx;
31     skc_float tx;
32 
33     skc_float shy;
34     skc_float sy;
35     skc_float ty;
36 
37     skc_float w0;
38     skc_float w1;
39   };
40 };
41 
42 //
43 //
44 //
45 
46 union skc_path_clip
47 {
48   skc_float   f32a4[4]; // FIXME -- use the SIMD4 representation trick
49 
50   skc_float4  f32v4;
51 
52   struct {
53     skc_float x0;
54     skc_float y0;
55     skc_float x1;
56     skc_float y1;
57   };
58 };
59 
60 //
61 // host-side path fill cmd that is expanded into rasterization cmds
62 //
63 // FIXME -- these magic numbers will be replaced with tile.h constants
64 //
65 // FIXME -- make this command opaque by moving it into the platform impl
66 //
67 // FIXME -- NEED TO EVALUATE IF THIS DISTRIBUTION OF BITS IS GOING TO
68 // BE TOO SMALL -- plenty of room to jiggle these bits
69 //
70 
71 #define SKC_CMD_FILL_BITS_TRANSFORM  12  // distinct transforms -- perhaps too generous
72 #define SKC_CMD_FILL_BITS_CLIP       12  // distinct clips      -- perhaps too generous
73 #define SKC_CMD_FILL_BITS_COHORT      8  // perhaps too small
74 
75 //
76 //
77 //
78 
79 typedef skc_uint skc_path_h; // host path handle
80 
81 union skc_cmd_fill
82 {
83   skc_ulong    u64;
84 
85   skc_uint2    u32v2;
86 
87   struct {
88     skc_path_h path;           // host path id
89 #if defined(__OPENCL_C_VERSION__)
90     skc_uint   tcc;
91 #else
92     skc_uint   transform : SKC_CMD_FILL_BITS_TRANSFORM;
93     skc_uint   clip      : SKC_CMD_FILL_BITS_CLIP;
94     skc_uint   cohort    : SKC_CMD_FILL_BITS_COHORT;
95 #endif
96   };
97 };
98 
99 //
100 //
101 //
102 
103 typedef skc_uint skc_raster_h;
104 
105 union skc_cmd_place
106 {
107   skc_uint4       u32v4;
108 
109   struct {
110     skc_raster_h  raster_h;
111     skc_uint      layer_id;
112     skc_uint      tx;
113     skc_uint      ty;
114   };
115 };
116 
117 SKC_STATIC_ASSERT(sizeof(union skc_cmd_place) == sizeof(skc_uint4));
118 
119 //
120 //
121 //
122 
123 #endif
124 
125 //
126 //
127 //
128