| /* |
| * Copyright (c) 2018-2020, 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 vp_pipeline_common.h |
| //! \brief Defines the common interface for vp pipeline |
| //! this file is for the base interface which is shared by all features/vp Pipelines. |
| //! |
| #ifndef __VP_PIPELINE_COMMON_H__ |
| #define __VP_PIPELINE_COMMON_H__ |
| |
| #include "mos_utilities.h" |
| #include "vphal_common.h" |
| #include "renderhal.h" |
| #include "vphal.h" |
| |
| namespace vp |
| { |
| class VpPlatformInterface; |
| } |
| |
| using VP_PIPELINE_PARAMS = VPHAL_RENDER_PARAMS; |
| using PVP_PIPELINE_PARAMS = VPHAL_RENDER_PARAMS*; |
| using PCVP_PIPELINE_PARAMS = const VPHAL_RENDER_PARAMS*; |
| |
| struct VP_SURFACE |
| { |
| MOS_SURFACE *osSurface; //!< mos surface |
| bool isResourceOwner; //!< true if the resource is owned by current instance. |
| VPHAL_CSPACE ColorSpace; //!< Color Space |
| uint32_t ChromaSiting; //!< ChromaSiting |
| |
| bool bQueryVariance; //!< enable variance query. Not in use for internal surface |
| int32_t FrameID; //!< Not in use for internal surface |
| bool ExtendedGamut; //!< Extended Gamut Flag. Not in use for internal surface |
| VPHAL_PALETTE Palette; //!< Palette data. Not in use for internal surface |
| VPHAL_SURFACE_TYPE SurfType; //!< Surface type (context). Not in use for internal surface |
| uint32_t uFwdRefCount; //!< Not in use for internal surface |
| uint32_t uBwdRefCount; //!< Not in use for internal surface |
| VPHAL_SURFACE *pFwdRef; //!< Use VP_SURFACE instead of VPHAL_SURFACE later. Not in use for internal surface. |
| VPHAL_SURFACE *pBwdRef; //!< Use VP_SURFACE instead of VPHAL_SURFACE later. Not in use for internal surface. |
| VPHAL_SAMPLE_TYPE SampleType; //!< Interlaced/Progressive sample type. |
| // Use index of m_InputSurfaces for layerID. No need iLayerID here anymore. |
| RECT rcSrc; //!< Source rectangle |
| RECT rcDst; //!< Destination rectangle |
| RECT rcMaxSrc; //!< Max source rectangle |
| bool bVEBOXCroppingUsed; //!<Vebox crop case need use rcSrc as vebox input. |
| uint32_t bufferWidth; //!< 1D buffer Width, n/a if 2D surface |
| uint32_t bufferHeight; //!< 1D buffer Height, n/a if 2D surface |
| // Return true if no resource assigned to current vp surface. |
| bool IsEmpty(); |
| // Clean the vp surface to empty state. Only valid for false == isResourceOwner case. |
| MOS_STATUS Clean(); |
| }; |
| |
| struct _VP_MHWINTERFACE |
| { |
| // Internals |
| PLATFORM m_platform; |
| MEDIA_FEATURE_TABLE *m_skuTable; |
| MEDIA_WA_TABLE *m_waTable; |
| |
| // States |
| PMOS_INTERFACE m_osInterface; |
| PRENDERHAL_INTERFACE m_renderHal; |
| PMHW_VEBOX_INTERFACE m_veboxInterface; |
| MhwCpInterface *m_cpInterface; |
| PMHW_SFC_INTERFACE m_sfcInterface; |
| VphalRenderer *m_renderer; |
| PMHW_MI_INTERFACE m_mhwMiInterface; |
| vp::VpPlatformInterface *m_vpPlatformInterface; |
| |
| // Render GPU context/node |
| MOS_GPU_NODE m_renderGpuNode; |
| MOS_GPU_CONTEXT m_renderGpuContext; |
| |
| // vp Pipeline workload status report |
| PVPHAL_STATUS_TABLE m_statusTable; |
| }; |
| |
| // To define the features enabling on different engines |
| struct _VP_EXECUTE_CAPS |
| { |
| union { |
| uint32_t value; |
| struct { |
| uint32_t bVebox : 1; // Vebox needed; |
| uint32_t bSFC : 1; // SFC needed; |
| uint32_t bRender : 1; // Render Only needed; |
| // Vebox Features |
| uint32_t bDN : 1; // Vebox DN needed; |
| uint32_t bDI : 1; // Vebox DI enabled |
| uint32_t bDiProcess2ndField : 1; // Vebox DI enabled |
| uint32_t bIECP : 1; // Vebox IECP needed; |
| uint32_t bSTE : 1; // Vebox STE needed; |
| uint32_t bACE : 1; // Vebox ACE needed; |
| uint32_t bTCC : 1; // Vebox TCC needed; |
| uint32_t bCGC : 1; // Vebox CGC needed |
| uint32_t bProcamp : 1; // Vebox Procamp needed; |
| uint32_t bBeCSC : 1; // Vebox back end CSC needed; |
| uint32_t bLACE : 1; // Vebox LACE Needed; |
| uint32_t bQueryVariance : 1; |
| uint32_t bRefValid : 1; // Vebox Ref is Valid |
| uint32_t bSTD : 1; // Vebox LACE STD Needed; |
| uint32_t bDnKernelUpdate: 1; |
| uint32_t bVeboxSecureCopy : 1; |
| uint32_t bHDR3DLUT : 1; // Vebox 3DLUT needed; |
| |
| // SFC features |
| uint32_t bSfcCsc : 1; // Sfc Csc enabled |
| uint32_t bSfcRotMir : 1; // Sfc Rotation/Mirror needed; |
| uint32_t bSfcScaling : 1; // Sfc Scaling Needed; |
| uint32_t bSfcIef : 1; // Sfc Details Needed; |
| |
| // Render Features |
| uint32_t bComposite : 1; |
| uint32_t reserved : 7; // Reserved |
| }; |
| }; |
| }; |
| |
| typedef struct _VP_EngineEntry |
| { |
| union |
| { |
| struct |
| { |
| uint32_t bEnabled : 1; |
| uint32_t SfcNeeded : 2; |
| uint32_t VeboxNeeded : 2; |
| uint32_t RenderNeeded : 2; |
| uint32_t VeboxARGBOut : 1; |
| uint32_t VeboxARGB10bitOutput : 1; |
| uint32_t VeboxIECPNeeded : 1; |
| uint32_t DisableVeboxSFCMode : 1; |
| uint32_t FurtherProcessNeeded : 1; |
| uint32_t CompositionNeeded : 1; |
| uint32_t bypassVeboxFeatures : 1; |
| uint32_t reserve : 18; |
| }; |
| uint32_t value; |
| }; |
| }VP_EngineEntry; |
| |
| enum _VP_PACKET_ENGINE |
| { |
| VP_PACKET_COMP = 0, |
| VP_PACKET_VEBOX, |
| }; |
| |
| typedef enum _VP_COMP_BYPASS_MODE |
| { |
| VP_COMP_BYPASS_NOT_SET = 0xffffffff, |
| VP_COMP_BYPASS_DISABLED = 0x0, |
| VP_COMP_BYPASS_ENABLED = 0x1 |
| } VP_COMP_BYPASS_MODE, * PVP_COMP_BYPASS_MODE; |
| |
| // RESOURCE_ASSIGNMENT_HINT are feature parameters which will affect resource assignment. |
| // For caps existing in VP_EXECUTE_CAPS, they should not be added to RESOURCE_ASSIGNMENT_HINT. |
| union RESOURCE_ASSIGNMENT_HINT |
| { |
| struct |
| { |
| // Hint for DI |
| uint32_t bDi : 1; |
| uint32_t b60fpsDi : 1; |
| }; |
| uint32_t value; |
| }; |
| |
| using VP_MHWINTERFACE = _VP_MHWINTERFACE; |
| using PVP_MHWINTERFACE = VP_MHWINTERFACE * ; |
| using VP_EXECUTE_CAPS = _VP_EXECUTE_CAPS; |
| using VP_PACKET_ENGINE = _VP_PACKET_ENGINE; |
| using PVP_SURFACE = VP_SURFACE*; |
| |
| inline bool IsVeboxFeatureInuse(VP_EXECUTE_CAPS &caps) |
| { |
| return (caps.bVebox && (!caps.bSFC || caps.bDN || caps.bDI || caps.bIECP || caps.bSTE || |
| caps.bACE || caps.bTCC || caps.bBeCSC || caps.bQueryVariance || caps.bLACE || caps.bSTD || caps.bHDR3DLUT)); |
| } |
| |
| #endif |