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