1 /*
2 * Copyright (c) 2014-2020, Intel Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included
12 * in all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20 * OTHER DEALINGS IN THE SOFTWARE.
21 */
22 //!
23 //! \file     vphal_render_vebox_util_base.c
24 //! \brief    Common utility interface used in Vebox
25 //! \details  Common utility interface used in Vebox which are platform independent
26 //!
27 #include "vphal_render_vebox_util_base.h"
28 
VPHal_VpHalCspace2MhwCspace(VPHAL_CSPACE cspace)29 MHW_CSPACE VPHal_VpHalCspace2MhwCspace(VPHAL_CSPACE cspace)
30 {
31     switch (cspace)
32     {
33         case CSpace_Source:
34             return MHW_CSpace_Source;
35 
36         case CSpace_RGB:
37             return MHW_CSpace_RGB;
38 
39         case CSpace_YUV:
40             return MHW_CSpace_YUV;
41 
42         case CSpace_Gray:
43             return MHW_CSpace_Gray;
44 
45         case CSpace_Any:
46             return MHW_CSpace_Any;
47 
48         case CSpace_sRGB:
49             return MHW_CSpace_sRGB;
50 
51         case CSpace_stRGB:
52             return MHW_CSpace_stRGB;
53 
54         case CSpace_BT601:
55             return MHW_CSpace_BT601;
56 
57         case CSpace_BT601_FullRange:
58             return MHW_CSpace_BT601_FullRange;
59 
60         case CSpace_BT709:
61             return MHW_CSpace_BT709;
62 
63         case CSpace_BT709_FullRange:
64             return MHW_CSpace_BT709_FullRange;
65 
66         case CSpace_xvYCC601:
67             return MHW_CSpace_xvYCC601;
68 
69         case CSpace_xvYCC709:
70             return MHW_CSpace_xvYCC709;
71 
72         case CSpace_BT601Gray:
73             return MHW_CSpace_BT601Gray;
74 
75         case CSpace_BT601Gray_FullRange:
76             return MHW_CSpace_BT601Gray_FullRange;
77 
78         case CSpace_BT2020:
79             return MHW_CSpace_BT2020;
80 
81         case CSpace_BT2020_RGB:
82             return MHW_CSpace_BT2020_RGB;
83 
84         case CSpace_BT2020_FullRange:
85             return MHW_CSpace_BT2020_FullRange;
86 
87         case CSpace_BT2020_stRGB:
88             return MHW_CSpace_BT2020_stRGB;
89 
90         case CSpace_None:
91         default:
92             return MHW_CSpace_None;
93     }
94 }
95 
VpHal_InitVeboxSurfaceParams(PVPHAL_SURFACE pVpHalVeboxSurface,PMHW_VEBOX_SURFACE_PARAMS pMhwVeboxSurface)96 MOS_STATUS VpHal_InitVeboxSurfaceParams(
97     PVPHAL_SURFACE                 pVpHalVeboxSurface,
98     PMHW_VEBOX_SURFACE_PARAMS      pMhwVeboxSurface)
99 {
100     MOS_STATUS                   eStatus = MOS_STATUS_SUCCESS;
101 
102     VPHAL_RENDER_CHK_NULL(pVpHalVeboxSurface);
103     VPHAL_RENDER_CHK_NULL(pMhwVeboxSurface);
104 
105     MOS_ZeroMemory(pMhwVeboxSurface, sizeof(*pMhwVeboxSurface));
106     pMhwVeboxSurface->bActive                = true;
107     pMhwVeboxSurface->Format                 = pVpHalVeboxSurface->Format;
108     pMhwVeboxSurface->dwWidth                = pVpHalVeboxSurface->dwWidth;
109     pMhwVeboxSurface->dwHeight               = pVpHalVeboxSurface->dwHeight;
110     pMhwVeboxSurface->dwPitch                = pVpHalVeboxSurface->dwPitch;
111     pMhwVeboxSurface->dwBitDepth             = pVpHalVeboxSurface->dwDepth;
112     pMhwVeboxSurface->TileType               = pVpHalVeboxSurface->TileType;
113     pMhwVeboxSurface->TileModeGMM            = pVpHalVeboxSurface->TileModeGMM;
114     pMhwVeboxSurface->bGMMTileEnabled        = pVpHalVeboxSurface->bGMMTileEnabled;
115     pMhwVeboxSurface->rcSrc                  = pVpHalVeboxSurface->rcSrc;
116     pMhwVeboxSurface->rcMaxSrc               = pVpHalVeboxSurface->rcMaxSrc;
117     pMhwVeboxSurface->bVEBOXCroppingUsed     = pVpHalVeboxSurface->bVEBOXCroppingUsed;
118     pMhwVeboxSurface->pOsResource            = &pVpHalVeboxSurface->OsResource;
119     pMhwVeboxSurface->bIsCompressed          = pVpHalVeboxSurface->bIsCompressed;
120     pMhwVeboxSurface->dwCompressionFormat    = pVpHalVeboxSurface->CompressionFormat;
121     pMhwVeboxSurface->CompressionMode        = pVpHalVeboxSurface->CompressionMode;
122 
123     if (pVpHalVeboxSurface->dwPitch > 0)
124     {
125         pMhwVeboxSurface->dwUYoffset = ((pVpHalVeboxSurface->UPlaneOffset.iSurfaceOffset - pVpHalVeboxSurface->YPlaneOffset.iSurfaceOffset) / pVpHalVeboxSurface->dwPitch) + pVpHalVeboxSurface->UPlaneOffset.iYOffset;
126     }
127 
128 finish:
129     return eStatus;
130 }
131 
VpHal_InitVeboxSurfaceStateCmdParams(PVPHAL_VEBOX_SURFACE_STATE_CMD_PARAMS pVpHalVeboxSurfaceStateCmdParams,PMHW_VEBOX_SURFACE_STATE_CMD_PARAMS pMhwVeboxSurfaceStateCmdParams)132 MOS_STATUS VpHal_InitVeboxSurfaceStateCmdParams(
133     PVPHAL_VEBOX_SURFACE_STATE_CMD_PARAMS    pVpHalVeboxSurfaceStateCmdParams,
134     PMHW_VEBOX_SURFACE_STATE_CMD_PARAMS      pMhwVeboxSurfaceStateCmdParams)
135 {
136     MOS_STATUS                       eStatus = MOS_STATUS_SUCCESS;
137 
138     VPHAL_RENDER_CHK_NULL(pVpHalVeboxSurfaceStateCmdParams);
139     VPHAL_RENDER_CHK_NULL(pMhwVeboxSurfaceStateCmdParams);
140 
141     MOS_ZeroMemory(pMhwVeboxSurfaceStateCmdParams, sizeof(*pMhwVeboxSurfaceStateCmdParams));
142 
143     pMhwVeboxSurfaceStateCmdParams->bDIEnable       = pVpHalVeboxSurfaceStateCmdParams->bDIEnable;
144     pMhwVeboxSurfaceStateCmdParams->b3DlutEnable    = pVpHalVeboxSurfaceStateCmdParams->b3DlutEnable;
145 
146     if (pVpHalVeboxSurfaceStateCmdParams->pSurfInput)
147     {
148         VPHAL_RENDER_CHK_STATUS(VpHal_InitVeboxSurfaceParams(
149                                 pVpHalVeboxSurfaceStateCmdParams->pSurfInput,
150                                 &pMhwVeboxSurfaceStateCmdParams->SurfInput));
151         pMhwVeboxSurfaceStateCmdParams->SurfInput.dwYoffset = pVpHalVeboxSurfaceStateCmdParams->pSurfInput->YPlaneOffset.iYOffset;
152     }
153     if (pVpHalVeboxSurfaceStateCmdParams->pSurfOutput)
154     {
155         pMhwVeboxSurfaceStateCmdParams->bOutputValid = true;
156         VPHAL_RENDER_CHK_STATUS(VpHal_InitVeboxSurfaceParams(
157                                 pVpHalVeboxSurfaceStateCmdParams->pSurfOutput,
158                                 &pMhwVeboxSurfaceStateCmdParams->SurfOutput));
159         pMhwVeboxSurfaceStateCmdParams->SurfOutput.dwYoffset = pVpHalVeboxSurfaceStateCmdParams->pSurfOutput->YPlaneOffset.iYOffset;
160     }
161     if (pVpHalVeboxSurfaceStateCmdParams->pSurfSTMM)
162     {
163         VPHAL_RENDER_CHK_STATUS(VpHal_InitVeboxSurfaceParams(
164                                 pVpHalVeboxSurfaceStateCmdParams->pSurfSTMM,
165                                 &pMhwVeboxSurfaceStateCmdParams->SurfSTMM));
166     }
167     if (pVpHalVeboxSurfaceStateCmdParams->pSurfDNOutput)
168     {
169         VPHAL_RENDER_CHK_STATUS(VpHal_InitVeboxSurfaceParams(
170                                 pVpHalVeboxSurfaceStateCmdParams->pSurfDNOutput,
171                                 &pMhwVeboxSurfaceStateCmdParams->SurfDNOutput));
172     }
173 
174     if (pVpHalVeboxSurfaceStateCmdParams->pSurfSkinScoreOutput)
175     {
176         VPHAL_RENDER_CHK_STATUS(VpHal_InitVeboxSurfaceParams(
177                                 pVpHalVeboxSurfaceStateCmdParams->pSurfSkinScoreOutput,
178                                 &pMhwVeboxSurfaceStateCmdParams->SurfSkinScoreOutput));
179     }
180 
181 finish:
182     return eStatus;
183 }
184