• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2019 Intel Corporation
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21  * DEALINGS IN THE SOFTWARE.
22  */
23 
24 #include "gtest/gtest.h"
25 #include "isl/isl.h"
26 
27 void
PrintTo(const enum isl_aux_op & op,::std::ostream * os)28 PrintTo(const enum isl_aux_op &op, ::std::ostream* os) {
29    *os << (const char *[]) {
30     [ISL_AUX_OP_ASSERT         ] = "ISL_AUX_OP_ASSERT",
31     [ISL_AUX_OP_NONE           ] = "ISL_AUX_OP_NONE",
32     [ISL_AUX_OP_FAST_CLEAR     ] = "ISL_AUX_OP_FAST_CLEAR",
33     [ISL_AUX_OP_FULL_RESOLVE   ] = "ISL_AUX_OP_FULL_RESOLVE",
34     [ISL_AUX_OP_PARTIAL_RESOLVE] = "ISL_AUX_OP_PARTIAL_RESOLVE",
35     [ISL_AUX_OP_AMBIGUATE      ] = "ISL_AUX_OP_AMBIGUATE",
36    }[op];
37 }
38 
39 #define E(state, usage, fc, op) \
40    EXPECT_EQ(ISL_AUX_OP_ ## op, \
41              isl_aux_prepare_access(ISL_AUX_STATE_ ## state, \
42                                     ISL_AUX_USAGE_ ## usage, fc))
43 
TEST(PrepareAccess,CompressedFalseFastClearFalsePartialResolveFalse)44 TEST(PrepareAccess, CompressedFalseFastClearFalsePartialResolveFalse) {
45    E(CLEAR, NONE, false, FULL_RESOLVE);
46    E(CLEAR, NONE, true, ASSERT);
47    E(PARTIAL_CLEAR, NONE, false, FULL_RESOLVE);
48    E(PARTIAL_CLEAR, NONE, true, ASSERT);
49    E(COMPRESSED_CLEAR, NONE, false, FULL_RESOLVE);
50    E(COMPRESSED_CLEAR, NONE, true, ASSERT);
51    E(COMPRESSED_NO_CLEAR, NONE, false, FULL_RESOLVE);
52    E(COMPRESSED_NO_CLEAR, NONE, true, ASSERT);
53    E(RESOLVED, NONE, false, NONE);
54    E(RESOLVED, NONE, true, ASSERT);
55    E(PASS_THROUGH, NONE, false, NONE);
56    E(PASS_THROUGH, NONE, true, ASSERT);
57    E(AUX_INVALID, NONE, false, NONE);
58    E(AUX_INVALID, NONE, true, ASSERT);
59 }
60 
TEST(PrepareAccess,CompressedFalseFastClearTruePartialResolveFalse)61 TEST(PrepareAccess, CompressedFalseFastClearTruePartialResolveFalse) {
62    E(CLEAR, CCS_D, false, FULL_RESOLVE);
63    E(CLEAR, CCS_D, true, NONE);
64    E(PARTIAL_CLEAR, CCS_D, false, FULL_RESOLVE);
65    E(PARTIAL_CLEAR, CCS_D, true, NONE);
66    E(COMPRESSED_CLEAR, CCS_D, false, FULL_RESOLVE);
67    E(COMPRESSED_CLEAR, CCS_D, true, FULL_RESOLVE);
68    E(COMPRESSED_NO_CLEAR, CCS_D, false, FULL_RESOLVE);
69    E(COMPRESSED_NO_CLEAR, CCS_D, true, FULL_RESOLVE);
70    E(RESOLVED, CCS_D, false, NONE);
71    E(RESOLVED, CCS_D, true, NONE);
72    E(PASS_THROUGH, CCS_D, false, NONE);
73    E(PASS_THROUGH, CCS_D, true, NONE);
74    E(AUX_INVALID, CCS_D, false, AMBIGUATE);
75    E(AUX_INVALID, CCS_D, true, AMBIGUATE);
76 }
77 
TEST(PrepareAccess,CompressedTrueFastClearFalsePartialResolveFalse)78 TEST(PrepareAccess, CompressedTrueFastClearFalsePartialResolveFalse) {
79    E(CLEAR, MC, false, ASSERT);
80    E(CLEAR, MC, true, ASSERT);
81    E(PARTIAL_CLEAR, MC, false, ASSERT);
82    E(PARTIAL_CLEAR, MC, true, ASSERT);
83    E(COMPRESSED_CLEAR, MC, false, ASSERT);
84    E(COMPRESSED_CLEAR, MC, true, ASSERT);
85    E(COMPRESSED_NO_CLEAR, MC, false, NONE);
86    E(COMPRESSED_NO_CLEAR, MC, true, ASSERT);
87    E(RESOLVED, MC, false, NONE);
88    E(RESOLVED, MC, true, ASSERT);
89    E(PASS_THROUGH, MC, false, NONE);
90    E(PASS_THROUGH, MC, true, ASSERT);
91    E(AUX_INVALID, MC, false, AMBIGUATE);
92    E(AUX_INVALID, MC, true, ASSERT);
93 }
94 
TEST(PrepareAccess,CompressedTrueFastClearTruePartialResolveFalse)95 TEST(PrepareAccess, CompressedTrueFastClearTruePartialResolveFalse) {
96    E(CLEAR, HIZ, false, FULL_RESOLVE);
97    E(CLEAR, HIZ, true, NONE);
98    E(PARTIAL_CLEAR, HIZ, false, FULL_RESOLVE);
99    E(PARTIAL_CLEAR, HIZ, true, NONE);
100    E(COMPRESSED_CLEAR, HIZ, false, FULL_RESOLVE);
101    E(COMPRESSED_CLEAR, HIZ, true, NONE);
102    E(COMPRESSED_NO_CLEAR, HIZ, false, NONE);
103    E(COMPRESSED_NO_CLEAR, HIZ, true, NONE);
104    E(RESOLVED, HIZ, false, NONE);
105    E(RESOLVED, HIZ, true, NONE);
106    E(PASS_THROUGH, HIZ, false, NONE);
107    E(PASS_THROUGH, HIZ, true, NONE);
108    E(AUX_INVALID, HIZ, false, AMBIGUATE);
109    E(AUX_INVALID, HIZ, true, AMBIGUATE);
110 }
111 
TEST(PrepareAccess,CompressedTrueFastClearTruePartialResolveTrue)112 TEST(PrepareAccess, CompressedTrueFastClearTruePartialResolveTrue) {
113    E(CLEAR, MCS, false, PARTIAL_RESOLVE);
114    E(CLEAR, MCS, true, NONE);
115    E(PARTIAL_CLEAR, MCS, false, PARTIAL_RESOLVE);
116    E(PARTIAL_CLEAR, MCS, true, NONE);
117    E(COMPRESSED_CLEAR, MCS, false, PARTIAL_RESOLVE);
118    E(COMPRESSED_CLEAR, MCS, true, NONE);
119    E(COMPRESSED_NO_CLEAR, MCS, false, NONE);
120    E(COMPRESSED_NO_CLEAR, MCS, true, NONE);
121    E(RESOLVED, MCS, false, NONE);
122    E(RESOLVED, MCS, true, NONE);
123    E(PASS_THROUGH, MCS, false, NONE);
124    E(PASS_THROUGH, MCS, true, NONE);
125    E(AUX_INVALID, MCS, false, AMBIGUATE);
126    E(AUX_INVALID, MCS, true, AMBIGUATE);
127 }
128 
129 void
PrintTo(const enum isl_aux_state & state,::std::ostream * os)130 PrintTo(const enum isl_aux_state &state, ::std::ostream* os) {
131    *os << (const char *[]) {
132     [ISL_AUX_STATE_ASSERT             ] = "ISL_AUX_STATE_ASSERT",
133     [ISL_AUX_STATE_CLEAR              ] = "ISL_AUX_STATE_CLEAR",
134     [ISL_AUX_STATE_PARTIAL_CLEAR      ] = "ISL_AUX_STATE_PARTIAL_CLEAR",
135     [ISL_AUX_STATE_COMPRESSED_CLEAR   ] = "ISL_AUX_STATE_COMPRESSED_CLEAR",
136     [ISL_AUX_STATE_COMPRESSED_NO_CLEAR] = "ISL_AUX_STATE_COMPRESSED_NO_CLEAR",
137     [ISL_AUX_STATE_RESOLVED           ] = "ISL_AUX_STATE_RESOLVED",
138     [ISL_AUX_STATE_PASS_THROUGH       ] = "ISL_AUX_STATE_PASS_THROUGH",
139     [ISL_AUX_STATE_AUX_INVALID        ] = "ISL_AUX_STATE_AUX_INVALID"
140    }[state];
141 }
142 
143 #undef E
144 #define E(state1, usage, op, state2) \
145    EXPECT_EQ(ISL_AUX_STATE_ ## state2, \
146              isl_aux_state_transition_aux_op(ISL_AUX_STATE_ ## state1, \
147                                              ISL_AUX_USAGE_ ## usage, \
148                                              ISL_AUX_OP_ ## op))
149 
150 /* The usages used in each test of this suite represent all combinations of
151  * ::fast_clear and ::full_resolves_ambiguate.
152  */
TEST(StateTransitionAuxOp,None)153 TEST(StateTransitionAuxOp, None) {
154    E(CLEAR, NONE, NONE, ASSERT);
155    E(PARTIAL_CLEAR, NONE, NONE, ASSERT);
156    E(COMPRESSED_CLEAR, NONE, NONE, ASSERT);
157    E(COMPRESSED_NO_CLEAR, NONE, NONE, ASSERT);
158    E(RESOLVED, NONE, NONE, RESOLVED);
159    E(PASS_THROUGH, NONE, NONE, PASS_THROUGH);
160    E(AUX_INVALID, NONE, NONE, AUX_INVALID);
161 
162    E(CLEAR, MC, NONE, ASSERT);
163    E(PARTIAL_CLEAR, MC, NONE, ASSERT);
164    E(COMPRESSED_CLEAR, MC, NONE, ASSERT);
165    E(COMPRESSED_NO_CLEAR, MC, NONE, COMPRESSED_NO_CLEAR);
166    E(RESOLVED, MC, NONE, RESOLVED);
167    E(PASS_THROUGH, MC, NONE, PASS_THROUGH);
168    E(AUX_INVALID, MC, NONE, AUX_INVALID);
169 
170    E(CLEAR, HIZ, NONE, CLEAR);
171    E(PARTIAL_CLEAR, HIZ, NONE, PARTIAL_CLEAR);
172    E(COMPRESSED_CLEAR, HIZ, NONE, COMPRESSED_CLEAR);
173    E(COMPRESSED_NO_CLEAR, HIZ, NONE, COMPRESSED_NO_CLEAR);
174    E(RESOLVED, HIZ, NONE, RESOLVED);
175    E(PASS_THROUGH, HIZ, NONE, PASS_THROUGH);
176    E(AUX_INVALID, HIZ, NONE, AUX_INVALID);
177 
178    E(CLEAR, CCS_E, NONE, CLEAR);
179    E(PARTIAL_CLEAR, CCS_E, NONE, PARTIAL_CLEAR);
180    E(COMPRESSED_CLEAR, CCS_E, NONE, COMPRESSED_CLEAR);
181    E(COMPRESSED_NO_CLEAR, CCS_E, NONE, COMPRESSED_NO_CLEAR);
182    E(RESOLVED, CCS_E, NONE, RESOLVED);
183    E(PASS_THROUGH, CCS_E, NONE, PASS_THROUGH);
184    E(AUX_INVALID, CCS_E, NONE, AUX_INVALID);
185 }
186 
TEST(StateTransitionAuxOp,FastClear)187 TEST(StateTransitionAuxOp, FastClear) {
188    E(CLEAR, NONE, FAST_CLEAR, ASSERT);
189    E(PARTIAL_CLEAR, NONE, FAST_CLEAR, ASSERT);
190    E(COMPRESSED_CLEAR, NONE, FAST_CLEAR, ASSERT);
191    E(COMPRESSED_NO_CLEAR, NONE, FAST_CLEAR, ASSERT);
192    E(RESOLVED, NONE, FAST_CLEAR, ASSERT);
193    E(PASS_THROUGH, NONE, FAST_CLEAR, ASSERT);
194    E(AUX_INVALID, NONE, FAST_CLEAR, ASSERT);
195 
196    E(CLEAR, MC, FAST_CLEAR, ASSERT);
197    E(PARTIAL_CLEAR, MC, FAST_CLEAR, ASSERT);
198    E(COMPRESSED_CLEAR, MC, FAST_CLEAR, ASSERT);
199    E(COMPRESSED_NO_CLEAR, MC, FAST_CLEAR, ASSERT);
200    E(RESOLVED, MC, FAST_CLEAR, ASSERT);
201    E(PASS_THROUGH, MC, FAST_CLEAR, ASSERT);
202    E(AUX_INVALID, MC, FAST_CLEAR, ASSERT);
203 
204    E(CLEAR, HIZ, FAST_CLEAR, CLEAR);
205    E(PARTIAL_CLEAR, HIZ, FAST_CLEAR, CLEAR);
206    E(COMPRESSED_CLEAR, HIZ, FAST_CLEAR, CLEAR);
207    E(COMPRESSED_NO_CLEAR, HIZ, FAST_CLEAR, CLEAR);
208    E(RESOLVED, HIZ, FAST_CLEAR, CLEAR);
209    E(PASS_THROUGH, HIZ, FAST_CLEAR, CLEAR);
210    E(AUX_INVALID, HIZ, FAST_CLEAR, CLEAR);
211 
212    E(CLEAR, CCS_E, FAST_CLEAR, CLEAR);
213    E(PARTIAL_CLEAR, CCS_E, FAST_CLEAR, CLEAR);
214    E(COMPRESSED_CLEAR, CCS_E, FAST_CLEAR, CLEAR);
215    E(COMPRESSED_NO_CLEAR, CCS_E, FAST_CLEAR, CLEAR);
216    E(RESOLVED, CCS_E, FAST_CLEAR, CLEAR);
217    E(PASS_THROUGH, CCS_E, FAST_CLEAR, CLEAR);
218    E(AUX_INVALID, CCS_E, FAST_CLEAR, CLEAR);
219 }
220 
TEST(StateTransitionAuxOp,PartialResolve)221 TEST(StateTransitionAuxOp, PartialResolve) {
222    E(CLEAR, NONE, PARTIAL_RESOLVE, ASSERT);
223    E(PARTIAL_CLEAR, NONE, PARTIAL_RESOLVE, ASSERT);
224    E(COMPRESSED_CLEAR, NONE, PARTIAL_RESOLVE, ASSERT);
225    E(COMPRESSED_NO_CLEAR, NONE, PARTIAL_RESOLVE, ASSERT);
226    E(RESOLVED, NONE, PARTIAL_RESOLVE, ASSERT);
227    E(PASS_THROUGH, NONE, PARTIAL_RESOLVE, ASSERT);
228    E(AUX_INVALID, NONE, PARTIAL_RESOLVE, ASSERT);
229 
230    E(CLEAR, MC, PARTIAL_RESOLVE, ASSERT);
231    E(PARTIAL_CLEAR, MC, PARTIAL_RESOLVE, ASSERT);
232    E(COMPRESSED_CLEAR, MC, PARTIAL_RESOLVE, ASSERT);
233    E(COMPRESSED_NO_CLEAR, MC, PARTIAL_RESOLVE, ASSERT);
234    E(RESOLVED, MC, PARTIAL_RESOLVE, ASSERT);
235    E(PASS_THROUGH, MC, PARTIAL_RESOLVE, ASSERT);
236    E(AUX_INVALID, MC, PARTIAL_RESOLVE, ASSERT);
237 
238    E(CLEAR, HIZ, PARTIAL_RESOLVE, ASSERT);
239    E(PARTIAL_CLEAR, HIZ, PARTIAL_RESOLVE, ASSERT);
240    E(COMPRESSED_CLEAR, HIZ, PARTIAL_RESOLVE, ASSERT);
241    E(COMPRESSED_NO_CLEAR, HIZ, PARTIAL_RESOLVE, ASSERT);
242    E(RESOLVED, HIZ, PARTIAL_RESOLVE, ASSERT);
243    E(PASS_THROUGH, HIZ, PARTIAL_RESOLVE, ASSERT);
244    E(AUX_INVALID, HIZ, PARTIAL_RESOLVE, ASSERT);
245 
246    E(CLEAR, CCS_E, PARTIAL_RESOLVE, COMPRESSED_NO_CLEAR);
247    E(PARTIAL_CLEAR, CCS_E, PARTIAL_RESOLVE, COMPRESSED_NO_CLEAR);
248    E(COMPRESSED_CLEAR, CCS_E, PARTIAL_RESOLVE, COMPRESSED_NO_CLEAR);
249    E(COMPRESSED_NO_CLEAR, CCS_E, PARTIAL_RESOLVE, COMPRESSED_NO_CLEAR);
250    E(RESOLVED, CCS_E, PARTIAL_RESOLVE, RESOLVED);
251    E(PASS_THROUGH, CCS_E, PARTIAL_RESOLVE, PASS_THROUGH);
252    E(AUX_INVALID, CCS_E, PARTIAL_RESOLVE, ASSERT);
253 }
254 
TEST(StateTransitionAuxOp,FullResolve)255 TEST(StateTransitionAuxOp, FullResolve) {
256    E(CLEAR, NONE, FULL_RESOLVE, ASSERT);
257    E(PARTIAL_CLEAR, NONE, FULL_RESOLVE, ASSERT);
258    E(COMPRESSED_CLEAR, NONE, FULL_RESOLVE, ASSERT);
259    E(COMPRESSED_NO_CLEAR, NONE, FULL_RESOLVE, ASSERT);
260    E(RESOLVED, NONE, FULL_RESOLVE, ASSERT);
261    E(PASS_THROUGH, NONE, FULL_RESOLVE, ASSERT);
262    E(AUX_INVALID, NONE, FULL_RESOLVE, ASSERT);
263 
264    E(CLEAR, MC, FULL_RESOLVE, ASSERT);
265    E(PARTIAL_CLEAR, MC, FULL_RESOLVE, ASSERT);
266    E(COMPRESSED_CLEAR, MC, FULL_RESOLVE, ASSERT);
267    E(COMPRESSED_NO_CLEAR, MC, FULL_RESOLVE, PASS_THROUGH);
268    E(RESOLVED, MC, FULL_RESOLVE, PASS_THROUGH);
269    E(PASS_THROUGH, MC, FULL_RESOLVE, PASS_THROUGH);
270    E(AUX_INVALID, MC, FULL_RESOLVE, ASSERT);
271 
272    E(CLEAR, HIZ, FULL_RESOLVE, RESOLVED);
273    E(PARTIAL_CLEAR, HIZ, FULL_RESOLVE, RESOLVED);
274    E(COMPRESSED_CLEAR, HIZ, FULL_RESOLVE, RESOLVED);
275    E(COMPRESSED_NO_CLEAR, HIZ, FULL_RESOLVE, RESOLVED);
276    E(RESOLVED, HIZ, FULL_RESOLVE, RESOLVED);
277    E(PASS_THROUGH, HIZ, FULL_RESOLVE, PASS_THROUGH);
278    E(AUX_INVALID, HIZ, FULL_RESOLVE, ASSERT);
279 
280    E(CLEAR, CCS_E, FULL_RESOLVE, PASS_THROUGH);
281    E(PARTIAL_CLEAR, CCS_E, FULL_RESOLVE, PASS_THROUGH);
282    E(COMPRESSED_CLEAR, CCS_E, FULL_RESOLVE, PASS_THROUGH);
283    E(COMPRESSED_NO_CLEAR, CCS_E, FULL_RESOLVE, PASS_THROUGH);
284    E(RESOLVED, CCS_E, FULL_RESOLVE, PASS_THROUGH);
285    E(PASS_THROUGH, CCS_E, FULL_RESOLVE, PASS_THROUGH);
286    E(AUX_INVALID, CCS_E, FULL_RESOLVE, ASSERT);
287 }
288 
TEST(StateTransitionAuxOp,Ambiguate)289 TEST(StateTransitionAuxOp, Ambiguate) {
290    E(CLEAR, NONE, AMBIGUATE, ASSERT);
291    E(PARTIAL_CLEAR, NONE, AMBIGUATE, ASSERT);
292    E(COMPRESSED_CLEAR, NONE, AMBIGUATE, ASSERT);
293    E(COMPRESSED_NO_CLEAR, NONE, AMBIGUATE, ASSERT);
294    E(RESOLVED, NONE, AMBIGUATE, ASSERT);
295    E(PASS_THROUGH, NONE, AMBIGUATE, ASSERT);
296    E(AUX_INVALID, NONE, AMBIGUATE, ASSERT);
297 
298    E(CLEAR, MC, AMBIGUATE, ASSERT);
299    E(PARTIAL_CLEAR, MC, AMBIGUATE, ASSERT);
300    E(COMPRESSED_CLEAR, MC, AMBIGUATE, ASSERT);
301    E(COMPRESSED_NO_CLEAR, MC, AMBIGUATE, PASS_THROUGH);
302    E(RESOLVED, MC, AMBIGUATE, PASS_THROUGH);
303    E(PASS_THROUGH, MC, AMBIGUATE, PASS_THROUGH);
304    E(AUX_INVALID, MC, AMBIGUATE, PASS_THROUGH);
305 
306    E(CLEAR, HIZ, AMBIGUATE, PASS_THROUGH);
307    E(PARTIAL_CLEAR, HIZ, AMBIGUATE, PASS_THROUGH);
308    E(COMPRESSED_CLEAR, HIZ, AMBIGUATE, PASS_THROUGH);
309    E(COMPRESSED_NO_CLEAR, HIZ, AMBIGUATE, PASS_THROUGH);
310    E(RESOLVED, HIZ, AMBIGUATE, PASS_THROUGH);
311    E(PASS_THROUGH, HIZ, AMBIGUATE, PASS_THROUGH);
312    E(AUX_INVALID, HIZ, AMBIGUATE, PASS_THROUGH);
313 
314    E(CLEAR, CCS_E, AMBIGUATE, PASS_THROUGH);
315    E(PARTIAL_CLEAR, CCS_E, AMBIGUATE, PASS_THROUGH);
316    E(COMPRESSED_CLEAR, CCS_E, AMBIGUATE, PASS_THROUGH);
317    E(COMPRESSED_NO_CLEAR, CCS_E, AMBIGUATE, PASS_THROUGH);
318    E(RESOLVED, CCS_E, AMBIGUATE, PASS_THROUGH);
319    E(PASS_THROUGH, CCS_E, AMBIGUATE, PASS_THROUGH);
320    E(AUX_INVALID, CCS_E, AMBIGUATE, PASS_THROUGH);
321 }
322 
323 #undef E
324 #define E(state1, usage, full_surface, state2) \
325    EXPECT_EQ(ISL_AUX_STATE_ ## state2, \
326              isl_aux_state_transition_write(ISL_AUX_STATE_ ## state1, \
327                                             ISL_AUX_USAGE_ ## usage, \
328                                             full_surface))
329 
TEST(StateTransitionWrite,WritesOnlyTouchMain)330 TEST(StateTransitionWrite, WritesOnlyTouchMain) {
331    E(CLEAR, NONE, false, ASSERT);
332    E(CLEAR, NONE, true, AUX_INVALID);
333    E(PARTIAL_CLEAR, NONE, false, ASSERT);
334    E(PARTIAL_CLEAR, NONE, true, AUX_INVALID);
335    E(COMPRESSED_CLEAR, NONE, false, ASSERT);
336    E(COMPRESSED_CLEAR, NONE, true, AUX_INVALID);
337    E(COMPRESSED_NO_CLEAR, NONE, false, ASSERT);
338    E(COMPRESSED_NO_CLEAR, NONE, true, AUX_INVALID);
339    E(RESOLVED, NONE, false, AUX_INVALID);
340    E(RESOLVED, NONE, true, AUX_INVALID);
341    E(PASS_THROUGH, NONE, false, PASS_THROUGH);
342    E(PASS_THROUGH, NONE, true, PASS_THROUGH);
343    E(AUX_INVALID, NONE, false, AUX_INVALID);
344    E(AUX_INVALID, NONE, true, AUX_INVALID);
345 }
346 
TEST(StateTransitionWrite,WritesCompress)347 TEST(StateTransitionWrite, WritesCompress) {
348    E(CLEAR, MCS, false, COMPRESSED_CLEAR);
349    E(CLEAR, MCS, true, COMPRESSED_NO_CLEAR);
350    E(PARTIAL_CLEAR, MCS, false, COMPRESSED_CLEAR);
351    E(PARTIAL_CLEAR, MCS, true, COMPRESSED_NO_CLEAR);
352    E(COMPRESSED_CLEAR, MCS, false, COMPRESSED_CLEAR);
353    E(COMPRESSED_CLEAR, MCS, true, COMPRESSED_NO_CLEAR);
354    E(COMPRESSED_NO_CLEAR, MCS, false, COMPRESSED_NO_CLEAR);
355    E(COMPRESSED_NO_CLEAR, MCS, true, COMPRESSED_NO_CLEAR);
356    E(RESOLVED, MCS, false, COMPRESSED_NO_CLEAR);
357    E(RESOLVED, MCS, true, COMPRESSED_NO_CLEAR);
358    E(PASS_THROUGH, MCS, false, COMPRESSED_NO_CLEAR);
359    E(PASS_THROUGH, MCS, true, COMPRESSED_NO_CLEAR);
360    E(AUX_INVALID, MCS, false, ASSERT);
361    E(AUX_INVALID, MCS, true, ASSERT);
362 
363    E(CLEAR, STC_CCS, false, ASSERT);
364    E(CLEAR, STC_CCS, true, ASSERT);
365    E(PARTIAL_CLEAR, STC_CCS, false, ASSERT);
366    E(PARTIAL_CLEAR, STC_CCS, true, ASSERT);
367    E(COMPRESSED_CLEAR, STC_CCS, false, ASSERT);
368    E(COMPRESSED_CLEAR, STC_CCS, true, ASSERT);
369    E(COMPRESSED_NO_CLEAR, STC_CCS, false, COMPRESSED_NO_CLEAR);
370    E(COMPRESSED_NO_CLEAR, STC_CCS, true, COMPRESSED_NO_CLEAR);
371    E(RESOLVED, STC_CCS, false, COMPRESSED_NO_CLEAR);
372    E(RESOLVED, STC_CCS, true, COMPRESSED_NO_CLEAR);
373    E(PASS_THROUGH, STC_CCS, false, COMPRESSED_NO_CLEAR);
374    E(PASS_THROUGH, STC_CCS, true, COMPRESSED_NO_CLEAR);
375    E(AUX_INVALID, STC_CCS, false, ASSERT);
376    E(AUX_INVALID, STC_CCS, true, ASSERT);
377 }
378 
TEST(StateTransitionWrite,WritesCompressClear)379 TEST(StateTransitionWrite, WritesCompressClear) {
380    E(CLEAR, GEN12_CCS_E, false, COMPRESSED_CLEAR);
381    E(CLEAR, GEN12_CCS_E, true, COMPRESSED_CLEAR);
382    E(PARTIAL_CLEAR, GEN12_CCS_E, false, COMPRESSED_CLEAR);
383    E(PARTIAL_CLEAR, GEN12_CCS_E, true, COMPRESSED_CLEAR);
384    E(COMPRESSED_CLEAR, GEN12_CCS_E, false, COMPRESSED_CLEAR);
385    E(COMPRESSED_CLEAR, GEN12_CCS_E, true, COMPRESSED_CLEAR);
386    E(COMPRESSED_NO_CLEAR, GEN12_CCS_E, false, COMPRESSED_CLEAR);
387    E(COMPRESSED_NO_CLEAR, GEN12_CCS_E, true, COMPRESSED_CLEAR);
388    E(RESOLVED, GEN12_CCS_E, false, COMPRESSED_CLEAR);
389    E(RESOLVED, GEN12_CCS_E, true, COMPRESSED_CLEAR);
390    E(PASS_THROUGH, GEN12_CCS_E, false, COMPRESSED_CLEAR);
391    E(PASS_THROUGH, GEN12_CCS_E, true, COMPRESSED_CLEAR);
392    E(AUX_INVALID, GEN12_CCS_E, false, ASSERT);
393    E(AUX_INVALID, GEN12_CCS_E, true, ASSERT);
394 }
395 
TEST(StateTransitionWrite,WritesResolveAmbiguate)396 TEST(StateTransitionWrite, WritesResolveAmbiguate) {
397    E(CLEAR, CCS_D, false, PARTIAL_CLEAR);
398    E(CLEAR, CCS_D, true, PASS_THROUGH);
399    E(PARTIAL_CLEAR, CCS_D, false, PARTIAL_CLEAR);
400    E(PARTIAL_CLEAR, CCS_D, true, PASS_THROUGH);
401    E(COMPRESSED_CLEAR, CCS_D, false, ASSERT);
402    E(COMPRESSED_CLEAR, CCS_D, true, ASSERT);
403    E(COMPRESSED_NO_CLEAR, CCS_D, false, ASSERT);
404    E(COMPRESSED_NO_CLEAR, CCS_D, true, ASSERT);
405    E(RESOLVED, CCS_D, false, RESOLVED);
406    E(RESOLVED, CCS_D, true, PASS_THROUGH);
407    E(PASS_THROUGH, CCS_D, false, PASS_THROUGH);
408    E(PASS_THROUGH, CCS_D, true, PASS_THROUGH);
409    E(AUX_INVALID, CCS_D, false, ASSERT);
410    E(AUX_INVALID, CCS_D, true, ASSERT);
411 
412    E(CLEAR, MC, false, ASSERT);
413    E(CLEAR, MC, true, ASSERT);
414    E(PARTIAL_CLEAR, MC, false, ASSERT);
415    E(PARTIAL_CLEAR, MC, true, ASSERT);
416    E(COMPRESSED_CLEAR, MC, false, ASSERT);
417    E(COMPRESSED_CLEAR, MC, true, ASSERT);
418    E(COMPRESSED_NO_CLEAR, MC, false, COMPRESSED_NO_CLEAR);
419    E(COMPRESSED_NO_CLEAR, MC, true, PASS_THROUGH);
420    E(RESOLVED, MC, false, RESOLVED);
421    E(RESOLVED, MC, true, PASS_THROUGH);
422    E(PASS_THROUGH, MC, false, PASS_THROUGH);
423    E(PASS_THROUGH, MC, true, PASS_THROUGH);
424    E(AUX_INVALID, MC, false, ASSERT);
425    E(AUX_INVALID, MC, true, ASSERT);
426 }
427 
428 #undef E
429