1 /*
2 * Copyright (c) 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 //! \file mhw_vdbox_avp_interface.cpp
23 //! \brief MHW interface for constructing AVP commands for the Vdbox engine
24 //! \details Defines the interfaces for constructing MHW Vdbox AVP commands across all platforms
25 //!
26
27 #include "mhw_vdbox_avp_interface.h"
28
Initialize()29 void MhwVdboxAvpPipeBufAddrParams::Initialize()
30 {
31 m_mode = 0;
32
33 for (auto i = 0; i < 8; i++)
34 {
35 m_references[i] = nullptr;
36 }
37
38 m_decodedPic = nullptr; //!< Decoded Output Frame Buffer
39 m_intrabcDecodedOutputFrameBuffer = nullptr; //!< IntraBC Decoded output frame buffer
40 m_cdfTableInitializationBuffer = nullptr; //!< CDF Tables Initialization Buffer
41 m_cdfTableBwdAdaptationBuffer = nullptr; //!< CDF Tables Backward Adaptation Buffer
42
43 m_segmentIdReadBuffer = nullptr; //!< AV1 Segment ID Read Buffer
44 m_segmentIdWriteBuffer = nullptr; //!< AV1 Segment ID Write Buffer
45
46 for (auto i = 0; i < 9; i++)
47 {
48 m_colMvTemporalBuffer[i] = nullptr;
49 }
50
51 m_curMvTemporalBuffer = nullptr; //!< Current MV temporal buffer
52 m_bitstreamDecoderEncoderLineRowstoreReadWriteBuffer = nullptr; //!< Handle of Bitstream Decode Line Rowstore buffer, can be programmed to use Local Media Storage VMM instead of Memory
53 m_bitstreamDecoderEncoderTileLineRowstoreReadWriteBuffer = nullptr; //!< Handle of Bitstream Decode Tile Line buffer
54 m_intraPredictionLineRowstoreReadWriteBuffer = nullptr; //!< Handle of Intra Prediction Line Rowstore Read/Write Buffer
55 m_intraPredictionTileLineRowstoreReadWriteBuffer = nullptr; //!< Handle of Intra Prediction Tile Line Rowstore Read/Write Buffer
56 m_spatialMotionVectorLineReadWriteBuffer = nullptr; //!< Handle of Spatial Motion Vector Line rowstore buffer, can be programmed to use Local Media Storage VMM instead of Memory
57 m_spatialMotionVectorCodingTileLineReadWriteBuffer = nullptr; //!< Handle of Spatial Motion Vector Tile Line buffer
58 m_loopRestorationMetaTileColumnReadWriteBuffer = nullptr; //!< Loop Restoration Meta Tile Column Read/Write Buffer Address
59 m_loopRestorationFilterTileReadWriteLineYBuffer = nullptr; //!< Loop Restoration Filter Tile Read/Write Line Y Buffer Address
60 m_loopRestorationFilterTileReadWriteLineUBuffer = nullptr; //!< Loop Restoration Filter Tile Read/Write Line U Buffer Address
61 m_loopRestorationFilterTileReadWriteLineVBuffer = nullptr; //!< Loop Restoration Filter Tile Read/Write Line V Buffer Address
62 m_deblockerFilterLineReadWriteYBuffer = nullptr; //!< Deblocker Filter Line Read/Write Y Buffer Address
63 m_deblockerFilterLineReadWriteUBuffer = nullptr; //!< Deblocker Filter Line Read/Write U Buffer Address
64 m_deblockerFilterLineReadWriteVBuffer = nullptr; //!< Deblocker Filter Line Read/Write V Buffer Address
65 m_deblockerFilterTileLineReadWriteYBuffer = nullptr; //!< Deblocker Filter Tile Line Read/Write Y Buffer Address
66 m_deblockerFilterTileLineReadWriteVBuffer = nullptr; //!< Deblocker Filter Tile Line Read/Write V Buffer Address
67 m_deblockerFilterTileLineReadWriteUBuffer = nullptr; //!< Deblocker Filter Tile Line Read/Write U Buffer Address
68 m_deblockerFilterTileColumnReadWriteYBuffer = nullptr; //!< Deblocker Filter Tile Column Read/Write Y Buffer Address
69 m_deblockerFilterTileColumnReadWriteUBuffer = nullptr; //!< Deblocker Filter Tile Column Read/Write U Buffer Address
70 m_deblockerFilterTileColumnReadWriteVBuffer = nullptr; //!< Deblocker Filter Tile Column Read/Write V Buffer Address
71 m_cdefFilterLineReadWriteBuffer = nullptr; //!< CDEF Filter Line Read/Write Y Buffer Address
72 m_cdefFilterTileLineReadWriteBuffer = nullptr; //!< CDEF Filter Tile Line Read/Write Y Buffer Address
73 m_cdefFilterTileColumnReadWriteBuffer = nullptr; //!< CDEF Filter Tile Column Read/Write Y Buffer Address
74 m_cdefFilterMetaTileLineReadWriteBuffer = nullptr; //!< CDEF Filter Meta Tile Line Read/Write Buffer Address
75 m_cdefFilterMetaTileColumnReadWriteBuffer = nullptr; //!< CDEF Filter Meta Tile Column Read/Write Buffer Address
76 m_cdefFilterTopLeftCornerReadWriteBuffer = nullptr; //!< CDEF Filter Top-Left Corner Read/Write Buffer Address
77 m_superResTileColumnReadWriteYBuffer = nullptr; //!< Super-Res Tile Column Read/Write Y Buffer Address
78 m_superResTileColumnReadWriteUBuffer = nullptr; //!< Super-Res Tile Column Read/Write U Buffer Address
79 m_superResTileColumnReadWriteVBuffer = nullptr; //!< Super-Res Tile Column Read/Write V Buffer Address
80 m_loopRestorationFilterTileColumnReadWriteYBuffer = nullptr; //!< Loop Restoration Filter Tile Column Read/Write Y Buffer Address
81 m_loopRestorationFilterTileColumnReadWriteUBuffer = nullptr; //!< Loop Restoration Filter Tile Column Read/Write U Buffer Address
82 m_loopRestorationFilterTileColumnReadWriteVBuffer = nullptr; //!< Loop Restoration Filter Tile Column Read/Write V Buffer Address
83 m_decodedFrameStatusErrorBuffer = nullptr; //!< Decoded Frame Status/Error Buffer Base Address
84 m_decodedBlockDataStreamoutBuffer = nullptr; //!< Decoded Block Data Streamout Buffer Address
85
86 //MMC supported
87 m_preDeblockSurfMmcState = {};
88 m_streamOutBufMmcState = {};
89 }
90
AddAvpSurfaceCmd(PMOS_COMMAND_BUFFER cmdBuffer,PMHW_VDBOX_SURFACE_PARAMS params)91 MOS_STATUS MhwVdboxAvpInterface::AddAvpSurfaceCmd(
92 PMOS_COMMAND_BUFFER cmdBuffer,
93 PMHW_VDBOX_SURFACE_PARAMS params)
94 {
95 MHW_FUNCTION_ENTER;
96
97 MHW_MI_CHK_NULL(cmdBuffer);
98 MHW_MI_CHK_NULL(params);
99
100 if (m_decodeInUse)
101 {
102 MHW_MI_CHK_STATUS(AddAvpDecodeSurfaceStateCmd(cmdBuffer, params));
103 }
104 else
105 {
106 return MOS_STATUS_UNIMPLEMENTED;
107 }
108
109 return MOS_STATUS_SUCCESS;
110 }
111
MhwVdboxAvpInterface(PMOS_INTERFACE osInterface,MhwMiInterface * miInterface,MhwCpInterface * cpInterface,bool decodeInUse)112 MhwVdboxAvpInterface::MhwVdboxAvpInterface(
113 PMOS_INTERFACE osInterface,
114 MhwMiInterface *miInterface,
115 MhwCpInterface *cpInterface,
116 bool decodeInUse)
117 {
118 MHW_FUNCTION_ENTER;
119
120 m_osInterface = osInterface;
121 m_miInterface = miInterface;
122 m_cpInterface = cpInterface;
123 m_decodeInUse = decodeInUse;
124
125 MHW_ASSERT(m_osInterface);
126 MHW_ASSERT(m_miInterface);
127 MHW_ASSERT(m_cpInterface);
128
129 m_waTable = osInterface->pfnGetWaTable(osInterface);
130 m_skuTable = osInterface->pfnGetSkuTable(osInterface);
131
132 if (m_osInterface->bUsesGfxAddress)
133 {
134 AddResourceToCmd = Mhw_AddResourceToCmd_GfxAddress;
135 }
136 else // bUsesPatchList
137 {
138 AddResourceToCmd = Mhw_AddResourceToCmd_PatchList;
139 }
140
141 }
142