yum-archive/2ner

A toon shader for Unity's BIRP.

git clone https://git.yummers.dev/yum-archive/2ner

yumAdd vrc light volumes, double decal slotsed7bb9b

master
74.0 KiB1217 linesraw
1#ifndef __UNIGRAM_LETTER_GRID_INC
2#define __UNIGRAM_LETTER_GRID_INC
3
4#if defined(_UNIGRAM_LETTER_GRID)
5
6#include "disinfo.cginc"
7#include "features.cginc"
8#include "globals.cginc"
9#include "interpolators.cginc"
10#include "math.cginc"
11#include "oklab.cginc"
12#include "texture_utils.cginc"
13
14// ULG = unigram letter grid
15// Block width = number of tokens sent per block
16#define ULG_BLOCK_WIDTH 5
17// Num blocks = total # of blocks in memory
18#define ULG_NUM_BLOCKS 40
19// The data coming from the animator can be a little noisy. Add this then floor
20// to mask it out.
21#define FUDGE_AMOUNT 0.5
22
23texture2D _Unigram_Letter_Grid_Glyphs;
24float4    _Unigram_Letter_Grid_Glyphs_TexelSize;
25texture2D _Unigram_Letter_Grid_LUT;
26float4    _Unigram_Letter_Grid_LUT_TexelSize;
27float _Unigram_Letter_Grid_Tex_Res_X;
28float _Unigram_Letter_Grid_Tex_Res_Y;
29float _Unigram_Letter_Grid_Res_X;
30float _Unigram_Letter_Grid_Res_Y;
31float4 _Unigram_Letter_Grid_UV_Scale_Offset;
32float _Unigram_Letter_Grid_Padding;
33float _Unigram_Letter_Grid_Screen_Px_Range;
34float _Unigram_Letter_Grid_Min_Screen_Px_Range;
35float _Unigram_Letter_Grid_Alpha_Threshold;
36
37// These macros exist for debugging.
38#define ULG_VP
39#define ULG_D0
40#define ULG_D1
41
42#if defined(ULG_VP)
43// For posterity: this syntax is called "cbuffer aliasing".
44// The purpose here is to map a bunch of material properties onto an indexable
45// array (the first element of the cbuffer).
46cbuffer UnigramLetterGridVisualPointers
47{
48  float _Unigram_Letter_Visual_Pointers[ULG_NUM_BLOCKS] : packoffset(c0);
49  float _Unigram_Letter_Grid_Block00_Visual_Pointer_Animated : packoffset(c0);
50  float _Unigram_Letter_Grid_Block01_Visual_Pointer_Animated : packoffset(c1);
51  float _Unigram_Letter_Grid_Block02_Visual_Pointer_Animated : packoffset(c2);
52  float _Unigram_Letter_Grid_Block03_Visual_Pointer_Animated : packoffset(c3);
53  float _Unigram_Letter_Grid_Block04_Visual_Pointer_Animated : packoffset(c4);
54  float _Unigram_Letter_Grid_Block05_Visual_Pointer_Animated : packoffset(c5);
55  float _Unigram_Letter_Grid_Block06_Visual_Pointer_Animated : packoffset(c6);
56  float _Unigram_Letter_Grid_Block07_Visual_Pointer_Animated : packoffset(c7);
57  float _Unigram_Letter_Grid_Block08_Visual_Pointer_Animated : packoffset(c8);
58  float _Unigram_Letter_Grid_Block09_Visual_Pointer_Animated : packoffset(c9);
59  float _Unigram_Letter_Grid_Block10_Visual_Pointer_Animated : packoffset(c10);
60  float _Unigram_Letter_Grid_Block11_Visual_Pointer_Animated : packoffset(c11);
61  float _Unigram_Letter_Grid_Block12_Visual_Pointer_Animated : packoffset(c12);
62  float _Unigram_Letter_Grid_Block13_Visual_Pointer_Animated : packoffset(c13);
63  float _Unigram_Letter_Grid_Block14_Visual_Pointer_Animated : packoffset(c14);
64  float _Unigram_Letter_Grid_Block15_Visual_Pointer_Animated : packoffset(c15);
65  float _Unigram_Letter_Grid_Block16_Visual_Pointer_Animated : packoffset(c16);
66  float _Unigram_Letter_Grid_Block17_Visual_Pointer_Animated : packoffset(c17);
67  float _Unigram_Letter_Grid_Block18_Visual_Pointer_Animated : packoffset(c18);
68  float _Unigram_Letter_Grid_Block19_Visual_Pointer_Animated : packoffset(c19);
69  float _Unigram_Letter_Grid_Block20_Visual_Pointer_Animated : packoffset(c20);
70  float _Unigram_Letter_Grid_Block21_Visual_Pointer_Animated : packoffset(c21);
71  float _Unigram_Letter_Grid_Block22_Visual_Pointer_Animated : packoffset(c22);
72  float _Unigram_Letter_Grid_Block23_Visual_Pointer_Animated : packoffset(c23);
73  float _Unigram_Letter_Grid_Block24_Visual_Pointer_Animated : packoffset(c24);
74  float _Unigram_Letter_Grid_Block25_Visual_Pointer_Animated : packoffset(c25);
75  float _Unigram_Letter_Grid_Block26_Visual_Pointer_Animated : packoffset(c26);
76  float _Unigram_Letter_Grid_Block27_Visual_Pointer_Animated : packoffset(c27);
77  float _Unigram_Letter_Grid_Block28_Visual_Pointer_Animated : packoffset(c28);
78  float _Unigram_Letter_Grid_Block29_Visual_Pointer_Animated : packoffset(c29);
79  float _Unigram_Letter_Grid_Block30_Visual_Pointer_Animated : packoffset(c30);
80  float _Unigram_Letter_Grid_Block31_Visual_Pointer_Animated : packoffset(c31);
81  float _Unigram_Letter_Grid_Block32_Visual_Pointer_Animated : packoffset(c32);
82  float _Unigram_Letter_Grid_Block33_Visual_Pointer_Animated : packoffset(c33);
83  float _Unigram_Letter_Grid_Block34_Visual_Pointer_Animated : packoffset(c34);
84  float _Unigram_Letter_Grid_Block35_Visual_Pointer_Animated : packoffset(c35);
85  float _Unigram_Letter_Grid_Block36_Visual_Pointer_Animated : packoffset(c36);
86  float _Unigram_Letter_Grid_Block37_Visual_Pointer_Animated : packoffset(c37);
87  float _Unigram_Letter_Grid_Block38_Visual_Pointer_Animated : packoffset(c38);
88  float _Unigram_Letter_Grid_Block39_Visual_Pointer_Animated : packoffset(c39);
89}
90#endif  // ULG_VP
91
92#if defined(ULG_D0)
93cbuffer UnigramLetterGridDataByte00_Animated
94{
95  float _Unigram_Letter_Data_Byte00[ULG_NUM_BLOCKS * ULG_BLOCK_WIDTH] : packoffset(c0);
96
97  float _Unigram_Letter_Grid_Data_Block00_Datum00_Byte00_Animated : packoffset(c0);
98  float _Unigram_Letter_Grid_Data_Block00_Datum01_Byte00_Animated : packoffset(c1);
99  float _Unigram_Letter_Grid_Data_Block00_Datum02_Byte00_Animated : packoffset(c2);
100  float _Unigram_Letter_Grid_Data_Block00_Datum03_Byte00_Animated : packoffset(c3);
101  float _Unigram_Letter_Grid_Data_Block00_Datum04_Byte00_Animated : packoffset(c4);
102  float _Unigram_Letter_Grid_Data_Block01_Datum00_Byte00_Animated : packoffset(c5);
103  float _Unigram_Letter_Grid_Data_Block01_Datum01_Byte00_Animated : packoffset(c6);
104  float _Unigram_Letter_Grid_Data_Block01_Datum02_Byte00_Animated : packoffset(c7);
105  float _Unigram_Letter_Grid_Data_Block01_Datum03_Byte00_Animated : packoffset(c8);
106  float _Unigram_Letter_Grid_Data_Block01_Datum04_Byte00_Animated : packoffset(c9);
107
108  float _Unigram_Letter_Grid_Data_Block02_Datum00_Byte00_Animated : packoffset(c10);
109  float _Unigram_Letter_Grid_Data_Block02_Datum01_Byte00_Animated : packoffset(c11);
110  float _Unigram_Letter_Grid_Data_Block02_Datum02_Byte00_Animated : packoffset(c12);
111  float _Unigram_Letter_Grid_Data_Block02_Datum03_Byte00_Animated : packoffset(c13);
112  float _Unigram_Letter_Grid_Data_Block02_Datum04_Byte00_Animated : packoffset(c14);
113  float _Unigram_Letter_Grid_Data_Block03_Datum00_Byte00_Animated : packoffset(c15);
114  float _Unigram_Letter_Grid_Data_Block03_Datum01_Byte00_Animated : packoffset(c16);
115  float _Unigram_Letter_Grid_Data_Block03_Datum02_Byte00_Animated : packoffset(c17);
116  float _Unigram_Letter_Grid_Data_Block03_Datum03_Byte00_Animated : packoffset(c18);
117  float _Unigram_Letter_Grid_Data_Block03_Datum04_Byte00_Animated : packoffset(c19);
118
119  float _Unigram_Letter_Grid_Data_Block04_Datum00_Byte00_Animated : packoffset(c20);
120  float _Unigram_Letter_Grid_Data_Block04_Datum01_Byte00_Animated : packoffset(c21);
121  float _Unigram_Letter_Grid_Data_Block04_Datum02_Byte00_Animated : packoffset(c22);
122  float _Unigram_Letter_Grid_Data_Block04_Datum03_Byte00_Animated : packoffset(c23);
123  float _Unigram_Letter_Grid_Data_Block04_Datum04_Byte00_Animated : packoffset(c24);
124  float _Unigram_Letter_Grid_Data_Block05_Datum00_Byte00_Animated : packoffset(c25);
125  float _Unigram_Letter_Grid_Data_Block05_Datum01_Byte00_Animated : packoffset(c26);
126  float _Unigram_Letter_Grid_Data_Block05_Datum02_Byte00_Animated : packoffset(c27);
127  float _Unigram_Letter_Grid_Data_Block05_Datum03_Byte00_Animated : packoffset(c28);
128  float _Unigram_Letter_Grid_Data_Block05_Datum04_Byte00_Animated : packoffset(c29);
129
130  float _Unigram_Letter_Grid_Data_Block06_Datum00_Byte00_Animated : packoffset(c30);
131  float _Unigram_Letter_Grid_Data_Block06_Datum01_Byte00_Animated : packoffset(c31);
132  float _Unigram_Letter_Grid_Data_Block06_Datum02_Byte00_Animated : packoffset(c32);
133  float _Unigram_Letter_Grid_Data_Block06_Datum03_Byte00_Animated : packoffset(c33);
134  float _Unigram_Letter_Grid_Data_Block06_Datum04_Byte00_Animated : packoffset(c34);
135  float _Unigram_Letter_Grid_Data_Block07_Datum00_Byte00_Animated : packoffset(c35);
136  float _Unigram_Letter_Grid_Data_Block07_Datum01_Byte00_Animated : packoffset(c36);
137  float _Unigram_Letter_Grid_Data_Block07_Datum02_Byte00_Animated : packoffset(c37);
138  float _Unigram_Letter_Grid_Data_Block07_Datum03_Byte00_Animated : packoffset(c38);
139  float _Unigram_Letter_Grid_Data_Block07_Datum04_Byte00_Animated : packoffset(c39);
140
141  float _Unigram_Letter_Grid_Data_Block08_Datum00_Byte00_Animated : packoffset(c40);
142  float _Unigram_Letter_Grid_Data_Block08_Datum01_Byte00_Animated : packoffset(c41);
143  float _Unigram_Letter_Grid_Data_Block08_Datum02_Byte00_Animated : packoffset(c42);
144  float _Unigram_Letter_Grid_Data_Block08_Datum03_Byte00_Animated : packoffset(c43);
145  float _Unigram_Letter_Grid_Data_Block08_Datum04_Byte00_Animated : packoffset(c44);
146  float _Unigram_Letter_Grid_Data_Block09_Datum00_Byte00_Animated : packoffset(c45);
147  float _Unigram_Letter_Grid_Data_Block09_Datum01_Byte00_Animated : packoffset(c46);
148  float _Unigram_Letter_Grid_Data_Block09_Datum02_Byte00_Animated : packoffset(c47);
149  float _Unigram_Letter_Grid_Data_Block09_Datum03_Byte00_Animated : packoffset(c48);
150  float _Unigram_Letter_Grid_Data_Block09_Datum04_Byte00_Animated : packoffset(c49);
151
152  float _Unigram_Letter_Grid_Data_Block10_Datum00_Byte00_Animated : packoffset(c50);
153  float _Unigram_Letter_Grid_Data_Block10_Datum01_Byte00_Animated : packoffset(c51);
154  float _Unigram_Letter_Grid_Data_Block10_Datum02_Byte00_Animated : packoffset(c52);
155  float _Unigram_Letter_Grid_Data_Block10_Datum03_Byte00_Animated : packoffset(c53);
156  float _Unigram_Letter_Grid_Data_Block10_Datum04_Byte00_Animated : packoffset(c54);
157  float _Unigram_Letter_Grid_Data_Block11_Datum00_Byte00_Animated : packoffset(c55);
158  float _Unigram_Letter_Grid_Data_Block11_Datum01_Byte00_Animated : packoffset(c56);
159  float _Unigram_Letter_Grid_Data_Block11_Datum02_Byte00_Animated : packoffset(c57);
160  float _Unigram_Letter_Grid_Data_Block11_Datum03_Byte00_Animated : packoffset(c58);
161  float _Unigram_Letter_Grid_Data_Block11_Datum04_Byte00_Animated : packoffset(c59);
162
163  float _Unigram_Letter_Grid_Data_Block12_Datum00_Byte00_Animated : packoffset(c60);
164  float _Unigram_Letter_Grid_Data_Block12_Datum01_Byte00_Animated : packoffset(c61);
165  float _Unigram_Letter_Grid_Data_Block12_Datum02_Byte00_Animated : packoffset(c62);
166  float _Unigram_Letter_Grid_Data_Block12_Datum03_Byte00_Animated : packoffset(c63);
167  float _Unigram_Letter_Grid_Data_Block12_Datum04_Byte00_Animated : packoffset(c64);
168  float _Unigram_Letter_Grid_Data_Block13_Datum00_Byte00_Animated : packoffset(c65);
169  float _Unigram_Letter_Grid_Data_Block13_Datum01_Byte00_Animated : packoffset(c66);
170  float _Unigram_Letter_Grid_Data_Block13_Datum02_Byte00_Animated : packoffset(c67);
171  float _Unigram_Letter_Grid_Data_Block13_Datum03_Byte00_Animated : packoffset(c68);
172  float _Unigram_Letter_Grid_Data_Block13_Datum04_Byte00_Animated : packoffset(c69);
173
174  float _Unigram_Letter_Grid_Data_Block14_Datum00_Byte00_Animated : packoffset(c70);
175  float _Unigram_Letter_Grid_Data_Block14_Datum01_Byte00_Animated : packoffset(c71);
176  float _Unigram_Letter_Grid_Data_Block14_Datum02_Byte00_Animated : packoffset(c72);
177  float _Unigram_Letter_Grid_Data_Block14_Datum03_Byte00_Animated : packoffset(c73);
178  float _Unigram_Letter_Grid_Data_Block14_Datum04_Byte00_Animated : packoffset(c74);
179  float _Unigram_Letter_Grid_Data_Block15_Datum00_Byte00_Animated : packoffset(c75);
180  float _Unigram_Letter_Grid_Data_Block15_Datum01_Byte00_Animated : packoffset(c76);
181  float _Unigram_Letter_Grid_Data_Block15_Datum02_Byte00_Animated : packoffset(c77);
182  float _Unigram_Letter_Grid_Data_Block15_Datum03_Byte00_Animated : packoffset(c78);
183  float _Unigram_Letter_Grid_Data_Block15_Datum04_Byte00_Animated : packoffset(c79);
184
185  float _Unigram_Letter_Grid_Data_Block16_Datum00_Byte00_Animated : packoffset(c80);
186  float _Unigram_Letter_Grid_Data_Block16_Datum01_Byte00_Animated : packoffset(c81);
187  float _Unigram_Letter_Grid_Data_Block16_Datum02_Byte00_Animated : packoffset(c82);
188  float _Unigram_Letter_Grid_Data_Block16_Datum03_Byte00_Animated : packoffset(c83);
189  float _Unigram_Letter_Grid_Data_Block16_Datum04_Byte00_Animated : packoffset(c84);
190  float _Unigram_Letter_Grid_Data_Block17_Datum00_Byte00_Animated : packoffset(c85);
191  float _Unigram_Letter_Grid_Data_Block17_Datum01_Byte00_Animated : packoffset(c86);
192  float _Unigram_Letter_Grid_Data_Block17_Datum02_Byte00_Animated : packoffset(c87);
193  float _Unigram_Letter_Grid_Data_Block17_Datum03_Byte00_Animated : packoffset(c88);
194  float _Unigram_Letter_Grid_Data_Block17_Datum04_Byte00_Animated : packoffset(c89);
195
196  float _Unigram_Letter_Grid_Data_Block18_Datum00_Byte00_Animated : packoffset(c90);
197  float _Unigram_Letter_Grid_Data_Block18_Datum01_Byte00_Animated : packoffset(c91);
198  float _Unigram_Letter_Grid_Data_Block18_Datum02_Byte00_Animated : packoffset(c92);
199  float _Unigram_Letter_Grid_Data_Block18_Datum03_Byte00_Animated : packoffset(c93);
200  float _Unigram_Letter_Grid_Data_Block18_Datum04_Byte00_Animated : packoffset(c94);
201  float _Unigram_Letter_Grid_Data_Block19_Datum00_Byte00_Animated : packoffset(c95);
202  float _Unigram_Letter_Grid_Data_Block19_Datum01_Byte00_Animated : packoffset(c96);
203  float _Unigram_Letter_Grid_Data_Block19_Datum02_Byte00_Animated : packoffset(c97);
204  float _Unigram_Letter_Grid_Data_Block19_Datum03_Byte00_Animated : packoffset(c98);
205  float _Unigram_Letter_Grid_Data_Block19_Datum04_Byte00_Animated : packoffset(c99);
206
207  float _Unigram_Letter_Grid_Data_Block20_Datum00_Byte00_Animated : packoffset(c100);
208  float _Unigram_Letter_Grid_Data_Block20_Datum01_Byte00_Animated : packoffset(c101);
209  float _Unigram_Letter_Grid_Data_Block20_Datum02_Byte00_Animated : packoffset(c102);
210  float _Unigram_Letter_Grid_Data_Block20_Datum03_Byte00_Animated : packoffset(c103);
211  float _Unigram_Letter_Grid_Data_Block20_Datum04_Byte00_Animated : packoffset(c104);
212  float _Unigram_Letter_Grid_Data_Block21_Datum00_Byte00_Animated : packoffset(c105);
213  float _Unigram_Letter_Grid_Data_Block21_Datum01_Byte00_Animated : packoffset(c106);
214  float _Unigram_Letter_Grid_Data_Block21_Datum02_Byte00_Animated : packoffset(c107);
215  float _Unigram_Letter_Grid_Data_Block21_Datum03_Byte00_Animated : packoffset(c108);
216  float _Unigram_Letter_Grid_Data_Block21_Datum04_Byte00_Animated : packoffset(c109);
217
218  float _Unigram_Letter_Grid_Data_Block22_Datum00_Byte00_Animated : packoffset(c110);
219  float _Unigram_Letter_Grid_Data_Block22_Datum01_Byte00_Animated : packoffset(c111);
220  float _Unigram_Letter_Grid_Data_Block22_Datum02_Byte00_Animated : packoffset(c112);
221  float _Unigram_Letter_Grid_Data_Block22_Datum03_Byte00_Animated : packoffset(c113);
222  float _Unigram_Letter_Grid_Data_Block22_Datum04_Byte00_Animated : packoffset(c114);
223  float _Unigram_Letter_Grid_Data_Block23_Datum00_Byte00_Animated : packoffset(c115);
224  float _Unigram_Letter_Grid_Data_Block23_Datum01_Byte00_Animated : packoffset(c116);
225  float _Unigram_Letter_Grid_Data_Block23_Datum02_Byte00_Animated : packoffset(c117);
226  float _Unigram_Letter_Grid_Data_Block23_Datum03_Byte00_Animated : packoffset(c118);
227  float _Unigram_Letter_Grid_Data_Block23_Datum04_Byte00_Animated : packoffset(c119);
228
229  float _Unigram_Letter_Grid_Data_Block24_Datum00_Byte00_Animated : packoffset(c120);
230  float _Unigram_Letter_Grid_Data_Block24_Datum01_Byte00_Animated : packoffset(c121);
231  float _Unigram_Letter_Grid_Data_Block24_Datum02_Byte00_Animated : packoffset(c122);
232  float _Unigram_Letter_Grid_Data_Block24_Datum03_Byte00_Animated : packoffset(c123);
233  float _Unigram_Letter_Grid_Data_Block24_Datum04_Byte00_Animated : packoffset(c124);
234  float _Unigram_Letter_Grid_Data_Block25_Datum00_Byte00_Animated : packoffset(c125);
235  float _Unigram_Letter_Grid_Data_Block25_Datum01_Byte00_Animated : packoffset(c126);
236  float _Unigram_Letter_Grid_Data_Block25_Datum02_Byte00_Animated : packoffset(c127);
237  float _Unigram_Letter_Grid_Data_Block25_Datum03_Byte00_Animated : packoffset(c128);
238  float _Unigram_Letter_Grid_Data_Block25_Datum04_Byte00_Animated : packoffset(c129);
239
240  float _Unigram_Letter_Grid_Data_Block26_Datum00_Byte00_Animated : packoffset(c130);
241  float _Unigram_Letter_Grid_Data_Block26_Datum01_Byte00_Animated : packoffset(c131);
242  float _Unigram_Letter_Grid_Data_Block26_Datum02_Byte00_Animated : packoffset(c132);
243  float _Unigram_Letter_Grid_Data_Block26_Datum03_Byte00_Animated : packoffset(c133);
244  float _Unigram_Letter_Grid_Data_Block26_Datum04_Byte00_Animated : packoffset(c134);
245  float _Unigram_Letter_Grid_Data_Block27_Datum00_Byte00_Animated : packoffset(c135);
246  float _Unigram_Letter_Grid_Data_Block27_Datum01_Byte00_Animated : packoffset(c136);
247  float _Unigram_Letter_Grid_Data_Block27_Datum02_Byte00_Animated : packoffset(c137);
248  float _Unigram_Letter_Grid_Data_Block27_Datum03_Byte00_Animated : packoffset(c138);
249  float _Unigram_Letter_Grid_Data_Block27_Datum04_Byte00_Animated : packoffset(c139);
250
251  float _Unigram_Letter_Grid_Data_Block28_Datum00_Byte00_Animated : packoffset(c140);
252  float _Unigram_Letter_Grid_Data_Block28_Datum01_Byte00_Animated : packoffset(c141);
253  float _Unigram_Letter_Grid_Data_Block28_Datum02_Byte00_Animated : packoffset(c142);
254  float _Unigram_Letter_Grid_Data_Block28_Datum03_Byte00_Animated : packoffset(c143);
255  float _Unigram_Letter_Grid_Data_Block28_Datum04_Byte00_Animated : packoffset(c144);
256  float _Unigram_Letter_Grid_Data_Block29_Datum00_Byte00_Animated : packoffset(c145);
257  float _Unigram_Letter_Grid_Data_Block29_Datum01_Byte00_Animated : packoffset(c146);
258  float _Unigram_Letter_Grid_Data_Block29_Datum02_Byte00_Animated : packoffset(c147);
259  float _Unigram_Letter_Grid_Data_Block29_Datum03_Byte00_Animated : packoffset(c148);
260  float _Unigram_Letter_Grid_Data_Block29_Datum04_Byte00_Animated : packoffset(c149);
261
262  float _Unigram_Letter_Grid_Data_Block30_Datum00_Byte00_Animated : packoffset(c150);
263  float _Unigram_Letter_Grid_Data_Block30_Datum01_Byte00_Animated : packoffset(c151);
264  float _Unigram_Letter_Grid_Data_Block30_Datum02_Byte00_Animated : packoffset(c152);
265  float _Unigram_Letter_Grid_Data_Block30_Datum03_Byte00_Animated : packoffset(c153);
266  float _Unigram_Letter_Grid_Data_Block30_Datum04_Byte00_Animated : packoffset(c154);
267  float _Unigram_Letter_Grid_Data_Block31_Datum00_Byte00_Animated : packoffset(c155);
268  float _Unigram_Letter_Grid_Data_Block31_Datum01_Byte00_Animated : packoffset(c156);
269  float _Unigram_Letter_Grid_Data_Block31_Datum02_Byte00_Animated : packoffset(c157);
270  float _Unigram_Letter_Grid_Data_Block31_Datum03_Byte00_Animated : packoffset(c158);
271  float _Unigram_Letter_Grid_Data_Block31_Datum04_Byte00_Animated : packoffset(c159);
272
273  float _Unigram_Letter_Grid_Data_Block32_Datum00_Byte00_Animated : packoffset(c160);
274  float _Unigram_Letter_Grid_Data_Block32_Datum01_Byte00_Animated : packoffset(c161);
275  float _Unigram_Letter_Grid_Data_Block32_Datum02_Byte00_Animated : packoffset(c162);
276  float _Unigram_Letter_Grid_Data_Block32_Datum03_Byte00_Animated : packoffset(c163);
277  float _Unigram_Letter_Grid_Data_Block32_Datum04_Byte00_Animated : packoffset(c164);
278  float _Unigram_Letter_Grid_Data_Block33_Datum00_Byte00_Animated : packoffset(c165);
279  float _Unigram_Letter_Grid_Data_Block33_Datum01_Byte00_Animated : packoffset(c166);
280  float _Unigram_Letter_Grid_Data_Block33_Datum02_Byte00_Animated : packoffset(c167);
281  float _Unigram_Letter_Grid_Data_Block33_Datum03_Byte00_Animated : packoffset(c168);
282  float _Unigram_Letter_Grid_Data_Block33_Datum04_Byte00_Animated : packoffset(c169);
283
284  float _Unigram_Letter_Grid_Data_Block34_Datum00_Byte00_Animated : packoffset(c170);
285  float _Unigram_Letter_Grid_Data_Block34_Datum01_Byte00_Animated : packoffset(c171);
286  float _Unigram_Letter_Grid_Data_Block34_Datum02_Byte00_Animated : packoffset(c172);
287  float _Unigram_Letter_Grid_Data_Block34_Datum03_Byte00_Animated : packoffset(c173);
288  float _Unigram_Letter_Grid_Data_Block34_Datum04_Byte00_Animated : packoffset(c174);
289  float _Unigram_Letter_Grid_Data_Block35_Datum00_Byte00_Animated : packoffset(c175);
290  float _Unigram_Letter_Grid_Data_Block35_Datum01_Byte00_Animated : packoffset(c176);
291  float _Unigram_Letter_Grid_Data_Block35_Datum02_Byte00_Animated : packoffset(c177);
292  float _Unigram_Letter_Grid_Data_Block35_Datum03_Byte00_Animated : packoffset(c178);
293  float _Unigram_Letter_Grid_Data_Block35_Datum04_Byte00_Animated : packoffset(c179);
294
295  float _Unigram_Letter_Grid_Data_Block36_Datum00_Byte00_Animated : packoffset(c180);
296  float _Unigram_Letter_Grid_Data_Block36_Datum01_Byte00_Animated : packoffset(c181);
297  float _Unigram_Letter_Grid_Data_Block36_Datum02_Byte00_Animated : packoffset(c182);
298  float _Unigram_Letter_Grid_Data_Block36_Datum03_Byte00_Animated : packoffset(c183);
299  float _Unigram_Letter_Grid_Data_Block36_Datum04_Byte00_Animated : packoffset(c184);
300  float _Unigram_Letter_Grid_Data_Block37_Datum00_Byte00_Animated : packoffset(c185);
301  float _Unigram_Letter_Grid_Data_Block37_Datum01_Byte00_Animated : packoffset(c186);
302  float _Unigram_Letter_Grid_Data_Block37_Datum02_Byte00_Animated : packoffset(c187);
303  float _Unigram_Letter_Grid_Data_Block37_Datum03_Byte00_Animated : packoffset(c188);
304  float _Unigram_Letter_Grid_Data_Block37_Datum04_Byte00_Animated : packoffset(c189);
305
306  float _Unigram_Letter_Grid_Data_Block38_Datum00_Byte00_Animated : packoffset(c190);
307  float _Unigram_Letter_Grid_Data_Block38_Datum01_Byte00_Animated : packoffset(c191);
308  float _Unigram_Letter_Grid_Data_Block38_Datum02_Byte00_Animated : packoffset(c192);
309  float _Unigram_Letter_Grid_Data_Block38_Datum03_Byte00_Animated : packoffset(c193);
310  float _Unigram_Letter_Grid_Data_Block38_Datum04_Byte00_Animated : packoffset(c194);
311  float _Unigram_Letter_Grid_Data_Block39_Datum00_Byte00_Animated : packoffset(c195);
312  float _Unigram_Letter_Grid_Data_Block39_Datum01_Byte00_Animated : packoffset(c196);
313  float _Unigram_Letter_Grid_Data_Block39_Datum02_Byte00_Animated : packoffset(c197);
314  float _Unigram_Letter_Grid_Data_Block39_Datum03_Byte00_Animated : packoffset(c198);
315  float _Unigram_Letter_Grid_Data_Block39_Datum04_Byte00_Animated : packoffset(c199);
316}
317#endif  // ULG_D0
318
319#if defined(ULG_D1)
320cbuffer UnigramLetterGridDataByte01_Animated
321{
322  float _Unigram_Letter_Data_Byte01[ULG_NUM_BLOCKS * ULG_BLOCK_WIDTH] : packoffset(c0);
323
324  float _Unigram_Letter_Grid_Data_Block00_Datum00_Byte01_Animated : packoffset(c0);
325  float _Unigram_Letter_Grid_Data_Block00_Datum01_Byte01_Animated : packoffset(c1);
326  float _Unigram_Letter_Grid_Data_Block00_Datum02_Byte01_Animated : packoffset(c2);
327  float _Unigram_Letter_Grid_Data_Block00_Datum03_Byte01_Animated : packoffset(c3);
328  float _Unigram_Letter_Grid_Data_Block00_Datum04_Byte01_Animated : packoffset(c4);
329  float _Unigram_Letter_Grid_Data_Block01_Datum00_Byte01_Animated : packoffset(c5);
330  float _Unigram_Letter_Grid_Data_Block01_Datum01_Byte01_Animated : packoffset(c6);
331  float _Unigram_Letter_Grid_Data_Block01_Datum02_Byte01_Animated : packoffset(c7);
332  float _Unigram_Letter_Grid_Data_Block01_Datum03_Byte01_Animated : packoffset(c8);
333  float _Unigram_Letter_Grid_Data_Block01_Datum04_Byte01_Animated : packoffset(c9);
334
335  float _Unigram_Letter_Grid_Data_Block02_Datum00_Byte01_Animated : packoffset(c10);
336  float _Unigram_Letter_Grid_Data_Block02_Datum01_Byte01_Animated : packoffset(c11);
337  float _Unigram_Letter_Grid_Data_Block02_Datum02_Byte01_Animated : packoffset(c12);
338  float _Unigram_Letter_Grid_Data_Block02_Datum03_Byte01_Animated : packoffset(c13);
339  float _Unigram_Letter_Grid_Data_Block02_Datum04_Byte01_Animated : packoffset(c14);
340  float _Unigram_Letter_Grid_Data_Block03_Datum00_Byte01_Animated : packoffset(c15);
341  float _Unigram_Letter_Grid_Data_Block03_Datum01_Byte01_Animated : packoffset(c16);
342  float _Unigram_Letter_Grid_Data_Block03_Datum02_Byte01_Animated : packoffset(c17);
343  float _Unigram_Letter_Grid_Data_Block03_Datum03_Byte01_Animated : packoffset(c18);
344  float _Unigram_Letter_Grid_Data_Block03_Datum04_Byte01_Animated : packoffset(c19);
345
346  float _Unigram_Letter_Grid_Data_Block04_Datum00_Byte01_Animated : packoffset(c20);
347  float _Unigram_Letter_Grid_Data_Block04_Datum01_Byte01_Animated : packoffset(c21);
348  float _Unigram_Letter_Grid_Data_Block04_Datum02_Byte01_Animated : packoffset(c22);
349  float _Unigram_Letter_Grid_Data_Block04_Datum03_Byte01_Animated : packoffset(c23);
350  float _Unigram_Letter_Grid_Data_Block04_Datum04_Byte01_Animated : packoffset(c24);
351  float _Unigram_Letter_Grid_Data_Block05_Datum00_Byte01_Animated : packoffset(c25);
352  float _Unigram_Letter_Grid_Data_Block05_Datum01_Byte01_Animated : packoffset(c26);
353  float _Unigram_Letter_Grid_Data_Block05_Datum02_Byte01_Animated : packoffset(c27);
354  float _Unigram_Letter_Grid_Data_Block05_Datum03_Byte01_Animated : packoffset(c28);
355  float _Unigram_Letter_Grid_Data_Block05_Datum04_Byte01_Animated : packoffset(c29);
356
357  float _Unigram_Letter_Grid_Data_Block06_Datum00_Byte01_Animated : packoffset(c30);
358  float _Unigram_Letter_Grid_Data_Block06_Datum01_Byte01_Animated : packoffset(c31);
359  float _Unigram_Letter_Grid_Data_Block06_Datum02_Byte01_Animated : packoffset(c32);
360  float _Unigram_Letter_Grid_Data_Block06_Datum03_Byte01_Animated : packoffset(c33);
361  float _Unigram_Letter_Grid_Data_Block06_Datum04_Byte01_Animated : packoffset(c34);
362  float _Unigram_Letter_Grid_Data_Block07_Datum00_Byte01_Animated : packoffset(c35);
363  float _Unigram_Letter_Grid_Data_Block07_Datum01_Byte01_Animated : packoffset(c36);
364  float _Unigram_Letter_Grid_Data_Block07_Datum02_Byte01_Animated : packoffset(c37);
365  float _Unigram_Letter_Grid_Data_Block07_Datum03_Byte01_Animated : packoffset(c38);
366  float _Unigram_Letter_Grid_Data_Block07_Datum04_Byte01_Animated : packoffset(c39);
367
368  float _Unigram_Letter_Grid_Data_Block08_Datum00_Byte01_Animated : packoffset(c40);
369  float _Unigram_Letter_Grid_Data_Block08_Datum01_Byte01_Animated : packoffset(c41);
370  float _Unigram_Letter_Grid_Data_Block08_Datum02_Byte01_Animated : packoffset(c42);
371  float _Unigram_Letter_Grid_Data_Block08_Datum03_Byte01_Animated : packoffset(c43);
372  float _Unigram_Letter_Grid_Data_Block08_Datum04_Byte01_Animated : packoffset(c44);
373  float _Unigram_Letter_Grid_Data_Block09_Datum00_Byte01_Animated : packoffset(c45);
374  float _Unigram_Letter_Grid_Data_Block09_Datum01_Byte01_Animated : packoffset(c46);
375  float _Unigram_Letter_Grid_Data_Block09_Datum02_Byte01_Animated : packoffset(c47);
376  float _Unigram_Letter_Grid_Data_Block09_Datum03_Byte01_Animated : packoffset(c48);
377  float _Unigram_Letter_Grid_Data_Block09_Datum04_Byte01_Animated : packoffset(c49);
378
379  float _Unigram_Letter_Grid_Data_Block10_Datum00_Byte01_Animated : packoffset(c50);
380  float _Unigram_Letter_Grid_Data_Block10_Datum01_Byte01_Animated : packoffset(c51);
381  float _Unigram_Letter_Grid_Data_Block10_Datum02_Byte01_Animated : packoffset(c52);
382  float _Unigram_Letter_Grid_Data_Block10_Datum03_Byte01_Animated : packoffset(c53);
383  float _Unigram_Letter_Grid_Data_Block10_Datum04_Byte01_Animated : packoffset(c54);
384  float _Unigram_Letter_Grid_Data_Block11_Datum00_Byte01_Animated : packoffset(c55);
385  float _Unigram_Letter_Grid_Data_Block11_Datum01_Byte01_Animated : packoffset(c56);
386  float _Unigram_Letter_Grid_Data_Block11_Datum02_Byte01_Animated : packoffset(c57);
387  float _Unigram_Letter_Grid_Data_Block11_Datum03_Byte01_Animated : packoffset(c58);
388  float _Unigram_Letter_Grid_Data_Block11_Datum04_Byte01_Animated : packoffset(c59);
389
390  float _Unigram_Letter_Grid_Data_Block12_Datum00_Byte01_Animated : packoffset(c60);
391  float _Unigram_Letter_Grid_Data_Block12_Datum01_Byte01_Animated : packoffset(c61);
392  float _Unigram_Letter_Grid_Data_Block12_Datum02_Byte01_Animated : packoffset(c62);
393  float _Unigram_Letter_Grid_Data_Block12_Datum03_Byte01_Animated : packoffset(c63);
394  float _Unigram_Letter_Grid_Data_Block12_Datum04_Byte01_Animated : packoffset(c64);
395  float _Unigram_Letter_Grid_Data_Block13_Datum00_Byte01_Animated : packoffset(c65);
396  float _Unigram_Letter_Grid_Data_Block13_Datum01_Byte01_Animated : packoffset(c66);
397  float _Unigram_Letter_Grid_Data_Block13_Datum02_Byte01_Animated : packoffset(c67);
398  float _Unigram_Letter_Grid_Data_Block13_Datum03_Byte01_Animated : packoffset(c68);
399  float _Unigram_Letter_Grid_Data_Block13_Datum04_Byte01_Animated : packoffset(c69);
400
401  float _Unigram_Letter_Grid_Data_Block14_Datum00_Byte01_Animated : packoffset(c70);
402  float _Unigram_Letter_Grid_Data_Block14_Datum01_Byte01_Animated : packoffset(c71);
403  float _Unigram_Letter_Grid_Data_Block14_Datum02_Byte01_Animated : packoffset(c72);
404  float _Unigram_Letter_Grid_Data_Block14_Datum03_Byte01_Animated : packoffset(c73);
405  float _Unigram_Letter_Grid_Data_Block14_Datum04_Byte01_Animated : packoffset(c74);
406  float _Unigram_Letter_Grid_Data_Block15_Datum00_Byte01_Animated : packoffset(c75);
407  float _Unigram_Letter_Grid_Data_Block15_Datum01_Byte01_Animated : packoffset(c76);
408  float _Unigram_Letter_Grid_Data_Block15_Datum02_Byte01_Animated : packoffset(c77);
409  float _Unigram_Letter_Grid_Data_Block15_Datum03_Byte01_Animated : packoffset(c78);
410  float _Unigram_Letter_Grid_Data_Block15_Datum04_Byte01_Animated : packoffset(c79);
411
412  float _Unigram_Letter_Grid_Data_Block16_Datum00_Byte01_Animated : packoffset(c80);
413  float _Unigram_Letter_Grid_Data_Block16_Datum01_Byte01_Animated : packoffset(c81);
414  float _Unigram_Letter_Grid_Data_Block16_Datum02_Byte01_Animated : packoffset(c82);
415  float _Unigram_Letter_Grid_Data_Block16_Datum03_Byte01_Animated : packoffset(c83);
416  float _Unigram_Letter_Grid_Data_Block16_Datum04_Byte01_Animated : packoffset(c84);
417  float _Unigram_Letter_Grid_Data_Block17_Datum00_Byte01_Animated : packoffset(c85);
418  float _Unigram_Letter_Grid_Data_Block17_Datum01_Byte01_Animated : packoffset(c86);
419  float _Unigram_Letter_Grid_Data_Block17_Datum02_Byte01_Animated : packoffset(c87);
420  float _Unigram_Letter_Grid_Data_Block17_Datum03_Byte01_Animated : packoffset(c88);
421  float _Unigram_Letter_Grid_Data_Block17_Datum04_Byte01_Animated : packoffset(c89);
422
423  float _Unigram_Letter_Grid_Data_Block18_Datum00_Byte01_Animated : packoffset(c90);
424  float _Unigram_Letter_Grid_Data_Block18_Datum01_Byte01_Animated : packoffset(c91);
425  float _Unigram_Letter_Grid_Data_Block18_Datum02_Byte01_Animated : packoffset(c92);
426  float _Unigram_Letter_Grid_Data_Block18_Datum03_Byte01_Animated : packoffset(c93);
427  float _Unigram_Letter_Grid_Data_Block18_Datum04_Byte01_Animated : packoffset(c94);
428  float _Unigram_Letter_Grid_Data_Block19_Datum00_Byte01_Animated : packoffset(c95);
429  float _Unigram_Letter_Grid_Data_Block19_Datum01_Byte01_Animated : packoffset(c96);
430  float _Unigram_Letter_Grid_Data_Block19_Datum02_Byte01_Animated : packoffset(c97);
431  float _Unigram_Letter_Grid_Data_Block19_Datum03_Byte01_Animated : packoffset(c98);
432  float _Unigram_Letter_Grid_Data_Block19_Datum04_Byte01_Animated : packoffset(c99);
433
434  float _Unigram_Letter_Grid_Data_Block20_Datum00_Byte01_Animated : packoffset(c100);
435  float _Unigram_Letter_Grid_Data_Block20_Datum01_Byte01_Animated : packoffset(c101);
436  float _Unigram_Letter_Grid_Data_Block20_Datum02_Byte01_Animated : packoffset(c102);
437  float _Unigram_Letter_Grid_Data_Block20_Datum03_Byte01_Animated : packoffset(c103);
438  float _Unigram_Letter_Grid_Data_Block20_Datum04_Byte01_Animated : packoffset(c104);
439  float _Unigram_Letter_Grid_Data_Block21_Datum00_Byte01_Animated : packoffset(c105);
440  float _Unigram_Letter_Grid_Data_Block21_Datum01_Byte01_Animated : packoffset(c106);
441  float _Unigram_Letter_Grid_Data_Block21_Datum02_Byte01_Animated : packoffset(c107);
442  float _Unigram_Letter_Grid_Data_Block21_Datum03_Byte01_Animated : packoffset(c108);
443  float _Unigram_Letter_Grid_Data_Block21_Datum04_Byte01_Animated : packoffset(c109);
444
445  float _Unigram_Letter_Grid_Data_Block22_Datum00_Byte01_Animated : packoffset(c110);
446  float _Unigram_Letter_Grid_Data_Block22_Datum01_Byte01_Animated : packoffset(c111);
447  float _Unigram_Letter_Grid_Data_Block22_Datum02_Byte01_Animated : packoffset(c112);
448  float _Unigram_Letter_Grid_Data_Block22_Datum03_Byte01_Animated : packoffset(c113);
449  float _Unigram_Letter_Grid_Data_Block22_Datum04_Byte01_Animated : packoffset(c114);
450  float _Unigram_Letter_Grid_Data_Block23_Datum00_Byte01_Animated : packoffset(c115);
451  float _Unigram_Letter_Grid_Data_Block23_Datum01_Byte01_Animated : packoffset(c116);
452  float _Unigram_Letter_Grid_Data_Block23_Datum02_Byte01_Animated : packoffset(c117);
453  float _Unigram_Letter_Grid_Data_Block23_Datum03_Byte01_Animated : packoffset(c118);
454  float _Unigram_Letter_Grid_Data_Block23_Datum04_Byte01_Animated : packoffset(c119);
455
456  float _Unigram_Letter_Grid_Data_Block24_Datum00_Byte01_Animated : packoffset(c120);
457  float _Unigram_Letter_Grid_Data_Block24_Datum01_Byte01_Animated : packoffset(c121);
458  float _Unigram_Letter_Grid_Data_Block24_Datum02_Byte01_Animated : packoffset(c122);
459  float _Unigram_Letter_Grid_Data_Block24_Datum03_Byte01_Animated : packoffset(c123);
460  float _Unigram_Letter_Grid_Data_Block24_Datum04_Byte01_Animated : packoffset(c124);
461  float _Unigram_Letter_Grid_Data_Block25_Datum00_Byte01_Animated : packoffset(c125);
462  float _Unigram_Letter_Grid_Data_Block25_Datum01_Byte01_Animated : packoffset(c126);
463  float _Unigram_Letter_Grid_Data_Block25_Datum02_Byte01_Animated : packoffset(c127);
464  float _Unigram_Letter_Grid_Data_Block25_Datum03_Byte01_Animated : packoffset(c128);
465  float _Unigram_Letter_Grid_Data_Block25_Datum04_Byte01_Animated : packoffset(c129);
466
467  float _Unigram_Letter_Grid_Data_Block26_Datum00_Byte01_Animated : packoffset(c130);
468  float _Unigram_Letter_Grid_Data_Block26_Datum01_Byte01_Animated : packoffset(c131);
469  float _Unigram_Letter_Grid_Data_Block26_Datum02_Byte01_Animated : packoffset(c132);
470  float _Unigram_Letter_Grid_Data_Block26_Datum03_Byte01_Animated : packoffset(c133);
471  float _Unigram_Letter_Grid_Data_Block26_Datum04_Byte01_Animated : packoffset(c134);
472  float _Unigram_Letter_Grid_Data_Block27_Datum00_Byte01_Animated : packoffset(c135);
473  float _Unigram_Letter_Grid_Data_Block27_Datum01_Byte01_Animated : packoffset(c136);
474  float _Unigram_Letter_Grid_Data_Block27_Datum02_Byte01_Animated : packoffset(c137);
475  float _Unigram_Letter_Grid_Data_Block27_Datum03_Byte01_Animated : packoffset(c138);
476  float _Unigram_Letter_Grid_Data_Block27_Datum04_Byte01_Animated : packoffset(c139);
477
478  float _Unigram_Letter_Grid_Data_Block28_Datum00_Byte01_Animated : packoffset(c140);
479  float _Unigram_Letter_Grid_Data_Block28_Datum01_Byte01_Animated : packoffset(c141);
480  float _Unigram_Letter_Grid_Data_Block28_Datum02_Byte01_Animated : packoffset(c142);
481  float _Unigram_Letter_Grid_Data_Block28_Datum03_Byte01_Animated : packoffset(c143);
482  float _Unigram_Letter_Grid_Data_Block28_Datum04_Byte01_Animated : packoffset(c144);
483  float _Unigram_Letter_Grid_Data_Block29_Datum00_Byte01_Animated : packoffset(c145);
484  float _Unigram_Letter_Grid_Data_Block29_Datum01_Byte01_Animated : packoffset(c146);
485  float _Unigram_Letter_Grid_Data_Block29_Datum02_Byte01_Animated : packoffset(c147);
486  float _Unigram_Letter_Grid_Data_Block29_Datum03_Byte01_Animated : packoffset(c148);
487  float _Unigram_Letter_Grid_Data_Block29_Datum04_Byte01_Animated : packoffset(c149);
488
489  float _Unigram_Letter_Grid_Data_Block30_Datum00_Byte01_Animated : packoffset(c150);
490  float _Unigram_Letter_Grid_Data_Block30_Datum01_Byte01_Animated : packoffset(c151);
491  float _Unigram_Letter_Grid_Data_Block30_Datum02_Byte01_Animated : packoffset(c152);
492  float _Unigram_Letter_Grid_Data_Block30_Datum03_Byte01_Animated : packoffset(c153);
493  float _Unigram_Letter_Grid_Data_Block30_Datum04_Byte01_Animated : packoffset(c154);
494  float _Unigram_Letter_Grid_Data_Block31_Datum00_Byte01_Animated : packoffset(c155);
495  float _Unigram_Letter_Grid_Data_Block31_Datum01_Byte01_Animated : packoffset(c156);
496  float _Unigram_Letter_Grid_Data_Block31_Datum02_Byte01_Animated : packoffset(c157);
497  float _Unigram_Letter_Grid_Data_Block31_Datum03_Byte01_Animated : packoffset(c158);
498  float _Unigram_Letter_Grid_Data_Block31_Datum04_Byte01_Animated : packoffset(c159);
499
500  float _Unigram_Letter_Grid_Data_Block32_Datum00_Byte01_Animated : packoffset(c160);
501  float _Unigram_Letter_Grid_Data_Block32_Datum01_Byte01_Animated : packoffset(c161);
502  float _Unigram_Letter_Grid_Data_Block32_Datum02_Byte01_Animated : packoffset(c162);
503  float _Unigram_Letter_Grid_Data_Block32_Datum03_Byte01_Animated : packoffset(c163);
504  float _Unigram_Letter_Grid_Data_Block32_Datum04_Byte01_Animated : packoffset(c164);
505  float _Unigram_Letter_Grid_Data_Block33_Datum00_Byte01_Animated : packoffset(c165);
506  float _Unigram_Letter_Grid_Data_Block33_Datum01_Byte01_Animated : packoffset(c166);
507  float _Unigram_Letter_Grid_Data_Block33_Datum02_Byte01_Animated : packoffset(c167);
508  float _Unigram_Letter_Grid_Data_Block33_Datum03_Byte01_Animated : packoffset(c168);
509  float _Unigram_Letter_Grid_Data_Block33_Datum04_Byte01_Animated : packoffset(c169);
510
511  float _Unigram_Letter_Grid_Data_Block34_Datum00_Byte01_Animated : packoffset(c170);
512  float _Unigram_Letter_Grid_Data_Block34_Datum01_Byte01_Animated : packoffset(c171);
513  float _Unigram_Letter_Grid_Data_Block34_Datum02_Byte01_Animated : packoffset(c172);
514  float _Unigram_Letter_Grid_Data_Block34_Datum03_Byte01_Animated : packoffset(c173);
515  float _Unigram_Letter_Grid_Data_Block34_Datum04_Byte01_Animated : packoffset(c174);
516  float _Unigram_Letter_Grid_Data_Block35_Datum00_Byte01_Animated : packoffset(c175);
517  float _Unigram_Letter_Grid_Data_Block35_Datum01_Byte01_Animated : packoffset(c176);
518  float _Unigram_Letter_Grid_Data_Block35_Datum02_Byte01_Animated : packoffset(c177);
519  float _Unigram_Letter_Grid_Data_Block35_Datum03_Byte01_Animated : packoffset(c178);
520  float _Unigram_Letter_Grid_Data_Block35_Datum04_Byte01_Animated : packoffset(c179);
521
522  float _Unigram_Letter_Grid_Data_Block36_Datum00_Byte01_Animated : packoffset(c180);
523  float _Unigram_Letter_Grid_Data_Block36_Datum01_Byte01_Animated : packoffset(c181);
524  float _Unigram_Letter_Grid_Data_Block36_Datum02_Byte01_Animated : packoffset(c182);
525  float _Unigram_Letter_Grid_Data_Block36_Datum03_Byte01_Animated : packoffset(c183);
526  float _Unigram_Letter_Grid_Data_Block36_Datum04_Byte01_Animated : packoffset(c184);
527  float _Unigram_Letter_Grid_Data_Block37_Datum00_Byte01_Animated : packoffset(c185);
528  float _Unigram_Letter_Grid_Data_Block37_Datum01_Byte01_Animated : packoffset(c186);
529  float _Unigram_Letter_Grid_Data_Block37_Datum02_Byte01_Animated : packoffset(c187);
530  float _Unigram_Letter_Grid_Data_Block37_Datum03_Byte01_Animated : packoffset(c188);
531  float _Unigram_Letter_Grid_Data_Block37_Datum04_Byte01_Animated : packoffset(c189);
532
533  float _Unigram_Letter_Grid_Data_Block38_Datum00_Byte01_Animated : packoffset(c190);
534  float _Unigram_Letter_Grid_Data_Block38_Datum01_Byte01_Animated : packoffset(c191);
535  float _Unigram_Letter_Grid_Data_Block38_Datum02_Byte01_Animated : packoffset(c192);
536  float _Unigram_Letter_Grid_Data_Block38_Datum03_Byte01_Animated : packoffset(c193);
537  float _Unigram_Letter_Grid_Data_Block38_Datum04_Byte01_Animated : packoffset(c194);
538  float _Unigram_Letter_Grid_Data_Block39_Datum00_Byte01_Animated : packoffset(c195);
539  float _Unigram_Letter_Grid_Data_Block39_Datum01_Byte01_Animated : packoffset(c196);
540  float _Unigram_Letter_Grid_Data_Block39_Datum02_Byte01_Animated : packoffset(c197);
541  float _Unigram_Letter_Grid_Data_Block39_Datum03_Byte01_Animated : packoffset(c198);
542  float _Unigram_Letter_Grid_Data_Block39_Datum04_Byte01_Animated : packoffset(c199);
543}
544#endif  // ULG_D1
545
546void PreventCbufferElision(v2f i, inout float a) {
547  // Hack to prevent cbuffer from getting optimized out.
548  [branch]
549  if (i.uv01.x < 0) {
550    a = 0;
551#if defined(ULG_VP)
552    // Add pairs of products since each pair compiles down to a single `mad`
553    // instruction. This reduces the instruction count of this function by
554    // ~50%. (Thank you d4rkpl4y3r for this tip!)
555    a +=
556      _Unigram_Letter_Grid_Block00_Visual_Pointer_Animated *
557      _Unigram_Letter_Grid_Block01_Visual_Pointer_Animated +
558      _Unigram_Letter_Grid_Block02_Visual_Pointer_Animated *
559      _Unigram_Letter_Grid_Block03_Visual_Pointer_Animated +
560      _Unigram_Letter_Grid_Block04_Visual_Pointer_Animated *
561      _Unigram_Letter_Grid_Block05_Visual_Pointer_Animated +
562      _Unigram_Letter_Grid_Block06_Visual_Pointer_Animated *
563      _Unigram_Letter_Grid_Block07_Visual_Pointer_Animated +
564      _Unigram_Letter_Grid_Block08_Visual_Pointer_Animated *
565      _Unigram_Letter_Grid_Block09_Visual_Pointer_Animated +
566      _Unigram_Letter_Grid_Block10_Visual_Pointer_Animated *
567      _Unigram_Letter_Grid_Block11_Visual_Pointer_Animated +
568      _Unigram_Letter_Grid_Block12_Visual_Pointer_Animated *
569      _Unigram_Letter_Grid_Block13_Visual_Pointer_Animated +
570      _Unigram_Letter_Grid_Block14_Visual_Pointer_Animated *
571      _Unigram_Letter_Grid_Block15_Visual_Pointer_Animated +
572      _Unigram_Letter_Grid_Block16_Visual_Pointer_Animated *
573      _Unigram_Letter_Grid_Block17_Visual_Pointer_Animated +
574      _Unigram_Letter_Grid_Block18_Visual_Pointer_Animated *
575      _Unigram_Letter_Grid_Block19_Visual_Pointer_Animated +
576      _Unigram_Letter_Grid_Block20_Visual_Pointer_Animated *
577      _Unigram_Letter_Grid_Block21_Visual_Pointer_Animated +
578      _Unigram_Letter_Grid_Block22_Visual_Pointer_Animated *
579      _Unigram_Letter_Grid_Block23_Visual_Pointer_Animated +
580      _Unigram_Letter_Grid_Block24_Visual_Pointer_Animated *
581      _Unigram_Letter_Grid_Block25_Visual_Pointer_Animated +
582      _Unigram_Letter_Grid_Block26_Visual_Pointer_Animated *
583      _Unigram_Letter_Grid_Block27_Visual_Pointer_Animated +
584      _Unigram_Letter_Grid_Block28_Visual_Pointer_Animated *
585      _Unigram_Letter_Grid_Block29_Visual_Pointer_Animated +
586      _Unigram_Letter_Grid_Block30_Visual_Pointer_Animated *
587      _Unigram_Letter_Grid_Block31_Visual_Pointer_Animated +
588      _Unigram_Letter_Grid_Block32_Visual_Pointer_Animated *
589      _Unigram_Letter_Grid_Block33_Visual_Pointer_Animated +
590      _Unigram_Letter_Grid_Block34_Visual_Pointer_Animated *
591      _Unigram_Letter_Grid_Block35_Visual_Pointer_Animated +
592      _Unigram_Letter_Grid_Block36_Visual_Pointer_Animated *
593      _Unigram_Letter_Grid_Block37_Visual_Pointer_Animated +
594      _Unigram_Letter_Grid_Block38_Visual_Pointer_Animated *
595      _Unigram_Letter_Grid_Block39_Visual_Pointer_Animated;
596#endif  // ULG_VP
597#if defined(ULG_D0)
598    a +=
599      _Unigram_Letter_Grid_Data_Block00_Datum00_Byte00_Animated *
600      _Unigram_Letter_Grid_Data_Block00_Datum01_Byte00_Animated +
601      _Unigram_Letter_Grid_Data_Block00_Datum02_Byte00_Animated *
602      _Unigram_Letter_Grid_Data_Block00_Datum03_Byte00_Animated +
603      _Unigram_Letter_Grid_Data_Block00_Datum04_Byte00_Animated *
604      _Unigram_Letter_Grid_Data_Block01_Datum00_Byte00_Animated +
605      _Unigram_Letter_Grid_Data_Block01_Datum01_Byte00_Animated *
606      _Unigram_Letter_Grid_Data_Block01_Datum02_Byte00_Animated +
607      _Unigram_Letter_Grid_Data_Block01_Datum03_Byte00_Animated *
608      _Unigram_Letter_Grid_Data_Block01_Datum04_Byte00_Animated +
609      _Unigram_Letter_Grid_Data_Block02_Datum00_Byte00_Animated *
610      _Unigram_Letter_Grid_Data_Block02_Datum01_Byte00_Animated +
611      _Unigram_Letter_Grid_Data_Block02_Datum02_Byte00_Animated *
612      _Unigram_Letter_Grid_Data_Block02_Datum03_Byte00_Animated +
613      _Unigram_Letter_Grid_Data_Block02_Datum04_Byte00_Animated *
614      _Unigram_Letter_Grid_Data_Block03_Datum00_Byte00_Animated +
615      _Unigram_Letter_Grid_Data_Block03_Datum01_Byte00_Animated *
616      _Unigram_Letter_Grid_Data_Block03_Datum02_Byte00_Animated +
617      _Unigram_Letter_Grid_Data_Block03_Datum03_Byte00_Animated *
618      _Unigram_Letter_Grid_Data_Block03_Datum04_Byte00_Animated +
619      _Unigram_Letter_Grid_Data_Block04_Datum00_Byte00_Animated *
620      _Unigram_Letter_Grid_Data_Block04_Datum01_Byte00_Animated +
621      _Unigram_Letter_Grid_Data_Block04_Datum02_Byte00_Animated *
622      _Unigram_Letter_Grid_Data_Block04_Datum03_Byte00_Animated +
623      _Unigram_Letter_Grid_Data_Block04_Datum04_Byte00_Animated *
624      _Unigram_Letter_Grid_Data_Block05_Datum00_Byte00_Animated +
625      _Unigram_Letter_Grid_Data_Block05_Datum01_Byte00_Animated *
626      _Unigram_Letter_Grid_Data_Block05_Datum02_Byte00_Animated +
627      _Unigram_Letter_Grid_Data_Block05_Datum03_Byte00_Animated *
628      _Unigram_Letter_Grid_Data_Block05_Datum04_Byte00_Animated +
629      _Unigram_Letter_Grid_Data_Block06_Datum00_Byte00_Animated *
630      _Unigram_Letter_Grid_Data_Block06_Datum01_Byte00_Animated +
631      _Unigram_Letter_Grid_Data_Block06_Datum02_Byte00_Animated *
632      _Unigram_Letter_Grid_Data_Block06_Datum03_Byte00_Animated +
633      _Unigram_Letter_Grid_Data_Block06_Datum04_Byte00_Animated *
634      _Unigram_Letter_Grid_Data_Block07_Datum00_Byte00_Animated +
635      _Unigram_Letter_Grid_Data_Block07_Datum01_Byte00_Animated *
636      _Unigram_Letter_Grid_Data_Block07_Datum02_Byte00_Animated +
637      _Unigram_Letter_Grid_Data_Block07_Datum03_Byte00_Animated *
638      _Unigram_Letter_Grid_Data_Block07_Datum04_Byte00_Animated +
639      _Unigram_Letter_Grid_Data_Block08_Datum00_Byte00_Animated *
640      _Unigram_Letter_Grid_Data_Block08_Datum01_Byte00_Animated +
641      _Unigram_Letter_Grid_Data_Block08_Datum02_Byte00_Animated *
642      _Unigram_Letter_Grid_Data_Block08_Datum03_Byte00_Animated +
643      _Unigram_Letter_Grid_Data_Block08_Datum04_Byte00_Animated *
644      _Unigram_Letter_Grid_Data_Block09_Datum00_Byte00_Animated +
645      _Unigram_Letter_Grid_Data_Block09_Datum01_Byte00_Animated *
646      _Unigram_Letter_Grid_Data_Block09_Datum02_Byte00_Animated +
647      _Unigram_Letter_Grid_Data_Block09_Datum03_Byte00_Animated *
648      _Unigram_Letter_Grid_Data_Block09_Datum04_Byte00_Animated +
649      _Unigram_Letter_Grid_Data_Block10_Datum00_Byte00_Animated *
650      _Unigram_Letter_Grid_Data_Block10_Datum01_Byte00_Animated +
651      _Unigram_Letter_Grid_Data_Block10_Datum02_Byte00_Animated *
652      _Unigram_Letter_Grid_Data_Block10_Datum03_Byte00_Animated +
653      _Unigram_Letter_Grid_Data_Block10_Datum04_Byte00_Animated *
654      _Unigram_Letter_Grid_Data_Block11_Datum00_Byte00_Animated +
655      _Unigram_Letter_Grid_Data_Block11_Datum01_Byte00_Animated *
656      _Unigram_Letter_Grid_Data_Block11_Datum02_Byte00_Animated +
657      _Unigram_Letter_Grid_Data_Block11_Datum03_Byte00_Animated *
658      _Unigram_Letter_Grid_Data_Block11_Datum04_Byte00_Animated +
659      _Unigram_Letter_Grid_Data_Block12_Datum00_Byte00_Animated *
660      _Unigram_Letter_Grid_Data_Block12_Datum01_Byte00_Animated +
661      _Unigram_Letter_Grid_Data_Block12_Datum02_Byte00_Animated *
662      _Unigram_Letter_Grid_Data_Block12_Datum03_Byte00_Animated +
663      _Unigram_Letter_Grid_Data_Block12_Datum04_Byte00_Animated *
664      _Unigram_Letter_Grid_Data_Block13_Datum00_Byte00_Animated +
665      _Unigram_Letter_Grid_Data_Block13_Datum01_Byte00_Animated *
666      _Unigram_Letter_Grid_Data_Block13_Datum02_Byte00_Animated +
667      _Unigram_Letter_Grid_Data_Block13_Datum03_Byte00_Animated *
668      _Unigram_Letter_Grid_Data_Block13_Datum04_Byte00_Animated +
669      _Unigram_Letter_Grid_Data_Block14_Datum00_Byte00_Animated *
670      _Unigram_Letter_Grid_Data_Block14_Datum01_Byte00_Animated +
671      _Unigram_Letter_Grid_Data_Block14_Datum02_Byte00_Animated *
672      _Unigram_Letter_Grid_Data_Block14_Datum03_Byte00_Animated +
673      _Unigram_Letter_Grid_Data_Block14_Datum04_Byte00_Animated *
674      _Unigram_Letter_Grid_Data_Block15_Datum00_Byte00_Animated +
675      _Unigram_Letter_Grid_Data_Block15_Datum01_Byte00_Animated *
676      _Unigram_Letter_Grid_Data_Block15_Datum02_Byte00_Animated +
677      _Unigram_Letter_Grid_Data_Block15_Datum03_Byte00_Animated *
678      _Unigram_Letter_Grid_Data_Block15_Datum04_Byte00_Animated +
679      _Unigram_Letter_Grid_Data_Block16_Datum00_Byte00_Animated *
680      _Unigram_Letter_Grid_Data_Block16_Datum01_Byte00_Animated +
681      _Unigram_Letter_Grid_Data_Block16_Datum02_Byte00_Animated *
682      _Unigram_Letter_Grid_Data_Block16_Datum03_Byte00_Animated +
683      _Unigram_Letter_Grid_Data_Block16_Datum04_Byte00_Animated *
684      _Unigram_Letter_Grid_Data_Block17_Datum00_Byte00_Animated +
685      _Unigram_Letter_Grid_Data_Block17_Datum01_Byte00_Animated *
686      _Unigram_Letter_Grid_Data_Block17_Datum02_Byte00_Animated +
687      _Unigram_Letter_Grid_Data_Block17_Datum03_Byte00_Animated *
688      _Unigram_Letter_Grid_Data_Block17_Datum04_Byte00_Animated +
689      _Unigram_Letter_Grid_Data_Block18_Datum00_Byte00_Animated *
690      _Unigram_Letter_Grid_Data_Block18_Datum01_Byte00_Animated +
691      _Unigram_Letter_Grid_Data_Block18_Datum02_Byte00_Animated *
692      _Unigram_Letter_Grid_Data_Block18_Datum03_Byte00_Animated +
693      _Unigram_Letter_Grid_Data_Block18_Datum04_Byte00_Animated *
694      _Unigram_Letter_Grid_Data_Block19_Datum00_Byte00_Animated +
695      _Unigram_Letter_Grid_Data_Block19_Datum01_Byte00_Animated *
696      _Unigram_Letter_Grid_Data_Block19_Datum02_Byte00_Animated +
697      _Unigram_Letter_Grid_Data_Block19_Datum03_Byte00_Animated *
698      _Unigram_Letter_Grid_Data_Block19_Datum04_Byte00_Animated +
699      _Unigram_Letter_Grid_Data_Block20_Datum00_Byte00_Animated *
700      _Unigram_Letter_Grid_Data_Block20_Datum01_Byte00_Animated +
701      _Unigram_Letter_Grid_Data_Block20_Datum02_Byte00_Animated *
702      _Unigram_Letter_Grid_Data_Block20_Datum03_Byte00_Animated +
703      _Unigram_Letter_Grid_Data_Block20_Datum04_Byte00_Animated *
704      _Unigram_Letter_Grid_Data_Block21_Datum00_Byte00_Animated +
705      _Unigram_Letter_Grid_Data_Block21_Datum01_Byte00_Animated *
706      _Unigram_Letter_Grid_Data_Block21_Datum02_Byte00_Animated +
707      _Unigram_Letter_Grid_Data_Block21_Datum03_Byte00_Animated *
708      _Unigram_Letter_Grid_Data_Block21_Datum04_Byte00_Animated +
709      _Unigram_Letter_Grid_Data_Block22_Datum00_Byte00_Animated *
710      _Unigram_Letter_Grid_Data_Block22_Datum01_Byte00_Animated +
711      _Unigram_Letter_Grid_Data_Block22_Datum02_Byte00_Animated *
712      _Unigram_Letter_Grid_Data_Block22_Datum03_Byte00_Animated +
713      _Unigram_Letter_Grid_Data_Block22_Datum04_Byte00_Animated *
714      _Unigram_Letter_Grid_Data_Block23_Datum00_Byte00_Animated +
715      _Unigram_Letter_Grid_Data_Block23_Datum01_Byte00_Animated *
716      _Unigram_Letter_Grid_Data_Block23_Datum02_Byte00_Animated +
717      _Unigram_Letter_Grid_Data_Block23_Datum03_Byte00_Animated *
718      _Unigram_Letter_Grid_Data_Block23_Datum04_Byte00_Animated +
719      _Unigram_Letter_Grid_Data_Block24_Datum00_Byte00_Animated *
720      _Unigram_Letter_Grid_Data_Block24_Datum01_Byte00_Animated +
721      _Unigram_Letter_Grid_Data_Block24_Datum02_Byte00_Animated *
722      _Unigram_Letter_Grid_Data_Block24_Datum03_Byte00_Animated +
723      _Unigram_Letter_Grid_Data_Block24_Datum04_Byte00_Animated *
724      _Unigram_Letter_Grid_Data_Block25_Datum00_Byte00_Animated +
725      _Unigram_Letter_Grid_Data_Block25_Datum01_Byte00_Animated *
726      _Unigram_Letter_Grid_Data_Block25_Datum02_Byte00_Animated +
727      _Unigram_Letter_Grid_Data_Block25_Datum03_Byte00_Animated *
728      _Unigram_Letter_Grid_Data_Block25_Datum04_Byte00_Animated +
729      _Unigram_Letter_Grid_Data_Block26_Datum00_Byte00_Animated *
730      _Unigram_Letter_Grid_Data_Block26_Datum01_Byte00_Animated +
731      _Unigram_Letter_Grid_Data_Block26_Datum02_Byte00_Animated *
732      _Unigram_Letter_Grid_Data_Block26_Datum03_Byte00_Animated +
733      _Unigram_Letter_Grid_Data_Block26_Datum04_Byte00_Animated *
734      _Unigram_Letter_Grid_Data_Block27_Datum00_Byte00_Animated +
735      _Unigram_Letter_Grid_Data_Block27_Datum01_Byte00_Animated *
736      _Unigram_Letter_Grid_Data_Block27_Datum02_Byte00_Animated +
737      _Unigram_Letter_Grid_Data_Block27_Datum03_Byte00_Animated *
738      _Unigram_Letter_Grid_Data_Block27_Datum04_Byte00_Animated +
739      _Unigram_Letter_Grid_Data_Block28_Datum00_Byte00_Animated *
740      _Unigram_Letter_Grid_Data_Block28_Datum01_Byte00_Animated +
741      _Unigram_Letter_Grid_Data_Block28_Datum02_Byte00_Animated *
742      _Unigram_Letter_Grid_Data_Block28_Datum03_Byte00_Animated +
743      _Unigram_Letter_Grid_Data_Block28_Datum04_Byte00_Animated *
744      _Unigram_Letter_Grid_Data_Block29_Datum00_Byte00_Animated +
745      _Unigram_Letter_Grid_Data_Block29_Datum01_Byte00_Animated *
746      _Unigram_Letter_Grid_Data_Block29_Datum02_Byte00_Animated +
747      _Unigram_Letter_Grid_Data_Block29_Datum03_Byte00_Animated *
748      _Unigram_Letter_Grid_Data_Block29_Datum04_Byte00_Animated +
749      _Unigram_Letter_Grid_Data_Block30_Datum00_Byte00_Animated *
750      _Unigram_Letter_Grid_Data_Block30_Datum01_Byte00_Animated +
751      _Unigram_Letter_Grid_Data_Block30_Datum02_Byte00_Animated *
752      _Unigram_Letter_Grid_Data_Block30_Datum03_Byte00_Animated +
753      _Unigram_Letter_Grid_Data_Block30_Datum04_Byte00_Animated *
754      _Unigram_Letter_Grid_Data_Block31_Datum00_Byte00_Animated +
755      _Unigram_Letter_Grid_Data_Block31_Datum01_Byte00_Animated *
756      _Unigram_Letter_Grid_Data_Block31_Datum02_Byte00_Animated +
757      _Unigram_Letter_Grid_Data_Block31_Datum03_Byte00_Animated *
758      _Unigram_Letter_Grid_Data_Block31_Datum04_Byte00_Animated +
759      _Unigram_Letter_Grid_Data_Block32_Datum00_Byte00_Animated *
760      _Unigram_Letter_Grid_Data_Block32_Datum01_Byte00_Animated +
761      _Unigram_Letter_Grid_Data_Block32_Datum02_Byte00_Animated *
762      _Unigram_Letter_Grid_Data_Block32_Datum03_Byte00_Animated +
763      _Unigram_Letter_Grid_Data_Block32_Datum04_Byte00_Animated *
764      _Unigram_Letter_Grid_Data_Block33_Datum00_Byte00_Animated +
765      _Unigram_Letter_Grid_Data_Block33_Datum01_Byte00_Animated *
766      _Unigram_Letter_Grid_Data_Block33_Datum02_Byte00_Animated +
767      _Unigram_Letter_Grid_Data_Block33_Datum03_Byte00_Animated *
768      _Unigram_Letter_Grid_Data_Block33_Datum04_Byte00_Animated +
769      _Unigram_Letter_Grid_Data_Block34_Datum00_Byte00_Animated *
770      _Unigram_Letter_Grid_Data_Block34_Datum01_Byte00_Animated +
771      _Unigram_Letter_Grid_Data_Block34_Datum02_Byte00_Animated *
772      _Unigram_Letter_Grid_Data_Block34_Datum03_Byte00_Animated +
773      _Unigram_Letter_Grid_Data_Block34_Datum04_Byte00_Animated *
774      _Unigram_Letter_Grid_Data_Block35_Datum00_Byte00_Animated +
775      _Unigram_Letter_Grid_Data_Block35_Datum01_Byte00_Animated *
776      _Unigram_Letter_Grid_Data_Block35_Datum02_Byte00_Animated +
777      _Unigram_Letter_Grid_Data_Block35_Datum03_Byte00_Animated *
778      _Unigram_Letter_Grid_Data_Block35_Datum04_Byte00_Animated +
779      _Unigram_Letter_Grid_Data_Block36_Datum00_Byte00_Animated *
780      _Unigram_Letter_Grid_Data_Block36_Datum01_Byte00_Animated +
781      _Unigram_Letter_Grid_Data_Block36_Datum02_Byte00_Animated *
782      _Unigram_Letter_Grid_Data_Block36_Datum03_Byte00_Animated +
783      _Unigram_Letter_Grid_Data_Block36_Datum04_Byte00_Animated *
784      _Unigram_Letter_Grid_Data_Block37_Datum00_Byte00_Animated +
785      _Unigram_Letter_Grid_Data_Block37_Datum01_Byte00_Animated *
786      _Unigram_Letter_Grid_Data_Block37_Datum02_Byte00_Animated +
787      _Unigram_Letter_Grid_Data_Block37_Datum03_Byte00_Animated *
788      _Unigram_Letter_Grid_Data_Block37_Datum04_Byte00_Animated +
789      _Unigram_Letter_Grid_Data_Block38_Datum00_Byte00_Animated *
790      _Unigram_Letter_Grid_Data_Block38_Datum01_Byte00_Animated +
791      _Unigram_Letter_Grid_Data_Block38_Datum02_Byte00_Animated *
792      _Unigram_Letter_Grid_Data_Block38_Datum03_Byte00_Animated +
793      _Unigram_Letter_Grid_Data_Block38_Datum04_Byte00_Animated *
794      _Unigram_Letter_Grid_Data_Block39_Datum00_Byte00_Animated +
795      _Unigram_Letter_Grid_Data_Block39_Datum01_Byte00_Animated *
796      _Unigram_Letter_Grid_Data_Block39_Datum02_Byte00_Animated +
797      _Unigram_Letter_Grid_Data_Block39_Datum03_Byte00_Animated *
798      _Unigram_Letter_Grid_Data_Block39_Datum04_Byte00_Animated;
799#endif  // ULG_D0
800#if defined(ULG_D1)
801    a +=
802      _Unigram_Letter_Grid_Data_Block00_Datum00_Byte01_Animated *
803      _Unigram_Letter_Grid_Data_Block00_Datum01_Byte01_Animated +
804      _Unigram_Letter_Grid_Data_Block00_Datum02_Byte01_Animated *
805      _Unigram_Letter_Grid_Data_Block00_Datum03_Byte01_Animated +
806      _Unigram_Letter_Grid_Data_Block00_Datum04_Byte01_Animated *
807      _Unigram_Letter_Grid_Data_Block01_Datum00_Byte01_Animated +
808      _Unigram_Letter_Grid_Data_Block01_Datum01_Byte01_Animated *
809      _Unigram_Letter_Grid_Data_Block01_Datum02_Byte01_Animated +
810      _Unigram_Letter_Grid_Data_Block01_Datum03_Byte01_Animated *
811      _Unigram_Letter_Grid_Data_Block01_Datum04_Byte01_Animated +
812      _Unigram_Letter_Grid_Data_Block02_Datum00_Byte01_Animated *
813      _Unigram_Letter_Grid_Data_Block02_Datum01_Byte01_Animated +
814      _Unigram_Letter_Grid_Data_Block02_Datum02_Byte01_Animated *
815      _Unigram_Letter_Grid_Data_Block02_Datum03_Byte01_Animated +
816      _Unigram_Letter_Grid_Data_Block02_Datum04_Byte01_Animated *
817      _Unigram_Letter_Grid_Data_Block03_Datum00_Byte01_Animated +
818      _Unigram_Letter_Grid_Data_Block03_Datum01_Byte01_Animated *
819      _Unigram_Letter_Grid_Data_Block03_Datum02_Byte01_Animated +
820      _Unigram_Letter_Grid_Data_Block03_Datum03_Byte01_Animated *
821      _Unigram_Letter_Grid_Data_Block03_Datum04_Byte01_Animated +
822      _Unigram_Letter_Grid_Data_Block04_Datum00_Byte01_Animated *
823      _Unigram_Letter_Grid_Data_Block04_Datum01_Byte01_Animated +
824      _Unigram_Letter_Grid_Data_Block04_Datum02_Byte01_Animated *
825      _Unigram_Letter_Grid_Data_Block04_Datum03_Byte01_Animated +
826      _Unigram_Letter_Grid_Data_Block04_Datum04_Byte01_Animated *
827      _Unigram_Letter_Grid_Data_Block05_Datum00_Byte01_Animated +
828      _Unigram_Letter_Grid_Data_Block05_Datum01_Byte01_Animated *
829      _Unigram_Letter_Grid_Data_Block05_Datum02_Byte01_Animated +
830      _Unigram_Letter_Grid_Data_Block05_Datum03_Byte01_Animated *
831      _Unigram_Letter_Grid_Data_Block05_Datum04_Byte01_Animated +
832      _Unigram_Letter_Grid_Data_Block06_Datum00_Byte01_Animated *
833      _Unigram_Letter_Grid_Data_Block06_Datum01_Byte01_Animated +
834      _Unigram_Letter_Grid_Data_Block06_Datum02_Byte01_Animated *
835      _Unigram_Letter_Grid_Data_Block06_Datum03_Byte01_Animated +
836      _Unigram_Letter_Grid_Data_Block06_Datum04_Byte01_Animated *
837      _Unigram_Letter_Grid_Data_Block07_Datum00_Byte01_Animated +
838      _Unigram_Letter_Grid_Data_Block07_Datum01_Byte01_Animated *
839      _Unigram_Letter_Grid_Data_Block07_Datum02_Byte01_Animated +
840      _Unigram_Letter_Grid_Data_Block07_Datum03_Byte01_Animated *
841      _Unigram_Letter_Grid_Data_Block07_Datum04_Byte01_Animated +
842      _Unigram_Letter_Grid_Data_Block08_Datum00_Byte01_Animated *
843      _Unigram_Letter_Grid_Data_Block08_Datum01_Byte01_Animated +
844      _Unigram_Letter_Grid_Data_Block08_Datum02_Byte01_Animated *
845      _Unigram_Letter_Grid_Data_Block08_Datum03_Byte01_Animated +
846      _Unigram_Letter_Grid_Data_Block08_Datum04_Byte01_Animated *
847      _Unigram_Letter_Grid_Data_Block09_Datum00_Byte01_Animated +
848      _Unigram_Letter_Grid_Data_Block09_Datum01_Byte01_Animated *
849      _Unigram_Letter_Grid_Data_Block09_Datum02_Byte01_Animated +
850      _Unigram_Letter_Grid_Data_Block09_Datum03_Byte01_Animated *
851      _Unigram_Letter_Grid_Data_Block09_Datum04_Byte01_Animated +
852      _Unigram_Letter_Grid_Data_Block10_Datum00_Byte01_Animated *
853      _Unigram_Letter_Grid_Data_Block10_Datum01_Byte01_Animated +
854      _Unigram_Letter_Grid_Data_Block10_Datum02_Byte01_Animated *
855      _Unigram_Letter_Grid_Data_Block10_Datum03_Byte01_Animated +
856      _Unigram_Letter_Grid_Data_Block10_Datum04_Byte01_Animated *
857      _Unigram_Letter_Grid_Data_Block11_Datum00_Byte01_Animated +
858      _Unigram_Letter_Grid_Data_Block11_Datum01_Byte01_Animated *
859      _Unigram_Letter_Grid_Data_Block11_Datum02_Byte01_Animated +
860      _Unigram_Letter_Grid_Data_Block11_Datum03_Byte01_Animated *
861      _Unigram_Letter_Grid_Data_Block11_Datum04_Byte01_Animated +
862      _Unigram_Letter_Grid_Data_Block12_Datum00_Byte01_Animated *
863      _Unigram_Letter_Grid_Data_Block12_Datum01_Byte01_Animated +
864      _Unigram_Letter_Grid_Data_Block12_Datum02_Byte01_Animated *
865      _Unigram_Letter_Grid_Data_Block12_Datum03_Byte01_Animated +
866      _Unigram_Letter_Grid_Data_Block12_Datum04_Byte01_Animated *
867      _Unigram_Letter_Grid_Data_Block13_Datum00_Byte01_Animated +
868      _Unigram_Letter_Grid_Data_Block13_Datum01_Byte01_Animated *
869      _Unigram_Letter_Grid_Data_Block13_Datum02_Byte01_Animated +
870      _Unigram_Letter_Grid_Data_Block13_Datum03_Byte01_Animated *
871      _Unigram_Letter_Grid_Data_Block13_Datum04_Byte01_Animated +
872      _Unigram_Letter_Grid_Data_Block14_Datum00_Byte01_Animated *
873      _Unigram_Letter_Grid_Data_Block14_Datum01_Byte01_Animated +
874      _Unigram_Letter_Grid_Data_Block14_Datum02_Byte01_Animated *
875      _Unigram_Letter_Grid_Data_Block14_Datum03_Byte01_Animated +
876      _Unigram_Letter_Grid_Data_Block14_Datum04_Byte01_Animated *
877      _Unigram_Letter_Grid_Data_Block15_Datum00_Byte01_Animated +
878      _Unigram_Letter_Grid_Data_Block15_Datum01_Byte01_Animated *
879      _Unigram_Letter_Grid_Data_Block15_Datum02_Byte01_Animated +
880      _Unigram_Letter_Grid_Data_Block15_Datum03_Byte01_Animated *
881      _Unigram_Letter_Grid_Data_Block15_Datum04_Byte01_Animated +
882      _Unigram_Letter_Grid_Data_Block16_Datum00_Byte01_Animated *
883      _Unigram_Letter_Grid_Data_Block16_Datum01_Byte01_Animated +
884      _Unigram_Letter_Grid_Data_Block16_Datum02_Byte01_Animated *
885      _Unigram_Letter_Grid_Data_Block16_Datum03_Byte01_Animated +
886      _Unigram_Letter_Grid_Data_Block16_Datum04_Byte01_Animated *
887      _Unigram_Letter_Grid_Data_Block17_Datum00_Byte01_Animated +
888      _Unigram_Letter_Grid_Data_Block17_Datum01_Byte01_Animated *
889      _Unigram_Letter_Grid_Data_Block17_Datum02_Byte01_Animated +
890      _Unigram_Letter_Grid_Data_Block17_Datum03_Byte01_Animated *
891      _Unigram_Letter_Grid_Data_Block17_Datum04_Byte01_Animated +
892      _Unigram_Letter_Grid_Data_Block18_Datum00_Byte01_Animated *
893      _Unigram_Letter_Grid_Data_Block18_Datum01_Byte01_Animated +
894      _Unigram_Letter_Grid_Data_Block18_Datum02_Byte01_Animated *
895      _Unigram_Letter_Grid_Data_Block18_Datum03_Byte01_Animated +
896      _Unigram_Letter_Grid_Data_Block18_Datum04_Byte01_Animated *
897      _Unigram_Letter_Grid_Data_Block19_Datum00_Byte01_Animated +
898      _Unigram_Letter_Grid_Data_Block19_Datum01_Byte01_Animated *
899      _Unigram_Letter_Grid_Data_Block19_Datum02_Byte01_Animated +
900      _Unigram_Letter_Grid_Data_Block19_Datum03_Byte01_Animated *
901      _Unigram_Letter_Grid_Data_Block19_Datum04_Byte01_Animated +
902      _Unigram_Letter_Grid_Data_Block20_Datum00_Byte01_Animated *
903      _Unigram_Letter_Grid_Data_Block20_Datum01_Byte01_Animated +
904      _Unigram_Letter_Grid_Data_Block20_Datum02_Byte01_Animated *
905      _Unigram_Letter_Grid_Data_Block20_Datum03_Byte01_Animated +
906      _Unigram_Letter_Grid_Data_Block20_Datum04_Byte01_Animated *
907      _Unigram_Letter_Grid_Data_Block21_Datum00_Byte01_Animated +
908      _Unigram_Letter_Grid_Data_Block21_Datum01_Byte01_Animated *
909      _Unigram_Letter_Grid_Data_Block21_Datum02_Byte01_Animated +
910      _Unigram_Letter_Grid_Data_Block21_Datum03_Byte01_Animated *
911      _Unigram_Letter_Grid_Data_Block21_Datum04_Byte01_Animated +
912      _Unigram_Letter_Grid_Data_Block22_Datum00_Byte01_Animated *
913      _Unigram_Letter_Grid_Data_Block22_Datum01_Byte01_Animated +
914      _Unigram_Letter_Grid_Data_Block22_Datum02_Byte01_Animated *
915      _Unigram_Letter_Grid_Data_Block22_Datum03_Byte01_Animated +
916      _Unigram_Letter_Grid_Data_Block22_Datum04_Byte01_Animated *
917      _Unigram_Letter_Grid_Data_Block23_Datum00_Byte01_Animated +
918      _Unigram_Letter_Grid_Data_Block23_Datum01_Byte01_Animated *
919      _Unigram_Letter_Grid_Data_Block23_Datum02_Byte01_Animated +
920      _Unigram_Letter_Grid_Data_Block23_Datum03_Byte01_Animated *
921      _Unigram_Letter_Grid_Data_Block23_Datum04_Byte01_Animated +
922      _Unigram_Letter_Grid_Data_Block24_Datum00_Byte01_Animated *
923      _Unigram_Letter_Grid_Data_Block24_Datum01_Byte01_Animated +
924      _Unigram_Letter_Grid_Data_Block24_Datum02_Byte01_Animated *
925      _Unigram_Letter_Grid_Data_Block24_Datum03_Byte01_Animated +
926      _Unigram_Letter_Grid_Data_Block24_Datum04_Byte01_Animated *
927      _Unigram_Letter_Grid_Data_Block25_Datum00_Byte01_Animated +
928      _Unigram_Letter_Grid_Data_Block25_Datum01_Byte01_Animated *
929      _Unigram_Letter_Grid_Data_Block25_Datum02_Byte01_Animated +
930      _Unigram_Letter_Grid_Data_Block25_Datum03_Byte01_Animated *
931      _Unigram_Letter_Grid_Data_Block25_Datum04_Byte01_Animated +
932      _Unigram_Letter_Grid_Data_Block26_Datum00_Byte01_Animated *
933      _Unigram_Letter_Grid_Data_Block26_Datum01_Byte01_Animated +
934      _Unigram_Letter_Grid_Data_Block26_Datum02_Byte01_Animated *
935      _Unigram_Letter_Grid_Data_Block26_Datum03_Byte01_Animated +
936      _Unigram_Letter_Grid_Data_Block26_Datum04_Byte01_Animated *
937      _Unigram_Letter_Grid_Data_Block27_Datum00_Byte01_Animated +
938      _Unigram_Letter_Grid_Data_Block27_Datum01_Byte01_Animated *
939      _Unigram_Letter_Grid_Data_Block27_Datum02_Byte01_Animated +
940      _Unigram_Letter_Grid_Data_Block27_Datum03_Byte01_Animated *
941      _Unigram_Letter_Grid_Data_Block27_Datum04_Byte01_Animated +
942      _Unigram_Letter_Grid_Data_Block28_Datum00_Byte01_Animated *
943      _Unigram_Letter_Grid_Data_Block28_Datum01_Byte01_Animated +
944      _Unigram_Letter_Grid_Data_Block28_Datum02_Byte01_Animated *
945      _Unigram_Letter_Grid_Data_Block28_Datum03_Byte01_Animated +
946      _Unigram_Letter_Grid_Data_Block28_Datum04_Byte01_Animated *
947      _Unigram_Letter_Grid_Data_Block29_Datum00_Byte01_Animated +
948      _Unigram_Letter_Grid_Data_Block29_Datum01_Byte01_Animated *
949      _Unigram_Letter_Grid_Data_Block29_Datum02_Byte01_Animated +
950      _Unigram_Letter_Grid_Data_Block29_Datum03_Byte01_Animated *
951      _Unigram_Letter_Grid_Data_Block29_Datum04_Byte01_Animated +
952      _Unigram_Letter_Grid_Data_Block30_Datum00_Byte01_Animated *
953      _Unigram_Letter_Grid_Data_Block30_Datum01_Byte01_Animated +
954      _Unigram_Letter_Grid_Data_Block30_Datum02_Byte01_Animated *
955      _Unigram_Letter_Grid_Data_Block30_Datum03_Byte01_Animated +
956      _Unigram_Letter_Grid_Data_Block30_Datum04_Byte01_Animated *
957      _Unigram_Letter_Grid_Data_Block31_Datum00_Byte01_Animated +
958      _Unigram_Letter_Grid_Data_Block31_Datum01_Byte01_Animated *
959      _Unigram_Letter_Grid_Data_Block31_Datum02_Byte01_Animated +
960      _Unigram_Letter_Grid_Data_Block31_Datum03_Byte01_Animated *
961      _Unigram_Letter_Grid_Data_Block31_Datum04_Byte01_Animated +
962      _Unigram_Letter_Grid_Data_Block32_Datum00_Byte01_Animated *
963      _Unigram_Letter_Grid_Data_Block32_Datum01_Byte01_Animated +
964      _Unigram_Letter_Grid_Data_Block32_Datum02_Byte01_Animated *
965      _Unigram_Letter_Grid_Data_Block32_Datum03_Byte01_Animated +
966      _Unigram_Letter_Grid_Data_Block32_Datum04_Byte01_Animated *
967      _Unigram_Letter_Grid_Data_Block33_Datum00_Byte01_Animated +
968      _Unigram_Letter_Grid_Data_Block33_Datum01_Byte01_Animated *
969      _Unigram_Letter_Grid_Data_Block33_Datum02_Byte01_Animated +
970      _Unigram_Letter_Grid_Data_Block33_Datum03_Byte01_Animated *
971      _Unigram_Letter_Grid_Data_Block33_Datum04_Byte01_Animated +
972      _Unigram_Letter_Grid_Data_Block34_Datum00_Byte01_Animated *
973      _Unigram_Letter_Grid_Data_Block34_Datum01_Byte01_Animated +
974      _Unigram_Letter_Grid_Data_Block34_Datum02_Byte01_Animated *
975      _Unigram_Letter_Grid_Data_Block34_Datum03_Byte01_Animated +
976      _Unigram_Letter_Grid_Data_Block34_Datum04_Byte01_Animated *
977      _Unigram_Letter_Grid_Data_Block35_Datum00_Byte01_Animated +
978      _Unigram_Letter_Grid_Data_Block35_Datum01_Byte01_Animated *
979      _Unigram_Letter_Grid_Data_Block35_Datum02_Byte01_Animated +
980      _Unigram_Letter_Grid_Data_Block35_Datum03_Byte01_Animated *
981      _Unigram_Letter_Grid_Data_Block35_Datum04_Byte01_Animated +
982      _Unigram_Letter_Grid_Data_Block36_Datum00_Byte01_Animated *
983      _Unigram_Letter_Grid_Data_Block36_Datum01_Byte01_Animated +
984      _Unigram_Letter_Grid_Data_Block36_Datum02_Byte01_Animated *
985      _Unigram_Letter_Grid_Data_Block36_Datum03_Byte01_Animated +
986      _Unigram_Letter_Grid_Data_Block36_Datum04_Byte01_Animated *
987      _Unigram_Letter_Grid_Data_Block37_Datum00_Byte01_Animated +
988      _Unigram_Letter_Grid_Data_Block37_Datum01_Byte01_Animated *
989      _Unigram_Letter_Grid_Data_Block37_Datum02_Byte01_Animated +
990      _Unigram_Letter_Grid_Data_Block37_Datum03_Byte01_Animated *
991      _Unigram_Letter_Grid_Data_Block37_Datum04_Byte01_Animated +
992      _Unigram_Letter_Grid_Data_Block38_Datum00_Byte01_Animated *
993      _Unigram_Letter_Grid_Data_Block38_Datum01_Byte01_Animated +
994      _Unigram_Letter_Grid_Data_Block38_Datum02_Byte01_Animated *
995      _Unigram_Letter_Grid_Data_Block38_Datum03_Byte01_Animated +
996      _Unigram_Letter_Grid_Data_Block38_Datum04_Byte01_Animated *
997      _Unigram_Letter_Grid_Data_Block39_Datum00_Byte01_Animated +
998      _Unigram_Letter_Grid_Data_Block39_Datum01_Byte01_Animated *
999      _Unigram_Letter_Grid_Data_Block39_Datum02_Byte01_Animated +
1000      _Unigram_Letter_Grid_Data_Block39_Datum03_Byte01_Animated *
1001      _Unigram_Letter_Grid_Data_Block39_Datum04_Byte01_Animated;
1002#endif  // ULG_D1
1003  }
1004}
1005
1006#if defined(ULG_D0) && defined(ULG_D1)
1007void GetBlock(uint which_block, out uint data[ULG_BLOCK_WIDTH]) {
1008  [loop]
1009  for (uint i = 0; i < ULG_BLOCK_WIDTH; i++) {
1010    data[i]  = ((uint) floor(_Unigram_Letter_Data_Byte00[which_block * ULG_BLOCK_WIDTH + i]+FUDGE_AMOUNT));
1011    data[i] |= ((uint) floor(_Unigram_Letter_Data_Byte01[which_block * ULG_BLOCK_WIDTH + i]+FUDGE_AMOUNT)) << 8;
1012  }
1013}
1014#endif
1015
1016#if defined(ULG_VP)
1017// Get the tokens that cover `screen_ptr`. Also return `block_ptr`, the
1018// location where this block of tokens begins.
1019void GetTokens(uint screen_ptr,
1020    out uint block_ptr,
1021    out uint tokens[ULG_BLOCK_WIDTH],
1022    out uint which_block) {
1023  block_ptr = floor(_Unigram_Letter_Visual_Pointers[0]+FUDGE_AMOUNT);
1024  which_block = 0;
1025  [loop]
1026  for (uint i = 1; i < ULG_NUM_BLOCKS; i++) {
1027    uint next_ptr = floor(_Unigram_Letter_Visual_Pointers[i]+FUDGE_AMOUNT);
1028    if (block_ptr < next_ptr) {
1029      // Case 1: visual pointers are increasing
1030      if (screen_ptr >= block_ptr && screen_ptr < next_ptr) {
1031        break;
1032      }
1033    } else {
1034      // Case 2: visual pointer went backwards. This happens when we page long
1035      // data, wrapping around finite number of blocks.
1036      if (screen_ptr >= block_ptr || screen_ptr < next_ptr) {
1037        break;
1038      }
1039    }
1040    block_ptr = next_ptr;
1041    which_block = i;
1042  }
1043  GetBlock(which_block, tokens);
1044}
1045#endif
1046
1047uint2 FoldIndex(uint flat_idx, uint2 img_res) {
1048  return uint2(flat_idx % img_res.x, floor(flat_idx / img_res.x));
1049}
1050
1051uint UnfoldIndex(uint2 coord, uint2 img_res) {
1052  return coord[0] + coord[1] * img_res.x;
1053}
1054
1055float2 GetUnigramLutUV(uint idx)
1056{
1057  // Remap from [0,  65535] to [0, 511] x [0,511].
1058  // Note that the LUT is square.
1059  uint2 idx_2d = FoldIndex(idx, _Unigram_Letter_Grid_LUT_TexelSize.z);
1060  // Remap onto [0, 1] x [0, 1].
1061  float2 uv = idx_2d * _Unigram_Letter_Grid_LUT_TexelSize.xy;
1062  // Center the UV coordinate in its texel.
1063  uv += _Unigram_Letter_Grid_LUT_TexelSize.xy * 0.5;
1064  // uvs have 0,0 at bottom left. LUT has 0,0 at top left. yerr.
1065  uv.y = 1.0 - uv.y;
1066  return uv;
1067}
1068
1069// Gets the length of the subword encoded by the token. Performs one texture
1070// tap.
1071void TokenLengthOffset(uint token,
1072    out uint length, out uint offset)
1073{
1074  float2 token_uv = GetUnigramLutUV(token);
1075  // Header has this format:
1076  //      rgba = ((tok_ptr >>  0) & 0xFF,
1077  //              (tok_ptr >>  8) & 0xFF,
1078  //              (tok_ptr >> 16) & 0xFF,
1079  //              tok_len)
1080  uint4 rgba = (uint4) (_Unigram_Letter_Grid_LUT.SampleLevel(point_repeat_s, token_uv, 0) * 255.0);
1081  offset  = (rgba[0] <<  0);
1082  offset |= (rgba[1] <<  8);
1083  offset |= (rgba[2] << 16);
1084  length = rgba[3];
1085}
1086
1087// Gets the nth character of the token stored at `token_offset`.
1088uint GetTokenChar(uint token_offset, uint nth)
1089{
1090  // We store 4 characters per pixel (RGBA texture).
1091  token_offset += floor(nth / 4.0);
1092  float2 token_uv = GetUnigramLutUV(token_offset);
1093  uint4 chars = (uint4) (_Unigram_Letter_Grid_LUT.SampleLevel(point_repeat_s, token_uv, 0) * 255.0);
1094  return chars[nth % 4];
1095}
1096
1097#if defined(ULG_VP) && defined(ULG_D0) && defined(ULG_D1)
1098// Get the character which covers the screen position.
1099uint GetChar(uint screen_ptr, out uint which_block, out uint which_datum) {
1100  uint block_ptr;
1101  uint tokens[ULG_BLOCK_WIDTH];
1102  GetTokens(screen_ptr, block_ptr, tokens, which_block);
1103  // Begin scanning at the start of the block.
1104  uint start = block_ptr;
1105  // The current token is rendered starting at this location.
1106  // In other words, it covers [token_ptr, token_ptr + token_length)
1107  uint token_ptr = block_ptr;
1108  // Wrap the block pointer around the board.
1109  const uint BOARD_SIZE = _Unigram_Letter_Grid_Res_X * _Unigram_Letter_Grid_Res_Y;
1110  token_ptr = token_ptr % BOARD_SIZE;
1111  uint token_offset;
1112  uint token_length = 0;
1113  bool got_match = false;
1114  [loop]
1115  for (uint i = 0; i < ULG_BLOCK_WIDTH; i++) {
1116    which_datum = i;
1117    TokenLengthOffset(tokens[i], token_length, token_offset);
1118    if (token_length == 0) {
1119      continue;
1120    }
1121    if (screen_ptr >= token_ptr && screen_ptr < token_ptr + token_length) {
1122      got_match = true;
1123      break;
1124    }
1125    // Edge case: the token pointer may be partially outside of the visible
1126    // part of the board.
1127    if (screen_ptr + BOARD_SIZE >= token_ptr &&
1128        screen_ptr + BOARD_SIZE < token_ptr + token_length) {
1129      got_match = true;
1130      break;
1131    }
1132
1133    token_ptr += token_length;
1134    token_ptr = token_ptr % BOARD_SIZE;
1135  }
1136  // Edge case: no match
1137  if (!got_match) {
1138    return ' ';
1139  }
1140  uint nth_char = (screen_ptr >= token_ptr) ? screen_ptr - token_ptr : (screen_ptr + BOARD_SIZE) - token_ptr;
1141  return GetTokenChar(token_offset, nth_char);
1142}
1143#endif
1144
1145struct UnigramLetterGridOutput {
1146  float4 albedo;
1147  float metallic;
1148  float roughness;
1149  float3 emission;
1150};
1151
1152UnigramLetterGridOutput UnigramLetterGrid(v2f i, bool facing) {
1153  UnigramLetterGridOutput output;
1154
1155  int2 cell_pos;
1156  int2 font_res = int2(round(_Unigram_Letter_Grid_Tex_Res_X), round(_Unigram_Letter_Grid_Tex_Res_Y));
1157  int2 grid_res = int2(round(_Unigram_Letter_Grid_Res_X), round(_Unigram_Letter_Grid_Res_Y));
1158  float2 cell_uv;  // uv within each letter cell
1159
1160  float4 scoff = _Unigram_Letter_Grid_UV_Scale_Offset;
1161  float2 uv = i.uv01.xy;
1162  uv.x = facing ? uv.x : 1.0 - uv.x;
1163  uv = ((uv - 0.5) - scoff.zw) * scoff.xy + 0.5;
1164
1165  bool in_box = getBoxLoc(uv, 0, 1, grid_res, _Unigram_Letter_Grid_Padding, cell_pos, cell_uv);
1166  cell_pos.y = (grid_res.y - cell_pos.y) - 1;
1167
1168  uint flat_cell_pos = UnfoldIndex(cell_pos, grid_res);
1169
1170  uint which_block, which_datum;
1171  float c = GetChar(flat_cell_pos, which_block, which_datum);
1172
1173  float3 msd = renderInBox(c, uv, cell_uv, _Unigram_Letter_Grid_Glyphs, font_res).rgb;
1174  float sd = median(msd);
1175
1176  // Calculate screen pixel range
1177  float screen_px_range;
1178  {
1179    float2 tex_size = float2(_Unigram_Letter_Grid_Glyphs_TexelSize.zw);
1180    float2 real_cell_size = floor(tex_size / grid_res);  // size of cell in texels
1181    float2 unit_range = _Unigram_Letter_Grid_Screen_Px_Range / real_cell_size;
1182    float2 screen_tex_size = 1 / fwidth(cell_uv);
1183    screen_px_range = max(1.0 * dot(unit_range, screen_tex_size), _Unigram_Letter_Grid_Min_Screen_Px_Range);
1184  }
1185
1186  float screen_px_distance = screen_px_range * (sd - _Unigram_Letter_Grid_Alpha_Threshold);
1187  float op = clamp(screen_px_distance + 0.5, 0, 1);
1188
1189  // Apply blending to output
1190  output.albedo.a = 1;
1191  PreventCbufferElision(i, output.albedo.a);
1192  output.albedo = float4(float3(1,1,1), output.albedo.a * op * in_box);
1193  output.metallic = 0;
1194  output.roughness = 1;
1195  output.emission = 0;
1196
1197  // Visualize which block is being rendered.
1198  {
1199    float eps = 1.2E-1;
1200    bool in_range = (cell_uv.x < eps || cell_uv.y < eps || 1.0 - cell_uv.x < eps || 1.0 - cell_uv.y < eps);
1201    if (in_range)
1202    {
1203      float hue = which_datum * 0.3f;
1204      hue += (which_block % 2) * 0.5f;
1205      hue = frac(hue);
1206      hue *= TAU;
1207      output.albedo.rgb = OKLCHtoLRGB(float3(0.8, 0.2, hue));
1208      output.albedo.a = 1;
1209    }
1210  }
1211
1212  return output;
1213}
1214
1215#endif  // _UNIGRAM_LETTER_GRID
1216#endif  // __UNIGRAM_LETTER_GRID_INC
1217