1 /*
2 * Copyright (c) 2022, 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     mhw_vdbox_vvcp_cmdpar.h
24 //! \brief    MHW VDBOX VVCP command parameters
25 //! \details
26 //!
27 
28 #ifndef __MHW_VDBOX_VVCP_CMDPAR_H__
29 #define __MHW_VDBOX_VVCP_CMDPAR_H__
30 
31 #include "codec_def_decode_vvc.h"
32 #include "mhw_vdbox.h"
33 #include "mhw_vdbox_cmdpar.h"
34 
35 namespace mhw
36 {
37 namespace vdbox
38 {
39 namespace vvcp
40 {
41 
42 // this enum should align with hwcmd defination
43 enum CODEC_STANDARD_SELECT
44 {
45     CODEC_STANDARD_SELECT_VVC = 3,  //!< No additional details
46 };
47 
48 enum CommandsNumberOfAddresses
49 {
50     MI_BATCH_BUFFER_START_CMD_NUMBER_OF_ADDRESSES           = 1,  //  2 DW for  1 address field
51     MI_STORE_DATA_IMM_CMD_NUMBER_OF_ADDRESSES               = 1,  //  2 DW for  1 address field
52     MI_FLUSH_DW_CMD_NUMBER_OF_ADDRESSES                     = 1,  //  2 DW for  1 address field
53     MI_CONDITIONAL_BATCH_BUFFER_END_CMD_NUMBER_OF_ADDRESSES = 1,  //  2 DW for  1 address field
54     MI_STORE_REGISTER_MEM_CMD_NUMBER_OF_ADDRESSES           = 1,  //  2 DW for  1 address field
55     MI_COPY_MEM_MEM_CMD_NUMBER_OF_ADDRESSES                 = 4,  //  4 DW for  2 address fields
56     MI_SEMAPHORE_WAIT_CMD_NUMBER_OF_ADDRESSES               = 1,  //  2 DW for  1 address field
57     MI_ATOMIC_CMD_NUMBER_OF_ADDRESSES                       = 1,  //  2 DW for  1 address field
58 
59     MFX_WAIT_CMD_NUMBER_OF_ADDRESSES = 0,  //  0 DW for    address fields
60 
61     VVCP_PIPE_MODE_SELECT_CMD_NUMBER_OF_ADDRESSES        = 0,   //  0 DW for    address fields
62     VVCP_SURFACE_STATE_CMD_NUMBER_OF_ADDRESSES           = 0,   //  0 DW for    address fields
63     VVCP_PIPE_BUF_ADDR_STATE_CMD_NUMBER_OF_ADDRESSES     = 61,  //           61 address fields
64     VVCP_IND_OBJ_BASE_ADDR_STATE_CMD_NUMBER_OF_ADDRESSES = 2,   //            2 address fields
65     VVCP_PIC_STATE_CMD_NUMBER_OF_ADDRESSES               = 0,   //  0 DW for    address fields
66     VVCP_REF_IDX_STATE_CMD_NUMBER_OF_ADDRESSES           = 0,   //  0 DW for    address fields
67     VVCP_DPB_STATE_CMD_NUMBER_OF_ADDRESSES               = 0,   //  0 DW for    address fields
68     VVCP_TILE_CODING_CMD_NUMBER_OF_ADDRESSES             = 0,   //  0 DW for    address fields
69     VVCP_BSD_OBJECT_CMD_NUMBER_OF_ADDRESSES              = 0,   //  0 DW for    address fields
70     VVCP_MEM_DATA_ACCESS_CMD_NUMBER_OF_ADDRESSES         = 0,   //  0 DW for    address fields
71     VVCP_SLICE_STATE_CMD_NUMBER_OF_ADDRESSES             = 0,   //  0 DW for    address fields
72     VVCP_VD_CONTROL_STATE_CMD_NUMBER_OF_ADDRESSES        = 0,   //  0 DW for    address fields
73     VVCP_WEIGHTOFFSET_STATE_CMD_NUMBER_OF_ADDRESSES      = 0,   //  0 DW for    address fields
74 
75     VD_PIPELINE_FLUSH_CMD_NUMBER_OF_ADDRESSES = 0,  //  0 DW for  0 address fields
76 };
77 
78 enum VvcpBufferType
79 {
80     //Rowstore
81     vcedLineBuffer = 0,
82     vcmvLineBuffer,
83     vcprLineBuffer,
84     vclfYLineBuffer,
85     vclfULineBuffer,
86     vclfVLineBuffer,
87     vcSaoYLineBuffer,
88     vcSaoULineBuffer,
89     vcSaoVLineBuffer,
90     vcAlfLineBuffer,
91 
92     //Tile (boundary) storage
93     vclfYTileRowBuffer,
94     vclfYTileColumnBuffer,
95     vclfUTileRowBuffer,
96     vclfUTileColumnBuffer,
97     vclfVTileRowBuffer,
98     vclfVTileColumnBuffer,
99 
100     vcSaoYTileRowBuffer,
101     vcSaoYTileColumnBuffer,
102     vcSaoUTileRowBuffer,
103     vcSaoUTileColumnBuffer,
104     vcSaoVTileRowBuffer,
105     vcSaoVTileColumnBuffer,
106 
107     vcAlfTileRowBuffer,
108     vcAlfYTileColumnBuffer,
109     vcAlfUTileColumnBuffer,
110     vcAlfVTileColumnBuffer,
111 
112     vcMvTemporalBuffer,
113 
114     vvcpInternalBufMax = 27
115 };
116 
117 struct VvcpBufferSizePar
118 {
119     uint32_t m_picWidth;
120     uint32_t m_picHeight;
121     uint16_t m_maxTileWidthInCtus;
122     uint8_t  m_bitDepthIdc;
123     uint8_t  m_spsChromaFormatIdc;
124     uint32_t m_spsLog2CtuSizeMinus5;
125     uint32_t m_bufferSize;
126 };
127 
128 // VVCP internal buffer size table [buffer_index][CTU][bitDepth]
129 struct VvcBufSizeClsPerCtu
130 {
131     uint8_t m_clPerCtu[3][2];
132     uint8_t m_extraCl;
133 };
134 
135 static const VvcBufSizeClsPerCtu CodecVvcBufferSize[2][vvcpInternalBufMax-1] =
136 {
137     //400
138     {
139         { 1,  1,  1,  1,  2,  2,  0 }, // VCED Line Buffer (EDLB)
140         { 2,  2,  4,  4,  8,  8,  0 }, // VCMV Line Buffer (MVLB)
141         { 1,  1,  1,  2,  2,  4,  0 }, // VCPR Line Buffer (PRLB)
142         { 6,  6, 10, 11, 18, 20,  0 }, // VCLF Y Line Buffer (LFYLB)
143         { 0,  0,  0,  0,  0,  0,  0 }, // VCLF U Line Buffer (LFULB)
144         { 0,  0,  0,  0,  0,  0,  0 }, // VCLF V Line Buffer (LFVLB)
145         { 2,  2,  3,  3,  6,  6,  0 }, // VCSAO Y Line Buffer (SAYLB)
146         { 0,  0,  0,  0,  0,  0,  0 }, // VCSAO Y Line Buffer (SAULB)
147         { 0,  0,  0,  0,  0,  0,  0 }, // VCSAO Y Line Buffer (SAVLB)
148         { 1,  1,  1,  1,  1,  1,  0 }, // VCALF Line Buffer (ALFLB)
149 
150         { 6,  6, 10, 11, 18, 20,  0 }, // VCLF Y Tile Row Buffer (LFYTR)
151         { 9, 10, 17, 19, 34, 38,  0 }, // VCLF Y Tile Column Buffer (LFYTC)
152         { 0,  0,  0,  0,  0,  0,  0 }, // VCLF U Tile Row Buffer (LFUTR)
153         { 0,  0,  0,  0,  0,  0,  0 }, // VCLF U Tile Column Buffer (LFUTC)
154         { 0,  0,  0,  0,  0,  0,  0 }, // VCLF V Tile Row Buffer (LFVTR)
155         { 0,  0,  0,  0,  0,  0,  0 }, // VCLF V Tile Column Buffer (LFVTC)
156         { 2,  2,  3,  3,  6,  6,  0 }, // VCSAO Y Tile Row Buffer (SAYTR)
157         { 2,  2,  3,  3,  6,  6,  0 }, // VCSAO Y Tile Column Buffer (SAYTC)
158         { 0,  0,  0,  0,  0,  0,  0 }, // VCSAO U Tile Row Buffer (SAUTR)
159         { 0,  0,  0,  0,  0,  0,  0 }, // VCSAO U Tile Column Buffer (SAUTC)
160         { 0,  0,  0,  0,  0,  0,  0 }, // VCSAO V Tile Row Buffer (SAVTR)
161         { 0,  0,  0,  0,  0,  0,  0 }, // VCSAO V Tile Column Buffer (SAVTC)
162         { 1,  1,  1,  1,  1,  1,  0 }, // VCALF Tile Row Buffer (ALFTR)
163         { 6,  7, 11, 13, 21, 26,  1 }, // VCALF Y Tile Column Buffer (ALYTC)
164         { 0,  0,  0,  0,  0,  0,  0 }, // VCALF U Tile Column Buffer (ALUTC)
165         { 0,  0,  0,  0,  0,  0,  0 }, // VCALF V Tile Column Buffer (ALVTC)
166     },
167 
168     //420
169     {
170         { 1,  1,  1,  1,  2,  2,  0 }, // VCED Line Buffer (EDLB)
171         { 2,  2,  4,  4,  8,  8,  0 }, // VCMV Line Buffer (MVLB)
172         { 2,  2,  2,  4,  4,  8,  0 }, // VCPR Line Buffer (PRLB)
173         { 6,  6, 10, 11, 18, 20,  0 }, // VCLF Y Line Buffer (LFYLB)
174         { 2,  2,  3,  3,  5,  5,  0 }, // VCLF U Line Buffer (LFULB)
175         { 2,  2,  3,  3,  5,  5,  0 }, // VCLF V Line Buffer (LFVLB)
176         { 2,  2,  3,  3,  6,  6,  1 }, // VCSAO Y Line Buffer (SAYLB)
177         { 1,  1,  2,  2,  3,  3,  1 }, // VCSAO U Line Buffer (SAULB)
178         { 1,  1,  2,  2,  3,  3,  1 }, // VCSAO V Line Buffer (SAVLB)
179         { 1,  1,  1,  1,  1,  1,  0 }, // VCALF Line Buffer (ALFLB)
180 
181         { 6,  6, 10, 11, 18, 20,  0 }, // VCLF Y Tile Row Buffer (LFYTR)
182         { 9, 10, 17, 19, 34, 38,  0 }, // VCLF Y Tile Column Buffer (LFYTC)
183         { 2,  2,  3,  3,  5,  5,  0 }, // VCLF U Tile Row Buffer (LFUTR)
184         { 2,  3,  4,  5,  8,  9,  0 }, // VCLF U Tile Column Buffer (LFUTC)
185         { 2,  2,  3,  3,  5,  5,  0 }, // VCLF V Tile Row Buffer (LFVTR)
186         { 2,  3,  4,  5,  8,  9,  0 }, // VCLF V Tile Column Buffer (LFVTC)
187         { 2,  2,  3,  3,  6,  6,  1 }, // VCSAO Y Tile Row Buffer (SAYTR)
188         { 2,  2,  3,  3,  6,  6,  1 }, // VCSAO Y Tile Column Buffer (SAYTC)
189         { 1,  1,  2,  2,  3,  3,  1 }, // VCSAO U Tile Row Buffer (SAUTR)
190         { 1,  1,  2,  2,  3,  3,  1 }, // VCSAO U Tile Column Buffer (SAUTC)
191         { 1,  1,  2,  2,  3,  3,  1 }, // VCSAO V Tile Row Buffer (SAVTR)
192         { 1,  1,  2,  2,  3,  3,  1 }, // VCSAO V Tile Column Buffer (SAVTC)
193         { 1,  1,  1,  1,  1,  1,  0 }, // VCALF Tile Row Buffer (ALFTR)
194         { 6,  7, 11, 13, 21, 26,  1 }, // VCALF Y Tile Column Buffer (ALYTC)
195         { 2,  2,  3,  4,  6,  7,  1 }, // VCALF U Tile Column Buffer (ALUTC)
196         { 2,  2,  3,  4,  6,  7,  1 }, // VCALF V Tile Column Buffer (ALVTC)
197     }
198 };
199 
200 
201 //! \brief SURFACE_FORMAT
202 //! \details
203 //!     Specifies the format of the surface.
204 //!
205 enum SURFACE_FORMAT
206 {
207     SURFACE_FORMAT_PLANAR4208 = 4,   //!< No additional details
208     SURFACE_FORMAT_P010       = 13,  //!< This format can be used for 8, 9, 10 bit 420 format
209 };
210 
_MHW_PAR_T(VVCP_VD_CONTROL_STATE)211 struct _MHW_PAR_T(VVCP_VD_CONTROL_STATE)
212 {
213     bool pipelineInitialization     = false;
214     bool memoryImplicitFlush        = false;
215     bool pipeScalableModePipeLock   = false;
216     bool pipeScalableModePipeUnlock = false;
217 };
218 
_MHW_PAR_T(VVCP_PIPE_MODE_SELECT)219 struct _MHW_PAR_T(VVCP_PIPE_MODE_SELECT)
220 {
221     uint8_t   codecSelect                = 0;
222     bool      picStatusErrorReportEnable = false;
223     uint8_t   codecStandardSelect        = 0;
224     uint32_t  picStatusErrorReportId     = 0;
225 };
226 
_MHW_PAR_T(VVCP_SURFACE_STATE)227 struct _MHW_PAR_T(VVCP_SURFACE_STATE)
228 {
229     uint8_t  surfaceId            = 0;
230     uint32_t surfacePitchMinus1   = 0;
231     uint8_t  surfaceFormat        = 0;
232     uint32_t yOffsetForUCbInPixel = 0;
233     uint32_t compressionFormat    = 0;
234 };
235 
_MHW_PAR_T(VVCP_PIPE_BUF_ADDR_STATE)236 struct _MHW_PAR_T(VVCP_PIPE_BUF_ADDR_STATE)
237 {
238     MOS_SURFACE  *decodedPic               = nullptr;  //!< Decoded Output Frame Buffer
239     MOS_RESOURCE *references[15]           = {};       //!< Reference Frame Buffer
240     MOS_RESOURCE *colMvTemporalBuffer[15]  = {};       //!< Collocated MV temporal buffer
241     MOS_RESOURCE *curMvTemporalBuffer      = nullptr;  //!< Current MV temporal buffer
242     MOS_RESOURCE *apsScalingListDataBuffer = nullptr;
243     MOS_RESOURCE *apsAlfBuffer             = nullptr;
244     MOS_RESOURCE *spsChromaQpTableBuffer   = nullptr;
245 
246     MOS_RESOURCE *vcedLineBuffer = nullptr;
247     MOS_RESOURCE *vcmvLineBuffer = nullptr;
248     MOS_RESOURCE *vcprLineBuffer = nullptr;
249 
250     MOS_RESOURCE *vclfYLineBuffer       = nullptr;
251     MOS_RESOURCE *vclfYTileRowBuffer    = nullptr;
252     MOS_RESOURCE *vclfYTileColumnBuffer = nullptr;
253     MOS_RESOURCE *vclfULineBuffer       = nullptr;
254     MOS_RESOURCE *vclfUTileRowBuffer    = nullptr;
255     MOS_RESOURCE *vclfUTileColumnBuffer = nullptr;
256     MOS_RESOURCE *vclfVLineBuffer       = nullptr;
257     MOS_RESOURCE *vclfVTileRowBuffer    = nullptr;
258     MOS_RESOURCE *vclfVTileColumnBuffer = nullptr;
259 
260     MOS_RESOURCE *vcSaoYLineBuffer       = nullptr;
261     MOS_RESOURCE *vcSaoYTileRowBuffer    = nullptr;
262     MOS_RESOURCE *vcSaoYTileColumnBuffer = nullptr;
263     MOS_RESOURCE *vcSaoULineBuffer       = nullptr;
264     MOS_RESOURCE *vcSaoUTileRowBuffer    = nullptr;
265     MOS_RESOURCE *vcSaoUTileColumnBuffer = nullptr;
266     MOS_RESOURCE *vcSaoVLineBuffer       = nullptr;
267     MOS_RESOURCE *vcSaoVTileRowBuffer    = nullptr;
268     MOS_RESOURCE *vcSaoVTileColumnBuffer = nullptr;
269 
270     MOS_RESOURCE *vcAlfLineBuffer        = nullptr;
271     MOS_RESOURCE *vcAlfTileRowBuffer     = nullptr;
272     MOS_RESOURCE *vcAlfYTileColumnBuffer = nullptr;
273     MOS_RESOURCE *vcAlfUTileColumnBuffer = nullptr;
274     MOS_RESOURCE *vcAlfVTileColumnBuffer = nullptr;
275 };
276 
_MHW_PAR_T(VVCP_IND_OBJ_BASE_ADDR_STATE)277 struct _MHW_PAR_T(VVCP_IND_OBJ_BASE_ADDR_STATE)
278 {
279     uint32_t      dwDataSize     = 0;
280     uint32_t      dwDataOffset   = 0;
281     PMOS_RESOURCE presDataBuffer = nullptr;
282 };
283 
_MHW_PAR_T(VVCP_PIC_STATE)284 struct _MHW_PAR_T(VVCP_PIC_STATE)
285 {
286     bool spsSubpicInfoPresentFlag        = false;
287     bool spsIndependentSubpicsFlag       = false;
288     bool spsSubpicSameSizeFlag           = false;
289     bool spsEntropyCodingSyncEnabledFlag = false;
290     bool spsQtbttDualTreeIntraFlag       = false;
291     bool spsMaxLumaTransformSize64Flag   = false;
292     bool spsTransformSkipEnabledFlag     = false;
293     bool spsBdpcmEnabledFlag             = false;
294     bool spsMtsEnabledFlag               = false;
295     bool spsExplicitMtsIntraEnabledFlag  = false;
296     bool spsExplicitMtsInterEnabledFlag  = false;
297     bool spsLfnstEnabledFlag             = false;
298     bool spsJointCbcrEnabledFlag         = false;
299     bool spsSameQpTableForChromaFlag     = false;
300     bool dLmcsDisabledFlag               = false;
301     bool dDblkDisabledFlag               = false;
302     bool dSaoLumaDisabledFlag            = false;
303     bool dSaoChromaDisabledFlag          = false;
304     bool dAlfDisabledFlag                = false;
305     bool dAlfCbDisabledFlag              = false;
306     bool dAlfCrDisabledFlag              = false;
307     bool dAlfCcCbDisabledFlag            = false;
308     bool dAlfCcCrDisabledFlag            = false;
309     bool dSingleSliceFrameFlag           = false;
310 
311     bool spsSbtmvpEnabledFlag                                 = false;
312     bool spsAmvrEnabledFlag                                   = false;
313     bool spsSmvdEnabledFlag                                   = false;
314     bool spsMmvdEnabledFlag                                   = false;
315     bool spsSbtEnabledFlag                                    = false;
316     bool spsAffineEnabledFlag                                 = false;
317     bool sps6ParamAffineEnabledFlag                           = false;
318     bool spsAffineAmvrEnabledFlag                             = false;
319     bool spsBcwEnabledFlag                                    = false;
320     bool spsCiipEnabledFlag                                   = false;
321     bool spsGpmEnabledFlag                                    = false;
322     bool spsIspEnabledFlag                                    = false;
323     bool spsMrlEnabledFlag                                    = false;
324     bool spsMipEnabledFlag                                    = false;
325     bool spsCclmEnabledFlag                                   = false;
326     bool spsChromaHorizontalCollocatedFlag                    = false;
327     bool spsChromaVerticalCollocatedFlag                      = false;
328     bool spsTemporalMvpEnabledFlag                            = false;
329     bool spsPaletteEnabledFlag                                = false;
330     bool spsActEnabledFlag                                    = false;
331     bool spsIbcEnabledFlag                                    = false;
332     bool spsLadfEnabledFlag                                   = false;
333     bool spsScalingMatrixForLfnstDisabledFlag                 = false;
334     bool spsScalingMatrixForAlternativeColorSpaceDisabledFlag = false;
335     bool spsScalingMatrixDesignatedColorSpaceFlag             = false;
336 
337     bool ppsLoopFilterAcrossTilesEnabledFlag  = false;
338     bool ppsRectSliceFlag                     = false;
339     bool ppsSingleSlicePerSubpicFlag          = false;
340     bool ppsLoopFilterAcrossSlicesEnabledFlag = false;
341     bool ppsWeightedPredFlag                  = false;
342     bool ppsWeightedBipredFlag                = false;
343     bool ppsRefWraparoundEnabledFlag          = false;
344     bool ppsCuQpDeltaEnabledFlag              = false;
345     bool virtualboundariespresentflag         = false;
346     bool phNonRefPicFlag                      = false;
347     bool phChromaResidualScaleFlag            = false;
348     bool phTemporalMvpEnabledFlag             = false;
349     bool phMmvdFullpelOnlyFlag                = false;
350     bool phMvdL1ZeroFlag                      = false;
351     bool phBdofDisabledFlag                   = false;
352     bool phDmvrDisabledFlag                   = false;
353     bool phProfDisabledFlag                   = false;
354     bool phJointCbcrSignFlag                  = false;
355 
356     uint8_t  spsChromaFormatIdc                  = 0;
357     uint8_t  spsLog2CtuSizeMinus5                = 0;
358     uint8_t  spsBitdepthMinus8                   = 0;
359     uint8_t  spsLog2MinLumaCodingBlockSizeMinus2 = 0;
360     uint16_t spsNumSubpicsMinus1                 = 0;
361 
362     uint8_t spsLog2TransformSkipMaxSizeMinus2   = 0;
363     uint8_t spsSixMinusMaxNumMergeCand          = 0;
364     uint8_t spsFiveMinusMaxNumSubblockMergeCand = 0;
365     uint8_t dMaxNumGpmMergeCand                 = 0;
366     uint8_t spsLog2ParallelMergeLevelMinus2     = 0;
367     uint8_t spsMinQpPrimeTs                     = 0;
368     uint8_t spsSixMinusMaxNumIbcMergeCand       = 0;
369 
370     int8_t spsLadfQpOffset0 = 0;
371     int8_t spsLadfQpOffset1 = 0;
372     int8_t spsLadfQpOffset2 = 0;
373     int8_t spsLadfQpOffset3 = 0;
374 
375     uint16_t spsLadfDeltaThresholdMinus10  = 0;
376     uint16_t spsLadfDeltaThresholdMinus11  = 0;
377     int8_t   spsLadfLowestIntervalQpOffset = 0;
378 
379     uint16_t spsLadfDeltaThresholdMinus12 = 0;
380     uint16_t spsLadfDeltaThresholdMinus13 = 0;
381     uint8_t  spsNumLadfIntervalsMinus2    = 0;
382 
383     uint16_t ppsPicWidthInLumaSamples = 0;
384     uint16_t ppsPicHeightInLumaSamples = 0;
385 
386     int32_t ppsScalingWinLeftOffset   = 0;
387     int32_t ppsScalingWinRightOffset  = 0;
388     int32_t ppsScalingWinTopOffset    = 0;
389     int32_t ppsScalingWinBottomOffset = 0;
390 
391     uint16_t dNumtilerowsminus1    = 0;
392     uint16_t dNumtilecolumnsminus1 = 0;
393 
394     int8_t  ppsCbQpOffset                  = 0;
395     int8_t  ppsCrQpOffset                  = 0;
396     int8_t  ppsJointCbcrQpOffsetValue      = 0;
397     uint8_t ppsChromaQpOffsetListLenMinus1 = 0;
398 
399     int8_t ppsCbQpOffsetList0 = 0;
400     int8_t ppsCbQpOffsetList1 = 0;
401     int8_t ppsCbQpOffsetList2 = 0;
402     int8_t ppsCbQpOffsetList3 = 0;
403 
404     int8_t   ppsCbQpOffsetList4               = 0;
405     int8_t   ppsCbQpOffsetList5               = 0;
406     uint16_t ppsPicWidthMinusWraparoundOffset = 0;
407 
408     int8_t ppsCrQpOffsetList0 = 0;
409     int8_t ppsCrQpOffsetList1 = 0;
410     int8_t ppsCrQpOffsetList2 = 0;
411     int8_t ppsCrQpOffsetList3 = 0;
412 
413     int8_t ppsCrQpOffsetList4 = 0;
414     int8_t ppsCrQpOffsetList5 = 0;
415 
416     int8_t ppsJointCbcrQpOffsetList0 = 0;
417     int8_t ppsJointCbcrQpOffsetList1 = 0;
418     int8_t ppsJointCbcrQpOffsetList2 = 0;
419     int8_t ppsJointCbcrQpOffsetList3 = 0;
420 
421     int8_t ppsJointCbcrQpOffsetList4 = 0;
422     int8_t ppsJointCbcrQpOffsetList5 = 0;
423 
424     uint8_t numvervirtualboundaries                = 0;
425     uint8_t numhorvirtualboundaries                = 0;
426     uint8_t phLog2DiffMinQtMinCbIntraSliceLuma     = 0;
427     uint8_t phMaxMttHierarchyDepthIntraSliceLuma   = 0;
428     uint8_t phLog2DiffMaxBtMinQtIntraSliceLuma     = 0;
429     uint8_t phLog2DiffMaxTtMinQtIntraSliceLuma     = 0;
430     uint8_t phLog2DiffMinQtMinCbIntraSliceChroma   = 0;
431     uint8_t phMaxMttHierarchyDepthIntraSliceChroma = 0;
432 
433     uint16_t dVirtualboundaryposxminus10 = 0;
434     uint16_t dVirtualboundaryposyminus10 = 0;
435     uint16_t dVirtualboundaryposxminus11 = 0;
436     uint16_t dVirtualboundaryposyminus11 = 0;
437     uint16_t dVirtualboundaryposxminus12 = 0;
438     uint16_t dVirtualboundaryposyminus12 = 0;
439 
440     uint8_t phLog2DiffMaxBtMinQtIntraSliceChroma = 0;
441     uint8_t phLog2DiffMaxTtMinQtIntraSliceChroma = 0;
442     uint8_t phCuQpDeltaSubdivIntraSlice          = 0;
443     uint8_t phCuChromaQpOffsetSubdivIntraSlice   = 0;
444     uint8_t phLog2DiffMinQtMinCbInterSlice       = 0;
445     uint8_t phMaxMttHierarchyDepthInterSlice     = 0;
446 
447     uint8_t phLog2DiffMaxBtMinQtInterSlice     = 0;
448     uint8_t phLog2DiffMaxTtMinQtInterSlice     = 0;
449     uint8_t phCuQpDeltaSubdivInterSlice        = 0;
450     uint8_t phCuChromaQpOffsetSubdivInterSlice = 0;
451 
452     uint8_t         dActiveapsid   = 0;
453     CodecVvcAlfData alfApsArray[8] = {};
454 };
455 
_MHW_PAR_T(VVCP_DPB_STATE)456 struct _MHW_PAR_T(VVCP_DPB_STATE)
457 {
458     VvcRefFrameAttributes refFrameAttr[15]      = {};
459     uint16_t              refPicScaleWidth[15]  = {};
460     uint16_t              refPicScaleHeight[15] = {};
461 };
462 
_MHW_PAR_T(VVCP_SLICE_STATE)463 struct _MHW_PAR_T(VVCP_SLICE_STATE)
464 {
465     bool shAlfEnabledFlag                   = false;
466     bool shAlfCbEnabledFlag                 = false;
467     bool shAlfCrEnabledFlag                 = false;
468     bool shAlfCcCbEnabledFlag               = false;
469     bool shAlfCcCrEnabledFlag               = false;
470     bool shLmcsUsedFlag                     = false;
471     bool shExplicitScalingListUsedFlag      = false;
472     bool shCabacInitFlag                    = false;
473     bool shCollocatedFromL0Flag             = false;
474     bool shCuChromaQpOffsetEnabledFlag      = false;
475     bool shSaoLumaUsedFlag                  = false;
476     bool shSaoChromaUsedFlag                = false;
477     bool shDeblockingFilterDisabledFlag     = false;
478     bool shDepQuantUsedFlag                 = false;
479     bool shSignDataHidingUsedFlag           = false;
480     bool shTsResidualCodingDisabledFlag     = false;
481     bool nobackwardpredflag                 = false;
482     bool pVvcpDebugEnable                   = false;
483     bool dMultipleSlicesInTileFlag          = false;
484     bool dIsbottommostsliceoftileFlag       = false;
485     bool dIstopmostsliceoftileFlag          = false;
486     bool dSubpicTreatedAsPicFlag            = false;
487     bool dLoopFilterAcrossSubpicEnabledFlag = false;
488     bool dIsRightMostSliceOfSubpicFlag      = false;
489     bool dIsLeftMostSliceOfSubpicFlag       = false;
490     bool dIsBottomMostSliceOfSubpicFlag     = false;
491     bool dIsTopMostSliceOfSubpicFlag        = false;
492     bool dLastsliceofpicFlag                = false;
493 
494     uint32_t numctusincurrslice = 0;
495 
496     uint16_t shNumTilesInSliceMinus1       = 0;
497     uint8_t  shSliceType                   = 0;
498     uint8_t  shNumAlfApsIdsLuma            = 0;
499     uint8_t  alfChromaNumAltFiltersMinus1  = 0;
500     uint8_t  alfCcCbFiltersSignalledMinus1 = 0;
501     uint8_t  alfCcCrFiltersSignalledMinus1 = 0;
502 
503     uint8_t shAlfApsIdLuma0  = 0;
504     uint8_t shAlfApsIdLuma1  = 0;
505     uint8_t shAlfApsIdLuma2  = 0;
506     uint8_t shAlfApsIdLuma3  = 0;
507     uint8_t shAlfApsIdLuma4  = 0;
508     uint8_t shAlfApsIdLuma5  = 0;
509     uint8_t shAlfApsIdLuma6  = 0;
510 
511     uint8_t shAlfApsIdChroma   = 0;
512     uint8_t shAlfCcCbApsId     = 0;
513     uint8_t shAlfCcCrApsId     = 0;
514     uint8_t numrefidxactive0   = 0;
515     uint8_t numrefidxactive1   = 0;
516     uint8_t shCollocatedRefIdx = 0;
517 
518     uint8_t sliceqpy            = 0;
519     uint8_t shCbQpOffset        = 0;
520     uint8_t shCrQpOffset        = 0;
521     uint8_t shJointCbcrQpOffset = 0;
522 
523     uint8_t shLumaBetaOffsetDiv2 = 0;
524     uint8_t shLumaTcOffsetDiv2   = 0;
525     uint8_t shCbBetaOffsetDiv2   = 0;
526     uint8_t shCbTcOffsetDiv2     = 0;
527     uint8_t shCrBetaOffsetDiv2   = 0;
528     uint8_t shCrTcOffsetDiv2     = 0;
529 
530     uint16_t dSubpicCtuTopLeftX  = 0;
531     uint16_t dSubpicCtuTopLeftY  = 0;
532     uint16_t dSubpicWidthMinus1  = 0;
533     uint16_t dSubpicHeightMinus1 = 0;
534 
535     uint16_t dSliceheightinctus  = 0;
536 
537     uint16_t dToplefttilex   = 0;
538     uint16_t dToplefttiley   = 0;
539     uint32_t dSlicestartctbx = 0;
540     uint32_t dSlicestartctby = 0;
541 
542     // LMCS
543     bool               spsLmcsEnabledFlag = false;
544     uint8_t            phLmcsApsId        = 0;
545     CodecVvcLmcsData   *vvcLmcsData       = nullptr;
546     ApsLmcsReshapeInfo *vvcLmcsShapeInfo  = nullptr;
547 };
548 
_MHW_PAR_T(VVCP_BSD_OBJECT)549 struct _MHW_PAR_T(VVCP_BSD_OBJECT)
550 {
551     uint32_t bsdDataLength      = 0;
552     uint32_t bsdDataStartOffset = 0;
553 };
554 
_MHW_PAR_T(VVCP_REF_IDX_STATE)555 struct _MHW_PAR_T(VVCP_REF_IDX_STATE)
556 {
557     uint8_t listIdx       = 0;
558     uint8_t numRefForList = 0;
559 
560     int8_t        refIdxSymLx[2]                                 = {};
561     CODEC_PICTURE refPicList[2][vvcMaxNumRefFrame]               = {};
562     bool          stRefPicFlag[2][vvcMaxNumRefFrame]             = {};
563     bool          rprConstraintsActiveFlag[2][vvcMaxNumRefFrame] = {};
564     bool          unavailableRefPic[2][vvcMaxNumRefFrame]        = {};
565     int16_t       diffPicOrderCnt[2][vvcMaxNumRefFrame]          = {};
566 };
567 
_MHW_PAR_T(VVCP_WEIGHTOFFSET_STATE)568 struct _MHW_PAR_T(VVCP_WEIGHTOFFSET_STATE)
569 {
570     VvcWeightedPredInfo *wpInfo    = nullptr;
571     int32_t             listIdx    = 0;
572 };
573 
_MHW_PAR_T(VVCP_TILE_CODING)574 struct _MHW_PAR_T(VVCP_TILE_CODING)
575 {
576     uint16_t tilecolbdval              = 0;
577     uint16_t tilerowbdval              = 0;
578     uint16_t colwidthval               = 0;
579     uint16_t rowheightval              = 0;
580     uint16_t currenttilecolumnposition = 0;
581     uint16_t currenttilerowposition    = 0;
582     struct
583     {
584         uint32_t m_isrightmosttileofsliceFlag : 1;
585         uint32_t m_isleftmosttileofsliceFlag : 1;
586         uint32_t m_isbottommosttileofsliceFlag : 1;
587         uint32_t m_istopmosttileofsliceFlag : 1;
588         uint32_t m_isrightmosttileofframeFlag : 1;
589         uint32_t m_isleftmosttileofframeFlag : 1;
590         uint32_t m_isbottommosttileofframeFlag : 1;
591         uint32_t m_istopmosttileofframeFlag : 1;
592         uint32_t m_reserved : 24;
593     } flags;
594 };
595 
596 }  // namespace vvcp
597 }  // namespace vdbox
598 }  // namespace mhw
599 
600 #endif  // __MHW_VDBOX_VVCP_CMDPAR_H__
601