1 /*===================== begin_copyright_notice ==================================
2 
3 # Copyright (c) 2020-2021, Intel Corporation
4 
5 # Permission is hereby granted, free of charge, to any person obtaining a
6 # copy of this software and associated documentation files (the "Software"),
7 # to deal in the Software without restriction, including without limitation
8 # the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 # and/or sell copies of the Software, and to permit persons to whom the
10 # Software is furnished to do so, subject to the following conditions:
11 
12 # The above copyright notice and this permission notice shall be included
13 # in all copies or substantial portions of the Software.
14 
15 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
16 # OR 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
19 # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
20 # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
21 # OTHER DEALINGS IN THE SOFTWARE.
22 
23 ======================= end_copyright_notice ==================================*/
24 //!
25 //! \file      hal_kernelrules_xe_xpm.c
26 //! \brief         Fast Compositing Kernel DLL rules for Xe_XPM FC
27 //!
28 #include "hal_kerneldll.h"  // Rule definitions
29 #include "vpkrnheader.h"    // Kernel IDs
30 
31 extern const Kdll_RuleEntry g_KdllRuleTable_Xe_Hpm[] =
32 {
33     // Kernel Setup
34 
35     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
36     { RID_IsParserState    , Parser_Begin                       , Kdll_None },
37     { RID_SetParserState   , Parser_SetRenderMethod             , Kdll_None },
38 
39     // Set rendering method
40     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
41     { RID_IsParserState    , Parser_SetRenderMethod             , Kdll_None },
42     { RID_IsRenderMethod   , RenderMethod_MediaObject           , Kdll_None },
43     { RID_SetKernel        , IDR_VP_VP_Setup                    , Kdll_None },
44     { RID_SetParserState   , Parser_SetupLayer0                 , Kdll_None },
45 
46     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
47     { RID_IsParserState    , Parser_SetRenderMethod             , Kdll_None },
48     { RID_IsRenderMethod   , RenderMethod_MediaObjectWalker     , Kdll_None },
49     { RID_SetKernel        , IDR_VP_VP_Setup_MediaWalker        , Kdll_None },
50     { RID_SetParserState   , Parser_SetupLayer0                 , Kdll_None },
51 
52     // Set Layer 0
53 
54     // If first layer is RT, it's colorfill only case. Make sure.
55     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
56     { RID_IsParserState    , Parser_SetupLayer0                 , Kdll_None },
57     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },    // If it's RT
58     { RID_IsLayerNumber    , 0                                  , Kdll_None },    // If it's first layer.
59     { RID_SetParserState   , Parser_SetParamsTarget             , Kdll_None },
60 
61     // 1st layer
62     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
63     { RID_IsParserState    , Parser_SetupLayer0                 , Kdll_None },
64     { RID_IsLayerNumber    , 0                                  , Kdll_None },
65     { RID_SetKernel        , IDR_VP_Set_Layer_0                 , Kdll_None },
66     { RID_SetParserState   , Parser_SetParamsLayer0             , Kdll_None },
67 
68     // Set Layer 1
69 
70     // Please don't change the order of 2 rulesets below.
71     // Single layer
72     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
73     { RID_IsParserState    , Parser_SetupLayer1                 , Kdll_None },
74     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
75     { RID_IsSrc0Sampling   , Sample_Any                         , Kdll_None },  // Src0 must be valid for single layer case.
76     { RID_SetNextLayer     , -1                                 , Kdll_None },  // backoff one layer
77     { RID_SetParserState   , Parser_SampleLayer0                , Kdll_None },
78 
79     // Last layer
80     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
81     { RID_IsParserState    , Parser_SetupLayer1                 , Kdll_None },
82     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
83     { RID_SetParserState   , Parser_SetParamsTarget             , Kdll_None },  // Setup CSC for render target
84 
85     // 2nd layer
86     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
87     { RID_IsParserState    , Parser_SetupLayer1                 , Kdll_None },
88     { RID_IsLayerNumber    , 1                                  , Kdll_None },
89     { RID_SetKernel        , IDR_VP_Set_Layer_1                 , Kdll_None },
90     { RID_SetParserState   , Parser_SetParamsLayer1             , Kdll_None },
91 
92     // 3rd layer
93     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
94     { RID_IsParserState    , Parser_SetupLayer1                 , Kdll_None },
95     { RID_IsLayerNumber    , 2                                  , Kdll_None },
96     { RID_SetKernel        , IDR_VP_Set_Layer_2                 , Kdll_None },
97     { RID_SetParserState   , Parser_SetParamsLayer1             , Kdll_None },
98 
99     // 4th layer
100     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
101     { RID_IsParserState    , Parser_SetupLayer1                 , Kdll_None },
102     { RID_IsLayerNumber    , 3                                  , Kdll_None },
103     { RID_SetKernel        , IDR_VP_Set_Layer_3                 , Kdll_None },
104     { RID_SetParserState   , Parser_SetParamsLayer1             , Kdll_None },
105 
106     // 5th layer
107     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
108     { RID_IsParserState    , Parser_SetupLayer1                 , Kdll_None },
109     { RID_IsLayerNumber    , 4                                  , Kdll_None },
110     { RID_SetKernel        , IDR_VP_Set_Layer_4                 , Kdll_None },
111     { RID_SetParserState   , Parser_SetParamsLayer1             , Kdll_None },
112 
113     // 6th layer
114     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
115     { RID_IsParserState    , Parser_SetupLayer1                 , Kdll_None },
116     { RID_IsLayerNumber    , 5                                  , Kdll_None },
117     { RID_SetKernel        , IDR_VP_Set_Layer_5                 , Kdll_None },
118     { RID_SetParserState   , Parser_SetParamsLayer1             , Kdll_None },
119 
120     // 7th layer
121     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
122     { RID_IsParserState    , Parser_SetupLayer1                 , Kdll_None },
123     { RID_IsLayerNumber    , 6                                  , Kdll_None },
124     { RID_SetKernel        , IDR_VP_Set_Layer_6                 , Kdll_None },
125     { RID_SetParserState   , Parser_SetParamsLayer1             , Kdll_None },
126 
127     // 8th layer
128     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
129     { RID_IsParserState    , Parser_SetupLayer1                 , Kdll_None },
130     { RID_IsLayerNumber    , 7                                  , Kdll_None },
131     { RID_SetKernel        , IDR_VP_Set_Layer_7                 , Kdll_None },
132     { RID_SetParserState   , Parser_SetParamsLayer1             , Kdll_None },
133 
134     // Setup Parameters for Layer 0
135 
136     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
137     { RID_IsParserState    , Parser_SetParamsLayer0             , Kdll_None },
138     { RID_SetSrc0Format    , Format_Source                      , Kdll_None },
139     { RID_SetSrc0Coeff     , CoeffID_Source                     , Kdll_None },
140     { RID_SetSrc0Sampling  , Sample_Source                      , Kdll_None },
141     { RID_SetSrc0Rotation  , Rotate_Source                      , Kdll_None },
142     { RID_SetSrc0ColorFill , ColorFill_Source                   , Kdll_None },
143     { RID_SetSrc0LumaKey   , LumaKey_Source                     , Kdll_None },
144     { RID_SetSrc0Procamp   , Procamp_Source                     , Kdll_None },
145     { RID_SetSrc0Processing, Process_Source                     , Kdll_None },
146     { RID_SetNextLayer     , 0                                  , Kdll_None },
147     { RID_SetParserState   , Parser_SetupLayer1                 , Kdll_None },
148 
149     // Setup Parameters for Layer 1
150 
151     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
152     { RID_IsParserState    , Parser_SetParamsLayer1             , Kdll_None },
153     { RID_SetSrc1Format    , Format_Source                      , Kdll_None },
154     { RID_SetSrc1Coeff     , CoeffID_Source                     , Kdll_None },
155     { RID_SetSrc1Sampling  , Sample_Source                      , Kdll_None },
156     { RID_SetSrc1Rotation  , Rotate_Source                      , Kdll_None },
157     { RID_SetSrc1LumaKey   , LumaKey_Source                     , Kdll_None },
158     { RID_SetSrc1Procamp   , Procamp_Source                     , Kdll_None },
159     { RID_SetSrc1Processing, Process_Source                     , Kdll_None },
160     { RID_SetParserState   , Parser_SampleLayer1                , Kdll_None },
161 
162     // Setup Parameters for Render Target
163 
164     //If only RT is present, it's colorfill only case. Go to write directly.
165     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
166     { RID_IsParserState    , Parser_SetParamsTarget             , Kdll_None },
167     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
168     { RID_IsLayerNumber    , 0                                  , Kdll_None },
169     { RID_SetSrc0ColorFill , ColorFill_Source                   , Kdll_None },
170     { RID_SetSrc0Format    , Format_Source                      , Kdll_None },
171     { RID_SetParserState   , Parser_WriteOutput                 , Kdll_None },
172 
173     // If CSC0 is done before Mix, then jump to SetupCSC1
174     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
175     { RID_IsParserState    , Parser_SetParamsTarget             , Kdll_None },
176     { RID_IsCSCBeforeMix   , true                               , Kdll_None },
177     { RID_SetTargetCspace  , CSpace_Source                      , Kdll_None },
178     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
179 
180     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
181     { RID_IsParserState    , Parser_SetParamsTarget             , Kdll_None },
182     { RID_SetSrc0Format    , Format_Source                      , Kdll_None },
183     { RID_SetSrc0Coeff     , CoeffID_Source                     , Kdll_None },
184     { RID_SetTargetCspace  , CSpace_Source                      , Kdll_None },
185     { RID_SetParserState   , Parser_SetupCSC0                   , Kdll_None },
186 
187     // Sample Y210 -> Src0
188     // Rotate 90 degrees
189     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
190     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
191     { RID_IsSrc0Format     , Format_Y210                         , Kdll_Or   },
192     { RID_IsSrc0Format     , Format_Y216                         , Kdll_None },
193     { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
194     { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                   , Kdll_None },
195     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_0_Rot_90, Kdll_None },
196     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_1_Rot_90, Kdll_None },
197     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_2_Rot_90, Kdll_None },
198     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_3_Rot_90, Kdll_None },
199     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
200 
201     // Rotate 180 degrees
202     { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
203     { RID_IsParserState    , Parser_SampleLayer0                  , Kdll_None },
204     { RID_IsSrc0Format     , Format_Y210                          , Kdll_Or   },
205     { RID_IsSrc0Format     , Format_Y216                          , Kdll_None },
206     { RID_IsSrc0Sampling   , Sample_Scaling_034x                  , Kdll_None },
207     { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                   , Kdll_None },
208     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_0_Rot_180, Kdll_None },
209     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_1_Rot_180, Kdll_None },
210     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_2_Rot_180, Kdll_None },
211     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_3_Rot_180, Kdll_None },
212     { RID_SetParserState   , Parser_SampleLayer0Done              , Kdll_None },
213 
214     // Rotate 270 dgrees
215     { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
216     { RID_IsParserState    , Parser_SampleLayer0                  , Kdll_None },
217     { RID_IsSrc0Format     , Format_Y210                          , Kdll_Or   },
218     { RID_IsSrc0Format     , Format_Y216                          , Kdll_None },
219     { RID_IsSrc0Sampling   , Sample_Scaling_034x                  , Kdll_None },
220     { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                   , Kdll_None },
221     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_0_Rot_270, Kdll_None },
222     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_1_Rot_270, Kdll_None },
223     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_2_Rot_270, Kdll_None },
224     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_3_Rot_270, Kdll_None },
225     { RID_SetParserState   , Parser_SampleLayer0Done              , Kdll_None },
226 
227     // Mirror Horizontal
228     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
229     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
230     { RID_IsSrc0Format     , Format_Y210                         , Kdll_Or   },
231     { RID_IsSrc0Format     , Format_Y216                         , Kdll_None },
232     { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
233     { RID_IsSrc0Rotation   , VPHAL_MIRROR_HORIZONTAL             , Kdll_None },
234     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_0       , Kdll_None },
235     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
236     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_1       , Kdll_None },
237     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
238     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_2       , Kdll_None },
239     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
240     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_3       , Kdll_None },
241     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
242     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
243 
244     // Mirror Vertical
245     { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
246     { RID_IsParserState    , Parser_SampleLayer0                  , Kdll_None },
247     { RID_IsSrc0Format     , Format_Y210                          , Kdll_Or   },
248     { RID_IsSrc0Format     , Format_Y216                          , Kdll_None },
249     { RID_IsSrc0Sampling   , Sample_Scaling_034x                  , Kdll_None },
250     { RID_IsSrc0Rotation   , VPHAL_MIRROR_VERTICAL                , Kdll_None },
251     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_0_Rot_180, Kdll_None },
252     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
253     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_1_Rot_180, Kdll_None },
254     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
255     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_2_Rot_180, Kdll_None },
256     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
257     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_3_Rot_180, Kdll_None },
258     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
259     { RID_SetParserState   , Parser_SampleLayer0Done              , Kdll_None },
260 
261     // Rotate 90 Mirror Vertical
262     { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
263     { RID_IsParserState    , Parser_SampleLayer0                  , Kdll_None },
264     { RID_IsSrc0Format     , Format_Y210                          , Kdll_Or   },
265     { RID_IsSrc0Format     , Format_Y216                          , Kdll_None },
266     { RID_IsSrc0Sampling   , Sample_Scaling_034x                  , Kdll_None },
267     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_VERTICAL      , Kdll_None },
268     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_0_Rot_270, Kdll_None },
269     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
270     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_1_Rot_270, Kdll_None },
271     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
272     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_2_Rot_270, Kdll_None },
273     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
274     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_3_Rot_270, Kdll_None },
275     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
276     { RID_SetParserState   , Parser_SampleLayer0Done              , Kdll_None },
277 
278     // Rotate 90 Mirror Horizontal
279     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
280     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
281     { RID_IsSrc0Format     , Format_Y210                         , Kdll_Or   },
282     { RID_IsSrc0Format     , Format_Y216                         , Kdll_None },
283     { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
284     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_HORIZONTAL   , Kdll_None },
285     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_0_Rot_90, Kdll_None },
286     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
287     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_1_Rot_90, Kdll_None },
288     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
289     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_2_Rot_90, Kdll_None },
290     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
291     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_3_Rot_90, Kdll_None },
292     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
293     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
294 
295     // No Rotation
296     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
297     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
298     { RID_IsSrc0Format     , Format_Y210                         , Kdll_Or   },
299     { RID_IsSrc0Format     , Format_Y216                         , Kdll_None },
300     { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
301     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_0       , Kdll_None },
302     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_1       , Kdll_None },
303     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_2       , Kdll_None },
304     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_3       , Kdll_None },
305     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
306 
307     // Sample Y410 -> Src0
308     // Rotate 90 degrees
309     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
310     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
311     { RID_IsSrc0Format     , Format_Y410                         , Kdll_Or   },
312     { RID_IsSrc0Format     , Format_Y416                         , Kdll_None },
313     { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
314     { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                   , Kdll_None },
315     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_0_Rot_90, Kdll_None },
316     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_1_Rot_90, Kdll_None },
317     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_2_Rot_90, Kdll_None },
318     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_3_Rot_90, Kdll_None },
319     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
320 
321     // Rotate 180 degrees
322     { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
323     { RID_IsParserState    , Parser_SampleLayer0                  , Kdll_None },
324     { RID_IsSrc0Format     , Format_Y410                          , Kdll_Or   },
325     { RID_IsSrc0Format     , Format_Y416                          , Kdll_None },
326     { RID_IsSrc0Sampling   , Sample_Scaling_034x                  , Kdll_None },
327     { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                   , Kdll_None },
328     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_0_Rot_180, Kdll_None },
329     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_1_Rot_180, Kdll_None },
330     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_2_Rot_180, Kdll_None },
331     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_3_Rot_180, Kdll_None },
332     { RID_SetParserState   , Parser_SampleLayer0Done              , Kdll_None },
333 
334     // Rotate 270 dgrees
335     { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
336     { RID_IsParserState    , Parser_SampleLayer0                  , Kdll_None },
337     { RID_IsSrc0Format     , Format_Y410                          , Kdll_Or   },
338     { RID_IsSrc0Format     , Format_Y416                          , Kdll_None },
339     { RID_IsSrc0Sampling   , Sample_Scaling_034x                  , Kdll_None },
340     { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                   , Kdll_None },
341     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_0_Rot_270, Kdll_None },
342     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_1_Rot_270, Kdll_None },
343     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_2_Rot_270, Kdll_None },
344     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_3_Rot_270, Kdll_None },
345     { RID_SetParserState   , Parser_SampleLayer0Done              , Kdll_None },
346 
347     // Mirror Horizontal
348     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
349     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
350     { RID_IsSrc0Format     , Format_Y410                         , Kdll_Or   },
351     { RID_IsSrc0Format     , Format_Y416                         , Kdll_None },
352     { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
353     { RID_IsSrc0Rotation   , VPHAL_MIRROR_HORIZONTAL             , Kdll_None },
354     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_0       , Kdll_None },
355     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
356     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_1       , Kdll_None },
357     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
358     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_2       , Kdll_None },
359     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
360     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_3       , Kdll_None },
361     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
362     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
363 
364     // Mirror Vertical
365     { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
366     { RID_IsParserState    , Parser_SampleLayer0                  , Kdll_None },
367     { RID_IsSrc0Format     , Format_Y410                          , Kdll_Or   },
368     { RID_IsSrc0Format     , Format_Y416                          , Kdll_None },
369     { RID_IsSrc0Sampling   , Sample_Scaling_034x                  , Kdll_None },
370     { RID_IsSrc0Rotation   , VPHAL_MIRROR_VERTICAL                , Kdll_None },
371     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_0_Rot_180, Kdll_None },
372     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
373     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_1_Rot_180, Kdll_None },
374     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
375     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_2_Rot_180, Kdll_None },
376     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
377     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_3_Rot_180, Kdll_None },
378     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
379     { RID_SetParserState   , Parser_SampleLayer0Done              , Kdll_None },
380 
381     // Rotate 90 Mirror Vertical
382     { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
383     { RID_IsParserState    , Parser_SampleLayer0                  , Kdll_None },
384     { RID_IsSrc0Format     , Format_Y410                          , Kdll_Or   },
385     { RID_IsSrc0Format     , Format_Y416                          , Kdll_None },
386     { RID_IsSrc0Sampling   , Sample_Scaling_034x                  , Kdll_None },
387     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_VERTICAL      , Kdll_None },
388     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_0_Rot_270, Kdll_None },
389     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
390     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_1_Rot_270, Kdll_None },
391     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
392     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_2_Rot_270, Kdll_None },
393     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
394     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_3_Rot_270, Kdll_None },
395     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
396     { RID_SetParserState   , Parser_SampleLayer0Done              , Kdll_None },
397 
398     // Rotate 90 Mirror Horizontal
399     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
400     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
401     { RID_IsSrc0Format     , Format_Y410                         , Kdll_Or   },
402     { RID_IsSrc0Format     , Format_Y416                         , Kdll_None },
403     { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
404     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_HORIZONTAL   , Kdll_None },
405     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_0_Rot_90, Kdll_None },
406     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
407     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_1_Rot_90, Kdll_None },
408     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
409     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_2_Rot_90, Kdll_None },
410     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
411     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_3_Rot_90, Kdll_None },
412     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
413     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
414 
415     // No Rotation
416     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
417     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
418     { RID_IsSrc0Format     , Format_Y410                         , Kdll_Or   },
419     { RID_IsSrc0Format     , Format_Y416                         , Kdll_None },
420     { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
421     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_0       , Kdll_None },
422     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_1       , Kdll_None },
423     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_2       , Kdll_None },
424     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_3       , Kdll_None },
425     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
426 
427     // Sample progressive scaling
428     // Sample 0.34x RGB -> Src0
429     // Rotate 90 degrees
430     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
431     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
432     { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
433     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
434     { RID_IsSrc0Format     , Format_400P                        , Kdll_Or   },
435     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
436     { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
437     { RID_IsSrc0Format     , Format_P016                        , Kdll_Or   },
438     { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
439     { RID_IsSrc0Format     , Format_NV12                        , Kdll_None },
440     { RID_IsSrc0Sampling   , Sample_Scaling_034x                , Kdll_None },
441     { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                  , Kdll_None },
442     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_0_Rot_90 , Kdll_None },
443     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_1_Rot_90 , Kdll_None },
444     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_2_Rot_90 , Kdll_None },
445     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_3_Rot_90 , Kdll_None },
446     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
447 
448     // Rotate 180 degrees
449     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
450     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
451     { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
452     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
453     { RID_IsSrc0Format     , Format_400P                        , Kdll_Or   },
454     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
455     { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
456     { RID_IsSrc0Format     , Format_P016                        , Kdll_Or   },
457     { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
458     { RID_IsSrc0Format     , Format_NV12                        , Kdll_None },
459     { RID_IsSrc0Sampling   , Sample_Scaling_034x                , Kdll_None },
460     { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                 , Kdll_None },
461     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_0_Rot_180, Kdll_None },
462     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_1_Rot_180, Kdll_None },
463     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_2_Rot_180, Kdll_None },
464     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_3_Rot_180, Kdll_None },
465     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
466 
467     // Rotate 270 degrees
468     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
469     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
470     { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
471     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
472     { RID_IsSrc0Format     , Format_400P                        , Kdll_Or   },
473     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
474     { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
475     { RID_IsSrc0Format     , Format_P016                        , Kdll_Or   },
476     { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
477     { RID_IsSrc0Format     , Format_NV12                        , Kdll_None },
478     { RID_IsSrc0Sampling   , Sample_Scaling_034x                , Kdll_None },
479     { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                 , Kdll_None },
480     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_0_Rot_270, Kdll_None },
481     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_1_Rot_270, Kdll_None },
482     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_2_Rot_270, Kdll_None },
483     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_3_Rot_270, Kdll_None },
484     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
485 
486     // Mirror Horizontal
487     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
488     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
489     { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
490     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
491     { RID_IsSrc0Format     , Format_400P                        , Kdll_Or   },
492     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
493     { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
494     { RID_IsSrc0Format     , Format_P016                        , Kdll_Or   },
495     { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
496     { RID_IsSrc0Format     , Format_NV12                        , Kdll_None },
497     { RID_IsSrc0Sampling   , Sample_Scaling_034x                , Kdll_None },
498     { RID_IsSrc0Rotation   , VPHAL_MIRROR_HORIZONTAL            , Kdll_None },
499     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_0        , Kdll_None },
500     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
501     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_1        , Kdll_None },
502     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
503     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_2        , Kdll_None },
504     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
505     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_3        , Kdll_None },
506     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
507     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
508 
509     // Mirror Vertical
510     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
511     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
512     { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
513     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
514     { RID_IsSrc0Format     , Format_400P                        , Kdll_Or   },
515     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
516     { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
517     { RID_IsSrc0Format     , Format_P016                        , Kdll_Or   },
518     { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
519     { RID_IsSrc0Format     , Format_NV12                        , Kdll_None },
520     { RID_IsSrc0Sampling   , Sample_Scaling_034x                , Kdll_None },
521     { RID_IsSrc0Rotation   , VPHAL_MIRROR_VERTICAL              , Kdll_None },
522     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_0_Rot_180, Kdll_None },
523     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
524     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_1_Rot_180, Kdll_None },
525     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
526     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_2_Rot_180, Kdll_None },
527     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
528     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_3_Rot_180, Kdll_None },
529     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
530     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
531 
532     // Rotate 90 Mirror Vertical
533     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
534     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
535     { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
536     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
537     { RID_IsSrc0Format     , Format_400P                        , Kdll_Or   },
538     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
539     { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
540     { RID_IsSrc0Format     , Format_P016                        , Kdll_Or   },
541     { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
542     { RID_IsSrc0Format     , Format_NV12                        , Kdll_None },
543     { RID_IsSrc0Sampling   , Sample_Scaling_034x                , Kdll_None },
544     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_VERTICAL    , Kdll_None },
545     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_0_Rot_270, Kdll_None },
546     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
547     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_1_Rot_270, Kdll_None },
548     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
549     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_2_Rot_270, Kdll_None },
550     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
551     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_3_Rot_270, Kdll_None },
552     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
553     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
554 
555     // Rotate 90 Mirror Horizontal
556     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
557     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
558     { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
559     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
560     { RID_IsSrc0Format     , Format_400P                        , Kdll_Or   },
561     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
562     { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
563     { RID_IsSrc0Format     , Format_P016                        , Kdll_Or   },
564     { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
565     { RID_IsSrc0Format     , Format_NV12                        , Kdll_None },
566     { RID_IsSrc0Sampling   , Sample_Scaling_034x                , Kdll_None },
567     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_HORIZONTAL  , Kdll_None },
568     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_0_Rot_90 , Kdll_None },
569     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
570     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_1_Rot_90 , Kdll_None },
571     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
572     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_2_Rot_90 , Kdll_None },
573     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
574     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_3_Rot_90 , Kdll_None },
575     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
576     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
577 
578     // No Rotation
579     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
580     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
581     { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
582     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
583     { RID_IsSrc0Format     , Format_400P                        , Kdll_Or   },
584     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
585     { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
586     { RID_IsSrc0Format     , Format_P016                        , Kdll_Or   },
587     { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
588     { RID_IsSrc0Format     , Format_NV12                        , Kdll_None },
589     { RID_IsSrc0Sampling   , Sample_Scaling_034x                , Kdll_None },
590     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_0        , Kdll_None },
591     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_1        , Kdll_None },
592     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_2        , Kdll_None },
593     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_3        , Kdll_None },
594     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
595 
596     // Sample 0.34x PL2(width or height is not a multiple of 4) -> Src0
597     // Rotate 90 degrees
598     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
599     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
600     { RID_IsSrc0Format     , Format_PL2                          , Kdll_Or   },
601     { RID_IsSrc0Format     , Format_PL2_UnAligned                , Kdll_None },
602     { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
603     { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                   , Kdll_None },
604     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_0_Rot_90 , Kdll_None },
605     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_1_Rot_90 , Kdll_None },
606     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_2_Rot_90 , Kdll_None },
607     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_3_Rot_90 , Kdll_None },
608     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
609 
610     // Rotate 180 degrees
611     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
612     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
613     { RID_IsSrc0Format     , Format_PL2                          , Kdll_Or   },
614     { RID_IsSrc0Format     , Format_PL2_UnAligned                , Kdll_None },
615     { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
616     { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                  , Kdll_None },
617     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_0_Rot_180, Kdll_None },
618     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_1_Rot_180, Kdll_None },
619     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_2_Rot_180, Kdll_None },
620     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_3_Rot_180, Kdll_None },
621     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
622 
623     // Rotate 270 degrees
624     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
625     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
626     { RID_IsSrc0Format     , Format_PL2                          , Kdll_Or   },
627     { RID_IsSrc0Format     , Format_PL2_UnAligned                , Kdll_None },
628     { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
629     { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                  , Kdll_None },
630     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_0_Rot_270, Kdll_None },
631     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_1_Rot_270, Kdll_None },
632     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_2_Rot_270, Kdll_None },
633     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_3_Rot_270, Kdll_None },
634     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
635 
636     // Mirror Horizontal
637     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
638     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
639     { RID_IsSrc0Format     , Format_PL2                          , Kdll_Or   },
640     { RID_IsSrc0Format     , Format_PL2_UnAligned                , Kdll_None },
641     { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
642     { RID_IsSrc0Rotation   , VPHAL_MIRROR_HORIZONTAL             , Kdll_None },
643     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_0        , Kdll_None },
644     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
645     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_1        , Kdll_None },
646     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
647     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_2        , Kdll_None },
648     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
649     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_3        , Kdll_None },
650     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
651     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
652 
653     // Mirror Vertical
654     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
655     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
656     { RID_IsSrc0Format     , Format_PL2                          , Kdll_Or   },
657     { RID_IsSrc0Format     , Format_PL2_UnAligned                , Kdll_None },
658     { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
659     { RID_IsSrc0Rotation   , VPHAL_MIRROR_VERTICAL               , Kdll_None },
660     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_0_Rot_180, Kdll_None },
661     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
662     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_1_Rot_180, Kdll_None },
663     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
664     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_2_Rot_180, Kdll_None },
665     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
666     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_3_Rot_180, Kdll_None },
667     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
668     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
669 
670     // Rotate 90 Mirror Vertical
671     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
672     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
673     { RID_IsSrc0Format     , Format_PL2                          , Kdll_Or   },
674     { RID_IsSrc0Format     , Format_PL2_UnAligned                , Kdll_None },
675     { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
676     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_VERTICAL     , Kdll_None },
677     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_0_Rot_270, Kdll_None },
678     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
679     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_1_Rot_270, Kdll_None },
680     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
681     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_2_Rot_270, Kdll_None },
682     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
683     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_3_Rot_270, Kdll_None },
684     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
685     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
686 
687     // Rotate 90 Mirror Horizontal
688     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
689     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
690     { RID_IsSrc0Format     , Format_PL2                          , Kdll_Or   },
691     { RID_IsSrc0Format     , Format_PL2_UnAligned                , Kdll_None },
692     { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
693     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_HORIZONTAL   , Kdll_None },
694     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_0_Rot_90 , Kdll_None },
695     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
696     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_1_Rot_90 , Kdll_None },
697     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
698     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_2_Rot_90 , Kdll_None },
699     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
700     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_3_Rot_90 , Kdll_None },
701     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
702     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
703 
704     // No Rotation
705     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
706     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
707     { RID_IsSrc0Format     , Format_PL2                          , Kdll_Or   },
708     { RID_IsSrc0Format     , Format_PL2_UnAligned                , Kdll_None },
709     { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
710     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_0        , Kdll_None },
711     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_1        , Kdll_None },
712     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_2        , Kdll_None },
713     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_3        , Kdll_None },
714     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
715 
716     // Sample 0.34x PL3 -> Src0
717     // Rotate 90 degrees
718     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
719     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
720     { RID_IsSrc0Format     , Format_PL3                          , Kdll_Or   },
721     { RID_IsSrc0Format     , Format_PL3_RGB                      , Kdll_None },
722     { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
723     { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                   , Kdll_None },
724     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_0_Rot_90 , Kdll_None },
725     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_1_Rot_90 , Kdll_None },
726     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_2_Rot_90 , Kdll_None },
727     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_3_Rot_90 , Kdll_None },
728     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
729 
730     // Rotate 180 degrees
731     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
732     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
733     { RID_IsSrc0Format     , Format_PL3                          , Kdll_Or   },
734     { RID_IsSrc0Format     , Format_PL3_RGB                      , Kdll_None },
735     { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
736     { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                  , Kdll_None },
737     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_0_Rot_180, Kdll_None },
738     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_1_Rot_180, Kdll_None },
739     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_2_Rot_180, Kdll_None },
740     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_3_Rot_180, Kdll_None },
741     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
742 
743     // Rotate 270 degrees
744     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
745     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
746     { RID_IsSrc0Format     , Format_PL3                          , Kdll_Or   },
747     { RID_IsSrc0Format     , Format_PL3_RGB                      , Kdll_None },
748     { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
749     { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                  , Kdll_None },
750     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_0_Rot_270, Kdll_None },
751     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_1_Rot_270, Kdll_None },
752     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_2_Rot_270, Kdll_None },
753     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_3_Rot_270, Kdll_None },
754     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
755 
756     // Mirror Horizontal
757     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
758     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
759     { RID_IsSrc0Format     , Format_PL3                          , Kdll_Or   },
760     { RID_IsSrc0Format     , Format_PL3_RGB                      , Kdll_None },
761     { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
762     { RID_IsSrc0Rotation   , VPHAL_MIRROR_HORIZONTAL             , Kdll_None },
763     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_0        , Kdll_None },
764     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
765     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_1        , Kdll_None },
766     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
767     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_2        , Kdll_None },
768     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
769     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_3        , Kdll_None },
770     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
771     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
772 
773     // Mirror Vertical
774     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
775     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
776     { RID_IsSrc0Format     , Format_PL3                          , Kdll_Or   },
777     { RID_IsSrc0Format     , Format_PL3_RGB                      , Kdll_None },
778     { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
779     { RID_IsSrc0Rotation   , VPHAL_MIRROR_VERTICAL               , Kdll_None },
780     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_0_Rot_180, Kdll_None },
781     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
782     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_1_Rot_180, Kdll_None },
783     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
784     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_2_Rot_180, Kdll_None },
785     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
786     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_3_Rot_180, Kdll_None },
787     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
788     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
789 
790     // Rotate 90 Mirror Vertical
791     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
792     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
793     { RID_IsSrc0Format     , Format_PL3                          , Kdll_Or   },
794     { RID_IsSrc0Format     , Format_PL3_RGB                      , Kdll_None },
795     { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
796     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_VERTICAL     , Kdll_None },
797     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_0_Rot_270, Kdll_None },
798     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
799     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_1_Rot_270, Kdll_None },
800     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
801     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_2_Rot_270, Kdll_None },
802     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
803     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_3_Rot_270, Kdll_None },
804     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
805     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
806 
807     // Rotate 90 Mirror Horizontal
808     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
809     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
810     { RID_IsSrc0Format     , Format_PL3                          , Kdll_Or   },
811     { RID_IsSrc0Format     , Format_PL3_RGB                      , Kdll_None },
812     { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
813     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_HORIZONTAL   , Kdll_None },
814     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_0_Rot_90 , Kdll_None },
815     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
816     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_1_Rot_90 , Kdll_None },
817     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
818     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_2_Rot_90 , Kdll_None },
819     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
820     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_3_Rot_90 , Kdll_None },
821     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
822     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
823 
824     // No Rotation
825     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
826     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
827     { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
828     { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
829     { RID_IsSrc0Sampling   , Sample_Scaling_034x                , Kdll_None },
830     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_0       , Kdll_None },
831     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_1       , Kdll_None },
832     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_2       , Kdll_None },
833     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_3       , Kdll_None },
834     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
835 
836     // Sample interlaced scaling
837     // Sample 0.34x RGB -> Src0
838     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
839     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
840     { RID_IsSrc0Format     , Format_RGB                         , Kdll_None },
841     { RID_IsSrc0Sampling   , Sample_iScaling_034x               , Kdll_None },
842     { RID_SetKernel        , IDR_VP_PA_444iDScale16_Buf_0       , Kdll_None },
843     { RID_SetKernel        , IDR_VP_PA_444iDScale16_Buf_1       , Kdll_None },
844     { RID_SetKernel        , IDR_VP_PA_444iDScale16_Buf_2       , Kdll_None },
845     { RID_SetKernel        , IDR_VP_PA_444iDScale16_Buf_3       , Kdll_None },
846     { RID_SetParserState   , Parser_SampleLayer0SelectCSC       , Kdll_None },
847 
848      // Sample 0.34x (AYUV | PA |400P | PL2 ) -> Src0
849     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
850     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
851     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
852     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
853     { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
854     { RID_IsSrc0Format     , Format_P016                        , Kdll_Or   },
855     { RID_IsSrc0Format     , Format_400P                        , Kdll_Or   },
856     { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
857     { RID_IsSrc0Format     , Format_NV12                        , Kdll_None },
858     { RID_IsSrc0Sampling   , Sample_iScaling_034x               , Kdll_None },
859     { RID_SetKernel        , IDR_VP_PA_444iDScale16_Buf_0       , Kdll_None },
860     { RID_SetKernel        , IDR_VP_PA_444iDScale16_Buf_1       , Kdll_None },
861     { RID_SetKernel        , IDR_VP_PA_444iDScale16_Buf_2       , Kdll_None },
862     { RID_SetKernel        , IDR_VP_PA_444iDScale16_Buf_3       , Kdll_None },
863     { RID_SetParserState   , Parser_SampleLayer0Mix             , Kdll_None },
864 
865     // Sample 0.34x PL2(width or height is not a multiple of 4) -> Src0
866     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
867     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
868     { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
869     { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
870     { RID_IsSrc0Sampling   , Sample_iScaling_034x               , Kdll_None },
871     { RID_SetKernel        , IDR_VP_PL2_444iDScale16_Buf_0      , Kdll_None },
872     { RID_SetKernel        , IDR_VP_PL2_444iDScale16_Buf_1      , Kdll_None },
873     { RID_SetKernel        , IDR_VP_PL2_444iDScale16_Buf_2      , Kdll_None },
874     { RID_SetKernel        , IDR_VP_PL2_444iDScale16_Buf_3      , Kdll_None },
875     { RID_SetParserState   , Parser_SampleLayer0Mix             , Kdll_None },
876 
877     // Sample 0.34x PL3 -> Src0
878     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
879     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
880     { RID_IsSrc0Format     , Format_PL3                         , Kdll_None },
881     { RID_IsSrc0Sampling   , Sample_iScaling_034x               , Kdll_None },
882     { RID_SetKernel        , IDR_VP_PL3_444iDScale16_Buf_0      , Kdll_None },
883     { RID_SetKernel        , IDR_VP_PL3_444iDScale16_Buf_1      , Kdll_None },
884     { RID_SetKernel        , IDR_VP_PL3_444iDScale16_Buf_2      , Kdll_None },
885     { RID_SetKernel        , IDR_VP_PL3_444iDScale16_Buf_3      , Kdll_None },
886     { RID_SetParserState   , Parser_SampleLayer0Mix             , Kdll_None },
887 
888     // Sample 0.34x PL3_RGB -> Src0
889     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
890     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
891     { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
892     { RID_IsSrc0Sampling   , Sample_iScaling_034x               , Kdll_None },
893     { RID_SetKernel        , IDR_VP_PL3_444iDScale16_Buf_0      , Kdll_None },
894     { RID_SetKernel        , IDR_VP_PL3_444iDScale16_Buf_1      , Kdll_None },
895     { RID_SetKernel        , IDR_VP_PL3_444iDScale16_Buf_2      , Kdll_None },
896     { RID_SetKernel        , IDR_VP_PL3_444iDScale16_Buf_3      , Kdll_None },
897     { RID_SetParserState   , Parser_SampleLayer0SelectCSC       , Kdll_None },
898 
899     // Select CSC for layer 0 Mix only if Render Target format is NV12
900     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
901     { RID_IsParserState    , Parser_SampleLayer0SelectCSC       , Kdll_None },
902     { RID_IsTargetFormat   , Format_NV12                        , Kdll_None },
903     { RID_SetNextLayer     , 2                                  , Kdll_None },   // increase layer number to target layer
904     { RID_SetCSCBeforeMix  , true                               , Kdll_None },
905     { RID_SetSrc0Coeff     , CoeffID_Source                     , Kdll_None },
906     { RID_SetParserState   , Parser_SetupCSC0                   , Kdll_None },
907 
908     // If Render Target is not NV12, simply call Intermix
909     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
910     { RID_IsParserState    , Parser_SampleLayer0SelectCSC       , Kdll_None },
911     { RID_SetParserState   , Parser_SampleLayer0Mix             , Kdll_None },
912 
913     // Intermix the layer 0
914 
915     // Interlaced scaling, intermix the top and bottom fields
916     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
917     { RID_IsParserState    , Parser_SampleLayer0Mix              , Kdll_None },
918     { RID_IsTargetFormat   , Format_NV12                         , Kdll_Or   },
919     { RID_IsTargetFormat   , Format_P016                         , Kdll_Or   },
920     { RID_IsTargetFormat   , Format_P010                         , Kdll_None },
921     { RID_IsSrc0Sampling   , Sample_iScaling                     , Kdll_Or   },
922     { RID_IsSrc0Sampling   , Sample_iScaling_034x                , Kdll_None },
923     { RID_SetKernel        , IDR_VP_Interlace_420_16_Buf_0       , Kdll_None },
924     { RID_SetKernel        , IDR_VP_Interlace_420_16_Buf_1       , Kdll_None },
925     { RID_SetKernel        , IDR_VP_Interlace_420_16_Buf_2       , Kdll_None },
926     { RID_SetKernel        , IDR_VP_Interlace_420_16_Buf_3       , Kdll_None },
927     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
928 
929     // Interlaced scaling, intermix the top and bottom fields
930     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
931     { RID_IsParserState    , Parser_SampleLayer0Mix              , Kdll_None },
932     { RID_SetKernel        , IDR_VP_Interlace_444_16_Buf_0       , Kdll_None },
933     { RID_SetKernel        , IDR_VP_Interlace_444_16_Buf_1       , Kdll_None },
934     { RID_SetKernel        , IDR_VP_Interlace_444_16_Buf_2       , Kdll_None },
935     { RID_SetKernel        , IDR_VP_Interlace_444_16_Buf_3       , Kdll_None },
936     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
937 
938     // Sample Layer 0 Done
939 
940     // Src0 Sampling is complete -> Luma key + CSC
941     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                        , Kdll_None },
942     { RID_IsParserState    , Parser_SampleLayer0Done                 , Kdll_None },
943     { RID_IsSrc0LumaKey    , LumaKey_True                            , Kdll_None },
944     { RID_IsSrc0Coeff      , CoeffID_Any                             , Kdll_None },
945     { RID_SetKernel        , IDR_VP_Compute_Lumakey_Buf0123          , Kdll_None },
946     { RID_SetSrc0LumaKey   , LumaKey_False                           , Kdll_None },
947     { RID_SetSrc0Sampling  , Sample_None                             , Kdll_None },
948     { RID_SetSrc0Format    , Format_None                             , Kdll_None },
949     { RID_SetParserState   , Parser_SetupCSC0                        , Kdll_None },
950 
951     // Src0 Sampling is complete -> Luma key + Colorfill
952     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                        , Kdll_None },
953     { RID_IsParserState    , Parser_SampleLayer0Done                 , Kdll_None },
954     { RID_IsSrc0LumaKey    , LumaKey_True                            , Kdll_None },
955     { RID_IsSrc0ColorFill  , ColorFill_True                          , Kdll_None },
956     { RID_SetKernel        , IDR_VP_Compute_Lumakey_Buf0123          , Kdll_None },
957     { RID_SetSrc0LumaKey   , LumaKey_False                           , Kdll_None },
958     { RID_SetSrc0Sampling  , Sample_None                             , Kdll_None },
959     { RID_SetSrc0Format    , Format_None                             , Kdll_None },
960     { RID_SetParserState   , Parser_Colorfill                        , Kdll_None },
961 
962 
963     // Src0 Sampling is complete -> CSC
964     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                        , Kdll_None },
965     { RID_IsParserState    , Parser_SampleLayer0Done                 , Kdll_None },
966     { RID_IsSrc0Coeff      , CoeffID_Any                             , Kdll_None },
967     { RID_SetSrc0Sampling  , Sample_None                             , Kdll_None },
968     { RID_SetSrc0Format    , Format_None                             , Kdll_None },
969     { RID_SetParserState   , Parser_SetupCSC0                        , Kdll_None },
970 
971     // Src0 Sampling is complete -> Colorfill
972     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                        , Kdll_None },
973     { RID_IsParserState    , Parser_SampleLayer0Done                 , Kdll_None },
974     { RID_IsSrc0ColorFill  , ColorFill_True                          , Kdll_None },
975     { RID_SetSrc0Sampling  , Sample_None                             , Kdll_None },
976     { RID_SetSrc0Format    , Format_None                             , Kdll_None },
977     { RID_SetParserState   , Parser_Colorfill                        , Kdll_None },
978 
979     // Src0 Sampling is complete -> no CSC or Colorfill
980     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                        , Kdll_None },
981     { RID_IsParserState    , Parser_SampleLayer0Done                 , Kdll_None },
982     { RID_SetSrc0Sampling  , Sample_None                             , Kdll_None },
983     { RID_SetSrc0Format    , Format_None                             , Kdll_None },
984     { RID_SetParserState   , Parser_SampleLayer1                     , Kdll_None },
985 
986     // SrcBlend + colorfill
987     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                        , Kdll_None },
988     { RID_IsParserState    , Parser_Colorfill                        , Kdll_None },
989     { RID_IsSrc0Processing , Process_SBlend                          , Kdll_None },
990     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16_SrcBlend    , Kdll_None },
991     { RID_SetSrc0Processing, Process_None                            , Kdll_None },
992     { RID_SetSrc0ColorFill , ColorFill_False                         , Kdll_None },
993     { RID_SetParserState   , Parser_SampleLayer1                     , Kdll_None },
994 
995     // ConstBlend + colorfill
996     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                        , Kdll_None },
997     { RID_IsParserState    , Parser_Colorfill                        , Kdll_None },
998     { RID_IsSrc0Processing , Process_CBlend                          , Kdll_None },
999     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16_ConstBlend  , Kdll_None },
1000     { RID_SetSrc0Processing, Process_None                            , Kdll_None },
1001     { RID_SetSrc0ColorFill , ColorFill_False                         , Kdll_None },
1002     { RID_SetParserState   , Parser_SampleLayer1                     , Kdll_None },
1003 
1004     // ConstSrcBlend + colorfill
1005     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                            , Kdll_None },
1006     { RID_IsParserState    , Parser_Colorfill                            , Kdll_None },
1007     { RID_IsSrc0Processing , Process_CSBlend                             , Kdll_None },
1008     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16_ConstSrcBlend   , Kdll_None },
1009     { RID_SetSrc0Processing, Process_None                                , Kdll_None },
1010     { RID_SetSrc0ColorFill , ColorFill_False                             , Kdll_None },
1011     { RID_SetParserState   , Parser_SampleLayer1                         , Kdll_None },
1012 
1013     // PartBlend + colorfill
1014     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                        , Kdll_None },
1015     { RID_IsParserState    , Parser_Colorfill                        , Kdll_None },
1016     { RID_IsSrc0Processing , Process_PBlend                          , Kdll_None },
1017     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16_PartBlend   , Kdll_None },
1018     { RID_SetSrc0Processing, Process_None                            , Kdll_None },
1019     { RID_SetSrc0ColorFill , ColorFill_False                         , Kdll_None },
1020     { RID_SetParserState   , Parser_SampleLayer1                     , Kdll_None },
1021 
1022     // no AVS -> colorfill
1023     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                    , Kdll_None },
1024     { RID_IsParserState    , Parser_Colorfill                    , Kdll_None },
1025     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
1026     { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
1027     { RID_SetParserState   , Parser_SampleLayer1                 , Kdll_None },
1028 
1029     // Sample Layer 1
1030 
1031     // Sampling for layer0 is not complete, go back
1032     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
1033     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
1034     { RID_IsSrc0Sampling   , Sample_Any                         , Kdll_None },
1035     { RID_SetParserState   , Parser_SampleLayer0                , Kdll_None },
1036 
1037     // Sampling is complete for both layers, perform CSC
1038     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
1039     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
1040     { RID_IsSrc0Sampling   , Sample_None                        , Kdll_None },
1041     { RID_IsSrc1Sampling   , Sample_None                        , Kdll_None },
1042     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
1043 
1044     // Sample Y210 -> Src1
1045     // Rotate 90 degrees
1046     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
1047     { RID_IsParserState    , Parser_SampleLayer1                 , Kdll_None },
1048     { RID_IsSrc1Format     , Format_Y210                         , Kdll_Or   },
1049     { RID_IsSrc1Format     , Format_Y216                         , Kdll_None },
1050     { RID_IsSrc1Sampling   , Sample_Scaling_034x                 , Kdll_None },
1051     { RID_IsLayerRotation  , VPHAL_ROTATION_90                   , Kdll_None },
1052     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_4_Rot_90, Kdll_None },
1053     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_5_Rot_90, Kdll_None },
1054     { RID_SetParserState   , Parser_SetupCSC1                    , Kdll_None },
1055 
1056     // Rotate 180 degrees
1057     { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
1058     { RID_IsParserState    , Parser_SampleLayer1                  , Kdll_None },
1059     { RID_IsSrc1Format     , Format_Y210                          , Kdll_Or },
1060     { RID_IsSrc1Format     , Format_Y216                          , Kdll_None },
1061     { RID_IsSrc1Sampling   , Sample_Scaling_034x                  , Kdll_None },
1062     { RID_IsLayerRotation  , VPHAL_ROTATION_180                   , Kdll_None },
1063     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_4_Rot_180, Kdll_None },
1064     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_5_Rot_180, Kdll_None },
1065     { RID_SetParserState   , Parser_SetupCSC1                     , Kdll_None },
1066 
1067     // Rotate 270 dgrees
1068     { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
1069     { RID_IsParserState    , Parser_SampleLayer1                  , Kdll_None },
1070     { RID_IsSrc1Format     , Format_Y210                          , Kdll_Or   },
1071     { RID_IsSrc1Format     , Format_Y216                          , Kdll_None },
1072     { RID_IsSrc1Sampling   , Sample_Scaling_034x                  , Kdll_None },
1073     { RID_IsLayerRotation  , VPHAL_ROTATION_270                   , Kdll_None },
1074     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_4_Rot_270, Kdll_None },
1075     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_5_Rot_270, Kdll_None },
1076     { RID_SetParserState   , Parser_SetupCSC1                     , Kdll_None },
1077 
1078     // Mirror Horizontal
1079     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
1080     { RID_IsParserState    , Parser_SampleLayer1                 , Kdll_None },
1081     { RID_IsSrc1Format     , Format_Y210                         , Kdll_Or   },
1082     { RID_IsSrc1Format     , Format_Y216                         , Kdll_None },
1083     { RID_IsSrc1Sampling   , Sample_Scaling_034x                 , Kdll_None },
1084     { RID_IsLayerRotation  , VPHAL_MIRROR_HORIZONTAL             , Kdll_None },
1085     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_4       , Kdll_None },
1086     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
1087     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_5       , Kdll_None },
1088     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
1089     { RID_SetParserState   , Parser_SetupCSC1                    , Kdll_None },
1090 
1091     // Mirror Vertical
1092     { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
1093     { RID_IsParserState    , Parser_SampleLayer1                  , Kdll_None },
1094     { RID_IsSrc1Format     , Format_Y210                          , Kdll_Or   },
1095     { RID_IsSrc1Format     , Format_Y216                          , Kdll_None },
1096     { RID_IsSrc1Sampling   , Sample_Scaling_034x                  , Kdll_None },
1097     { RID_IsLayerRotation  , VPHAL_MIRROR_VERTICAL                , Kdll_None },
1098     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_4_Rot_180, Kdll_None },
1099     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
1100     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_5_Rot_180, Kdll_None },
1101     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
1102     { RID_SetParserState   , Parser_SetupCSC1                     , Kdll_None },
1103 
1104     // Rotate 90 Mirror Vertical
1105     { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
1106     { RID_IsParserState    , Parser_SampleLayer1                  , Kdll_None },
1107     { RID_IsSrc1Format     , Format_Y210                          , Kdll_Or   },
1108     { RID_IsSrc1Format     , Format_Y216                          , Kdll_None },
1109     { RID_IsSrc1Sampling   , Sample_Scaling_034x                  , Kdll_None },
1110     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_VERTICAL      , Kdll_None },
1111     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_4_Rot_270, Kdll_None },
1112     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
1113     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_5_Rot_270, Kdll_None },
1114     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
1115     { RID_SetParserState   , Parser_SetupCSC1                     , Kdll_None },
1116 
1117     // Rotate 90 Mirror Horizontal
1118     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
1119     { RID_IsParserState    , Parser_SampleLayer1                 , Kdll_None },
1120     { RID_IsSrc1Format     , Format_Y210                         , Kdll_Or   },
1121     { RID_IsSrc1Format     , Format_Y216                         , Kdll_None },
1122     { RID_IsSrc1Sampling   , Sample_Scaling_034x                 , Kdll_None },
1123     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_HORIZONTAL   , Kdll_None },
1124     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_4_Rot_90, Kdll_None },
1125     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
1126     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_5_Rot_90, Kdll_None },
1127     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
1128     { RID_SetParserState   , Parser_SetupCSC1                    , Kdll_None },
1129 
1130     // No Rotation
1131     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
1132     { RID_IsParserState    , Parser_SampleLayer1                 , Kdll_None },
1133     { RID_IsSrc1Format     , Format_Y210                         , Kdll_Or   },
1134     { RID_IsSrc1Format     , Format_Y216                         , Kdll_None },
1135     { RID_IsSrc1Sampling   , Sample_Scaling_034x                 , Kdll_None },
1136     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_4       , Kdll_None },
1137     { RID_SetKernel        , IDR_VP_Y210_444DScale16_Buf_5       , Kdll_None },
1138     { RID_SetParserState   , Parser_SetupCSC1                    , Kdll_None },
1139 
1140     // Sample Y410 -> Src1
1141     // Rotate 90 degrees
1142     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
1143     { RID_IsParserState    , Parser_SampleLayer1                 , Kdll_None },
1144     { RID_IsSrc1Format     , Format_Y410                         , Kdll_Or   },
1145     { RID_IsSrc1Format     , Format_Y416                         , Kdll_None },
1146     { RID_IsSrc1Sampling   , Sample_Scaling_034x                 , Kdll_None },
1147     { RID_IsLayerRotation  , VPHAL_ROTATION_90                   , Kdll_None },
1148     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_4_Rot_90, Kdll_None },
1149     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_5_Rot_90, Kdll_None },
1150     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
1151 
1152     // Rotate 180 degrees
1153     { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
1154     { RID_IsParserState    , Parser_SampleLayer1                  , Kdll_None },
1155     { RID_IsSrc1Format     , Format_Y410                          , Kdll_Or },
1156     { RID_IsSrc1Format     , Format_Y416                          , Kdll_None },
1157     { RID_IsSrc1Sampling   , Sample_Scaling_034x                  , Kdll_None },
1158     { RID_IsLayerRotation  , VPHAL_ROTATION_180                   , Kdll_None },
1159     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_4_Rot_180, Kdll_None },
1160     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_5_Rot_180, Kdll_None },
1161     { RID_SetParserState   , Parser_SetupCSC1                     , Kdll_None },
1162 
1163     // Rotate 270 dgrees
1164     { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
1165     { RID_IsParserState    , Parser_SampleLayer1                  , Kdll_None },
1166     { RID_IsSrc1Format     , Format_Y410                          , Kdll_Or   },
1167     { RID_IsSrc1Format     , Format_Y416                          , Kdll_None },
1168     { RID_IsSrc1Sampling   , Sample_Scaling_034x                  , Kdll_None },
1169     { RID_IsLayerRotation  , VPHAL_ROTATION_270                   , Kdll_None },
1170     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_4_Rot_270, Kdll_None },
1171     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_5_Rot_270, Kdll_None },
1172     { RID_SetParserState   , Parser_SetupCSC1                     , Kdll_None },
1173 
1174     // Mirror Horizontal
1175     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
1176     { RID_IsParserState    , Parser_SampleLayer1                 , Kdll_None },
1177     { RID_IsSrc1Format     , Format_Y410                         , Kdll_Or   },
1178     { RID_IsSrc1Format     , Format_Y416                         , Kdll_None },
1179     { RID_IsSrc1Sampling   , Sample_Scaling_034x                 , Kdll_None },
1180     { RID_IsLayerRotation  , VPHAL_MIRROR_HORIZONTAL             , Kdll_None },
1181     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_4       , Kdll_None },
1182     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
1183     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_5       , Kdll_None },
1184     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
1185     { RID_SetParserState   , Parser_SetupCSC1                    , Kdll_None },
1186 
1187     // Mirror Vertical
1188     { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
1189     { RID_IsParserState    , Parser_SampleLayer1                  , Kdll_None },
1190     { RID_IsSrc1Format     , Format_Y410                          , Kdll_Or   },
1191     { RID_IsSrc1Format     , Format_Y416                          , Kdll_None },
1192     { RID_IsSrc1Sampling   , Sample_Scaling_034x                  , Kdll_None },
1193     { RID_IsLayerRotation  , VPHAL_MIRROR_VERTICAL                , Kdll_None },
1194     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_4_Rot_180, Kdll_None },
1195     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
1196     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_5_Rot_180, Kdll_None },
1197     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
1198     { RID_SetParserState   , Parser_SetupCSC1                     , Kdll_None },
1199 
1200     // Rotate 90 Mirror Vertical
1201     { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
1202     { RID_IsParserState    , Parser_SampleLayer1                  , Kdll_None },
1203     { RID_IsSrc1Format     , Format_Y410                          , Kdll_Or   },
1204     { RID_IsSrc1Format     , Format_Y416                          , Kdll_None },
1205     { RID_IsSrc1Sampling   , Sample_Scaling_034x                  , Kdll_None },
1206     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_VERTICAL      , Kdll_None },
1207     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_4_Rot_270, Kdll_None },
1208     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
1209     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_5_Rot_270, Kdll_None },
1210     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
1211     { RID_SetParserState   , Parser_SetupCSC1                     , Kdll_None },
1212 
1213     // Rotate 90 Mirror Horizontal
1214     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
1215     { RID_IsParserState    , Parser_SampleLayer1                 , Kdll_None },
1216     { RID_IsSrc1Format     , Format_Y410                         , Kdll_Or   },
1217     { RID_IsSrc1Format     , Format_Y416                         , Kdll_None },
1218     { RID_IsSrc1Sampling   , Sample_Scaling_034x                 , Kdll_None },
1219     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_HORIZONTAL   , Kdll_None },
1220     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_4_Rot_90, Kdll_None },
1221     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
1222     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_5_Rot_90, Kdll_None },
1223     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
1224     { RID_SetParserState   , Parser_SetupCSC1                    , Kdll_None },
1225 
1226     // No Rotation
1227     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
1228     { RID_IsParserState    , Parser_SampleLayer1                 , Kdll_None },
1229     { RID_IsSrc1Format     , Format_Y410                         , Kdll_Or   },
1230     { RID_IsSrc1Format     , Format_Y416                         , Kdll_None },
1231     { RID_IsSrc1Sampling   , Sample_Scaling_034x                 , Kdll_None },
1232     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_4       , Kdll_None },
1233     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_5       , Kdll_None },
1234     { RID_SetParserState   , Parser_SetupCSC1                    , Kdll_None },
1235 
1236     // Sample 0.34x -> Src1
1237     // Rotate 90 degrees
1238     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1239     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
1240     { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
1241     { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
1242     { RID_IsSrc1Format     , Format_400P                        , Kdll_Or   },
1243     { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
1244     { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
1245     { RID_IsSrc1Format     , Format_P016                        , Kdll_Or   },
1246     { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
1247     { RID_IsSrc1Format     , Format_NV12                        , Kdll_None },
1248     { RID_IsSrc1Sampling   , Sample_Scaling_034x                , Kdll_None },
1249     { RID_IsLayerRotation  , VPHAL_ROTATION_90                  , Kdll_None },
1250     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_4_Rot_90 , Kdll_None },
1251     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_5_Rot_90 , Kdll_None },
1252     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
1253 
1254     // Rotate 180 degrees
1255     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1256     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
1257     { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
1258     { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
1259     { RID_IsSrc1Format     , Format_400P                        , Kdll_Or   },
1260     { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
1261     { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
1262     { RID_IsSrc1Format     , Format_P016                        , Kdll_Or   },
1263     { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
1264     { RID_IsSrc1Format     , Format_NV12                        , Kdll_None },
1265     { RID_IsSrc1Sampling   , Sample_Scaling_034x                , Kdll_None },
1266     { RID_IsLayerRotation  , VPHAL_ROTATION_180                 , Kdll_None },
1267     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_4_Rot_180, Kdll_None },
1268     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_5_Rot_180, Kdll_None },
1269     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
1270 
1271     // Rotate 270 degrees
1272     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1273     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
1274     { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
1275     { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
1276     { RID_IsSrc1Format     , Format_400P                        , Kdll_Or   },
1277     { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
1278     { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
1279     { RID_IsSrc1Format     , Format_P016                        , Kdll_Or   },
1280     { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
1281     { RID_IsSrc1Format     , Format_NV12                        , Kdll_None },
1282     { RID_IsSrc1Sampling   , Sample_Scaling_034x                , Kdll_None },
1283     { RID_IsLayerRotation  , VPHAL_ROTATION_270                 , Kdll_None },
1284     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_4_Rot_270, Kdll_None },
1285     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_5_Rot_270, Kdll_None },
1286     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
1287 
1288     // Mirror Horizontal
1289     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1290     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
1291     { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
1292     { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
1293     { RID_IsSrc1Format     , Format_400P                        , Kdll_Or   },
1294     { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
1295     { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
1296     { RID_IsSrc1Format     , Format_P016                        , Kdll_Or   },
1297     { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
1298     { RID_IsSrc1Format     , Format_NV12                        , Kdll_None },
1299     { RID_IsSrc1Sampling   , Sample_Scaling_034x                , Kdll_None },
1300     { RID_IsLayerRotation  , VPHAL_MIRROR_HORIZONTAL            , Kdll_None },
1301     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_4        , Kdll_None },
1302     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1303     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_5        , Kdll_None },
1304     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1305     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
1306 
1307     // Mirror Vertical
1308     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1309     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
1310     { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
1311     { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
1312     { RID_IsSrc1Format     , Format_400P                        , Kdll_Or   },
1313     { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
1314     { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
1315     { RID_IsSrc1Format     , Format_P016                        , Kdll_Or   },
1316     { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
1317     { RID_IsSrc1Format     , Format_NV12                        , Kdll_None },
1318     { RID_IsSrc1Sampling   , Sample_Scaling_034x                , Kdll_None },
1319     { RID_IsLayerRotation  , VPHAL_MIRROR_VERTICAL              , Kdll_None },
1320     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_4_Rot_180, Kdll_None },
1321     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1322     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_5_Rot_180, Kdll_None },
1323     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1324     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
1325 
1326     // Rotate 90 Mirror Vertical
1327     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1328     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
1329     { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
1330     { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
1331     { RID_IsSrc1Format     , Format_400P                        , Kdll_Or   },
1332     { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
1333     { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
1334     { RID_IsSrc1Format     , Format_P016                        , Kdll_Or   },
1335     { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
1336     { RID_IsSrc1Format     , Format_NV12                        , Kdll_None },
1337     { RID_IsSrc1Sampling   , Sample_Scaling_034x                , Kdll_None },
1338     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_VERTICAL    , Kdll_None },
1339     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_4_Rot_270, Kdll_None },
1340     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1341     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_5_Rot_270, Kdll_None },
1342     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1343     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
1344 
1345     // Rotate 90 Mirror Horizontal
1346     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1347     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
1348     { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
1349     { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
1350     { RID_IsSrc1Format     , Format_400P                        , Kdll_Or   },
1351     { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
1352     { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
1353     { RID_IsSrc1Format     , Format_P016                        , Kdll_Or   },
1354     { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
1355     { RID_IsSrc1Format     , Format_NV12                        , Kdll_None },
1356     { RID_IsSrc1Sampling   , Sample_Scaling_034x                , Kdll_None },
1357     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_HORIZONTAL  , Kdll_None },
1358     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_4_Rot_90 , Kdll_None },
1359     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1360     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_5_Rot_90 , Kdll_None },
1361     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1362     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
1363 
1364     // No Rotation
1365     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1366     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
1367     { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
1368     { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
1369     { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
1370     { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
1371     { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
1372     { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
1373     { RID_IsSrc1Format     , Format_P016                        , Kdll_Or   },
1374     { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
1375     { RID_IsSrc1Sampling   , Sample_Scaling_034x                , Kdll_None },
1376     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_4        , Kdll_None },
1377     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_5        , Kdll_None },
1378     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
1379 
1380     // Sample 0.34x PL2(width or height is not a multiple of 4) -> Src1
1381     // Rotate 90 degrees
1382     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
1383     { RID_IsParserState    , Parser_SampleLayer1                 , Kdll_None },
1384     { RID_IsSrc1Format     , Format_PL2                          , Kdll_Or   },
1385     { RID_IsSrc1Format     , Format_PL2_UnAligned                , Kdll_None },
1386     { RID_IsSrc1Sampling   , Sample_Scaling_034x                 , Kdll_None },
1387     { RID_IsLayerRotation  , VPHAL_ROTATION_90                   , Kdll_None },
1388     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_4_Rot_90 , Kdll_None },
1389     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_5_Rot_90 , Kdll_None },
1390     { RID_SetParserState   , Parser_SetupCSC1                    , Kdll_None },
1391 
1392     // Rotate 180 degrees
1393     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
1394     { RID_IsParserState    , Parser_SampleLayer1                 , Kdll_None },
1395     { RID_IsSrc1Format     , Format_PL2                          , Kdll_Or   },
1396     { RID_IsSrc1Format     , Format_PL2_UnAligned                , Kdll_None },
1397     { RID_IsSrc1Sampling   , Sample_Scaling_034x                 , Kdll_None },
1398     { RID_IsLayerRotation  , VPHAL_ROTATION_180                  , Kdll_None },
1399     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_4_Rot_180, Kdll_None },
1400     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_5_Rot_180, Kdll_None },
1401     { RID_SetParserState   , Parser_SetupCSC1                    , Kdll_None },
1402 
1403     // Rotate 270 degrees
1404     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
1405     { RID_IsParserState    , Parser_SampleLayer1                 , Kdll_None },
1406     { RID_IsSrc1Format     , Format_PL2                          , Kdll_Or   },
1407     { RID_IsSrc1Format     , Format_PL2_UnAligned                , Kdll_None },
1408     { RID_IsSrc1Sampling   , Sample_Scaling_034x                 , Kdll_None },
1409     { RID_IsLayerRotation  , VPHAL_ROTATION_270                  , Kdll_None },
1410     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_4_Rot_270, Kdll_None },
1411     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_5_Rot_270, Kdll_None },
1412     { RID_SetParserState   , Parser_SetupCSC1                    , Kdll_None },
1413 
1414     // Mirror Horizontal
1415     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1416     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
1417     { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
1418     { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
1419     { RID_IsSrc1Sampling   , Sample_Scaling_034x                , Kdll_None },
1420     { RID_IsLayerRotation  , VPHAL_MIRROR_HORIZONTAL            , Kdll_None },
1421     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_4       , Kdll_None },
1422     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1423     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_5       , Kdll_None },
1424     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1425     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
1426 
1427     // Mirror Vertical
1428     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
1429     { RID_IsParserState    , Parser_SampleLayer1                 , Kdll_None },
1430     { RID_IsSrc1Format     , Format_PL2                          , Kdll_Or   },
1431     { RID_IsSrc1Format     , Format_PL2_UnAligned                , Kdll_None },
1432     { RID_IsSrc1Sampling   , Sample_Scaling_034x                 , Kdll_None },
1433     { RID_IsLayerRotation  , VPHAL_MIRROR_VERTICAL               , Kdll_None },
1434     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_4_Rot_180, Kdll_None },
1435     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
1436     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_5_Rot_180, Kdll_None },
1437     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
1438     { RID_SetParserState   , Parser_SetupCSC1                    , Kdll_None },
1439 
1440     // Rotate 90 Mirror Vertical
1441     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
1442     { RID_IsParserState    , Parser_SampleLayer1                 , Kdll_None },
1443     { RID_IsSrc1Format     , Format_PL2                          , Kdll_Or   },
1444     { RID_IsSrc1Format     , Format_PL2_UnAligned                , Kdll_None },
1445     { RID_IsSrc1Sampling   , Sample_Scaling_034x                 , Kdll_None },
1446     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_VERTICAL     , Kdll_None },
1447     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_4_Rot_270, Kdll_None },
1448     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
1449     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_5_Rot_270, Kdll_None },
1450     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
1451     { RID_SetParserState   , Parser_SetupCSC1                    , Kdll_None },
1452 
1453     // Rotate 90 Mirror Horizontal
1454     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
1455     { RID_IsParserState    , Parser_SampleLayer1                 , Kdll_None },
1456     { RID_IsSrc1Format     , Format_PL2                          , Kdll_Or   },
1457     { RID_IsSrc1Format     , Format_PL2_UnAligned                , Kdll_None },
1458     { RID_IsSrc1Sampling   , Sample_Scaling_034x                 , Kdll_None },
1459     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_HORIZONTAL   , Kdll_None },
1460     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_4_Rot_90 , Kdll_None },
1461     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
1462     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_5_Rot_90 , Kdll_None },
1463     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
1464     { RID_SetParserState   , Parser_SetupCSC1                    , Kdll_None },
1465 
1466     // No Rotation
1467     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1468     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
1469     { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
1470     { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
1471     { RID_IsSrc1Sampling   , Sample_Scaling_034x                , Kdll_None },
1472     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_4       , Kdll_None },
1473     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_5       , Kdll_None },
1474     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
1475 
1476     // Sample 0.34x PL3 -> Src1
1477     // Rotate 90 degrees
1478     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
1479     { RID_IsParserState    , Parser_SampleLayer1                 , Kdll_None },
1480     { RID_IsSrc1Format     , Format_PL3                          , Kdll_Or   },
1481     { RID_IsSrc1Format     , Format_PL3_RGB                      , Kdll_None },
1482     { RID_IsSrc1Sampling   , Sample_Scaling_034x                 , Kdll_None },
1483     { RID_IsLayerRotation  , VPHAL_ROTATION_90                   , Kdll_None },
1484     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_4_Rot_90 , Kdll_None },
1485     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_5_Rot_90 , Kdll_None },
1486     { RID_SetParserState   , Parser_SetupCSC1                    , Kdll_None },
1487 
1488     // Rotate 180 degrees
1489     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
1490     { RID_IsParserState    , Parser_SampleLayer1                 , Kdll_None },
1491     { RID_IsSrc1Format     , Format_PL3                          , Kdll_Or   },
1492     { RID_IsSrc1Format     , Format_PL3_RGB                      , Kdll_None },
1493     { RID_IsSrc1Sampling   , Sample_Scaling_034x                 , Kdll_None },
1494     { RID_IsLayerRotation  , VPHAL_ROTATION_180                  , Kdll_None },
1495     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_4_Rot_180, Kdll_None },
1496     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_5_Rot_180, Kdll_None },
1497     { RID_SetParserState   , Parser_SetupCSC1                    , Kdll_None },
1498 
1499     // Rotate 270 degrees
1500     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
1501     { RID_IsParserState    , Parser_SampleLayer1                 , Kdll_None },
1502     { RID_IsSrc1Format     , Format_PL3                          , Kdll_Or   },
1503     { RID_IsSrc1Format     , Format_PL3_RGB                      , Kdll_None },
1504     { RID_IsSrc1Sampling   , Sample_Scaling_034x                 , Kdll_None },
1505     { RID_IsLayerRotation  , VPHAL_ROTATION_270                  , Kdll_None },
1506     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_4_Rot_270, Kdll_None },
1507     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_5_Rot_270, Kdll_None },
1508     { RID_SetParserState   , Parser_SetupCSC1                    , Kdll_None },
1509 
1510     // Mirror Horizontal
1511     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1512     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
1513     { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
1514     { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
1515     { RID_IsSrc1Sampling   , Sample_Scaling_034x                , Kdll_None },
1516     { RID_IsLayerRotation  , VPHAL_MIRROR_HORIZONTAL            , Kdll_None },
1517     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_4       , Kdll_None },
1518     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1519     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_5       , Kdll_None },
1520     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1521     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
1522 
1523     // Mirror Vertical
1524     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
1525     { RID_IsParserState    , Parser_SampleLayer1                 , Kdll_None },
1526     { RID_IsSrc1Format     , Format_PL3                          , Kdll_Or   },
1527     { RID_IsSrc1Format     , Format_PL3_RGB                      , Kdll_None },
1528     { RID_IsSrc1Sampling   , Sample_Scaling_034x                 , Kdll_None },
1529     { RID_IsLayerRotation  , VPHAL_MIRROR_VERTICAL               , Kdll_None },
1530     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_4_Rot_180, Kdll_None },
1531     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
1532     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_5_Rot_180, Kdll_None },
1533     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
1534     { RID_SetParserState   , Parser_SetupCSC1                    , Kdll_None },
1535 
1536     // Rotate 90 Mirror Vertical
1537     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
1538     { RID_IsParserState    , Parser_SampleLayer1                 , Kdll_None },
1539     { RID_IsSrc1Format     , Format_PL3                          , Kdll_Or   },
1540     { RID_IsSrc1Format     , Format_PL3_RGB                      , Kdll_None },
1541     { RID_IsSrc1Sampling   , Sample_Scaling_034x                 , Kdll_None },
1542     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_VERTICAL     , Kdll_None },
1543     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_4_Rot_270, Kdll_None },
1544     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
1545     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_5_Rot_270, Kdll_None },
1546     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
1547     { RID_SetParserState   , Parser_SetupCSC1                    , Kdll_None },
1548 
1549     // Rotate 90 Mirror Horizontal
1550     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
1551     { RID_IsParserState    , Parser_SampleLayer1                 , Kdll_None },
1552     { RID_IsSrc1Format     , Format_PL3                          , Kdll_Or   },
1553     { RID_IsSrc1Format     , Format_PL3_RGB                      , Kdll_None },
1554     { RID_IsSrc1Sampling   , Sample_Scaling_034x                 , Kdll_None },
1555     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_HORIZONTAL   , Kdll_None },
1556     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_4_Rot_90 , Kdll_None },
1557     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
1558     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_5_Rot_90 , Kdll_None },
1559     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
1560     { RID_SetParserState   , Parser_SetupCSC1                    , Kdll_None },
1561 
1562     // No Rotation
1563     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1564     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
1565     { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
1566     { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
1567     { RID_IsSrc1Sampling   , Sample_Scaling_034x                , Kdll_None },
1568     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_4       , Kdll_None },
1569     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_5       , Kdll_None },
1570     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
1571 
1572     // Setup CSC coefficients for layer 0
1573     // CSC not present for Render Target
1574     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
1575     { RID_IsParserState    , Parser_SetupCSC0                   , Kdll_None },
1576     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
1577     { RID_IsSrc0Coeff      , CoeffID_None                       , Kdll_None },
1578     { RID_SetParserState   , Parser_WriteOutput                 , Kdll_None },
1579 
1580     // Coeff  0 (CSC+PA), Set Curbe CSC Coefficients
1581     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
1582     { RID_IsParserState    , Parser_SetupCSC0                   , Kdll_None },
1583     { RID_IsSrc0Coeff      , CoeffID_0                          , Kdll_None },
1584     { RID_IsSetCoeffMode   , SetCSCCoeffMethod_Curbe            , Kdll_None },
1585     { RID_SetKernel        , IDR_VP_Set_CURBE_CSC_Coeff         , Kdll_None },
1586     { RID_SetParserState   , Parser_ExecuteCSC0                 , Kdll_None },
1587 
1588     // Coeff  0 (CSC+PA), Set Patch CSC Coefficients
1589     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
1590     { RID_IsParserState    , Parser_SetupCSC0                   , Kdll_None },
1591     { RID_IsSrc0Coeff      , CoeffID_0                          , Kdll_None },
1592     { RID_IsSetCoeffMode   , SetCSCCoeffMethod_Patch            , Kdll_None },
1593     { RID_SetKernel        , IDR_VP_Set_Patched_CSC_Coeff       , Kdll_None },
1594     { RID_SetPatchData     , PatchKind_CSC_Coeff_Src0           , Kdll_None },      // Patch data source is CSC coeff for Src0
1595     { RID_SetPatch         , 1                                  , Kdll_None },      // 1 patches : Count (18), Src (0), Dest (0)
1596     { (Kdll_RuleID) 0x0000 , 0x1800                             , Kdll_None },      //             18 00 0000
1597     { RID_SetParserState   , Parser_ExecuteCSC0                 , Kdll_None },
1598 
1599     // Other Matrices ( cannot include PA)
1600     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
1601     { RID_IsParserState    , Parser_SetupCSC0                   , Kdll_None },
1602     { RID_IsSrc0Coeff      , CoeffID_Any                        , Kdll_None },
1603     { RID_SetKernel        , IDR_VP_Set_Patched_CSC_Coeff       , Kdll_None },
1604     { RID_SetPatchData     , PatchKind_CSC_Coeff_Src0           , Kdll_None },      // Patch data source is CSC coeff for Src0
1605     { RID_SetPatch         , 1                                  , Kdll_None },      // 1 patches : Count (18), Src (0), Dest (0)
1606     { (Kdll_RuleID)0x0000  , 0x1800                             , Kdll_None },      //             18 00 0000
1607     { RID_SetParserState   , Parser_ExecuteCSC0                 , Kdll_None },
1608 
1609     // Setup CSC coefficients for layer 1
1610 
1611     // No color space conversion for any layer
1612     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
1613     { RID_IsParserState    , Parser_SetupCSC1                   , Kdll_None },
1614     { RID_IsSrc0Coeff      , CoeffID_None                       , Kdll_None },
1615     { RID_IsSrc1Coeff      , CoeffID_None                       , Kdll_None },
1616     { RID_SetParserState   , Parser_Lumakey                     , Kdll_None },
1617 
1618     // Quadrant 2,3 - CSC coefficients already set
1619     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
1620     { RID_IsParserState    , Parser_SetupCSC1                   , Kdll_None },
1621     { RID_IsQuadrant       , 2                                  , Kdll_None },
1622     { RID_SetParserState   , Parser_Lumakey                     , Kdll_None },
1623 
1624     // Coeff  0 (CSC+PA), Set Curbe CSC Coefficients
1625     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
1626     { RID_IsParserState    , Parser_SetupCSC1                   , Kdll_None },
1627     { RID_IsSrc1Coeff      , CoeffID_0                          , Kdll_None },
1628     { RID_IsSetCoeffMode   , SetCSCCoeffMethod_Curbe            , Kdll_None },
1629     { RID_SetKernel        , IDR_VP_Set_CURBE_CSC_Coeff         , Kdll_None },
1630     { RID_SetParserState   , Parser_Lumakey                     , Kdll_None },
1631 
1632     // Coeff  0 (CSC+PA), Set Patch CSC Coefficients
1633     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
1634     { RID_IsParserState    , Parser_SetupCSC1                   , Kdll_None },
1635     { RID_IsSrc0Coeff      , CoeffID_0                          , Kdll_None },
1636     { RID_IsSetCoeffMode   , SetCSCCoeffMethod_Patch            , Kdll_None },
1637     { RID_SetKernel        , IDR_VP_Set_Patched_CSC_Coeff       , Kdll_None },
1638     { RID_SetPatchData     , PatchKind_CSC_Coeff_Src1           , Kdll_None },      // Patch data source is CSC coeff for Src0
1639     { RID_SetPatch         , 1                                  , Kdll_None },      // 1 patches : Count (18), Src (0), Dest (0)
1640     { (Kdll_RuleID)0x0000  , 0x1800                             , Kdll_None },      //             18 00 0000
1641     { RID_SetParserState   , Parser_Lumakey                     , Kdll_None },
1642 
1643     // Other Matrices (cannot include PA)
1644     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
1645     { RID_IsParserState    , Parser_SetupCSC1                   , Kdll_None },
1646     { RID_IsSrc1Coeff      , CoeffID_Any                        , Kdll_None },
1647     { RID_SetKernel        , IDR_VP_Set_Patched_CSC_Coeff       , Kdll_None },
1648     { RID_SetPatchData     , PatchKind_CSC_Coeff_Src1           , Kdll_None },      // Patch data source is CSC coeff for Src1
1649     { RID_SetPatch         , 1                                  , Kdll_None },      // 1 patches : Count (18), Src (0), Dest (0)
1650     { (Kdll_RuleID)0x0000  , 0x1800                             , Kdll_None },      //             18 00 0000
1651     { RID_SetParserState   , Parser_Lumakey                     , Kdll_None },
1652 
1653     // Lumakey
1654     // lumakey and CSC not needed for current layer.
1655     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
1656     { RID_IsParserState    , Parser_Lumakey                     , Kdll_None },
1657     { RID_IsSrc1Coeff      , CoeffID_None                       , Kdll_None },
1658     { RID_IsSrc1LumaKey    , LumaKey_False                      , Kdll_None },
1659     { RID_SetParserState   , Parser_ProcessLayer                , Kdll_None },
1660 
1661     // lumakey not needed, CSC needed
1662     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
1663     { RID_IsParserState    , Parser_Lumakey                     , Kdll_None },
1664     { RID_IsSrc1LumaKey    , LumaKey_False                      , Kdll_None },
1665     { RID_IsSrc1Coeff      , CoeffID_Any                        , Kdll_None },
1666     { RID_SetParserState   , Parser_ExecuteCSC1                 , Kdll_None },
1667 
1668     // lumakey and CSC - both needed
1669     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
1670     { RID_IsParserState    , Parser_Lumakey                     , Kdll_None },
1671     { RID_IsQuadrant       , 0                                  , Kdll_None },
1672     { RID_IsSrc1LumaKey    , LumaKey_True                       , Kdll_None },
1673     { RID_IsSrc1Coeff      , CoeffID_Any                        , Kdll_None },
1674     { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
1675     { RID_SetKernel        , IDR_VP_Compute_Lumakey             , Kdll_None },
1676     { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
1677     { RID_SetKernel        , IDR_VP_Compute_Lumakey             , Kdll_None },
1678     { RID_SetParserState   , Parser_ExecuteCSC1                 , Kdll_None },
1679 
1680     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
1681     { RID_IsParserState    , Parser_Lumakey                     , Kdll_None },
1682     { RID_IsQuadrant       , 2                                  , Kdll_None },
1683     { RID_IsSrc1LumaKey    , LumaKey_True                       , Kdll_None },
1684     { RID_IsSrc1Coeff      , CoeffID_Any                        , Kdll_None },
1685     { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
1686     { RID_SetKernel        , IDR_VP_Compute_Lumakey             , Kdll_None },
1687     { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
1688     { RID_SetKernel        , IDR_VP_Compute_Lumakey             , Kdll_None },
1689     { RID_SetParserState   , Parser_ExecuteCSC1                 , Kdll_None },
1690 
1691     // Lumakey needed, CSC not needed
1692     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
1693     { RID_IsParserState    , Parser_Lumakey                     , Kdll_None },
1694     { RID_IsQuadrant       , 0                                  , Kdll_None },
1695     { RID_IsSrc1LumaKey    , LumaKey_True                       , Kdll_None },
1696     { RID_IsSrc1Coeff      , CoeffID_None                       , Kdll_None },
1697     { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
1698     { RID_SetKernel        , IDR_VP_Compute_Lumakey             , Kdll_None },
1699     { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
1700     { RID_SetKernel        , IDR_VP_Compute_Lumakey             , Kdll_None },
1701     { RID_SetParserState   , Parser_ProcessLayer                , Kdll_None },
1702 
1703     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
1704     { RID_IsParserState    , Parser_Lumakey                     , Kdll_None },
1705     { RID_IsQuadrant       , 2                                  , Kdll_None },
1706     { RID_IsSrc1LumaKey    , LumaKey_True                       , Kdll_None },
1707     { RID_IsSrc1Coeff      , CoeffID_None                       , Kdll_None },
1708     { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
1709     { RID_SetKernel        , IDR_VP_Compute_Lumakey             , Kdll_None },
1710     { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
1711     { RID_SetKernel        , IDR_VP_Compute_Lumakey             , Kdll_None },
1712     { RID_SetParserState   , Parser_ProcessLayer                , Kdll_None },
1713 
1714     // Perform CSC operation for layer 0
1715     // Src0 -> any to RGB, if Src0 is pre-multiplied content use CSC_Premultiplied
1716     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1717     { RID_IsParserState    , Parser_ExecuteCSC0                 , Kdll_None },
1718     { RID_IsSrc0Processing , Process_PBlend                     , Kdll_None },
1719     { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf0            , Kdll_None },
1720     { RID_SetKernel        , IDR_VP_Call_CSC_Premultiplied      , Kdll_None },
1721     { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf1            , Kdll_None },
1722     { RID_SetKernel        , IDR_VP_Call_CSC_Premultiplied      , Kdll_None },
1723     { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf2            , Kdll_None },
1724     { RID_SetKernel        , IDR_VP_Call_CSC_Premultiplied      , Kdll_None },
1725     { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf3            , Kdll_None },
1726     { RID_SetKernel        , IDR_VP_Call_CSC_Premultiplied      , Kdll_None },
1727     { RID_SetParserState   , Parser_ExecuteCSC0Done             , Kdll_None },
1728 
1729     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1730     { RID_IsParserState    , Parser_ExecuteCSC0                 , Kdll_None },
1731     { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf0            , Kdll_None },
1732     { RID_SetKernel        , IDR_VP_Call_CSC                    , Kdll_None },
1733     { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf1            , Kdll_None },
1734     { RID_SetKernel        , IDR_VP_Call_CSC                    , Kdll_None },
1735     { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf2            , Kdll_None },
1736     { RID_SetKernel        , IDR_VP_Call_CSC                    , Kdll_None },
1737     { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf3            , Kdll_None },
1738     { RID_SetKernel        , IDR_VP_Call_CSC                    , Kdll_None },
1739     { RID_SetParserState   , Parser_ExecuteCSC0Done             , Kdll_None },
1740 
1741     // CSC0 is complete
1742 
1743     // Check whether go back to intermix layer 0
1744     // Please not change the order of these two rules
1745     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
1746     { RID_IsParserState    , Parser_ExecuteCSC0Done             , Kdll_None },
1747     { RID_IsSrc0Sampling   , Sample_iScaling_034x               , Kdll_None },
1748     { RID_SetSrc0Coeff     , CoeffID_None                       , Kdll_None },
1749     { RID_SetNextLayer     , -2                                 , Kdll_None }, // jump back to main layer
1750     { RID_SetParserState   , Parser_SampleLayer0Mix             , Kdll_None },
1751 
1752     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                    , Kdll_None },
1753     { RID_IsParserState    , Parser_ExecuteCSC0Done              , Kdll_None },
1754     { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
1755     { RID_SetSrc0Coeff     , CoeffID_None                        , Kdll_None },
1756     { RID_SetParserState   , Parser_Colorfill                    , Kdll_None },
1757 
1758     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                    , Kdll_None },
1759     { RID_IsParserState    , Parser_ExecuteCSC0Done              , Kdll_None },
1760     { RID_SetSrc0Coeff     , CoeffID_None                        , Kdll_None },
1761     { RID_SetParserState   , Parser_SampleLayer1                 , Kdll_None },
1762 
1763     // Perform CSC operation for layer 1
1764 
1765     // Src1 -> YUV to RGB, if Src1 is pre-multiplied content use CSC_Premultiplied
1766     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1767     { RID_IsParserState    , Parser_ExecuteCSC1                 , Kdll_None },
1768     { RID_IsSrc1Processing , Process_PBlend                     , Kdll_None },
1769     { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf4            , Kdll_None },
1770     { RID_SetKernel        , IDR_VP_Call_CSC_Premultiplied      , Kdll_None },
1771     { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf5            , Kdll_None },
1772     { RID_SetKernel        , IDR_VP_Call_CSC_Premultiplied      , Kdll_None },
1773     { RID_SetParserState   , Parser_ExecuteCSC1Done             , Kdll_None },
1774 
1775     // Src1 -> YUV to RGB
1776     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1777     { RID_IsParserState    , Parser_ExecuteCSC1                 , Kdll_None },
1778     { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf4            , Kdll_None },
1779     { RID_SetKernel        , IDR_VP_Call_CSC                    , Kdll_None },
1780     { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf5            , Kdll_None },
1781     { RID_SetKernel        , IDR_VP_Call_CSC                    , Kdll_None },
1782     { RID_SetParserState   , Parser_ExecuteCSC1Done             , Kdll_None },
1783 
1784     // Layer 1 CSC is complete - prepare operation
1785     // Quadrants 0,1 CSC complete
1786     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
1787     { RID_IsParserState    , Parser_ExecuteCSC1Done             , Kdll_None },
1788     { RID_IsQuadrant       , 0                                  , Kdll_None },
1789     { RID_SetParserState   , Parser_ProcessLayer                , Kdll_None },
1790 
1791     // Quadrants 2,3 CSC complete
1792     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
1793     { RID_IsParserState    , Parser_ExecuteCSC1Done             , Kdll_None },
1794     { RID_IsQuadrant       , 2                                  , Kdll_None },
1795     { RID_SetSrc1Coeff     , CoeffID_None                       , Kdll_None },
1796     { RID_SetParserState   , Parser_ProcessLayer                , Kdll_None },
1797 
1798     // Process layer
1799 
1800     // Render target layer -> write output and finish
1801     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
1802     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
1803     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
1804     { RID_SetParserState   , Parser_WriteOutput                 , Kdll_None },
1805 
1806     // Single layer -> skip processing - prepare CSC for Render Target
1807     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
1808     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
1809     { RID_IsSrc1Processing , Process_None                       , Kdll_None },
1810     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
1811 
1812     // Compositing quadrants 0,1
1813     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1814     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
1815     { RID_IsQuadrant       , 0                                  , Kdll_None },
1816     { RID_IsSrc1Processing , Process_Composite                  , Kdll_None },
1817     { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
1818     { RID_SetKernel        , IDR_VP_Call_Composite              , Kdll_None },
1819     { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
1820     { RID_SetKernel        , IDR_VP_Call_Composite              , Kdll_None },
1821     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
1822 
1823     // Compositing quadrants 2,3
1824     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1825     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
1826     { RID_IsQuadrant       , 2                                  , Kdll_None },
1827     { RID_IsSrc1Processing , Process_Composite                  , Kdll_None },
1828     { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
1829     { RID_SetKernel        , IDR_VP_Call_Composite              , Kdll_None },
1830     { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
1831     { RID_SetKernel        , IDR_VP_Call_Composite              , Kdll_None },
1832     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
1833 
1834     // Constant Blending quadrants 0,1
1835     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1836     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
1837     { RID_IsQuadrant       , 0                                  , Kdll_None },
1838     { RID_IsSrc1Processing , Process_CBlend                     , Kdll_None },
1839     { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
1840     { RID_SetKernel        , IDR_VP_Call_ConstBlend             , Kdll_None },
1841     { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
1842     { RID_SetKernel        , IDR_VP_Call_ConstBlend             , Kdll_None },
1843     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
1844 
1845     // Constant Blending quadrants 2,3
1846     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1847     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
1848     { RID_IsQuadrant       , 2                                  , Kdll_None },
1849     { RID_IsSrc1Processing , Process_CBlend                     , Kdll_None },
1850     { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
1851     { RID_SetKernel        , IDR_VP_Call_ConstBlend             , Kdll_None },
1852     { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
1853     { RID_SetKernel        , IDR_VP_Call_ConstBlend             , Kdll_None },
1854     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
1855 
1856     // Source Blending quadrants 0,1
1857     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1858     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
1859     { RID_IsQuadrant       , 0                                  , Kdll_None },
1860     { RID_IsSrc1Processing , Process_SBlend                     , Kdll_None },
1861     { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
1862     { RID_SetKernel        , IDR_VP_Call_SrcBlend               , Kdll_None },
1863     { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
1864     { RID_SetKernel        , IDR_VP_Call_SrcBlend               , Kdll_None },
1865     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
1866 
1867     // Source Blending quadrants 2,3
1868     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1869     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
1870     { RID_IsQuadrant       , 2                                  , Kdll_None },
1871     { RID_IsSrc1Processing , Process_SBlend                     , Kdll_None },
1872     { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
1873     { RID_SetKernel        , IDR_VP_Call_SrcBlend               , Kdll_None },
1874     { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
1875     { RID_SetKernel        , IDR_VP_Call_SrcBlend               , Kdll_None },
1876     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
1877 
1878     // Source Blending (4-bits alpha) quadrants 0,1
1879     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1880     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
1881     { RID_IsQuadrant       , 0                                  , Kdll_None },
1882     { RID_IsSrc1Processing , Process_SBlend_4bits               , Kdll_None },
1883     { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
1884     { RID_SetKernel        , IDR_VP_Call_SrcBlend_4bits         , Kdll_None },
1885     { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
1886     { RID_SetKernel        , IDR_VP_Call_SrcBlend_4bits         , Kdll_None },
1887     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
1888 
1889     // Source Blending (4-bits alpha) quadrants 2,3
1890     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1891     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
1892     { RID_IsQuadrant       , 2                                  , Kdll_None },
1893     { RID_IsSrc1Processing , Process_SBlend_4bits               , Kdll_None },
1894     { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
1895     { RID_SetKernel        , IDR_VP_Call_SrcBlend_4bits         , Kdll_None },
1896     { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
1897     { RID_SetKernel        , IDR_VP_Call_SrcBlend_4bits         , Kdll_None },
1898     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
1899 
1900     // Partial Blending quadrants 0,1
1901     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1902     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
1903     { RID_IsQuadrant       , 0                                  , Kdll_None },
1904     { RID_IsSrc1Processing , Process_PBlend                     , Kdll_None },
1905     { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
1906     { RID_SetKernel        , IDR_VP_Call_PartBlend              , Kdll_None },
1907     { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
1908     { RID_SetKernel        , IDR_VP_Call_PartBlend              , Kdll_None },
1909     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
1910 
1911     // Partial Blending quadrants 2,3
1912     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1913     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
1914     { RID_IsQuadrant       , 2                                  , Kdll_None },
1915     { RID_IsSrc1Processing , Process_PBlend                     , Kdll_None },
1916     { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
1917     { RID_SetKernel        , IDR_VP_Call_PartBlend              , Kdll_None },
1918     { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
1919     { RID_SetKernel        , IDR_VP_Call_PartBlend              , Kdll_None },
1920     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
1921 
1922     // Constant multitply Sources Blending quadrants 0,1
1923     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1924     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
1925     { RID_IsQuadrant       , 0                                  , Kdll_None },
1926     { RID_IsSrc1Processing , Process_CSBlend                    , Kdll_None },
1927     { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
1928     { RID_SetKernel        , IDR_VP_Call_ConstSrcBlend          , Kdll_None },
1929     { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
1930     { RID_SetKernel        , IDR_VP_Call_ConstSrcBlend          , Kdll_None },
1931     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
1932 
1933     // Constant multiply Sources Blending quadrants 2,3
1934     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1935     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
1936     { RID_IsQuadrant       , 2                                  , Kdll_None },
1937     { RID_IsSrc1Processing , Process_CSBlend                    , Kdll_None },
1938     { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
1939     { RID_SetKernel        , IDR_VP_Call_ConstSrcBlend          , Kdll_None },
1940     { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
1941     { RID_SetKernel        , IDR_VP_Call_ConstSrcBlend          , Kdll_None },
1942     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
1943 
1944     // Constant multitply Partial Blending quadrants 0,1
1945     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1946     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
1947     { RID_IsQuadrant       , 0                                  , Kdll_None },
1948     { RID_IsSrc1Processing , Process_CPBlend                    , Kdll_None },
1949     { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
1950     { RID_SetKernel        , IDR_VP_Call_AlphaSrcBlendG         , Kdll_None },
1951     { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
1952     { RID_SetKernel        , IDR_VP_Call_AlphaSrcBlendG         , Kdll_None },
1953     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
1954 
1955     // Constant multiply Partial Blending quadrants 2,3
1956     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1957     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
1958     { RID_IsQuadrant       , 2                                  , Kdll_None },
1959     { RID_IsSrc1Processing , Process_CPBlend                    , Kdll_None },
1960     { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
1961     { RID_SetKernel        , IDR_VP_Call_AlphaSrcBlendG         , Kdll_None },
1962     { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
1963     { RID_SetKernel        , IDR_VP_Call_AlphaSrcBlendG         , Kdll_None },
1964     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
1965 
1966     // Layer processing is complete
1967 
1968     // nothing to process - next layer
1969     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
1970     { RID_IsParserState    , Parser_ProcessLayerDone            , Kdll_None },
1971     { RID_IsSrc1Processing , Process_None                       , Kdll_None },
1972     { RID_SetNextLayer     , 0                                  , Kdll_None },
1973     { RID_SetQuadrant      , 0                                  , Kdll_None },
1974     { RID_SetParserState   , Parser_SetupLayer1                 , Kdll_None },
1975 
1976     // Quadrants 0,1 are complete - sample/process quadrants 2,3
1977     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
1978     { RID_IsParserState    , Parser_ProcessLayerDone            , Kdll_None },
1979     { RID_IsQuadrant       , 0                                  , Kdll_None },
1980     { RID_SetKernel        , IDR_VP_Set_Sec_Half_Buf45          , Kdll_None },
1981     { RID_SetQuadrant      , 2                                  , Kdll_None },
1982     { RID_SetParserState   , Parser_SampleLayer1                , Kdll_None },
1983 
1984     // All quadrants are processed - start next layer
1985     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
1986     { RID_IsParserState    , Parser_ProcessLayerDone            , Kdll_None },
1987     { RID_IsQuadrant       , 2                                  , Kdll_None },
1988     { RID_SetSrc1Sampling  , Sample_None                        , Kdll_None },
1989     { RID_SetSrc1Format    , Format_None                        , Kdll_None },
1990     { RID_SetSrc1Processing, Process_None                       , Kdll_None },
1991     { RID_SetNextLayer     , 0                                  , Kdll_None },
1992     { RID_SetQuadrant      , 0                                  , Kdll_None },
1993     { RID_SetParserState   , Parser_SetupLayer1                 , Kdll_None },
1994 
1995     // Write
1996 
1997     // Colorfill only write rulesets has to be before regular rulesets.
1998     // No support for AYUV output in colorfill only cases.
1999 
2000     // Write ARGB with 64B save kernel
2001     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2002     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
2003     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
2004     { RID_IsLayerFormat    , Format_A8B8G8R8                    , Kdll_Or   },
2005     { RID_IsLayerFormat    , Format_A8R8G8B8                    , Kdll_None },
2006     { RID_Is64BSaveEnabled , true                               , Kdll_None },
2007     { RID_IsLayerNumber    , 0                                  , Kdll_None },
2008     { RID_IsSrc0ColorFill  , ColorFill_True                     , Kdll_None },
2009     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill, Kdll_None },
2010     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16        , Kdll_None },
2011     { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB         , Kdll_None },
2012     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
2013     { RID_SetSrc0ColorFill , ColorFill_False                    , Kdll_None },
2014     { RID_SetParserState   , Parser_End                         , Kdll_None },
2015 
2016     // Write ARGB with legacy save kernel
2017     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2018     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
2019     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
2020     { RID_IsLayerFormat    , Format_A8B8G8R8                    , Kdll_Or   },
2021     { RID_IsLayerFormat    , Format_A8R8G8B8                    , Kdll_None },
2022     { RID_IsLayerNumber    , 0                                  , Kdll_None },
2023     { RID_IsSrc0ColorFill  , ColorFill_True                     , Kdll_None },
2024     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill, Kdll_None },
2025     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16        , Kdll_None },
2026     { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB         , Kdll_None },
2027     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
2028     { RID_SetSrc0ColorFill , ColorFill_False                    , Kdll_None },
2029     { RID_SetParserState   , Parser_End                         , Kdll_None },
2030 
2031     // Write RGB with 64B save kernel
2032     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2033     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
2034     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
2035     { RID_IsLayerFormat    , Format_X8B8G8R8                    , Kdll_Or   },
2036     { RID_IsLayerFormat    , Format_X8R8G8B8                    , Kdll_None },
2037     { RID_Is64BSaveEnabled , true                               , Kdll_None },
2038     { RID_IsLayerNumber    , 0                                  , Kdll_None },
2039     { RID_IsSrc0ColorFill  , ColorFill_True                     , Kdll_None },
2040     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill, Kdll_None },
2041     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16        , Kdll_None },
2042     { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB         , Kdll_None },
2043     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
2044     { RID_SetSrc0ColorFill , ColorFill_False                    , Kdll_None },
2045     { RID_SetParserState   , Parser_End                         , Kdll_None },
2046 
2047     // Write RGB with legacy save kernel
2048     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2049     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
2050     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
2051     { RID_IsLayerFormat    , Format_X8B8G8R8                    , Kdll_Or   },
2052     { RID_IsLayerFormat    , Format_X8R8G8B8                    , Kdll_None },
2053     { RID_IsLayerNumber    , 0                                  , Kdll_None },
2054     { RID_IsSrc0ColorFill  , ColorFill_True                     , Kdll_None },
2055     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill, Kdll_None },
2056     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16        , Kdll_None },
2057     { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB         , Kdll_None },
2058     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
2059     { RID_SetSrc0ColorFill , ColorFill_False                    , Kdll_None },
2060     { RID_SetParserState   , Parser_End                         , Kdll_None },
2061 
2062     // Write RGB16: input is RGB565 and output is RGB565
2063     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2064     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
2065     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
2066     { RID_IsLayerFormat    , Format_R5G6B5                      , Kdll_None },
2067     { RID_IsLayerNumber    , 0                                  , Kdll_None },
2068     { RID_IsSrc0ColorFill  , ColorFill_True                     , Kdll_None },
2069     { RID_IsDitherNeeded   , false                              , Kdll_None },
2070     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill, Kdll_None },
2071     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16        , Kdll_None },
2072     { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB16       , Kdll_None },
2073     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
2074     { RID_SetSrc0ColorFill , ColorFill_False                    , Kdll_None },
2075     { RID_SetParserState   , Parser_End                         , Kdll_None },
2076 
2077     // Write RGB16: input is not RGB565 and output is RGB565, dithering is needed
2078     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2079     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
2080     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
2081     { RID_IsLayerFormat    , Format_R5G6B5                      , Kdll_None },
2082     { RID_IsLayerNumber    , 0                                  , Kdll_None },
2083     { RID_IsSrc0ColorFill  , ColorFill_True                     , Kdll_None },
2084     { RID_IsDitherNeeded   , true                               , Kdll_None },
2085     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill, Kdll_None },
2086     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16        , Kdll_None },
2087     { RID_SetKernel        , IDR_VP_Save_444Scale16_Dither_RGB16, Kdll_None },
2088     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
2089     { RID_SetSrc0ColorFill , ColorFill_False                    , Kdll_None },
2090     { RID_SetParserState   , Parser_End                         , Kdll_None },
2091 
2092     // Write (R10G10B10A2 | B10G10R10A2) - With ColorFill. Note: R10G10B10A2 | B10G10R10A2 should be in front of Format_RGB32
2093     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2094     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
2095     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
2096     { RID_IsLayerFormat    , Format_R10G10B10A2                 , Kdll_Or   },
2097     { RID_IsLayerFormat    , Format_B10G10R10A2                 , Kdll_None },
2098     { RID_IsLayerNumber    , 0                                  , Kdll_None },
2099     { RID_IsSrc0ColorFill  , ColorFill_True                     , Kdll_None },
2100     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill, Kdll_None },
2101     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16        , Kdll_None },
2102     { RID_SetKernel        , IDR_VP_Save_444Scale16_R10G10B10   , Kdll_None },
2103     { RID_SetSrc0ColorFill , ColorFill_False                    , Kdll_None },
2104     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
2105     { RID_SetParserState   , Parser_End                         , Kdll_None },
2106 
2107     // Write AYUV with legacy save kernel
2108     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
2109     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
2110     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
2111     { RID_IsLayerFormat    , Format_AYUV                         , Kdll_None },
2112     { RID_IsLayerNumber    , 0                                   , Kdll_None },
2113     { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
2114     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None },
2115     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
2116     { RID_SetKernel        , IDR_VP_Save_444Scale16_VUYA         , Kdll_None },
2117     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
2118     { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
2119     { RID_SetParserState   , Parser_End                          , Kdll_None },
2120 
2121     // Write (YUY2 | YUYV | YVYU | UYVY | VYUY)
2122     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
2123     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
2124     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
2125     { RID_IsLayerFormat    , Format_YUY2                         , Kdll_Or   },
2126     { RID_IsLayerFormat    , Format_YUYV                         , Kdll_Or   },
2127     { RID_IsLayerFormat    , Format_YVYU                         , Kdll_Or   },
2128     { RID_IsLayerFormat    , Format_UYVY                         , Kdll_Or   },
2129     { RID_IsLayerFormat    , Format_VYUY                         , Kdll_None },
2130     { RID_IsLayerNumber    , 0                                   , Kdll_None },
2131     { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
2132     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None },
2133     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
2134     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
2135     { RID_SetKernel        , IDR_VP_Save_444Scale16_PA           , Kdll_None },
2136     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
2137     { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
2138     { RID_SetParserState   , Parser_End                          , Kdll_None },
2139 
2140     // Write NV12
2141     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
2142     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
2143     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
2144     { RID_IsLayerFormat    , Format_NV12                         , Kdll_None },
2145     { RID_IsLayerNumber    , 0                                   , Kdll_None },
2146     { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
2147     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None },
2148     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
2149     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
2150     { RID_SetKernel        , IDR_VP_Save_444Scale16_NV12         , Kdll_None },
2151     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
2152     { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
2153     { RID_SetParserState   , Parser_End                          , Kdll_None },
2154 
2155     // Write NV21
2156     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
2157     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
2158     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
2159     { RID_IsLayerFormat    , Format_NV21                         , Kdll_None },
2160     { RID_IsLayerNumber    , 0                                   , Kdll_None },
2161     { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
2162     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None },
2163     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
2164     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
2165     { RID_SetKernel        , IDR_VP_Save_444Scale16_NV21         , Kdll_None },
2166     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
2167     { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
2168     { RID_SetParserState   , Parser_End                          , Kdll_None },
2169 
2170     // Write PL3
2171     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2172     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
2173     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
2174     { RID_IsLayerFormat    , Format_PL3                         , Kdll_None },
2175     { RID_IsLayerNumber    , 0                                  , Kdll_None },
2176     { RID_IsSrc0ColorFill  , ColorFill_True                     , Kdll_None },
2177     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill, Kdll_None },
2178     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16        , Kdll_None },
2179     { RID_SetKernel        , IDR_VP_Save_444Scale16_PL3         , Kdll_None },
2180     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
2181     { RID_SetSrc0ColorFill , ColorFill_False                    , Kdll_None },
2182     { RID_SetParserState   , Parser_End                         , Kdll_None },
2183 
2184     // Write RGBP
2185     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2186     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
2187     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
2188     { RID_IsLayerFormat    , Format_RGBP                        , Kdll_Or   },
2189     { RID_IsLayerFormat    , Format_BGRP                        , Kdll_None },
2190     { RID_IsLayerNumber    , 0                                  , Kdll_None },
2191     { RID_IsSrc0ColorFill  , ColorFill_True                     , Kdll_None },
2192     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill, Kdll_None },
2193     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16        , Kdll_None },
2194     { RID_SetKernel        , IDR_VP_Save_444Scale16_RGBP        , Kdll_None },
2195     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
2196     { RID_SetSrc0ColorFill , ColorFill_False                    , Kdll_None },
2197     { RID_SetParserState   , Parser_End                         , Kdll_None },
2198 
2199     // Write (ARGB | ABGR) - Normal Save with 64B save kernel,
2200     //                       Sample_8x8 not used or already shuffled
2201     //                       Save_ARGB can write out ABGR as well, based on CURBE settings.
2202     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2203     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
2204     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
2205     { RID_IsLayerFormat    , Format_A8R8G8B8                    , Kdll_Or   },
2206     { RID_IsLayerFormat    , Format_A8B8G8R8                    , Kdll_None },
2207     { RID_IsConstOutAlpha  , false                              , Kdll_None },
2208     { RID_Is64BSaveEnabled , true                               , Kdll_None },
2209     { RID_SetKernel        , IDR_VP_Save_444Scale16_ARGB        , Kdll_None },
2210     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
2211     { RID_SetParserState   , Parser_End                         , Kdll_None },
2212 
2213     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2214     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
2215     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
2216     { RID_IsLayerFormat    , Format_A8R8G8B8                    , Kdll_Or },
2217     { RID_IsLayerFormat    , Format_A8B8G8R8                    , Kdll_None },
2218     { RID_Is64BSaveEnabled , true                               , Kdll_None },
2219     { RID_IsConstOutAlpha  , true                               , Kdll_None },
2220     { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB         , Kdll_None },
2221     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
2222     { RID_SetParserState   , Parser_End                         , Kdll_None },
2223 
2224     // Write (ARGB | ABGR) - Normal Save with legacy save kernel,
2225     //                       Sample_8x8 not used or already shuffled
2226     //                       Save_ARGB can write out ABGR as well, based on CURBE settings.
2227     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2228     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
2229     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
2230     { RID_IsLayerFormat    , Format_A8R8G8B8                    , Kdll_Or   },
2231     { RID_IsLayerFormat    , Format_A8B8G8R8                    , Kdll_None },
2232     { RID_IsConstOutAlpha  , false                              , Kdll_None },
2233     { RID_SetKernel        , IDR_VP_Save_444Scale16_ARGB        , Kdll_None },
2234     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
2235     { RID_SetParserState   , Parser_End                         , Kdll_None },
2236 
2237     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2238     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
2239     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
2240     { RID_IsLayerFormat    , Format_A8R8G8B8                    , Kdll_Or },
2241     { RID_IsLayerFormat    , Format_A8B8G8R8                    , Kdll_None },
2242     { RID_IsConstOutAlpha  , true                               , Kdll_None },
2243     { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB         , Kdll_None },
2244     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
2245     { RID_SetParserState   , Parser_End                         , Kdll_None },
2246 
2247     // Write (RGB | BGR) - Normal Save with 64B save kernel,
2248     //                     Sample_8x8 not used or already shuffled
2249     //                     Save_RGB can write out BGR as well, based on CURBE settings.
2250     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2251     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
2252     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
2253     { RID_IsLayerFormat    , Format_X8R8G8B8                    , Kdll_Or   },
2254     { RID_IsLayerFormat    , Format_X8B8G8R8                    , Kdll_None },
2255     { RID_Is64BSaveEnabled , true                               , Kdll_None },
2256     { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB         , Kdll_None },
2257     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
2258     { RID_SetParserState   , Parser_End                         , Kdll_None },
2259 
2260     // Write (RGB | BGR) - Normal Save with legacy save kernel,
2261     //                     Sample_8x8 not used or already shuffled
2262     //                     Save_RGB can write out BGR as well, based on CURBE settings.
2263     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2264     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
2265     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
2266     { RID_IsLayerFormat    , Format_X8R8G8B8                    , Kdll_Or   },
2267     { RID_IsLayerFormat    , Format_X8B8G8R8                    , Kdll_None },
2268     { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB         , Kdll_None },
2269     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
2270     { RID_SetParserState   , Parser_End                         , Kdll_None },
2271 
2272     // Write RGB16 - Normal Save, Sample_8x8 not used or already shuffled
2273     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2274     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
2275     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
2276     { RID_IsLayerFormat    , Format_R5G6B5                      , Kdll_None },
2277     { RID_IsDitherNeeded   , false                              , Kdll_None },
2278     { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB16       , Kdll_None },
2279     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
2280     { RID_SetParserState   , Parser_End                         , Kdll_None },
2281 
2282     // Write RGB16 - Normal Save, Sample_8x8 not used or already shuffled
2283     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2284     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
2285     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
2286     { RID_IsLayerFormat    , Format_R5G6B5                      , Kdll_None },
2287     { RID_IsDitherNeeded   , true                               , Kdll_None },
2288     { RID_SetKernel        , IDR_VP_Save_444Scale16_Dither_RGB16, Kdll_None },
2289     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
2290     { RID_SetParserState   , Parser_End                         , Kdll_None },
2291 
2292     // Write (R10G10B10A2 | B10G10R10A2) - Normal Save
2293     // Sample_8x8 not used or already shuffled
2294     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2295     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
2296     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
2297     { RID_IsLayerFormat    , Format_R10G10B10A2                 , Kdll_Or   },
2298     { RID_IsLayerFormat    , Format_B10G10R10A2                 , Kdll_None },
2299     { RID_IsConstOutAlpha  , false                              , Kdll_None },
2300     { RID_SetKernel        , IDR_VP_Save_444Scale16_R10G10B10A2 , Kdll_None },
2301     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
2302     { RID_SetParserState   , Parser_End                         , Kdll_None },
2303 
2304     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2305     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
2306     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
2307     { RID_IsLayerFormat    , Format_R10G10B10A2                 , Kdll_Or },
2308     { RID_IsLayerFormat    , Format_B10G10R10A2                 , Kdll_None },
2309     { RID_IsConstOutAlpha  , true                               , Kdll_None },
2310     { RID_SetKernel        , IDR_VP_Save_444Scale16_R10G10B10   , Kdll_None },
2311     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
2312     { RID_SetParserState   , Parser_End                         , Kdll_None },
2313 
2314     // Write AYUV - Normal Save, Sample_8x8 not used or already shuffled
2315     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2316     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
2317     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
2318     { RID_IsLayerFormat    , Format_AYUV                        , Kdll_None },
2319     { RID_IsConstOutAlpha  , false                              , Kdll_None },
2320     { RID_SetKernel        , IDR_VP_Save_444Scale16_SrcVUYA     , Kdll_None },
2321     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
2322     { RID_SetParserState   , Parser_End                         , Kdll_None },
2323 
2324     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2325     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
2326     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
2327     { RID_IsLayerFormat    , Format_AYUV                        , Kdll_None },
2328     { RID_IsConstOutAlpha  , true                               , Kdll_None },
2329     { RID_SetKernel        , IDR_VP_Save_444Scale16_VUYA        , Kdll_None },
2330     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
2331     { RID_SetParserState   , Parser_End                         , Kdll_None },
2332 
2333     // Write (YUY2 | YUYV | YVYU | UYVY | VYUY) - Normal Save, Sample_8x8 not used or already shuffled
2334     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
2335     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
2336     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
2337     { RID_IsLayerFormat    , Format_YUY2                         , Kdll_Or   },
2338     { RID_IsLayerFormat    , Format_YUYV                         , Kdll_Or   },
2339     { RID_IsLayerFormat    , Format_YVYU                         , Kdll_Or   },
2340     { RID_IsLayerFormat    , Format_UYVY                         , Kdll_Or   },
2341     { RID_IsLayerFormat    , Format_VYUY                         , Kdll_None },
2342     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
2343     { RID_SetKernel        , IDR_VP_Save_444Scale16_PA           , Kdll_None },
2344     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
2345     { RID_SetParserState   , Parser_End                          , Kdll_None },
2346 
2347     // Write NV12 - Normal Save, Sample_8x8 not used or already shuffled
2348     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
2349     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
2350     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
2351     { RID_IsLayerFormat    , Format_NV12                         , Kdll_None },
2352     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
2353     { RID_SetKernel        , IDR_VP_Save_444Scale16_NV12         , Kdll_None },
2354     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
2355     { RID_SetParserState   , Parser_End                          , Kdll_None },
2356 
2357     // Write NV21 - Normal Save, Sample_8x8 not used or already shuffled
2358     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
2359     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
2360     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
2361     { RID_IsLayerFormat    , Format_NV21                         , Kdll_None },
2362     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
2363     { RID_SetKernel        , IDR_VP_Save_444Scale16_NV21         , Kdll_None },
2364     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
2365     { RID_SetParserState   , Parser_End                          , Kdll_None },
2366 
2367     // Write PL3 - Normal Save, Sample_8x8 not used or already shuffled
2368     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2369     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
2370     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
2371     { RID_IsLayerFormat    , Format_PL3                         , Kdll_None },
2372     { RID_SetKernel        , IDR_VP_Save_444Scale16_PL3         , Kdll_None },
2373     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
2374     { RID_SetParserState   , Parser_End                         , Kdll_None },
2375 
2376     // Write RGBP - Normal Save, Sample_8x8 not used or already shuffled
2377     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2378     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
2379     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
2380     { RID_IsLayerFormat    , Format_RGBP                        , Kdll_Or   },
2381     { RID_IsLayerFormat    , Format_BGRP                        , Kdll_None },
2382     { RID_SetKernel        , IDR_VP_Save_444Scale16_RGBP        , Kdll_None },
2383     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
2384     { RID_SetParserState   , Parser_End                         , Kdll_None },
2385 
2386     // Write P010 - Color fill, Sample_8x8 not used or already shuffled
2387     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
2388     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
2389     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
2390     { RID_IsLayerFormat    , Format_P010                         , Kdll_None },
2391     { RID_IsLayerNumber    , 0                                   , Kdll_None },
2392     { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
2393     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None },
2394     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
2395     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
2396     { RID_SetKernel        , IDR_VP_Save_444Scale16_P010         , Kdll_None },
2397     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
2398     { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
2399     { RID_SetParserState   , Parser_End                          , Kdll_None },
2400 
2401     // Write P010 - Normal Save, Sample_8x8 not used or already shuffled
2402     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
2403     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
2404     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
2405     { RID_IsLayerFormat    , Format_P010                         , Kdll_None },
2406     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
2407     { RID_SetKernel        , IDR_VP_Save_444Scale16_P010         , Kdll_None },
2408     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
2409     { RID_SetParserState   , Parser_End                          , Kdll_None },
2410 
2411     // Write P016 - Color fill, Sample_8x8 not used or already shuffled
2412     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
2413     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
2414     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
2415     { RID_IsLayerFormat    , Format_P016                         , Kdll_None },
2416     { RID_IsLayerNumber    , 0                                   , Kdll_None },
2417     { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
2418     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None },
2419     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
2420     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
2421     { RID_SetKernel        , IDR_VP_Save_444Scale16_P016         , Kdll_None },
2422     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
2423     { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
2424     { RID_SetParserState   , Parser_End                          , Kdll_None },
2425 
2426     // Write P016 - Normal Save, Sample_8x8 not used or already shuffled
2427     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
2428     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
2429     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
2430     { RID_IsLayerFormat    , Format_P016                         , Kdll_None },
2431     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
2432     { RID_SetKernel        , IDR_VP_Save_444Scale16_P016         , Kdll_None },
2433     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
2434     { RID_SetParserState   , Parser_End                          , Kdll_None },
2435 
2436     // Write Y410 - Color fill, Sample_8x8 not used or already shuffled
2437     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
2438     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
2439     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
2440     { RID_IsLayerFormat    , Format_Y410                         , Kdll_None },
2441     { RID_IsLayerNumber    , 0                                   , Kdll_None },
2442     { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
2443     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None },
2444     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
2445     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
2446     { RID_SetKernel        , IDR_VP_Save_444Scale16_Y410         , Kdll_None },
2447     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
2448     { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
2449     { RID_SetParserState   , Parser_End                          , Kdll_None },
2450 
2451     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
2452     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
2453     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
2454     { RID_IsLayerFormat    , Format_Y416                         , Kdll_None },
2455     { RID_IsLayerNumber    , 0                                   , Kdll_None },
2456     { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
2457     { RID_IsConstOutAlpha  , false                               , Kdll_None },
2458     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None },
2459     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
2460     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
2461     { RID_SetKernel        , IDR_VP_Save_444Scale16_SrcY416      , Kdll_None },
2462     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
2463     { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
2464     { RID_SetParserState   , Parser_End                          , Kdll_None },
2465 
2466     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
2467     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
2468     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
2469     { RID_IsLayerFormat    , Format_Y416                         , Kdll_None },
2470     { RID_IsLayerNumber    , 0                                   , Kdll_None },
2471     { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
2472     { RID_IsConstOutAlpha  , true                                , Kdll_None },
2473     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None },
2474     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
2475     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
2476     { RID_SetKernel        , IDR_VP_Save_444Scale16_Y416         , Kdll_None },
2477     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
2478     { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
2479     { RID_SetParserState   , Parser_End                          , Kdll_None },
2480 
2481     // Write Y410 - Normal Save, Sample_8x8 not used or already shuffled
2482     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
2483     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
2484     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
2485     { RID_IsLayerFormat    , Format_Y410                         , Kdll_None },
2486     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
2487     { RID_SetKernel        , IDR_VP_Save_444Scale16_Y410         , Kdll_None },
2488     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
2489     { RID_SetParserState   , Parser_End                          , Kdll_None },
2490 
2491     // Write Y416 - Normal Save, Sample_8x8 not used or already shuffled
2492     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
2493     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
2494     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
2495     { RID_IsLayerFormat    , Format_Y416                         , Kdll_None },
2496     { RID_IsConstOutAlpha  , false                               , Kdll_None },
2497     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
2498     { RID_SetKernel        , IDR_VP_Save_444Scale16_SrcY416      , Kdll_None },
2499     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
2500     { RID_SetParserState   , Parser_End                          , Kdll_None },
2501 
2502     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
2503     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
2504     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
2505     { RID_IsLayerFormat    , Format_Y416                         , Kdll_None },
2506     { RID_IsConstOutAlpha  , true                                , Kdll_None },
2507     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
2508     { RID_SetKernel        , IDR_VP_Save_444Scale16_Y416         , Kdll_None },
2509     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
2510     { RID_SetParserState   , Parser_End                          , Kdll_None },
2511 
2512     // Write Y210 - Color fill, Sample_8x8 not used or already shuffled
2513     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
2514     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
2515     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
2516     { RID_IsLayerFormat    , Format_Y210                         , Kdll_None },
2517     { RID_IsLayerNumber    , 0                                   , Kdll_None },
2518     { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
2519     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None },
2520     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
2521     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
2522     { RID_SetKernel        , IDR_VP_Save_444Scale16_Y210         , Kdll_None },
2523     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
2524     { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
2525     { RID_SetParserState   , Parser_End                          , Kdll_None },
2526 
2527     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
2528     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
2529     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
2530     { RID_IsLayerFormat    , Format_Y216                         , Kdll_None },
2531     { RID_IsLayerNumber    , 0                                   , Kdll_None },
2532     { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
2533     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None },
2534     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
2535     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
2536     { RID_SetKernel        , IDR_VP_Save_444Scale16_Y216         , Kdll_None },
2537     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
2538     { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
2539     { RID_SetParserState   , Parser_End                          , Kdll_None },
2540 
2541     // Write Y210 - Normal Save, Sample_8x8 not used or already shuffled
2542     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
2543     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
2544     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
2545     { RID_IsLayerFormat    , Format_Y210                         , Kdll_None },
2546     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
2547     { RID_SetKernel        , IDR_VP_Save_444Scale16_Y210         , Kdll_None },
2548     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
2549     { RID_SetParserState   , Parser_End                          , Kdll_None },
2550 
2551     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
2552     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
2553     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
2554     { RID_IsLayerFormat    , Format_Y216                         , Kdll_None },
2555     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
2556     { RID_SetKernel        , IDR_VP_Save_444Scale16_Y216         , Kdll_None },
2557     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
2558     { RID_SetParserState   , Parser_End                          , Kdll_None },
2559 
2560     // Last entry
2561 
2562     { RID_Op_EOF           , 0                                  , Kdll_None }
2563 };
2564