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