1 /* 2 * Copyright (c) 2009-2017, 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_g8.c 24 //! \brief Fast Compositing Kernel DLL rules for gen8 25 //! 26 #include "hal_kerneldll.h" // Rule definitions 27 #include "vpkrnheader.h" // Kernel IDs 28 29 extern const Kdll_RuleEntry g_KdllRuleTable_g8[] = 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_32x32_Color , 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_SetSrc0Processing, Process_Source , Kdll_None }, 144 { RID_SetNextLayer , 0 , Kdll_None }, 145 { RID_SetParserState , Parser_SetupLayer1 , Kdll_None }, 146 147 // Setup Parameters for Layer 1 148 149 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 150 { RID_IsParserState , Parser_SetParamsLayer1 , Kdll_None }, 151 { RID_SetSrc1Format , Format_Source , Kdll_None }, 152 { RID_SetSrc1Coeff , CoeffID_Source , Kdll_None }, 153 { RID_SetSrc1Sampling , Sample_Source , Kdll_None }, 154 { RID_SetSrc1Rotation , Rotate_Source , Kdll_None }, 155 { RID_SetSrc1LumaKey , LumaKey_Source , Kdll_None }, 156 { RID_SetSrc1Processing, Process_Source , Kdll_None }, 157 { RID_SetParserState , Parser_SampleLayer1 , Kdll_None }, 158 159 // Setup Parameters for Render Target 160 161 //If only RT is present, it's colorfill only case. Go to write directly. 162 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 163 { RID_IsParserState , Parser_SetParamsTarget , Kdll_None }, 164 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 165 { RID_IsLayerNumber , 0 , Kdll_None }, 166 { RID_SetSrc0ColorFill , ColorFill_Source , Kdll_None }, 167 { RID_SetSrc0Format , Format_Source , Kdll_None }, 168 { RID_SetParserState , Parser_WriteOutput , Kdll_None }, 169 170 // If CSC0 is done before Mix, then jump to SetupCSC1 171 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 172 { RID_IsParserState , Parser_SetParamsTarget , Kdll_None }, 173 { RID_IsCSCBeforeMix , true , Kdll_None }, 174 { RID_SetTargetCspace , CSpace_Source , Kdll_None }, 175 { RID_SetParserState , Parser_SetupCSC1 , Kdll_None }, 176 177 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 178 { RID_IsParserState , Parser_SetParamsTarget , Kdll_None }, 179 { RID_SetSrc0Format , Format_Source , Kdll_None }, 180 { RID_SetSrc0Coeff , CoeffID_Source , Kdll_None }, 181 { RID_SetTargetCspace , CSpace_Source , Kdll_None }, 182 { RID_SetParserState , Parser_SetupCSC0 , Kdll_None }, 183 184 // Sample Layer 0 185 186 // Sample (P010 | P016) -> Src0 187 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 188 { RID_IsParserState , Parser_SampleLayer0 , Kdll_None }, 189 { RID_IsSrc0Format , Format_P010 , Kdll_Or }, 190 { RID_IsSrc0Format , Format_P016 , Kdll_None }, 191 { RID_IsSrc0Sampling , Sample_Scaling , Kdll_None }, 192 { RID_SetKernel , IDR_VP_PL2_444DScale16_Buf_0 , Kdll_None }, 193 { RID_SetKernel , IDR_VP_PL2_444DScale16_Buf_1 , Kdll_None }, 194 { RID_SetKernel , IDR_VP_PL2_444DScale16_Buf_2 , Kdll_None }, 195 { RID_SetKernel , IDR_VP_PL2_444DScale16_Buf_3 , Kdll_None }, 196 { RID_SetParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 197 198 // Sample_Unorm progressive scaling 199 // Sample (RGB | AYUV | Packed YUV | NV12 | 400P) -> Src0 200 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 201 { RID_IsParserState , Parser_SampleLayer0 , Kdll_None }, 202 { RID_IsSrc0Format , Format_RGB , Kdll_Or }, 203 { RID_IsSrc0Format , Format_AYUV , Kdll_Or }, 204 { RID_IsSrc0Format , Format_PA , Kdll_Or }, 205 { RID_IsSrc0Format , Format_PL2 , Kdll_Or }, 206 { RID_IsSrc0Format , Format_400P , Kdll_None }, 207 { RID_IsSrc0Sampling , Sample_Scaling , Kdll_None }, 208 { RID_SetKernel , IDR_VP_PA_444Scale16_Buf_0 , Kdll_None }, 209 { RID_SetKernel , IDR_VP_PA_444Scale16_Buf_1 , Kdll_None }, 210 { RID_SetKernel , IDR_VP_PA_444Scale16_Buf_2 , Kdll_None }, 211 { RID_SetKernel , IDR_VP_PA_444Scale16_Buf_3 , Kdll_None }, 212 { RID_SetParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 213 214 // Sample NV12 (width or height is not a multiple of 4) -> Src0 215 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 216 { RID_IsParserState , Parser_SampleLayer0 , Kdll_None }, 217 { RID_IsSrc0Format , Format_PL2_UnAligned , Kdll_None }, 218 { RID_IsSrc0Sampling , Sample_Scaling , Kdll_None }, 219 { RID_SetKernel , IDR_VP_PL2_444Scale16_Buf_0 , Kdll_None }, 220 { RID_SetKernel , IDR_VP_PL2_444Scale16_Buf_1 , Kdll_None }, 221 { RID_SetKernel , IDR_VP_PL2_444Scale16_Buf_2 , Kdll_None }, 222 { RID_SetKernel , IDR_VP_PL2_444Scale16_Buf_3 , Kdll_None }, 223 { RID_SetParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 224 225 // Sample (PL3 | PL3_RGB) -> Src0 226 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 227 { RID_IsParserState , Parser_SampleLayer0 , Kdll_None }, 228 { RID_IsSrc0Format , Format_PL3 , Kdll_Or }, 229 { RID_IsSrc0Format , Format_PL3_RGB , Kdll_None }, 230 { RID_IsSrc0Sampling , Sample_Scaling , Kdll_None }, 231 { RID_SetKernel , IDR_VP_PL3_444Scale16_Buf_0 , Kdll_None }, 232 { RID_SetKernel , IDR_VP_PL3_444Scale16_Buf_1 , Kdll_None }, 233 { RID_SetKernel , IDR_VP_PL3_444Scale16_Buf_2 , Kdll_None }, 234 { RID_SetKernel , IDR_VP_PL3_444Scale16_Buf_3 , Kdll_None }, 235 { RID_SetParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 236 237 // Sample progressive scaling 238 // Sample 0.34x (P010 | P016) -> Src0 239 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 240 { RID_IsParserState , Parser_SampleLayer0 , Kdll_None }, 241 { RID_IsSrc0Format , Format_P010 , Kdll_Or }, 242 { RID_IsSrc0Format , Format_P016 , Kdll_None }, 243 { RID_IsSrc0Sampling , Sample_Scaling_034x , Kdll_None }, 244 { RID_SetKernel , IDR_VP_PL2_444DScale16_Buf_0 , Kdll_None }, 245 { RID_SetKernel , IDR_VP_PL2_444DScale16_Buf_1 , Kdll_None }, 246 { RID_SetKernel , IDR_VP_PL2_444DScale16_Buf_2 , Kdll_None }, 247 { RID_SetKernel , IDR_VP_PL2_444DScale16_Buf_3 , Kdll_None }, 248 { RID_SetParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 249 250 // Sample 0.34x (RGB | AYUV | Packed YUV | NV12 | 400P) -> Src0 251 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 252 { RID_IsParserState , Parser_SampleLayer0 , Kdll_None }, 253 { RID_IsSrc0Format , Format_RGB , Kdll_Or }, 254 { RID_IsSrc0Format , Format_AYUV , Kdll_Or }, 255 { RID_IsSrc0Format , Format_PA , Kdll_Or }, 256 { RID_IsSrc0Format , Format_PL2 , Kdll_Or }, 257 { RID_IsSrc0Format , Format_400P , Kdll_None }, 258 { RID_IsSrc0Sampling , Sample_Scaling_034x , Kdll_None }, 259 { RID_SetKernel , IDR_VP_PA_444DScale16_Buf_0 , Kdll_None }, 260 { RID_SetKernel , IDR_VP_PA_444DScale16_Buf_1 , Kdll_None }, 261 { RID_SetKernel , IDR_VP_PA_444DScale16_Buf_2 , Kdll_None }, 262 { RID_SetKernel , IDR_VP_PA_444DScale16_Buf_3 , Kdll_None }, 263 { RID_SetParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 264 265 // Sample 0.34x PL2(width or height is not a multiple of 4) -> Src0 266 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 267 { RID_IsParserState , Parser_SampleLayer0 , Kdll_None }, 268 { RID_IsSrc0Format , Format_PL2_UnAligned , Kdll_None }, 269 { RID_IsSrc0Sampling , Sample_Scaling_034x , Kdll_None }, 270 { RID_SetKernel , IDR_VP_PL2_444DScale16_Buf_0 , Kdll_None }, 271 { RID_SetKernel , IDR_VP_PL2_444DScale16_Buf_1 , Kdll_None }, 272 { RID_SetKernel , IDR_VP_PL2_444DScale16_Buf_2 , Kdll_None }, 273 { RID_SetKernel , IDR_VP_PL2_444DScale16_Buf_3 , Kdll_None }, 274 { RID_SetParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 275 276 // Sample 0.34x (PL3 | PL3_RGB) -> Src0 277 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 278 { RID_IsParserState , Parser_SampleLayer0 , Kdll_None }, 279 { RID_IsSrc0Format , Format_PL3 , Kdll_Or }, 280 { RID_IsSrc0Format , Format_PL3_RGB , Kdll_None }, 281 { RID_IsSrc0Sampling , Sample_Scaling_034x , Kdll_None }, 282 { RID_SetKernel , IDR_VP_PL3_444DScale16_Buf_0 , Kdll_None }, 283 { RID_SetKernel , IDR_VP_PL3_444DScale16_Buf_1 , Kdll_None }, 284 { RID_SetKernel , IDR_VP_PL3_444DScale16_Buf_2 , Kdll_None }, 285 { RID_SetKernel , IDR_VP_PL3_444DScale16_Buf_3 , Kdll_None }, 286 { RID_SetParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 287 288 // Sample_8x8 progressive scaling 289 // AVS Sample (RGB | AYUV | Packed YUV | NV12 | 400P) -> Src0 290 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 291 { RID_IsParserState , Parser_SampleLayer0 , Kdll_None }, 292 { RID_IsSrc0Format , Format_RGB , Kdll_Or }, 293 { RID_IsSrc0Format , Format_AYUV , Kdll_Or }, 294 { RID_IsSrc0Format , Format_PA , Kdll_Or }, 295 { RID_IsSrc0Format , Format_PL2 , Kdll_Or }, 296 { RID_IsSrc0Format , Format_400P , Kdll_None }, 297 { RID_IsSrc0Sampling , Sample_Scaling_AVS , Kdll_None }, 298 { RID_SetKernel , IDR_VP_PA_444AVS16_Buf_0 , Kdll_None }, 299 { RID_SetKernel , IDR_VP_PA_444AVS16_Buf_1 , Kdll_None }, 300 { RID_SetKernel , IDR_VP_PA_444AVS16_Buf_2 , Kdll_None }, 301 { RID_SetKernel , IDR_VP_PA_444AVS16_Buf_3 , Kdll_None }, 302 { RID_SetParserState , Parser_ShuffleLayer0 , Kdll_None }, 303 304 // AVS Sample PL2(width or height is not a multiple of 4) -> Src0 305 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 306 { RID_IsParserState , Parser_SampleLayer0 , Kdll_None }, 307 { RID_IsSrc0Format , Format_PL2_UnAligned , Kdll_None }, 308 { RID_IsSrc0Sampling , Sample_Scaling_AVS , Kdll_None }, 309 { RID_SetKernel , IDR_VP_PL2_444AVS16_Buf_0 , Kdll_None }, 310 { RID_SetKernel , IDR_VP_PL2_444AVS16_Buf_1 , Kdll_None }, 311 { RID_SetKernel , IDR_VP_PL2_444AVS16_Buf_2 , Kdll_None }, 312 { RID_SetKernel , IDR_VP_PL2_444AVS16_Buf_3 , Kdll_None }, 313 { RID_SetParserState , Parser_ShuffleLayer0 , Kdll_None }, 314 315 // AVS Sample (PL3 | PL3_RGB) -> Src0 316 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 317 { RID_IsParserState , Parser_SampleLayer0 , Kdll_None }, 318 { RID_IsSrc0Format , Format_PL3 , Kdll_Or }, 319 { RID_IsSrc0Format , Format_PL3_RGB , Kdll_None }, 320 { RID_IsSrc0Sampling , Sample_Scaling_AVS , Kdll_None }, 321 { RID_SetKernel , IDR_VP_PL3_444AVS16_Buf_0 , Kdll_None }, 322 { RID_SetKernel , IDR_VP_PL3_444AVS16_Buf_1 , Kdll_None }, 323 { RID_SetKernel , IDR_VP_PL3_444AVS16_Buf_2 , Kdll_None }, 324 { RID_SetKernel , IDR_VP_PL3_444AVS16_Buf_3 , Kdll_None }, 325 { RID_SetParserState , Parser_ShuffleLayer0 , Kdll_None }, 326 327 // AVS Interlace Scaling 328 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 329 { RID_IsParserState , Parser_SampleLayer0 , Kdll_None }, 330 { RID_IsSrc0Format , Format_AYUV , Kdll_Or }, 331 { RID_IsSrc0Format , Format_NV12 , Kdll_Or }, 332 { RID_IsSrc0Format , Format_PA , Kdll_Or }, 333 { RID_IsSrc0Format , Format_RGB , Kdll_None }, 334 { RID_IsSrc0Sampling , Sample_iScaling_AVS , Kdll_None }, 335 { RID_SetKernel , IDR_VP_PA_444iAVS16_Buf_0 , Kdll_None }, 336 { RID_SetKernel , IDR_VP_PA_444iAVS16_Buf_1 , Kdll_None }, 337 { RID_SetKernel , IDR_VP_PA_444iAVS16_Buf_2 , Kdll_None }, 338 { RID_SetKernel , IDR_VP_PA_444iAVS16_Buf_3 , Kdll_None }, 339 { RID_SetKernel , IDR_VP_Shuffle_444AVS16_Buf_0 , Kdll_None }, 340 { RID_SetKernel , IDR_VP_Shuffle_444AVS16_Buf_1 , Kdll_None }, 341 { RID_SetKernel , IDR_VP_Shuffle_444AVS16_Buf_2 , Kdll_None }, 342 { RID_SetKernel , IDR_VP_Shuffle_444AVS16_Buf_3 , Kdll_None }, 343 { RID_SetParserState , Parser_SampleLayer0Mix , Kdll_None }, 344 345 // AVS Interlace Scaling PL2 -> Src0 346 // PL2_444iAVS is not supported, use PL2_444iScale kernel instead 347 // May have quality difference than interlaced AVS scaling 348 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 349 { RID_IsParserState , Parser_SampleLayer0 , Kdll_None }, 350 { RID_IsSrc0Format , Format_PL2 , Kdll_Or }, 351 { RID_IsSrc0Format , Format_PL2_UnAligned , Kdll_None }, 352 { RID_IsSrc0Sampling , Sample_iScaling_AVS , Kdll_None }, 353 { RID_SetKernel , IDR_VP_PL2_444iScale16_Buf_0 , Kdll_None }, 354 { RID_SetKernel , IDR_VP_PL2_444iScale16_Buf_1 , Kdll_None }, 355 { RID_SetKernel , IDR_VP_PL2_444iScale16_Buf_2 , Kdll_None }, 356 { RID_SetKernel , IDR_VP_PL2_444iScale16_Buf_3 , Kdll_None }, 357 { RID_SetParserState , Parser_SampleLayer0Mix , Kdll_None }, 358 359 // Sample_Unorm interlaced scaling 360 // Interlaced Sample RGB -> Src0 361 // jump to sampleLayer0SelectCSC to decide if CSC needed before Mix 362 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 363 { RID_IsParserState , Parser_SampleLayer0 , Kdll_None }, 364 { RID_IsSrc0Format , Format_RGB , Kdll_None }, 365 { RID_IsSrc0Sampling , Sample_iScaling , Kdll_None }, 366 { RID_SetKernel , IDR_VP_PA_444iScale16_Buf_0 , Kdll_None }, 367 { RID_SetKernel , IDR_VP_PA_444iScale16_Buf_1 , Kdll_None }, 368 { RID_SetKernel , IDR_VP_PA_444iScale16_Buf_2 , Kdll_None }, 369 { RID_SetKernel , IDR_VP_PA_444iScale16_Buf_3 , Kdll_None }, 370 { RID_SetParserState , Parser_SampleLayer0SelectCSC , Kdll_None }, 371 372 // Sample (AYUV | Packed YUV | NV12 | 400P) -> Src0 373 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 374 { RID_IsParserState , Parser_SampleLayer0 , Kdll_None }, 375 { RID_IsSrc0Format , Format_AYUV , Kdll_Or }, 376 { RID_IsSrc0Format , Format_PA , Kdll_Or }, 377 { RID_IsSrc0Format , Format_PL2 , Kdll_Or }, 378 { RID_IsSrc0Format , Format_400P , Kdll_None }, 379 { RID_IsSrc0Sampling , Sample_iScaling , Kdll_None }, 380 { RID_SetKernel , IDR_VP_PA_444iScale16_Buf_0 , Kdll_None }, 381 { RID_SetKernel , IDR_VP_PA_444iScale16_Buf_1 , Kdll_None }, 382 { RID_SetKernel , IDR_VP_PA_444iScale16_Buf_2 , Kdll_None }, 383 { RID_SetKernel , IDR_VP_PA_444iScale16_Buf_3 , Kdll_None }, 384 { RID_SetParserState , Parser_SampleLayer0Mix , Kdll_None }, 385 386 // Sample PL2(width or height is not a multiple of 4) -> Src0 387 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 388 { RID_IsParserState , Parser_SampleLayer0 , Kdll_None }, 389 { RID_IsSrc0Format , Format_PL2_UnAligned , Kdll_None }, 390 { RID_IsSrc0Sampling , Sample_iScaling , Kdll_None }, 391 { RID_SetKernel , IDR_VP_PL2_444iScale16_Buf_0 , Kdll_None }, 392 { RID_SetKernel , IDR_VP_PL2_444iScale16_Buf_1 , Kdll_None }, 393 { RID_SetKernel , IDR_VP_PL2_444iScale16_Buf_2 , Kdll_None }, 394 { RID_SetKernel , IDR_VP_PL2_444iScale16_Buf_3 , Kdll_None }, 395 { RID_SetParserState , Parser_SampleLayer0Mix , Kdll_None }, 396 397 // Sample PL3 -> Src0 398 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 399 { RID_IsParserState , Parser_SampleLayer0 , Kdll_None }, 400 { RID_IsSrc0Format , Format_PL3 , Kdll_None }, 401 { RID_IsSrc0Sampling , Sample_iScaling , Kdll_None }, 402 { RID_SetKernel , IDR_VP_PL3_444iScale16_Buf_0 , Kdll_None }, 403 { RID_SetKernel , IDR_VP_PL3_444iScale16_Buf_1 , Kdll_None }, 404 { RID_SetKernel , IDR_VP_PL3_444iScale16_Buf_2 , Kdll_None }, 405 { RID_SetKernel , IDR_VP_PL3_444iScale16_Buf_3 , Kdll_None }, 406 { RID_SetParserState , Parser_SampleLayer0Mix , Kdll_None }, 407 408 // Sample PL3_RGB -> Src0 409 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 410 { RID_IsParserState , Parser_SampleLayer0 , Kdll_None }, 411 { RID_IsSrc0Format , Format_PL3_RGB , Kdll_None }, 412 { RID_IsSrc0Sampling , Sample_iScaling , Kdll_None }, 413 { RID_SetKernel , IDR_VP_PL3_444iScale16_Buf_0 , Kdll_None }, 414 { RID_SetKernel , IDR_VP_PL3_444iScale16_Buf_1 , Kdll_None }, 415 { RID_SetKernel , IDR_VP_PL3_444iScale16_Buf_2 , Kdll_None }, 416 { RID_SetKernel , IDR_VP_PL3_444iScale16_Buf_3 , Kdll_None }, 417 { RID_SetParserState , Parser_SampleLayer0SelectCSC , Kdll_None }, 418 419 // Sample interlaced scaling 420 // Sample 0.34x RGB -> Src0 421 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 422 { RID_IsParserState , Parser_SampleLayer0 , Kdll_None }, 423 { RID_IsSrc0Format , Format_RGB , Kdll_None }, 424 { RID_IsSrc0Sampling , Sample_iScaling_034x , Kdll_None }, 425 { RID_SetKernel , IDR_VP_PA_444iDScale16_Buf_0 , Kdll_None }, 426 { RID_SetKernel , IDR_VP_PA_444iDScale16_Buf_1 , Kdll_None }, 427 { RID_SetKernel , IDR_VP_PA_444iDScale16_Buf_2 , Kdll_None }, 428 { RID_SetKernel , IDR_VP_PA_444iDScale16_Buf_3 , Kdll_None }, 429 { RID_SetParserState , Parser_SampleLayer0Mix , Kdll_None }, 430 431 // Sample 0.34x (AYUV | Packed YUV | NV12 | 400P) -> Src0 432 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 433 { RID_IsParserState , Parser_SampleLayer0 , Kdll_None }, 434 { RID_IsSrc0Format , Format_AYUV , Kdll_Or }, 435 { RID_IsSrc0Format , Format_PA , Kdll_Or }, 436 { RID_IsSrc0Format , Format_PL2 , Kdll_Or }, 437 { RID_IsSrc0Format , Format_400P , Kdll_None }, 438 { RID_IsSrc0Sampling , Sample_iScaling_034x , Kdll_None }, 439 { RID_SetKernel , IDR_VP_PA_444iDScale16_Buf_0 , Kdll_None }, 440 { RID_SetKernel , IDR_VP_PA_444iDScale16_Buf_1 , Kdll_None }, 441 { RID_SetKernel , IDR_VP_PA_444iDScale16_Buf_2 , Kdll_None }, 442 { RID_SetKernel , IDR_VP_PA_444iDScale16_Buf_3 , Kdll_None }, 443 { RID_SetParserState , Parser_SampleLayer0Mix , Kdll_None }, 444 445 // Sample 0.34x PL2(width or height is not a multiple of 4) -> Src0 446 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 447 { RID_IsParserState , Parser_SampleLayer0 , Kdll_None }, 448 { RID_IsSrc0Format , Format_PL2_UnAligned , Kdll_None }, 449 { RID_IsSrc0Sampling , Sample_iScaling_034x , Kdll_None }, 450 { RID_SetKernel , IDR_VP_PL2_444iDScale16_Buf_0 , Kdll_None }, 451 { RID_SetKernel , IDR_VP_PL2_444iDScale16_Buf_1 , Kdll_None }, 452 { RID_SetKernel , IDR_VP_PL2_444iDScale16_Buf_2 , Kdll_None }, 453 { RID_SetKernel , IDR_VP_PL2_444iDScale16_Buf_3 , Kdll_None }, 454 { RID_SetParserState , Parser_SampleLayer0Mix , Kdll_None }, 455 456 // Sample 0.34x PL3 -> Src0 457 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 458 { RID_IsParserState , Parser_SampleLayer0 , Kdll_None }, 459 { RID_IsSrc0Format , Format_PL3 , Kdll_None }, 460 { RID_IsSrc0Sampling , Sample_iScaling_034x , Kdll_None }, 461 { RID_SetKernel , IDR_VP_PL3_444iDScale16_Buf_0 , Kdll_None }, 462 { RID_SetKernel , IDR_VP_PL3_444iDScale16_Buf_1 , Kdll_None }, 463 { RID_SetKernel , IDR_VP_PL3_444iDScale16_Buf_2 , Kdll_None }, 464 { RID_SetKernel , IDR_VP_PL3_444iDScale16_Buf_3 , Kdll_None }, 465 { RID_SetParserState , Parser_SampleLayer0Mix , Kdll_None }, 466 467 // Sample 0.34x PL3_RGB -> Src0 468 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 469 { RID_IsParserState , Parser_SampleLayer0 , Kdll_None }, 470 { RID_IsSrc0Format , Format_PL3_RGB , Kdll_None }, 471 { RID_IsSrc0Sampling , Sample_iScaling_034x , Kdll_None }, 472 { RID_SetKernel , IDR_VP_PL3_444iDScale16_Buf_0 , Kdll_None }, 473 { RID_SetKernel , IDR_VP_PL3_444iDScale16_Buf_1 , Kdll_None }, 474 { RID_SetKernel , IDR_VP_PL3_444iDScale16_Buf_2 , Kdll_None }, 475 { RID_SetKernel , IDR_VP_PL3_444iDScale16_Buf_3 , Kdll_None }, 476 { RID_SetParserState , Parser_SampleLayer0SelectCSC , Kdll_None }, 477 478 // Select CSC for layer 0 Mix only if Render Target format is NV12 479 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 480 { RID_IsParserState , Parser_SampleLayer0SelectCSC , Kdll_None }, 481 { RID_IsTargetFormat , Format_NV12 , Kdll_None }, 482 { RID_SetNextLayer , 2 , Kdll_None }, // increase layer number to target layer 483 { RID_SetCSCBeforeMix , true , Kdll_None }, 484 { RID_SetSrc0Coeff , CoeffID_Source , Kdll_None }, 485 { RID_SetParserState , Parser_SetupCSC0 , Kdll_None }, 486 487 // If Render Target is not NV12, simply call Intermix 488 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 489 { RID_IsParserState , Parser_SampleLayer0SelectCSC , Kdll_None }, 490 { RID_SetParserState , Parser_SampleLayer0Mix , Kdll_None }, 491 492 // Intermix the layer 0 493 494 // Interlaced scaling, intermix the top and bottom fields 495 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 496 { RID_IsParserState , Parser_SampleLayer0Mix , Kdll_None }, 497 { RID_IsTargetFormat , Format_NV12 , Kdll_None }, 498 { RID_IsSrc0Sampling , Sample_iScaling , Kdll_Or }, 499 { RID_IsSrc0Sampling , Sample_iScaling_AVS , Kdll_Or }, 500 { RID_IsSrc0Sampling , Sample_iScaling_034x , Kdll_None }, 501 { RID_SetKernel , IDR_VP_Interlace_420_16_Buf_0 , Kdll_None }, 502 { RID_SetKernel , IDR_VP_Interlace_420_16_Buf_1 , Kdll_None }, 503 { RID_SetKernel , IDR_VP_Interlace_420_16_Buf_2 , Kdll_None }, 504 { RID_SetKernel , IDR_VP_Interlace_420_16_Buf_3 , Kdll_None }, 505 { RID_SetParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 506 507 // Interlaced scaling, intermix the top and bottom fields 508 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 509 { RID_IsParserState , Parser_SampleLayer0Mix , Kdll_None }, 510 { RID_SetKernel , IDR_VP_Interlace_444_16_Buf_0 , Kdll_None }, 511 { RID_SetKernel , IDR_VP_Interlace_444_16_Buf_1 , Kdll_None }, 512 { RID_SetKernel , IDR_VP_Interlace_444_16_Buf_2 , Kdll_None }, 513 { RID_SetKernel , IDR_VP_Interlace_444_16_Buf_3 , Kdll_None }, 514 { RID_SetParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 515 516 // Shuffle Layer 0 517 518 // All layers use Sample_8x8 519 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 520 { RID_IsParserState , Parser_ShuffleLayer0 , Kdll_None }, 521 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 522 { RID_SetParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 523 524 // Mix of Sample_8x8 and normal sampling. Shuffle Sample_8x8 data 525 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 526 { RID_IsParserState , Parser_ShuffleLayer0 , Kdll_None }, 527 { RID_IsShuffling , Shuffle_All_8x8_Layer , Kdll_None }, 528 { RID_SetKernel , IDR_VP_Shuffle_444AVS16_Buf_0 , Kdll_None }, 529 { RID_SetKernel , IDR_VP_Shuffle_444AVS16_Buf_1 , Kdll_None }, 530 { RID_SetKernel , IDR_VP_Shuffle_444AVS16_Buf_2 , Kdll_None }, 531 { RID_SetKernel , IDR_VP_Shuffle_444AVS16_Buf_3 , Kdll_None }, 532 { RID_SetParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 533 534 // Sample Layer 0 Colorfill 535 536 // Src0 Sampling is complete, AVS not shuffled yet -> SrcBlend + Luma key + colorfill AVS 537 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 538 { RID_IsParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 539 { RID_IsSrc0Processing , Process_SBlend , Kdll_None }, 540 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 541 { RID_IsSrc0LumaKey , LumaKey_True , Kdll_None }, 542 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 543 { RID_SetKernel , IDR_VP_Compute_Lumakey_Buf0123 , Kdll_None }, 544 { RID_SetKernel , IDR_VP_Colorfill_444AVS16_SrcBlend , Kdll_None }, 545 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 546 { RID_SetSrc0LumaKey , LumaKey_False , Kdll_None }, 547 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 548 549 // Src0 Sampling is complete, AVS not shuffled yet -> SrcBlend + colorfill AVS 550 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 551 { RID_IsParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 552 { RID_IsSrc0Processing , Process_SBlend , Kdll_None }, 553 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 554 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 555 { RID_SetKernel , IDR_VP_Colorfill_444AVS16_SrcBlend , Kdll_None }, 556 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 557 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 558 559 // Src0 Sampling is complete, AVS not shuffled yet -> ConstBlend + Luma key + colorfill AVS 560 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 561 { RID_IsParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 562 { RID_IsSrc0Processing , Process_CBlend , Kdll_None }, 563 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 564 { RID_IsSrc0LumaKey , LumaKey_True , Kdll_None }, 565 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 566 { RID_SetKernel , IDR_VP_Compute_Lumakey_Buf0123 , Kdll_None }, 567 { RID_SetKernel , IDR_VP_Colorfill_444AVS16_ConstBlend , Kdll_None }, 568 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 569 { RID_SetSrc0LumaKey , LumaKey_False , Kdll_None }, 570 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 571 572 // Src0 Sampling is complete, AVS not shuffled yet -> ConstBlend + colorfill AVS 573 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 574 { RID_IsParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 575 { RID_IsSrc0Processing , Process_CBlend , Kdll_None }, 576 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 577 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 578 { RID_SetKernel , IDR_VP_Colorfill_444AVS16_ConstBlend , Kdll_None }, 579 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 580 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 581 582 // Src0 Sampling is complete, AVS not shuffled yet -> ConstSrcBlend + Luma key + colorfill AVS 583 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 584 { RID_IsParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 585 { RID_IsSrc0Processing , Process_CSBlend , Kdll_None }, 586 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 587 { RID_IsSrc0LumaKey , LumaKey_True , Kdll_None }, 588 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 589 { RID_SetKernel , IDR_VP_Compute_Lumakey_Buf0123 , Kdll_None }, 590 { RID_SetKernel , IDR_VP_Colorfill_444AVS16_ConstSrcBlend , Kdll_None }, 591 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 592 { RID_SetSrc0LumaKey , LumaKey_False , Kdll_None }, 593 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 594 595 // Src0 Sampling is complete, AVS not shuffled yet -> ConstSrcBlend + colorfill AVS 596 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 597 { RID_IsParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 598 { RID_IsSrc0Processing , Process_CSBlend , Kdll_None }, 599 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 600 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 601 { RID_SetKernel , IDR_VP_Colorfill_444AVS16_ConstSrcBlend , Kdll_None }, 602 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 603 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 604 605 // Src0 Sampling is complete, AVS not shuffled yet -> PartBlend + Luma key + colorfill AVS 606 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 607 { RID_IsParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 608 { RID_IsSrc0Processing , Process_PBlend , Kdll_None }, 609 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 610 { RID_IsSrc0LumaKey , LumaKey_True , Kdll_None }, 611 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 612 { RID_SetKernel , IDR_VP_Compute_Lumakey_Buf0123 , Kdll_None }, 613 { RID_SetKernel , IDR_VP_Colorfill_444AVS16_PartBlend , Kdll_None }, 614 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 615 { RID_SetSrc0LumaKey , LumaKey_False , Kdll_None }, 616 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 617 618 // Src0 Sampling is complete, AVS not shuffled yet -> PartBlend + colorfill AVS 619 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 620 { RID_IsParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 621 { RID_IsSrc0Processing , Process_PBlend , Kdll_None }, 622 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 623 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 624 { RID_SetKernel , IDR_VP_Colorfill_444AVS16_PartBlend , Kdll_None }, 625 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 626 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 627 628 // Src0 Sampling is complete, AVS not shuffled yet -> Luma key + colorfill AVS 629 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 630 { RID_IsParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 631 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 632 { RID_IsSrc0LumaKey , LumaKey_True , Kdll_None }, 633 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 634 { RID_SetKernel , IDR_VP_Compute_Lumakey_Buf0123 , Kdll_None }, 635 { RID_SetKernel , IDR_VP_Colorfill_444AVS16 , Kdll_None }, 636 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 637 { RID_SetSrc0LumaKey , LumaKey_False , Kdll_None }, 638 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 639 640 // Src0 Sampling is complete, AVS not shuffled yet -> colorfill AVS 641 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 642 { RID_IsParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 643 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 644 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 645 { RID_SetKernel , IDR_VP_Colorfill_444AVS16 , Kdll_None }, 646 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 647 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 648 649 // Src0 Sampling is complete -> SrcBlend + Luma key + colorfill 650 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 651 { RID_IsParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 652 { RID_IsSrc0Processing , Process_SBlend , Kdll_None }, 653 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 654 { RID_IsSrc0LumaKey , LumaKey_True , Kdll_None }, 655 { RID_SetKernel , IDR_VP_Compute_Lumakey_Buf0123 , Kdll_None }, 656 { RID_SetKernel , IDR_VP_Colorfill_444Scale16_SrcBlend , Kdll_None }, 657 { RID_SetSrc0Processing, Process_None , Kdll_None }, 658 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 659 { RID_SetSrc0LumaKey , LumaKey_False , Kdll_None }, 660 { RID_SetParserState , Parser_RotateLayer0Check , Kdll_None }, 661 662 // Src0 Sampling is complete -> SrcBlend + colorfill 663 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 664 { RID_IsParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 665 { RID_IsSrc0Processing , Process_SBlend , Kdll_None }, 666 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 667 { RID_SetKernel , IDR_VP_Colorfill_444Scale16_SrcBlend , Kdll_None }, 668 { RID_SetSrc0Processing, Process_None , Kdll_None }, 669 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 670 { RID_SetParserState , Parser_RotateLayer0Check , Kdll_None }, 671 672 // Src0 Sampling is complete -> ConstBlend + Luma key + colorfill 673 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 674 { RID_IsParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 675 { RID_IsSrc0Processing , Process_CBlend , Kdll_None }, 676 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 677 { RID_IsSrc0LumaKey , LumaKey_True , Kdll_None }, 678 { RID_SetKernel , IDR_VP_Compute_Lumakey_Buf0123 , Kdll_None }, 679 { RID_SetKernel , IDR_VP_Colorfill_444Scale16_ConstBlend , Kdll_None }, 680 { RID_SetSrc0Processing, Process_None , Kdll_None }, 681 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 682 { RID_SetSrc0LumaKey , LumaKey_False , Kdll_None }, 683 { RID_SetParserState , Parser_RotateLayer0Check , Kdll_None }, 684 685 // Src0 Sampling is complete -> ConstBlend + colorfill 686 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 687 { RID_IsParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 688 { RID_IsSrc0Processing , Process_CBlend , Kdll_None }, 689 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 690 { RID_SetKernel , IDR_VP_Colorfill_444Scale16_ConstBlend , Kdll_None }, 691 { RID_SetSrc0Processing, Process_None , Kdll_None }, 692 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 693 { RID_SetParserState , Parser_RotateLayer0Check , Kdll_None }, 694 695 // Src0 Sampling is complete -> ConstSrcBlend + Luma key + colorfill 696 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 697 { RID_IsParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 698 { RID_IsSrc0Processing , Process_CSBlend , Kdll_None }, 699 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 700 { RID_IsSrc0LumaKey , LumaKey_True , Kdll_None }, 701 { RID_SetKernel , IDR_VP_Compute_Lumakey_Buf0123 , Kdll_None }, 702 { RID_SetKernel , IDR_VP_Colorfill_444Scale16_ConstSrcBlend , Kdll_None }, 703 { RID_SetSrc0Processing, Process_None , Kdll_None }, 704 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 705 { RID_SetSrc0LumaKey , LumaKey_False , Kdll_None }, 706 { RID_SetParserState , Parser_RotateLayer0Check , Kdll_None }, 707 708 // Src0 Sampling is complete -> ConstSrcBlend + colorfill 709 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 710 { RID_IsParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 711 { RID_IsSrc0Processing , Process_CSBlend , Kdll_None }, 712 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 713 { RID_SetKernel , IDR_VP_Colorfill_444Scale16_ConstSrcBlend , Kdll_None }, 714 { RID_SetSrc0Processing, Process_None , Kdll_None }, 715 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 716 { RID_SetParserState , Parser_RotateLayer0Check , Kdll_None }, 717 718 // Src0 Sampling is complete -> PartBlend + Luma key + colorfill 719 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 720 { RID_IsParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 721 { RID_IsSrc0Processing , Process_PBlend , Kdll_None }, 722 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 723 { RID_IsSrc0LumaKey , LumaKey_True , Kdll_None }, 724 { RID_SetKernel , IDR_VP_Compute_Lumakey_Buf0123 , Kdll_None }, 725 { RID_SetKernel , IDR_VP_Colorfill_444Scale16_PartBlend , Kdll_None }, 726 { RID_SetSrc0Processing, Process_None , Kdll_None }, 727 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 728 { RID_SetSrc0LumaKey , LumaKey_False , Kdll_None }, 729 { RID_SetParserState , Parser_RotateLayer0Check , Kdll_None }, 730 731 // Src0 Sampling is complete -> PartBlend + colorfill 732 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 733 { RID_IsParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 734 { RID_IsSrc0Processing , Process_PBlend , Kdll_None }, 735 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 736 { RID_SetKernel , IDR_VP_Colorfill_444Scale16_PartBlend , Kdll_None }, 737 { RID_SetSrc0Processing, Process_None , Kdll_None }, 738 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 739 { RID_SetParserState , Parser_RotateLayer0Check , Kdll_None }, 740 741 // Src0 Sampling is complete, no AVS or already shuffled -> Luma key + colorfill 742 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 743 { RID_IsParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 744 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 745 { RID_IsSrc0LumaKey , LumaKey_True , Kdll_None }, 746 { RID_SetKernel , IDR_VP_Compute_Lumakey_Buf0123 , Kdll_None }, 747 { RID_SetKernel , IDR_VP_Colorfill_444Scale16 , Kdll_None }, 748 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 749 { RID_SetSrc0LumaKey , LumaKey_False , Kdll_None }, 750 { RID_SetParserState , Parser_RotateLayer0Check , Kdll_None }, 751 752 // Src0 Sampling is complete, no AVS or already shuffled -> colorfill 753 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 754 { RID_IsParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 755 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 756 { RID_SetKernel , IDR_VP_Colorfill_444Scale16 , Kdll_None }, 757 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 758 { RID_SetParserState , Parser_RotateLayer0Check , Kdll_None }, 759 760 // Src0 Sampling is complete -> no Luma key or colorfill 761 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 762 { RID_IsParserState , Parser_SampleLayer0ColorFill , Kdll_None }, 763 { RID_SetParserState , Parser_RotateLayer0Check , Kdll_None }, 764 765 // PreComp Layer 0 Rotation Check 766 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 767 { RID_IsParserState , Parser_RotateLayer0Check , Kdll_None }, 768 { RID_IsRTRotate , true , Kdll_None }, 769 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 770 771 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 772 { RID_IsParserState , Parser_RotateLayer0Check , Kdll_None }, 773 { RID_IsRTRotate , false , Kdll_None }, 774 { RID_SetParserState , Parser_RotateLayer0 , Kdll_None }, 775 776 // Src0 PreComp Rotation 777 778 // Rotate 0 779 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 780 { RID_IsParserState , Parser_RotateLayer0 , Kdll_None }, 781 { RID_IsSrc0Rotation , VPHAL_ROTATION_IDENTITY , Kdll_None }, 782 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 783 784 // Rotate 90: (Format_PL2 | Format_400P | Format_RGB | Format_AYUV | Format_PA) -> Src0 785 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 786 { RID_IsParserState , Parser_RotateLayer0 , Kdll_None }, 787 { RID_IsSrc0Format , Format_PL2 , Kdll_Or }, 788 { RID_IsSrc0Format , Format_400P , Kdll_Or }, 789 { RID_IsSrc0Format , Format_RGB , Kdll_Or }, 790 { RID_IsSrc0Format , Format_AYUV , Kdll_Or }, 791 { RID_IsSrc0Format , Format_PA , Kdll_None }, 792 { RID_IsSrc0Rotation , VPHAL_ROTATION_90 , Kdll_None }, 793 { RID_SetKernel , IDR_VP_PA_Scale_Rotate_L0_90 , Kdll_None }, 794 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 795 796 // Rotate 180: (Format_PL2 | Format_400P | Format_RGB | Format_AYUV | Format_PA) -> Src0 797 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 798 { RID_IsParserState , Parser_RotateLayer0 , Kdll_None }, 799 { RID_IsSrc0Format , Format_PL2 , Kdll_Or }, 800 { RID_IsSrc0Format , Format_400P , Kdll_Or }, 801 { RID_IsSrc0Format , Format_RGB , Kdll_Or }, 802 { RID_IsSrc0Format , Format_AYUV , Kdll_Or }, 803 { RID_IsSrc0Format , Format_PA , Kdll_None }, 804 { RID_IsSrc0Rotation , VPHAL_ROTATION_180 , Kdll_None }, 805 { RID_SetKernel , IDR_VP_PA_Scale_Rotate_L0_180 , Kdll_None }, 806 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 807 808 // Rotate 270: (Format_PL2 | Format_400P | Format_RGB | Format_AYUV | Format_PA) -> Src0 809 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 810 { RID_IsParserState , Parser_RotateLayer0 , Kdll_None }, 811 { RID_IsSrc0Format , Format_PL2 , Kdll_Or }, 812 { RID_IsSrc0Format , Format_400P , Kdll_Or }, 813 { RID_IsSrc0Format , Format_RGB , Kdll_Or }, 814 { RID_IsSrc0Format , Format_AYUV , Kdll_Or }, 815 { RID_IsSrc0Format , Format_PA , Kdll_None }, 816 { RID_IsSrc0Rotation , VPHAL_ROTATION_270 , Kdll_None }, 817 { RID_SetKernel , IDR_VP_PA_Scale_Rotate_L0_270 , Kdll_None }, 818 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 819 820 // Mirror Horizontal: (Format_PL2 | Format_400P | Format_RGB | Format_AYUV | Format_PA) -> Src0 821 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 822 { RID_IsParserState , Parser_RotateLayer0 , Kdll_None }, 823 { RID_IsSrc0Format , Format_PL2 , Kdll_Or }, 824 { RID_IsSrc0Format , Format_400P , Kdll_Or }, 825 { RID_IsSrc0Format , Format_RGB , Kdll_Or }, 826 { RID_IsSrc0Format , Format_AYUV , Kdll_Or }, 827 { RID_IsSrc0Format , Format_PA , Kdll_None }, 828 { RID_IsSrc0Rotation , VPHAL_MIRROR_HORIZONTAL , Kdll_None }, 829 { RID_SetKernel , IDR_VP_PA_Scale_Mirror_H_L0 , Kdll_None }, 830 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 831 832 // Mirror Vertical: (Format_PL2 | Format_400P | Format_RGB | Format_AYUV | Format_PA) -> Src0 833 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 834 { RID_IsParserState , Parser_RotateLayer0 , Kdll_None }, 835 { RID_IsSrc0Format , Format_PL2 , Kdll_Or }, 836 { RID_IsSrc0Format , Format_400P , Kdll_Or }, 837 { RID_IsSrc0Format , Format_RGB , Kdll_Or }, 838 { RID_IsSrc0Format , Format_AYUV , Kdll_Or }, 839 { RID_IsSrc0Format , Format_PA , Kdll_None }, 840 { RID_IsSrc0Rotation , VPHAL_MIRROR_VERTICAL , Kdll_None }, 841 { RID_SetKernel , IDR_VP_PA_Scale_Mirror_V_L0 , Kdll_None }, 842 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 843 844 // Rotate 90 Mirror Vertical: (Format_PL2 | Format_400P | Format_RGB | Format_AYUV | Format_PA) -> Src0 845 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 846 { RID_IsParserState , Parser_RotateLayer0 , Kdll_None }, 847 { RID_IsSrc0Format , Format_PL2 , Kdll_Or }, 848 { RID_IsSrc0Format , Format_400P , Kdll_Or }, 849 { RID_IsSrc0Format , Format_RGB , Kdll_Or }, 850 { RID_IsSrc0Format , Format_AYUV , Kdll_Or }, 851 { RID_IsSrc0Format , Format_PA , Kdll_None }, 852 { RID_IsSrc0Rotation , VPHAL_ROTATE_90_MIRROR_VERTICAL , Kdll_None }, 853 { RID_SetKernel , IDR_VP_PA_Scale_Rotate90_Mirror_V_L0 , Kdll_None }, 854 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 855 856 // Rotate 90 Mirror Horizontal: (Format_PL2 | Format_400P | Format_RGB | Format_AYUV | Format_PA) -> Src0 857 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 858 { RID_IsParserState , Parser_RotateLayer0 , Kdll_None }, 859 { RID_IsSrc0Format , Format_PL2 , Kdll_Or }, 860 { RID_IsSrc0Format , Format_400P , Kdll_Or }, 861 { RID_IsSrc0Format , Format_RGB , Kdll_Or }, 862 { RID_IsSrc0Format , Format_AYUV , Kdll_Or }, 863 { RID_IsSrc0Format , Format_PA , Kdll_None }, 864 { RID_IsSrc0Rotation , VPHAL_ROTATE_90_MIRROR_HORIZONTAL , Kdll_None }, 865 { RID_SetKernel , IDR_VP_PA_Scale_Rotate90_Mirror_H_L0 , Kdll_None }, 866 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 867 868 // Rotate 90: (Format_PL3 | Format_PL3_RGB) -> Src0 869 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 870 { RID_IsParserState , Parser_RotateLayer0 , Kdll_None }, 871 { RID_IsSrc0Format , Format_PL3 , Kdll_Or }, 872 { RID_IsSrc0Format , Format_PL3_RGB , Kdll_None }, 873 { RID_IsSrc0Rotation , VPHAL_ROTATION_90 , Kdll_None }, 874 { RID_SetKernel , IDR_VP_PL3_Scale_Rotate_L0_90 , Kdll_None }, 875 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 876 877 // Rotate 180: (Format_PL3 | Format_PL3_RGB) -> Src0 878 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 879 { RID_IsParserState , Parser_RotateLayer0 , Kdll_None }, 880 { RID_IsSrc0Format , Format_PL3 , Kdll_Or }, 881 { RID_IsSrc0Format , Format_PL3_RGB , Kdll_None }, 882 { RID_IsSrc0Rotation , VPHAL_ROTATION_180 , Kdll_None }, 883 { RID_SetKernel , IDR_VP_PL3_Scale_Rotate_L0_180 , Kdll_None }, 884 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 885 886 // Rotate 270: (Format_PL3 | Format_PL3_RGB) -> Src0 887 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 888 { RID_IsParserState , Parser_RotateLayer0 , Kdll_None }, 889 { RID_IsSrc0Format , Format_PL3 , Kdll_Or }, 890 { RID_IsSrc0Format , Format_PL3_RGB , Kdll_None }, 891 { RID_IsSrc0Rotation , VPHAL_ROTATION_270 , Kdll_None }, 892 { RID_SetKernel , IDR_VP_PL3_Scale_Rotate_L0_270 , Kdll_None }, 893 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 894 895 // There are no Kernels for PL3 mirroring 896 897 // When there are multiple data formats inside the kernel depending on PL2, PA, AVS, scale 898 // Driver is loading the PL2 via AVS sampler then converting internal format to scale before the composition by shuffling. 899 // After this operation, the internal data format in the kernel changes and it is no long PL2 scale format but PA format 900 // PA_Scale_Rotate kernels should be called in this case 901 // Rotate 90: Format_PL2_UnAligned -> Src0 902 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 903 { RID_IsParserState , Parser_RotateLayer0 , Kdll_None }, 904 { RID_IsSrc0Format , Format_PL2_UnAligned , Kdll_None }, 905 { RID_IsSrc0Rotation , VPHAL_ROTATION_90 , Kdll_None }, 906 { RID_IsShuffling , Shuffle_All_8x8_Layer , Kdll_None }, 907 { RID_SetKernel , IDR_VP_PA_Scale_Rotate_L0_90 , Kdll_None }, 908 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 909 910 // Rotate 180: Format_PL2_UnAligned -> Src0 911 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 912 { RID_IsParserState , Parser_RotateLayer0 , Kdll_None }, 913 { RID_IsSrc0Format , Format_PL2_UnAligned , Kdll_None }, 914 { RID_IsSrc0Rotation , VPHAL_ROTATION_180 , Kdll_None }, 915 { RID_IsShuffling , Shuffle_All_8x8_Layer , Kdll_None }, 916 { RID_SetKernel , IDR_VP_PA_Scale_Rotate_L0_180 , Kdll_None }, 917 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 918 919 // Rotate 270: Format_PL2_UnAligned -> Src0 920 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 921 { RID_IsParserState , Parser_RotateLayer0 , Kdll_None }, 922 { RID_IsSrc0Format , Format_PL2_UnAligned , Kdll_None }, 923 { RID_IsSrc0Rotation , VPHAL_ROTATION_270 , Kdll_None }, 924 { RID_IsShuffling , Shuffle_All_8x8_Layer , Kdll_None }, 925 { RID_SetKernel , IDR_VP_PA_Scale_Rotate_L0_270 , Kdll_None }, 926 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 927 928 // Mirror Horizontal: Format_PL2_UnAligned -> Src0 929 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 930 { RID_IsParserState , Parser_RotateLayer0 , Kdll_None }, 931 { RID_IsSrc0Format , Format_PL2_UnAligned , Kdll_None }, 932 { RID_IsSrc0Rotation , VPHAL_MIRROR_HORIZONTAL , Kdll_None }, 933 { RID_IsShuffling , Shuffle_All_8x8_Layer , Kdll_None }, 934 { RID_SetKernel , IDR_VP_PA_Scale_Mirror_H_L0 , Kdll_None }, 935 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 936 937 // Mirror Vertical: Format_PL2_UnAligned -> Src0 938 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 939 { RID_IsParserState , Parser_RotateLayer0 , Kdll_None }, 940 { RID_IsSrc0Format , Format_PL2_UnAligned , Kdll_None }, 941 { RID_IsSrc0Rotation , VPHAL_MIRROR_VERTICAL , Kdll_None }, 942 { RID_IsShuffling , Shuffle_All_8x8_Layer , Kdll_None }, 943 { RID_SetKernel , IDR_VP_PA_Scale_Mirror_V_L0 , Kdll_None }, 944 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 945 946 // Rotate 90 Mirror Vertical: Format_PL2_UnAligned -> Src0 947 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 948 { RID_IsParserState , Parser_RotateLayer0 , Kdll_None }, 949 { RID_IsSrc0Format , Format_PL2_UnAligned , Kdll_None }, 950 { RID_IsSrc0Rotation , VPHAL_ROTATE_90_MIRROR_VERTICAL , Kdll_None }, 951 { RID_IsShuffling , Shuffle_All_8x8_Layer , Kdll_None }, 952 { RID_SetKernel , IDR_VP_PA_Scale_Rotate90_Mirror_V_L0 , Kdll_None }, 953 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 954 955 // Rotate 90 Mirror Horizontal: Format_PL2_UnAligned -> Src0 956 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 957 { RID_IsParserState , Parser_RotateLayer0 , Kdll_None }, 958 { RID_IsSrc0Format , Format_PL2_UnAligned , Kdll_None }, 959 { RID_IsSrc0Rotation , VPHAL_ROTATE_90_MIRROR_HORIZONTAL , Kdll_None }, 960 { RID_IsShuffling , Shuffle_All_8x8_Layer , Kdll_None }, 961 { RID_SetKernel , IDR_VP_PA_Scale_Rotate90_Mirror_H_L0 , Kdll_None }, 962 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 963 964 // Rotate 90: Format_PL2_UnAligned, Format_P010, Format_P016 -> Src0 965 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 966 { RID_IsParserState , Parser_RotateLayer0 , Kdll_None }, 967 { RID_IsSrc0Format , Format_PL2_UnAligned , Kdll_Or }, 968 { RID_IsSrc0Format , Format_P010 , Kdll_Or }, 969 { RID_IsSrc0Format , Format_P016 , Kdll_None }, 970 { RID_IsSrc0Rotation , VPHAL_ROTATION_90 , Kdll_None }, 971 { RID_SetKernel , IDR_VP_PL2_Scale_Rotate_L0_90 , Kdll_None }, 972 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 973 974 // Rotate 180: Format_PL2_UnAligned, Format_P010, Format_P016 -> Src0 975 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 976 { RID_IsParserState , Parser_RotateLayer0 , Kdll_None }, 977 { RID_IsSrc0Format , Format_PL2_UnAligned , Kdll_Or }, 978 { RID_IsSrc0Format , Format_P010 , Kdll_Or }, 979 { RID_IsSrc0Format , Format_P016 , Kdll_None }, 980 { RID_IsSrc0Rotation , VPHAL_ROTATION_180 , Kdll_None }, 981 { RID_SetKernel , IDR_VP_PL2_Scale_Rotate_L0_180 , Kdll_None }, 982 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 983 984 // Rotate 270: Format_PL2_UnAligned, Format_P010, Format_P016 -> Src0 985 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 986 { RID_IsParserState , Parser_RotateLayer0 , Kdll_None }, 987 { RID_IsSrc0Format , Format_PL2_UnAligned , Kdll_Or }, 988 { RID_IsSrc0Format , Format_P010 , Kdll_Or }, 989 { RID_IsSrc0Format , Format_P016 , Kdll_None }, 990 { RID_IsSrc0Rotation , VPHAL_ROTATION_270 , Kdll_None }, 991 { RID_SetKernel , IDR_VP_PL2_Scale_Rotate_L0_270 , Kdll_None }, 992 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 993 994 // Mirror Horizontal: Format_PL2_UnAligned, Format_P010, Format_P016 -> Src0 995 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 996 { RID_IsParserState , Parser_RotateLayer0 , Kdll_None }, 997 { RID_IsSrc0Format , Format_PL2_UnAligned , Kdll_Or }, 998 { RID_IsSrc0Format , Format_P010 , Kdll_Or }, 999 { RID_IsSrc0Format , Format_P016 , Kdll_None }, 1000 { RID_IsSrc0Rotation , VPHAL_MIRROR_HORIZONTAL , Kdll_None }, 1001 { RID_SetKernel , IDR_VP_PL2_Scale_Mirror_H_L0 , Kdll_None }, 1002 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 1003 1004 // Mirror Vertical: Format_PL2_UnAligned, Format_P010, Format_P016 -> Src0 1005 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1006 { RID_IsParserState , Parser_RotateLayer0 , Kdll_None }, 1007 { RID_IsSrc0Format , Format_PL2_UnAligned , Kdll_Or }, 1008 { RID_IsSrc0Format , Format_P010 , Kdll_Or }, 1009 { RID_IsSrc0Format , Format_P016 , Kdll_None }, 1010 { RID_IsSrc0Rotation , VPHAL_MIRROR_VERTICAL , Kdll_None }, 1011 { RID_SetKernel , IDR_VP_PL2_Scale_Mirror_V_L0 , Kdll_None }, 1012 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 1013 1014 // Rotate 90 Mirror Vertical: Format_PL2_UnAligned, Format_P010, Format_P016 -> Src0 1015 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1016 { RID_IsParserState , Parser_RotateLayer0 , Kdll_None }, 1017 { RID_IsSrc0Format , Format_PL2_UnAligned , Kdll_Or }, 1018 { RID_IsSrc0Format , Format_P010 , Kdll_Or }, 1019 { RID_IsSrc0Format , Format_P016 , Kdll_None }, 1020 { RID_IsSrc0Rotation , VPHAL_ROTATE_90_MIRROR_VERTICAL , Kdll_None }, 1021 { RID_SetKernel , IDR_VP_PL2_Scale_Rotate90_Mirror_V_L0 , Kdll_None }, 1022 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 1023 1024 // Rotate 90 Mirror Horizontal: Format_PL2_UnAligned, Format_P010, Format_P016 -> Src0 1025 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1026 { RID_IsParserState , Parser_RotateLayer0 , Kdll_None }, 1027 { RID_IsSrc0Format , Format_PL2_UnAligned , Kdll_Or }, 1028 { RID_IsSrc0Format , Format_P010 , Kdll_Or }, 1029 { RID_IsSrc0Format , Format_P016 , Kdll_None }, 1030 { RID_IsSrc0Rotation , VPHAL_ROTATE_90_MIRROR_HORIZONTAL , Kdll_None }, 1031 { RID_SetKernel , IDR_VP_PL2_Scale_Rotate90_Mirror_H_L0 , Kdll_None }, 1032 { RID_SetParserState , Parser_SampleLayer0Done , Kdll_None }, 1033 1034 // Sample Layer 0 Done 1035 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1036 { RID_IsParserState , Parser_SampleLayer0Done , Kdll_None }, 1037 { RID_SetSrc0Sampling , Sample_None , Kdll_None }, 1038 { RID_SetSrc0Format , Format_None , Kdll_None }, 1039 { RID_SetParserState , Parser_SampleLayer1 , Kdll_None }, 1040 1041 // Sample Layer 1 1042 1043 // Sampling for layer0 is not complete, go back 1044 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1045 { RID_IsParserState , Parser_SampleLayer1 , Kdll_None }, 1046 { RID_IsSrc0Sampling , Sample_Any , Kdll_None }, 1047 { RID_SetParserState , Parser_SampleLayer0 , Kdll_None }, 1048 1049 // Sampling is complete for both layers, perform CSC 1050 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1051 { RID_IsParserState , Parser_SampleLayer1 , Kdll_None }, 1052 { RID_IsSrc0Sampling , Sample_None , Kdll_None }, 1053 { RID_IsSrc1Sampling , Sample_None , Kdll_None }, 1054 { RID_SetParserState , Parser_SetupCSC1 , Kdll_None }, 1055 1056 // Sample (P010 | P016) -> Src1 1057 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1058 { RID_IsParserState , Parser_SampleLayer1 , Kdll_None }, 1059 { RID_IsSrc1Format , Format_P010 , Kdll_Or }, 1060 { RID_IsSrc1Format , Format_P016 , Kdll_None }, 1061 { RID_IsSrc1Sampling , Sample_Scaling , Kdll_None }, 1062 { RID_SetKernel , IDR_VP_PL2_444DScale16_Buf_4 , Kdll_None }, 1063 { RID_SetKernel , IDR_VP_PL2_444DScale16_Buf_5 , Kdll_None }, 1064 { RID_SetParserState , Parser_SetupCSC1 , Kdll_None }, 1065 1066 // Sample (RGB | AYUV | Packed YUV | NV12 | 400P) -> Src1 1067 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1068 { RID_IsParserState , Parser_SampleLayer1 , Kdll_None }, 1069 { RID_IsSrc1Format , Format_RGB , Kdll_Or }, 1070 { RID_IsSrc1Format , Format_AYUV , Kdll_Or }, 1071 { RID_IsSrc1Format , Format_PA , Kdll_Or }, 1072 { RID_IsSrc1Format , Format_PL2 , Kdll_Or }, 1073 { RID_IsSrc1Format , Format_400P , Kdll_None }, 1074 { RID_IsSrc1Sampling , Sample_Scaling , Kdll_None }, 1075 { RID_SetKernel , IDR_VP_PA_444Scale16_Buf_4 , Kdll_None }, 1076 { RID_SetKernel , IDR_VP_PA_444Scale16_Buf_5 , Kdll_None }, 1077 { RID_SetParserState , Parser_SampleLayer1Done , Kdll_None }, 1078 1079 // Sample NV12(width or height is not a multiple of 4) -> Src1 1080 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1081 { RID_IsParserState , Parser_SampleLayer1 , Kdll_None }, 1082 { RID_IsSrc1Format , Format_PL2_UnAligned , Kdll_None }, 1083 { RID_IsSrc1Sampling , Sample_Scaling , Kdll_None }, 1084 { RID_SetKernel , IDR_VP_PL2_444Scale16_Buf_4 , Kdll_None }, 1085 { RID_SetKernel , IDR_VP_PL2_444Scale16_Buf_5 , Kdll_None }, 1086 { RID_SetParserState , Parser_SampleLayer1Done , Kdll_None }, 1087 1088 // Sample (PL3 | PL3_RGB) -> Src1 1089 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1090 { RID_IsParserState , Parser_SampleLayer1 , Kdll_None }, 1091 { RID_IsSrc1Format , Format_PL3 , Kdll_Or }, 1092 { RID_IsSrc1Format , Format_PL3_RGB , Kdll_None }, 1093 { RID_IsSrc1Sampling , Sample_Scaling , Kdll_None }, 1094 { RID_SetKernel , IDR_VP_PL3_444Scale16_Buf_4 , Kdll_None }, 1095 { RID_SetKernel , IDR_VP_PL3_444Scale16_Buf_5 , Kdll_None }, 1096 { RID_SetParserState , Parser_SampleLayer1Done , Kdll_None }, 1097 1098 // Sample 0.34x (P010 | P016) -> Src1 1099 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1100 { RID_IsParserState , Parser_SampleLayer1 , Kdll_None }, 1101 { RID_IsSrc1Format , Format_P010 , Kdll_Or }, 1102 { RID_IsSrc1Format , Format_P016 , Kdll_None }, 1103 { RID_IsSrc1Sampling , Sample_Scaling_034x , Kdll_None }, 1104 { RID_SetKernel , IDR_VP_PL2_444DScale16_Buf_4 , Kdll_None }, 1105 { RID_SetKernel , IDR_VP_PL2_444DScale16_Buf_5 , Kdll_None }, 1106 { RID_SetParserState , Parser_SetupCSC1 , Kdll_None }, 1107 1108 // Sample 0.34x (RGB | AYUV | Packed YUV | NV12 | 400P) -> Src1 1109 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1110 { RID_IsParserState , Parser_SampleLayer1 , Kdll_None }, 1111 { RID_IsSrc1Format , Format_RGB , Kdll_Or }, 1112 { RID_IsSrc1Format , Format_AYUV , Kdll_Or }, 1113 { RID_IsSrc1Format , Format_PA , Kdll_Or }, 1114 { RID_IsSrc1Format , Format_PL2 , Kdll_Or }, 1115 { RID_IsSrc1Format , Format_400P , Kdll_None }, 1116 { RID_IsSrc1Sampling , Sample_Scaling_034x , Kdll_None }, 1117 { RID_SetKernel , IDR_VP_PA_444DScale16_Buf_4 , Kdll_None }, 1118 { RID_SetKernel , IDR_VP_PA_444DScale16_Buf_5 , Kdll_None }, 1119 { RID_SetParserState , Parser_SampleLayer1Done , Kdll_None }, 1120 1121 // Sample 0.34x PL2(width or height is not a multiple of 4) -> Src1 1122 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1123 { RID_IsParserState , Parser_SampleLayer1 , Kdll_None }, 1124 { RID_IsSrc1Format , Format_PL2_UnAligned , Kdll_None }, 1125 { RID_IsSrc1Sampling , Sample_Scaling_034x , Kdll_None }, 1126 { RID_SetKernel , IDR_VP_PL2_444DScale16_Buf_4 , Kdll_None }, 1127 { RID_SetKernel , IDR_VP_PL2_444DScale16_Buf_5 , Kdll_None }, 1128 { RID_SetParserState , Parser_SampleLayer1Done , Kdll_None }, 1129 1130 // Sample 0.34x (PL3 | PL3_RGB) -> Src1 1131 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1132 { RID_IsParserState , Parser_SampleLayer1 , Kdll_None }, 1133 { RID_IsSrc1Format , Format_PL3 , Kdll_Or }, 1134 { RID_IsSrc1Format , Format_PL3_RGB , Kdll_None }, 1135 { RID_IsSrc1Sampling , Sample_Scaling_034x , Kdll_None }, 1136 { RID_SetKernel , IDR_VP_PL3_444DScale16_Buf_4 , Kdll_None }, 1137 { RID_SetKernel , IDR_VP_PL3_444DScale16_Buf_5 , Kdll_None }, 1138 { RID_SetParserState , Parser_SampleLayer1Done , Kdll_None }, 1139 1140 // AVS Sample (RGB | AYUV | Packed YUV | NV12 | 400P) -> Src1 1141 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1142 { RID_IsParserState , Parser_SampleLayer1 , Kdll_None }, 1143 { RID_IsSrc1Format , Format_RGB , Kdll_Or }, 1144 { RID_IsSrc1Format , Format_AYUV , Kdll_Or }, 1145 { RID_IsSrc1Format , Format_PA , Kdll_Or }, 1146 { RID_IsSrc1Format , Format_PL2 , Kdll_Or }, 1147 { RID_IsSrc1Format , Format_400P , Kdll_None }, 1148 { RID_IsSrc1Sampling , Sample_Scaling_AVS , Kdll_None }, 1149 { RID_SetKernel , IDR_VP_PA_444AVS16_Buf_4 , Kdll_None }, 1150 { RID_SetKernel , IDR_VP_PA_444AVS16_Buf_5 , Kdll_None }, 1151 { RID_SetParserState , Parser_SampleLayer1Done , Kdll_None }, 1152 1153 // AVS Sample PL2(width or height is not a multiple of 4) -> Src1 1154 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1155 { RID_IsParserState , Parser_SampleLayer1 , Kdll_None }, 1156 { RID_IsSrc1Format , Format_PL2_UnAligned , Kdll_None }, 1157 { RID_IsSrc1Sampling , Sample_Scaling_AVS , Kdll_None }, 1158 { RID_SetKernel , IDR_VP_PL2_444AVS16_Buf_4 , Kdll_None }, 1159 { RID_SetKernel , IDR_VP_PL2_444AVS16_Buf_5 , Kdll_None }, 1160 { RID_SetParserState , Parser_SampleLayer1Done , Kdll_None }, 1161 1162 // AVS Sample (PL3 | PL3_RGB) -> Src1 1163 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1164 { RID_IsParserState , Parser_SampleLayer1 , Kdll_None }, 1165 { RID_IsSrc1Format , Format_PL3 , Kdll_Or }, 1166 { RID_IsSrc1Format , Format_PL3_RGB , Kdll_None }, 1167 { RID_IsSrc1Sampling , Sample_Scaling_AVS , Kdll_None }, 1168 { RID_SetKernel , IDR_VP_PL3_444AVS16_Buf_4 , Kdll_None }, 1169 { RID_SetKernel , IDR_VP_PL3_444AVS16_Buf_5 , Kdll_None }, 1170 { RID_SetParserState , Parser_SampleLayer1Done , Kdll_None }, 1171 1172 // Shuffle Layer 1 1173 1174 // All layers use Sample_8x8 1175 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1176 { RID_IsParserState , Parser_ShuffleLayer1 , Kdll_None }, 1177 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 1178 { RID_SetParserState , Parser_SetupCSC1 , Kdll_None }, 1179 1180 // Mix of Sample_8x8 and normal sampling. Shuffle Sample_8x8 data 1181 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1182 { RID_IsParserState , Parser_ShuffleLayer1 , Kdll_None }, 1183 { RID_IsShuffling , Shuffle_All_8x8_Layer , Kdll_None }, 1184 { RID_SetKernel , IDR_VP_Shuffle_444AVS16_Buf_4 , Kdll_None }, 1185 { RID_SetKernel , IDR_VP_Shuffle_444AVS16_Buf_5 , Kdll_None }, 1186 { RID_SetParserState , Parser_SetupCSC1 , Kdll_None }, 1187 1188 // Sample Layer 1 Done 1189 1190 // Sample8x8 1191 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1192 { RID_IsParserState , Parser_SampleLayer1Done , Kdll_None }, 1193 { RID_IsSrc1Sampling , Sample_Scaling_AVS , Kdll_None }, 1194 { RID_SetParserState , Parser_ShuffleLayer1 , Kdll_None }, 1195 1196 // Non-Sample8x8 1197 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1198 { RID_IsParserState , Parser_SampleLayer1Done , Kdll_None }, 1199 { RID_SetParserState , Parser_SetupCSC1 , Kdll_None }, 1200 1201 // Setup CSC coefficients for layer 0 1202 1203 // CSC not present for Render Target 1204 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1205 { RID_IsParserState , Parser_SetupCSC0 , Kdll_None }, 1206 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 1207 { RID_IsSrc0Coeff , CoeffID_None , Kdll_None }, 1208 { RID_SetParserState , Parser_DualOutput , Kdll_None }, 1209 1210 // Coeff 0 (CSC+PA), Set Curbe CSC Coefficients 1211 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1212 { RID_IsParserState , Parser_SetupCSC0 , Kdll_None }, 1213 { RID_IsSrc0Coeff , CoeffID_0 , Kdll_None }, 1214 { RID_IsSetCoeffMode , SetCSCCoeffMethod_Curbe , Kdll_None }, 1215 { RID_SetKernel , IDR_VP_Set_CURBE_CSC_Coeff , Kdll_None }, 1216 { RID_SetParserState , Parser_ExecuteCSC0 , Kdll_None }, 1217 1218 // Coeff 0 (CSC+PA), Set Patch CSC Coefficients 1219 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1220 { RID_IsParserState , Parser_SetupCSC0 , Kdll_None }, 1221 { RID_IsSrc0Coeff , CoeffID_0 , Kdll_None }, 1222 { RID_IsSetCoeffMode , SetCSCCoeffMethod_Patch , Kdll_None }, 1223 { RID_SetKernel , IDR_VP_Set_Patched_CSC_Coeff , Kdll_None }, 1224 { RID_SetPatchData , PatchKind_CSC_Coeff_Src0 , Kdll_None }, // Patch data source is CSC coeff for Src0 1225 { RID_SetPatch , 6 , Kdll_None }, // 6 patches : Count (8), Src (8), Dest (16) 1226 { (Kdll_RuleID) 0x000c , 0x0400 , Kdll_None }, // 04 00 000c 1227 { (Kdll_RuleID) 0x001c , 0x0404 , Kdll_None }, // 04 04 001c 1228 { (Kdll_RuleID) 0x002c , 0x0408 , Kdll_None }, // 04 08 002c 1229 { (Kdll_RuleID) 0x003c , 0x040C , Kdll_None }, // 04 0C 003c 1230 { (Kdll_RuleID) 0x004c , 0x0410 , Kdll_None }, // 04 10 004c 1231 { (Kdll_RuleID) 0x005c , 0x0414 , Kdll_None }, // 04 14 005c 1232 { RID_SetParserState , Parser_ExecuteCSC0 , Kdll_None }, 1233 1234 // Other Matrices ( cannot include PA) 1235 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1236 { RID_IsParserState , Parser_SetupCSC0 , Kdll_None }, 1237 { RID_IsSrc0Coeff , CoeffID_Any , Kdll_None }, 1238 { RID_SetKernel , IDR_VP_Set_Patched_CSC_Coeff , Kdll_None }, 1239 { RID_SetPatchData , PatchKind_CSC_Coeff_Src0 , Kdll_None }, // Patch data source is CSC coeff for Src0 1240 { RID_SetPatch , 6 , Kdll_None }, // 6 patches : Count (8), Src (8), Dest (16) 1241 { (Kdll_RuleID) 0x000c , 0x0400 , Kdll_None }, // 04 00 000c 1242 { (Kdll_RuleID) 0x001c , 0x0404 , Kdll_None }, // 04 04 001c 1243 { (Kdll_RuleID) 0x002c , 0x0408 , Kdll_None }, // 04 08 002c 1244 { (Kdll_RuleID) 0x003c , 0x040C , Kdll_None }, // 04 0C 003c 1245 { (Kdll_RuleID) 0x004c , 0x0410 , Kdll_None }, // 04 10 004c 1246 { (Kdll_RuleID) 0x005c , 0x0414 , Kdll_None }, // 04 14 005c 1247 { RID_SetParserState , Parser_ExecuteCSC0 , Kdll_None }, 1248 1249 // Setup CSC coefficients for layer 1 1250 1251 // No color space conversion for any layer 1252 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1253 { RID_IsParserState , Parser_SetupCSC1 , Kdll_None }, 1254 { RID_IsSrc0Coeff , CoeffID_None , Kdll_None }, 1255 { RID_IsSrc1Coeff , CoeffID_None , Kdll_None }, 1256 { RID_SetParserState , Parser_Lumakey , Kdll_None }, 1257 1258 // Layer 0 not yet converted -> setup/execute CSC for layer 0 and then resume Layer 1 1259 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1260 { RID_IsParserState , Parser_SetupCSC1 , Kdll_None }, 1261 { RID_IsSrc0Coeff , CoeffID_Any , Kdll_None }, 1262 { RID_SetParserState , Parser_SetupCSC0 , Kdll_None }, 1263 1264 // Quadrant 2,3 - CSC coefficients already set 1265 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1266 { RID_IsParserState , Parser_SetupCSC1 , Kdll_None }, 1267 { RID_IsQuadrant , 2 , Kdll_None }, 1268 { RID_SetParserState , Parser_Lumakey , Kdll_None }, 1269 1270 // Coeff 0 (CSC+PA), Set Curbe CSC Coefficients 1271 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1272 { RID_IsParserState , Parser_SetupCSC1 , Kdll_None }, 1273 { RID_IsSrc1Coeff , CoeffID_0 , Kdll_None }, 1274 { RID_IsSetCoeffMode , SetCSCCoeffMethod_Curbe , Kdll_None }, 1275 { RID_SetKernel , IDR_VP_Set_CURBE_CSC_Coeff , Kdll_None }, 1276 { RID_SetParserState , Parser_Lumakey , Kdll_None }, 1277 1278 // Coeff 0 (CSC+PA), Set Patch CSC Coefficients 1279 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1280 { RID_IsParserState , Parser_SetupCSC1 , Kdll_None }, 1281 { RID_IsSrc0Coeff , CoeffID_0 , Kdll_None }, 1282 { RID_IsSetCoeffMode , SetCSCCoeffMethod_Patch , Kdll_None }, 1283 { RID_SetKernel , IDR_VP_Set_Patched_CSC_Coeff , Kdll_None }, 1284 { RID_SetPatchData , PatchKind_CSC_Coeff_Src1 , Kdll_None }, // Patch data source is CSC coeff for Src0 1285 { RID_SetPatch , 6 , Kdll_None }, // 6 patches : Count (8), Src (8), Dest (16) 1286 { (Kdll_RuleID) 0x000c , 0x0400 , Kdll_None }, // 04 00 000c 1287 { (Kdll_RuleID) 0x001c , 0x0404 , Kdll_None }, // 04 04 001c 1288 { (Kdll_RuleID) 0x002c , 0x0408 , Kdll_None }, // 04 08 002c 1289 { (Kdll_RuleID) 0x003c , 0x040C , Kdll_None }, // 04 0C 003c 1290 { (Kdll_RuleID) 0x004c , 0x0410 , Kdll_None }, // 04 10 004c 1291 { (Kdll_RuleID) 0x005c , 0x0414 , Kdll_None }, // 04 14 005c 1292 { RID_SetParserState , Parser_Lumakey , Kdll_None }, 1293 1294 // Other Matrices (cannot include PA) 1295 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1296 { RID_IsParserState , Parser_SetupCSC1 , Kdll_None }, 1297 { RID_IsSrc1Coeff , CoeffID_Any , Kdll_None }, 1298 { RID_SetKernel , IDR_VP_Set_Patched_CSC_Coeff , Kdll_None }, 1299 { RID_SetPatchData , PatchKind_CSC_Coeff_Src1 , Kdll_None }, // Patch data source is CSC coeff for Src1 1300 { RID_SetPatch , 6 , Kdll_None }, // 6 patches : Count (8), Src (8), Dest (16) 1301 { (Kdll_RuleID) 0x000c , 0x0400 , Kdll_None }, // 04 00 000c 1302 { (Kdll_RuleID) 0x001c , 0x0404 , Kdll_None }, // 04 04 001c 1303 { (Kdll_RuleID) 0x002c , 0x0408 , Kdll_None }, // 04 08 002c 1304 { (Kdll_RuleID) 0x003c , 0x040C , Kdll_None }, // 04 0C 003c 1305 { (Kdll_RuleID) 0x004c , 0x0410 , Kdll_None }, // 04 10 004c 1306 { (Kdll_RuleID) 0x005c , 0x0414 , Kdll_None }, // 04 14 005c 1307 { RID_SetParserState , Parser_Lumakey , Kdll_None }, 1308 1309 // Lumakey 1310 // lumakey and CSC not needed for current layer. 1311 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1312 { RID_IsParserState , Parser_Lumakey , Kdll_None }, 1313 { RID_IsSrc1Coeff , CoeffID_None , Kdll_None }, 1314 { RID_IsSrc1LumaKey , LumaKey_False , Kdll_None }, 1315 { RID_SetParserState , Parser_ProcessLayer , Kdll_None }, 1316 1317 // lumakey not needed, CSC needed 1318 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1319 { RID_IsParserState , Parser_Lumakey , Kdll_None }, 1320 { RID_IsSrc1LumaKey , LumaKey_False , Kdll_None }, 1321 { RID_IsSrc1Coeff , CoeffID_Any , Kdll_None }, 1322 { RID_SetParserState , Parser_ExecuteCSC1 , Kdll_None }, 1323 1324 // lumakey and CSC - both needed 1325 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1326 { RID_IsParserState , Parser_Lumakey , Kdll_None }, 1327 { RID_IsQuadrant , 0 , Kdll_None }, 1328 { RID_IsSrc1LumaKey , LumaKey_True , Kdll_None }, 1329 { RID_IsSrc1Coeff , CoeffID_Any , Kdll_None }, 1330 { RID_SetKernel , IDR_VP_Set_Buf0_Buf4 , Kdll_None }, 1331 { RID_SetKernel , IDR_VP_Compute_Lumakey , Kdll_None }, 1332 { RID_SetKernel , IDR_VP_Set_Buf1_Buf5 , Kdll_None }, 1333 { RID_SetKernel , IDR_VP_Compute_Lumakey , Kdll_None }, 1334 { RID_SetParserState , Parser_ExecuteCSC1 , Kdll_None }, 1335 1336 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1337 { RID_IsParserState , Parser_Lumakey , Kdll_None }, 1338 { RID_IsQuadrant , 2 , Kdll_None }, 1339 { RID_IsSrc1LumaKey , LumaKey_True , Kdll_None }, 1340 { RID_IsSrc1Coeff , CoeffID_Any , Kdll_None }, 1341 { RID_SetKernel , IDR_VP_Set_Buf2_Buf4 , Kdll_None }, 1342 { RID_SetKernel , IDR_VP_Compute_Lumakey , Kdll_None }, 1343 { RID_SetKernel , IDR_VP_Set_Buf3_Buf5 , Kdll_None }, 1344 { RID_SetKernel , IDR_VP_Compute_Lumakey , Kdll_None }, 1345 { RID_SetParserState , Parser_ExecuteCSC1 , Kdll_None }, 1346 1347 // Lumakey needed, CSC not needed 1348 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1349 { RID_IsParserState , Parser_Lumakey , Kdll_None }, 1350 { RID_IsQuadrant , 0 , Kdll_None }, 1351 { RID_IsSrc1LumaKey , LumaKey_True , Kdll_None }, 1352 { RID_IsSrc1Coeff , CoeffID_None , Kdll_None }, 1353 { RID_SetKernel , IDR_VP_Set_Buf0_Buf4 , Kdll_None }, 1354 { RID_SetKernel , IDR_VP_Compute_Lumakey , Kdll_None }, 1355 { RID_SetKernel , IDR_VP_Set_Buf1_Buf5 , Kdll_None }, 1356 { RID_SetKernel , IDR_VP_Compute_Lumakey , Kdll_None }, 1357 { RID_SetParserState , Parser_ProcessLayer , Kdll_None }, 1358 1359 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1360 { RID_IsParserState , Parser_Lumakey , Kdll_None }, 1361 { RID_IsQuadrant , 2 , Kdll_None }, 1362 { RID_IsSrc1LumaKey , LumaKey_True , Kdll_None }, 1363 { RID_IsSrc1Coeff , CoeffID_None , Kdll_None }, 1364 { RID_SetKernel , IDR_VP_Set_Buf2_Buf4 , Kdll_None }, 1365 { RID_SetKernel , IDR_VP_Compute_Lumakey , Kdll_None }, 1366 { RID_SetKernel , IDR_VP_Set_Buf3_Buf5 , Kdll_None }, 1367 { RID_SetKernel , IDR_VP_Compute_Lumakey , Kdll_None }, 1368 { RID_SetParserState , Parser_ProcessLayer , Kdll_None }, 1369 1370 // Perform CSC operation for layer 0 1371 // Src0 -> any to RGB, if Src0 is pre-multiplied content use CSC_Premultiplied 1372 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1373 { RID_IsParserState , Parser_ExecuteCSC0 , Kdll_None }, 1374 { RID_IsSrc0Processing , Process_PBlend , Kdll_None }, 1375 { RID_SetKernel , IDR_VP_Set_CSC_Src_Buf0 , Kdll_None }, 1376 { RID_SetKernel , IDR_VP_Call_CSC_Premultiplied , Kdll_None }, 1377 { RID_SetKernel , IDR_VP_Set_CSC_Src_Buf1 , Kdll_None }, 1378 { RID_SetKernel , IDR_VP_Call_CSC_Premultiplied , Kdll_None }, 1379 { RID_SetKernel , IDR_VP_Set_CSC_Src_Buf2 , Kdll_None }, 1380 { RID_SetKernel , IDR_VP_Call_CSC_Premultiplied , Kdll_None }, 1381 { RID_SetKernel , IDR_VP_Set_CSC_Src_Buf3 , Kdll_None }, 1382 { RID_SetKernel , IDR_VP_Call_CSC_Premultiplied , Kdll_None }, 1383 { RID_SetParserState , Parser_ExecuteCSC0Done , Kdll_None }, 1384 1385 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1386 { RID_IsParserState , Parser_ExecuteCSC0 , Kdll_None }, 1387 { RID_SetKernel , IDR_VP_Set_CSC_Src_Buf0 , Kdll_None }, 1388 { RID_SetKernel , IDR_VP_Call_CSC , Kdll_None }, 1389 { RID_SetKernel , IDR_VP_Set_CSC_Src_Buf1 , Kdll_None }, 1390 { RID_SetKernel , IDR_VP_Call_CSC , Kdll_None }, 1391 { RID_SetKernel , IDR_VP_Set_CSC_Src_Buf2 , Kdll_None }, 1392 { RID_SetKernel , IDR_VP_Call_CSC , Kdll_None }, 1393 { RID_SetKernel , IDR_VP_Set_CSC_Src_Buf3 , Kdll_None }, 1394 { RID_SetKernel , IDR_VP_Call_CSC , Kdll_None }, 1395 { RID_SetParserState , Parser_ExecuteCSC0Done , Kdll_None }, 1396 1397 // CSC0 is complete 1398 1399 // Check whether go back to intermix layer 0 1400 // Please not change the order of these two rules 1401 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1402 { RID_IsParserState , Parser_ExecuteCSC0Done , Kdll_None }, 1403 { RID_IsSrc0Sampling , Sample_iScaling , Kdll_None }, 1404 { RID_SetSrc0Coeff , CoeffID_None , Kdll_None }, 1405 { RID_SetNextLayer , -2 , Kdll_None }, // jump back to main layer 1406 { RID_SetParserState , Parser_SampleLayer0Mix , Kdll_None }, 1407 1408 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1409 { RID_IsParserState , Parser_ExecuteCSC0Done , Kdll_None }, 1410 { RID_SetSrc0Coeff , CoeffID_None , Kdll_None }, 1411 { RID_SetParserState , Parser_SetupCSC1 , Kdll_None }, 1412 1413 // Perform CSC operation for layer 1 1414 1415 // Src1 -> YUV to RGB, if Src1 is pre-multiplied content use CSC_Premultiplied 1416 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1417 { RID_IsParserState , Parser_ExecuteCSC1 , Kdll_None }, 1418 { RID_IsSrc1Processing , Process_PBlend , Kdll_None }, 1419 { RID_SetKernel , IDR_VP_Set_CSC_Src_Buf4 , Kdll_None }, 1420 { RID_SetKernel , IDR_VP_Call_CSC_Premultiplied , Kdll_None }, 1421 { RID_SetKernel , IDR_VP_Set_CSC_Src_Buf5 , Kdll_None }, 1422 { RID_SetKernel , IDR_VP_Call_CSC_Premultiplied , Kdll_None }, 1423 { RID_SetParserState , Parser_ExecuteCSC1Done , Kdll_None }, 1424 1425 // Src1 -> YUV to RGB 1426 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1427 { RID_IsParserState , Parser_ExecuteCSC1 , Kdll_None }, 1428 { RID_SetKernel , IDR_VP_Set_CSC_Src_Buf4 , Kdll_None }, 1429 { RID_SetKernel , IDR_VP_Call_CSC , Kdll_None }, 1430 { RID_SetKernel , IDR_VP_Set_CSC_Src_Buf5 , Kdll_None }, 1431 { RID_SetKernel , IDR_VP_Call_CSC , Kdll_None }, 1432 { RID_SetParserState , Parser_ExecuteCSC1Done , Kdll_None }, 1433 1434 // Layer 1 CSC is complete - prepare operation 1435 // Quadrants 0,1 CSC complete 1436 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1437 { RID_IsParserState , Parser_ExecuteCSC1Done , Kdll_None }, 1438 { RID_IsQuadrant , 0 , Kdll_None }, 1439 { RID_SetParserState , Parser_ProcessLayer , Kdll_None }, 1440 1441 // Quadrants 2,3 CSC complete 1442 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1443 { RID_IsParserState , Parser_ExecuteCSC1Done , Kdll_None }, 1444 { RID_IsQuadrant , 2 , Kdll_None }, 1445 { RID_SetSrc1Coeff , CoeffID_None , Kdll_None }, 1446 { RID_SetParserState , Parser_ProcessLayer , Kdll_None }, 1447 1448 // Process layer 1449 1450 // Render target layer -> write output and finish 1451 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1452 { RID_IsParserState , Parser_ProcessLayer , Kdll_None }, 1453 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 1454 { RID_SetParserState , Parser_DualOutput , Kdll_None }, 1455 1456 // Single layer -> skip processing - prepare CSC for Render Target 1457 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1458 { RID_IsParserState , Parser_ProcessLayer , Kdll_None }, 1459 { RID_IsSrc1Processing , Process_None , Kdll_None }, 1460 { RID_SetParserState , Parser_ProcessLayerDone , Kdll_None }, 1461 1462 // Compositing quadrants 0,1 1463 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1464 { RID_IsParserState , Parser_ProcessLayer , Kdll_None }, 1465 { RID_IsQuadrant , 0 , Kdll_None }, 1466 { RID_IsSrc1Processing , Process_Composite , Kdll_None }, 1467 { RID_SetKernel , IDR_VP_Set_Buf0_Buf4 , Kdll_None }, 1468 { RID_SetKernel , IDR_VP_Call_Composite , Kdll_None }, 1469 { RID_SetKernel , IDR_VP_Set_Buf1_Buf5 , Kdll_None }, 1470 { RID_SetKernel , IDR_VP_Call_Composite , Kdll_None }, 1471 { RID_SetParserState , Parser_ProcessLayerDone , Kdll_None }, 1472 1473 // Compositing quadrants 2,3 1474 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1475 { RID_IsParserState , Parser_ProcessLayer , Kdll_None }, 1476 { RID_IsQuadrant , 2 , Kdll_None }, 1477 { RID_IsSrc1Processing , Process_Composite , Kdll_None }, 1478 { RID_SetKernel , IDR_VP_Set_Buf2_Buf4 , Kdll_None }, 1479 { RID_SetKernel , IDR_VP_Call_Composite , Kdll_None }, 1480 { RID_SetKernel , IDR_VP_Set_Buf3_Buf5 , Kdll_None }, 1481 { RID_SetKernel , IDR_VP_Call_Composite , Kdll_None }, 1482 { RID_SetParserState , Parser_ProcessLayerDone , Kdll_None }, 1483 1484 // Constant Blending quadrants 0,1 1485 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1486 { RID_IsParserState , Parser_ProcessLayer , Kdll_None }, 1487 { RID_IsQuadrant , 0 , Kdll_None }, 1488 { RID_IsSrc1Processing , Process_CBlend , Kdll_None }, 1489 { RID_SetKernel , IDR_VP_Set_Buf0_Buf4 , Kdll_None }, 1490 { RID_SetKernel , IDR_VP_Call_ConstBlend , Kdll_None }, 1491 { RID_SetKernel , IDR_VP_Set_Buf1_Buf5 , Kdll_None }, 1492 { RID_SetKernel , IDR_VP_Call_ConstBlend , Kdll_None }, 1493 { RID_SetParserState , Parser_ProcessLayerDone , Kdll_None }, 1494 1495 // Constant Blending quadrants 2,3 1496 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1497 { RID_IsParserState , Parser_ProcessLayer , Kdll_None }, 1498 { RID_IsQuadrant , 2 , Kdll_None }, 1499 { RID_IsSrc1Processing , Process_CBlend , Kdll_None }, 1500 { RID_SetKernel , IDR_VP_Set_Buf2_Buf4 , Kdll_None }, 1501 { RID_SetKernel , IDR_VP_Call_ConstBlend , Kdll_None }, 1502 { RID_SetKernel , IDR_VP_Set_Buf3_Buf5 , Kdll_None }, 1503 { RID_SetKernel , IDR_VP_Call_ConstBlend , Kdll_None }, 1504 { RID_SetParserState , Parser_ProcessLayerDone , Kdll_None }, 1505 1506 // Source Blending quadrants 0,1 1507 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1508 { RID_IsParserState , Parser_ProcessLayer , Kdll_None }, 1509 { RID_IsQuadrant , 0 , Kdll_None }, 1510 { RID_IsSrc1Processing , Process_SBlend , Kdll_None }, 1511 { RID_SetKernel , IDR_VP_Set_Buf0_Buf4 , Kdll_None }, 1512 { RID_SetKernel , IDR_VP_Call_SrcBlend , Kdll_None }, 1513 { RID_SetKernel , IDR_VP_Set_Buf1_Buf5 , Kdll_None }, 1514 { RID_SetKernel , IDR_VP_Call_SrcBlend , Kdll_None }, 1515 { RID_SetParserState , Parser_ProcessLayerDone , Kdll_None }, 1516 1517 // Source Blending quadrants 2,3 1518 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1519 { RID_IsParserState , Parser_ProcessLayer , Kdll_None }, 1520 { RID_IsQuadrant , 2 , Kdll_None }, 1521 { RID_IsSrc1Processing , Process_SBlend , Kdll_None }, 1522 { RID_SetKernel , IDR_VP_Set_Buf2_Buf4 , Kdll_None }, 1523 { RID_SetKernel , IDR_VP_Call_SrcBlend , Kdll_None }, 1524 { RID_SetKernel , IDR_VP_Set_Buf3_Buf5 , Kdll_None }, 1525 { RID_SetKernel , IDR_VP_Call_SrcBlend , Kdll_None }, 1526 { RID_SetParserState , Parser_ProcessLayerDone , Kdll_None }, 1527 1528 // Source Blending (4-bits alpha) quadrants 0,1 1529 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1530 { RID_IsParserState , Parser_ProcessLayer , Kdll_None }, 1531 { RID_IsQuadrant , 0 , Kdll_None }, 1532 { RID_IsSrc1Processing , Process_SBlend_4bits , Kdll_None }, 1533 { RID_SetKernel , IDR_VP_Set_Buf0_Buf4 , Kdll_None }, 1534 { RID_SetKernel , IDR_VP_Call_SrcBlend_4bits , Kdll_None }, 1535 { RID_SetKernel , IDR_VP_Set_Buf1_Buf5 , Kdll_None }, 1536 { RID_SetKernel , IDR_VP_Call_SrcBlend_4bits , Kdll_None }, 1537 { RID_SetParserState , Parser_ProcessLayerDone , Kdll_None }, 1538 1539 // Source Blending (4-bits alpha) quadrants 2,3 1540 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1541 { RID_IsParserState , Parser_ProcessLayer , Kdll_None }, 1542 { RID_IsQuadrant , 2 , Kdll_None }, 1543 { RID_IsSrc1Processing , Process_SBlend_4bits , Kdll_None }, 1544 { RID_SetKernel , IDR_VP_Set_Buf2_Buf4 , Kdll_None }, 1545 { RID_SetKernel , IDR_VP_Call_SrcBlend_4bits , Kdll_None }, 1546 { RID_SetKernel , IDR_VP_Set_Buf3_Buf5 , Kdll_None }, 1547 { RID_SetKernel , IDR_VP_Call_SrcBlend_4bits , Kdll_None }, 1548 { RID_SetParserState , Parser_ProcessLayerDone , Kdll_None }, 1549 1550 // Partial Blending quadrants 0,1 1551 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1552 { RID_IsParserState , Parser_ProcessLayer , Kdll_None }, 1553 { RID_IsQuadrant , 0 , Kdll_None }, 1554 { RID_IsSrc1Processing , Process_PBlend , Kdll_None }, 1555 { RID_SetKernel , IDR_VP_Set_Buf0_Buf4 , Kdll_None }, 1556 { RID_SetKernel , IDR_VP_Call_PartBlend , Kdll_None }, 1557 { RID_SetKernel , IDR_VP_Set_Buf1_Buf5 , Kdll_None }, 1558 { RID_SetKernel , IDR_VP_Call_PartBlend , Kdll_None }, 1559 { RID_SetParserState , Parser_ProcessLayerDone , Kdll_None }, 1560 1561 // Partial Blending quadrants 2,3 1562 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1563 { RID_IsParserState , Parser_ProcessLayer , Kdll_None }, 1564 { RID_IsQuadrant , 2 , Kdll_None }, 1565 { RID_IsSrc1Processing , Process_PBlend , Kdll_None }, 1566 { RID_SetKernel , IDR_VP_Set_Buf2_Buf4 , Kdll_None }, 1567 { RID_SetKernel , IDR_VP_Call_PartBlend , Kdll_None }, 1568 { RID_SetKernel , IDR_VP_Set_Buf3_Buf5 , Kdll_None }, 1569 { RID_SetKernel , IDR_VP_Call_PartBlend , Kdll_None }, 1570 { RID_SetParserState , Parser_ProcessLayerDone , Kdll_None }, 1571 1572 // Constant multitply Sources Blending quadrants 0,1 1573 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1574 { RID_IsParserState , Parser_ProcessLayer , Kdll_None }, 1575 { RID_IsQuadrant , 0 , Kdll_None }, 1576 { RID_IsSrc1Processing , Process_CSBlend , Kdll_None }, 1577 { RID_SetKernel , IDR_VP_Set_Buf0_Buf4 , Kdll_None }, 1578 { RID_SetKernel , IDR_VP_Call_ConstSrcBlend , Kdll_None }, 1579 { RID_SetKernel , IDR_VP_Set_Buf1_Buf5 , Kdll_None }, 1580 { RID_SetKernel , IDR_VP_Call_ConstSrcBlend , Kdll_None }, 1581 { RID_SetParserState , Parser_ProcessLayerDone , Kdll_None }, 1582 1583 // Constant multiply Sources Blending quadrants 2,3 1584 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1585 { RID_IsParserState , Parser_ProcessLayer , Kdll_None }, 1586 { RID_IsQuadrant , 2 , Kdll_None }, 1587 { RID_IsSrc1Processing , Process_CSBlend , Kdll_None }, 1588 { RID_SetKernel , IDR_VP_Set_Buf2_Buf4 , Kdll_None }, 1589 { RID_SetKernel , IDR_VP_Call_ConstSrcBlend , Kdll_None }, 1590 { RID_SetKernel , IDR_VP_Set_Buf3_Buf5 , Kdll_None }, 1591 { RID_SetKernel , IDR_VP_Call_ConstSrcBlend , Kdll_None }, 1592 { RID_SetParserState , Parser_ProcessLayerDone , Kdll_None }, 1593 1594 // Constant multitply Partial Blending quadrants 0,1 1595 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1596 { RID_IsParserState , Parser_ProcessLayer , Kdll_None }, 1597 { RID_IsQuadrant , 0 , Kdll_None }, 1598 { RID_IsSrc1Processing , Process_CPBlend , Kdll_None }, 1599 { RID_SetKernel , IDR_VP_Set_Buf0_Buf4 , Kdll_None }, 1600 { RID_SetKernel , IDR_VP_Call_AlphaSrcBlendG , Kdll_None }, 1601 { RID_SetKernel , IDR_VP_Set_Buf1_Buf5 , Kdll_None }, 1602 { RID_SetKernel , IDR_VP_Call_AlphaSrcBlendG , Kdll_None }, 1603 { RID_SetParserState , Parser_ProcessLayerDone , Kdll_None }, 1604 1605 // Constant multiply Partial Blending quadrants 2,3 1606 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1607 { RID_IsParserState , Parser_ProcessLayer , Kdll_None }, 1608 { RID_IsQuadrant , 2 , Kdll_None }, 1609 { RID_IsSrc1Processing , Process_CPBlend , Kdll_None }, 1610 { RID_SetKernel , IDR_VP_Set_Buf2_Buf4 , Kdll_None }, 1611 { RID_SetKernel , IDR_VP_Call_AlphaSrcBlendG , Kdll_None }, 1612 { RID_SetKernel , IDR_VP_Set_Buf3_Buf5 , Kdll_None }, 1613 { RID_SetKernel , IDR_VP_Call_AlphaSrcBlendG , Kdll_None }, 1614 { RID_SetParserState , Parser_ProcessLayerDone , Kdll_None }, 1615 1616 // Layer processing is complete 1617 1618 // nothing to process - next layer 1619 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1620 { RID_IsParserState , Parser_ProcessLayerDone , Kdll_None }, 1621 { RID_IsSrc1Processing , Process_None , Kdll_None }, 1622 { RID_SetNextLayer , 0 , Kdll_None }, 1623 { RID_SetQuadrant , 0 , Kdll_None }, 1624 { RID_SetParserState , Parser_SetupLayer1 , Kdll_None }, 1625 1626 // Quadrants 0,1 are complete - sample/process quadrants 2,3 1627 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1628 { RID_IsParserState , Parser_ProcessLayerDone , Kdll_None }, 1629 { RID_IsQuadrant , 0 , Kdll_None }, 1630 { RID_SetKernel , IDR_VP_Set_Sec_Half_Buf45 , Kdll_None }, 1631 { RID_SetQuadrant , 2 , Kdll_None }, 1632 { RID_SetParserState , Parser_SampleLayer1 , Kdll_None }, 1633 1634 // All quadrants are processed - start next layer 1635 { RID_Op_NewEntry , RULE_NO_OVERRIDE , Kdll_None }, 1636 { RID_IsParserState , Parser_ProcessLayerDone , Kdll_None }, 1637 { RID_IsQuadrant , 2 , Kdll_None }, 1638 { RID_SetSrc1Sampling , Sample_None , Kdll_None }, 1639 { RID_SetSrc1Format , Format_None , Kdll_None }, 1640 { RID_SetSrc1Processing, Process_None , Kdll_None }, 1641 { RID_SetNextLayer , 0 , Kdll_None }, 1642 { RID_SetQuadrant , 0 , Kdll_None }, 1643 { RID_SetParserState , Parser_SetupLayer1 , Kdll_None }, 1644 1645 // dual output mode, non-rotated NV12 is Primary 1646 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1647 { RID_IsParserState , Parser_DualOutput , Kdll_None }, 1648 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 1649 { RID_IsDualOutput , true , Kdll_None }, 1650 { RID_SetKernel , IDR_VP_Set_Dest_Surf_Indexes_Primary , Kdll_None }, 1651 { RID_SetKernel , IDR_VP_Save_444AVS16_NV12 , Kdll_None }, 1652 { RID_SetParserState , Parser_Rotation , Kdll_None }, 1653 1654 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1655 { RID_IsParserState , Parser_DualOutput , Kdll_None }, 1656 { RID_IsDualOutput , true , Kdll_None }, 1657 { RID_SetKernel , IDR_VP_Set_Dest_Surf_Indexes_Primary , Kdll_None }, 1658 { RID_SetKernel , IDR_VP_Save_444Scale16_NV12 , Kdll_None }, 1659 { RID_SetParserState , Parser_Rotation , Kdll_None }, 1660 1661 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1662 { RID_IsParserState , Parser_DualOutput , Kdll_None }, 1663 { RID_SetParserState , Parser_Rotation , Kdll_None }, 1664 1665 // PL2_Scale_Rotate/Mirroring cases. It requires to keep track of the first 1666 // layer (layer 0) format, because the post composition rotation kernel requires 1667 // to match the layer 0 input format. 1668 // For PL3 input, we will use PL2 kernels as PL3 may be replaced by PL2. 1669 1670 // post composition rotation -> write output 1671 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1672 { RID_IsParserState , Parser_Rotation , Kdll_None }, 1673 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 1674 { RID_IsLayerRotation , VPHAL_ROTATION_90 , Kdll_None }, 1675 { RID_SetKernel , IDR_VP_PA_AVS_Rotate_L0_90 , Kdll_None }, 1676 { RID_SetParserState , Parser_DestSurfIndex , Kdll_None }, 1677 1678 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1679 { RID_IsParserState , Parser_Rotation , Kdll_None }, 1680 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 1681 { RID_IsLayerRotation , VPHAL_ROTATION_180 , Kdll_None }, 1682 { RID_SetKernel , IDR_VP_PA_AVS_Rotate_L0_180 , Kdll_None }, 1683 { RID_SetParserState , Parser_DestSurfIndex , Kdll_None }, 1684 1685 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1686 { RID_IsParserState , Parser_Rotation , Kdll_None }, 1687 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 1688 { RID_IsLayerRotation , VPHAL_ROTATION_270 , Kdll_None }, 1689 { RID_SetKernel , IDR_VP_PA_AVS_Rotate_L0_270 , Kdll_None }, 1690 { RID_SetParserState , Parser_DestSurfIndex , Kdll_None }, 1691 1692 // Mirror 1693 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1694 { RID_IsParserState , Parser_Rotation , Kdll_None }, 1695 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 1696 { RID_IsLayerRotation , VPHAL_MIRROR_HORIZONTAL , Kdll_None }, 1697 { RID_SetKernel , IDR_VP_PA_AVS_Mirror_H_L0 , Kdll_None }, 1698 { RID_SetParserState , Parser_DestSurfIndex , Kdll_None }, 1699 1700 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1701 { RID_IsParserState , Parser_Rotation , Kdll_None }, 1702 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 1703 { RID_IsLayerRotation , VPHAL_MIRROR_VERTICAL , Kdll_None }, 1704 { RID_SetKernel , IDR_VP_PA_AVS_Mirror_V_L0 , Kdll_None }, 1705 { RID_SetParserState , Parser_DestSurfIndex , Kdll_None }, 1706 1707 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1708 { RID_IsParserState , Parser_Rotation , Kdll_None }, 1709 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 1710 { RID_IsLayerRotation , VPHAL_ROTATE_90_MIRROR_VERTICAL , Kdll_None }, 1711 { RID_SetKernel , IDR_VP_PA_AVS_Rotate_90_Mirror_V_L0 , Kdll_None }, 1712 { RID_SetParserState , Parser_DestSurfIndex , Kdll_None }, 1713 1714 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1715 { RID_IsParserState , Parser_Rotation , Kdll_None }, 1716 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 1717 { RID_IsLayerRotation , VPHAL_ROTATE_90_MIRROR_HORIZONTAL , Kdll_None }, 1718 { RID_SetKernel , IDR_VP_PA_AVS_Rotate_90_Mirror_H_L0 , Kdll_None }, 1719 { RID_SetParserState , Parser_DestSurfIndex , Kdll_None }, 1720 1721 // jump to write output if it's shuffle 1722 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1723 { RID_IsParserState , Parser_Rotation , Kdll_None }, 1724 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 1725 { RID_SetParserState , Parser_DestSurfIndex , Kdll_None }, 1726 1727 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1728 { RID_IsParserState , Parser_Rotation , Kdll_None }, 1729 { RID_IsLayerRotation , VPHAL_ROTATION_90 , Kdll_None }, 1730 { RID_SetKernel , IDR_VP_PA_Scale_Rotate_L0_90 , Kdll_None }, 1731 { RID_SetParserState , Parser_DestSurfIndex , Kdll_None }, 1732 1733 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1734 { RID_IsParserState , Parser_Rotation , Kdll_None }, 1735 { RID_IsLayerRotation , VPHAL_ROTATION_180 , Kdll_None }, 1736 { RID_SetKernel , IDR_VP_PA_Scale_Rotate_L0_180 , Kdll_None }, 1737 { RID_SetParserState , Parser_DestSurfIndex , Kdll_None }, 1738 1739 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1740 { RID_IsParserState , Parser_Rotation , Kdll_None }, 1741 { RID_IsLayerRotation , VPHAL_ROTATION_270 , Kdll_None }, 1742 { RID_SetKernel , IDR_VP_PA_Scale_Rotate_L0_270 , Kdll_None }, 1743 { RID_SetParserState , Parser_DestSurfIndex , Kdll_None }, 1744 1745 // Mirror 1746 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1747 { RID_IsParserState , Parser_Rotation , Kdll_None }, 1748 { RID_IsLayerRotation , VPHAL_MIRROR_HORIZONTAL , Kdll_None }, 1749 { RID_SetKernel , IDR_VP_PA_Scale_Mirror_H_L0 , Kdll_None }, 1750 { RID_SetParserState , Parser_DestSurfIndex , Kdll_None }, 1751 1752 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1753 { RID_IsParserState , Parser_Rotation , Kdll_None }, 1754 { RID_IsLayerRotation , VPHAL_MIRROR_VERTICAL , Kdll_None }, 1755 { RID_SetKernel , IDR_VP_PA_Scale_Mirror_V_L0 , Kdll_None }, 1756 { RID_SetParserState , Parser_DestSurfIndex , Kdll_None }, 1757 1758 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1759 { RID_IsParserState , Parser_Rotation , Kdll_None }, 1760 { RID_IsLayerRotation , VPHAL_ROTATE_90_MIRROR_VERTICAL , Kdll_None }, 1761 { RID_SetKernel , IDR_VP_PA_Scale_Rotate90_Mirror_V_L0 , Kdll_None }, 1762 { RID_SetParserState , Parser_DestSurfIndex , Kdll_None }, 1763 1764 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1765 { RID_IsParserState , Parser_Rotation , Kdll_None }, 1766 { RID_IsLayerRotation , VPHAL_ROTATE_90_MIRROR_HORIZONTAL , Kdll_None }, 1767 { RID_SetKernel , IDR_VP_PA_Scale_Rotate90_Mirror_H_L0 , Kdll_None }, 1768 { RID_SetParserState , Parser_DestSurfIndex , Kdll_None }, 1769 1770 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1771 { RID_IsParserState , Parser_Rotation , Kdll_None }, 1772 { RID_SetParserState , Parser_DestSurfIndex , Kdll_None }, 1773 1774 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1775 { RID_IsParserState , Parser_DestSurfIndex , Kdll_None }, 1776 { RID_IsDualOutput , true , Kdll_None }, 1777 { RID_SetKernel , IDR_VP_Set_Dest_Surf_Indexes_Secondary , Kdll_None }, 1778 { RID_SetParserState , Parser_WriteOutput , Kdll_None }, 1779 1780 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1781 { RID_IsParserState , Parser_DestSurfIndex , Kdll_None }, 1782 { RID_IsLayerFormat , Format_YUY2 , Kdll_Or }, 1783 { RID_IsLayerFormat , Format_YUYV , Kdll_Or }, 1784 { RID_IsLayerFormat , Format_YVYU , Kdll_Or }, 1785 { RID_IsLayerFormat , Format_UYVY , Kdll_Or }, 1786 { RID_IsLayerFormat , Format_VYUY , Kdll_Or }, 1787 { RID_IsLayerFormat , Format_NV21 , Kdll_Or }, 1788 { RID_IsLayerFormat , Format_PL2 , Kdll_Or }, 1789 { RID_IsLayerFormat , Format_R10G10B10A2 , Kdll_Or }, 1790 { RID_IsLayerFormat , Format_B10G10R10A2 , Kdll_None }, 1791 { RID_SetKernel , IDR_VP_Set_Dest_Surf_Indexes_Primary , Kdll_None }, 1792 { RID_SetParserState , Parser_WriteOutput , Kdll_None }, 1793 1794 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1795 { RID_IsParserState , Parser_DestSurfIndex , Kdll_None }, 1796 { RID_IsLayerFormat , Format_PL2 , Kdll_None }, 1797 { RID_SetKernel , IDR_VP_Set_Dest_Surf_Indexes_Primary , Kdll_None }, 1798 { RID_SetParserState , Parser_WriteOutput , Kdll_None }, 1799 1800 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1801 { RID_IsParserState , Parser_DestSurfIndex , Kdll_None }, 1802 { RID_SetParserState , Parser_WriteOutput , Kdll_None }, 1803 1804 // Write 1805 1806 // Colorfill only write rulesets has to be before regular rulesets. 1807 1808 // Write ARGB with 64B save kernel 1809 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1810 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 1811 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 1812 { RID_IsLayerFormat , Format_A8R8G8B8 , Kdll_Or }, 1813 { RID_IsLayerFormat , Format_A8B8G8R8 , Kdll_None }, 1814 { RID_Is64BSaveEnabled , true , Kdll_None }, 1815 { RID_IsLayerNumber , 0 , Kdll_None }, 1816 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 1817 { RID_SetKernel , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None }, 1818 { RID_SetKernel , IDR_VP_Colorfill_444Scale16 , Kdll_None }, 1819 { RID_SetKernel , IDR_VP_Save_444Scale16_RGB_64Byte , Kdll_None }, 1820 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 1821 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 1822 { RID_SetParserState , Parser_End , Kdll_None }, 1823 1824 // Write ARGB 1825 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1826 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 1827 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 1828 { RID_IsLayerFormat , Format_A8R8G8B8 , Kdll_Or }, 1829 { RID_IsLayerFormat , Format_A8B8G8R8 , Kdll_None }, 1830 { RID_IsLayerNumber , 0 , Kdll_None }, 1831 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 1832 { RID_SetKernel , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None }, 1833 { RID_SetKernel , IDR_VP_Colorfill_444Scale16 , Kdll_None }, 1834 { RID_SetKernel , IDR_VP_Save_444Scale16_RGB , Kdll_None }, 1835 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 1836 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 1837 { RID_SetParserState , Parser_End , Kdll_None }, 1838 1839 // Write RGB with 64B save kernel 1840 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1841 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 1842 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 1843 { RID_IsLayerFormat , Format_X8R8G8B8 , Kdll_None }, 1844 { RID_Is64BSaveEnabled , true , Kdll_None }, 1845 { RID_IsLayerNumber , 0 , Kdll_None }, 1846 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 1847 { RID_SetKernel , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None }, 1848 { RID_SetKernel , IDR_VP_Colorfill_444Scale16 , Kdll_None }, 1849 { RID_SetKernel , IDR_VP_Save_444Scale16_RGB_64Byte , Kdll_None }, 1850 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 1851 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 1852 { RID_SetParserState , Parser_End , Kdll_None }, 1853 1854 // Write RGB 1855 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1856 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 1857 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 1858 { RID_IsLayerFormat , Format_X8R8G8B8 , Kdll_None }, 1859 { RID_IsLayerNumber , 0 , Kdll_None }, 1860 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 1861 { RID_SetKernel , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None }, 1862 { RID_SetKernel , IDR_VP_Colorfill_444Scale16 , Kdll_None }, 1863 { RID_SetKernel , IDR_VP_Save_444Scale16_RGB , Kdll_None }, 1864 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 1865 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 1866 { RID_SetParserState , Parser_End , Kdll_None }, 1867 1868 // Write RGB16 1869 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1870 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 1871 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 1872 { RID_IsLayerFormat , Format_R5G6B5 , Kdll_None }, 1873 { RID_IsLayerNumber , 0 , Kdll_None }, 1874 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 1875 { RID_SetKernel , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None }, 1876 { RID_SetKernel , IDR_VP_Colorfill_444Scale16 , Kdll_None }, 1877 { RID_SetKernel , IDR_VP_Save_444Scale16_RGB16 , Kdll_None }, 1878 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 1879 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 1880 { RID_SetParserState , Parser_End , Kdll_None }, 1881 1882 // Write (R10G10B10A2 | B10G10R10A2) - With ColorFill. Note: R10G10B10A2 | B10G10R10A2 should be in front of Format_RGB32 1883 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1884 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 1885 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 1886 { RID_IsLayerFormat , Format_R10G10B10A2 , Kdll_Or }, 1887 { RID_IsLayerFormat , Format_B10G10R10A2 , Kdll_None }, 1888 { RID_IsLayerNumber , 0 , Kdll_None }, 1889 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 1890 { RID_SetKernel , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None }, 1891 { RID_SetKernel , IDR_VP_Colorfill_444Scale16 , Kdll_None }, 1892 { RID_SetKernel , IDR_VP_Save_444Scale16_R10G10B10 , Kdll_None }, 1893 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 1894 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 1895 { RID_SetParserState , Parser_End , Kdll_None }, 1896 1897 // Write AYUV with legacy save kernel 1898 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1899 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 1900 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 1901 { RID_IsLayerFormat , Format_AYUV , Kdll_None }, 1902 { RID_IsLayerNumber , 0 , Kdll_None }, 1903 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 1904 { RID_SetKernel , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None }, 1905 { RID_SetKernel , IDR_VP_Colorfill_444Scale16 , Kdll_None }, 1906 { RID_SetKernel , IDR_VP_Save_444Scale16_VUYA , Kdll_None }, 1907 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 1908 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 1909 { RID_SetParserState , Parser_End , Kdll_None }, 1910 1911 // Write (YUY2 | YUYV | YVYU | UYVY | VYUY) 1912 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1913 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 1914 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 1915 { RID_IsLayerFormat , Format_YUY2 , Kdll_Or }, 1916 { RID_IsLayerFormat , Format_YUYV , Kdll_Or }, 1917 { RID_IsLayerFormat , Format_YVYU , Kdll_Or }, 1918 { RID_IsLayerFormat , Format_UYVY , Kdll_Or }, 1919 { RID_IsLayerFormat , Format_VYUY , Kdll_None }, 1920 { RID_IsLayerNumber , 0 , Kdll_None }, 1921 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 1922 { RID_SetKernel , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None }, 1923 { RID_SetKernel , IDR_VP_Colorfill_444Scale16 , Kdll_None }, 1924 { RID_SetKernel , IDR_VP_Set_Dest_Surf_Indexes_Primary , Kdll_None }, 1925 { RID_SetKernel , IDR_VP_Save_444Scale16_PA , Kdll_None }, 1926 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 1927 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 1928 { RID_SetParserState , Parser_End , Kdll_None }, 1929 1930 // Write NV21 1931 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1932 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 1933 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 1934 { RID_IsLayerFormat , Format_NV21 , Kdll_None }, 1935 { RID_IsLayerNumber , 0 , Kdll_None }, 1936 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 1937 { RID_SetKernel , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None }, 1938 { RID_SetKernel , IDR_VP_Colorfill_444Scale16 , Kdll_None }, 1939 { RID_SetKernel , IDR_VP_Set_Dest_Surf_Indexes_Primary , Kdll_None }, 1940 { RID_SetKernel , IDR_VP_Save_444Scale16_NV21 , Kdll_None }, 1941 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 1942 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 1943 { RID_SetParserState , Parser_End , Kdll_None }, 1944 1945 // Write NV12 1946 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1947 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 1948 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 1949 { RID_IsLayerFormat , Format_PL2 , Kdll_None }, 1950 { RID_IsLayerNumber , 0 , Kdll_None }, 1951 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 1952 { RID_SetKernel , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None }, 1953 { RID_SetKernel , IDR_VP_Colorfill_444Scale16 , Kdll_None }, 1954 { RID_SetKernel , IDR_VP_Set_Dest_Surf_Indexes_Primary , Kdll_None }, 1955 { RID_SetKernel , IDR_VP_Save_444Scale16_NV12 , Kdll_None }, 1956 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 1957 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 1958 { RID_SetParserState , Parser_End , Kdll_None }, 1959 1960 // Write PL3 1961 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1962 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 1963 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 1964 { RID_IsLayerFormat , Format_PL3 , Kdll_None }, 1965 { RID_IsLayerNumber , 0 , Kdll_None }, 1966 { RID_IsSrc0ColorFill , ColorFill_True , Kdll_None }, 1967 { RID_SetKernel , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None }, 1968 { RID_SetKernel , IDR_VP_Colorfill_444Scale16 , Kdll_None }, 1969 { RID_SetKernel , IDR_VP_Save_444Scale16_PL3 , Kdll_None }, 1970 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 1971 { RID_SetSrc0ColorFill , ColorFill_False , Kdll_None }, 1972 { RID_SetParserState , Parser_End , Kdll_None }, 1973 1974 // Write (ARGB | ABGR) with 64B save kernel - Shuffle Save, 1975 // Save_AVS_ARGB can write out ABGR as well, based on CURBE settings. 1976 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1977 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 1978 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 1979 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 1980 { RID_IsLayerFormat , Format_A8R8G8B8 , Kdll_Or }, 1981 { RID_IsLayerFormat , Format_A8B8G8R8 , Kdll_None }, 1982 { RID_Is64BSaveEnabled , true , Kdll_None }, 1983 { RID_IsConstOutAlpha , false , Kdll_None }, 1984 { RID_SetKernel , IDR_VP_Save_444AVS16_ARGB_64Byte , Kdll_None }, 1985 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 1986 { RID_SetParserState , Parser_End , Kdll_None }, 1987 1988 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 1989 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 1990 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 1991 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 1992 { RID_IsLayerFormat , Format_A8R8G8B8 , Kdll_Or }, 1993 { RID_IsLayerFormat , Format_A8B8G8R8 , Kdll_None }, 1994 { RID_Is64BSaveEnabled , true , Kdll_None }, 1995 { RID_IsConstOutAlpha , true , Kdll_None }, 1996 { RID_SetKernel , IDR_VP_Save_444AVS16_RGB_64Byte , Kdll_None }, 1997 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 1998 { RID_SetParserState , Parser_End , Kdll_None }, 1999 2000 // Write (ARGB | ABGR) - Shuffle Save 2001 // Save_AVS_ARGB can write out ABGR as well, based on CURBE settings. 2002 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 2003 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 2004 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 2005 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 2006 { RID_IsLayerFormat , Format_A8R8G8B8 , Kdll_Or }, 2007 { RID_IsLayerFormat , Format_A8B8G8R8 , Kdll_None }, 2008 { RID_IsConstOutAlpha , false , Kdll_None }, 2009 { RID_SetKernel , IDR_VP_Save_444AVS16_ARGB , Kdll_None }, 2010 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 2011 { RID_SetParserState , Parser_End , Kdll_None }, 2012 2013 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 2014 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 2015 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 2016 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 2017 { RID_IsLayerFormat , Format_A8R8G8B8 , Kdll_Or }, 2018 { RID_IsLayerFormat , Format_A8B8G8R8 , Kdll_None }, 2019 { RID_IsConstOutAlpha , true , Kdll_None }, 2020 { RID_SetKernel , IDR_VP_Save_444AVS16_RGB , Kdll_None }, 2021 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 2022 { RID_SetParserState , Parser_End , Kdll_None }, 2023 2024 // Write (RGB | BGR) with 64B save kernel - Shuffle Save, 2025 // Save_AVS_RGB can write out BGR as well, based on CURBE settings. 2026 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 2027 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 2028 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 2029 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 2030 { RID_IsLayerFormat , Format_X8R8G8B8 , Kdll_Or }, 2031 { RID_IsLayerFormat , Format_X8B8G8R8 , Kdll_None }, 2032 { RID_Is64BSaveEnabled , true , Kdll_None }, 2033 { RID_SetKernel , IDR_VP_Save_444AVS16_RGB_64Byte , Kdll_None }, 2034 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 2035 { RID_SetParserState , Parser_End , Kdll_None }, 2036 2037 // Write (RGB | BGR) - Shuffle Save 2038 // Save_AVS_RGB can write out BGR as well, based on CURBE settings. 2039 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 2040 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 2041 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 2042 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 2043 { RID_IsLayerFormat , Format_X8R8G8B8 , Kdll_Or }, 2044 { RID_IsLayerFormat , Format_X8B8G8R8 , Kdll_None }, 2045 { RID_SetKernel , IDR_VP_Save_444AVS16_RGB , Kdll_None }, 2046 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 2047 { RID_SetParserState , Parser_End , Kdll_None }, 2048 2049 // Write RGB16 - Shuffle Save 2050 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 2051 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 2052 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 2053 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 2054 { RID_IsLayerFormat , Format_R5G6B5 , Kdll_None }, 2055 { RID_SetKernel , IDR_VP_Save_444AVS16_RGB16 , Kdll_None }, 2056 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 2057 { RID_SetParserState , Parser_End , Kdll_None }, 2058 2059 // Write (R10G10B10A2 | B10G10R10A2) - Shuffle Save 2060 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 2061 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 2062 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 2063 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 2064 { RID_IsLayerFormat , Format_R10G10B10A2 , Kdll_Or }, 2065 { RID_IsLayerFormat , Format_B10G10R10A2 , Kdll_None }, 2066 { RID_SetKernel , IDR_VP_Save_444AVS16_R10G10B10 , Kdll_None }, 2067 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 2068 { RID_SetParserState , Parser_End , Kdll_None }, 2069 2070 // Write AYUV - Shuffle Save 2071 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 2072 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 2073 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 2074 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 2075 { RID_IsLayerFormat , Format_AYUV , Kdll_None }, 2076 { RID_SetKernel , IDR_VP_Save_444AVS16_SrcAYUV , Kdll_None }, 2077 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 2078 { RID_SetParserState , Parser_End , Kdll_None }, 2079 2080 // Write (YUY2 | YUYV | YVYU | UYVY | VYUY) - Shuffle Save 2081 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 2082 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 2083 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 2084 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 2085 { RID_IsLayerFormat , Format_YUY2 , Kdll_Or }, 2086 { RID_IsLayerFormat , Format_YUYV , Kdll_Or }, 2087 { RID_IsLayerFormat , Format_YVYU , Kdll_Or }, 2088 { RID_IsLayerFormat , Format_UYVY , Kdll_Or }, 2089 { RID_IsLayerFormat , Format_VYUY , Kdll_None }, 2090 { RID_SetKernel , IDR_VP_Save_444AVS16_PA , Kdll_None }, 2091 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 2092 { RID_SetParserState , Parser_End , Kdll_None }, 2093 2094 // Write NV21 - Shuffle Save 2095 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 2096 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 2097 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 2098 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 2099 { RID_IsLayerFormat , Format_NV21 , Kdll_None }, 2100 { RID_SetKernel , IDR_VP_Save_444AVS16_NV21 , Kdll_None }, 2101 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 2102 { RID_SetParserState , Parser_End , Kdll_None }, 2103 2104 // Write NV12 - Shuffle Save 2105 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 2106 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 2107 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 2108 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 2109 { RID_IsLayerFormat , Format_PL2 , Kdll_None }, 2110 { RID_SetKernel , IDR_VP_Save_444AVS16_NV12 , Kdll_None }, 2111 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 2112 { RID_SetParserState , Parser_End , Kdll_None }, 2113 2114 // Write PL3 - Shuffle Save 2115 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 2116 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 2117 { RID_IsShuffling , Shuffle_RenderTarget , Kdll_None }, 2118 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 2119 { RID_IsLayerFormat , Format_PL3 , Kdll_None }, 2120 { RID_SetKernel , IDR_VP_Save_444AVS16_PL3 , Kdll_None }, 2121 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 2122 { RID_SetParserState , Parser_End , Kdll_None }, 2123 2124 // Write (ARGB | ABGR) with 64B save kernel - Normal Save 2125 // Sample_8x8 not used or already shuffled 2126 // Save_ARGB can write out ABGR as well, based on CURBE settings. 2127 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 2128 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 2129 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 2130 { RID_IsLayerFormat , Format_A8R8G8B8 , Kdll_Or }, 2131 { RID_IsLayerFormat , Format_A8B8G8R8 , Kdll_None }, 2132 { RID_Is64BSaveEnabled , true , Kdll_None }, 2133 { RID_IsConstOutAlpha , false , Kdll_None }, 2134 { RID_SetKernel , IDR_VP_Save_444Scale16_ARGB_64Byte , Kdll_None }, 2135 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 2136 { RID_SetParserState , Parser_End , Kdll_None }, 2137 2138 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 2139 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 2140 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 2141 { RID_IsLayerFormat , Format_A8R8G8B8 , Kdll_Or }, 2142 { RID_IsLayerFormat , Format_A8B8G8R8 , Kdll_None }, 2143 { RID_Is64BSaveEnabled , true , Kdll_None }, 2144 { RID_IsConstOutAlpha , true , Kdll_None }, 2145 { RID_SetKernel , IDR_VP_Save_444Scale16_RGB_64Byte , Kdll_None }, 2146 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 2147 { RID_SetParserState , Parser_End , Kdll_None }, 2148 2149 // Write (ARGB | ABGR) - Normal Save 2150 // Sample_8x8 not used or already shuffled 2151 // Save_ARGB can write out ABGR as well, based on CURBE settings. 2152 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 2153 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 2154 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 2155 { RID_IsLayerFormat , Format_A8R8G8B8 , Kdll_Or }, 2156 { RID_IsLayerFormat , Format_A8B8G8R8 , Kdll_None }, 2157 { RID_IsConstOutAlpha , false , Kdll_None }, 2158 { RID_SetKernel , IDR_VP_Save_444Scale16_ARGB , Kdll_None }, 2159 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 2160 { RID_SetParserState , Parser_End , Kdll_None }, 2161 2162 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 2163 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 2164 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 2165 { RID_IsLayerFormat , Format_A8R8G8B8 , Kdll_Or }, 2166 { RID_IsLayerFormat , Format_A8B8G8R8 , Kdll_None }, 2167 { RID_IsConstOutAlpha , true , Kdll_None }, 2168 { RID_SetKernel , IDR_VP_Save_444Scale16_RGB , Kdll_None }, 2169 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 2170 { RID_SetParserState , Parser_End , Kdll_None }, 2171 2172 // Write (RGB | BGR) with 64B save kernel - Normal Save 2173 // Sample_8x8 not used or already shuffled 2174 // Save_RGB can write out BGR as well, based on CURBE settings. 2175 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 2176 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 2177 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 2178 { RID_IsLayerFormat , Format_X8R8G8B8 , Kdll_Or }, 2179 { RID_IsLayerFormat , Format_X8B8G8R8 , Kdll_None }, 2180 { RID_Is64BSaveEnabled , true , Kdll_None }, 2181 { RID_SetKernel , IDR_VP_Save_444Scale16_RGB_64Byte , Kdll_None }, 2182 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 2183 { RID_SetParserState , Parser_End , Kdll_None }, 2184 2185 // Write (RGB | BGR) - Normal Save 2186 // Sample_8x8 not used or already shuffled 2187 // Save_RGB can write out BGR as well, based on CURBE settings. 2188 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 2189 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 2190 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 2191 { RID_IsLayerFormat , Format_X8R8G8B8 , Kdll_Or }, 2192 { RID_IsLayerFormat , Format_X8B8G8R8 , Kdll_None }, 2193 { RID_SetKernel , IDR_VP_Save_444Scale16_RGB , Kdll_None }, 2194 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 2195 { RID_SetParserState , Parser_End , Kdll_None }, 2196 2197 // Write RGB16 - Normal Save, Sample_8x8 not used or already shuffled 2198 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 2199 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 2200 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 2201 { RID_IsLayerFormat , Format_R5G6B5 , Kdll_None }, 2202 { RID_SetKernel , IDR_VP_Save_444Scale16_RGB16 , Kdll_None }, 2203 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 2204 { RID_SetParserState , Parser_End , Kdll_None }, 2205 2206 // Write (R10G10B10A2 | B10G10R10A2) - Normal Save 2207 // Sample_8x8 not used or already shuffled 2208 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 2209 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 2210 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 2211 { RID_IsLayerFormat , Format_R10G10B10A2 , Kdll_Or }, 2212 { RID_IsLayerFormat , Format_B10G10R10A2 , Kdll_None }, 2213 { RID_IsConstOutAlpha , false , Kdll_None }, 2214 { RID_SetKernel , IDR_VP_Save_444Scale16_R10G10B10A2 , Kdll_None }, 2215 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 2216 { RID_SetParserState , Parser_End , Kdll_None }, 2217 2218 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 2219 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 2220 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 2221 { RID_IsLayerFormat , Format_R10G10B10A2 , Kdll_Or }, 2222 { RID_IsLayerFormat , Format_B10G10R10A2 , Kdll_None }, 2223 { RID_IsConstOutAlpha , true , Kdll_None }, 2224 { RID_SetKernel , IDR_VP_Save_444Scale16_R10G10B10 , Kdll_None }, 2225 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 2226 { RID_SetParserState , Parser_End , Kdll_None }, 2227 2228 // Write AYUV - Normal Save, Sample_8x8 not used or already shuffled 2229 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 2230 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 2231 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 2232 { RID_IsLayerFormat , Format_AYUV , Kdll_None }, 2233 { RID_IsConstOutAlpha , false , Kdll_None }, 2234 { RID_SetKernel , IDR_VP_Save_444Scale16_SrcVUYA , Kdll_None }, 2235 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 2236 { RID_SetParserState , Parser_End , Kdll_None }, 2237 2238 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 2239 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 2240 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 2241 { RID_IsLayerFormat , Format_AYUV , Kdll_None }, 2242 { RID_IsConstOutAlpha , true , Kdll_None }, 2243 { RID_SetKernel , IDR_VP_Save_444Scale16_VUYA , Kdll_None }, 2244 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 2245 { RID_SetParserState , Parser_End , Kdll_None }, 2246 2247 // Write (YUY2 | YUYV | YVYU | UYVY | VYUY) - Normal Save, Sample_8x8 not used or already shuffled 2248 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 2249 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 2250 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 2251 { RID_IsLayerFormat , Format_YUY2 , Kdll_Or }, 2252 { RID_IsLayerFormat , Format_YUYV , Kdll_Or }, 2253 { RID_IsLayerFormat , Format_YVYU , Kdll_Or }, 2254 { RID_IsLayerFormat , Format_UYVY , Kdll_Or }, 2255 { RID_IsLayerFormat , Format_VYUY , Kdll_None }, 2256 { RID_SetKernel , IDR_VP_Save_444Scale16_PA , Kdll_None }, 2257 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 2258 { RID_SetParserState , Parser_End , Kdll_None }, 2259 2260 // Write NV21 - Normal Save, Sample_8x8 not used or already shuffled 2261 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 2262 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 2263 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 2264 { RID_IsLayerFormat , Format_NV21 , Kdll_None }, 2265 { RID_SetKernel , IDR_VP_Save_444Scale16_NV21 , Kdll_None }, 2266 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 2267 { RID_SetParserState , Parser_End , Kdll_None }, 2268 2269 // Write NV12 - Normal Save, Sample_8x8 not used or already shuffled 2270 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 2271 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 2272 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 2273 { RID_IsLayerFormat , Format_PL2 , Kdll_None }, 2274 { RID_SetKernel , IDR_VP_Save_444Scale16_NV12 , Kdll_None }, 2275 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 2276 { RID_SetParserState , Parser_End , Kdll_None }, 2277 2278 // Write PL3 - Normal Save, Sample_8x8 not used or already shuffled 2279 { RID_Op_NewEntry , RULE_DEFAULT , Kdll_None }, 2280 { RID_IsParserState , Parser_WriteOutput , Kdll_None }, 2281 { RID_IsLayerID , Layer_RenderTarget , Kdll_None }, 2282 { RID_IsLayerFormat , Format_PL3 , Kdll_None }, 2283 { RID_SetKernel , IDR_VP_Save_444Scale16_PL3 , Kdll_None }, 2284 { RID_SetKernel , IDR_VP_EOT , Kdll_None }, 2285 { RID_SetParserState , Parser_End , Kdll_None }, 2286 2287 // Last entry 2288 2289 { RID_Op_EOF , 0 , Kdll_None } 2290 }; 2291