xref: /aosp_15_r20/external/intel-media-driver/media_driver/agnostic/gen11/vp/kdll/hal_kernelrules_g11.c (revision ba62d9d3abf0e404f2022b4cd7a85e107f48596f)
1 /*
2 * Copyright (c) 2012-2018, Intel Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included
12 * in all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20 * OTHER DEALINGS IN THE SOFTWARE.
21 */
22 //!
23 //! \file      hal_kernelrules_g11.c
24 //! \brief         Fast Compositing Kernel DLL rules for gen11
25 //!
26 #include "hal_kerneldll.h"  // Rule definitions
27 #include "vpkrnheader.h"    // Kernel IDs
28 
29 extern const Kdll_RuleEntry g_KdllRuleTable_g11[] =
30 {
31     // Kernel Setup
32 
33     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
34     { RID_IsParserState    , Parser_Begin                       , Kdll_None },
35     { RID_SetParserState   , Parser_SetRenderMethod             , Kdll_None },
36 
37     // Set rendering method
38 
39     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
40     { RID_IsParserState    , Parser_SetRenderMethod             , Kdll_None },
41     { RID_IsRenderMethod   , RenderMethod_MediaObject           , Kdll_None },
42     { RID_SetKernel        , IDR_VP_VP_Setup                    , Kdll_None },
43     { RID_SetParserState   , Parser_SetupLayer0                 , Kdll_None },
44 
45     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
46     { RID_IsParserState    , Parser_SetRenderMethod             , Kdll_None },
47     { RID_IsRenderMethod   , RenderMethod_MediaObjectWalker     , Kdll_None },
48     { RID_SetKernel        , IDR_VP_VP_Setup_MediaWalker        , Kdll_None },
49     { RID_SetParserState   , Parser_SetupLayer0                 , Kdll_None },
50 
51     // Set Layer 0
52 
53     // If first layer is RT, it's colorfill only case. Make sure.
54     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
55     { RID_IsParserState    , Parser_SetupLayer0                 , Kdll_None },
56     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },    // If it's RT
57     { RID_IsLayerNumber    , 0                                  , Kdll_None },    // If it's first layer.
58     { RID_SetParserState   , Parser_SetParamsTarget             , Kdll_None },
59 
60     // 1st layer
61     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
62     { RID_IsParserState    , Parser_SetupLayer0                 , Kdll_None },
63     { RID_IsLayerNumber    , 0                                  , Kdll_None },
64     { RID_SetKernel        , IDR_VP_Set_Layer_0                 , Kdll_None },
65     { RID_SetParserState   , Parser_SetParamsLayer0             , Kdll_None },
66 
67     // Set Layer 1
68 
69     // Please don't change the order of 2 rulesets below.
70     // Single layer
71     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
72     { RID_IsParserState    , Parser_SetupLayer1                 , Kdll_None },
73     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
74     { RID_IsSrc0Sampling   , Sample_Any                         , Kdll_None },  // Src0 must be valid for single layer case.
75     { RID_SetNextLayer     , -1                                 , Kdll_None },  // backoff one layer
76     { RID_SetParserState   , Parser_SampleLayer0                , Kdll_None },
77 
78     // Last layer
79     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
80     { RID_IsParserState    , Parser_SetupLayer1                 , Kdll_None },
81     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
82     { RID_SetParserState   , Parser_SetParamsTarget             , Kdll_None },  // Setup CSC for render target
83 
84     // 2nd layer
85     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
86     { RID_IsParserState    , Parser_SetupLayer1                 , Kdll_None },
87     { RID_IsLayerNumber    , 1                                  , Kdll_None },
88     { RID_SetKernel        , IDR_VP_Set_Layer_1                 , Kdll_None },
89     { RID_SetParserState   , Parser_SetParamsLayer1             , Kdll_None },
90 
91     // 3rd layer
92     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
93     { RID_IsParserState    , Parser_SetupLayer1                 , Kdll_None },
94     { RID_IsLayerNumber    , 2                                  , Kdll_None },
95     { RID_SetKernel        , IDR_VP_Set_Layer_2                 , Kdll_None },
96     { RID_SetParserState   , Parser_SetParamsLayer1             , Kdll_None },
97 
98     // 4th layer
99     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
100     { RID_IsParserState    , Parser_SetupLayer1                 , Kdll_None },
101     { RID_IsLayerNumber    , 3                                  , Kdll_None },
102     { RID_SetKernel        , IDR_VP_Set_Layer_3                 , Kdll_None },
103     { RID_SetParserState   , Parser_SetParamsLayer1             , Kdll_None },
104 
105     // 5th layer
106     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
107     { RID_IsParserState    , Parser_SetupLayer1                 , Kdll_None },
108     { RID_IsLayerNumber    , 4                                  , Kdll_None },
109     { RID_SetKernel        , IDR_VP_Set_Layer_4                 , Kdll_None },
110     { RID_SetParserState   , Parser_SetParamsLayer1             , Kdll_None },
111 
112     // 6th layer
113     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
114     { RID_IsParserState    , Parser_SetupLayer1                 , Kdll_None },
115     { RID_IsLayerNumber    , 5                                  , Kdll_None },
116     { RID_SetKernel        , IDR_VP_Set_Layer_5                 , Kdll_None },
117     { RID_SetParserState   , Parser_SetParamsLayer1             , Kdll_None },
118 
119     // 7th layer
120     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
121     { RID_IsParserState    , Parser_SetupLayer1                 , Kdll_None },
122     { RID_IsLayerNumber    , 6                                  , Kdll_None },
123     { RID_SetKernel        , IDR_VP_Set_Layer_6                 , Kdll_None },
124     { RID_SetParserState   , Parser_SetParamsLayer1             , Kdll_None },
125 
126     // 8th layer
127     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
128     { RID_IsParserState    , Parser_SetupLayer1                 , Kdll_None },
129     { RID_IsLayerNumber    , 7                                  , Kdll_None },
130     { RID_SetKernel        , IDR_VP_Set_Layer_7                 , Kdll_None },
131     { RID_SetParserState   , Parser_SetParamsLayer1             , Kdll_None },
132 
133     // Setup Parameters for Layer 0
134 
135     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
136     { RID_IsParserState    , Parser_SetParamsLayer0             , Kdll_None },
137     { RID_SetSrc0Format    , Format_Source                      , Kdll_None },
138     { RID_SetSrc0Coeff     , CoeffID_Source                     , Kdll_None },
139     { RID_SetSrc0Sampling  , Sample_Source                      , Kdll_None },
140     { RID_SetSrc0Rotation  , Rotate_Source                      , Kdll_None },
141     { RID_SetSrc0ColorFill , ColorFill_Source                   , Kdll_None },
142     { RID_SetSrc0LumaKey   , LumaKey_Source                     , Kdll_None },
143     { RID_SetSrc0Procamp   , Procamp_Source                     , Kdll_None },
144     { RID_SetSrc0Processing, Process_Source                     , Kdll_None },
145     { RID_SetNextLayer     , 0                                  , Kdll_None },
146     { RID_SetParserState   , Parser_SetupLayer1                 , Kdll_None },
147 
148     // Setup Parameters for Layer 1
149 
150     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
151     { RID_IsParserState    , Parser_SetParamsLayer1             , Kdll_None },
152     { RID_SetSrc1Format    , Format_Source                      , Kdll_None },
153     { RID_SetSrc1Coeff     , CoeffID_Source                     , Kdll_None },
154     { RID_SetSrc1Sampling  , Sample_Source                      , Kdll_None },
155     { RID_SetSrc1Rotation  , Rotate_Source                      , Kdll_None },
156     { RID_SetSrc1LumaKey   , LumaKey_Source                     , Kdll_None },
157     { RID_SetSrc1SamplerLumaKey, 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 Layer 0
188 
189     // Sample Y210 -> Src0
190     // Rotate 90 degrees
191     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
192     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
193     { RID_IsSrc0Format     , Format_Y210                        , Kdll_None },
194     { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
195     { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                  , Kdll_None },
196     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_0_Rot_90, Kdll_None },
197     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_1_Rot_90, Kdll_None },
198     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_2_Rot_90, Kdll_None },
199     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_3_Rot_90, Kdll_None },
200     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
201 
202     // Rotate 180 degrees
203     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
204     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
205     { RID_IsSrc0Format     , Format_Y210                         , Kdll_None },
206     { RID_IsSrc0Sampling   , Sample_Scaling                      , Kdll_None },
207     { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                  , Kdll_None },
208     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_0_Rot_180, Kdll_None },
209     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_1_Rot_180, Kdll_None },
210     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_2_Rot_180, Kdll_None },
211     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_3_Rot_180, Kdll_None },
212     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
213 
214     // Rotate 270 degrees
215     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
216     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
217     { RID_IsSrc0Format     , Format_Y210                         , Kdll_None },
218     { RID_IsSrc0Sampling   , Sample_Scaling                      , Kdll_None },
219     { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                  , Kdll_None },
220     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_0_Rot_270, Kdll_None },
221     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_1_Rot_270, Kdll_None },
222     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_2_Rot_270, Kdll_None },
223     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_3_Rot_270, Kdll_None },
224     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
225 
226     // Mirror Horizontal
227     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
228     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
229     { RID_IsSrc0Format     , Format_Y210                         , Kdll_None },
230     { RID_IsSrc0Sampling   , Sample_Scaling                      , Kdll_None },
231     { RID_IsSrc0Rotation   , VPHAL_MIRROR_HORIZONTAL             , Kdll_None },
232     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_0        , Kdll_None },
233     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
234     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_1        , Kdll_None },
235     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
236     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_2        , Kdll_None },
237     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
238     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_3        , Kdll_None },
239     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
240     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
241 
242     // Mirror Vertical
243     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
244     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
245     { RID_IsSrc0Format     , Format_Y210                         , Kdll_None },
246     { RID_IsSrc0Sampling   , Sample_Scaling                      , Kdll_None },
247     { RID_IsSrc0Rotation   , VPHAL_MIRROR_VERTICAL               , Kdll_None },
248     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_0_Rot_180, Kdll_None },
249     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
250     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_1_Rot_180, Kdll_None },
251     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
252     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_2_Rot_180, Kdll_None },
253     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
254     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_3_Rot_180, Kdll_None },
255     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
256     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
257 
258     // Rotate 90 Mirror Vertical
259     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
260     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
261     { RID_IsSrc0Format     , Format_Y210                         , Kdll_None },
262     { RID_IsSrc0Sampling   , Sample_Scaling                      , Kdll_None },
263     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_VERTICAL     , Kdll_None },
264     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_0_Rot_270, Kdll_None },
265     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
266     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_1_Rot_270, Kdll_None },
267     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
268     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_2_Rot_270, Kdll_None },
269     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
270     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_3_Rot_270, Kdll_None },
271     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
272     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
273 
274     // Rotate 90 Mirror Horizontal
275     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
276     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
277     { RID_IsSrc0Format     , Format_Y210                         , Kdll_None },
278     { RID_IsSrc0Sampling   , Sample_Scaling                      , Kdll_None },
279     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_HORIZONTAL   , Kdll_None },
280     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_0_Rot_90 , Kdll_None },
281     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
282     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_1_Rot_90 , Kdll_None },
283     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
284     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_2_Rot_90 , Kdll_None },
285     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
286     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_3_Rot_90 , Kdll_None },
287     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
288     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
289 
290     // No Rotation
291     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
292     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
293     { RID_IsSrc0Format     , Format_Y210                         , Kdll_None },
294     { RID_IsSrc0Sampling   , Sample_Scaling                      , Kdll_None },
295     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_0        , Kdll_None },
296     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_1        , Kdll_None },
297     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_2        , Kdll_None },
298     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_3        , Kdll_None },
299     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
300 
301     // Sample AVS
302     // Y210 -> Src0
303     // Rotate 90 degrees
304     { RID_Op_NewEntry      , RULE_DEFAULT                                   , Kdll_None },
305     { RID_IsParserState    , Parser_SampleLayer0                            , Kdll_None },
306     { RID_IsSrc0Format     , Format_Y210                                    , Kdll_None },
307     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                             , Kdll_None },
308     { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                              , Kdll_None },
309     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_0_Rot_90, Kdll_None },
310     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_1_Rot_90, Kdll_None },
311     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_2_Rot_90, Kdll_None },
312     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_3_Rot_90, Kdll_None },
313     { RID_SetParserState   , Parser_SampleLayer0Done                        , Kdll_None },
314 
315     // Rotate 180 degrees
316     { RID_Op_NewEntry      , RULE_DEFAULT                                    , Kdll_None },
317     { RID_IsParserState    , Parser_SampleLayer0                             , Kdll_None },
318     { RID_IsSrc0Format     , Format_Y210                                     , Kdll_None },
319     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                              , Kdll_None },
320     { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                              , Kdll_None },
321     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_0_Rot_180, Kdll_None },
322     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_1_Rot_180, Kdll_None },
323     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_2_Rot_180, Kdll_None },
324     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_3_Rot_180, Kdll_None },
325     { RID_SetParserState   , Parser_SampleLayer0Done                         , Kdll_None },
326 
327     // Rotate 270 degrees
328     { RID_Op_NewEntry      , RULE_DEFAULT                                    , Kdll_None },
329     { RID_IsParserState    , Parser_SampleLayer0                             , Kdll_None },
330     { RID_IsSrc0Format     , Format_Y210                                     , Kdll_None },
331     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                              , Kdll_None },
332     { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                              , Kdll_None },
333     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_0_Rot_270, Kdll_None },
334     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_1_Rot_270, Kdll_None },
335     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_2_Rot_270, Kdll_None },
336     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_3_Rot_270, Kdll_None },
337     { RID_SetParserState   , Parser_SampleLayer0Done                         , Kdll_None },
338 
339     // Mirror Horizontal
340     { RID_Op_NewEntry      , RULE_DEFAULT                            , Kdll_None },
341     { RID_IsParserState    , Parser_SampleLayer0                     , Kdll_None },
342     { RID_IsSrc0Format     , Format_Y210                             , Kdll_None },
343     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                      , Kdll_None },
344     { RID_IsSrc0Rotation   , VPHAL_MIRROR_HORIZONTAL                 , Kdll_None },
345     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_0, Kdll_None },
346     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                , Kdll_None },
347     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_1, Kdll_None },
348     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                , Kdll_None },
349     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_2, Kdll_None },
350     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                , Kdll_None },
351     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_3, Kdll_None },
352     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                , Kdll_None },
353     { RID_SetParserState   , Parser_SampleLayer0Done                 , Kdll_None },
354 
355     // Mirror Vertical
356     { RID_Op_NewEntry      , RULE_DEFAULT                                    , Kdll_None },
357     { RID_IsParserState    , Parser_SampleLayer0                             , Kdll_None },
358     { RID_IsSrc0Format     , Format_Y210                                     , Kdll_None },
359     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                              , Kdll_None },
360     { RID_IsSrc0Rotation   , VPHAL_MIRROR_VERTICAL                           , Kdll_None },
361     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_0_Rot_180, Kdll_None },
362     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                        , Kdll_None },
363     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_1_Rot_180, Kdll_None },
364     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                        , Kdll_None },
365     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_2_Rot_180, Kdll_None },
366     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                        , Kdll_None },
367     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_3_Rot_180, Kdll_None },
368     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                        , Kdll_None },
369     { RID_SetParserState   , Parser_SampleLayer0Done                         , Kdll_None },
370 
371     // Rotate 90 Mirror Vertical
372     { RID_Op_NewEntry      , RULE_DEFAULT                                    , Kdll_None },
373     { RID_IsParserState    , Parser_SampleLayer0                             , Kdll_None },
374     { RID_IsSrc0Format     , Format_Y210                                     , Kdll_None },
375     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                              , Kdll_None },
376     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_VERTICAL                 , Kdll_None },
377     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_0_Rot_270, Kdll_None },
378     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                        , Kdll_None },
379     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_1_Rot_270, Kdll_None },
380     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                        , Kdll_None },
381     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_2_Rot_270, Kdll_None },
382     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                        , Kdll_None },
383     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_3_Rot_270, Kdll_None },
384     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                        , Kdll_None },
385     { RID_SetParserState   , Parser_SampleLayer0Done                         , Kdll_None },
386 
387     // Rotate 90 Mirror Horizontal
388     { RID_Op_NewEntry      , RULE_DEFAULT                                   , Kdll_None },
389     { RID_IsParserState    , Parser_SampleLayer0                            , Kdll_None },
390     { RID_IsSrc0Format     , Format_Y210                                    , Kdll_None },
391     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                             , Kdll_None },
392     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_HORIZONTAL              , Kdll_None },
393     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_0_Rot_90, Kdll_None },
394     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                       , Kdll_None },
395     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_1_Rot_90, Kdll_None },
396     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                       , Kdll_None },
397     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_2_Rot_90, Kdll_None },
398     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                       , Kdll_None },
399     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_3_Rot_90, Kdll_None },
400     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                       , Kdll_None },
401     { RID_SetParserState   , Parser_SampleLayer0Done                        , Kdll_None },
402 
403     // No Rotation
404     { RID_Op_NewEntry      , RULE_DEFAULT                            , Kdll_None },
405     { RID_IsParserState    , Parser_SampleLayer0                     , Kdll_None },
406     { RID_IsSrc0Format     , Format_Y210                             , Kdll_None },
407     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                      , Kdll_None },
408     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_0, Kdll_None },
409     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_1, Kdll_None },
410     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_2, Kdll_None },
411     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_3, Kdll_None },
412     { RID_SetParserState   , Parser_SampleLayer0Done                 , Kdll_None },
413 
414      // Sample Y410 -> Src0
415     // Rotate 90 degrees
416     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
417     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
418     { RID_IsSrc0Format     , Format_Y410                         , Kdll_None },
419     { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
420     { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                   , Kdll_None },
421     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_0_Rot_90, Kdll_None },
422     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_1_Rot_90, Kdll_None },
423     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_2_Rot_90, Kdll_None },
424     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_3_Rot_90, Kdll_None },
425     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
426 
427     // Rotate 180 degrees
428     { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
429     { RID_IsParserState    , Parser_SampleLayer0                  , Kdll_None },
430     { RID_IsSrc0Format     , Format_Y410                          , Kdll_None },
431     { RID_IsSrc0Sampling   , Sample_Scaling_034x                  , Kdll_None },
432     { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                   , Kdll_None },
433     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_0_Rot_180, Kdll_None },
434     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_1_Rot_180, Kdll_None },
435     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_2_Rot_180, Kdll_None },
436     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_3_Rot_180, Kdll_None },
437     { RID_SetParserState   , Parser_SampleLayer0Done              , Kdll_None },
438 
439     // Rotate 270 dgrees
440     { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
441     { RID_IsParserState    , Parser_SampleLayer0                  , Kdll_None },
442     { RID_IsSrc0Format     , Format_Y410                          , Kdll_None },
443     { RID_IsSrc0Sampling   , Sample_Scaling_034x                  , Kdll_None },
444     { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                   , Kdll_None },
445     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_0_Rot_270, Kdll_None },
446     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_1_Rot_270, Kdll_None },
447     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_2_Rot_270, Kdll_None },
448     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_3_Rot_270, Kdll_None },
449     { RID_SetParserState   , Parser_SampleLayer0Done              , Kdll_None },
450 
451     // Mirror Horizontal
452     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
453     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
454     { RID_IsSrc0Format     , Format_Y410                         , Kdll_None },
455     { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
456     { RID_IsSrc0Rotation   , VPHAL_MIRROR_HORIZONTAL             , Kdll_None },
457     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_0       , Kdll_None },
458     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
459     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_1       , Kdll_None },
460     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
461     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_2       , Kdll_None },
462     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
463     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_3       , Kdll_None },
464     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
465     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
466 
467     // Mirror Vertical
468     { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
469     { RID_IsParserState    , Parser_SampleLayer0                  , Kdll_None },
470     { RID_IsSrc0Format     , Format_Y410                          , Kdll_None },
471     { RID_IsSrc0Sampling   , Sample_Scaling_034x                  , Kdll_None },
472     { RID_IsSrc0Rotation   , VPHAL_MIRROR_VERTICAL                , Kdll_None },
473     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_0_Rot_180, Kdll_None },
474     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
475     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_1_Rot_180, Kdll_None },
476     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
477     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_2_Rot_180, Kdll_None },
478     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
479     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_3_Rot_180, Kdll_None },
480     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
481     { RID_SetParserState   , Parser_SampleLayer0Done              , Kdll_None },
482 
483     // Rotate 90 Mirror Vertical
484     { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
485     { RID_IsParserState    , Parser_SampleLayer0                  , Kdll_None },
486     { RID_IsSrc0Format     , Format_Y410                          , Kdll_None },
487     { RID_IsSrc0Sampling   , Sample_Scaling_034x                  , Kdll_None },
488     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_VERTICAL      , Kdll_None },
489     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_0_Rot_270, Kdll_None },
490     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
491     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_1_Rot_270, Kdll_None },
492     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
493     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_2_Rot_270, Kdll_None },
494     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
495     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_3_Rot_270, Kdll_None },
496     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
497     { RID_SetParserState   , Parser_SampleLayer0Done              , Kdll_None },
498 
499     // Rotate 90 Mirror Horizontal
500     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
501     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
502     { RID_IsSrc0Format     , Format_Y410                         , Kdll_None },
503     { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
504     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_HORIZONTAL   , Kdll_None },
505     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_0_Rot_90, Kdll_None },
506     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
507     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_1_Rot_90, Kdll_None },
508     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
509     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_2_Rot_90, Kdll_None },
510     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
511     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_3_Rot_90, Kdll_None },
512     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
513     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
514 
515     // No Rotation
516     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
517     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
518     { RID_IsSrc0Format     , Format_Y410                         , Kdll_None },
519     { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
520     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_0       , Kdll_None },
521     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_1       , Kdll_None },
522     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_2       , Kdll_None },
523     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_3       , Kdll_None },
524     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
525 
526     // Sample_Unorm progressive scaling
527     // Sample (RGB | AYUV | Packed YUV | YV12 | NV12 | P010 | 400P) -> Src0
528 
529     // Rotate 90 degrees
530     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
531     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
532     { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
533     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
534     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
535     { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
536     { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
537     { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
538     { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
539     { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
540     { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                  , Kdll_None },
541     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_0_Rot_90  , Kdll_None },
542     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_1_Rot_90  , Kdll_None },
543     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_2_Rot_90  , Kdll_None },
544     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_3_Rot_90  , Kdll_None },
545     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
546 
547     // Rotate 180 degrees
548     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
549     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
550     { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
551     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
552     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
553     { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
554     { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
555     { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
556     { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
557     { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
558     { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                 , Kdll_None },
559     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_0_Rot_180 , Kdll_None },
560     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_1_Rot_180 , Kdll_None },
561     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_2_Rot_180 , Kdll_None },
562     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_3_Rot_180 , Kdll_None },
563     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
564 
565     // Rotate 270 degrees
566     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
567     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
568     { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
569     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
570     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
571     { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
572     { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
573     { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
574     { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
575     { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
576     { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                 , Kdll_None },
577     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_0_Rot_270 , Kdll_None },
578     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_1_Rot_270 , Kdll_None },
579     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_2_Rot_270 , Kdll_None },
580     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_3_Rot_270 , Kdll_None },
581     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
582 
583     // Mirror Horizontal
584     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
585     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
586     { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
587     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
588     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
589     { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
590     { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
591     { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
592     { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
593     { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
594     { RID_IsSrc0Rotation   , VPHAL_MIRROR_HORIZONTAL            , Kdll_None },
595     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_0         , Kdll_None },
596     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
597     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_1         , Kdll_None },
598     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
599     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_2         , Kdll_None },
600     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
601     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_3         , Kdll_None },
602     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
603     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
604 
605     // Mirror Vertical
606     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
607     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
608     { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
609     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
610     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
611     { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
612     { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
613     { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
614     { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
615     { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
616     { RID_IsSrc0Rotation   , VPHAL_MIRROR_VERTICAL              , Kdll_None },
617     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_0_Rot_180 , Kdll_None },
618     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
619     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_1_Rot_180 , Kdll_None },
620     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
621     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_2_Rot_180 , Kdll_None },
622     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
623     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_3_Rot_180 , Kdll_None },
624     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
625     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
626 
627     // Rotate 90 Mirror Vertical
628     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
629     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
630     { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
631     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
632     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
633     { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
634     { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
635     { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
636     { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
637     { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
638     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_VERTICAL    , Kdll_None },
639     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_0_Rot_270 , Kdll_None },
640     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
641     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_1_Rot_270 , Kdll_None },
642     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
643     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_2_Rot_270 , Kdll_None },
644     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
645     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_3_Rot_270 , Kdll_None },
646     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
647     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
648 
649     // Rotate 90 Mirror Horizontal
650     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
651     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
652     { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
653     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
654     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
655     { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
656     { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
657     { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
658     { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
659     { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
660     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_HORIZONTAL  , Kdll_None },
661     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_0_Rot_90  , Kdll_None },
662     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
663     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_1_Rot_90  , Kdll_None },
664     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
665     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_2_Rot_90  , Kdll_None },
666     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
667     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_3_Rot_90  , Kdll_None },
668     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
669     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
670 
671     // No Rotation
672     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
673     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
674     { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
675     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
676     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
677     { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
678     { RID_IsSrc0Format     , Format_400P                        , Kdll_Or   },
679     { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
680     { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_None },
681     { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
682     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_0         , Kdll_None },
683     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_1         , Kdll_None },
684     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_2         , Kdll_None },
685     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_3         , Kdll_None },
686     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
687 
688     // Sample NV12 (width or height is not a multiple of 4) -> Src0
689 
690     // Rotate 90 degrees
691     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
692     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
693     { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
694     { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
695     { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
696     { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                  , Kdll_None },
697     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_0_Rot_90 , Kdll_None },
698     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_1_Rot_90 , Kdll_None },
699     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_2_Rot_90 , Kdll_None },
700     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_3_Rot_90 , Kdll_None },
701     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
702 
703     // Rotate 180 degrees
704     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
705     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
706     { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
707     { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
708     { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
709     { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                 , Kdll_None },
710     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_0_Rot_180, Kdll_None },
711     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_1_Rot_180, Kdll_None },
712     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_2_Rot_180, Kdll_None },
713     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_3_Rot_180, Kdll_None },
714     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
715 
716     // Rotate 270 degrees
717     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
718     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
719     { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
720     { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
721     { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
722     { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                 , Kdll_None },
723     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_0_Rot_270, Kdll_None },
724     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_1_Rot_270, Kdll_None },
725     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_2_Rot_270, Kdll_None },
726     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_3_Rot_270, Kdll_None },
727     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
728 
729     // Mirror Horizontal
730     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
731     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
732     { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
733     { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
734     { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
735     { RID_IsSrc0Rotation   , VPHAL_MIRROR_HORIZONTAL            , Kdll_None },
736     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_0        , Kdll_None },
737     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
738     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_1        , Kdll_None },
739     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
740     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_2        , Kdll_None },
741     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
742     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_3        , Kdll_None },
743     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
744     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
745 
746     // Mirror Vertical
747     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
748     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
749     { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
750     { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
751     { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
752     { RID_IsSrc0Rotation   , VPHAL_MIRROR_VERTICAL              , Kdll_None },
753     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_0_Rot_180, Kdll_None },
754     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
755     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_1_Rot_180, Kdll_None },
756     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
757     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_2_Rot_180, Kdll_None },
758     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
759     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_3_Rot_180, Kdll_None },
760     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
761     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
762 
763     // Rotate 90 Mirror Vertical
764     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
765     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
766     { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
767     { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
768     { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
769     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_VERTICAL    , Kdll_None },
770     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_0_Rot_270, Kdll_None },
771     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
772     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_1_Rot_270, Kdll_None },
773     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
774     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_2_Rot_270, Kdll_None },
775     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
776     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_3_Rot_270, Kdll_None },
777     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
778     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
779 
780     // Rotate 90 Mirror Horizontal
781     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
782     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
783     { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
784     { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
785     { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
786     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_HORIZONTAL  , Kdll_None },
787     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_0_Rot_90 , Kdll_None },
788     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
789     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_1_Rot_90 , Kdll_None },
790     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
791     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_2_Rot_90 , Kdll_None },
792     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
793     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_3_Rot_90 , Kdll_None },
794     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
795     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
796 
797     // No Rotation
798     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
799     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
800     { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
801     { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
802     { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
803     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_0        , Kdll_None },
804     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_1        , Kdll_None },
805     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_2        , Kdll_None },
806     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_3        , Kdll_None },
807     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
808 
809     // Sample (PL3 | PL3_RGB) -> Src0
810 
811     // Rotate 90 degrees
812     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
813     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
814     { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
815     { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
816     { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
817     { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                  , Kdll_None },
818     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_0_Rot_90 , Kdll_None },
819     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_1_Rot_90 , Kdll_None },
820     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_2_Rot_90 , Kdll_None },
821     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_3_Rot_90 , Kdll_None },
822     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
823 
824     // Rotate 180 degrees
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                     , Kdll_None },
830     { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                 , Kdll_None },
831     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_0_Rot_180, Kdll_None },
832     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_1_Rot_180, Kdll_None },
833     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_2_Rot_180, Kdll_None },
834     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_3_Rot_180, Kdll_None },
835     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
836 
837     // Rotate 270 degrees
838     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
839     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
840     { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
841     { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
842     { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
843     { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                 , Kdll_None },
844     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_0_Rot_270, Kdll_None },
845     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_1_Rot_270, Kdll_None },
846     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_2_Rot_270, Kdll_None },
847     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_3_Rot_270, Kdll_None },
848     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
849 
850     // Mirror Horizontal
851     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
852     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
853     { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
854     { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
855     { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
856     { RID_IsSrc0Rotation   , VPHAL_MIRROR_HORIZONTAL            , Kdll_None },
857     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_0        , Kdll_None },
858     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
859     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_1        , Kdll_None },
860     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
861     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_2        , Kdll_None },
862     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
863     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_3        , Kdll_None },
864     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
865     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
866 
867     // Mirror Vertical
868     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
869     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
870     { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
871     { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
872     { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
873     { RID_IsSrc0Rotation   , VPHAL_MIRROR_VERTICAL              , Kdll_None },
874     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_0_Rot_180, Kdll_None },
875     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
876     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_1_Rot_180, Kdll_None },
877     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
878     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_2_Rot_180, Kdll_None },
879     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
880     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_3_Rot_180, Kdll_None },
881     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
882     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
883 
884     // Rotate 90 Mirror Vertical
885     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
886     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
887     { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
888     { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
889     { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
890     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_VERTICAL    , Kdll_None },
891     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_0_Rot_270, Kdll_None },
892     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
893     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_1_Rot_270, Kdll_None },
894     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
895     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_2_Rot_270, Kdll_None },
896     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
897     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_3_Rot_270, Kdll_None },
898     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
899     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
900 
901     // Rotate 90 Mirror Horizontal
902     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
903     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
904     { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
905     { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
906     { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
907     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_HORIZONTAL  , Kdll_None },
908     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_0_Rot_90 , Kdll_None },
909     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
910     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_1_Rot_90 , Kdll_None },
911     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
912     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_2_Rot_90 , Kdll_None },
913     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
914     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_3_Rot_90 , Kdll_None },
915     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
916     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
917 
918     // No Rotation
919     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
920     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
921     { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
922     { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
923     { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
924     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_0        , Kdll_None },
925     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_1        , Kdll_None },
926     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_2        , Kdll_None },
927     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_3        , Kdll_None },
928     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
929 
930     // Sample progressive scaling
931     // Sample 0.34x -> Src0
932     // Rotate 90 degrees
933     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
934     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
935     { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
936     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
937     { RID_IsSrc0Format     , Format_400P                        , Kdll_Or   },
938     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
939     { RID_IsSrc0Format     , Format_NV12                        , Kdll_None },
940     { RID_IsSrc0Sampling   , Sample_Scaling_034x                , Kdll_None },
941     { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                  , Kdll_None },
942     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_0_Rot_90 , Kdll_None },
943     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_1_Rot_90 , Kdll_None },
944     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_2_Rot_90 , Kdll_None },
945     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_3_Rot_90 , Kdll_None },
946     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
947 
948     // Rotate 180 degrees
949     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
950     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
951     { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
952     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
953     { RID_IsSrc0Format     , Format_400P                        , Kdll_Or   },
954     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
955     { RID_IsSrc0Format     , Format_NV12                        , Kdll_None },
956     { RID_IsSrc0Sampling   , Sample_Scaling_034x                , Kdll_None },
957     { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                 , Kdll_None },
958     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_0_Rot_180, Kdll_None },
959     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_1_Rot_180, Kdll_None },
960     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_2_Rot_180, Kdll_None },
961     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_3_Rot_180, Kdll_None },
962     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
963 
964     // Rotate 270 degrees
965     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
966     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
967     { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
968     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
969     { RID_IsSrc0Format     , Format_400P                        , Kdll_Or   },
970     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
971     { RID_IsSrc0Format     , Format_NV12                        , Kdll_None },
972     { RID_IsSrc0Sampling   , Sample_Scaling_034x                , Kdll_None },
973     { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                 , Kdll_None },
974     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_0_Rot_270, Kdll_None },
975     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_1_Rot_270, Kdll_None },
976     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_2_Rot_270, Kdll_None },
977     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_3_Rot_270, Kdll_None },
978     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
979 
980     // No Rotation
981     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
982     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
983     { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
984     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
985     { RID_IsSrc0Format     , Format_400P                        , Kdll_Or   },
986     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
987     { RID_IsSrc0Format     , Format_NV12                        , Kdll_None },
988     { RID_IsSrc0Sampling   , Sample_Scaling_034x                , Kdll_None },
989     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_0        , Kdll_None },
990     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_1        , Kdll_None },
991     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_2        , Kdll_None },
992     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_3        , Kdll_None },
993     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
994 
995     // Sample 0.34x PL2(width or height is not a multiple of 4) -> Src0
996     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
997     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
998     { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
999     { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
1000     { RID_IsSrc0Sampling   , Sample_Scaling_034x                , Kdll_None },
1001     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_0       , Kdll_None },
1002     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_1       , Kdll_None },
1003     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_2       , Kdll_None },
1004     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_3       , Kdll_None },
1005     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
1006 
1007     // Sample 0.34x PL3 -> Src0
1008     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1009     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1010     { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
1011     { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
1012     { RID_IsSrc0Sampling   , Sample_Scaling_034x                , Kdll_None },
1013     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_0       , Kdll_None },
1014     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_1       , Kdll_None },
1015     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_2       , Kdll_None },
1016     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_3       , Kdll_None },
1017     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
1018 
1019     // Sample AVS
1020     // Y410 -> Src0
1021     // Rotate 90 degrees
1022     { RID_Op_NewEntry      , RULE_DEFAULT                     , Kdll_None },
1023     { RID_IsParserState    , Parser_SampleLayer0              , Kdll_None },
1024     { RID_IsSrc0Format     , Format_Y410                      , Kdll_None },
1025     { RID_IsSrc0Sampling   , Sample_Scaling_AVS               , Kdll_None },
1026     { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                , Kdll_None },
1027     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_0_Rot_90, Kdll_None },
1028     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_1_Rot_90, Kdll_None },
1029     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_2_Rot_90, Kdll_None },
1030     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_3_Rot_90, Kdll_None },
1031     { RID_SetParserState   , Parser_SampleLayer0Done          , Kdll_None },
1032 
1033     // Rotate 180 degrees
1034     { RID_Op_NewEntry      , RULE_DEFAULT                      , Kdll_None },
1035     { RID_IsParserState    , Parser_SampleLayer0               , Kdll_None },
1036     { RID_IsSrc0Format     , Format_Y410                       , Kdll_None },
1037     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                , Kdll_None },
1038     { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                , Kdll_None },
1039     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_0_Rot_180, Kdll_None },
1040     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_1_Rot_180, Kdll_None },
1041     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_2_Rot_180, Kdll_None },
1042     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_3_Rot_180, Kdll_None },
1043     { RID_SetParserState   , Parser_SampleLayer0Done           , Kdll_None },
1044 
1045     // Rotate 270 degrees
1046     { RID_Op_NewEntry      , RULE_DEFAULT                      , Kdll_None },
1047     { RID_IsParserState    , Parser_SampleLayer0               , Kdll_None },
1048     { RID_IsSrc0Format     , Format_Y410                       , Kdll_None },
1049     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                , Kdll_None },
1050     { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                , Kdll_None },
1051     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_0_Rot_270, Kdll_None },
1052     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_1_Rot_270, Kdll_None },
1053     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_2_Rot_270, Kdll_None },
1054     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_3_Rot_270, Kdll_None },
1055     { RID_SetParserState   , Parser_SampleLayer0Done           , Kdll_None },
1056 
1057     // Mirror Horizontal
1058     { RID_Op_NewEntry      , RULE_DEFAULT              , Kdll_None },
1059     { RID_IsParserState    , Parser_SampleLayer0       , Kdll_None },
1060     { RID_IsSrc0Format     , Format_Y410               , Kdll_None },
1061     { RID_IsSrc0Sampling   , Sample_Scaling_AVS        , Kdll_None },
1062     { RID_IsSrc0Rotation   , VPHAL_MIRROR_HORIZONTAL   , Kdll_None },
1063     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_0, Kdll_None },
1064     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV  , Kdll_None },
1065     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_1, Kdll_None },
1066     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV  , Kdll_None },
1067     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_2, Kdll_None },
1068     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV  , Kdll_None },
1069     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_3, Kdll_None },
1070     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV  , Kdll_None },
1071     { RID_SetParserState   , Parser_SampleLayer0Done   , Kdll_None },
1072 
1073     // Mirror Vertical
1074     { RID_Op_NewEntry      , RULE_DEFAULT                      , Kdll_None },
1075     { RID_IsParserState    , Parser_SampleLayer0               , Kdll_None },
1076     { RID_IsSrc0Format     , Format_Y410                       , Kdll_None },
1077     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                , Kdll_None },
1078     { RID_IsSrc0Rotation   , VPHAL_MIRROR_VERTICAL             , Kdll_None },
1079     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_0_Rot_180, Kdll_None },
1080     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV          , Kdll_None },
1081     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_1_Rot_180, Kdll_None },
1082     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV          , Kdll_None },
1083     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_2_Rot_180, Kdll_None },
1084     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV          , Kdll_None },
1085     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_3_Rot_180, Kdll_None },
1086     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV          , Kdll_None },
1087     { RID_SetParserState   , Parser_SampleLayer0Done           , Kdll_None },
1088 
1089     // Rotate 90 Mirror Vertical
1090     { RID_Op_NewEntry      , RULE_DEFAULT                      , Kdll_None },
1091     { RID_IsParserState    , Parser_SampleLayer0               , Kdll_None },
1092     { RID_IsSrc0Format     , Format_Y410                       , Kdll_None },
1093     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                , Kdll_None },
1094     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_VERTICAL   , Kdll_None },
1095     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_0_Rot_270, Kdll_None },
1096     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV          , Kdll_None },
1097     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_1_Rot_270, Kdll_None },
1098     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV          , Kdll_None },
1099     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_2_Rot_270, Kdll_None },
1100     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV          , Kdll_None },
1101     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_3_Rot_270, Kdll_None },
1102     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV          , Kdll_None },
1103     { RID_SetParserState   , Parser_SampleLayer0Done           , Kdll_None },
1104 
1105     // Rotate 90 Mirror Horizontal
1106     { RID_Op_NewEntry      , RULE_DEFAULT                     , Kdll_None },
1107     { RID_IsParserState    , Parser_SampleLayer0              , Kdll_None },
1108     { RID_IsSrc0Format     , Format_Y410                      , Kdll_None },
1109     { RID_IsSrc0Sampling   , Sample_Scaling_AVS               , Kdll_None },
1110     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_HORIZONTAL, Kdll_None },
1111     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_0_Rot_90, Kdll_None },
1112     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV         , Kdll_None },
1113     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_1_Rot_90, Kdll_None },
1114     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV         , Kdll_None },
1115     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_2_Rot_90, Kdll_None },
1116     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV         , Kdll_None },
1117     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_3_Rot_90, Kdll_None },
1118     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV         , Kdll_None },
1119     { RID_SetParserState   , Parser_SampleLayer0Done          , Kdll_None },
1120 
1121     // No Rotation
1122     { RID_Op_NewEntry      , RULE_DEFAULT                     , Kdll_None },
1123     { RID_IsParserState    , Parser_SampleLayer0              , Kdll_None },
1124     { RID_IsSrc0Format     , Format_Y410                      , Kdll_None },
1125     { RID_IsSrc0Sampling   , Sample_Scaling_AVS               , Kdll_None },
1126     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_0       , Kdll_None },
1127     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_1       , Kdll_None },
1128     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_2       , Kdll_None },
1129     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_3       , Kdll_None },
1130     { RID_SetParserState   , Parser_SampleLayer0Done          , Kdll_None },
1131 
1132     // Sample_8x8 progressive scaling
1133     // AVS Sample (RGB | AYUV | Packed YUV | YV12 |NV12 | P010 | 400P) -> Src0
1134 
1135     // Rotate 90 degrees
1136     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1137     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1138     { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
1139     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
1140     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
1141     { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
1142     { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
1143     { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
1144     { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
1145     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
1146     { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                  , Kdll_None },
1147     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_0_Rot_90    , Kdll_None },
1148     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_1_Rot_90    , Kdll_None },
1149     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_2_Rot_90    , Kdll_None },
1150     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_3_Rot_90    , Kdll_None },
1151     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
1152 
1153     // Rotate 180 degrees
1154     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1155     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1156     { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
1157     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
1158     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
1159     { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
1160     { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
1161     { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
1162     { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
1163     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
1164     { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                 , Kdll_None },
1165     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_0_Rot_180   , Kdll_None },
1166     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_1_Rot_180   , Kdll_None },
1167     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_2_Rot_180   , Kdll_None },
1168     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_3_Rot_180   , Kdll_None },
1169     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
1170 
1171     // Rotate 270 degrees
1172     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1173     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1174     { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
1175     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
1176     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
1177     { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
1178     { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
1179     { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
1180     { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
1181     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
1182     { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                 , Kdll_None },
1183     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_0_Rot_270   , Kdll_None },
1184     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_1_Rot_270   , Kdll_None },
1185     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_2_Rot_270   , Kdll_None },
1186     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_3_Rot_270   , Kdll_None },
1187     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
1188 
1189     // Mirror Horizontal
1190     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1191     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1192     { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
1193     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
1194     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
1195     { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
1196     { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
1197     { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
1198     { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
1199     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
1200     { RID_IsSrc0Rotation   , VPHAL_MIRROR_HORIZONTAL            , Kdll_None },
1201     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_0           , Kdll_None },
1202     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
1203     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_1           , Kdll_None },
1204     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
1205     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_2           , Kdll_None },
1206     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
1207     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_3           , Kdll_None },
1208     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
1209     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
1210 
1211     // Mirror Vertical
1212     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1213     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1214     { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
1215     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
1216     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
1217     { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
1218     { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
1219     { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
1220     { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
1221     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
1222     { RID_IsSrc0Rotation   , VPHAL_MIRROR_VERTICAL              , Kdll_None },
1223     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_0_Rot_180   , Kdll_None },
1224     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
1225     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_1_Rot_180   , Kdll_None },
1226     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
1227     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_2_Rot_180   , Kdll_None },
1228     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
1229     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_3_Rot_180   , Kdll_None },
1230     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
1231     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
1232 
1233     // Rotate 90 Mirror Vertical
1234     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1235     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1236     { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
1237     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
1238     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
1239     { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
1240     { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
1241     { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
1242     { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
1243     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
1244     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_VERTICAL    , Kdll_None },
1245     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_0_Rot_270   , Kdll_None },
1246     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
1247     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_1_Rot_270   , Kdll_None },
1248     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
1249     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_2_Rot_270   , Kdll_None },
1250     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
1251     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_3_Rot_270   , Kdll_None },
1252     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
1253     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
1254 
1255     // Rotate 90 Mirror Vertical
1256     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1257     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1258     { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
1259     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
1260     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
1261     { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
1262     { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
1263     { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
1264     { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
1265     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
1266     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_HORIZONTAL  , Kdll_None },
1267     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_0_Rot_90    , Kdll_None },
1268     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
1269     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_1_Rot_90    , Kdll_None },
1270     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
1271     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_2_Rot_90    , Kdll_None },
1272     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
1273     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_3_Rot_90    , Kdll_None },
1274     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
1275     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
1276 
1277     // No Rotation
1278     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1279     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1280     { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
1281     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
1282     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
1283     { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
1284     { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
1285     { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
1286     { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
1287     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
1288     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_0           , Kdll_None },
1289     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_1           , Kdll_None },
1290     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_2           , Kdll_None },
1291     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_3           , Kdll_None },
1292     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
1293 
1294     // AVS Sample PL2(width or height is not a multiple of 4) -> Src0
1295 
1296     // Rotate 90 degrees
1297     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1298     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1299     { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
1300     { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
1301     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
1302     { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                  , Kdll_None },
1303     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_0_Rot_90   , Kdll_None },
1304     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_1_Rot_90   , Kdll_None },
1305     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_2_Rot_90   , Kdll_None },
1306     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_3_Rot_90   , Kdll_None },
1307     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
1308 
1309     // Rotate 180 degrees
1310     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1311     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1312     { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
1313     { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
1314     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
1315     { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                 , Kdll_None },
1316     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_0_Rot_180  , Kdll_None },
1317     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_1_Rot_180  , Kdll_None },
1318     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_2_Rot_180  , Kdll_None },
1319     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_3_Rot_180  , Kdll_None },
1320     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
1321 
1322     // Rotate 270 degrees
1323     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1324     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1325     { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
1326     { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
1327     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
1328     { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                 , Kdll_None },
1329     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_0_Rot_270  , Kdll_None },
1330     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_1_Rot_270  , Kdll_None },
1331     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_2_Rot_270  , Kdll_None },
1332     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_3_Rot_270  , Kdll_None },
1333     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
1334 
1335     // Mirror Horizontal
1336     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1337     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1338     { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
1339     { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
1340     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
1341     { RID_IsSrc0Rotation   , VPHAL_MIRROR_HORIZONTAL            , Kdll_None },
1342     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_0          , Kdll_None },
1343     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1344     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_1          , Kdll_None },
1345     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1346     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_2          , Kdll_None },
1347     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1348     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_3          , Kdll_None },
1349     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1350     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
1351 
1352     // Mirror Vertical
1353     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1354     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1355     { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
1356     { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
1357     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
1358     { RID_IsSrc0Rotation   , VPHAL_MIRROR_VERTICAL              , Kdll_None },
1359     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_0_Rot_180  , Kdll_None },
1360     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1361     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_1_Rot_180  , Kdll_None },
1362     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1363     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_2_Rot_180  , Kdll_None },
1364     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1365     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_3_Rot_180  , Kdll_None },
1366     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1367     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
1368 
1369     // Rotate 90 Mirror Vertical
1370     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1371     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1372     { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
1373     { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
1374     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
1375     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_VERTICAL    , Kdll_None },
1376     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_0_Rot_270  , Kdll_None },
1377     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1378     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_1_Rot_270  , Kdll_None },
1379     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1380     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_2_Rot_270  , Kdll_None },
1381     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1382     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_3_Rot_270  , Kdll_None },
1383     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1384     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
1385 
1386     // Rotate 90 Mirror Horizontal
1387     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1388     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1389     { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
1390     { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
1391     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
1392     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_HORIZONTAL  , Kdll_None },
1393     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_0_Rot_90   , Kdll_None },
1394     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1395     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_1_Rot_90   , Kdll_None },
1396     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1397     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_2_Rot_90   , Kdll_None },
1398     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1399     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_3_Rot_90   , Kdll_None },
1400     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1401     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
1402 
1403     // No Rotation
1404     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1405     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1406     { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
1407     { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
1408     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
1409     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_0          , Kdll_None },
1410     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_1          , Kdll_None },
1411     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_2          , Kdll_None },
1412     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_3          , Kdll_None },
1413     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
1414 
1415     // AVS Sample (PL3 | PL3_RGB) -> Src0
1416 
1417     // Rotate 90 degrees
1418     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1419     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1420     { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
1421     { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
1422     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
1423     { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                  , Kdll_None },
1424     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_0_Rot_90   , Kdll_None },
1425     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_1_Rot_90   , Kdll_None },
1426     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_2_Rot_90   , Kdll_None },
1427     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_3_Rot_90   , Kdll_None },
1428     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
1429 
1430     // Rotate 180 degrees
1431     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1432     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1433     { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
1434     { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
1435     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
1436     { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                 , Kdll_None },
1437     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_0_Rot_180  , Kdll_None },
1438     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_1_Rot_180  , Kdll_None },
1439     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_2_Rot_180  , Kdll_None },
1440     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_3_Rot_180  , Kdll_None },
1441     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
1442 
1443     // Rotate 270 degrees
1444     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1445     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1446     { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
1447     { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
1448     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
1449     { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                 , Kdll_None },
1450     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_0_Rot_270  , Kdll_None },
1451     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_1_Rot_270  , Kdll_None },
1452     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_2_Rot_270  , Kdll_None },
1453     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_3_Rot_270  , Kdll_None },
1454     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
1455 
1456     // Mirror Horizontal
1457     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1458     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1459     { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
1460     { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
1461     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
1462     { RID_IsSrc0Rotation   , VPHAL_MIRROR_HORIZONTAL            , Kdll_None },
1463     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_0          , Kdll_None },
1464     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1465     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_1          , Kdll_None },
1466     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1467     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_2          , Kdll_None },
1468     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1469     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_3          , Kdll_None },
1470     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1471     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
1472 
1473     // Mirror Vertical
1474     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1475     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1476     { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
1477     { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
1478     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
1479     { RID_IsSrc0Rotation   , VPHAL_MIRROR_VERTICAL              , Kdll_None },
1480     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_0_Rot_180  , Kdll_None },
1481     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1482     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_1_Rot_180  , Kdll_None },
1483     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1484     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_2_Rot_180  , Kdll_None },
1485     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1486     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_3_Rot_180  , Kdll_None },
1487     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1488     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
1489 
1490     // Rotate 90 Mirror Vertical
1491     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1492     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1493     { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
1494     { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
1495     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
1496     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_VERTICAL    , Kdll_None },
1497     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_0_Rot_270  , Kdll_None },
1498     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1499     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_1_Rot_270  , Kdll_None },
1500     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1501     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_2_Rot_270  , Kdll_None },
1502     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1503     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_3_Rot_270  , Kdll_None },
1504     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1505     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
1506 
1507     // Rotate 90 Mirror Horizontal
1508     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1509     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1510     { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
1511     { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
1512     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
1513     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_HORIZONTAL  , Kdll_None },
1514     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_0_Rot_90   , Kdll_None },
1515     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1516     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_1_Rot_90   , Kdll_None },
1517     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1518     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_2_Rot_90   , Kdll_None },
1519     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1520     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_3_Rot_90   , Kdll_None },
1521     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
1522     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
1523 
1524     // No Rotation
1525     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1526     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1527     { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
1528     { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
1529     { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
1530     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_0          , Kdll_None },
1531     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_1          , Kdll_None },
1532     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_2          , Kdll_None },
1533     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_3          , Kdll_None },
1534     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
1535 
1536     // Sample_Unorm interlaced scaling
1537     // Interlaced Sample RGB -> Src0
1538     // jump to sampleLayer0SelectCSC to decide if CSC needed before Mix
1539     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1540     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1541     { RID_IsSrc0Format     , Format_RGB                         , Kdll_None },
1542     { RID_IsSrc0Sampling   , Sample_iScaling                    , Kdll_None },
1543     { RID_SetKernel        , IDR_VP_PA_444iScale16_Buf_0        , Kdll_None },
1544     { RID_SetKernel        , IDR_VP_PA_444iScale16_Buf_1        , Kdll_None },
1545     { RID_SetKernel        , IDR_VP_PA_444iScale16_Buf_2        , Kdll_None },
1546     { RID_SetKernel        , IDR_VP_PA_444iScale16_Buf_3        , Kdll_None },
1547     { RID_SetParserState   , Parser_SampleLayer0SelectCSC       , Kdll_None },
1548 
1549     // Sample (AYUV | Packed YUV | NV12 | 400P | P010) -> Src0
1550     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1551     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1552     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
1553     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
1554     { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
1555     { RID_IsSrc0Format     , Format_400P                        , Kdll_Or   },
1556     { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
1557     { RID_IsSrc0Format     , Format_P016                        , Kdll_Or   },
1558     { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_None },
1559     { RID_IsSrc0Sampling   , Sample_iScaling                    , Kdll_None },
1560     { RID_SetKernel        , IDR_VP_PA_444iScale16_Buf_0        , Kdll_None },
1561     { RID_SetKernel        , IDR_VP_PA_444iScale16_Buf_1        , Kdll_None },
1562     { RID_SetKernel        , IDR_VP_PA_444iScale16_Buf_2        , Kdll_None },
1563     { RID_SetKernel        , IDR_VP_PA_444iScale16_Buf_3        , Kdll_None },
1564     { RID_SetParserState   , Parser_SampleLayer0Mix             , Kdll_None },
1565 
1566     // Sample PL2(width or height is not a multiple of 4) -> Src0
1567     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1568     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1569     { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
1570     { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
1571     { RID_IsSrc0Sampling   , Sample_iScaling                    , Kdll_None },
1572     { RID_SetKernel        , IDR_VP_PL2_444iScale16_Buf_0       , Kdll_None },
1573     { RID_SetKernel        , IDR_VP_PL2_444iScale16_Buf_1       , Kdll_None },
1574     { RID_SetKernel        , IDR_VP_PL2_444iScale16_Buf_2       , Kdll_None },
1575     { RID_SetKernel        , IDR_VP_PL2_444iScale16_Buf_3       , Kdll_None },
1576     { RID_SetParserState   , Parser_SampleLayer0Mix             , Kdll_None },
1577 
1578     // Sample PL3 -> Src0
1579     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1580     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1581     { RID_IsSrc0Format     , Format_PL3                         , Kdll_None },
1582     { RID_IsSrc0Sampling   , Sample_iScaling                    , Kdll_None },
1583     { RID_SetKernel        , IDR_VP_PL3_444iScale16_Buf_0       , Kdll_None },
1584     { RID_SetKernel        , IDR_VP_PL3_444iScale16_Buf_1       , Kdll_None },
1585     { RID_SetKernel        , IDR_VP_PL3_444iScale16_Buf_2       , Kdll_None },
1586     { RID_SetKernel        , IDR_VP_PL3_444iScale16_Buf_3       , Kdll_None },
1587     { RID_SetParserState   , Parser_SampleLayer0Mix             , Kdll_None },
1588 
1589     // Sample PL3_RGB -> Src0
1590     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1591     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1592     { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
1593     { RID_IsSrc0Sampling   , Sample_iScaling                    , Kdll_None },
1594     { RID_SetKernel        , IDR_VP_PL3_444iScale16_Buf_0       , Kdll_None },
1595     { RID_SetKernel        , IDR_VP_PL3_444iScale16_Buf_1       , Kdll_None },
1596     { RID_SetKernel        , IDR_VP_PL3_444iScale16_Buf_2       , Kdll_None },
1597     { RID_SetKernel        , IDR_VP_PL3_444iScale16_Buf_3       , Kdll_None },
1598     { RID_SetParserState   , Parser_SampleLayer0SelectCSC       , Kdll_None },
1599 
1600     // Sample interlaced scaling
1601     // Sample 0.34x RGB -> Src0
1602     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1603     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1604     { RID_IsSrc0Format     , Format_RGB                         , Kdll_None },
1605     { RID_IsSrc0Sampling   , Sample_iScaling_034x               , Kdll_None },
1606     { RID_SetKernel        , IDR_VP_PA_444iDScale16_Buf_0       , Kdll_None },
1607     { RID_SetKernel        , IDR_VP_PA_444iDScale16_Buf_1       , Kdll_None },
1608     { RID_SetKernel        , IDR_VP_PA_444iDScale16_Buf_2       , Kdll_None },
1609     { RID_SetKernel        , IDR_VP_PA_444iDScale16_Buf_3       , Kdll_None },
1610     { RID_SetParserState   , Parser_SampleLayer0SelectCSC       , Kdll_None },
1611 
1612      // Sample 0.34x (AYUV | PA |400P | PL2 ) -> Src0
1613     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1614     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1615     { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
1616     { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
1617     { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
1618     { RID_IsSrc0Format     , Format_P016                        , Kdll_Or   },
1619     { RID_IsSrc0Format     , Format_400P                        , Kdll_Or   },
1620     { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
1621     { RID_IsSrc0Format     , Format_NV12                        , Kdll_None },
1622     { RID_IsSrc0Sampling   , Sample_iScaling_034x               , Kdll_None },
1623     { RID_SetKernel        , IDR_VP_PA_444iDScale16_Buf_0       , Kdll_None },
1624     { RID_SetKernel        , IDR_VP_PA_444iDScale16_Buf_1       , Kdll_None },
1625     { RID_SetKernel        , IDR_VP_PA_444iDScale16_Buf_2       , Kdll_None },
1626     { RID_SetKernel        , IDR_VP_PA_444iDScale16_Buf_3       , Kdll_None },
1627     { RID_SetParserState   , Parser_SampleLayer0Mix             , Kdll_None },
1628 
1629     // Sample 0.34x PL2(width or height is not a multiple of 4) -> Src0
1630     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1631     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1632     { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
1633     { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
1634     { RID_IsSrc0Sampling   , Sample_iScaling_034x               , Kdll_None },
1635     { RID_SetKernel        , IDR_VP_PL2_444iDScale16_Buf_0      , Kdll_None },
1636     { RID_SetKernel        , IDR_VP_PL2_444iDScale16_Buf_1      , Kdll_None },
1637     { RID_SetKernel        , IDR_VP_PL2_444iDScale16_Buf_2      , Kdll_None },
1638     { RID_SetKernel        , IDR_VP_PL2_444iDScale16_Buf_3      , Kdll_None },
1639     { RID_SetParserState   , Parser_SampleLayer0Mix             , Kdll_None },
1640 
1641     // Sample 0.34x PL3 -> Src0
1642     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1643     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1644     { RID_IsSrc0Format     , Format_PL3                         , Kdll_None },
1645     { RID_IsSrc0Sampling   , Sample_iScaling_034x               , Kdll_None },
1646     { RID_SetKernel        , IDR_VP_PL3_444iDScale16_Buf_0      , Kdll_None },
1647     { RID_SetKernel        , IDR_VP_PL3_444iDScale16_Buf_1      , Kdll_None },
1648     { RID_SetKernel        , IDR_VP_PL3_444iDScale16_Buf_2      , Kdll_None },
1649     { RID_SetKernel        , IDR_VP_PL3_444iDScale16_Buf_3      , Kdll_None },
1650     { RID_SetParserState   , Parser_SampleLayer0Mix             , Kdll_None },
1651 
1652     // Sample 0.34x PL3_RGB -> Src0
1653     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1654     { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
1655     { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
1656     { RID_IsSrc0Sampling   , Sample_iScaling_034x               , Kdll_None },
1657     { RID_SetKernel        , IDR_VP_PL3_444iDScale16_Buf_0      , Kdll_None },
1658     { RID_SetKernel        , IDR_VP_PL3_444iDScale16_Buf_1      , Kdll_None },
1659     { RID_SetKernel        , IDR_VP_PL3_444iDScale16_Buf_2      , Kdll_None },
1660     { RID_SetKernel        , IDR_VP_PL3_444iDScale16_Buf_3      , Kdll_None },
1661     { RID_SetParserState   , Parser_SampleLayer0SelectCSC       , Kdll_None },
1662 
1663     // Sample AVS ( NV12 | PA | YV12 | YV12_Planar | RGB ) -> Src0
1664     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
1665     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
1666     { RID_IsSrc0Format     , Format_AYUV                         , Kdll_Or   },
1667     { RID_IsSrc0Format     , Format_NV12                         , Kdll_Or   },
1668     { RID_IsSrc0Format     , Format_PA                           , Kdll_Or   },
1669     { RID_IsSrc0Format     , Format_P010                         , Kdll_Or   },
1670     { RID_IsSrc0Format     , Format_P016                         , Kdll_Or   },
1671     { RID_IsSrc0Format     , Format_YV12                         , Kdll_Or   },
1672     { RID_IsSrc0Format     , Format_YV12_Planar                  , Kdll_Or   },
1673     { RID_IsSrc0Format     , Format_RGB                          , Kdll_None },
1674     { RID_IsSrc0Sampling   , Sample_iScaling_AVS                 , Kdll_None },
1675     { RID_SetKernel        , IDR_VP_PA_444iAVS16_Buf_0           , Kdll_None },
1676     { RID_SetKernel        , IDR_VP_PA_444iAVS16_Buf_1           , Kdll_None },
1677     { RID_SetKernel        , IDR_VP_PA_444iAVS16_Buf_2           , Kdll_None },
1678     { RID_SetKernel        , IDR_VP_PA_444iAVS16_Buf_3           , Kdll_None },
1679     { RID_SetParserState   , Parser_SampleLayer0Mix              , Kdll_None },
1680 
1681     // Sample AVS PL2 -> Src0
1682     // PL2_444iAVS is not supported, use PL2_444iScale kernel instead
1683     // May have quality difference than interlaced AVS scaling
1684     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
1685     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
1686     { RID_IsSrc0Format     , Format_PL2                          , Kdll_Or   },
1687     { RID_IsSrc0Format     , Format_PL2_UnAligned                , Kdll_None },
1688     { RID_IsSrc0Sampling   , Sample_iScaling_AVS                 , Kdll_None },
1689     { RID_SetKernel        , IDR_VP_PL2_444iScale16_Buf_0        , Kdll_None },
1690     { RID_SetKernel        , IDR_VP_PL2_444iScale16_Buf_1        , Kdll_None },
1691     { RID_SetKernel        , IDR_VP_PL2_444iScale16_Buf_2        , Kdll_None },
1692     { RID_SetKernel        , IDR_VP_PL2_444iScale16_Buf_3        , Kdll_None },
1693     { RID_SetParserState   , Parser_SampleLayer0Mix              , Kdll_None },
1694 
1695      // Sample P010 -> Src0
1696     // use Dscale kernel for P010 format regardless of sampling type
1697     // Rotate 90 degrees
1698     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
1699     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
1700     { RID_IsSrc0Format     , Format_P010                         , Kdll_None },
1701     { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                   , Kdll_None },
1702     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_0_Rot_90, Kdll_None },
1703     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_1_Rot_90, Kdll_None },
1704     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_2_Rot_90, Kdll_None },
1705     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_3_Rot_90, Kdll_None },
1706     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
1707 
1708     // Rotate 180 degrees
1709     { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
1710     { RID_IsParserState    , Parser_SampleLayer0                  , Kdll_None },
1711     { RID_IsSrc0Format     , Format_P010                          , Kdll_None },
1712     { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                   , Kdll_None },
1713     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_0_Rot_180, Kdll_None },
1714     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_1_Rot_180, Kdll_None },
1715     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_2_Rot_180, Kdll_None },
1716     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_3_Rot_180, Kdll_None },
1717     { RID_SetParserState   , Parser_SampleLayer0Done              , Kdll_None },
1718 
1719     // Rotate 270 degrees
1720     { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
1721     { RID_IsParserState    , Parser_SampleLayer0                  , Kdll_None },
1722     { RID_IsSrc0Format     , Format_P010                          , Kdll_None },
1723     { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                   , Kdll_None },
1724     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_0_Rot_270, Kdll_None },
1725     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_1_Rot_270, Kdll_None },
1726     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_2_Rot_270, Kdll_None },
1727     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_3_Rot_270, Kdll_None },
1728     { RID_SetParserState   , Parser_SampleLayer0Done              , Kdll_None },
1729 
1730     // Mirror Horizontal
1731     { RID_Op_NewEntry      , RULE_DEFAULT                 , Kdll_None },
1732     { RID_IsParserState    , Parser_SampleLayer0          , Kdll_None },
1733     { RID_IsSrc0Format     , Format_P010                  , Kdll_None },
1734     { RID_IsSrc0Rotation   , VPHAL_MIRROR_HORIZONTAL      , Kdll_None },
1735     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_0, Kdll_None },
1736     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV     , Kdll_None },
1737     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_1, Kdll_None },
1738     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV     , Kdll_None },
1739     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_2, Kdll_None },
1740     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV     , Kdll_None },
1741     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_3, Kdll_None },
1742     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV     , Kdll_None },
1743     { RID_SetParserState   , Parser_SampleLayer0Done      , Kdll_None },
1744 
1745     // Mirror Vertical
1746     { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
1747     { RID_IsParserState    , Parser_SampleLayer0                  , Kdll_None },
1748     { RID_IsSrc0Format     , Format_P010                          , Kdll_None },
1749     { RID_IsSrc0Rotation   , VPHAL_MIRROR_VERTICAL                , Kdll_None },
1750     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_0_Rot_180, Kdll_None },
1751     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
1752     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_1_Rot_180, Kdll_None },
1753     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
1754     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_2_Rot_180, Kdll_None },
1755     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
1756     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_3_Rot_180, Kdll_None },
1757     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
1758     { RID_SetParserState   , Parser_SampleLayer0Done              , Kdll_None },
1759 
1760     // Rotate 90 Mirror Vertical
1761     { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
1762     { RID_IsParserState    , Parser_SampleLayer0                  , Kdll_None },
1763     { RID_IsSrc0Format     , Format_P010                          , Kdll_None },
1764     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_VERTICAL      , Kdll_None },
1765     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_0_Rot_270, Kdll_None },
1766     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
1767     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_1_Rot_270, Kdll_None },
1768     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
1769     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_2_Rot_270, Kdll_None },
1770     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
1771     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_3_Rot_270, Kdll_None },
1772     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
1773     { RID_SetParserState   , Parser_SampleLayer0Done              , Kdll_None },
1774 
1775     // Rotate 90 Mirror Horizontal
1776     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
1777     { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
1778     { RID_IsSrc0Format     , Format_P010                         , Kdll_None },
1779     { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_HORIZONTAL   , Kdll_None },
1780     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_0_Rot_90, Kdll_None },
1781     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
1782     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_1_Rot_90, Kdll_None },
1783     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
1784     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_2_Rot_90, Kdll_None },
1785     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
1786     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_3_Rot_90, Kdll_None },
1787     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
1788     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
1789 
1790     // No Rotation
1791     { RID_Op_NewEntry      , RULE_DEFAULT                 , Kdll_None },
1792     { RID_IsParserState    , Parser_SampleLayer0          , Kdll_None },
1793     { RID_IsSrc0Format     , Format_P010                  , Kdll_None },
1794     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_0, Kdll_None },
1795     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_1, Kdll_None },
1796     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_2, Kdll_None },
1797     { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_3, Kdll_None },
1798     { RID_SetParserState   , Parser_SampleLayer0Done      , Kdll_None },
1799 
1800     // Select CSC for layer 0 Mix only if Render Target format is NV12
1801     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1802     { RID_IsParserState    , Parser_SampleLayer0SelectCSC       , Kdll_None },
1803     { RID_IsTargetFormat   , Format_NV12                        , Kdll_None },
1804     { RID_SetNextLayer     , 2                                  , Kdll_None },   // increase layer number to target layer
1805     { RID_SetCSCBeforeMix  , true                               , Kdll_None },
1806     { RID_SetSrc0Coeff     , CoeffID_Source                     , Kdll_None },
1807     { RID_SetParserState   , Parser_SetupCSC0                   , Kdll_None },
1808 
1809     // If Render Target is not NV12, simply call Intermix
1810     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1811     { RID_IsParserState    , Parser_SampleLayer0SelectCSC       , Kdll_None },
1812     { RID_SetParserState   , Parser_SampleLayer0Mix             , Kdll_None },
1813 
1814     // Intermix the layer 0
1815 
1816     // Interlaced scaling, intermix the top and bottom fields
1817     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
1818     { RID_IsParserState    , Parser_SampleLayer0Mix              , Kdll_None },
1819     { RID_IsTargetFormat   , Format_NV12                         , Kdll_Or   },
1820     { RID_IsTargetFormat   , Format_P016                         , Kdll_Or   },
1821     { RID_IsTargetFormat   , Format_P010                         , Kdll_None },
1822     { RID_IsSrc0Sampling   , Sample_iScaling                     , Kdll_Or   },
1823     { RID_IsSrc0Sampling   , Sample_iScaling_AVS                 , Kdll_Or   },
1824     { RID_IsSrc0Sampling   , Sample_iScaling_034x                , Kdll_None },
1825     { RID_SetKernel        , IDR_VP_Interlace_420_16_Buf_0       , Kdll_None },
1826     { RID_SetKernel        , IDR_VP_Interlace_420_16_Buf_1       , Kdll_None },
1827     { RID_SetKernel        , IDR_VP_Interlace_420_16_Buf_2       , Kdll_None },
1828     { RID_SetKernel        , IDR_VP_Interlace_420_16_Buf_3       , Kdll_None },
1829     { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },
1830 
1831     // Interlaced scaling, intermix the top and bottom fields
1832     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
1833     { RID_IsParserState    , Parser_SampleLayer0Mix             , Kdll_None },
1834     { RID_SetKernel        , IDR_VP_Interlace_444_16_Buf_0      , Kdll_None },
1835     { RID_SetKernel        , IDR_VP_Interlace_444_16_Buf_1      , Kdll_None },
1836     { RID_SetKernel        , IDR_VP_Interlace_444_16_Buf_2      , Kdll_None },
1837     { RID_SetKernel        , IDR_VP_Interlace_444_16_Buf_3      , Kdll_None },
1838     { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },
1839 
1840     // Sample Layer 0 Done
1841 
1842     // Src0 Sampling is complete -> Luma key + CSC
1843     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                        , Kdll_None },
1844     { RID_IsParserState    , Parser_SampleLayer0Done                 , Kdll_None },
1845     { RID_IsSrc0LumaKey    , LumaKey_True                            , Kdll_None },
1846     { RID_IsSrc0Coeff      , CoeffID_Any                             , Kdll_None },
1847     { RID_SetKernel        , IDR_VP_Compute_Lumakey_Buf0123          , Kdll_None },
1848     { RID_SetSrc0LumaKey   , LumaKey_False                           , Kdll_None },
1849     { RID_SetSrc0Sampling  , Sample_None                             , Kdll_None },
1850     { RID_SetSrc0Format    , Format_None                             , Kdll_None },
1851     { RID_SetParserState   , Parser_SetupCSC0                        , Kdll_None },
1852 
1853     // Src0 Sampling is complete -> Luma key + Colorfill
1854     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                        , Kdll_None },
1855     { RID_IsParserState    , Parser_SampleLayer0Done                 , Kdll_None },
1856     { RID_IsSrc0LumaKey    , LumaKey_True                            , Kdll_None },
1857     { RID_IsSrc0ColorFill  , ColorFill_True                          , Kdll_None },
1858     { RID_SetKernel        , IDR_VP_Compute_Lumakey_Buf0123          , Kdll_None },
1859     { RID_SetSrc0LumaKey   , LumaKey_False                           , Kdll_None },
1860     { RID_SetSrc0Sampling  , Sample_None                             , Kdll_None },
1861     { RID_SetSrc0Format    , Format_None                             , Kdll_None },
1862     { RID_SetParserState   , Parser_Colorfill                        , Kdll_None },
1863 
1864 
1865     // Src0 Sampling is complete -> CSC
1866     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                        , Kdll_None },
1867     { RID_IsParserState    , Parser_SampleLayer0Done                 , Kdll_None },
1868     { RID_IsSrc0Coeff      , CoeffID_Any                             , Kdll_None },
1869     { RID_SetSrc0Sampling  , Sample_None                             , Kdll_None },
1870     { RID_SetSrc0Format    , Format_None                             , Kdll_None },
1871     { RID_SetParserState   , Parser_SetupCSC0                        , Kdll_None },
1872 
1873     // Src0 Sampling is complete -> Colorfill
1874     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                        , Kdll_None },
1875     { RID_IsParserState    , Parser_SampleLayer0Done                 , Kdll_None },
1876     { RID_IsSrc0ColorFill  , ColorFill_True                          , Kdll_None },
1877     { RID_SetSrc0Sampling  , Sample_None                             , Kdll_None },
1878     { RID_SetSrc0Format    , Format_None                             , Kdll_None },
1879     { RID_SetParserState   , Parser_Colorfill                        , Kdll_None },
1880 
1881     // Src0 Sampling is complete -> no CSC or Colorfill
1882     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                        , Kdll_None },
1883     { RID_IsParserState    , Parser_SampleLayer0Done                 , Kdll_None },
1884     { RID_SetSrc0Sampling  , Sample_None                             , Kdll_None },
1885     { RID_SetSrc0Format    , Format_None                             , Kdll_None },
1886     { RID_SetParserState   , Parser_SampleLayer1                     , Kdll_None },
1887 
1888 
1889 
1890     // SrcBlend + colorfill
1891     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                        , Kdll_None },
1892     { RID_IsParserState    , Parser_Colorfill                        , Kdll_None },
1893     { RID_IsSrc0Processing , Process_SBlend                          , Kdll_None },
1894     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16_SrcBlend    , Kdll_None },
1895     { RID_SetSrc0Processing, Process_None                            , Kdll_None },
1896     { RID_SetSrc0ColorFill , ColorFill_False                         , Kdll_None },
1897     { RID_SetParserState   , Parser_SampleLayer1                     , Kdll_None },
1898 
1899     // ConstBlend + colorfill
1900     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                        , Kdll_None },
1901     { RID_IsParserState    , Parser_Colorfill                        , Kdll_None },
1902     { RID_IsSrc0Processing , Process_CBlend                          , Kdll_None },
1903     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16_ConstBlend  , Kdll_None },
1904     { RID_SetSrc0Processing, Process_None                            , Kdll_None },
1905     { RID_SetSrc0ColorFill , ColorFill_False                         , Kdll_None },
1906     { RID_SetParserState   , Parser_SampleLayer1                     , Kdll_None },
1907 
1908     // ConstSrcBlend + colorfill
1909     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                            , Kdll_None },
1910     { RID_IsParserState    , Parser_Colorfill                            , Kdll_None },
1911     { RID_IsSrc0Processing , Process_CSBlend                             , Kdll_None },
1912     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16_ConstSrcBlend   , Kdll_None },
1913     { RID_SetSrc0Processing, Process_None                                , Kdll_None },
1914     { RID_SetSrc0ColorFill , ColorFill_False                             , Kdll_None },
1915     { RID_SetParserState   , Parser_SampleLayer1                         , Kdll_None },
1916 
1917     // PartBlend + colorfill
1918     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                        , Kdll_None },
1919     { RID_IsParserState    , Parser_Colorfill                        , Kdll_None },
1920     { RID_IsSrc0Processing , Process_PBlend                          , Kdll_None },
1921     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16_PartBlend   , Kdll_None },
1922     { RID_SetSrc0Processing, Process_None                            , Kdll_None },
1923     { RID_SetSrc0ColorFill , ColorFill_False                         , Kdll_None },
1924     { RID_SetParserState   , Parser_SampleLayer1                     , Kdll_None },
1925 
1926     // no AVS -> colorfill
1927     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                    , Kdll_None },
1928     { RID_IsParserState    , Parser_Colorfill                    , Kdll_None },
1929     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
1930     { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
1931     { RID_SetParserState   , Parser_SampleLayer1                 , Kdll_None },
1932 
1933 
1934     // Sample Layer 1
1935 
1936     // Sampling for layer0 is not complete, go back
1937     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
1938     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
1939     { RID_IsSrc0Sampling   , Sample_Any                         , Kdll_None },
1940     { RID_SetParserState   , Parser_SampleLayer0                , Kdll_None },
1941 
1942     // Sampling is complete for both layers, perform CSC
1943     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
1944     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
1945     { RID_IsSrc0Sampling   , Sample_None                        , Kdll_None },
1946     { RID_IsSrc1Sampling   , Sample_None                        , Kdll_None },
1947     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
1948 
1949     // Sample AVS
1950     // Y210 -> Src1
1951     // Rotate 90 degrees
1952     { RID_Op_NewEntry      , RULE_DEFAULT                                     , Kdll_None },
1953     { RID_IsParserState    , Parser_SampleLayer1                              , Kdll_None },
1954     { RID_IsSrc1Format     , Format_Y210                                      , Kdll_None },
1955     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                               , Kdll_None },
1956     { RID_IsLayerRotation  , VPHAL_ROTATION_90                                , Kdll_None },
1957     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_4_Rot_90  , Kdll_None },
1958     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_5_Rot_90  , Kdll_None },
1959     { RID_SetParserState   , Parser_SetupCSC1                                 , Kdll_None },
1960 
1961     // Rotate 180 degrees
1962     { RID_Op_NewEntry      , RULE_DEFAULT                                     , Kdll_None },
1963     { RID_IsParserState    , Parser_SampleLayer1                              , Kdll_None },
1964     { RID_IsSrc1Format     , Format_Y210                                      , Kdll_None },
1965     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                               , Kdll_None },
1966     { RID_IsLayerRotation  , VPHAL_ROTATION_180                               , Kdll_None },
1967     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_4_Rot_180 , Kdll_None },
1968     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_5_Rot_180 , Kdll_None },
1969     { RID_SetParserState   , Parser_SetupCSC1                                 , Kdll_None },
1970 
1971     // Rotate 270 degrees
1972     { RID_Op_NewEntry      , RULE_DEFAULT                                     , Kdll_None },
1973     { RID_IsParserState    , Parser_SampleLayer1                              , Kdll_None },
1974     { RID_IsSrc1Format     , Format_Y210                                      , Kdll_None },
1975     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                               , Kdll_None },
1976     { RID_IsLayerRotation  , VPHAL_ROTATION_270                               , Kdll_None },
1977     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_4_Rot_270 , Kdll_None },
1978     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_5_Rot_270 , Kdll_None },
1979     { RID_SetParserState   , Parser_SetupCSC1                                 , Kdll_None },
1980 
1981     // Mirror Horizontal
1982     { RID_Op_NewEntry      , RULE_DEFAULT                                     , Kdll_None },
1983     { RID_IsParserState    , Parser_SampleLayer1                              , Kdll_None },
1984     { RID_IsSrc1Format     , Format_Y210                                      , Kdll_None },
1985     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                               , Kdll_None },
1986     { RID_IsLayerRotation  , VPHAL_MIRROR_HORIZONTAL                          , Kdll_None },
1987     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_4         , Kdll_None },
1988     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                         , Kdll_None },
1989     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_5         , Kdll_None },
1990     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                         , Kdll_None },
1991     { RID_SetParserState   , Parser_SetupCSC1                                 , Kdll_None },
1992 
1993     // Mirror Vertical
1994     { RID_Op_NewEntry      , RULE_DEFAULT                                     , Kdll_None },
1995     { RID_IsParserState    , Parser_SampleLayer1                              , Kdll_None },
1996     { RID_IsSrc1Format     , Format_Y210                                      , Kdll_None },
1997     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                               , Kdll_None },
1998     { RID_IsLayerRotation  , VPHAL_MIRROR_VERTICAL                            , Kdll_None },
1999     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_4_Rot_180 , Kdll_None },
2000     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                         , Kdll_None },
2001     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_5_Rot_180 , Kdll_None },
2002     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                         , Kdll_None },
2003     { RID_SetParserState   , Parser_SampleLayer0Done                          , Kdll_None },
2004 
2005     // Rotate 90 Mirror Vertical
2006     { RID_Op_NewEntry      , RULE_DEFAULT                                     , Kdll_None },
2007     { RID_IsParserState    , Parser_SampleLayer1                              , Kdll_None },
2008     { RID_IsSrc1Format     , Format_Y210                                      , Kdll_None },
2009     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                               , Kdll_None },
2010     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_VERTICAL                  , Kdll_None },
2011     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_4_Rot_270 , Kdll_None },
2012     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                         , Kdll_None },
2013     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_5_Rot_270 , Kdll_None },
2014     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                         , Kdll_None },
2015     { RID_SetParserState   , Parser_SetupCSC1                                 , Kdll_None },
2016 
2017     // Rotate 90 Mirror Horizontal
2018     { RID_Op_NewEntry      , RULE_DEFAULT                                     , Kdll_None },
2019     { RID_IsParserState    , Parser_SampleLayer1                              , Kdll_None },
2020     { RID_IsSrc1Format     , Format_Y210                                      , Kdll_None },
2021     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                               , Kdll_None },
2022     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_HORIZONTAL                , Kdll_None },
2023     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_4_Rot_90  , Kdll_None },
2024     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                         , Kdll_None },
2025     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_5_Rot_90  , Kdll_None },
2026     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                         , Kdll_None },
2027     { RID_SetParserState   , Parser_SetupCSC1                                 , Kdll_None },
2028 
2029     // No Rotation
2030     { RID_Op_NewEntry      , RULE_DEFAULT                                     , Kdll_None },
2031     { RID_IsParserState    , Parser_SampleLayer1                              , Kdll_None },
2032     { RID_IsSrc1Format     , Format_Y210                                      , Kdll_None },
2033     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                               , Kdll_None },
2034     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_4         , Kdll_None },
2035     { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_5         , Kdll_None },
2036     { RID_SetParserState   , Parser_SetupCSC1                                 , Kdll_None },
2037 
2038     // Sample Y210 -> Src1
2039     // Rotate 90 degrees
2040     { RID_Op_NewEntry      , RULE_DEFAULT                                   , Kdll_None },
2041     { RID_IsParserState    , Parser_SampleLayer1                            , Kdll_None },
2042     { RID_IsSrc1Format     , Format_Y210                                    , Kdll_None },
2043     { RID_IsSrc1Sampling   , Sample_Scaling                                 , Kdll_None },
2044     { RID_IsLayerRotation  , VPHAL_ROTATION_90                              , Kdll_None },
2045     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_4_Rot_90            , Kdll_None },
2046     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_5_Rot_90            , Kdll_None },
2047     { RID_SetParserState   , Parser_SetupCSC1                               , Kdll_None },
2048 
2049     // Rotate 180 degrees
2050     { RID_Op_NewEntry      , RULE_DEFAULT                                    , Kdll_None },
2051     { RID_IsParserState    , Parser_SampleLayer1                             , Kdll_None },
2052     { RID_IsSrc1Format     , Format_Y210                                     , Kdll_None },
2053     { RID_IsSrc1Sampling   , Sample_Scaling                                  , Kdll_None },
2054     { RID_IsLayerRotation  , VPHAL_ROTATION_180                              , Kdll_None },
2055     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_4_Rot_180            , Kdll_None },
2056     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_5_Rot_180            , Kdll_None },
2057     { RID_SetParserState   , Parser_SetupCSC1                                , Kdll_None },
2058 
2059     // Rotate 270 degrees
2060     { RID_Op_NewEntry      , RULE_DEFAULT                                    , Kdll_None },
2061     { RID_IsParserState    , Parser_SampleLayer1                             , Kdll_None },
2062     { RID_IsSrc1Format     , Format_Y210                                     , Kdll_None },
2063     { RID_IsSrc1Sampling   , Sample_Scaling                                  , Kdll_None },
2064     { RID_IsLayerRotation  , VPHAL_ROTATION_270                              , Kdll_None },
2065     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_4_Rot_270            , Kdll_None },
2066     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_5_Rot_270            , Kdll_None },
2067     { RID_SetParserState   , Parser_SetupCSC1                                , Kdll_None },
2068 
2069     // Mirror Horizontal
2070     { RID_Op_NewEntry      , RULE_DEFAULT                            , Kdll_None },
2071     { RID_IsParserState    , Parser_SampleLayer1                     , Kdll_None },
2072     { RID_IsSrc1Format     , Format_Y210                             , Kdll_None },
2073     { RID_IsSrc1Sampling   , Sample_Scaling                          , Kdll_None },
2074     { RID_IsLayerRotation  , VPHAL_MIRROR_HORIZONTAL                 , Kdll_None },
2075     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_4            , Kdll_None },
2076     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                , Kdll_None },
2077     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_5            , Kdll_None },
2078     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                , Kdll_None },
2079     { RID_SetParserState   , Parser_SetupCSC1                        , Kdll_None },
2080 
2081     // Mirror Vertical
2082     { RID_Op_NewEntry      , RULE_DEFAULT                                    , Kdll_None },
2083     { RID_IsParserState    , Parser_SampleLayer1                             , Kdll_None },
2084     { RID_IsSrc1Format     , Format_Y210                                     , Kdll_None },
2085     { RID_IsSrc1Sampling   , Sample_Scaling                                  , Kdll_None },
2086     { RID_IsLayerRotation  , VPHAL_MIRROR_VERTICAL                           , Kdll_None },
2087     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_4_Rot_180            , Kdll_None },
2088     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                        , Kdll_None },
2089     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_5_Rot_180            , Kdll_None },
2090     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                        , Kdll_None },
2091     { RID_SetParserState   , Parser_SetupCSC1                                , Kdll_None },
2092 
2093     // Rotate 90 Mirror Vertical
2094     { RID_Op_NewEntry      , RULE_DEFAULT                                    , Kdll_None },
2095     { RID_IsParserState    , Parser_SampleLayer1                             , Kdll_None },
2096     { RID_IsSrc1Format     , Format_Y210                                     , Kdll_None },
2097     { RID_IsSrc1Sampling   , Sample_Scaling                                  , Kdll_None },
2098     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_VERTICAL                 , Kdll_None },
2099     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_4_Rot_270            , Kdll_None },
2100     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                        , Kdll_None },
2101     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_5_Rot_270            , Kdll_None },
2102     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                        , Kdll_None },
2103     { RID_SetParserState   , Parser_SetupCSC1                                , Kdll_None },
2104 
2105     // Rotate 90 Mirror Horizontal
2106     { RID_Op_NewEntry      , RULE_DEFAULT                                   , Kdll_None },
2107     { RID_IsParserState    , Parser_SampleLayer1                            , Kdll_None },
2108     { RID_IsSrc1Format     , Format_Y210                                    , Kdll_None },
2109     { RID_IsSrc1Sampling   , Sample_Scaling                                 , Kdll_None },
2110     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_HORIZONTAL              , Kdll_None },
2111     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_4_Rot_90            , Kdll_None },
2112     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                       , Kdll_None },
2113     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_5_Rot_90            , Kdll_None },
2114     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                       , Kdll_None },
2115     { RID_SetParserState   , Parser_SetupCSC1                               , Kdll_None },
2116 
2117     // No Rotation
2118     { RID_Op_NewEntry      , RULE_DEFAULT                            , Kdll_None },
2119     { RID_IsParserState    , Parser_SampleLayer1                     , Kdll_None },
2120     { RID_IsSrc1Format     , Format_Y210                             , Kdll_None },
2121     { RID_IsSrc1Sampling   , Sample_Scaling                          , Kdll_None },
2122     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_4            , Kdll_None },
2123     { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_5            , Kdll_None },
2124     { RID_SetParserState   , Parser_SetupCSC1                        , Kdll_None },
2125 
2126     // Sample (RGB | AYUV | Packed YUV | YV12 | NV12 | P010 | 400P) -> Src1
2127 
2128     // Rotate 90 degrees
2129     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2130     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2131     { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
2132     { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
2133     { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
2134     { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
2135     { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
2136     { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
2137     { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
2138     { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
2139     { RID_IsLayerRotation  , VPHAL_ROTATION_90                  , Kdll_None },
2140     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_4_Rot_90  , Kdll_None },
2141     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_5_Rot_90  , Kdll_None },
2142     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2143 
2144     // Rotate 180 degrees
2145     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2146     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2147     { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
2148     { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
2149     { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
2150     { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
2151     { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
2152     { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
2153     { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
2154     { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
2155     { RID_IsLayerRotation  , VPHAL_ROTATION_180                 , Kdll_None },
2156     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_4_Rot_180 , Kdll_None },
2157     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_5_Rot_180 , Kdll_None },
2158     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2159 
2160     // Rotate 270 degrees
2161     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2162     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2163     { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
2164     { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
2165     { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
2166     { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
2167     { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
2168     { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
2169     { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
2170     { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
2171     { RID_IsLayerRotation  , VPHAL_ROTATION_270                 , Kdll_None },
2172     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_4_Rot_270 , Kdll_None },
2173     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_5_Rot_270 , Kdll_None },
2174     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2175 
2176     // Mirror Horizontal
2177     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2178     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2179     { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
2180     { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
2181     { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
2182     { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
2183     { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
2184     { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
2185     { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
2186     { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
2187     { RID_IsLayerRotation  , VPHAL_MIRROR_HORIZONTAL            , Kdll_None },
2188     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_4         , Kdll_None },
2189     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
2190     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_5         , Kdll_None },
2191     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
2192     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2193 
2194     // Mirror Vertical
2195     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2196     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2197     { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
2198     { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
2199     { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
2200     { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
2201     { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
2202     { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
2203     { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
2204     { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
2205     { RID_IsLayerRotation  , VPHAL_MIRROR_VERTICAL              , Kdll_None },
2206     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_4_Rot_180 , Kdll_None },
2207     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
2208     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_5_Rot_180 , Kdll_None },
2209     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
2210     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2211 
2212     // Rotate 90 Mirror Vertical
2213     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2214     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2215     { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
2216     { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
2217     { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
2218     { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
2219     { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
2220     { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
2221     { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
2222     { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
2223     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_VERTICAL    , Kdll_None },
2224     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_4_Rot_270 , Kdll_None },
2225     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
2226     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_5_Rot_270 , Kdll_None },
2227     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
2228     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2229 
2230     // Rotate 90 Mirror Horizontal
2231     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2232     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2233     { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
2234     { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
2235     { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
2236     { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
2237     { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
2238     { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
2239     { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
2240     { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
2241     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_HORIZONTAL  , Kdll_None },
2242     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_4_Rot_90  , Kdll_None },
2243     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
2244     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_5_Rot_90  , Kdll_None },
2245     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
2246     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2247 
2248     // No Rotation
2249     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2250     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2251     { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
2252     { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
2253     { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
2254     { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
2255     { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
2256     { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
2257     { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
2258     { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
2259     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_4         , Kdll_None },
2260     { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_5         , Kdll_None },
2261     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2262 
2263     // Sample NV12(width or height is not a multiple of 4) -> Src1
2264 
2265     // Rotate 90 degrees
2266     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2267     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2268     { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
2269     { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
2270     { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
2271     { RID_IsLayerRotation  , VPHAL_ROTATION_90                  , Kdll_None },
2272     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_4_Rot_90 , Kdll_None },
2273     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_5_Rot_90 , Kdll_None },
2274     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2275 
2276     // Rotate 180 degrees
2277     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2278     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2279     { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
2280     { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
2281     { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
2282     { RID_IsLayerRotation  , VPHAL_ROTATION_180                 , Kdll_None },
2283     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_4_Rot_180, Kdll_None },
2284     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_5_Rot_180, Kdll_None },
2285     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2286 
2287     // Rotate 270 degrees
2288     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2289     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2290     { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
2291     { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
2292     { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
2293     { RID_IsLayerRotation  , VPHAL_ROTATION_270                 , Kdll_None },
2294     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_4_Rot_270, Kdll_None },
2295     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_5_Rot_270, Kdll_None },
2296     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2297 
2298     // Mirror Horizontal
2299     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2300     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2301     { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
2302     { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
2303     { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
2304     { RID_IsLayerRotation  , VPHAL_MIRROR_HORIZONTAL            , Kdll_None },
2305     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_4        , Kdll_None },
2306     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2307     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_5        , Kdll_None },
2308     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2309     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2310 
2311     // Mirror Vertical
2312     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2313     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2314     { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
2315     { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
2316     { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
2317     { RID_IsLayerRotation  , VPHAL_MIRROR_VERTICAL              , Kdll_None },
2318     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_4_Rot_180, Kdll_None },
2319     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2320     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_5_Rot_180, Kdll_None },
2321     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2322     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2323 
2324     // Rotate 90 Mirror Vertical
2325     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2326     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2327     { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
2328     { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
2329     { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
2330     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_VERTICAL    , Kdll_None },
2331     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_4_Rot_270, Kdll_None },
2332     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2333     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_5_Rot_270, Kdll_None },
2334     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2335     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2336 
2337     // Rotate 90 Mirror Horizontal
2338     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2339     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2340     { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
2341     { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
2342     { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
2343     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_HORIZONTAL  , Kdll_None },
2344     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_4_Rot_90 , Kdll_None },
2345     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2346     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_5_Rot_90 , Kdll_None },
2347     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2348     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2349 
2350     // No Rotation
2351     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2352     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2353     { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
2354     { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
2355     { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
2356     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_4        , Kdll_None },
2357     { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_5        , Kdll_None },
2358     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2359 
2360     // Sample (PL3 | PL3_RGB) -> Src1
2361 
2362     // Rotate 90 degrees
2363     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2364     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2365     { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
2366     { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
2367     { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
2368     { RID_IsLayerRotation  , VPHAL_ROTATION_90                  , Kdll_None },
2369     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_4_Rot_90 , Kdll_None },
2370     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_5_Rot_90 , Kdll_None },
2371     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2372 
2373     // Rotate 180 degrees
2374     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2375     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2376     { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
2377     { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
2378     { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
2379     { RID_IsLayerRotation  , VPHAL_ROTATION_180                 , Kdll_None },
2380     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_4_Rot_180, Kdll_None },
2381     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_5_Rot_180, Kdll_None },
2382     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2383 
2384     // Rotate 270 degrees
2385     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2386     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2387     { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
2388     { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
2389     { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
2390     { RID_IsLayerRotation  , VPHAL_ROTATION_270                 , Kdll_None },
2391     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_4_Rot_270, Kdll_None },
2392     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_5_Rot_270, Kdll_None },
2393     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2394 
2395     // Mirror Horizontal
2396     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2397     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2398     { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
2399     { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
2400     { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
2401     { RID_IsLayerRotation  , VPHAL_MIRROR_HORIZONTAL            , Kdll_None },
2402     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_4        , Kdll_None },
2403     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2404     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_5        , Kdll_None },
2405     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2406     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2407 
2408     // Mirror Vertical
2409     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2410     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2411     { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
2412     { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
2413     { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
2414     { RID_IsLayerRotation  , VPHAL_MIRROR_VERTICAL              , Kdll_None },
2415     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_4_Rot_180, Kdll_None },
2416     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2417     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_5_Rot_180, Kdll_None },
2418     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2419     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2420 
2421     // Rotate 90 Mirror Vertical
2422     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2423     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2424     { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
2425     { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
2426     { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
2427     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_VERTICAL    , Kdll_None },
2428     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_4_Rot_270, Kdll_None },
2429     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2430     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_5_Rot_270, Kdll_None },
2431     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2432     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2433 
2434     // Rotate 90 Mirror Horizonal
2435     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2436     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2437     { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
2438     { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
2439     { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
2440     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_HORIZONTAL  , Kdll_None },
2441     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_4_Rot_90 , Kdll_None },
2442     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2443     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_5_Rot_90 , Kdll_None },
2444     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2445     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2446 
2447     // No Rotation
2448     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2449     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2450     { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
2451     { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
2452     { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
2453     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_4        , Kdll_None },
2454     { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_5        , Kdll_None },
2455     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2456 
2457     // Sample AVS
2458     // Y410 -> Src1
2459     // Rotate 90 degrees
2460     { RID_Op_NewEntry      , RULE_DEFAULT                     , Kdll_None },
2461     { RID_IsParserState    , Parser_SampleLayer1              , Kdll_None },
2462     { RID_IsSrc1Format     , Format_Y410                      , Kdll_None },
2463     { RID_IsSrc1Sampling   , Sample_Scaling_AVS               , Kdll_None },
2464     { RID_IsLayerRotation  , VPHAL_ROTATION_90                , Kdll_None },
2465     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_4_Rot_90, Kdll_None },
2466     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_5_Rot_90, Kdll_None },
2467     { RID_SetParserState   , Parser_SetupCSC1          , Kdll_None },
2468 
2469     // Rotate 180 degrees
2470     { RID_Op_NewEntry      , RULE_DEFAULT                      , Kdll_None },
2471     { RID_IsParserState    , Parser_SampleLayer1               , Kdll_None },
2472     { RID_IsSrc1Format     , Format_Y410                       , Kdll_None },
2473     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                , Kdll_None },
2474     { RID_IsLayerRotation  , VPHAL_ROTATION_180                , Kdll_None },
2475     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_4_Rot_180, Kdll_None },
2476     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_5_Rot_180, Kdll_None },
2477     { RID_SetParserState   , Parser_SetupCSC1           , Kdll_None },
2478 
2479     // Rotate 270 degrees
2480     { RID_Op_NewEntry      , RULE_DEFAULT                      , Kdll_None },
2481     { RID_IsParserState    , Parser_SampleLayer1               , Kdll_None },
2482     { RID_IsSrc1Format     , Format_Y410                       , Kdll_None },
2483     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                , Kdll_None },
2484     { RID_IsLayerRotation  , VPHAL_ROTATION_270                , Kdll_None },
2485     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_4_Rot_270, Kdll_None },
2486     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_5_Rot_270, Kdll_None },
2487     { RID_SetParserState   , Parser_SetupCSC1           , Kdll_None },
2488 
2489     // Mirror Horizontal
2490     { RID_Op_NewEntry      , RULE_DEFAULT              , Kdll_None },
2491     { RID_IsParserState    , Parser_SampleLayer1       , Kdll_None },
2492     { RID_IsSrc1Format     , Format_Y410               , Kdll_None },
2493     { RID_IsSrc1Sampling   , Sample_Scaling_AVS        , Kdll_None },
2494     { RID_IsLayerRotation  , VPHAL_MIRROR_HORIZONTAL   , Kdll_None },
2495     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_4, Kdll_None },
2496     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV  , Kdll_None },
2497     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_5, Kdll_None },
2498     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV  , Kdll_None },
2499     { RID_SetParserState   , Parser_SetupCSC1   , Kdll_None },
2500 
2501     // Mirror Vertical
2502     { RID_Op_NewEntry      , RULE_DEFAULT                      , Kdll_None },
2503     { RID_IsParserState    , Parser_SampleLayer1               , Kdll_None },
2504     { RID_IsSrc1Format     , Format_Y410                       , Kdll_None },
2505     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                , Kdll_None },
2506     { RID_IsLayerRotation  , VPHAL_MIRROR_VERTICAL             , Kdll_None },
2507     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_4_Rot_180, Kdll_None },
2508     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV          , Kdll_None },
2509     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_5_Rot_180, Kdll_None },
2510     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV          , Kdll_None },
2511     { RID_SetParserState   , Parser_SampleLayer0Done           , Kdll_None },
2512 
2513     // Rotate 90 Mirror Vertical
2514     { RID_Op_NewEntry      , RULE_DEFAULT                      , Kdll_None },
2515     { RID_IsParserState    , Parser_SampleLayer1               , Kdll_None },
2516     { RID_IsSrc1Format     , Format_Y410                       , Kdll_None },
2517     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                , Kdll_None },
2518     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_VERTICAL   , Kdll_None },
2519     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_4_Rot_270, Kdll_None },
2520     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV          , Kdll_None },
2521     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_5_Rot_270, Kdll_None },
2522     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV          , Kdll_None },
2523     { RID_SetParserState   , Parser_SetupCSC1                  , Kdll_None },
2524 
2525     // Rotate 90 Mirror Horizontal
2526     { RID_Op_NewEntry      , RULE_DEFAULT                     , Kdll_None },
2527     { RID_IsParserState    , Parser_SampleLayer1              , Kdll_None },
2528     { RID_IsSrc1Format     , Format_Y410                      , Kdll_None },
2529     { RID_IsSrc1Sampling   , Sample_Scaling_AVS               , Kdll_None },
2530     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_HORIZONTAL, Kdll_None },
2531     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_4_Rot_90, Kdll_None },
2532     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV         , Kdll_None },
2533     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_5_Rot_90, Kdll_None },
2534     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV         , Kdll_None },
2535     { RID_SetParserState   , Parser_SetupCSC1                 , Kdll_None },
2536 
2537     // No Rotation
2538     { RID_Op_NewEntry      , RULE_DEFAULT                     , Kdll_None },
2539     { RID_IsParserState    , Parser_SampleLayer1              , Kdll_None },
2540     { RID_IsSrc1Format     , Format_Y410                      , Kdll_None },
2541     { RID_IsSrc1Sampling   , Sample_Scaling_AVS               , Kdll_None },
2542     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_4       , Kdll_None },
2543     { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_5       , Kdll_None },
2544     { RID_SetParserState   , Parser_SetupCSC1                 , Kdll_None },
2545 
2546     // Sample Y410 -> Src1
2547     // Rotate 90 degrees
2548     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
2549     { RID_IsParserState    , Parser_SampleLayer1                 , Kdll_None },
2550     { RID_IsSrc1Format     , Format_Y410                         , Kdll_None },
2551     { RID_IsSrc1Sampling   , Sample_Scaling_034x                 , Kdll_None },
2552     { RID_IsLayerRotation  , VPHAL_ROTATION_90                   , Kdll_None },
2553     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_4_Rot_90, Kdll_None },
2554     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_5_Rot_90, Kdll_None },
2555     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2556 
2557     // Rotate 180 degrees
2558     { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
2559     { RID_IsParserState    , Parser_SampleLayer1                  , Kdll_None },
2560     { RID_IsSrc1Format     , Format_Y410                          , Kdll_None },
2561     { RID_IsSrc1Sampling   , Sample_Scaling_034x                  , Kdll_None },
2562     { RID_IsLayerRotation  , VPHAL_ROTATION_180                   , Kdll_None },
2563     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_4_Rot_180, Kdll_None },
2564     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_5_Rot_180, Kdll_None },
2565     { RID_SetParserState   , Parser_SetupCSC1                     , Kdll_None },
2566 
2567     // Rotate 270 dgrees
2568     { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
2569     { RID_IsParserState    , Parser_SampleLayer1                  , Kdll_None },
2570     { RID_IsSrc1Format     , Format_Y410                          , Kdll_None },
2571     { RID_IsSrc1Sampling   , Sample_Scaling_034x                  , Kdll_None },
2572     { RID_IsLayerRotation  , VPHAL_ROTATION_270                   , Kdll_None },
2573     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_4_Rot_270, Kdll_None },
2574     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_5_Rot_270, Kdll_None },
2575     { RID_SetParserState   , Parser_SetupCSC1                     , Kdll_None },
2576 
2577     // Mirror Horizontal
2578     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
2579     { RID_IsParserState    , Parser_SampleLayer1                 , Kdll_None },
2580     { RID_IsSrc1Format     , Format_Y410                         , Kdll_None },
2581     { RID_IsSrc1Sampling   , Sample_Scaling_034x                 , Kdll_None },
2582     { RID_IsLayerRotation  , VPHAL_MIRROR_HORIZONTAL             , Kdll_None },
2583     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_4       , Kdll_None },
2584     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
2585     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_5       , Kdll_None },
2586     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
2587     { RID_SetParserState   , Parser_SetupCSC1                    , Kdll_None },
2588 
2589     // Mirror Vertical
2590     { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
2591     { RID_IsParserState    , Parser_SampleLayer1                  , Kdll_None },
2592     { RID_IsSrc1Format     , Format_Y410                          , Kdll_None },
2593     { RID_IsSrc1Sampling   , Sample_Scaling_034x                  , Kdll_None },
2594     { RID_IsLayerRotation  , VPHAL_MIRROR_VERTICAL                , Kdll_None },
2595     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_4_Rot_180, Kdll_None },
2596     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
2597     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_5_Rot_180, Kdll_None },
2598     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
2599     { RID_SetParserState   , Parser_SetupCSC1                     , Kdll_None },
2600 
2601     // Rotate 90 Mirror Vertical
2602     { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
2603     { RID_IsParserState    , Parser_SampleLayer1                  , Kdll_None },
2604     { RID_IsSrc1Format     , Format_Y410                          , Kdll_None },
2605     { RID_IsSrc1Sampling   , Sample_Scaling_034x                  , Kdll_None },
2606     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_VERTICAL      , Kdll_None },
2607     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_4_Rot_270, Kdll_None },
2608     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
2609     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_5_Rot_270, Kdll_None },
2610     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
2611     { RID_SetParserState   , Parser_SetupCSC1                     , Kdll_None },
2612 
2613     // Rotate 90 Mirror Horizontal
2614     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
2615     { RID_IsParserState    , Parser_SampleLayer1                 , Kdll_None },
2616     { RID_IsSrc1Format     , Format_Y410                         , Kdll_None },
2617     { RID_IsSrc1Sampling   , Sample_Scaling_034x                 , Kdll_None },
2618     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_HORIZONTAL   , Kdll_None },
2619     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_4_Rot_90, Kdll_None },
2620     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
2621     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_5_Rot_90, Kdll_None },
2622     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
2623     { RID_SetParserState   , Parser_SetupCSC1                    , Kdll_None },
2624 
2625     // No Rotation
2626     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
2627     { RID_IsParserState    , Parser_SampleLayer1                 , Kdll_None },
2628     { RID_IsSrc1Format     , Format_Y410                         , Kdll_None },
2629     { RID_IsSrc1Sampling   , Sample_Scaling_034x                 , Kdll_None },
2630     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_4       , Kdll_None },
2631     { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_5       , Kdll_None },
2632     { RID_SetParserState   , Parser_SetupCSC1                    , Kdll_None },
2633 
2634     // Sample 0.34x -> Src1
2635     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2636     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2637     { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
2638     { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
2639     { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
2640     { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
2641     { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
2642     { RID_IsSrc1Sampling   , Sample_Scaling_034x                , Kdll_None },
2643     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_4        , Kdll_None },
2644     { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_5        , Kdll_None },
2645     { RID_SetParserState   , Parser_SampleLayer1Done            , Kdll_None },
2646 
2647     // Sample 0.34x PL2(width or height is not a multiple of 4) -> Src1
2648     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2649     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2650     { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
2651     { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
2652     { RID_IsSrc1Sampling   , Sample_Scaling_034x                , Kdll_None },
2653     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_4       , Kdll_None },
2654     { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_5       , Kdll_None },
2655     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2656 
2657     // Sample 0.34x PL3 -> Src1
2658     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2659     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2660     { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
2661     { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
2662     { RID_IsSrc1Sampling   , Sample_Scaling_034x                , Kdll_None },
2663     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_4       , Kdll_None },
2664     { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_5       , Kdll_None },
2665     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2666 
2667     // AVS Sample (RGB | AYUV | Packed YUV | YV12 | NV12 | P010 | 400P) -> Src1
2668 
2669     // Rotate 90 degrees
2670     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2671     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2672     { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
2673     { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
2674     { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
2675     { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
2676     { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
2677     { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
2678     { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
2679     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
2680     { RID_IsLayerRotation  , VPHAL_ROTATION_90                  , Kdll_None },
2681     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_4_Rot_90    , Kdll_None },
2682     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_5_Rot_90    , Kdll_None },
2683     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2684 
2685     // Rotate 180 degrees
2686     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2687     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2688     { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
2689     { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
2690     { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
2691     { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
2692     { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
2693     { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
2694     { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
2695     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
2696     { RID_IsLayerRotation  , VPHAL_ROTATION_180                 , Kdll_None },
2697     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_4_Rot_180   , Kdll_None },
2698     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_5_Rot_180   , Kdll_None },
2699     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2700 
2701     // Rotate 270 degrees
2702     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2703     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2704     { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
2705     { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
2706     { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
2707     { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
2708     { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
2709     { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
2710     { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
2711     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
2712     { RID_IsLayerRotation  , VPHAL_ROTATION_270                 , Kdll_None },
2713     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_4_Rot_270   , Kdll_None },
2714     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_5_Rot_270   , Kdll_None },
2715     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2716 
2717     // Mirror Horizontal
2718     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2719     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2720     { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
2721     { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
2722     { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
2723     { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
2724     { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
2725     { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
2726     { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
2727     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
2728     { RID_IsLayerRotation  , VPHAL_MIRROR_HORIZONTAL            , Kdll_None },
2729     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_4           , Kdll_None },
2730     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
2731     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_5           , Kdll_None },
2732     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
2733     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2734 
2735     // Mirror Vertical
2736     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2737     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2738     { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
2739     { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
2740     { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
2741     { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
2742     { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
2743     { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
2744     { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
2745     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
2746     { RID_IsLayerRotation  , VPHAL_MIRROR_VERTICAL              , Kdll_None },
2747     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_4_Rot_180   , Kdll_None },
2748     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
2749     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_5_Rot_180   , Kdll_None },
2750     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
2751     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2752 
2753     // Rotate 90 Mirror Vertical
2754     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2755     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2756     { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
2757     { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
2758     { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
2759     { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
2760     { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
2761     { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
2762     { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
2763     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
2764     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_VERTICAL    , Kdll_None },
2765     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_4_Rot_270   , Kdll_None },
2766     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
2767     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_5_Rot_270   , Kdll_None },
2768     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
2769     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2770 
2771     // Rotate 90 Mirror Horizontal
2772     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2773     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2774     { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
2775     { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
2776     { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
2777     { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
2778     { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
2779     { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
2780     { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
2781     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
2782     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_HORIZONTAL  , Kdll_None },
2783     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_4_Rot_90    , Kdll_None },
2784     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
2785     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_5_Rot_90    , Kdll_None },
2786     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
2787     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2788 
2789     // No Rotation
2790     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2791     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2792     { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
2793     { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
2794     { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
2795     { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
2796     { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
2797     { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
2798     { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
2799     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
2800     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_4           , Kdll_None },
2801     { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_5           , Kdll_None },
2802     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2803 
2804     // AVS Sample PL2(width or height is not a multiple of 4) -> Src1
2805 
2806     // Rotate 90 degrees
2807     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2808     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2809     { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
2810     { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
2811     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
2812     { RID_IsLayerRotation  , VPHAL_ROTATION_90                  , Kdll_None },
2813     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_4_Rot_90   , Kdll_None },
2814     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_5_Rot_90   , Kdll_None },
2815     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2816 
2817     // Rotate 180 degrees
2818     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2819     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2820     { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
2821     { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
2822     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
2823     { RID_IsLayerRotation  , VPHAL_ROTATION_180                 , Kdll_None },
2824     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_4_Rot_180  , Kdll_None },
2825     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_5_Rot_180  , Kdll_None },
2826     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2827 
2828     // Rotate 270 degrees
2829     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2830     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2831     { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
2832     { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
2833     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
2834     { RID_IsLayerRotation  , VPHAL_ROTATION_270                 , Kdll_None },
2835     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_4_Rot_270  , Kdll_None },
2836     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_5_Rot_270  , Kdll_None },
2837     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2838 
2839     // Mirror Horizontal
2840     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2841     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2842     { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
2843     { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
2844     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
2845     { RID_IsLayerRotation  , VPHAL_MIRROR_HORIZONTAL            , Kdll_None },
2846     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_4          , Kdll_None },
2847     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2848     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_5          , Kdll_None },
2849     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2850     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2851 
2852     // Mirror Vertical
2853     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2854     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2855     { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
2856     { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
2857     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
2858     { RID_IsLayerRotation  , VPHAL_MIRROR_VERTICAL              , Kdll_None },
2859     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_4_Rot_180  , Kdll_None },
2860     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2861     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_5_Rot_180  , Kdll_None },
2862     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2863     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2864 
2865     // Rotate 90 Mirror Vertical
2866     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2867     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2868     { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
2869     { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
2870     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
2871     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_VERTICAL    , Kdll_None },
2872     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_4_Rot_270  , Kdll_None },
2873     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2874     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_5_Rot_270  , Kdll_None },
2875     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2876     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2877 
2878     // Rotate 90 Mirror Horizontal
2879     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2880     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2881     { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
2882     { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
2883     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
2884     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_HORIZONTAL  , Kdll_None },
2885     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_4_Rot_90   , Kdll_None },
2886     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2887     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_5_Rot_90   , Kdll_None },
2888     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2889     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2890 
2891     // No Rotation
2892     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2893     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2894     { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
2895     { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
2896     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
2897     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_4          , Kdll_None },
2898     { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_5          , Kdll_None },
2899     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2900 
2901     // AVS Sample (PL3 | PL3_RGB) -> Src1
2902 
2903     // Rotate 90 degrees
2904     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2905     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2906     { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
2907     { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
2908     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
2909     { RID_IsLayerRotation  , VPHAL_ROTATION_90                  , Kdll_None },
2910     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_4_Rot_90   , Kdll_None },
2911     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_5_Rot_90   , Kdll_None },
2912     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2913 
2914     // Rotate 180 degrees
2915     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2916     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2917     { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
2918     { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
2919     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
2920     { RID_IsLayerRotation  , VPHAL_ROTATION_180                 , Kdll_None },
2921     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_4_Rot_180  , Kdll_None },
2922     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_5_Rot_180  , Kdll_None },
2923     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2924 
2925     // Rotate 270 degrees
2926     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2927     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2928     { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
2929     { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
2930     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
2931     { RID_IsLayerRotation  , VPHAL_ROTATION_270                 , Kdll_None },
2932     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_4_Rot_270  , Kdll_None },
2933     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_5_Rot_270  , Kdll_None },
2934     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2935 
2936     // Mirror Horizontal
2937     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2938     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2939     { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
2940     { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
2941     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
2942     { RID_IsLayerRotation  , VPHAL_MIRROR_HORIZONTAL            , Kdll_None },
2943     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_4          , Kdll_None },
2944     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2945     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_5          , Kdll_None },
2946     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2947     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2948 
2949     // Mirror Vertical
2950     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2951     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2952     { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
2953     { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
2954     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
2955     { RID_IsLayerRotation  , VPHAL_MIRROR_VERTICAL              , Kdll_None },
2956     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_4_Rot_180  , Kdll_None },
2957     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2958     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_5_Rot_180  , Kdll_None },
2959     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2960     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2961 
2962     // Rotate 90 Mirror Vertical
2963     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2964     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2965     { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
2966     { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
2967     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
2968     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_VERTICAL    , Kdll_None },
2969     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_4_Rot_270  , Kdll_None },
2970     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2971     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_5_Rot_270  , Kdll_None },
2972     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2973     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2974 
2975     // Rotate 90 Mirror Horizontal
2976     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2977     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2978     { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
2979     { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
2980     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
2981     { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_HORIZONTAL  , Kdll_None },
2982     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_4_Rot_90   , Kdll_None },
2983     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2984     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_5_Rot_90   , Kdll_None },
2985     { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
2986     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2987 
2988     // No Rotation
2989     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
2990     { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
2991     { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
2992     { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
2993     { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
2994     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_4          , Kdll_None },
2995     { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_5          , Kdll_None },
2996     { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },
2997 
2998     // Setup CSC coefficients for layer 0
2999 
3000     // CSC not present for Render Target
3001     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
3002     { RID_IsParserState    , Parser_SetupCSC0                   , Kdll_None },
3003     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
3004     { RID_IsSrc0Coeff      , CoeffID_None                       , Kdll_None },
3005     { RID_SetParserState   , Parser_WriteOutput                 , Kdll_None },
3006 
3007     // Coeff  0 (CSC+PA), Set Curbe CSC Coefficients
3008     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
3009     { RID_IsParserState    , Parser_SetupCSC0                   , Kdll_None },
3010     { RID_IsSrc0Coeff      , CoeffID_0                          , Kdll_None },
3011     { RID_IsSetCoeffMode   , SetCSCCoeffMethod_Curbe            , Kdll_None },
3012     { RID_SetKernel        , IDR_VP_Set_CURBE_CSC_Coeff         , Kdll_None },
3013     { RID_SetParserState   , Parser_ExecuteCSC0                 , Kdll_None },
3014 
3015     // Coeff  0 (CSC+PA), Set Patch CSC Coefficients
3016     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
3017     { RID_IsParserState    , Parser_SetupCSC0                   , Kdll_None },
3018     { RID_IsSrc0Coeff      , CoeffID_0                          , Kdll_None },
3019     { RID_IsSetCoeffMode   , SetCSCCoeffMethod_Patch            , Kdll_None },
3020     { RID_SetKernel        , IDR_VP_Set_Patched_CSC_Coeff       , Kdll_None },
3021     { RID_SetPatchData     , PatchKind_CSC_Coeff_Src0           , Kdll_None },      // Patch data source is CSC coeff for Src0
3022     { RID_SetPatch         , 6                                  , Kdll_None },      // 6 patches : Count (8), Src (8), Dest (16)
3023     { (Kdll_RuleID) 0x000c , 0x0400                             , Kdll_None },      //             04 00 000c
3024     { (Kdll_RuleID) 0x001c , 0x0404                             , Kdll_None },      //             04 04 001c
3025     { (Kdll_RuleID) 0x002c , 0x0408                             , Kdll_None },      //             04 08 002c
3026     { (Kdll_RuleID) 0x003c , 0x040C                             , Kdll_None },      //             04 0C 003c
3027     { (Kdll_RuleID) 0x004c , 0x0410                             , Kdll_None },      //             04 10 004c
3028     { (Kdll_RuleID) 0x005c , 0x0414                             , Kdll_None },      //             04 14 005c
3029     { RID_SetParserState   , Parser_ExecuteCSC0                 , Kdll_None },
3030 
3031     // Other Matrices ( cannot include PA)
3032     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
3033     { RID_IsParserState    , Parser_SetupCSC0                   , Kdll_None },
3034     { RID_IsSrc0Coeff      , CoeffID_Any                        , Kdll_None },
3035     { RID_SetKernel        , IDR_VP_Set_Patched_CSC_Coeff       , Kdll_None },
3036     { RID_SetPatchData     , PatchKind_CSC_Coeff_Src0           , Kdll_None },      // Patch data source is CSC coeff for Src0
3037     { RID_SetPatch         , 6                                  , Kdll_None },      // 6 patches : Count (8), Src (8), Dest (16)
3038     { (Kdll_RuleID) 0x000c , 0x0400                             , Kdll_None },      //             04 00 000c
3039     { (Kdll_RuleID) 0x001c , 0x0404                             , Kdll_None },      //             04 04 001c
3040     { (Kdll_RuleID) 0x002c , 0x0408                             , Kdll_None },      //             04 08 002c
3041     { (Kdll_RuleID) 0x003c , 0x040C                             , Kdll_None },      //             04 0C 003c
3042     { (Kdll_RuleID) 0x004c , 0x0410                             , Kdll_None },      //             04 10 004c
3043     { (Kdll_RuleID) 0x005c , 0x0414                             , Kdll_None },      //             04 14 005c
3044     { RID_SetParserState   , Parser_ExecuteCSC0                 , Kdll_None },
3045 
3046     // Setup CSC coefficients for layer 1
3047 
3048     // No color space conversion for any layer
3049     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
3050     { RID_IsParserState    , Parser_SetupCSC1                   , Kdll_None },
3051     { RID_IsSrc0Coeff      , CoeffID_None                       , Kdll_None },
3052     { RID_IsSrc1Coeff      , CoeffID_None                       , Kdll_None },
3053     { RID_SetParserState   , Parser_Lumakey                     , Kdll_None },
3054 
3055     // Quadrant 2,3 - CSC coefficients already set
3056     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
3057     { RID_IsParserState    , Parser_SetupCSC1                   , Kdll_None },
3058     { RID_IsQuadrant       , 2                                  , Kdll_None },
3059     { RID_SetParserState   , Parser_Lumakey                     , Kdll_None },
3060 
3061     // Coeff  0 (CSC+PA), Set Curbe CSC Coefficients
3062     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
3063     { RID_IsParserState    , Parser_SetupCSC1                   , Kdll_None },
3064     { RID_IsSrc1Coeff      , CoeffID_0                          , Kdll_None },
3065     { RID_IsSetCoeffMode   , SetCSCCoeffMethod_Curbe            , Kdll_None },
3066     { RID_SetKernel        , IDR_VP_Set_CURBE_CSC_Coeff         , Kdll_None },
3067     { RID_SetParserState   , Parser_Lumakey                     , Kdll_None },
3068 
3069     // Coeff  0 (CSC+PA), Set Patch CSC Coefficients
3070     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
3071     { RID_IsParserState    , Parser_SetupCSC1                   , Kdll_None },
3072     { RID_IsSrc0Coeff      , CoeffID_0                          , Kdll_None },
3073     { RID_IsSetCoeffMode   , SetCSCCoeffMethod_Patch            , Kdll_None },
3074     { RID_SetKernel        , IDR_VP_Set_Patched_CSC_Coeff       , Kdll_None },
3075     { RID_SetPatchData     , PatchKind_CSC_Coeff_Src1           , Kdll_None },      // Patch data source is CSC coeff for Src0
3076     { RID_SetPatch         , 6                                  , Kdll_None },      // 6 patches : Count (8), Src (8), Dest (16)
3077     { (Kdll_RuleID) 0x000c , 0x0400                             , Kdll_None },      //             04 00 000c
3078     { (Kdll_RuleID) 0x001c , 0x0404                             , Kdll_None },      //             04 04 001c
3079     { (Kdll_RuleID) 0x002c , 0x0408                             , Kdll_None },      //             04 08 002c
3080     { (Kdll_RuleID) 0x003c , 0x040C                             , Kdll_None },      //             04 0C 003c
3081     { (Kdll_RuleID) 0x004c , 0x0410                             , Kdll_None },      //             04 10 004c
3082     { (Kdll_RuleID) 0x005c , 0x0414                             , Kdll_None },      //             04 14 005c
3083     { RID_SetParserState   , Parser_Lumakey                     , Kdll_None },
3084 
3085     // Other Matrices (cannot include PA)
3086     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
3087     { RID_IsParserState    , Parser_SetupCSC1                   , Kdll_None },
3088     { RID_IsSrc1Coeff      , CoeffID_Any                        , Kdll_None },
3089     { RID_SetKernel        , IDR_VP_Set_Patched_CSC_Coeff       , Kdll_None },
3090     { RID_SetPatchData     , PatchKind_CSC_Coeff_Src1           , Kdll_None },      // Patch data source is CSC coeff for Src1
3091     { RID_SetPatch         , 6                                  , Kdll_None },      // 6 patches : Count (8), Src (8), Dest (16)
3092     { (Kdll_RuleID) 0x000c , 0x0400                             , Kdll_None },      //             04 00 000c
3093     { (Kdll_RuleID) 0x001c , 0x0404                             , Kdll_None },      //             04 04 001c
3094     { (Kdll_RuleID) 0x002c , 0x0408                             , Kdll_None },      //             04 08 002c
3095     { (Kdll_RuleID) 0x003c , 0x040C                             , Kdll_None },      //             04 0C 003c
3096     { (Kdll_RuleID) 0x004c , 0x0410                             , Kdll_None },      //             04 10 004c
3097     { (Kdll_RuleID) 0x005c , 0x0414                             , Kdll_None },      //             04 14 005c
3098     { RID_SetParserState   , Parser_Lumakey                     , Kdll_None },
3099 
3100     // Lumakey
3101     // lumakey and CSC not needed for current layer.
3102     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
3103     { RID_IsParserState    , Parser_Lumakey                     , Kdll_None },
3104     { RID_IsSrc1LumaKey    , LumaKey_False                      , Kdll_None },
3105     { RID_IsSrc1Coeff      , CoeffID_None                       , Kdll_None },
3106     { RID_SetParserState   , Parser_ProcessLayer                , Kdll_None },
3107 
3108     // lumakey not needed, CSC needed
3109     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
3110     { RID_IsParserState    , Parser_Lumakey                     , Kdll_None },
3111     { RID_IsSrc1LumaKey    , LumaKey_False                      , Kdll_None },
3112     { RID_IsSrc1Coeff      , CoeffID_Any                        , Kdll_None },
3113     { RID_SetParserState   , Parser_ExecuteCSC1                 , Kdll_None },
3114 
3115     // lumakey and CSC - both needed
3116     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
3117     { RID_IsParserState    , Parser_Lumakey                     , Kdll_None },
3118     { RID_IsSrc1SamplerLumaKey, LumaKey_True                    , Kdll_None },
3119     { RID_IsSrc1Coeff      , CoeffID_Any                        , Kdll_None },
3120     { RID_SetParserState   , Parser_ExecuteCSC1                 , Kdll_None },
3121 
3122     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
3123     { RID_IsParserState    , Parser_Lumakey                     , Kdll_None },
3124     { RID_IsQuadrant       , 0                                  , Kdll_None },
3125     { RID_IsSrc1LumaKey    , LumaKey_True                       , Kdll_None },
3126     { RID_IsSrc1Coeff      , CoeffID_Any                        , Kdll_None },
3127     { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
3128     { RID_SetKernel        , IDR_VP_Compute_Lumakey             , Kdll_None },
3129     { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
3130     { RID_SetKernel        , IDR_VP_Compute_Lumakey             , Kdll_None },
3131     { RID_SetParserState   , Parser_ExecuteCSC1                 , Kdll_None },
3132 
3133     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
3134     { RID_IsParserState    , Parser_Lumakey                     , Kdll_None },
3135     { RID_IsQuadrant       , 2                                  , Kdll_None },
3136     { RID_IsSrc1LumaKey    , LumaKey_True                       , Kdll_None },
3137     { RID_IsSrc1Coeff      , CoeffID_Any                        , Kdll_None },
3138     { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
3139     { RID_SetKernel        , IDR_VP_Compute_Lumakey             , Kdll_None },
3140     { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
3141     { RID_SetKernel        , IDR_VP_Compute_Lumakey             , Kdll_None },
3142     { RID_SetParserState   , Parser_ExecuteCSC1                 , Kdll_None },
3143 
3144     // Lumakey needed, CSC not needed
3145     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
3146     { RID_IsParserState    , Parser_Lumakey                     , Kdll_None },
3147     { RID_IsSrc1SamplerLumaKey, LumaKey_True                    , Kdll_None },
3148     { RID_IsSrc1Coeff      , CoeffID_None                       , Kdll_None },
3149     { RID_SetParserState   , Parser_ProcessLayer                , Kdll_None },
3150 
3151     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
3152     { RID_IsParserState    , Parser_Lumakey                     , Kdll_None },
3153     { RID_IsQuadrant       , 0                                  , Kdll_None },
3154     { RID_IsSrc1LumaKey    , LumaKey_True                       , Kdll_None },
3155     { RID_IsSrc1Coeff      , CoeffID_None                       , Kdll_None },
3156     { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
3157     { RID_SetKernel        , IDR_VP_Compute_Lumakey             , Kdll_None },
3158     { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
3159     { RID_SetKernel        , IDR_VP_Compute_Lumakey             , Kdll_None },
3160     { RID_SetParserState   , Parser_ProcessLayer                , Kdll_None },
3161 
3162     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
3163     { RID_IsParserState    , Parser_Lumakey                     , Kdll_None },
3164     { RID_IsQuadrant       , 2                                  , Kdll_None },
3165     { RID_IsSrc1LumaKey    , LumaKey_True                       , Kdll_None },
3166     { RID_IsSrc1Coeff      , CoeffID_None                       , Kdll_None },
3167     { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
3168     { RID_SetKernel        , IDR_VP_Compute_Lumakey             , Kdll_None },
3169     { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
3170     { RID_SetKernel        , IDR_VP_Compute_Lumakey             , Kdll_None },
3171     { RID_SetParserState   , Parser_ProcessLayer                , Kdll_None },
3172 
3173     // Perform CSC operation for layer 0
3174     // Src0 -> any to RGB, if Src0 is pre-multiplied content use CSC_Premultiplied
3175     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3176     { RID_IsParserState    , Parser_ExecuteCSC0                 , Kdll_None },
3177     { RID_IsSrc0Processing , Process_PBlend                     , Kdll_None },
3178     { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf0            , Kdll_None },
3179     { RID_SetKernel        , IDR_VP_Call_CSC_Premultiplied      , Kdll_None },
3180     { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf1            , Kdll_None },
3181     { RID_SetKernel        , IDR_VP_Call_CSC_Premultiplied      , Kdll_None },
3182     { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf2            , Kdll_None },
3183     { RID_SetKernel        , IDR_VP_Call_CSC_Premultiplied      , Kdll_None },
3184     { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf3            , Kdll_None },
3185     { RID_SetKernel        , IDR_VP_Call_CSC_Premultiplied      , Kdll_None },
3186     { RID_SetParserState   , Parser_ExecuteCSC0Done             , Kdll_None },
3187 
3188     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3189     { RID_IsParserState    , Parser_ExecuteCSC0                 , Kdll_None },
3190     { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf0            , Kdll_None },
3191     { RID_SetKernel        , IDR_VP_Call_CSC                    , Kdll_None },
3192     { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf1            , Kdll_None },
3193     { RID_SetKernel        , IDR_VP_Call_CSC                    , Kdll_None },
3194     { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf2            , Kdll_None },
3195     { RID_SetKernel        , IDR_VP_Call_CSC                    , Kdll_None },
3196     { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf3            , Kdll_None },
3197     { RID_SetKernel        , IDR_VP_Call_CSC                    , Kdll_None },
3198     { RID_SetParserState   , Parser_ExecuteCSC0Done             , Kdll_None },
3199 
3200     // CSC0 is complete
3201 
3202     // Check whether go back to intermix layer 0
3203     // Please not change the order of these two rules
3204     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
3205     { RID_IsParserState    , Parser_ExecuteCSC0Done             , Kdll_None },
3206     { RID_IsSrc0Sampling   , Sample_iScaling                    , Kdll_None },
3207     { RID_SetSrc0Coeff     , CoeffID_None                       , Kdll_None },
3208     { RID_SetNextLayer     , -2                                 , Kdll_None }, // jump back to main layer
3209     { RID_SetParserState   , Parser_SampleLayer0Mix             , Kdll_None },
3210 
3211     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                    , Kdll_None },
3212     { RID_IsParserState    , Parser_ExecuteCSC0Done              , Kdll_None },
3213     { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
3214     { RID_SetSrc0Coeff     , CoeffID_None                        , Kdll_None },
3215     { RID_SetParserState   , Parser_Colorfill                    , Kdll_None },
3216 
3217     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                    , Kdll_None },
3218     { RID_IsParserState    , Parser_ExecuteCSC0Done              , Kdll_None },
3219     { RID_SetSrc0Coeff     , CoeffID_None                        , Kdll_None },
3220     { RID_SetParserState   , Parser_SampleLayer1                 , Kdll_None },
3221 
3222 
3223     // Perform CSC operation for layer 1
3224 
3225     // Src1 -> YUV to RGB, if Src1 is pre-multiplied content use CSC_Premultiplied
3226     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3227     { RID_IsParserState    , Parser_ExecuteCSC1                 , Kdll_None },
3228     { RID_IsSrc1Processing , Process_PBlend                     , Kdll_None },
3229     { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf4            , Kdll_None },
3230     { RID_SetKernel        , IDR_VP_Call_CSC_Premultiplied      , Kdll_None },
3231     { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf5            , Kdll_None },
3232     { RID_SetKernel        , IDR_VP_Call_CSC_Premultiplied      , Kdll_None },
3233     { RID_SetParserState   , Parser_ExecuteCSC1Done             , Kdll_None },
3234 
3235     // Src1 -> YUV to RGB
3236     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3237     { RID_IsParserState    , Parser_ExecuteCSC1                 , Kdll_None },
3238     { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf4            , Kdll_None },
3239     { RID_SetKernel        , IDR_VP_Call_CSC                    , Kdll_None },
3240     { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf5            , Kdll_None },
3241     { RID_SetKernel        , IDR_VP_Call_CSC                    , Kdll_None },
3242     { RID_SetParserState   , Parser_ExecuteCSC1Done             , Kdll_None },
3243 
3244     // Layer 1 CSC is complete - prepare operation
3245     // Quadrants 0,1 CSC complete
3246     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
3247     { RID_IsParserState    , Parser_ExecuteCSC1Done             , Kdll_None },
3248     { RID_IsQuadrant       , 0                                  , Kdll_None },
3249     { RID_SetParserState   , Parser_ProcessLayer                , Kdll_None },
3250 
3251     // Quadrants 2,3 CSC complete
3252     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
3253     { RID_IsParserState    , Parser_ExecuteCSC1Done             , Kdll_None },
3254     { RID_IsQuadrant       , 2                                  , Kdll_None },
3255     { RID_SetSrc1Coeff     , CoeffID_None                       , Kdll_None },
3256     { RID_SetParserState   , Parser_ProcessLayer                 , Kdll_None },
3257 
3258     // Process layer
3259 
3260     // Render target layer -> write output and finish
3261     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
3262     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
3263     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
3264     { RID_SetParserState   , Parser_WriteOutput                 , Kdll_None },
3265 
3266     // Single layer -> skip processing - prepare CSC for Render Target
3267     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
3268     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
3269     { RID_IsSrc1Processing , Process_None                       , Kdll_None },
3270     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
3271 
3272     // Compositing quadrants 0,1
3273     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3274     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
3275     { RID_IsQuadrant       , 0                                  , Kdll_None },
3276     { RID_IsSrc1Processing , Process_Composite                  , Kdll_None },
3277     { RID_IsSrc1SamplerLumaKey, LumaKey_True                    , Kdll_None },
3278     { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
3279     { RID_SetKernel        , IDR_VP_Prepare_LumaKey_SampleUnorm , Kdll_None },
3280     { RID_SetKernel        , IDR_VP_Call_Composite              , Kdll_None },
3281     { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
3282     { RID_SetKernel        , IDR_VP_Prepare_LumaKey_SampleUnorm , Kdll_None },
3283     { RID_SetKernel        , IDR_VP_Call_Composite              , Kdll_None },
3284     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
3285 
3286     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3287     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
3288     { RID_IsQuadrant       , 0                                  , Kdll_None },
3289     { RID_IsSrc1Processing , Process_Composite                  , Kdll_None },
3290     { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
3291     { RID_SetKernel        , IDR_VP_Call_Composite              , Kdll_None },
3292     { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
3293     { RID_SetKernel        , IDR_VP_Call_Composite              , Kdll_None },
3294     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
3295 
3296     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
3297     { RID_IsParserState    , Parser_ProcessLayer                 , Kdll_None },
3298     { RID_IsQuadrant       , 0                                   , Kdll_None },
3299     { RID_IsSrc1Processing , Process_XORComposite                , Kdll_None },
3300     { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4                , Kdll_None },
3301     { RID_SetKernel        , IDR_VP_Call_XOR_Mono_Composite      , Kdll_None },
3302     { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5                , Kdll_None },
3303     { RID_SetKernel        , IDR_VP_Call_XOR_Mono_Composite      , Kdll_None },
3304     { RID_SetParserState   , Parser_ProcessLayerDone             , Kdll_None },
3305 
3306     // Compositing quadrants 2,3
3307     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3308     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
3309     { RID_IsQuadrant       , 2                                  , Kdll_None },
3310     { RID_IsSrc1Processing , Process_Composite                  , Kdll_None },
3311     { RID_IsSrc1SamplerLumaKey, LumaKey_True                    , Kdll_None },
3312     { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
3313     { RID_SetKernel        , IDR_VP_Prepare_LumaKey_SampleUnorm , Kdll_None },
3314     { RID_SetKernel        , IDR_VP_Call_Composite              , Kdll_None },
3315     { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
3316     { RID_SetKernel        , IDR_VP_Prepare_LumaKey_SampleUnorm , Kdll_None },
3317     { RID_SetKernel        , IDR_VP_Call_Composite              , Kdll_None },
3318     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
3319 
3320     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3321     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
3322     { RID_IsQuadrant       , 2                                  , Kdll_None },
3323     { RID_IsSrc1Processing , Process_Composite                  , Kdll_None },
3324     { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
3325     { RID_SetKernel        , IDR_VP_Call_Composite              , Kdll_None },
3326     { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
3327     { RID_SetKernel        , IDR_VP_Call_Composite              , Kdll_None },
3328     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
3329 
3330     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
3331     { RID_IsParserState    , Parser_ProcessLayer                 , Kdll_None },
3332     { RID_IsQuadrant       , 2                                   , Kdll_None },
3333     { RID_IsSrc1Processing , Process_XORComposite                , Kdll_None },
3334     { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4                , Kdll_None },
3335     { RID_SetKernel        , IDR_VP_Call_XOR_Mono_Composite      , Kdll_None },
3336     { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5                , Kdll_None },
3337     { RID_SetKernel        , IDR_VP_Call_XOR_Mono_Composite      , Kdll_None },
3338     { RID_SetParserState   , Parser_ProcessLayerDone             , Kdll_None },
3339 
3340     // Constant Blending quadrants 0,1
3341     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3342     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
3343     { RID_IsQuadrant       , 0                                  , Kdll_None },
3344     { RID_IsSrc1Processing , Process_CBlend                     , Kdll_None },
3345     { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
3346     { RID_SetKernel        , IDR_VP_Call_ConstBlend             , Kdll_None },
3347     { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
3348     { RID_SetKernel        , IDR_VP_Call_ConstBlend             , Kdll_None },
3349     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
3350 
3351     // Constant Blending quadrants 2,3
3352     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3353     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
3354     { RID_IsQuadrant       , 2                                  , Kdll_None },
3355     { RID_IsSrc1Processing , Process_CBlend                     , Kdll_None },
3356     { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
3357     { RID_SetKernel        , IDR_VP_Call_ConstBlend             , Kdll_None },
3358     { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
3359     { RID_SetKernel        , IDR_VP_Call_ConstBlend             , Kdll_None },
3360     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
3361 
3362     // Source Blending quadrants 0,1
3363     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3364     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
3365     { RID_IsQuadrant       , 0                                  , Kdll_None },
3366     { RID_IsSrc1Processing , Process_SBlend                     , Kdll_None },
3367     { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
3368     { RID_SetKernel        , IDR_VP_Call_SrcBlend               , Kdll_None },
3369     { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
3370     { RID_SetKernel        , IDR_VP_Call_SrcBlend               , Kdll_None },
3371     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
3372 
3373     // Source Blending quadrants 2,3
3374     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3375     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
3376     { RID_IsQuadrant       , 2                                  , Kdll_None },
3377     { RID_IsSrc1Processing , Process_SBlend                     , Kdll_None },
3378     { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
3379     { RID_SetKernel        , IDR_VP_Call_SrcBlend               , Kdll_None },
3380     { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
3381     { RID_SetKernel        , IDR_VP_Call_SrcBlend               , Kdll_None },
3382     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
3383 
3384     // Source Blending (4-bits alpha) quadrants 0,1
3385     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3386     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
3387     { RID_IsQuadrant       , 0                                  , Kdll_None },
3388     { RID_IsSrc1Processing , Process_SBlend_4bits               , Kdll_None },
3389     { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
3390     { RID_SetKernel        , IDR_VP_Call_SrcBlend_4bits         , Kdll_None },
3391     { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
3392     { RID_SetKernel        , IDR_VP_Call_SrcBlend_4bits         , Kdll_None },
3393     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
3394 
3395     // Source Blending (4-bits alpha) quadrants 2,3
3396     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3397     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
3398     { RID_IsQuadrant       , 2                                  , Kdll_None },
3399     { RID_IsSrc1Processing , Process_SBlend_4bits               , Kdll_None },
3400     { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
3401     { RID_SetKernel        , IDR_VP_Call_SrcBlend_4bits         , Kdll_None },
3402     { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
3403     { RID_SetKernel        , IDR_VP_Call_SrcBlend_4bits         , Kdll_None },
3404     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
3405 
3406     // Partial Blending quadrants 0,1
3407     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3408     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
3409     { RID_IsQuadrant       , 0                                  , Kdll_None },
3410     { RID_IsSrc1Processing , Process_PBlend                     , Kdll_None },
3411     { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
3412     { RID_SetKernel        , IDR_VP_Call_PartBlend              , Kdll_None },
3413     { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
3414     { RID_SetKernel        , IDR_VP_Call_PartBlend              , Kdll_None },
3415     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
3416 
3417     // Partial Blending quadrants 2,3
3418     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3419     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
3420     { RID_IsQuadrant       , 2                                  , Kdll_None },
3421     { RID_IsSrc1Processing , Process_PBlend                     , Kdll_None },
3422     { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
3423     { RID_SetKernel        , IDR_VP_Call_PartBlend              , Kdll_None },
3424     { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
3425     { RID_SetKernel        , IDR_VP_Call_PartBlend              , Kdll_None },
3426     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
3427 
3428     // Constant multitply Sources Blending quadrants 0,1
3429     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3430     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
3431     { RID_IsQuadrant       , 0                                  , Kdll_None },
3432     { RID_IsSrc1Processing , Process_CSBlend                    , Kdll_None },
3433     { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
3434     { RID_SetKernel        , IDR_VP_Call_ConstSrcBlend          , Kdll_None },
3435     { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
3436     { RID_SetKernel        , IDR_VP_Call_ConstSrcBlend          , Kdll_None },
3437     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
3438 
3439     // Constant multiply Sources Blending quadrants 2,3
3440     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3441     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
3442     { RID_IsQuadrant       , 2                                  , Kdll_None },
3443     { RID_IsSrc1Processing , Process_CSBlend                    , Kdll_None },
3444     { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
3445     { RID_SetKernel        , IDR_VP_Call_ConstSrcBlend          , Kdll_None },
3446     { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
3447     { RID_SetKernel        , IDR_VP_Call_ConstSrcBlend          , Kdll_None },
3448     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
3449 
3450     // Constant multitply Partial Blending quadrants 0,1
3451     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3452     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
3453     { RID_IsQuadrant       , 0                                  , Kdll_None },
3454     { RID_IsSrc1Processing , Process_CPBlend                    , Kdll_None },
3455     { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
3456     { RID_SetKernel        , IDR_VP_Call_AlphaSrcBlendG         , Kdll_None },
3457     { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
3458     { RID_SetKernel        , IDR_VP_Call_AlphaSrcBlendG         , Kdll_None },
3459     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
3460 
3461     // Constant multiply Partial Blending quadrants 2,3
3462     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3463     { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
3464     { RID_IsQuadrant       , 2                                  , Kdll_None },
3465     { RID_IsSrc1Processing , Process_CPBlend                    , Kdll_None },
3466     { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
3467     { RID_SetKernel        , IDR_VP_Call_AlphaSrcBlendG         , Kdll_None },
3468     { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
3469     { RID_SetKernel        , IDR_VP_Call_AlphaSrcBlendG         , Kdll_None },
3470     { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },
3471 
3472     // Layer processing is complete
3473 
3474     // nothing to process - next layer
3475     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
3476     { RID_IsParserState    , Parser_ProcessLayerDone            , Kdll_None },
3477     { RID_IsSrc1Processing , Process_None                       , Kdll_None },
3478     { RID_SetNextLayer     , 0                                  , Kdll_None },
3479     { RID_SetQuadrant      , 0                                  , Kdll_None },
3480     { RID_SetParserState   , Parser_SetupLayer1                 , Kdll_None },
3481 
3482     // Quadrants 0,1 are complete - sample/process quadrants 2,3
3483     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
3484     { RID_IsParserState    , Parser_ProcessLayerDone            , Kdll_None },
3485     { RID_IsQuadrant       , 0                                  , Kdll_None },
3486     { RID_SetKernel        , IDR_VP_Set_Sec_Half_Buf45          , Kdll_None },
3487     { RID_SetQuadrant      , 2                                  , Kdll_None },
3488     { RID_SetParserState   , Parser_SampleLayer1                , Kdll_None },
3489 
3490     // All quadrants are processed - start next layer
3491     { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
3492     { RID_IsParserState    , Parser_ProcessLayerDone            , Kdll_None },
3493     { RID_IsQuadrant       , 2                                  , Kdll_None },
3494     { RID_SetSrc1Sampling  , Sample_None                        , Kdll_None },
3495     { RID_SetSrc1Format    , Format_None                        , Kdll_None },
3496     { RID_SetSrc1Processing, Process_None                       , Kdll_None },
3497     { RID_SetNextLayer     , 0                                  , Kdll_None },
3498     { RID_SetQuadrant      , 0                                  , Kdll_None },
3499     { RID_SetParserState   , Parser_SetupLayer1                 , Kdll_None },
3500 
3501     // Write
3502 
3503     // Colorfill only write rulesets has to be before regular rulesets.
3504     // No support for AYUV output in colorfill only cases.
3505 
3506     // Write ARGB with 64B save kernel
3507     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3508     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
3509     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
3510     { RID_IsLayerFormat    , Format_A8B8G8R8                    , Kdll_Or   },
3511     { RID_IsLayerFormat    , Format_A8R8G8B8                    , Kdll_None },
3512     { RID_Is64BSaveEnabled , true                               , Kdll_None },
3513     { RID_IsLayerNumber    , 0                                  , Kdll_None },
3514     { RID_IsSrc0ColorFill  , ColorFill_True                     , Kdll_None },
3515     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill, Kdll_None },
3516     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16        , Kdll_None },
3517     { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB_64Byte  , Kdll_None },
3518     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
3519     { RID_SetSrc0ColorFill , ColorFill_False                    , Kdll_None },
3520     { RID_SetParserState   , Parser_End                         , Kdll_None },
3521 
3522     // Write ARGB with legacy save kernel
3523     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3524     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
3525     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
3526     { RID_IsLayerFormat    , Format_A8B8G8R8                    , Kdll_Or   },
3527     { RID_IsLayerFormat    , Format_A8R8G8B8                    , Kdll_None },
3528     { RID_IsLayerNumber    , 0                                  , Kdll_None },
3529     { RID_IsSrc0ColorFill  , ColorFill_True                     , Kdll_None },
3530     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill, Kdll_None },
3531     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16        , Kdll_None },
3532     { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB         , Kdll_None },
3533     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
3534     { RID_SetSrc0ColorFill , ColorFill_False                    , Kdll_None },
3535     { RID_SetParserState   , Parser_End                         , Kdll_None },
3536 
3537     // Write RGB with 64B save kernel
3538     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3539     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
3540     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
3541     { RID_IsLayerFormat    , Format_X8B8G8R8                    , Kdll_Or   },
3542     { RID_IsLayerFormat    , Format_X8R8G8B8                    , Kdll_None },
3543     { RID_Is64BSaveEnabled , true                               , Kdll_None },
3544     { RID_IsLayerNumber    , 0                                  , Kdll_None },
3545     { RID_IsSrc0ColorFill  , ColorFill_True                     , Kdll_None },
3546     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill, Kdll_None },
3547     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16        , Kdll_None },
3548     { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB_64Byte  , Kdll_None },
3549     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
3550     { RID_SetSrc0ColorFill , ColorFill_False                    , Kdll_None },
3551     { RID_SetParserState   , Parser_End                         , Kdll_None },
3552 
3553     // Write RGB with legacy save kernel
3554     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3555     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
3556     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
3557     { RID_IsLayerFormat    , Format_X8B8G8R8                    , Kdll_Or   },
3558     { RID_IsLayerFormat    , Format_X8R8G8B8                    , Kdll_None },
3559     { RID_IsLayerNumber    , 0                                  , Kdll_None },
3560     { RID_IsSrc0ColorFill  , ColorFill_True                     , Kdll_None },
3561     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill, Kdll_None },
3562     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16        , Kdll_None },
3563     { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB         , Kdll_None },
3564     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
3565     { RID_SetSrc0ColorFill , ColorFill_False                    , Kdll_None },
3566     { RID_SetParserState   , Parser_End                         , Kdll_None },
3567 
3568     // Write RGB16: input is RGB565 and output is RGB565
3569     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3570     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
3571     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
3572     { RID_IsLayerFormat    , Format_R5G6B5                      , Kdll_None },
3573     { RID_IsLayerNumber    , 0                                  , Kdll_None },
3574     { RID_IsSrc0ColorFill  , ColorFill_True                     , Kdll_None },
3575     { RID_IsDitherNeeded   , false                              , Kdll_None },
3576     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill, Kdll_None },
3577     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16        , Kdll_None },
3578     { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB16       , Kdll_None },
3579     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
3580     { RID_SetSrc0ColorFill , ColorFill_False                    , Kdll_None },
3581     { RID_SetParserState   , Parser_End                         , Kdll_None },
3582 
3583     // Write RGB16: input is not RGB565 and output is RGB565, dithering is needed
3584     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3585     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
3586     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
3587     { RID_IsLayerFormat    , Format_R5G6B5                      , Kdll_None },
3588     { RID_IsLayerNumber    , 0                                  , Kdll_None },
3589     { RID_IsSrc0ColorFill  , ColorFill_True                     , Kdll_None },
3590     { RID_IsDitherNeeded   , true                               , Kdll_None },
3591     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill, Kdll_None },
3592     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16        , Kdll_None },
3593     { RID_SetKernel        , IDR_VP_Save_444Scale16_Dither_RGB16, Kdll_None },
3594     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
3595     { RID_SetSrc0ColorFill , ColorFill_False                    , Kdll_None },
3596     { RID_SetParserState   , Parser_End                         , Kdll_None },
3597 
3598     // Write (R10G10B10A2 | B10G10R10A2) - With ColorFill. Note: R10G10B10A2 | B10G10R10A2 should be in front of Format_RGB32
3599     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3600     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
3601     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
3602     { RID_IsLayerFormat    , Format_R10G10B10A2                 , Kdll_Or   },
3603     { RID_IsLayerFormat    , Format_B10G10R10A2                 , Kdll_None },
3604     { RID_IsLayerNumber    , 0                                  , Kdll_None },
3605     { RID_IsSrc0ColorFill  , ColorFill_True                     , Kdll_None },
3606     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill, Kdll_None },
3607     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16        , Kdll_None },
3608     { RID_SetKernel        , IDR_VP_Save_444Scale16_R10G10B10   , Kdll_None },
3609     { RID_SetSrc0ColorFill , ColorFill_False                    , Kdll_None },
3610     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
3611     { RID_SetParserState   , Parser_End                         , Kdll_None },
3612 
3613     // Write AYUV with legacy save kernel
3614     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
3615     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
3616     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
3617     { RID_IsLayerFormat    , Format_AYUV                         , Kdll_None },
3618     { RID_IsLayerNumber    , 0                                   , Kdll_None },
3619     { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
3620     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None },
3621     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
3622     { RID_SetKernel        , IDR_VP_Save_444Scale16_VUYA         , Kdll_None },
3623     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
3624     { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
3625     { RID_SetParserState   , Parser_End                          , Kdll_None },
3626 
3627     // Write (YUY2 | YUYV | YVYU | UYVY | VYUY)
3628     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
3629     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
3630     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
3631     { RID_IsLayerFormat    , Format_YUY2                         , Kdll_Or   },
3632     { RID_IsLayerFormat    , Format_YUYV                         , Kdll_Or   },
3633     { RID_IsLayerFormat    , Format_YVYU                         , Kdll_Or   },
3634     { RID_IsLayerFormat    , Format_UYVY                         , Kdll_Or   },
3635     { RID_IsLayerFormat    , Format_VYUY                         , Kdll_None },
3636     { RID_IsLayerNumber    , 0                                   , Kdll_None },
3637     { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
3638     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None },
3639     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
3640     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
3641     { RID_SetKernel        , IDR_VP_Save_444Scale16_PA           , Kdll_None },
3642     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
3643     { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
3644     { RID_SetParserState   , Parser_End                          , Kdll_None },
3645 
3646     // Write NV12
3647     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
3648     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
3649     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
3650     { RID_IsLayerFormat    , Format_NV12                         , Kdll_None },
3651     { RID_IsLayerNumber    , 0                                   , Kdll_None },
3652     { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
3653     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None },
3654     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
3655     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
3656     { RID_SetKernel        , IDR_VP_Save_444Scale16_NV12         , Kdll_None },
3657     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
3658     { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
3659     { RID_SetParserState   , Parser_End                          , Kdll_None },
3660 
3661     // Write NV21
3662     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
3663     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
3664     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
3665     { RID_IsLayerFormat    , Format_NV21                         , Kdll_None },
3666     { RID_IsLayerNumber    , 0                                   , Kdll_None },
3667     { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
3668     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None },
3669     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
3670     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
3671     { RID_SetKernel        , IDR_VP_Save_444Scale16_NV21         , Kdll_None },
3672     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
3673     { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
3674     { RID_SetParserState   , Parser_End                          , Kdll_None },
3675 
3676     // Write 400P
3677     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
3678     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
3679     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
3680     { RID_IsLayerFormat    , Format_400P                         , Kdll_None },
3681     { RID_IsLayerNumber    , 0                                   , Kdll_None },
3682     { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
3683     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None },
3684     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
3685     { RID_SetKernel        , IDR_VP_Save_444Scale16_PLY          , Kdll_None },
3686     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
3687     { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
3688     { RID_SetParserState   , Parser_End                          , Kdll_None },
3689 
3690     // Write PL3
3691     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3692     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
3693     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
3694     { RID_IsLayerFormat    , Format_PL3                         , Kdll_None },
3695     { RID_IsLayerNumber    , 0                                  , Kdll_None },
3696     { RID_IsSrc0ColorFill  , ColorFill_True                     , Kdll_None },
3697     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill, Kdll_None },
3698     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16        , Kdll_None },
3699     { RID_SetKernel        , IDR_VP_Save_444Scale16_PL3         , Kdll_None },
3700     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
3701     { RID_SetSrc0ColorFill , ColorFill_False                    , Kdll_None },
3702     { RID_SetParserState   , Parser_End                         , Kdll_None },
3703 
3704     // Write (ARGB | ABGR) - Normal Save with 64B save kernel,
3705     //                       Sample_8x8 not used or already shuffled
3706     //                       Save_ARGB can write out ABGR as well, based on CURBE settings.
3707     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3708     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
3709     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
3710     { RID_IsLayerFormat    , Format_A8R8G8B8                    , Kdll_Or   },
3711     { RID_IsLayerFormat    , Format_A8B8G8R8                    , Kdll_None },
3712     { RID_IsConstOutAlpha  , false                              , Kdll_None },
3713     { RID_Is64BSaveEnabled , true                               , Kdll_None },
3714     { RID_SetKernel        , IDR_VP_Save_444Scale16_ARGB_64Byte , Kdll_None },
3715     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
3716     { RID_SetParserState   , Parser_End                         , Kdll_None },
3717 
3718     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3719     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
3720     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
3721     { RID_IsLayerFormat    , Format_A8R8G8B8                    , Kdll_Or   },
3722     { RID_IsLayerFormat    , Format_A8B8G8R8                    , Kdll_None },
3723     { RID_Is64BSaveEnabled , true                               , Kdll_None },
3724     { RID_IsConstOutAlpha  , true                               , Kdll_None },
3725     { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB_64Byte  , Kdll_None },
3726     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
3727     { RID_SetParserState   , Parser_End                         , Kdll_None },
3728 
3729     // Write (ARGB | ABGR) - Normal Save with legacy save kernel,
3730     //                       Sample_8x8 not used or already shuffled
3731     //                       Save_ARGB can write out ABGR as well, based on CURBE settings.
3732     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3733     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
3734     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
3735     { RID_IsLayerFormat    , Format_A8R8G8B8                    , Kdll_Or   },
3736     { RID_IsLayerFormat    , Format_A8B8G8R8                    , Kdll_None },
3737     { RID_IsConstOutAlpha  , false                              , Kdll_None },
3738     { RID_SetKernel        , IDR_VP_Save_444Scale16_ARGB        , Kdll_None },
3739     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
3740     { RID_SetParserState   , Parser_End                         , Kdll_None },
3741 
3742     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3743     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
3744     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
3745     { RID_IsLayerFormat    , Format_A8R8G8B8                    , Kdll_Or   },
3746     { RID_IsLayerFormat    , Format_A8B8G8R8                    , Kdll_None },
3747     { RID_IsConstOutAlpha  , true                               , Kdll_None },
3748     { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB         , Kdll_None },
3749     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
3750     { RID_SetParserState   , Parser_End                         , Kdll_None },
3751 
3752     // Write (RGB | BGR) - Normal Save with 64B save kernel,
3753     //                     Sample_8x8 not used or already shuffled
3754     //                     Save_RGB can write out BGR as well, based on CURBE settings.
3755     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3756     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
3757     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
3758     { RID_IsLayerFormat    , Format_X8R8G8B8                    , Kdll_Or   },
3759     { RID_IsLayerFormat    , Format_X8B8G8R8                    , Kdll_None },
3760     { RID_Is64BSaveEnabled , true                               , Kdll_None },
3761     { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB_64Byte  , Kdll_None },
3762     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
3763     { RID_SetParserState   , Parser_End                         , Kdll_None },
3764 
3765     // Write (RGB | BGR) - Normal Save with legacy save kernel,
3766     //                     Sample_8x8 not used or already shuffled
3767     //                     Save_RGB can write out BGR as well, based on CURBE settings.
3768     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3769     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
3770     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
3771     { RID_IsLayerFormat    , Format_X8R8G8B8                    , Kdll_Or   },
3772     { RID_IsLayerFormat    , Format_X8B8G8R8                    , Kdll_None },
3773     { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB         , Kdll_None },
3774     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
3775     { RID_SetParserState   , Parser_End                         , Kdll_None },
3776 
3777     // Write RGB16 - Normal Save, Sample_8x8 not used or already shuffled
3778     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3779     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
3780     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
3781     { RID_IsLayerFormat    , Format_R5G6B5                      , Kdll_None },
3782     { RID_IsDitherNeeded   , false                              , Kdll_None },
3783     { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB16       , Kdll_None },
3784     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
3785     { RID_SetParserState   , Parser_End                         , Kdll_None },
3786 
3787     // Write RGB16 - Normal Save, Sample_8x8 not used or already shuffled
3788     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3789     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
3790     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
3791     { RID_IsLayerFormat    , Format_R5G6B5                      , Kdll_None },
3792     { RID_IsDitherNeeded   , true                               , Kdll_None },
3793     { RID_SetKernel        , IDR_VP_Save_444Scale16_Dither_RGB16, Kdll_None },
3794     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
3795     { RID_SetParserState   , Parser_End                         , Kdll_None },
3796 
3797     // Write (R10G10B10A2 | B10G10R10A2) - Normal Save
3798     // Sample_8x8 not used or already shuffled
3799     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3800     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
3801     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
3802     { RID_IsLayerFormat    , Format_R10G10B10A2                 , Kdll_Or   },
3803     { RID_IsLayerFormat    , Format_B10G10R10A2                 , Kdll_None },
3804     { RID_IsConstOutAlpha  , false                              , Kdll_None },
3805     { RID_SetKernel        , IDR_VP_Save_444Scale16_R10G10B10A2 , Kdll_None },
3806     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
3807     { RID_SetParserState   , Parser_End                         , Kdll_None },
3808 
3809     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3810     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
3811     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
3812     { RID_IsLayerFormat    , Format_R10G10B10A2                 , Kdll_Or   },
3813     { RID_IsLayerFormat    , Format_B10G10R10A2                 , Kdll_None },
3814     { RID_IsConstOutAlpha  , true                               , Kdll_None },
3815     { RID_SetKernel        , IDR_VP_Save_444Scale16_R10G10B10   , Kdll_None },
3816     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
3817     { RID_SetParserState   , Parser_End                         , Kdll_None },
3818 
3819     // Write AYUV - Normal Save, Sample_8x8 not used or already shuffled
3820     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3821     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
3822     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
3823     { RID_IsLayerFormat    , Format_AYUV                        , Kdll_None },
3824     { RID_IsConstOutAlpha  , false                              , Kdll_None },
3825     { RID_SetKernel        , IDR_VP_Save_444Scale16_SrcVUYA     , Kdll_None },
3826     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
3827     { RID_SetParserState   , Parser_End                         , Kdll_None },
3828 
3829     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3830     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
3831     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
3832     { RID_IsLayerFormat    , Format_AYUV                        , Kdll_None },
3833     { RID_IsConstOutAlpha  , true                               , Kdll_None },
3834     { RID_SetKernel        , IDR_VP_Save_444Scale16_VUYA        , Kdll_None },
3835     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
3836     { RID_SetParserState   , Parser_End                         , Kdll_None },
3837 
3838     // Write (YUY2 | YUYV | YVYU | UYVY | VYUY) - Normal Save, Sample_8x8 not used or already shuffled
3839     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
3840     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
3841     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
3842     { RID_IsLayerFormat    , Format_YUY2                         , Kdll_Or   },
3843     { RID_IsLayerFormat    , Format_YUYV                         , Kdll_Or   },
3844     { RID_IsLayerFormat    , Format_YVYU                         , Kdll_Or   },
3845     { RID_IsLayerFormat    , Format_UYVY                         , Kdll_Or   },
3846     { RID_IsLayerFormat    , Format_VYUY                         , Kdll_None },
3847     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
3848     { RID_SetKernel        , IDR_VP_Save_444Scale16_PA           , Kdll_None },
3849     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
3850     { RID_SetParserState   , Parser_End                          , Kdll_None },
3851 
3852     // Write NV12 - Normal Save, Sample_8x8 not used or already shuffled
3853     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
3854     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
3855     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
3856     { RID_IsLayerFormat    , Format_NV12                         , Kdll_None },
3857     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
3858     { RID_SetKernel        , IDR_VP_Save_444Scale16_NV12         , Kdll_None },
3859     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
3860     { RID_SetParserState   , Parser_End                          , Kdll_None },
3861 
3862     // Write NV21 - Normal Save, Sample_8x8 not used or already shuffled
3863     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
3864     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
3865     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
3866     { RID_IsLayerFormat    , Format_NV21                         , Kdll_None },
3867     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
3868     { RID_SetKernel        , IDR_VP_Save_444Scale16_NV21         , Kdll_None },
3869     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
3870     { RID_SetParserState   , Parser_End                          , Kdll_None },
3871 
3872     // Write 400P - Normal Save, Sample_8x8 not used or already shuffled
3873     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
3874     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
3875     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
3876     { RID_IsLayerFormat    , Format_400P                         , Kdll_None },
3877     { RID_SetKernel        , IDR_VP_Save_444Scale16_PLY          , Kdll_None },
3878     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
3879     { RID_SetParserState   , Parser_End                          , Kdll_None },
3880 
3881     // Write PL3 - Normal Save, Sample_8x8 not used or already shuffled
3882     { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
3883     { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
3884     { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
3885     { RID_IsLayerFormat    , Format_PL3                         , Kdll_None },
3886     { RID_SetKernel        , IDR_VP_Save_444Scale16_PL3         , Kdll_None },
3887     { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
3888     { RID_SetParserState   , Parser_End                         , Kdll_None },
3889 
3890     // Write P010 - Color fill, Sample_8x8 not used or already shuffled
3891     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
3892     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
3893     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
3894     { RID_IsLayerFormat    , Format_P010                         , Kdll_None },
3895     { RID_IsLayerNumber    , 0                                   , Kdll_None },
3896     { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
3897     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None },
3898     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
3899     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
3900     { RID_SetKernel        , IDR_VP_Save_444Scale16_P010         , Kdll_None },
3901     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
3902     { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
3903     { RID_SetParserState   , Parser_End                          , Kdll_None },
3904 
3905     // Write P010 - Normal Save, Sample_8x8 not used or already shuffled
3906     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
3907     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
3908     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
3909     { RID_IsLayerFormat    , Format_P010                         , Kdll_None },
3910     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
3911     { RID_SetKernel        , IDR_VP_Save_444Scale16_P010         , Kdll_None },
3912     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
3913     { RID_SetParserState   , Parser_End                          , Kdll_None },
3914 
3915     // Write Y410 - Color fill, Sample_8x8 not used or already shuffled
3916     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
3917     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
3918     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
3919     { RID_IsLayerFormat    , Format_Y410                         , Kdll_None },
3920     { RID_IsLayerNumber    , 0                                   , Kdll_None },
3921     { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
3922     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None },
3923     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
3924     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
3925     { RID_SetKernel        , IDR_VP_Save_444Scale16_Y410         , Kdll_None },
3926     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
3927     { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
3928     { RID_SetParserState   , Parser_End                          , Kdll_None },
3929 
3930     // Write Y410 - Normal Save, Sample_8x8 not used or already shuffled
3931     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
3932     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
3933     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
3934     { RID_IsLayerFormat    , Format_Y410                         , Kdll_None },
3935     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
3936     { RID_SetKernel        , IDR_VP_Save_444Scale16_Y410         , Kdll_None },
3937     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
3938     { RID_SetParserState   , Parser_End                          , Kdll_None },
3939 
3940     // Write Y210 - Color fill, Sample_8x8 not used or already shuffled
3941     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
3942     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
3943     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
3944     { RID_IsLayerFormat    , Format_Y210                         , Kdll_None },
3945     { RID_IsLayerNumber    , 0                                   , Kdll_None },
3946     { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
3947     { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None },
3948     { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
3949     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
3950     { RID_SetKernel        , IDR_VP_Save_444Scale16_Y210         , Kdll_None },
3951     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
3952     { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
3953     { RID_SetParserState   , Parser_End                          , Kdll_None },
3954 
3955     // Write Y210 - Normal Save, Sample_8x8 not used or already shuffled
3956     { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
3957     { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
3958     { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
3959     { RID_IsLayerFormat    , Format_Y210                         , Kdll_None },
3960     { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
3961     { RID_SetKernel        , IDR_VP_Save_444Scale16_Y210         , Kdll_None },
3962     { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
3963     { RID_SetParserState   , Parser_End                          , Kdll_None },
3964 
3965     // Last entry
3966 
3967     { RID_Op_EOF           , 0                                  , Kdll_None }
3968 };
3969