/*
* Copyright (c) 2012-2018, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
//!
//! \file      hal_kernelrules_g11.c 
//! \brief         Fast Compositing Kernel DLL rules for gen11 
//!
#include "hal_kerneldll.h"  // Rule definitions
#include "vpkrnheader.h"    // Kernel IDs

extern const Kdll_RuleEntry g_KdllRuleTable_g11[] =
{
    // Kernel Setup

    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_Begin                       , Kdll_None },
    { RID_SetParserState   , Parser_SetRenderMethod             , Kdll_None },

    // Set rendering method

    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SetRenderMethod             , Kdll_None },
    { RID_IsRenderMethod   , RenderMethod_MediaObject           , Kdll_None },
    { RID_SetKernel        , IDR_VP_VP_Setup                    , Kdll_None },
    { RID_SetParserState   , Parser_SetupLayer0                 , Kdll_None },

    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SetRenderMethod             , Kdll_None },
    { RID_IsRenderMethod   , RenderMethod_MediaObjectWalker     , Kdll_None },
    { RID_SetKernel        , IDR_VP_VP_Setup_MediaWalker        , Kdll_None },
    { RID_SetParserState   , Parser_SetupLayer0                 , Kdll_None },

    // Set Layer 0

    // If first layer is RT, it's colorfill only case. Make sure.
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SetupLayer0                 , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },    // If it's RT
    { RID_IsLayerNumber    , 0                                  , Kdll_None },    // If it's first layer.
    { RID_SetParserState   , Parser_SetParamsTarget             , Kdll_None },

    // 1st layer
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SetupLayer0                 , Kdll_None },
    { RID_IsLayerNumber    , 0                                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Layer_0                 , Kdll_None },
    { RID_SetParserState   , Parser_SetParamsLayer0             , Kdll_None },

    // Set Layer 1

    // Please don't change the order of 2 rulesets below.
    // Single layer
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SetupLayer1                 , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Any                         , Kdll_None },  // Src0 must be valid for single layer case.
    { RID_SetNextLayer     , -1                                 , Kdll_None },  // backoff one layer
    { RID_SetParserState   , Parser_SampleLayer0                , Kdll_None },

    // Last layer
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SetupLayer1                 , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
    { RID_SetParserState   , Parser_SetParamsTarget             , Kdll_None },  // Setup CSC for render target

    // 2nd layer
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SetupLayer1                 , Kdll_None },
    { RID_IsLayerNumber    , 1                                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Layer_1                 , Kdll_None },
    { RID_SetParserState   , Parser_SetParamsLayer1             , Kdll_None },

    // 3rd layer
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SetupLayer1                 , Kdll_None },
    { RID_IsLayerNumber    , 2                                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Layer_2                 , Kdll_None },
    { RID_SetParserState   , Parser_SetParamsLayer1             , Kdll_None },

    // 4th layer
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SetupLayer1                 , Kdll_None },
    { RID_IsLayerNumber    , 3                                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Layer_3                 , Kdll_None },
    { RID_SetParserState   , Parser_SetParamsLayer1             , Kdll_None },

    // 5th layer
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SetupLayer1                 , Kdll_None },
    { RID_IsLayerNumber    , 4                                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Layer_4                 , Kdll_None },
    { RID_SetParserState   , Parser_SetParamsLayer1             , Kdll_None },

    // 6th layer
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SetupLayer1                 , Kdll_None },
    { RID_IsLayerNumber    , 5                                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Layer_5                 , Kdll_None },
    { RID_SetParserState   , Parser_SetParamsLayer1             , Kdll_None },

    // 7th layer
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SetupLayer1                 , Kdll_None },
    { RID_IsLayerNumber    , 6                                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Layer_6                 , Kdll_None },
    { RID_SetParserState   , Parser_SetParamsLayer1             , Kdll_None },

    // 8th layer
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SetupLayer1                 , Kdll_None },
    { RID_IsLayerNumber    , 7                                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Layer_7                 , Kdll_None },
    { RID_SetParserState   , Parser_SetParamsLayer1             , Kdll_None },

    // Setup Parameters for Layer 0

    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SetParamsLayer0             , Kdll_None },
    { RID_SetSrc0Format    , Format_Source                      , Kdll_None },
    { RID_SetSrc0Coeff     , CoeffID_Source                     , Kdll_None },
    { RID_SetSrc0Sampling  , Sample_Source                      , Kdll_None },
    { RID_SetSrc0Rotation  , Rotate_Source                      , Kdll_None },
    { RID_SetSrc0ColorFill , ColorFill_Source                   , Kdll_None },
    { RID_SetSrc0LumaKey   , LumaKey_Source                     , Kdll_None },
    { RID_SetSrc0Procamp   , Procamp_Source                     , Kdll_None },
    { RID_SetSrc0Processing, Process_Source                     , Kdll_None },
    { RID_SetNextLayer     , 0                                  , Kdll_None },
    { RID_SetParserState   , Parser_SetupLayer1                 , Kdll_None },

    // Setup Parameters for Layer 1

    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SetParamsLayer1             , Kdll_None },
    { RID_SetSrc1Format    , Format_Source                      , Kdll_None },
    { RID_SetSrc1Coeff     , CoeffID_Source                     , Kdll_None },
    { RID_SetSrc1Sampling  , Sample_Source                      , Kdll_None },
    { RID_SetSrc1Rotation  , Rotate_Source                      , Kdll_None },
    { RID_SetSrc1LumaKey   , LumaKey_Source                     , Kdll_None },
    { RID_SetSrc1SamplerLumaKey, LumaKey_Source                 , Kdll_None },
    { RID_SetSrc1Procamp   , Procamp_Source                     , Kdll_None },
    { RID_SetSrc1Processing, Process_Source                     , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer1                , Kdll_None },

    // Setup Parameters for Render Target

    //If only RT is present, it's colorfill only case. Go to write directly.
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SetParamsTarget             , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
    { RID_IsLayerNumber    , 0                                  , Kdll_None },
    { RID_SetSrc0ColorFill , ColorFill_Source                   , Kdll_None },
    { RID_SetSrc0Format    , Format_Source                      , Kdll_None },
    { RID_SetParserState   , Parser_WriteOutput                 , Kdll_None },

    // If CSC0 is done before Mix, then jump to SetupCSC1
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SetParamsTarget             , Kdll_None },
    { RID_IsCSCBeforeMix   , true                               , Kdll_None },
    { RID_SetTargetCspace  , CSpace_Source                      , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SetParamsTarget             , Kdll_None },
    { RID_SetSrc0Format    , Format_Source                      , Kdll_None },
    { RID_SetSrc0Coeff     , CoeffID_Source                     , Kdll_None },
    { RID_SetTargetCspace  , CSpace_Source                      , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC0                   , Kdll_None },

    // Sample Layer 0

    // Sample Y210 -> Src0
    // Rotate 90 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_Y210                        , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_0_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_1_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_2_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_3_Rot_90, Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Rotate 180 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
    { RID_IsSrc0Format     , Format_Y210                         , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                      , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_0_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_1_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_2_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_3_Rot_180, Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },

    // Rotate 270 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
    { RID_IsSrc0Format     , Format_Y210                         , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                      , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_0_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_1_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_2_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_3_Rot_270, Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },

    // Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
    { RID_IsSrc0Format     , Format_Y210                         , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                      , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_MIRROR_HORIZONTAL             , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_0        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_1        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_2        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_3        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },

    // Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
    { RID_IsSrc0Format     , Format_Y210                         , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                      , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_MIRROR_VERTICAL               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_0_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_1_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_2_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_3_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },

    // Rotate 90 Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
    { RID_IsSrc0Format     , Format_Y210                         , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                      , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_VERTICAL     , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_0_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_1_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_2_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_3_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },

    // Rotate 90 Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
    { RID_IsSrc0Format     , Format_Y210                         , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                      , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_HORIZONTAL   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_0_Rot_90 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_1_Rot_90 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_2_Rot_90 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_3_Rot_90 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },

    // No Rotation
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
    { RID_IsSrc0Format     , Format_Y210                         , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                      , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_0        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_1        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_2        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_3        , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },

    // Sample AVS
    // Y210 -> Src0
    // Rotate 90 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                                   , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                            , Kdll_None },
    { RID_IsSrc0Format     , Format_Y210                                    , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                             , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                              , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_0_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_1_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_2_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_3_Rot_90, Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done                        , Kdll_None },

    // Rotate 180 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                                    , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                             , Kdll_None },
    { RID_IsSrc0Format     , Format_Y210                                     , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                              , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                              , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_0_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_1_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_2_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_3_Rot_180, Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done                         , Kdll_None },

    // Rotate 270 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                                    , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                             , Kdll_None },
    { RID_IsSrc0Format     , Format_Y210                                     , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                              , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                              , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_0_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_1_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_2_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_3_Rot_270, Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done                         , Kdll_None },

    // Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                            , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                     , Kdll_None },
    { RID_IsSrc0Format     , Format_Y210                             , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                      , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_MIRROR_HORIZONTAL                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_0, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_1, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_2, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_3, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done                 , Kdll_None },

    // Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                                    , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                             , Kdll_None },
    { RID_IsSrc0Format     , Format_Y210                                     , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                              , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_MIRROR_VERTICAL                           , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_0_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_1_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_2_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_3_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                        , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done                         , Kdll_None },

    // Rotate 90 Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                                    , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                             , Kdll_None },
    { RID_IsSrc0Format     , Format_Y210                                     , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                              , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_VERTICAL                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_0_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_1_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_2_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_3_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                        , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done                         , Kdll_None },

    // Rotate 90 Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                                   , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                            , Kdll_None },
    { RID_IsSrc0Format     , Format_Y210                                    , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                             , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_HORIZONTAL              , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_0_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                       , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_1_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                       , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_2_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                       , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_3_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                       , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done                        , Kdll_None },

    // No Rotation
    { RID_Op_NewEntry      , RULE_DEFAULT                            , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                     , Kdll_None },
    { RID_IsSrc0Format     , Format_Y210                             , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                      , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_0, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_1, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_2, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_3, Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done                 , Kdll_None },

     // Sample Y410 -> Src0
    // Rotate 90 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
    { RID_IsSrc0Format     , Format_Y410                         , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_0_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_1_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_2_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_3_Rot_90, Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },

    // Rotate 180 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                  , Kdll_None },
    { RID_IsSrc0Format     , Format_Y410                          , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_034x                  , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_0_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_1_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_2_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_3_Rot_180, Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done              , Kdll_None },

    // Rotate 270 dgrees
    { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                  , Kdll_None },
    { RID_IsSrc0Format     , Format_Y410                          , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_034x                  , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_0_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_1_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_2_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_3_Rot_270, Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done              , Kdll_None },

    // Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
    { RID_IsSrc0Format     , Format_Y410                         , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_MIRROR_HORIZONTAL             , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_0       , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_1       , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_2       , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_3       , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },

    // Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                  , Kdll_None },
    { RID_IsSrc0Format     , Format_Y410                          , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_034x                  , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_MIRROR_VERTICAL                , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_0_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_1_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_2_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_3_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done              , Kdll_None },

    // Rotate 90 Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                  , Kdll_None },
    { RID_IsSrc0Format     , Format_Y410                          , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_034x                  , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_VERTICAL      , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_0_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_1_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_2_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_3_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done              , Kdll_None },

    // Rotate 90 Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
    { RID_IsSrc0Format     , Format_Y410                         , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_HORIZONTAL   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_0_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_1_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_2_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_3_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },

    // No Rotation
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
    { RID_IsSrc0Format     , Format_Y410                         , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_034x                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_0       , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_1       , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_2       , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_3       , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },

    // Sample_Unorm progressive scaling
    // Sample (RGB | AYUV | Packed YUV | YV12 | NV12 | P010 | 400P) -> Src0

    // Rotate 90 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_0_Rot_90  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_1_Rot_90  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_2_Rot_90  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_3_Rot_90  , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Rotate 180 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_0_Rot_180 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_1_Rot_180 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_2_Rot_180 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_3_Rot_180 , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Rotate 270 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_0_Rot_270 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_1_Rot_270 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_2_Rot_270 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_3_Rot_270 , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_MIRROR_HORIZONTAL            , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_0         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_1         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_2         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_3         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_MIRROR_VERTICAL              , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_0_Rot_180 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_1_Rot_180 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_2_Rot_180 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_3_Rot_180 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Rotate 90 Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_VERTICAL    , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_0_Rot_270 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_1_Rot_270 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_2_Rot_270 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_3_Rot_270 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Rotate 90 Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_HORIZONTAL  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_0_Rot_90  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_1_Rot_90  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_2_Rot_90  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_3_Rot_90  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // No Rotation
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_400P                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_0         , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_1         , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_2         , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_3         , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Sample NV12 (width or height is not a multiple of 4) -> Src0

    // Rotate 90 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_0_Rot_90 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_1_Rot_90 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_2_Rot_90 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_3_Rot_90 , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Rotate 180 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_0_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_1_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_2_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_3_Rot_180, Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Rotate 270 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_0_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_1_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_2_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_3_Rot_270, Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_MIRROR_HORIZONTAL            , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_0        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_1        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_2        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_3        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_MIRROR_VERTICAL              , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_0_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_1_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_2_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_3_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Rotate 90 Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_VERTICAL    , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_0_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_1_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_2_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_3_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Rotate 90 Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_HORIZONTAL  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_0_Rot_90 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_1_Rot_90 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_2_Rot_90 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_3_Rot_90 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // No Rotation
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_0        , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_1        , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_2        , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_3        , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Sample (PL3 | PL3_RGB) -> Src0

    // Rotate 90 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_0_Rot_90 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_1_Rot_90 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_2_Rot_90 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_3_Rot_90 , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Rotate 180 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_0_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_1_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_2_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_3_Rot_180, Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Rotate 270 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_0_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_1_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_2_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_3_Rot_270, Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_MIRROR_HORIZONTAL            , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_0        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_1        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_2        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_3        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_MIRROR_VERTICAL              , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_0_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_1_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_2_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_3_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Rotate 90 Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_VERTICAL    , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_0_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_1_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_2_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_3_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Rotate 90 Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_HORIZONTAL  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_0_Rot_90 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_1_Rot_90 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_2_Rot_90 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_3_Rot_90 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // No Rotation
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_0        , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_1        , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_2        , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_3        , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Sample progressive scaling
    // Sample 0.34x -> Src0
    // Rotate 90 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_400P                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc0Format     , Format_NV12                        , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_034x                , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_0_Rot_90 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_1_Rot_90 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_2_Rot_90 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_3_Rot_90 , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Rotate 180 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_400P                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc0Format     , Format_NV12                        , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_034x                , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_0_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_1_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_2_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_3_Rot_180, Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Rotate 270 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_400P                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc0Format     , Format_NV12                        , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_034x                , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_0_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_1_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_2_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_3_Rot_270, Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // No Rotation
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_400P                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc0Format     , Format_NV12                        , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_034x                , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_0        , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_1        , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_2        , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_3        , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Sample 0.34x PL2(width or height is not a multiple of 4) -> Src0
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_034x                , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_0       , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_1       , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_2       , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_3       , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Sample 0.34x PL3 -> Src0
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_034x                , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_0       , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_1       , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_2       , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_3       , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Sample AVS
    // Y410 -> Src0
    // Rotate 90 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                     , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0              , Kdll_None },
    { RID_IsSrc0Format     , Format_Y410                      , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS               , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_0_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_1_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_2_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_3_Rot_90, Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done          , Kdll_None },

    // Rotate 180 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                      , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0               , Kdll_None },
    { RID_IsSrc0Format     , Format_Y410                       , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_0_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_1_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_2_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_3_Rot_180, Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done           , Kdll_None },

    // Rotate 270 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                      , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0               , Kdll_None },
    { RID_IsSrc0Format     , Format_Y410                       , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_0_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_1_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_2_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_3_Rot_270, Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done           , Kdll_None },

    // Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT              , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0       , Kdll_None },
    { RID_IsSrc0Format     , Format_Y410               , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS        , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_MIRROR_HORIZONTAL   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_0, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_1, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_2, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_3, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV  , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done   , Kdll_None },

    // Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                      , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0               , Kdll_None },
    { RID_IsSrc0Format     , Format_Y410                       , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_MIRROR_VERTICAL             , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_0_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV          , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_1_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV          , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_2_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV          , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_3_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV          , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done           , Kdll_None },

    // Rotate 90 Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                      , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0               , Kdll_None },
    { RID_IsSrc0Format     , Format_Y410                       , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_VERTICAL   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_0_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV          , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_1_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV          , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_2_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV          , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_3_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV          , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done           , Kdll_None },

    // Rotate 90 Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                     , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0              , Kdll_None },
    { RID_IsSrc0Format     , Format_Y410                      , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS               , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_HORIZONTAL, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_0_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_1_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_2_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_3_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV         , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done          , Kdll_None },

    // No Rotation
    { RID_Op_NewEntry      , RULE_DEFAULT                     , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0              , Kdll_None },
    { RID_IsSrc0Format     , Format_Y410                      , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_0       , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_1       , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_2       , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_3       , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done          , Kdll_None },

    // Sample_8x8 progressive scaling
    // AVS Sample (RGB | AYUV | Packed YUV | YV12 |NV12 | P010 | 400P) -> Src0

    // Rotate 90 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_0_Rot_90    , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_1_Rot_90    , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_2_Rot_90    , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_3_Rot_90    , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Rotate 180 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_0_Rot_180   , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_1_Rot_180   , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_2_Rot_180   , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_3_Rot_180   , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Rotate 270 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_0_Rot_270   , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_1_Rot_270   , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_2_Rot_270   , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_3_Rot_270   , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_MIRROR_HORIZONTAL            , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_0           , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_1           , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_2           , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_3           , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_MIRROR_VERTICAL              , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_0_Rot_180   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_1_Rot_180   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_2_Rot_180   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_3_Rot_180   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Rotate 90 Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_VERTICAL    , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_0_Rot_270   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_1_Rot_270   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_2_Rot_270   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_3_Rot_270   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Rotate 90 Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_HORIZONTAL  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_0_Rot_90    , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_1_Rot_90    , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_2_Rot_90    , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_3_Rot_90    , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // No Rotation
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_0           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_1           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_2           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_3           , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // AVS Sample PL2(width or height is not a multiple of 4) -> Src0

    // Rotate 90 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_0_Rot_90   , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_1_Rot_90   , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_2_Rot_90   , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_3_Rot_90   , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Rotate 180 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_0_Rot_180  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_1_Rot_180  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_2_Rot_180  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_3_Rot_180  , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Rotate 270 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_0_Rot_270  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_1_Rot_270  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_2_Rot_270  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_3_Rot_270  , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_MIRROR_HORIZONTAL            , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_0          , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_1          , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_2          , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_3          , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_MIRROR_VERTICAL              , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_0_Rot_180  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_1_Rot_180  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_2_Rot_180  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_3_Rot_180  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Rotate 90 Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_VERTICAL    , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_0_Rot_270  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_1_Rot_270  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_2_Rot_270  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_3_Rot_270  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Rotate 90 Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_HORIZONTAL  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_0_Rot_90   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_1_Rot_90   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_2_Rot_90   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_3_Rot_90   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // No Rotation
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_0          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_1          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_2          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_3          , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // AVS Sample (PL3 | PL3_RGB) -> Src0

    // Rotate 90 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_0_Rot_90   , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_1_Rot_90   , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_2_Rot_90   , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_3_Rot_90   , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Rotate 180 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_0_Rot_180  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_1_Rot_180  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_2_Rot_180  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_3_Rot_180  , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Rotate 270 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_0_Rot_270  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_1_Rot_270  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_2_Rot_270  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_3_Rot_270  , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_MIRROR_HORIZONTAL            , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_0          , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_1          , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_2          , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_3          , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_MIRROR_VERTICAL              , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_0_Rot_180  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_1_Rot_180  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_2_Rot_180  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_3_Rot_180  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Rotate 90 Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_VERTICAL    , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_0_Rot_270  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_1_Rot_270  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_2_Rot_270  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_3_Rot_270  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Rotate 90 Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_HORIZONTAL  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_0_Rot_90   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_1_Rot_90   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_2_Rot_90   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_3_Rot_90   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // No Rotation
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_0          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_1          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_2          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_3          , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Sample_Unorm interlaced scaling
    // Interlaced Sample RGB -> Src0
    // jump to sampleLayer0SelectCSC to decide if CSC needed before Mix
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_RGB                         , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_iScaling                    , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444iScale16_Buf_0        , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444iScale16_Buf_1        , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444iScale16_Buf_2        , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444iScale16_Buf_3        , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0SelectCSC       , Kdll_None },

    // Sample (AYUV | Packed YUV | NV12 | 400P | P010) -> Src0
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc0Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_400P                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_P016                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_iScaling                    , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444iScale16_Buf_0        , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444iScale16_Buf_1        , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444iScale16_Buf_2        , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444iScale16_Buf_3        , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Mix             , Kdll_None },

    // Sample PL2(width or height is not a multiple of 4) -> Src0
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_iScaling                    , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444iScale16_Buf_0       , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444iScale16_Buf_1       , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444iScale16_Buf_2       , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444iScale16_Buf_3       , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Mix             , Kdll_None },

    // Sample PL3 -> Src0
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL3                         , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_iScaling                    , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444iScale16_Buf_0       , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444iScale16_Buf_1       , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444iScale16_Buf_2       , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444iScale16_Buf_3       , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Mix             , Kdll_None },

    // Sample PL3_RGB -> Src0
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_iScaling                    , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444iScale16_Buf_0       , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444iScale16_Buf_1       , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444iScale16_Buf_2       , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444iScale16_Buf_3       , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0SelectCSC       , Kdll_None },

    // Sample interlaced scaling
    // Sample 0.34x RGB -> Src0
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_RGB                         , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_iScaling_034x               , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444iDScale16_Buf_0       , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444iDScale16_Buf_1       , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444iDScale16_Buf_2       , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444iDScale16_Buf_3       , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0SelectCSC       , Kdll_None },

     // Sample 0.34x (AYUV | PA |400P | PL2 ) -> Src0
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc0Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_P016                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_400P                        , Kdll_Or   },
    { RID_IsSrc0Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc0Format     , Format_NV12                        , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_iScaling_034x               , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444iDScale16_Buf_0       , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444iDScale16_Buf_1       , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444iDScale16_Buf_2       , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444iDScale16_Buf_3       , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Mix             , Kdll_None },

    // Sample 0.34x PL2(width or height is not a multiple of 4) -> Src0
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_iScaling_034x               , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444iDScale16_Buf_0      , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444iDScale16_Buf_1      , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444iDScale16_Buf_2      , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444iDScale16_Buf_3      , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Mix             , Kdll_None },

    // Sample 0.34x PL3 -> Src0
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL3                         , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_iScaling_034x               , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444iDScale16_Buf_0      , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444iDScale16_Buf_1      , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444iDScale16_Buf_2      , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444iDScale16_Buf_3      , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Mix             , Kdll_None },

    // Sample 0.34x PL3_RGB -> Src0
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                , Kdll_None },
    { RID_IsSrc0Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_iScaling_034x               , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444iDScale16_Buf_0      , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444iDScale16_Buf_1      , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444iDScale16_Buf_2      , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444iDScale16_Buf_3      , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0SelectCSC       , Kdll_None },

    // Sample AVS ( NV12 | PA | YV12 | YV12_Planar | RGB ) -> Src0
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
    { RID_IsSrc0Format     , Format_AYUV                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_NV12                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PA                           , Kdll_Or   },
    { RID_IsSrc0Format     , Format_P010                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_P016                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_YV12                         , Kdll_Or   },
    { RID_IsSrc0Format     , Format_YV12_Planar                  , Kdll_Or   },
    { RID_IsSrc0Format     , Format_RGB                          , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_iScaling_AVS                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444iAVS16_Buf_0           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444iAVS16_Buf_1           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444iAVS16_Buf_2           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444iAVS16_Buf_3           , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Mix              , Kdll_None },

    // Sample AVS PL2 -> Src0
    // PL2_444iAVS is not supported, use PL2_444iScale kernel instead
    // May have quality difference than interlaced AVS scaling
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
    { RID_IsSrc0Format     , Format_PL2                          , Kdll_Or   },
    { RID_IsSrc0Format     , Format_PL2_UnAligned                , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_iScaling_AVS                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444iScale16_Buf_0        , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444iScale16_Buf_1        , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444iScale16_Buf_2        , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444iScale16_Buf_3        , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Mix              , Kdll_None },

     // Sample P010 -> Src0
    // use Dscale kernel for P010 format regardless of sampling type
    // Rotate 90 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
    { RID_IsSrc0Format     , Format_P010                         , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_90                   , Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_0_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_1_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_2_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_3_Rot_90, Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },

    // Rotate 180 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                  , Kdll_None },
    { RID_IsSrc0Format     , Format_P010                          , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_180                   , Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_0_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_1_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_2_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_3_Rot_180, Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done              , Kdll_None },

    // Rotate 270 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                  , Kdll_None },
    { RID_IsSrc0Format     , Format_P010                          , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATION_270                   , Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_0_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_1_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_2_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_3_Rot_270, Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done              , Kdll_None },

    // Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                 , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0          , Kdll_None },
    { RID_IsSrc0Format     , Format_P010                  , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_MIRROR_HORIZONTAL      , Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_0, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV     , Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_1, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV     , Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_2, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV     , Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_3, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV     , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done      , Kdll_None },

    // Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                  , Kdll_None },
    { RID_IsSrc0Format     , Format_P010                          , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_MIRROR_VERTICAL                , Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_0_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_1_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_2_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_3_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done              , Kdll_None },

    // Rotate 90 Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                  , Kdll_None },
    { RID_IsSrc0Format     , Format_P010                          , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_VERTICAL      , Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_0_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_1_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_2_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_3_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done              , Kdll_None },

    // Rotate 90 Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0                 , Kdll_None },
    { RID_IsSrc0Format     , Format_P010                         , Kdll_None },
    { RID_IsSrc0Rotation   , VPHAL_ROTATE_90_MIRROR_HORIZONTAL   , Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_0_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_1_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_2_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_3_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },

    // No Rotation
    { RID_Op_NewEntry      , RULE_DEFAULT                 , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0          , Kdll_None },
    { RID_IsSrc0Format     , Format_P010                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_0, Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_1, Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_2, Kdll_None },
    { RID_SetKernel        , IDR_VP_P010_444Dscale16_Buf_3, Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done      , Kdll_None },

    // Select CSC for layer 0 Mix only if Render Target format is NV12
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0SelectCSC       , Kdll_None },
    { RID_IsTargetFormat   , Format_NV12                        , Kdll_None },
    { RID_SetNextLayer     , 2                                  , Kdll_None },   // increase layer number to target layer
    { RID_SetCSCBeforeMix  , true                               , Kdll_None },
    { RID_SetSrc0Coeff     , CoeffID_Source                     , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC0                   , Kdll_None },

    // If Render Target is not NV12, simply call Intermix
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0SelectCSC       , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Mix             , Kdll_None },

    // Intermix the layer 0

    // Interlaced scaling, intermix the top and bottom fields
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0Mix              , Kdll_None },
    { RID_IsTargetFormat   , Format_NV12                         , Kdll_Or   },
    { RID_IsTargetFormat   , Format_P016                         , Kdll_Or   },
    { RID_IsTargetFormat   , Format_P010                         , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_iScaling                     , Kdll_Or   },
    { RID_IsSrc0Sampling   , Sample_iScaling_AVS                 , Kdll_Or   },
    { RID_IsSrc0Sampling   , Sample_iScaling_034x                , Kdll_None },
    { RID_SetKernel        , IDR_VP_Interlace_420_16_Buf_0       , Kdll_None },
    { RID_SetKernel        , IDR_VP_Interlace_420_16_Buf_1       , Kdll_None },
    { RID_SetKernel        , IDR_VP_Interlace_420_16_Buf_2       , Kdll_None },
    { RID_SetKernel        , IDR_VP_Interlace_420_16_Buf_3       , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done             , Kdll_None },

    // Interlaced scaling, intermix the top and bottom fields
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0Mix             , Kdll_None },
    { RID_SetKernel        , IDR_VP_Interlace_444_16_Buf_0      , Kdll_None },
    { RID_SetKernel        , IDR_VP_Interlace_444_16_Buf_1      , Kdll_None },
    { RID_SetKernel        , IDR_VP_Interlace_444_16_Buf_2      , Kdll_None },
    { RID_SetKernel        , IDR_VP_Interlace_444_16_Buf_3      , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done            , Kdll_None },

    // Sample Layer 0 Done

    // Src0 Sampling is complete -> Luma key + CSC
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                        , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0Done                 , Kdll_None },
    { RID_IsSrc0LumaKey    , LumaKey_True                            , Kdll_None },
    { RID_IsSrc0Coeff      , CoeffID_Any                             , Kdll_None },
    { RID_SetKernel        , IDR_VP_Compute_Lumakey_Buf0123          , Kdll_None },
    { RID_SetSrc0LumaKey   , LumaKey_False                           , Kdll_None },
    { RID_SetSrc0Sampling  , Sample_None                             , Kdll_None },
    { RID_SetSrc0Format    , Format_None                             , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC0                        , Kdll_None },

    // Src0 Sampling is complete -> Luma key + Colorfill
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                        , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0Done                 , Kdll_None },
    { RID_IsSrc0LumaKey    , LumaKey_True                            , Kdll_None },
    { RID_IsSrc0ColorFill  , ColorFill_True                          , Kdll_None },
    { RID_SetKernel        , IDR_VP_Compute_Lumakey_Buf0123          , Kdll_None },
    { RID_SetSrc0LumaKey   , LumaKey_False                           , Kdll_None },
    { RID_SetSrc0Sampling  , Sample_None                             , Kdll_None },
    { RID_SetSrc0Format    , Format_None                             , Kdll_None },
    { RID_SetParserState   , Parser_Colorfill                        , Kdll_None },


    // Src0 Sampling is complete -> CSC
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                        , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0Done                 , Kdll_None },
    { RID_IsSrc0Coeff      , CoeffID_Any                             , Kdll_None },
    { RID_SetSrc0Sampling  , Sample_None                             , Kdll_None },
    { RID_SetSrc0Format    , Format_None                             , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC0                        , Kdll_None },

    // Src0 Sampling is complete -> Colorfill
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                        , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0Done                 , Kdll_None },
    { RID_IsSrc0ColorFill  , ColorFill_True                          , Kdll_None },
    { RID_SetSrc0Sampling  , Sample_None                             , Kdll_None },
    { RID_SetSrc0Format    , Format_None                             , Kdll_None },
    { RID_SetParserState   , Parser_Colorfill                        , Kdll_None },

    // Src0 Sampling is complete -> no CSC or Colorfill
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                        , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer0Done                 , Kdll_None },
    { RID_SetSrc0Sampling  , Sample_None                             , Kdll_None },
    { RID_SetSrc0Format    , Format_None                             , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer1                     , Kdll_None },



    // SrcBlend + colorfill
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                        , Kdll_None },
    { RID_IsParserState    , Parser_Colorfill                        , Kdll_None },
    { RID_IsSrc0Processing , Process_SBlend                          , Kdll_None },
    { RID_SetKernel        , IDR_VP_Colorfill_444Scale16_SrcBlend    , Kdll_None },
    { RID_SetSrc0Processing, Process_None                            , Kdll_None },
    { RID_SetSrc0ColorFill , ColorFill_False                         , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer1                     , Kdll_None },

    // ConstBlend + colorfill
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                        , Kdll_None },
    { RID_IsParserState    , Parser_Colorfill                        , Kdll_None },
    { RID_IsSrc0Processing , Process_CBlend                          , Kdll_None },
    { RID_SetKernel        , IDR_VP_Colorfill_444Scale16_ConstBlend  , Kdll_None },
    { RID_SetSrc0Processing, Process_None                            , Kdll_None },
    { RID_SetSrc0ColorFill , ColorFill_False                         , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer1                     , Kdll_None },

    // ConstSrcBlend + colorfill
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                            , Kdll_None },
    { RID_IsParserState    , Parser_Colorfill                            , Kdll_None },
    { RID_IsSrc0Processing , Process_CSBlend                             , Kdll_None },
    { RID_SetKernel        , IDR_VP_Colorfill_444Scale16_ConstSrcBlend   , Kdll_None },
    { RID_SetSrc0Processing, Process_None                                , Kdll_None },
    { RID_SetSrc0ColorFill , ColorFill_False                             , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer1                         , Kdll_None },

    // PartBlend + colorfill
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                        , Kdll_None },
    { RID_IsParserState    , Parser_Colorfill                        , Kdll_None },
    { RID_IsSrc0Processing , Process_PBlend                          , Kdll_None },
    { RID_SetKernel        , IDR_VP_Colorfill_444Scale16_PartBlend   , Kdll_None },
    { RID_SetSrc0Processing, Process_None                            , Kdll_None },
    { RID_SetSrc0ColorFill , ColorFill_False                         , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer1                     , Kdll_None },

    // no AVS -> colorfill
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                    , Kdll_None },
    { RID_IsParserState    , Parser_Colorfill                    , Kdll_None },
    { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
    { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer1                 , Kdll_None },


    // Sample Layer 1

    // Sampling for layer0 is not complete, go back
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_Any                         , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0                , Kdll_None },

    // Sampling is complete for both layers, perform CSC
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_None                        , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_None                        , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Sample AVS
    // Y210 -> Src1
    // Rotate 90 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                                     , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                              , Kdll_None },
    { RID_IsSrc1Format     , Format_Y210                                      , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                               , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_90                                , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_4_Rot_90  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_5_Rot_90  , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                                 , Kdll_None },

    // Rotate 180 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                                     , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                              , Kdll_None },
    { RID_IsSrc1Format     , Format_Y210                                      , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                               , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_180                               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_4_Rot_180 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_5_Rot_180 , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                                 , Kdll_None },

    // Rotate 270 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                                     , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                              , Kdll_None },
    { RID_IsSrc1Format     , Format_Y210                                      , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                               , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_270                               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_4_Rot_270 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_5_Rot_270 , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                                 , Kdll_None },

    // Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                                     , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                              , Kdll_None },
    { RID_IsSrc1Format     , Format_Y210                                      , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                               , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_MIRROR_HORIZONTAL                          , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_4         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_5         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                         , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                                 , Kdll_None },

    // Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                                     , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                              , Kdll_None },
    { RID_IsSrc1Format     , Format_Y210                                      , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                               , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_MIRROR_VERTICAL                            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_4_Rot_180 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_5_Rot_180 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                         , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done                          , Kdll_None },

    // Rotate 90 Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                                     , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                              , Kdll_None },
    { RID_IsSrc1Format     , Format_Y210                                      , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                               , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_VERTICAL                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_4_Rot_270 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_5_Rot_270 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                         , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                                 , Kdll_None },

    // Rotate 90 Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                                     , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                              , Kdll_None },
    { RID_IsSrc1Format     , Format_Y210                                      , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                               , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_HORIZONTAL                , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_4_Rot_90  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_5_Rot_90  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                         , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                                 , Kdll_None },

    // No Rotation
    { RID_Op_NewEntry      , RULE_DEFAULT                                     , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                              , Kdll_None },
    { RID_IsSrc1Format     , Format_Y210                                      , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_4         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444_AVS16_Y_Scale16_UV_Buf_5         , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                                 , Kdll_None },

    // Sample Y210 -> Src1
    // Rotate 90 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                                   , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                            , Kdll_None },
    { RID_IsSrc1Format     , Format_Y210                                    , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                                 , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_90                              , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_4_Rot_90            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_5_Rot_90            , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                               , Kdll_None },

    // Rotate 180 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                                    , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                             , Kdll_None },
    { RID_IsSrc1Format     , Format_Y210                                     , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                                  , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_180                              , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_4_Rot_180            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_5_Rot_180            , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                                , Kdll_None },

    // Rotate 270 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                                    , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                             , Kdll_None },
    { RID_IsSrc1Format     , Format_Y210                                     , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                                  , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_270                              , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_4_Rot_270            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_5_Rot_270            , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                                , Kdll_None },

    // Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                            , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                     , Kdll_None },
    { RID_IsSrc1Format     , Format_Y210                             , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                          , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_MIRROR_HORIZONTAL                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_4            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_5            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                        , Kdll_None },

    // Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                                    , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                             , Kdll_None },
    { RID_IsSrc1Format     , Format_Y210                                     , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                                  , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_MIRROR_VERTICAL                           , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_4_Rot_180            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_5_Rot_180            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                        , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                                , Kdll_None },

    // Rotate 90 Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                                    , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                             , Kdll_None },
    { RID_IsSrc1Format     , Format_Y210                                     , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                                  , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_VERTICAL                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_4_Rot_270            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_5_Rot_270            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                        , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                                , Kdll_None },

    // Rotate 90 Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                                   , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                            , Kdll_None },
    { RID_IsSrc1Format     , Format_Y210                                    , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                                 , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_HORIZONTAL              , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_4_Rot_90            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                       , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_5_Rot_90            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV                       , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                               , Kdll_None },

    // No Rotation
    { RID_Op_NewEntry      , RULE_DEFAULT                            , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                     , Kdll_None },
    { RID_IsSrc1Format     , Format_Y210                             , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                          , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_4            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y210_444Scale16_Buf_5            , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                        , Kdll_None },

    // Sample (RGB | AYUV | Packed YUV | YV12 | NV12 | P010 | 400P) -> Src1

    // Rotate 90 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_90                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_4_Rot_90  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_5_Rot_90  , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Rotate 180 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_180                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_4_Rot_180 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_5_Rot_180 , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Rotate 270 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_270                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_4_Rot_270 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_5_Rot_270 , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_MIRROR_HORIZONTAL            , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_4         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_5         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_MIRROR_VERTICAL              , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_4_Rot_180 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_5_Rot_180 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Rotate 90 Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_VERTICAL    , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_4_Rot_270 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_5_Rot_270 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Rotate 90 Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_HORIZONTAL  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_4_Rot_90  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_5_Rot_90  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // No Rotation
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_4         , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444Scale16_Buf_5         , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Sample NV12(width or height is not a multiple of 4) -> Src1

    // Rotate 90 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_90                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_4_Rot_90 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_5_Rot_90 , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Rotate 180 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_180                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_4_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_5_Rot_180, Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Rotate 270 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_270                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_4_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_5_Rot_270, Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_MIRROR_HORIZONTAL            , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_4        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_5        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_MIRROR_VERTICAL              , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_4_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_5_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Rotate 90 Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_VERTICAL    , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_4_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_5_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Rotate 90 Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_HORIZONTAL  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_4_Rot_90 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_5_Rot_90 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // No Rotation
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_4        , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444Scale16_Buf_5        , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Sample (PL3 | PL3_RGB) -> Src1

    // Rotate 90 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_90                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_4_Rot_90 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_5_Rot_90 , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Rotate 180 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_180                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_4_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_5_Rot_180, Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Rotate 270 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_270                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_4_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_5_Rot_270, Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_MIRROR_HORIZONTAL            , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_4        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_5        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_MIRROR_VERTICAL              , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_4_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_5_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Rotate 90 Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_VERTICAL    , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_4_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_5_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Rotate 90 Mirror Horizonal
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_HORIZONTAL  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_4_Rot_90 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_5_Rot_90 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // No Rotation
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling                     , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_4        , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444Scale16_Buf_5        , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Sample AVS
    // Y410 -> Src1
    // Rotate 90 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                     , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1              , Kdll_None },
    { RID_IsSrc1Format     , Format_Y410                      , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS               , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_90                , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_4_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_5_Rot_90, Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1          , Kdll_None },

    // Rotate 180 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                      , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1               , Kdll_None },
    { RID_IsSrc1Format     , Format_Y410                       , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_180                , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_4_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_5_Rot_180, Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1           , Kdll_None },

    // Rotate 270 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                      , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1               , Kdll_None },
    { RID_IsSrc1Format     , Format_Y410                       , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_270                , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_4_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_5_Rot_270, Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1           , Kdll_None },

    // Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT              , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1       , Kdll_None },
    { RID_IsSrc1Format     , Format_Y410               , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS        , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_MIRROR_HORIZONTAL   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_4, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_5, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV  , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1   , Kdll_None },

    // Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                      , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1               , Kdll_None },
    { RID_IsSrc1Format     , Format_Y410                       , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_MIRROR_VERTICAL             , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_4_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV          , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_5_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV          , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer0Done           , Kdll_None },

    // Rotate 90 Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                      , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1               , Kdll_None },
    { RID_IsSrc1Format     , Format_Y410                       , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_VERTICAL   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_4_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV          , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_5_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV          , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                  , Kdll_None },

    // Rotate 90 Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                     , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1              , Kdll_None },
    { RID_IsSrc1Format     , Format_Y410                      , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS               , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_HORIZONTAL, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_4_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_5_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV         , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                 , Kdll_None },

    // No Rotation
    { RID_Op_NewEntry      , RULE_DEFAULT                     , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1              , Kdll_None },
    { RID_IsSrc1Format     , Format_Y410                      , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_4       , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444AVS16_Buf_5       , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                 , Kdll_None },

    // Sample Y410 -> Src1
    // Rotate 90 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                 , Kdll_None },
    { RID_IsSrc1Format     , Format_Y410                         , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_034x                 , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_90                   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_4_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_5_Rot_90, Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Rotate 180 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                  , Kdll_None },
    { RID_IsSrc1Format     , Format_Y410                          , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_034x                  , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_180                   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_4_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_5_Rot_180, Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                     , Kdll_None },

    // Rotate 270 dgrees
    { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                  , Kdll_None },
    { RID_IsSrc1Format     , Format_Y410                          , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_034x                  , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_270                   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_4_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_5_Rot_270, Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                     , Kdll_None },

    // Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                 , Kdll_None },
    { RID_IsSrc1Format     , Format_Y410                         , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_034x                 , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_MIRROR_HORIZONTAL             , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_4       , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_5       , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                    , Kdll_None },

    // Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                  , Kdll_None },
    { RID_IsSrc1Format     , Format_Y410                          , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_034x                  , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_MIRROR_VERTICAL                , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_4_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_5_Rot_180, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                     , Kdll_None },

    // Rotate 90 Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                         , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                  , Kdll_None },
    { RID_IsSrc1Format     , Format_Y410                          , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_034x                  , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_VERTICAL      , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_4_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_5_Rot_270, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV             , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                     , Kdll_None },

    // Rotate 90 Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                 , Kdll_None },
    { RID_IsSrc1Format     , Format_Y410                         , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_034x                 , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_HORIZONTAL   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_4_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_5_Rot_90, Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV            , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                    , Kdll_None },

    // No Rotation
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                 , Kdll_None },
    { RID_IsSrc1Format     , Format_Y410                         , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_034x                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_4       , Kdll_None },
    { RID_SetKernel        , IDR_VP_Y410_444DScale16_Buf_5       , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                    , Kdll_None },

    // Sample 0.34x -> Src1
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_034x                , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_4        , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444DScale16_Buf_5        , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer1Done            , Kdll_None },

    // Sample 0.34x PL2(width or height is not a multiple of 4) -> Src1
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_034x                , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_4       , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444DScale16_Buf_5       , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Sample 0.34x PL3 -> Src1
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_034x                , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_4       , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444DScale16_Buf_5       , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // AVS Sample (RGB | AYUV | Packed YUV | YV12 | NV12 | P010 | 400P) -> Src1

    // Rotate 90 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_90                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_4_Rot_90    , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_5_Rot_90    , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Rotate 180 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_180                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_4_Rot_180   , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_5_Rot_180   , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Rotate 270 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_270                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_4_Rot_270   , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_5_Rot_270   , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_MIRROR_HORIZONTAL            , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_4           , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_5           , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_MIRROR_VERTICAL              , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_4_Rot_180   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_5_Rot_180   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Rotate 90 Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_VERTICAL    , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_4_Rot_270   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_5_Rot_270   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Rotate 90 Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_HORIZONTAL  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_4_Rot_90    , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_5_Rot_90    , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUVA          , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // No Rotation
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_RGB                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_AYUV                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PA                          , Kdll_Or   },
    { RID_IsSrc1Format     , Format_YV12_Planar                 , Kdll_Or   },
    { RID_IsSrc1Format     , Format_NV12                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_P010                        , Kdll_Or   },
    { RID_IsSrc1Format     , Format_400P                        , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_4           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PA_444AVS16_Buf_5           , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // AVS Sample PL2(width or height is not a multiple of 4) -> Src1

    // Rotate 90 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_90                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_4_Rot_90   , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_5_Rot_90   , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Rotate 180 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_180                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_4_Rot_180  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_5_Rot_180  , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Rotate 270 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_270                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_4_Rot_270  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_5_Rot_270  , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_MIRROR_HORIZONTAL            , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_4          , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_5          , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_MIRROR_VERTICAL              , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_4_Rot_180  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_5_Rot_180  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Rotate 90 Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_VERTICAL    , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_4_Rot_270  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_5_Rot_270  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Rotate 90 Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_HORIZONTAL  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_4_Rot_90   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_5_Rot_90   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // No Rotation
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL2                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL2_UnAligned               , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_4          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL2_444AVS16_Buf_5          , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // AVS Sample (PL3 | PL3_RGB) -> Src1

    // Rotate 90 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_90                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_4_Rot_90   , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_5_Rot_90   , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Rotate 180 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_180                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_4_Rot_180  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_5_Rot_180  , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Rotate 270 degrees
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATION_270                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_4_Rot_270  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_5_Rot_270  , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_MIRROR_HORIZONTAL            , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_4          , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_5          , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_MIRROR_VERTICAL              , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_4_Rot_180  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_5_Rot_180  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Rotate 90 Mirror Vertical
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_VERTICAL    , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_4_Rot_270  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_5_Rot_270  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Rotate 90 Mirror Horizontal
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_IsLayerRotation  , VPHAL_ROTATE_90_MIRROR_HORIZONTAL  , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_4_Rot_90   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_5_Rot_90   , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Mirror_H_YUV           , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // No Rotation
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_SampleLayer1                , Kdll_None },
    { RID_IsSrc1Format     , Format_PL3                         , Kdll_Or   },
    { RID_IsSrc1Format     , Format_PL3_RGB                     , Kdll_None },
    { RID_IsSrc1Sampling   , Sample_Scaling_AVS                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_4          , Kdll_None },
    { RID_SetKernel        , IDR_VP_PL3_444AVS16_Buf_5          , Kdll_None },
    { RID_SetParserState   , Parser_SetupCSC1                   , Kdll_None },

    // Setup CSC coefficients for layer 0

    // CSC not present for Render Target
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SetupCSC0                   , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
    { RID_IsSrc0Coeff      , CoeffID_None                       , Kdll_None },
    { RID_SetParserState   , Parser_WriteOutput                 , Kdll_None },

    // Coeff  0 (CSC+PA), Set Curbe CSC Coefficients
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SetupCSC0                   , Kdll_None },
    { RID_IsSrc0Coeff      , CoeffID_0                          , Kdll_None },
    { RID_IsSetCoeffMode   , SetCSCCoeffMethod_Curbe            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_CURBE_CSC_Coeff         , Kdll_None },
    { RID_SetParserState   , Parser_ExecuteCSC0                 , Kdll_None },

    // Coeff  0 (CSC+PA), Set Patch CSC Coefficients
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SetupCSC0                   , Kdll_None },
    { RID_IsSrc0Coeff      , CoeffID_0                          , Kdll_None },
    { RID_IsSetCoeffMode   , SetCSCCoeffMethod_Patch            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Patched_CSC_Coeff       , Kdll_None },
    { RID_SetPatchData     , PatchKind_CSC_Coeff_Src0           , Kdll_None },      // Patch data source is CSC coeff for Src0
    { RID_SetPatch         , 6                                  , Kdll_None },      // 6 patches : Count (8), Src (8), Dest (16)
    { (Kdll_RuleID) 0x000c , 0x0400                             , Kdll_None },      //             04 00 000c
    { (Kdll_RuleID) 0x001c , 0x0404                             , Kdll_None },      //             04 04 001c
    { (Kdll_RuleID) 0x002c , 0x0408                             , Kdll_None },      //             04 08 002c
    { (Kdll_RuleID) 0x003c , 0x040C                             , Kdll_None },      //             04 0C 003c
    { (Kdll_RuleID) 0x004c , 0x0410                             , Kdll_None },      //             04 10 004c
    { (Kdll_RuleID) 0x005c , 0x0414                             , Kdll_None },      //             04 14 005c
    { RID_SetParserState   , Parser_ExecuteCSC0                 , Kdll_None },

    // Other Matrices ( cannot include PA)
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SetupCSC0                   , Kdll_None },
    { RID_IsSrc0Coeff      , CoeffID_Any                        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Patched_CSC_Coeff       , Kdll_None },
    { RID_SetPatchData     , PatchKind_CSC_Coeff_Src0           , Kdll_None },      // Patch data source is CSC coeff for Src0
    { RID_SetPatch         , 6                                  , Kdll_None },      // 6 patches : Count (8), Src (8), Dest (16)
    { (Kdll_RuleID) 0x000c , 0x0400                             , Kdll_None },      //             04 00 000c
    { (Kdll_RuleID) 0x001c , 0x0404                             , Kdll_None },      //             04 04 001c
    { (Kdll_RuleID) 0x002c , 0x0408                             , Kdll_None },      //             04 08 002c
    { (Kdll_RuleID) 0x003c , 0x040C                             , Kdll_None },      //             04 0C 003c
    { (Kdll_RuleID) 0x004c , 0x0410                             , Kdll_None },      //             04 10 004c
    { (Kdll_RuleID) 0x005c , 0x0414                             , Kdll_None },      //             04 14 005c
    { RID_SetParserState   , Parser_ExecuteCSC0                 , Kdll_None },

    // Setup CSC coefficients for layer 1

    // No color space conversion for any layer
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SetupCSC1                   , Kdll_None },
    { RID_IsSrc0Coeff      , CoeffID_None                       , Kdll_None },
    { RID_IsSrc1Coeff      , CoeffID_None                       , Kdll_None },
    { RID_SetParserState   , Parser_Lumakey                     , Kdll_None },

    // Quadrant 2,3 - CSC coefficients already set
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SetupCSC1                   , Kdll_None },
    { RID_IsQuadrant       , 2                                  , Kdll_None },
    { RID_SetParserState   , Parser_Lumakey                     , Kdll_None },

    // Coeff  0 (CSC+PA), Set Curbe CSC Coefficients
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SetupCSC1                   , Kdll_None },
    { RID_IsSrc1Coeff      , CoeffID_0                          , Kdll_None },
    { RID_IsSetCoeffMode   , SetCSCCoeffMethod_Curbe            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_CURBE_CSC_Coeff         , Kdll_None },
    { RID_SetParserState   , Parser_Lumakey                     , Kdll_None },

    // Coeff  0 (CSC+PA), Set Patch CSC Coefficients
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SetupCSC1                   , Kdll_None },
    { RID_IsSrc0Coeff      , CoeffID_0                          , Kdll_None },
    { RID_IsSetCoeffMode   , SetCSCCoeffMethod_Patch            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Patched_CSC_Coeff       , Kdll_None },
    { RID_SetPatchData     , PatchKind_CSC_Coeff_Src1           , Kdll_None },      // Patch data source is CSC coeff for Src0
    { RID_SetPatch         , 6                                  , Kdll_None },      // 6 patches : Count (8), Src (8), Dest (16)
    { (Kdll_RuleID) 0x000c , 0x0400                             , Kdll_None },      //             04 00 000c
    { (Kdll_RuleID) 0x001c , 0x0404                             , Kdll_None },      //             04 04 001c
    { (Kdll_RuleID) 0x002c , 0x0408                             , Kdll_None },      //             04 08 002c
    { (Kdll_RuleID) 0x003c , 0x040C                             , Kdll_None },      //             04 0C 003c
    { (Kdll_RuleID) 0x004c , 0x0410                             , Kdll_None },      //             04 10 004c
    { (Kdll_RuleID) 0x005c , 0x0414                             , Kdll_None },      //             04 14 005c
    { RID_SetParserState   , Parser_Lumakey                     , Kdll_None },

    // Other Matrices (cannot include PA)
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_SetupCSC1                   , Kdll_None },
    { RID_IsSrc1Coeff      , CoeffID_Any                        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Patched_CSC_Coeff       , Kdll_None },
    { RID_SetPatchData     , PatchKind_CSC_Coeff_Src1           , Kdll_None },      // Patch data source is CSC coeff for Src1
    { RID_SetPatch         , 6                                  , Kdll_None },      // 6 patches : Count (8), Src (8), Dest (16)
    { (Kdll_RuleID) 0x000c , 0x0400                             , Kdll_None },      //             04 00 000c
    { (Kdll_RuleID) 0x001c , 0x0404                             , Kdll_None },      //             04 04 001c
    { (Kdll_RuleID) 0x002c , 0x0408                             , Kdll_None },      //             04 08 002c
    { (Kdll_RuleID) 0x003c , 0x040C                             , Kdll_None },      //             04 0C 003c
    { (Kdll_RuleID) 0x004c , 0x0410                             , Kdll_None },      //             04 10 004c
    { (Kdll_RuleID) 0x005c , 0x0414                             , Kdll_None },      //             04 14 005c
    { RID_SetParserState   , Parser_Lumakey                     , Kdll_None },

    // Lumakey
    // lumakey and CSC not needed for current layer.
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_Lumakey                     , Kdll_None },
    { RID_IsSrc1LumaKey    , LumaKey_False                      , Kdll_None },
    { RID_IsSrc1Coeff      , CoeffID_None                       , Kdll_None },
    { RID_SetParserState   , Parser_ProcessLayer                , Kdll_None },

    // lumakey not needed, CSC needed
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_Lumakey                     , Kdll_None },
    { RID_IsSrc1LumaKey    , LumaKey_False                      , Kdll_None },
    { RID_IsSrc1Coeff      , CoeffID_Any                        , Kdll_None },
    { RID_SetParserState   , Parser_ExecuteCSC1                 , Kdll_None },

    // lumakey and CSC - both needed
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_Lumakey                     , Kdll_None },
    { RID_IsSrc1SamplerLumaKey, LumaKey_True                    , Kdll_None },
    { RID_IsSrc1Coeff      , CoeffID_Any                        , Kdll_None },
    { RID_SetParserState   , Parser_ExecuteCSC1                 , Kdll_None },

    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_Lumakey                     , Kdll_None },
    { RID_IsQuadrant       , 0                                  , Kdll_None },
    { RID_IsSrc1LumaKey    , LumaKey_True                       , Kdll_None },
    { RID_IsSrc1Coeff      , CoeffID_Any                        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Compute_Lumakey             , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Compute_Lumakey             , Kdll_None },
    { RID_SetParserState   , Parser_ExecuteCSC1                 , Kdll_None },

    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_Lumakey                     , Kdll_None },
    { RID_IsQuadrant       , 2                                  , Kdll_None },
    { RID_IsSrc1LumaKey    , LumaKey_True                       , Kdll_None },
    { RID_IsSrc1Coeff      , CoeffID_Any                        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Compute_Lumakey             , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Compute_Lumakey             , Kdll_None },
    { RID_SetParserState   , Parser_ExecuteCSC1                 , Kdll_None },

    // Lumakey needed, CSC not needed
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_Lumakey                     , Kdll_None },
    { RID_IsSrc1SamplerLumaKey, LumaKey_True                    , Kdll_None },
    { RID_IsSrc1Coeff      , CoeffID_None                       , Kdll_None },
    { RID_SetParserState   , Parser_ProcessLayer                , Kdll_None },

    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_Lumakey                     , Kdll_None },
    { RID_IsQuadrant       , 0                                  , Kdll_None },
    { RID_IsSrc1LumaKey    , LumaKey_True                       , Kdll_None },
    { RID_IsSrc1Coeff      , CoeffID_None                       , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Compute_Lumakey             , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Compute_Lumakey             , Kdll_None },
    { RID_SetParserState   , Parser_ProcessLayer                , Kdll_None },

    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_Lumakey                     , Kdll_None },
    { RID_IsQuadrant       , 2                                  , Kdll_None },
    { RID_IsSrc1LumaKey    , LumaKey_True                       , Kdll_None },
    { RID_IsSrc1Coeff      , CoeffID_None                       , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Compute_Lumakey             , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Compute_Lumakey             , Kdll_None },
    { RID_SetParserState   , Parser_ProcessLayer                , Kdll_None },

    // Perform CSC operation for layer 0
    // Src0 -> any to RGB, if Src0 is pre-multiplied content use CSC_Premultiplied
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_ExecuteCSC0                 , Kdll_None },
    { RID_IsSrc0Processing , Process_PBlend                     , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf0            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_CSC_Premultiplied      , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf1            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_CSC_Premultiplied      , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf2            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_CSC_Premultiplied      , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf3            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_CSC_Premultiplied      , Kdll_None },
    { RID_SetParserState   , Parser_ExecuteCSC0Done             , Kdll_None },

    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_ExecuteCSC0                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf0            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_CSC                    , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf1            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_CSC                    , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf2            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_CSC                    , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf3            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_CSC                    , Kdll_None },
    { RID_SetParserState   , Parser_ExecuteCSC0Done             , Kdll_None },

    // CSC0 is complete

    // Check whether go back to intermix layer 0
    // Please not change the order of these two rules
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_ExecuteCSC0Done             , Kdll_None },
    { RID_IsSrc0Sampling   , Sample_iScaling                    , Kdll_None },
    { RID_SetSrc0Coeff     , CoeffID_None                       , Kdll_None },
    { RID_SetNextLayer     , -2                                 , Kdll_None }, // jump back to main layer
    { RID_SetParserState   , Parser_SampleLayer0Mix             , Kdll_None },

    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                    , Kdll_None },
    { RID_IsParserState    , Parser_ExecuteCSC0Done              , Kdll_None },
    { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
    { RID_SetSrc0Coeff     , CoeffID_None                        , Kdll_None },
    { RID_SetParserState   , Parser_Colorfill                    , Kdll_None },

    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                    , Kdll_None },
    { RID_IsParserState    , Parser_ExecuteCSC0Done              , Kdll_None },
    { RID_SetSrc0Coeff     , CoeffID_None                        , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer1                 , Kdll_None },


    // Perform CSC operation for layer 1

    // Src1 -> YUV to RGB, if Src1 is pre-multiplied content use CSC_Premultiplied
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_ExecuteCSC1                 , Kdll_None },
    { RID_IsSrc1Processing , Process_PBlend                     , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf4            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_CSC_Premultiplied      , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf5            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_CSC_Premultiplied      , Kdll_None },
    { RID_SetParserState   , Parser_ExecuteCSC1Done             , Kdll_None },

    // Src1 -> YUV to RGB
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_ExecuteCSC1                 , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf4            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_CSC                    , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_CSC_Src_Buf5            , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_CSC                    , Kdll_None },
    { RID_SetParserState   , Parser_ExecuteCSC1Done             , Kdll_None },

    // Layer 1 CSC is complete - prepare operation
    // Quadrants 0,1 CSC complete
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_ExecuteCSC1Done             , Kdll_None },
    { RID_IsQuadrant       , 0                                  , Kdll_None },
    { RID_SetParserState   , Parser_ProcessLayer                , Kdll_None },

    // Quadrants 2,3 CSC complete
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_ExecuteCSC1Done             , Kdll_None },
    { RID_IsQuadrant       , 2                                  , Kdll_None },
    { RID_SetSrc1Coeff     , CoeffID_None                       , Kdll_None },
    { RID_SetParserState   , Parser_ProcessLayer                 , Kdll_None },

    // Process layer

    // Render target layer -> write output and finish
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
    { RID_SetParserState   , Parser_WriteOutput                 , Kdll_None },

    // Single layer -> skip processing - prepare CSC for Render Target
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
    { RID_IsSrc1Processing , Process_None                       , Kdll_None },
    { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },

    // Compositing quadrants 0,1
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
    { RID_IsQuadrant       , 0                                  , Kdll_None },
    { RID_IsSrc1Processing , Process_Composite                  , Kdll_None },
    { RID_IsSrc1SamplerLumaKey, LumaKey_True                    , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Prepare_LumaKey_SampleUnorm , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Composite              , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Prepare_LumaKey_SampleUnorm , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Composite              , Kdll_None },
    { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },

    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
    { RID_IsQuadrant       , 0                                  , Kdll_None },
    { RID_IsSrc1Processing , Process_Composite                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Composite              , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Composite              , Kdll_None },
    { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },

    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_ProcessLayer                 , Kdll_None },
    { RID_IsQuadrant       , 0                                   , Kdll_None },
    { RID_IsSrc1Processing , Process_XORComposite                , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4                , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_XOR_Mono_Composite      , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5                , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_XOR_Mono_Composite      , Kdll_None },
    { RID_SetParserState   , Parser_ProcessLayerDone             , Kdll_None },

    // Compositing quadrants 2,3
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
    { RID_IsQuadrant       , 2                                  , Kdll_None },
    { RID_IsSrc1Processing , Process_Composite                  , Kdll_None },
    { RID_IsSrc1SamplerLumaKey, LumaKey_True                    , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Prepare_LumaKey_SampleUnorm , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Composite              , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Prepare_LumaKey_SampleUnorm , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Composite              , Kdll_None },
    { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },

    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
    { RID_IsQuadrant       , 2                                  , Kdll_None },
    { RID_IsSrc1Processing , Process_Composite                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Composite              , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_Composite              , Kdll_None },
    { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },

    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_ProcessLayer                 , Kdll_None },
    { RID_IsQuadrant       , 2                                   , Kdll_None },
    { RID_IsSrc1Processing , Process_XORComposite                , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4                , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_XOR_Mono_Composite      , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5                , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_XOR_Mono_Composite      , Kdll_None },
    { RID_SetParserState   , Parser_ProcessLayerDone             , Kdll_None },

    // Constant Blending quadrants 0,1
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
    { RID_IsQuadrant       , 0                                  , Kdll_None },
    { RID_IsSrc1Processing , Process_CBlend                     , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_ConstBlend             , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_ConstBlend             , Kdll_None },
    { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },

    // Constant Blending quadrants 2,3
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
    { RID_IsQuadrant       , 2                                  , Kdll_None },
    { RID_IsSrc1Processing , Process_CBlend                     , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_ConstBlend             , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_ConstBlend             , Kdll_None },
    { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },

    // Source Blending quadrants 0,1
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
    { RID_IsQuadrant       , 0                                  , Kdll_None },
    { RID_IsSrc1Processing , Process_SBlend                     , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_SrcBlend               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_SrcBlend               , Kdll_None },
    { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },

    // Source Blending quadrants 2,3
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
    { RID_IsQuadrant       , 2                                  , Kdll_None },
    { RID_IsSrc1Processing , Process_SBlend                     , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_SrcBlend               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_SrcBlend               , Kdll_None },
    { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },

    // Source Blending (4-bits alpha) quadrants 0,1
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
    { RID_IsQuadrant       , 0                                  , Kdll_None },
    { RID_IsSrc1Processing , Process_SBlend_4bits               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_SrcBlend_4bits         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_SrcBlend_4bits         , Kdll_None },
    { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },

    // Source Blending (4-bits alpha) quadrants 2,3
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
    { RID_IsQuadrant       , 2                                  , Kdll_None },
    { RID_IsSrc1Processing , Process_SBlend_4bits               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_SrcBlend_4bits         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_SrcBlend_4bits         , Kdll_None },
    { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },

    // Partial Blending quadrants 0,1
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
    { RID_IsQuadrant       , 0                                  , Kdll_None },
    { RID_IsSrc1Processing , Process_PBlend                     , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_PartBlend              , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_PartBlend              , Kdll_None },
    { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },

    // Partial Blending quadrants 2,3
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
    { RID_IsQuadrant       , 2                                  , Kdll_None },
    { RID_IsSrc1Processing , Process_PBlend                     , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_PartBlend              , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_PartBlend              , Kdll_None },
    { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },

    // Constant multitply Sources Blending quadrants 0,1
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
    { RID_IsQuadrant       , 0                                  , Kdll_None },
    { RID_IsSrc1Processing , Process_CSBlend                    , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_ConstSrcBlend          , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_ConstSrcBlend          , Kdll_None },
    { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },

    // Constant multiply Sources Blending quadrants 2,3
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
    { RID_IsQuadrant       , 2                                  , Kdll_None },
    { RID_IsSrc1Processing , Process_CSBlend                    , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_ConstSrcBlend          , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_ConstSrcBlend          , Kdll_None },
    { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },

    // Constant multitply Partial Blending quadrants 0,1
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
    { RID_IsQuadrant       , 0                                  , Kdll_None },
    { RID_IsSrc1Processing , Process_CPBlend                    , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf0_Buf4               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_AlphaSrcBlendG         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf1_Buf5               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_AlphaSrcBlendG         , Kdll_None },
    { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },

    // Constant multiply Partial Blending quadrants 2,3
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_ProcessLayer                , Kdll_None },
    { RID_IsQuadrant       , 2                                  , Kdll_None },
    { RID_IsSrc1Processing , Process_CPBlend                    , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf2_Buf4               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_AlphaSrcBlendG         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Buf3_Buf5               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Call_AlphaSrcBlendG         , Kdll_None },
    { RID_SetParserState   , Parser_ProcessLayerDone            , Kdll_None },

    // Layer processing is complete

    // nothing to process - next layer
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_ProcessLayerDone            , Kdll_None },
    { RID_IsSrc1Processing , Process_None                       , Kdll_None },
    { RID_SetNextLayer     , 0                                  , Kdll_None },
    { RID_SetQuadrant      , 0                                  , Kdll_None },
    { RID_SetParserState   , Parser_SetupLayer1                 , Kdll_None },

    // Quadrants 0,1 are complete - sample/process quadrants 2,3
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_ProcessLayerDone            , Kdll_None },
    { RID_IsQuadrant       , 0                                  , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Sec_Half_Buf45          , Kdll_None },
    { RID_SetQuadrant      , 2                                  , Kdll_None },
    { RID_SetParserState   , Parser_SampleLayer1                , Kdll_None },

    // All quadrants are processed - start next layer
    { RID_Op_NewEntry      , RULE_NO_OVERRIDE                   , Kdll_None },
    { RID_IsParserState    , Parser_ProcessLayerDone            , Kdll_None },
    { RID_IsQuadrant       , 2                                  , Kdll_None },
    { RID_SetSrc1Sampling  , Sample_None                        , Kdll_None },
    { RID_SetSrc1Format    , Format_None                        , Kdll_None },
    { RID_SetSrc1Processing, Process_None                       , Kdll_None },
    { RID_SetNextLayer     , 0                                  , Kdll_None },
    { RID_SetQuadrant      , 0                                  , Kdll_None },
    { RID_SetParserState   , Parser_SetupLayer1                 , Kdll_None },

    // Write

    // Colorfill only write rulesets has to be before regular rulesets.
    // No support for AYUV output in colorfill only cases.

    // Write ARGB with 64B save kernel
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
    { RID_IsLayerFormat    , Format_A8B8G8R8                    , Kdll_Or   },
    { RID_IsLayerFormat    , Format_A8R8G8B8                    , Kdll_None },
    { RID_Is64BSaveEnabled , true                               , Kdll_None },
    { RID_IsLayerNumber    , 0                                  , Kdll_None },
    { RID_IsSrc0ColorFill  , ColorFill_True                     , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill, Kdll_None },
    { RID_SetKernel        , IDR_VP_Colorfill_444Scale16        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB_64Byte  , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
    { RID_SetSrc0ColorFill , ColorFill_False                    , Kdll_None },
    { RID_SetParserState   , Parser_End                         , Kdll_None },

    // Write ARGB with legacy save kernel
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
    { RID_IsLayerFormat    , Format_A8B8G8R8                    , Kdll_Or   },
    { RID_IsLayerFormat    , Format_A8R8G8B8                    , Kdll_None },
    { RID_IsLayerNumber    , 0                                  , Kdll_None },
    { RID_IsSrc0ColorFill  , ColorFill_True                     , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill, Kdll_None },
    { RID_SetKernel        , IDR_VP_Colorfill_444Scale16        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB         , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
    { RID_SetSrc0ColorFill , ColorFill_False                    , Kdll_None },
    { RID_SetParserState   , Parser_End                         , Kdll_None },

    // Write RGB with 64B save kernel
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
    { RID_IsLayerFormat    , Format_X8B8G8R8                    , Kdll_Or   },
    { RID_IsLayerFormat    , Format_X8R8G8B8                    , Kdll_None },
    { RID_Is64BSaveEnabled , true                               , Kdll_None },
    { RID_IsLayerNumber    , 0                                  , Kdll_None },
    { RID_IsSrc0ColorFill  , ColorFill_True                     , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill, Kdll_None },
    { RID_SetKernel        , IDR_VP_Colorfill_444Scale16        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB_64Byte  , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
    { RID_SetSrc0ColorFill , ColorFill_False                    , Kdll_None },
    { RID_SetParserState   , Parser_End                         , Kdll_None },

    // Write RGB with legacy save kernel
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
    { RID_IsLayerFormat    , Format_X8B8G8R8                    , Kdll_Or   },
    { RID_IsLayerFormat    , Format_X8R8G8B8                    , Kdll_None },
    { RID_IsLayerNumber    , 0                                  , Kdll_None },
    { RID_IsSrc0ColorFill  , ColorFill_True                     , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill, Kdll_None },
    { RID_SetKernel        , IDR_VP_Colorfill_444Scale16        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB         , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
    { RID_SetSrc0ColorFill , ColorFill_False                    , Kdll_None },
    { RID_SetParserState   , Parser_End                         , Kdll_None },

    // Write RGB16: input is RGB565 and output is RGB565
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
    { RID_IsLayerFormat    , Format_R5G6B5                      , Kdll_None },
    { RID_IsLayerNumber    , 0                                  , Kdll_None },
    { RID_IsSrc0ColorFill  , ColorFill_True                     , Kdll_None },
    { RID_IsDitherNeeded   , false                              , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill, Kdll_None },
    { RID_SetKernel        , IDR_VP_Colorfill_444Scale16        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB16       , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
    { RID_SetSrc0ColorFill , ColorFill_False                    , Kdll_None },
    { RID_SetParserState   , Parser_End                         , Kdll_None },

    // Write RGB16: input is not RGB565 and output is RGB565, dithering is needed
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
    { RID_IsLayerFormat    , Format_R5G6B5                      , Kdll_None },
    { RID_IsLayerNumber    , 0                                  , Kdll_None },
    { RID_IsSrc0ColorFill  , ColorFill_True                     , Kdll_None },
    { RID_IsDitherNeeded   , true                               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill, Kdll_None },
    { RID_SetKernel        , IDR_VP_Colorfill_444Scale16        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_Dither_RGB16, Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
    { RID_SetSrc0ColorFill , ColorFill_False                    , Kdll_None },
    { RID_SetParserState   , Parser_End                         , Kdll_None },

    // Write (R10G10B10A2 | B10G10R10A2) - With ColorFill. Note: R10G10B10A2 | B10G10R10A2 should be in front of Format_RGB32
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
    { RID_IsLayerFormat    , Format_R10G10B10A2                 , Kdll_Or   },
    { RID_IsLayerFormat    , Format_B10G10R10A2                 , Kdll_None },
    { RID_IsLayerNumber    , 0                                  , Kdll_None },
    { RID_IsSrc0ColorFill  , ColorFill_True                     , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill, Kdll_None },
    { RID_SetKernel        , IDR_VP_Colorfill_444Scale16        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_R10G10B10   , Kdll_None },
    { RID_SetSrc0ColorFill , ColorFill_False                    , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
    { RID_SetParserState   , Parser_End                         , Kdll_None },

    // Write AYUV with legacy save kernel
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
    { RID_IsLayerFormat    , Format_AYUV                         , Kdll_None },
    { RID_IsLayerNumber    , 0                                   , Kdll_None },
    { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None },
    { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_VUYA         , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
    { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
    { RID_SetParserState   , Parser_End                          , Kdll_None },

    // Write (YUY2 | YUYV | YVYU | UYVY | VYUY)
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
    { RID_IsLayerFormat    , Format_YUY2                         , Kdll_Or   },
    { RID_IsLayerFormat    , Format_YUYV                         , Kdll_Or   },
    { RID_IsLayerFormat    , Format_YVYU                         , Kdll_Or   },
    { RID_IsLayerFormat    , Format_UYVY                         , Kdll_Or   },
    { RID_IsLayerFormat    , Format_VYUY                         , Kdll_None },
    { RID_IsLayerNumber    , 0                                   , Kdll_None },
    { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None },
    { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_PA           , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
    { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
    { RID_SetParserState   , Parser_End                          , Kdll_None },

    // Write NV12
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
    { RID_IsLayerFormat    , Format_NV12                         , Kdll_None },
    { RID_IsLayerNumber    , 0                                   , Kdll_None },
    { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None },
    { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_NV12         , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
    { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
    { RID_SetParserState   , Parser_End                          , Kdll_None },

    // Write NV21
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
    { RID_IsLayerFormat    , Format_NV21                         , Kdll_None },
    { RID_IsLayerNumber    , 0                                   , Kdll_None },
    { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None },
    { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_NV21         , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
    { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
    { RID_SetParserState   , Parser_End                          , Kdll_None },

    // Write 400P
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
    { RID_IsLayerFormat    , Format_400P                         , Kdll_None },
    { RID_IsLayerNumber    , 0                                   , Kdll_None },
    { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None },
    { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_PLY          , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
    { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
    { RID_SetParserState   , Parser_End                          , Kdll_None },

    // Write PL3
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
    { RID_IsLayerFormat    , Format_PL3                         , Kdll_None },
    { RID_IsLayerNumber    , 0                                  , Kdll_None },
    { RID_IsSrc0ColorFill  , ColorFill_True                     , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill, Kdll_None },
    { RID_SetKernel        , IDR_VP_Colorfill_444Scale16        , Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_PL3         , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
    { RID_SetSrc0ColorFill , ColorFill_False                    , Kdll_None },
    { RID_SetParserState   , Parser_End                         , Kdll_None },

    // Write (ARGB | ABGR) - Normal Save with 64B save kernel,
    //                       Sample_8x8 not used or already shuffled
    //                       Save_ARGB can write out ABGR as well, based on CURBE settings.
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
    { RID_IsLayerFormat    , Format_A8R8G8B8                    , Kdll_Or   },
    { RID_IsLayerFormat    , Format_A8B8G8R8                    , Kdll_None },
    { RID_IsConstOutAlpha  , false                              , Kdll_None },
    { RID_Is64BSaveEnabled , true                               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_ARGB_64Byte , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
    { RID_SetParserState   , Parser_End                         , Kdll_None },

    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
    { RID_IsLayerFormat    , Format_A8R8G8B8                    , Kdll_Or   },
    { RID_IsLayerFormat    , Format_A8B8G8R8                    , Kdll_None },
    { RID_Is64BSaveEnabled , true                               , Kdll_None },
    { RID_IsConstOutAlpha  , true                               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB_64Byte  , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
    { RID_SetParserState   , Parser_End                         , Kdll_None },

    // Write (ARGB | ABGR) - Normal Save with legacy save kernel,
    //                       Sample_8x8 not used or already shuffled
    //                       Save_ARGB can write out ABGR as well, based on CURBE settings.
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
    { RID_IsLayerFormat    , Format_A8R8G8B8                    , Kdll_Or   },
    { RID_IsLayerFormat    , Format_A8B8G8R8                    , Kdll_None },
    { RID_IsConstOutAlpha  , false                              , Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_ARGB        , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
    { RID_SetParserState   , Parser_End                         , Kdll_None },

    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
    { RID_IsLayerFormat    , Format_A8R8G8B8                    , Kdll_Or   },
    { RID_IsLayerFormat    , Format_A8B8G8R8                    , Kdll_None },
    { RID_IsConstOutAlpha  , true                               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB         , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
    { RID_SetParserState   , Parser_End                         , Kdll_None },

    // Write (RGB | BGR) - Normal Save with 64B save kernel,
    //                     Sample_8x8 not used or already shuffled
    //                     Save_RGB can write out BGR as well, based on CURBE settings.
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
    { RID_IsLayerFormat    , Format_X8R8G8B8                    , Kdll_Or   },
    { RID_IsLayerFormat    , Format_X8B8G8R8                    , Kdll_None },
    { RID_Is64BSaveEnabled , true                               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB_64Byte  , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
    { RID_SetParserState   , Parser_End                         , Kdll_None },

    // Write (RGB | BGR) - Normal Save with legacy save kernel,
    //                     Sample_8x8 not used or already shuffled
    //                     Save_RGB can write out BGR as well, based on CURBE settings.
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
    { RID_IsLayerFormat    , Format_X8R8G8B8                    , Kdll_Or   },
    { RID_IsLayerFormat    , Format_X8B8G8R8                    , Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB         , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
    { RID_SetParserState   , Parser_End                         , Kdll_None },

    // Write RGB16 - Normal Save, Sample_8x8 not used or already shuffled
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
    { RID_IsLayerFormat    , Format_R5G6B5                      , Kdll_None },
    { RID_IsDitherNeeded   , false                              , Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_RGB16       , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
    { RID_SetParserState   , Parser_End                         , Kdll_None },

    // Write RGB16 - Normal Save, Sample_8x8 not used or already shuffled
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
    { RID_IsLayerFormat    , Format_R5G6B5                      , Kdll_None },
    { RID_IsDitherNeeded   , true                               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_Dither_RGB16, Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
    { RID_SetParserState   , Parser_End                         , Kdll_None },

    // Write (R10G10B10A2 | B10G10R10A2) - Normal Save
    // Sample_8x8 not used or already shuffled
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
    { RID_IsLayerFormat    , Format_R10G10B10A2                 , Kdll_Or   },
    { RID_IsLayerFormat    , Format_B10G10R10A2                 , Kdll_None },
    { RID_IsConstOutAlpha  , false                              , Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_R10G10B10A2 , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
    { RID_SetParserState   , Parser_End                         , Kdll_None },

    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
    { RID_IsLayerFormat    , Format_R10G10B10A2                 , Kdll_Or   },
    { RID_IsLayerFormat    , Format_B10G10R10A2                 , Kdll_None },
    { RID_IsConstOutAlpha  , true                               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_R10G10B10   , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
    { RID_SetParserState   , Parser_End                         , Kdll_None },

    // Write AYUV - Normal Save, Sample_8x8 not used or already shuffled
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
    { RID_IsLayerFormat    , Format_AYUV                        , Kdll_None },
    { RID_IsConstOutAlpha  , false                              , Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_SrcVUYA     , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
    { RID_SetParserState   , Parser_End                         , Kdll_None },

    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
    { RID_IsLayerFormat    , Format_AYUV                        , Kdll_None },
    { RID_IsConstOutAlpha  , true                               , Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_VUYA        , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
    { RID_SetParserState   , Parser_End                         , Kdll_None },

    // Write (YUY2 | YUYV | YVYU | UYVY | VYUY) - Normal Save, Sample_8x8 not used or already shuffled
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
    { RID_IsLayerFormat    , Format_YUY2                         , Kdll_Or   },
    { RID_IsLayerFormat    , Format_YUYV                         , Kdll_Or   },
    { RID_IsLayerFormat    , Format_YVYU                         , Kdll_Or   },
    { RID_IsLayerFormat    , Format_UYVY                         , Kdll_Or   },
    { RID_IsLayerFormat    , Format_VYUY                         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_PA           , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
    { RID_SetParserState   , Parser_End                          , Kdll_None },

    // Write NV12 - Normal Save, Sample_8x8 not used or already shuffled
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
    { RID_IsLayerFormat    , Format_NV12                         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_NV12         , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
    { RID_SetParserState   , Parser_End                          , Kdll_None },

    // Write NV21 - Normal Save, Sample_8x8 not used or already shuffled
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
    { RID_IsLayerFormat    , Format_NV21                         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_NV21         , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
    { RID_SetParserState   , Parser_End                          , Kdll_None },

    // Write 400P - Normal Save, Sample_8x8 not used or already shuffled
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
    { RID_IsLayerFormat    , Format_400P                         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_PLY          , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
    { RID_SetParserState   , Parser_End                          , Kdll_None },

    // Write PL3 - Normal Save, Sample_8x8 not used or already shuffled
    { RID_Op_NewEntry      , RULE_DEFAULT                       , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                 , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                 , Kdll_None },
    { RID_IsLayerFormat    , Format_PL3                         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_PL3         , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                         , Kdll_None },
    { RID_SetParserState   , Parser_End                         , Kdll_None },

    // Write P010 - Color fill, Sample_8x8 not used or already shuffled
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
    { RID_IsLayerFormat    , Format_P010                         , Kdll_None },
    { RID_IsLayerNumber    , 0                                   , Kdll_None },
    { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None },
    { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_P010         , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
    { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
    { RID_SetParserState   , Parser_End                          , Kdll_None },

    // Write P010 - Normal Save, Sample_8x8 not used or already shuffled
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
    { RID_IsLayerFormat    , Format_P010                         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_P010         , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
    { RID_SetParserState   , Parser_End                          , Kdll_None },

    // Write Y410 - Color fill, Sample_8x8 not used or already shuffled
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
    { RID_IsLayerFormat    , Format_Y410                         , Kdll_None },
    { RID_IsLayerNumber    , 0                                   , Kdll_None },
    { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None },
    { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_Y410         , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
    { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
    { RID_SetParserState   , Parser_End                          , Kdll_None },

    // Write Y410 - Normal Save, Sample_8x8 not used or already shuffled
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
    { RID_IsLayerFormat    , Format_Y410                         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_Y410         , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
    { RID_SetParserState   , Parser_End                          , Kdll_None },

    // Write Y210 - Color fill, Sample_8x8 not used or already shuffled
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
    { RID_IsLayerFormat    , Format_Y210                         , Kdll_None },
    { RID_IsLayerNumber    , 0                                   , Kdll_None },
    { RID_IsSrc0ColorFill  , ColorFill_True                      , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Scale_Buf_0123_Colorfill , Kdll_None },
    { RID_SetKernel        , IDR_VP_Colorfill_444Scale16         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_Y210         , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
    { RID_SetSrc0ColorFill , ColorFill_False                     , Kdll_None },
    { RID_SetParserState   , Parser_End                          , Kdll_None },

    // Write Y210 - Normal Save, Sample_8x8 not used or already shuffled
    { RID_Op_NewEntry      , RULE_DEFAULT                        , Kdll_None },
    { RID_IsParserState    , Parser_WriteOutput                  , Kdll_None },
    { RID_IsLayerID        , Layer_RenderTarget                  , Kdll_None },
    { RID_IsLayerFormat    , Format_Y210                         , Kdll_None },
    { RID_SetKernel        , IDR_VP_Set_Dest_Surf_Indexes_Primary, Kdll_None },
    { RID_SetKernel        , IDR_VP_Save_444Scale16_Y210         , Kdll_None },
    { RID_SetKernel        , IDR_VP_EOT                          , Kdll_None },
    { RID_SetParserState   , Parser_End                          , Kdll_None },

    // Last entry

    { RID_Op_EOF           , 0                                  , Kdll_None }
};
