Codebase list intel-media-driver / a716b00
New upstream version 21.3.1+dfsg1 Sebastian Ramacher 2 years ago
47 changed file(s) with 1247 addition(s) and 1160 deletion(s). Raw diff Collapse all Expand all
1919
2020 cmake_minimum_required(VERSION 3.5)
2121
22 set(MEDIA_VERSION "21.3.0${MEDIA_VERSION_EXTRA}" CACHE STRING "" FORCE)
22 set(MEDIA_VERSION "21.3.1${MEDIA_VERSION_EXTRA}" CACHE STRING "" FORCE)
2323
2424 include(os_release_info.cmake)
2525
00 /*
1 * Copyright (c) 2011-2020, Intel Corporation
1 * Copyright (c) 2011-2021, Intel Corporation
22 *
33 * Permission is hereby granted, free of charge, to any person obtaining a
44 * copy of this software and associated documentation files (the "Software"),
169169 PMOS_RESOURCE m_currSfcOutputPicRes = nullptr;
170170 //! \brief Applies when debug dumps are enabled, pointer to histogram output resource for the picture associated with this status report
171171 PMOS_RESOURCE m_currHistogramOutBuf = nullptr;
172 //! \brief Applies when debug dumps are enabled, pointer to AV1 film grain output resource for the picture associated with this status report
173 PMOS_RESOURCE m_currFgOutputPicRes = nullptr;
172174 //! \brief Applies when debug dumps are enabled, stream out buffer
173175 PMOS_RESOURCE m_streamOutBuf = nullptr;
174176 //! \brief Applies when debug dumps are enabled, index of the streamout buffer
11151115 m_threadTraverseSizeY = 2; // for NV12, thread space is 32x4
11161116
11171117 // check raw surface's color/tile format
1118 if (m_cscEnableColor && !m_encoder->CheckSupportedFormat(&details))
1119 {
1118 if (!m_encoder->CheckSupportedFormat(&details))
1119 {
1120 CODECHAL_ENCODE_CHK_COND_RETURN(!m_cscEnableColor && !m_cscEnableSfc, "Input color format = %d is not supported!", details.Format);
11201121 CODECHAL_ENCODE_CHK_STATUS_RETURN(CheckRawColorFormat(details.Format, details.TileType));
11211122 }
11221123
365365
366366 void DisableCsc() { m_cscDsConvEnable = 0; }
367367 void EnableCopy() { m_cscEnableCopy = 1; }
368 void DisableCopy() { m_cscEnableCopy = 0; }
368369 void EnableColor() { m_cscEnableColor = 1; }
369370 void EnableMmc() { m_cscEnableMmc = 1; }
370371 void EnableSfc() { m_cscEnableSfc = 1; }
25812581
25822582 MOS_STATUS CodechalEncoderState::SendGenericKernelCmds(
25832583 PMOS_COMMAND_BUFFER cmdBuffer,
2584 SendKernelCmdsParams *params)
2584 SendKernelCmdsParams *params,
2585 bool bEnableRenderOCA)
25852586 {
25862587 MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
25872588
26012602 // frame tracking tag is only added in the last command buffer header
26022603 requestFrameTracking = m_singleTaskPhaseSupported ? m_firstTaskInPhase : m_lastTaskInPhase;
26032604 }
2605
26042606 // Send command buffer header at the beginning (OS dependent)
2605 CODECHAL_ENCODE_CHK_STATUS_RETURN(SendPrologWithFrameTracking(cmdBuffer, requestFrameTracking));
2607 CODECHAL_ENCODE_CHK_STATUS_RETURN(
2608 SendPrologWithFrameTracking(cmdBuffer, requestFrameTracking, bEnableRenderOCA ? m_renderEngineInterface->GetMmioRegisters() : nullptr));
26062609
26072610 m_firstTaskInPhase = false;
26082611 }
20532053 //! cmdbuffer to send cmds
20542054 //! \param [in] params
20552055 //! Parameters for send cmds
2056 //! \param [in] bEnableRenderOCA
2057 //! Enable/Disable OCA support for Render Command Streamer
20562058 //! \return MOS_STATUS
20572059 //! MOS_STATUS_SUCCESS if success, else fail reason
20582060 //!
20592061 MOS_STATUS SendGenericKernelCmds(
20602062 PMOS_COMMAND_BUFFER cmdBuffer,
2061 SendKernelCmdsParams *params);
2063 SendKernelCmdsParams *params,
2064 bool bEnableRenderOCA = false);
20622065
20632066 //!
20642067 //! \brief Start Status Report
4848 {
4949 CODECHAL_HW_FUNCTION_ENTER;
5050
51 MHW_HWCMDPARSER_INIT(osInterface);
51 #if MHW_HWCMDPARSER_ENABLED
52 mhw::HwcmdParser::InitInstance(osInterface);
53 #endif
5254
5355 // Basic intialization
5456 m_osInterface = osInterface;
538538 m_sfcInterface = nullptr;
539539 }
540540
541 MHW_HWCMDPARSER_DESTROY();
541 #if MHW_HWCMDPARSER_ENABLED
542 mhw::HwcmdParser::DestroyInstance();
543 #endif
542544 }
543545
544546 //!
58165816 break;
58175817 }
58185818
5819 MHW_HWCMDPARSER_FRAMEINFOUPDATE(frameType);
5819 auto instance = mhw::HwcmdParser::GetInstance();
5820 if (instance)
5821 {
5822 instance->UpdateFrameInfo(frameType);
5823 }
58205824 #endif
58215825
58225826 MHW_BATCH_BUFFER batchBuffer;
61136117
61146118 CODECHAL_ENCODE_CHK_STATUS_RETURN(m_miInterface->AddMiBatchBufferEnd(nullptr, secondLevelBatchBufferUsed));
61156119
6116 MHW_HWCMDPARSER_PARSECMDBUF((uint32_t *)(secondLevelBatchBufferUsed->pData),
6117 secondLevelBatchBufferUsed->iCurrent / sizeof(uint32_t));
6120 #if MHW_HWCMDPARSER_ENABLED
6121 auto instance = mhw::HwcmdParser::GetInstance();
6122 if (instance)
6123 {
6124 instance->ParseCmdBuf((uint32_t *)(secondLevelBatchBufferUsed->pData),
6125 secondLevelBatchBufferUsed->iCurrent / sizeof(uint32_t));
6126 }
6127 #endif
61186128
61196129 CODECHAL_DEBUG_TOOL(
61206130 CODECHAL_ENCODE_CHK_STATUS_RETURN(PopulatePakParam(
65136523 // &cmdBuffer));
65146524 )
65156525
6516 MHW_HWCMDPARSER_PARSECMDBUF(cmdBuffer.pCmdBase, cmdBuffer.iOffset / sizeof(uint32_t));
6526 #if MHW_HWCMDPARSER_ENABLED
6527 auto instance = mhw::HwcmdParser::GetInstance();
6528 if (instance)
6529 {
6530 instance->ParseCmdBuf(cmdBuffer.pCmdBase, cmdBuffer.iOffset / sizeof(uint32_t));
6531 }
6532 #endif
65176533 m_osInterface->pfnReturnCommandBuffer(m_osInterface, &cmdBuffer, 0);
65186534
65196535 bool renderingFlags = m_videoContextUsesNullHw;
3737 #define CODECHAL_HEVC_MAX_NUM_SLICES_LVL_5 200
3838 #define CODECHAL_HEVC_NUM_DMEM_BUFFERS 32
3939
40 #define CODEC_HEVC_NUM_SECOND_BB 8
40 #define CODEC_HEVC_NUM_SECOND_BB 32
4141
4242 #define CODECHAL_HEVC_MIN_LCU 16
4343 #define CODECHAL_HEVC_MAX_DIM_FOR_MIN_LCU 4222
122122 PMOS_COMMAND_BUFFER cmdBuffer,
123123 bool isRender)
124124 {
125 MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
126 PMOS_RESOURCE pResMarker = NULL;
127
128 MHW_FUNCTION_ENTER;
129
130 pResMarker = m_osInterface->pfnGetMarkerResource(m_osInterface);
125 MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
126 PMOS_RESOURCE resMarker = nullptr;
127
128 MHW_FUNCTION_ENTER;
129
130 resMarker = m_osInterface->pfnGetMarkerResource(m_osInterface);
131 MHW_CHK_NULL_RETURN(resMarker);
131132
132133 if (isRender)
133134 {
134135 // Send pipe_control to get the timestamp
135136 MHW_PIPE_CONTROL_PARAMS pipeControlParams;
136137 MOS_ZeroMemory(&pipeControlParams, sizeof(pipeControlParams));
137 pipeControlParams.presDest = pResMarker;
138 pipeControlParams.presDest = resMarker;
138139 pipeControlParams.dwResourceOffset = sizeof(uint64_t);
139140 pipeControlParams.dwPostSyncOp = MHW_FLUSH_WRITE_TIMESTAMP_REG;
140141 pipeControlParams.dwFlushMode = MHW_FLUSH_WRITE_CACHE;
146147 // Send flush_dw to get the timestamp
147148 MHW_MI_FLUSH_DW_PARAMS flushDwParams;
148149 MOS_ZeroMemory(&flushDwParams, sizeof(flushDwParams));
149 flushDwParams.pOsResource = pResMarker;
150 flushDwParams.pOsResource = resMarker;
150151 flushDwParams.dwResourceOffset = sizeof(uint64_t);
151152 flushDwParams.postSyncOperation = MHW_FLUSH_WRITE_TIMESTAMP_REG;
152153 flushDwParams.bQWordEnable = 1;
153154
154155 MHW_MI_CHK_STATUS(AddMiFlushDwCmd(cmdBuffer, &flushDwParams));
155156 }
156
157 MOS_SafeFreeMemory(pResMarker);
157 if (!m_osInterface->apoMosEnabled)
158 {
159 MOS_SafeFreeMemory(resMarker);
160 }
158161 return eStatus;
159162 }
160163
2929
3030 #include "mhw_vdbox.h"
3131 #include "mhw_mi.h"
32 #include "mhw_cmdpar.h"
3332
3433 typedef struct _MHW_VDBOX_HUC_STREAM_OBJ_PARAMS
3534 {
110109
111110 MHW_MEMORY_OBJECT_CONTROL_PARAMS m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_END_CODEC] = { }; //!< Cacheability settings
112111
113 mhw::Pointer<void> m_hucItfNew = nullptr;
112 std::shared_ptr<void> m_hucItfNew = nullptr;
114113
115114 //!
116115 //! \brief Constructor
152151 //!
153152 //! \return pointer to new HUC interface
154153 //!
155 virtual mhw::Pointer<void> GetNewHucInterface() { return nullptr; }
154 virtual std::shared_ptr<void> GetNewHucInterface() { return nullptr; }
156155
157156 //!
158157 //! \brief Get Huc Status Hevc S2l Failure Mask
192192 bool m_rhoDomainStatsEnabled = false; //! indicate if rho domain stats is enabled
193193 bool m_perfModeSupported = true; //! indicate perf mode is supported
194194
195 mhw::Pointer<mhw::vdbox::vdenc::Itf> m_vdencItfNew = nullptr;
195 std::shared_ptr<mhw::vdbox::vdenc::Itf> m_vdencItfNew = nullptr;
196196
197197 static const bool m_vdencFTQEnabled[NUM_VDENC_TARGET_USAGE_MODES];
198198 static const bool m_vdencBlockBasedSkipEnabled[NUM_VDENC_TARGET_USAGE_MODES];
247247 //!
248248 //! \return pointer to new VDENC interface
249249 //!
250 virtual mhw::Pointer<mhw::vdbox::vdenc::Itf> GetNewVdencInterface() { return nullptr; }
250 virtual std::shared_ptr<mhw::vdbox::vdenc::Itf> GetNewVdencInterface() { return nullptr; }
251251
252252 //!
253253 //! \brief Judge if row store caching supported
18801880 static int32_t IsGPUHung(
18811881 MOS_STREAM_HANDLE streamState);
18821882
1883 //!
1884 //! \brief Get SetMarker enabled flag
1885 //! \details Get SetMarker enabled flag from streamState
1886 //! \param [in] streamState
1887 //! Handle of Os Stream State
1888 //! \return bool
1889 //! SetMarker enabled flag
1890 //!
1891 static bool IsSetMarkerEnabled(
1892 MOS_STREAM_HANDLE streamState);
1893
1894 //!
1895 //! \brief Get SetMarker resource address
1896 //! \details Get SetMarker resource address from streamState
1897 //! \param [in] streamState
1898 //! Handle of Os Stream State
1899 //! \return PMOS_RESOURCE
1900 //! SetMarker resource address
1901 //!
1902 static PMOS_RESOURCE GetMarkerResource(
1903 MOS_STREAM_HANDLE streamState);
1904
18831905 private:
18841906 //!
18851907 //! \brief Init per stream parameters
14161416
14171417 int32_t bVeboxScalabilityMode; //!< Enable scalability vebox
14181418
1419 bool bOptimizeCpuTiming; //!< Optimize Cpu Timing
1420
14191421 //!< os interface extension
14201422 void *pOsExt;
14211423 } MOS_INTERFACE;
482482 goto finish;
483483 }
484484
485 if (pOsInterface->bOptimizeCpuTiming &&
486 (DefaultResType == MOS_GFXRES_BUFFER) &&
487 (pSurface->dwWidth >= dwWidth))
488 {
489 goto finish;
490 }
491
485492 MOS_ZeroMemory(&AllocParams, sizeof(MOS_ALLOC_GFXRES_PARAMS));
486493
487494 VpHal_AllocParamsInitType(&AllocParams, pSurface, DefaultResType, DefaultTileType);
12341234 bool bDisableVeboxFor8K = false;
12351235 bool bUseVEHdrSfc = false; // use SFC for to perform CSC/Scaling/RGBSwap of HDR streaming; if false, use composite render.
12361236 bool bNonFirstFrame = false; // first frame or not: first frame false, otherwise true considering zeromemory parameters.
1237 bool bOptimizeCpuTiming = false; //!< Optimize Cpu Timing
12371238
12381239 VPHAL_RENDER_PARAMS() :
12391240 uSrcCount(0),
181181 //add config to switch 8K resolution on VEBOX or render
182182 //default is use render for 8k
183183 uint32_t dwUseVeboxFor8K;
184
185 // Optimize Cpu timing for VEBOX/SFC
186 bool bOptimizeCpuTiming;
184187 } VP_CONFIG, *PVP_CONFIG;
185188
186189 //!
6464 static const uint32_t mbTextureThreshold = 1024;
6565 static const uint32_t adaptiveTxDecisionThreshold = 128;
6666 static const uint32_t brcHistoryBufferOffsetSceneChanged = 0x2FC;
67 static const uint32_t ocaMvDataBufferMaxSize = 0x70000; // MV buffer size for 1280x704 stream
6768
6869 static const uint32_t trellisQuantizationRounding[NUM_TARGET_USAGE_MODES] =
6970 {
43144315 sendKernelCmdsParams.ucDmvPredFlag =
43154316 m_avcSliceParams->direct_spatial_mv_pred_flag;
43164317 sendKernelCmdsParams.pKernelState = kernelState;
4317 CODECHAL_ENCODE_CHK_STATUS_RETURN(SendGenericKernelCmds(&cmdBuffer, &sendKernelCmdsParams));
4318 CODECHAL_ENCODE_CHK_STATUS_RETURN(SendGenericKernelCmds(&cmdBuffer, &sendKernelCmdsParams, true));
43184319 }
43194320
43204321 // Set up MB BRC Constant Data Buffer if there is QP change within a frame
45504551 m_hwInterface,
45514552 &walkerParams,
45524553 &walkerCodecParams));
4554
4555 HalOcaInterface::TraceMessage(cmdBuffer, *m_osInterface->pOsContext, __FUNCTION__, sizeof(__FUNCTION__));
4556 HalOcaInterface::OnDispatch(cmdBuffer, *m_osInterface->pOsContext, *m_miInterface, *m_renderEngineInterface->GetMmioRegisters());
45534557
45544558 CODECHAL_ENCODE_CHK_STATUS_RETURN(m_renderEngineInterface->AddMediaObjectWalkerCmd(
45554559 &cmdBuffer,
72207224 &surfaceCodecParams,
72217225 kernelState));
72227226
7227 // Limit OCA dump size for MV buffer to ocaMvDataBufferMaxSize to do not overflow OCA
7228 if (m_mvDataSize > ocaMvDataBufferMaxSize)
7229 {
7230 std::stringstream ss;
7231 ss << "MV Data buffer ( size == 0x" << std::hex << m_mvDataSize << " ) is too large to fit into the OCA buffer. "
7232 "Put only 0x" << std::hex << ocaMvDataBufferMaxSize << " bytes - max allowed size";
7233 std::string ocaLog = ss.str();
7234 HalOcaInterface::TraceMessage(*cmdBuffer, *m_osInterface->pOsContext, ocaLog.c_str(), ocaLog.length());
7235 }
7236 HalOcaInterface::OnIndirectState(*cmdBuffer, *m_osInterface->pOsContext, mvDataBuffer, 0, false, MOS_MIN(m_mvDataSize, ocaMvDataBufferMaxSize));
7237
72237238 // Current Picture Y
72247239 MOS_ZeroMemory(&surfaceCodecParams, sizeof(CODECHAL_SURFACE_CODEC_PARAMS));
72257240 surfaceCodecParams.bIs2DSurface = true;
14681468 sendKernelCmdsParams.ucDmvPredFlag =
14691469 m_avcSliceParams->direct_spatial_mv_pred_flag;
14701470 sendKernelCmdsParams.pKernelState = kernelState;
1471 CODECHAL_ENCODE_CHK_STATUS_RETURN(SendGenericKernelCmds(&cmdBuffer, &sendKernelCmdsParams));
1471 CODECHAL_ENCODE_CHK_STATUS_RETURN(SendGenericKernelCmds(&cmdBuffer, &sendKernelCmdsParams, true));
14721472
14731473 // Set up MB BRC Constant Data Buffer if there is QP change within a frame
14741474 if (mbConstDataBufferInUse)
3030
3131 #define CODECHAL_MAX_DPB_NUM_AV1 127 // Maximum number of uncompressed decoded buffers that driver supports for non-LST mode
3232 #define CODEC_NUM_REF_AV1_TEMP_BUFFERS 8
33 #define CODEC_NUM_AV1_SECOND_BB 16
33 #define CODEC_NUM_AV1_SECOND_BB 64
3434 #define CODEC_NUM_AV1_TEMP_BUFFERS (CODEC_NUM_REF_AV1_TEMP_BUFFERS + 1) //!< Temp buffers number
3535 #define CODECHAL_MAX_DPB_NUM_LST_AV1 255 // Maximum number of uncompressed decoded buffers that driver supports with LST support
3636
8282 VAProcFilterTotalColorCorrection,
8383 VAProcFilterHVSNoiseReduction,
8484 VAProcFilterHighDynamicRangeToneMapping
85 #if VA_CHECK_VERSION(1, 12, 0)
86 , VAProcFilter3DLUT
87 #endif
8588 };
8689
8790 VAProcColorStandardType vp_input_color_std[DDI_VP_NUM_INPUT_COLOR_STD] = {
28522852 return result;
28532853 }
28542854
2855 bool MosInterface::IsSetMarkerEnabled(
2856 MOS_STREAM_HANDLE streamState)
2857 {
2858 return false;
2859 }
2860
2861 PMOS_RESOURCE MosInterface::GetMarkerResource(
2862 MOS_STREAM_HANDLE streamState)
2863 {
2864 return nullptr;
2865 }
2866
28552867 #if MOS_COMMAND_BUFFER_DUMP_SUPPORTED
28562868 MOS_STATUS MosInterface::DumpCommandBufferInit(
28572869 MOS_STREAM_HANDLE streamState)
4646 #ifdef _MMC_SUPPORTED
4747 static bool adlsRegisteredMmd =
4848 MediaInterfacesFactory<MmdDevice>::
49 RegisterHal<MmdDeviceG12Tgllp>((uint32_t)IGFX_TIGERLAKE_LP);
49 RegisterHal<MmdDeviceG12Tgllp>((uint32_t)IGFX_ALDERLAKE_P);
5050 #endif
5151
5252 #define PLATFORM_INTEL_ADLP 23
961961 DECODE_CHK_STATUS(AllocateVariableSizeSurfaces());
962962 }
963963
964 #if (_DEBUG || _RELEASE_INTERNAL)
965 m_fgOutputSurfList[m_basicFeature->m_curRenderPic.FrameIdx] = m_basicFeature->m_fgOutputSurf;
966 #endif
967
964968 return MOS_STATUS_SUCCESS;
965969 }
966970
228228 static const int32_t m_minChromaLegalRange = 16; //!< minimum chroma legal range
229229 static const int32_t m_maxChromaLegalRange = 240; //!< maximum chroma legal range
230230
231 #if (_DEBUG || _RELEASE_INTERNAL)
232 MOS_SURFACE m_fgOutputSurfList[DecodeBasicFeature::m_maxFrameIndex] = {}; //! \brief fimm grain applied surfaces
233 #endif
234
231235 enum
232236 {
233237 fieldTopSrcY = 0, //!< Binding table offset for Top field input Y
130130 inputParameters.currOriginalPic = basicFeature->m_curRenderPic;
131131 inputParameters.currDecodedPicRes = basicFeature->m_destSurface.OsResource;
132132 inputParameters.numUsedVdbox = m_numVdbox;
133
134 #if (_DEBUG || _RELEASE_INTERNAL)
135 auto filmGrainFeature = dynamic_cast<Av1DecodeFilmGrainG12*>(m_featureManager->GetFeature(
136 Av1FeatureIDs::av1SwFilmGrain));
137 if (filmGrainFeature != nullptr && filmGrainFeature->m_filmGrainEnabled)
138 {
139 auto frameIdx = basicFeature->m_curRenderPic.FrameIdx;
140 inputParameters.fgOutputPicRes = &filmGrainFeature->m_fgOutputSurfList[frameIdx].OsResource;
141 }
142 #endif
133143 m_allocator->UpdateResoreceUsageType(&inputParameters.currDecodedPicRes, resourceOutputPicture);
134144 m_statusReport->Init(&inputParameters);
135145 }
166176 DECODE_CHK_STATUS(InitContext());
167177 DECODE_CHK_STATUS(ActivateDecodePackets());
168178 DECODE_CHK_STATUS(ExecuteActivePackets());
179
180 DECODE_CHK_STATUS(m_postSubPipeline->Execute());
181
182 CODECHAL_DEBUG_TOOL(
183 PMHW_BATCH_BUFFER batchBuffer = m_av1DecodePkt->GetSecondLvlBB();
184 batchBuffer->iLastCurrent = batchBuffer->iSize;
185 batchBuffer->dwOffset = 0;
186 DECODE_CHK_STATUS(m_debugInterface->Dump2ndLvlBatch(
187 batchBuffer,
188 CODECHAL_NUM_MEDIA_STATES,
189 "AV1_DEC_Secondary"));)
190
191 #if (_DEBUG || _RELEASE_INTERNAL)
192 DECODE_CHK_STATUS(StatusCheck());
193 #endif
194 // Only update user features for the first frame.
195 if (basicFeature->m_frameNum == 0)
196 {
197 DECODE_CHK_STATUS(UserFeatureReport());
198 }
199 basicFeature->m_frameNum++;
200
201 DECODE_CHK_STATUS(m_statusReport->Reset());
169202 }
170
171 DECODE_CHK_STATUS(m_postSubPipeline->Execute());
172 }
173 else if (m_pipeMode == decodePipeModeEnd)
174 {
175 auto feature = dynamic_cast<DecodeBasicFeature*>(m_featureManager->GetFeature(FeatureIDs::basicFeature));
176 DECODE_CHK_NULL(feature);
177 CODECHAL_DEBUG_TOOL(
178 m_debugInterface->m_bufferDumpFrameNum = feature->m_frameNum;
179 DECODE_CHK_STATUS(m_debugInterface->DumpYUVSurface(
180 &feature->m_destSurface,
181 CodechalDbgAttr::attrDecodeOutputSurface,
182 "DstSurf"));)
183
184 auto filmGrainFeature = dynamic_cast<Av1DecodeFilmGrainG12*>(m_featureManager->GetFeature(
185 Av1FeatureIDs::av1SwFilmGrain));
186 if (filmGrainFeature != nullptr && filmGrainFeature->m_filmGrainEnabled)
187 {
188 auto av1Feature = dynamic_cast<Av1BasicFeature*>(feature);
189 CODECHAL_DEBUG_TOOL(
190 m_debugInterface->m_bufferDumpFrameNum = feature->m_frameNum;
191 DECODE_CHK_STATUS(m_debugInterface->DumpYUVSurface(
192 &av1Feature->m_fgOutputSurf,
193 CodechalDbgAttr::attrFilmGrain,
194 "FilmGrain"));)
195 }
196
197 CODECHAL_DEBUG_TOOL(
198 PMHW_BATCH_BUFFER batchBuffer = m_av1DecodePkt->GetSecondLvlBB();
199 DECODE_CHK_NULL(batchBuffer);
200 batchBuffer->iLastCurrent = batchBuffer->iSize;
201 batchBuffer->dwOffset = 0;
202 DECODE_CHK_STATUS(m_debugInterface->Dump2ndLvlBatch(
203 batchBuffer,
204 CODECHAL_NUM_MEDIA_STATES,
205 "AV1_DEC_Secondary"));)
206
207 // Only update user features for the first frame.
208 if (feature->m_frameNum == 0)
209 {
210 DECODE_CHK_STATUS(UserFeatureReport());
211 }
212 feature->m_frameNum++;
213
214 DECODE_CHK_STATUS(m_statusReport->Reset());
215203 }
216204
217205 return MOS_STATUS_SUCCESS;
337325 return MOS_STATUS_SUCCESS;
338326 }
339327
340 #if USE_CODECHAL_DEBUG_TOOL
341 MOS_STATUS Av1PipelineG12::DumpParams(Av1BasicFeature &basicFeature)
342 {
343 m_debugInterface->m_frameType = basicFeature.m_av1PicParams->m_picInfoFlags.m_fields.m_frameType ? P_TYPE : I_TYPE;
344 m_debugInterface->m_bufferDumpFrameNum = basicFeature.m_frameNum;
345
346 DECODE_CHK_STATUS(DumpPicParams(
347 basicFeature.m_av1PicParams));
348
349 DECODE_CHK_STATUS(DumpBitstreamControlParams(
350 basicFeature.m_av1TileParams));
351
352 return MOS_STATUS_SUCCESS;
353 }
354
355 MOS_STATUS Av1PipelineG12::DumpBitstreamControlParams(CodecAv1TileParams *tileParams)
356 {
357 CODECHAL_DEBUG_FUNCTION_ENTER;
358
359 if (!m_debugInterface->DumpIsEnabled(CodechalDbgAttr::attrSlcParams))
360 {
361 return MOS_STATUS_SUCCESS;
362 }
363
364 CODECHAL_DEBUG_CHK_NULL(tileParams);
365
366 std::ostringstream oss;
367 oss.setf(std::ios::showbase | std::ios::uppercase);
368
369 oss << "BSTileDataLocation: " << +tileParams->m_bsTileDataLocation << std::endl;
370 oss << "BSTileBytesInBuffer: " << +tileParams->m_bsTileBytesInBuffer << std::endl;
371 oss << "wBadBSBufferChopping: " << +tileParams->m_badBSBufferChopping << std::endl;
372 oss << "tile_row: " << +tileParams->m_tileRow << std::endl;
373 oss << "tile_column: " << +tileParams->m_tileColumn << std::endl;
374 oss << "tile_index: " << +tileParams->m_tileIndex << std::endl;
375 oss << "StartTileIdx: " << +tileParams->m_startTileIdx << std::endl;
376 oss << "EndTileIdx: " << +tileParams->m_endTileIdx << std::endl;
377 oss << "anchor_frame_idx: " << +tileParams->m_anchorFrameIdx.FrameIdx << std::endl;
378 oss << "BSTilePayloadSizeInBytes: " << +tileParams->m_bsTilePayloadSizeInBytes << std::endl;
379
380 const char *fileName = m_debugInterface->CreateFileName(
381 "DEC",
382 "BitstreamControlParams",
383 CodechalDbgExtType::txt);
384
385 std::ofstream ofs;
386 ofs.open(fileName, std::ios::out);
387 ofs << oss.str();
388 ofs.close();
389
390 return MOS_STATUS_SUCCESS;
391 }
392
393 MOS_STATUS Av1PipelineG12::DumpPicParams(CodecAv1PicParams *picParams)
394 {
395 CODECHAL_DEBUG_FUNCTION_ENTER;
396
397 if (!m_debugInterface->DumpIsEnabled(CodechalDbgAttr::attrPicParams))
398 {
399 return MOS_STATUS_SUCCESS;
400 }
401 CODECHAL_DEBUG_CHK_NULL(picParams);
402
403 std::ostringstream oss;
404 oss.setf(std::ios::showbase | std::ios::uppercase);
405
406 oss << "CurrPic FrameIdx: " << std::hex << +picParams->m_currPic.FrameIdx << std::endl;
407 oss << "CurrDisplayPic FrameIdx: " << std::hex << +picParams->m_currDisplayPic.FrameIdx << std::endl;
408 oss << "Profile: " << std::hex << +picParams->m_profile << std::endl;
409 oss << "AnchorFrameInsertion: " << std::hex << +picParams->m_anchorFrameInsertion << std::endl;
410 oss << "order_hint_bits_minus_1: " << std::hex << +picParams->m_orderHintBitsMinus1 << std::endl;
411 oss << "BitDepthIdx: " << std::hex << +picParams->m_bitDepthIdx << std::endl;
412
413 //Sequence Info Flags
414 oss << "dwSeqInfoFlags: " << std::hex << +picParams->m_seqInfoFlags.m_value << std::endl;
415 oss << "still_picture: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_stillPicture << std::endl;
416 oss << "use_128x128_superblock: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_use128x128Superblock << std::endl;
417 oss << "enable_filter_intra: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_enableFilterIntra << std::endl;
418 oss << "enable_intra_edge_filter: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_enableIntraEdgeFilter << std::endl;
419 oss << "enable_interintra_compound: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_enableInterintraCompound << std::endl;
420 oss << "enable_masked_compound: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_enableMaskedCompound << std::endl;
421 oss << "enable_dual_filter: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_enableDualFilter << std::endl;
422 oss << "enable_order_hint: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_enableOrderHint << std::endl;
423 oss << "enable_jnt_comp: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_enableJntComp << std::endl;
424 oss << "enable_cdef: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_enableCdef << std::endl;
425 oss << "mono_chrome: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_monoChrome << std::endl;
426 oss << "color_range: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_colorRange << std::endl;
427 oss << "subsampling_x: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_subsamplingX << std::endl;
428 oss << "subsampling_y: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_subsamplingY << std::endl;
429 oss << "chroma_sample_position: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_chromaSamplePosition << std::endl;
430 oss << "film_grain_params_present: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_filmGrainParamsPresent << std::endl;
431
432 //frame info
433 oss << "dwPicInfoFlags: " << std::hex << +picParams->m_picInfoFlags.m_value << std::endl;
434 oss << "frame_type: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_frameType << std::endl;
435 oss << "show_frame: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_showFrame << std::endl;
436 oss << "showable_frame: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_showableFrame << std::endl;
437 oss << "error_resilient_mode: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_errorResilientMode << std::endl;
438 oss << "disable_cdf_update: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_disableCdfUpdate << std::endl;
439 oss << "allow_screen_content_tools: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_allowScreenContentTools << std::endl;
440 oss << "force_integer_mv: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_forceIntegerMv << std::endl;
441 oss << "allow_intrabc: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_allowIntrabc << std::endl;
442 oss << "use_superres: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_useSuperres << std::endl;
443 oss << "allow_high_precision_mv: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_allowHighPrecisionMv << std::endl;
444 oss << "is_motion_mode_switchable: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_isMotionModeSwitchable << std::endl;
445 oss << "use_ref_frame_mvs: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_useRefFrameMvs << std::endl;
446 oss << "disable_frame_end_update_cdf: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_disableFrameEndUpdateCdf << std::endl;
447 oss << "uniform_tile_spacing_flag: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_uniformTileSpacingFlag << std::endl;
448 oss << "allow_warped_motion: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_allowWarpedMotion << std::endl;
449 oss << "large_scale_tile: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_largeScaleTile << std::endl;
450
451 oss << "frame_width_minus1: " << std::hex << +picParams->m_frameWidthMinus1 << std::endl;
452 oss << "frame_height_minus1: " << std::hex << +picParams->m_frameHeightMinus1 << std::endl;
453
454 for (auto i = 0; i < 8; ++i)
455 {
456 oss << "ref_frame_map[" << +i << "] FrameIdx:" << std::hex << +picParams->m_refFrameMap[i].FrameIdx << std::endl;
457 oss << "ref_frame_map[" << +i << "] PicFlags:" << std::hex << +picParams->m_refFrameMap[i].PicFlags << std::endl;
458 }
459
460 for (auto i = 0; i < 7; i++)
461 {
462 oss << "ref_frame_idx[" << +i << "]: " << std::hex << +picParams->m_refFrameIdx[i] << std::endl;
463 }
464
465 oss << "primary_ref_frame: " << std::hex << +picParams->m_primaryRefFrame << std::endl;
466 oss << "output_frame_width_in_tiles_minus_1: " << std::hex << +picParams->m_outputFrameWidthInTilesMinus1 << std::endl;
467 oss << "output_frame_height_in_tiles_minus_1: " << std::hex << +picParams->m_outputFrameHeightInTilesMinus1 << std::endl;
468
469 for (auto i = 0; i < 2; i++)
470 {
471 oss << "filter_level[" << +i << "]: " << std::hex << +picParams->m_filterLevel[i] << std::endl;
472 }
473 oss << "filter_level_u: " << std::hex << +picParams->m_filterLevelU << std::endl;
474 oss << "filter_level_v: " << std::hex << +picParams->m_filterLevelV << std::endl;
475
476 //Loop Filter Info Flags
477 oss << "cLoopFilterInfoFlags value: " << std::hex << +picParams->m_loopFilterInfoFlags.m_value << std::endl;
478 oss << "sharpness_level: " << std::hex << +picParams->m_loopFilterInfoFlags.m_fields.m_sharpnessLevel << std::endl;
479 oss << "mode_ref_delta_enabled: " << std::hex << +picParams->m_loopFilterInfoFlags.m_fields.m_modeRefDeltaEnabled << std::endl;
480 oss << "mode_ref_delta_update: " << std::hex << +picParams->m_loopFilterInfoFlags.m_fields.m_modeRefDeltaUpdate << std::endl;
481
482 oss << "order_hint: " << std::hex << +picParams->m_orderHint << std::endl;
483 oss << "superres_scale_denominator: " << std::hex << +picParams->m_superresScaleDenominator << std::endl;
484 oss << "interp_filter: " << std::hex << +picParams->m_interpFilter << std::endl;
485
486 for (auto i = 0; i < 8; i++)
487 {
488 oss << "ref_deltas[" << +i << "]: " << std::hex << +picParams->m_refDeltas[i] << std::endl;
489 }
490
491 for (auto i = 0; i < 2; i++)
492 {
493 oss << "mode_deltas[" << +i << "]: " << std::hex << +picParams->m_modeDeltas[i] << std::endl;
494 }
495
496 oss << "base_qindex: " << std::hex << +picParams->m_baseQindex << std::endl;
497 oss << "y_dc_delta_q: " << std::hex << +picParams->m_yDcDeltaQ << std::endl;
498 oss << "u_dc_delta_q: " << std::hex << +picParams->m_uDcDeltaQ << std::endl;
499 oss << "u_ac_delta_q: " << std::hex << +picParams->m_uAcDeltaQ << std::endl;
500 oss << "v_dc_delta_q: " << std::hex << +picParams->m_vDcDeltaQ << std::endl;
501 oss << "v_ac_delta_q: " << std::hex << +picParams->m_vAcDeltaQ << std::endl;
502
503 // quantization_matrix
504 oss << "wQMatrixFlags value: " << std::hex << +picParams->m_qMatrixFlags.m_value << std::endl;
505 oss << "using_qmatrix: " << std::hex << +picParams->m_qMatrixFlags.m_fields.m_usingQmatrix<< std::endl;
506 oss << "qm_y: " << std::hex << +picParams->m_qMatrixFlags.m_fields.m_qmY << std::endl;
507 oss << "qm_u: " << std::hex << +picParams->m_qMatrixFlags.m_fields.m_qmU << std::endl;
508 oss << "qm_v: " << std::hex << +picParams->m_qMatrixFlags.m_fields.m_qmV << std::endl;
509
510 // Mode control flags
511 oss << "dwModeControlFlags value: " << std::hex << +picParams->m_modeControlFlags.m_value << std::endl;
512 oss << "delta_q_present_flag: " << std::hex << +picParams->m_modeControlFlags.m_fields.m_deltaQPresentFlag << std::endl;
513 oss << "log2_delta_q_res: " << std::hex << +picParams->m_modeControlFlags.m_fields.m_log2DeltaQRes << std::endl;
514 oss << "delta_lf_present_flag: " << std::hex << +picParams->m_modeControlFlags.m_fields.m_deltaLfPresentFlag << std::endl;
515 oss << "log2_delta_lf_res: " << std::hex << +picParams->m_modeControlFlags.m_fields.m_log2DeltaLfRes << std::endl;
516 oss << "delta_lf_multi: " << std::hex << +picParams->m_modeControlFlags.m_fields.m_deltaLfMulti << std::endl;
517 oss << "tx_mode: " << std::hex << +picParams->m_modeControlFlags.m_fields.m_txMode << std::endl;
518 oss << "reference_mode: " << std::hex << +picParams->m_modeControlFlags.m_fields.m_referenceMode << std::endl;
519 oss << "reduced_tx_set_used: " << std::hex << +picParams->m_modeControlFlags.m_fields.m_reducedTxSetUsed << std::endl;
520 oss << "skip_mode_present: " << std::hex << +picParams->m_modeControlFlags.m_fields.m_skipModePresent << std::endl;
521
522 // Segmentation
523 oss << "enabled: " << std::hex << +picParams->m_av1SegData.m_enabled << std::endl;
524 oss << "update_map: " << std::hex << +picParams->m_av1SegData.m_updateMap << std::endl;
525 oss << "temporal_update: " << std::hex << +picParams->m_av1SegData.m_temporalUpdate << std::endl;
526 oss << "update_data: " << std::hex << +picParams->m_av1SegData.m_updateData << std::endl;
527
528 for (auto i = 0; i < 8; i++)
529 {
530 for (auto j = 0; j < 8; j++)
328 #if USE_CODECHAL_DEBUG_TOOL
329 MOS_STATUS Av1PipelineG12::DumpOutput(const DecodeStatusReportData& reportData)
330 {
331 DECODE_FUNC_CALL();
332
333 DECODE_CHK_STATUS(DecodePipeline::DumpOutput(reportData));
334
335 auto feature = dynamic_cast<Av1BasicFeature*>(m_featureManager->GetFeature(FeatureIDs::basicFeature));
336 DECODE_CHK_NULL(feature);
337 auto filmGrainFeature = dynamic_cast<Av1DecodeFilmGrainG12*>(m_featureManager->GetFeature(
338 Av1FeatureIDs::av1SwFilmGrain));
339 if (filmGrainFeature != nullptr && filmGrainFeature->m_filmGrainEnabled)
340 {
341 if (reportData.currFgOutputPicRes != nullptr)
531342 {
532 oss << "feature_data[" << +i << "][" << +j << "]: " << std::hex << +picParams->m_av1SegData.m_featureData[i][j] << std::endl;
343 MOS_SURFACE fgOutputSurface;
344 MOS_ZeroMemory(&fgOutputSurface, sizeof(fgOutputSurface));
345 fgOutputSurface.Format = Format_NV12;
346 fgOutputSurface.OsResource = *reportData.currFgOutputPicRes;
347 if (!Mos_ResourceIsNull(&fgOutputSurface.OsResource))
348 {
349 DECODE_CHK_STATUS(m_allocator->GetSurfaceInfo(&fgOutputSurface));
350 DECODE_CHK_STATUS(m_debugInterface->DumpYUVSurface(
351 &fgOutputSurface, CodechalDbgAttr::attrFilmGrain, "FilmGrain"));
352 }
533353 }
534354 }
535 for (auto i = 0; i < 8; i++)
536 {
537 oss << "feature_mask[" << +i << "]: " << std::hex << +picParams->m_av1SegData.m_featureMask [i] << std::endl;
538 }
539
540 oss << "tile_cols: " << std::hex << +picParams->m_tileCols << std::endl;
541 for (auto i = 0; i < 63; i++)
542 {
543 oss << "width_in_sbs_minus_1[" << +i << "]: " << std::hex << +picParams->m_widthInSbsMinus1[i] << std::endl;
544 }
545 oss << "tile_rows: " << std::hex << +picParams->m_tileRows << std::endl;
546 for (auto i = 0; i < 63; i++)
547 {
548 oss << "height_in_sbs_minus_1[" << +i << "]: " << std::hex << +picParams->m_heightInSbsMinus1[i] << std::endl;
549 }
550
551
552 oss << "tile_count_minus_1: " << std::hex << +picParams->m_tileCountMinus1 << std::endl;
553 oss << "context_update_tile_id: " << std::hex << +picParams->m_contextUpdateTileId << std::endl;
554
555 oss << "cdef_damping_minus_3: " << std::hex << +picParams->m_cdefDampingMinus3 << std::endl;
556 oss << "cdef_bits: " << std::hex << +picParams->m_cdefBits << std::endl;
557 for (auto i = 0; i < 8; i++)
558 {
559 oss << "cdef_y_strengths[" << +i << "]: " << std::hex << +picParams->m_cdefYStrengths[i] << std::endl;
560 }
561 for (auto i = 0; i < 8; i++)
562 {
563 oss << "cdef_uv_strengths[" << +i << "]: " << std::hex << +picParams->m_cdefUvStrengths[i] << std::endl;
564 }
565
566 // Loop Restoration Flags
567 oss << "LoopRestorationFlags value: " << std::hex << +picParams->m_loopRestorationFlags.m_value << std::endl;
568 oss << "yframe_restoration_type: " << std::hex << +picParams->m_loopRestorationFlags.m_fields.m_yframeRestorationType << std::endl;
569 oss << "cbframe_restoration_type: " << std::hex << +picParams->m_loopRestorationFlags.m_fields.m_cbframeRestorationType << std::endl;
570 oss << "crframe_restoration_type: " << std::hex << +picParams->m_loopRestorationFlags.m_fields.m_crframeRestorationType << std::endl;
571 oss << "lr_unit_shift: " << std::hex << +picParams->m_loopRestorationFlags.m_fields.m_lrUnitShift << std::endl;
572 oss << "lr_uv_shift: " << std::hex << +picParams->m_loopRestorationFlags.m_fields.m_lrUvShift << std::endl;
573
574 for (auto i = 0; i < 7; i++)
575 {
576 oss << "wm[" << +i << "].wmtype: " << std::hex << +picParams->m_wm[i].m_wmtype << std::endl;
577 for (auto j = 0; j < 8; j++)
578 {
579 oss << "wm[" << +i << "].wmmat[" << +j << "]: " << std::hex << +picParams->m_wm[i].m_wmmat[j] << std::endl;
580 }
581 }
582
583 //Film Grain params
584 oss << "apply_grain: " << std::hex << +picParams->m_filmGrainParams.m_filmGrainInfoFlags.m_fields.m_applyGrain << std::endl;
585 oss << "chroma_scaling_from_luma: " << std::hex << +picParams->m_filmGrainParams.m_filmGrainInfoFlags.m_fields.m_chromaScalingFromLuma << std::endl;
586 oss << "grain_scaling_minus_8: " << std::hex << +picParams->m_filmGrainParams.m_filmGrainInfoFlags.m_fields.m_grainScalingMinus8 << std::endl;
587 oss << "ar_coeff_lag: " << std::hex << +picParams->m_filmGrainParams.m_filmGrainInfoFlags.m_fields.m_arCoeffLag << std::endl;
588 oss << "ar_coeff_shift_minus_6: " << std::hex << +picParams->m_filmGrainParams.m_filmGrainInfoFlags.m_fields.m_arCoeffShiftMinus6 << std::endl;
589 oss << "grain_scale_shift: " << std::hex << +picParams->m_filmGrainParams.m_filmGrainInfoFlags.m_fields.m_grainScaleShift << std::endl;
590 oss << "overlap_flag: " << std::hex << +picParams->m_filmGrainParams.m_filmGrainInfoFlags.m_fields.m_overlapFlag << std::endl;
591 oss << "clip_to_restricted_range: " << std::hex << +picParams->m_filmGrainParams.m_filmGrainInfoFlags.m_fields.m_clipToRestrictedRange << std::endl;
592
593 oss << "random_seed: " << std::hex << +picParams->m_filmGrainParams.m_randomSeed << std::endl;
594 oss << "num_y_points: " << std::hex << +picParams->m_filmGrainParams.m_numYPoints << std::endl;
595 for (auto i = 0; i < 14; i++)
596 {
597 oss << "point_y_value[" << +i << "]: " << std::hex << +picParams->m_filmGrainParams.m_pointYValue[i] << std::endl;
598 }
599 for (auto i = 0; i < 14; i++)
600 {
601 oss << "point_y_scaling[" << +i << "]: " << std::hex << +picParams->m_filmGrainParams.m_pointYScaling[i] << std::endl;
602 }
603
604 oss << "num_cb_points: " << std::hex << +picParams->m_filmGrainParams.m_numCbPoints << std::endl;
605 for (auto i = 0; i < 10; i++)
606 {
607 oss << "point_cb_value[" << +i << "]: " << std::hex << +picParams->m_filmGrainParams.m_pointCbValue[i] << std::endl;
608 }
609 for (auto i = 0; i < 10; i++)
610 {
611 oss << "point_cb_scaling[" << +i << "]: " << std::hex << +picParams->m_filmGrainParams.m_pointCbScaling[i] << std::endl;
612 }
613
614 oss << "num_cr_points: " << std::hex << +picParams->m_filmGrainParams.m_numCrPoints << std::endl;
615 for (auto i = 0; i < 10; i++)
616 {
617 oss << "point_cr_value[" << +i << "]: " << std::hex << +picParams->m_filmGrainParams.m_pointCrValue[i] << std::endl;
618 }
619 for (auto i = 0; i < 10; i++)
620 {
621 oss << "point_cr_scaling[" << +i << "]: " << std::hex << +picParams->m_filmGrainParams.m_pointCrScaling[i] << std::endl;
622 }
623
624 for (auto i = 0; i < 24; i++)
625 {
626 oss << "ar_coeffs_y[" << +i << "]: " << std::hex << +picParams->m_filmGrainParams.m_arCoeffsY[i] << std::endl;
627 }
628 for (auto i = 0; i < 25; i++)
629 {
630 oss << "ar_coeffs_cb[" << +i << "]: " << std::hex << +picParams->m_filmGrainParams.m_arCoeffsCb[i] << std::endl;
631 }
632 for (auto i = 0; i < 25; i++)
633 {
634 oss << "ar_coeffs_cr[" << +i << "]: " << std::hex << +picParams->m_filmGrainParams.m_arCoeffsCr[i] << std::endl;
635 }
636
637 oss << "cb_mult: " << std::hex << +picParams->m_filmGrainParams.m_cbMult << std::endl;
638 oss << "cb_luma_mult: " << std::hex << +picParams->m_filmGrainParams.m_cbLumaMult << std::endl;
639 oss << "cb_offset: " << std::hex << +picParams->m_filmGrainParams.m_cbOffset << std::endl;
640 oss << "cr_mult: " << std::hex << +picParams->m_filmGrainParams.m_crMult << std::endl;
641 oss << "cr_luma_mult: " << std::hex << +picParams->m_filmGrainParams.m_crLumaMult << std::endl;
642 oss << "cr_offset: " << std::hex << +picParams->m_filmGrainParams.m_crOffset << std::endl;
643 oss << "StatusReportFeedbackNumber: " << std::hex << +picParams->m_statusReportFeedbackNumber << std::endl;
644
645 //Driver internal
646 oss << "losslessMode: " << std::hex << +picParams->m_losslessMode << std::endl;
647 oss << "superResUpscaledWidthMinus1: " << std::hex << +picParams->m_superResUpscaledWidthMinus1 << std::endl;
648 oss << "superResUpscaledHeightMinus1: " << std::hex << +picParams->m_superResUpscaledHeightMinus1 << std::endl;
649 for (auto i = 0; i < 8; i++)
650 {
651 oss << "activeRefBitMaskMfmv[" << +i << "]: " << std::hex << +picParams->m_activeRefBitMaskMfmv[i] << std::endl;
652 }
653
654 const char* fileName = m_debugInterface->CreateFileName(
655 "DEC",
656 CodechalDbgBufferType::bufPicParams,
657 CodechalDbgExtType::txt);
658
659 std::ofstream ofs(fileName, std::ios::out);
660 ofs << oss.str();
661 ofs.close();
662355
663356 return MOS_STATUS_SUCCESS;
664357 }
117117 //!
118118 virtual MOS_STATUS InitMmcState();
119119
120
121 #if USE_CODECHAL_DEBUG_TOOL
122 //! \brief Dump the parameters
120 #if USE_CODECHAL_DEBUG_TOOL
123121 //!
124 //! \return MOS_STATUS
125 //! MOS_STATUS_SUCCESS if success, else fail reason
122 //! \brief Dump render targets
123 //! \param [in] reportData
124 //! Decode report data
125 //! \return MOS_STATUS
126 //! MOS_STATUS_SUCCESS if success, else fail reason
126127 //!
127 MOS_STATUS DumpParams(Av1BasicFeature &basicFeature);
128
129 //! \brief Dump the picture parameters
130 //!
131 //! \param [in] picParams
132 //! Pointer to CodecAv1PicParams
133 //!
134 //! \return MOS_STATUS
135 //! MOS_STATUS_SUCCESS if success, else fail reason
136 //!
137 MOS_STATUS DumpPicParams(CodecAv1PicParams *picParams);
138
139 //! \brief Dump Tile Group parameters into file
140 //!
141 //! \param [in] tileParams
142 //! Pointer to CodecAv1TileParams
143 //!
144 //! \return MOS_STATUS
145 //! MOS_STATUS_SUCCESS if success, else fail reason
146 //!
147 MOS_STATUS DumpBitstreamControlParams(CodecAv1TileParams *tileParams);
148 #endif
128 virtual MOS_STATUS DumpOutput(const DecodeStatusReportData& reportData) override;
129 #endif
149130
150131 //!
151132 //! \brief Create AV1 Decode feature manager for Gen12
0 # Copyright (c) 2020, Intel Corporation
0 # Copyright (c) 2021, Intel Corporation
11 #
22 # Permission is hereby granted, free of charge, to any person obtaining a
33 # copy of this software and associated documentation files (the "Software"),
187187 }
188188
189189 if (m_av1PicParams->m_picInfoFlags.m_fields.m_forceIntegerMv &&
190 m_av1PicParams->m_picInfoFlags.m_fields.m_allowHighPrecisionMv)
190 m_av1PicParams->m_picInfoFlags.m_fields.m_allowHighPrecisionMv &&
191 !(m_av1PicParams->m_picInfoFlags.m_fields.m_frameType == intraOnlyFrame ||
192 m_av1PicParams->m_picInfoFlags.m_fields.m_frameType == keyFrame))
191193 {
192194 DECODE_ASSERTMESSAGE("Conflict with AV1 Spec!");
193195 return MOS_STATUS_INVALID_PARAMETER;
164164 return m_decodeMode;
165165 }
166166
167 }
167 #if USE_CODECHAL_DEBUG_TOOL
168 MOS_STATUS Av1Pipeline::DumpParams(Av1BasicFeature &basicFeature)
169 {
170 m_debugInterface->m_frameType = basicFeature.m_av1PicParams->m_picInfoFlags.m_fields.m_frameType ? P_TYPE : I_TYPE;
171 m_debugInterface->m_bufferDumpFrameNum = basicFeature.m_frameNum;
172
173 DECODE_CHK_STATUS(DumpPicParams(
174 basicFeature.m_av1PicParams));
175
176 DECODE_CHK_STATUS(DumpBitstreamControlParams(
177 basicFeature.m_av1TileParams));
178
179 return MOS_STATUS_SUCCESS;
180 }
181
182 MOS_STATUS Av1Pipeline::DumpBitstreamControlParams(CodecAv1TileParams *tileParams)
183 {
184 CODECHAL_DEBUG_FUNCTION_ENTER;
185
186 if (!m_debugInterface->DumpIsEnabled(CodechalDbgAttr::attrSlcParams))
187 {
188 return MOS_STATUS_SUCCESS;
189 }
190
191 CODECHAL_DEBUG_CHK_NULL(tileParams);
192
193 std::ostringstream oss;
194 oss.setf(std::ios::showbase | std::ios::uppercase);
195
196 oss << "BSTileDataLocation: " << +tileParams->m_bsTileDataLocation << std::endl;
197 oss << "BSTileBytesInBuffer: " << +tileParams->m_bsTileBytesInBuffer << std::endl;
198 oss << "wBadBSBufferChopping: " << +tileParams->m_badBSBufferChopping << std::endl;
199 oss << "tile_row: " << +tileParams->m_tileRow << std::endl;
200 oss << "tile_column: " << +tileParams->m_tileColumn << std::endl;
201 oss << "tile_index: " << +tileParams->m_tileIndex << std::endl;
202 oss << "StartTileIdx: " << +tileParams->m_startTileIdx << std::endl;
203 oss << "EndTileIdx: " << +tileParams->m_endTileIdx << std::endl;
204 oss << "anchor_frame_idx: " << +tileParams->m_anchorFrameIdx.FrameIdx << std::endl;
205 oss << "BSTilePayloadSizeInBytes: " << +tileParams->m_bsTilePayloadSizeInBytes << std::endl;
206
207 const char *fileName = m_debugInterface->CreateFileName(
208 "DEC",
209 "BitstreamControlParams",
210 CodechalDbgExtType::txt);
211
212 std::ofstream ofs;
213 ofs.open(fileName, std::ios::out);
214 ofs << oss.str();
215 ofs.close();
216
217 return MOS_STATUS_SUCCESS;
218 }
219
220 MOS_STATUS Av1Pipeline::DumpPicParams(CodecAv1PicParams *picParams)
221 {
222 CODECHAL_DEBUG_FUNCTION_ENTER;
223
224 if (!m_debugInterface->DumpIsEnabled(CodechalDbgAttr::attrPicParams))
225 {
226 return MOS_STATUS_SUCCESS;
227 }
228 CODECHAL_DEBUG_CHK_NULL(picParams);
229
230 std::ostringstream oss;
231 oss.setf(std::ios::showbase | std::ios::uppercase);
232
233 oss << "CurrPic FrameIdx: " << std::hex << +picParams->m_currPic.FrameIdx << std::endl;
234 oss << "CurrDisplayPic FrameIdx: " << std::hex << +picParams->m_currDisplayPic.FrameIdx << std::endl;
235 oss << "Profile: " << std::hex << +picParams->m_profile << std::endl;
236 oss << "AnchorFrameInsertion: " << std::hex << +picParams->m_anchorFrameInsertion << std::endl;
237 oss << "order_hint_bits_minus_1: " << std::hex << +picParams->m_orderHintBitsMinus1 << std::endl;
238 oss << "BitDepthIdx: " << std::hex << +picParams->m_bitDepthIdx << std::endl;
239
240 //Sequence Info Flags
241 oss << "dwSeqInfoFlags: " << std::hex << +picParams->m_seqInfoFlags.m_value << std::endl;
242 oss << "still_picture: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_stillPicture << std::endl;
243 oss << "use_128x128_superblock: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_use128x128Superblock << std::endl;
244 oss << "enable_filter_intra: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_enableFilterIntra << std::endl;
245 oss << "enable_intra_edge_filter: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_enableIntraEdgeFilter << std::endl;
246 oss << "enable_interintra_compound: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_enableInterintraCompound << std::endl;
247 oss << "enable_masked_compound: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_enableMaskedCompound << std::endl;
248 oss << "enable_dual_filter: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_enableDualFilter << std::endl;
249 oss << "enable_order_hint: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_enableOrderHint << std::endl;
250 oss << "enable_jnt_comp: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_enableJntComp << std::endl;
251 oss << "enable_cdef: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_enableCdef << std::endl;
252 oss << "mono_chrome: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_monoChrome << std::endl;
253 oss << "color_range: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_colorRange << std::endl;
254 oss << "subsampling_x: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_subsamplingX << std::endl;
255 oss << "subsampling_y: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_subsamplingY << std::endl;
256 oss << "chroma_sample_position: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_chromaSamplePosition << std::endl;
257 oss << "film_grain_params_present: " << std::hex << +picParams->m_seqInfoFlags.m_fields.m_filmGrainParamsPresent << std::endl;
258
259 //frame info
260 oss << "dwPicInfoFlags: " << std::hex << +picParams->m_picInfoFlags.m_value << std::endl;
261 oss << "frame_type: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_frameType << std::endl;
262 oss << "show_frame: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_showFrame << std::endl;
263 oss << "showable_frame: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_showableFrame << std::endl;
264 oss << "error_resilient_mode: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_errorResilientMode << std::endl;
265 oss << "disable_cdf_update: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_disableCdfUpdate << std::endl;
266 oss << "allow_screen_content_tools: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_allowScreenContentTools << std::endl;
267 oss << "force_integer_mv: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_forceIntegerMv << std::endl;
268 oss << "allow_intrabc: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_allowIntrabc << std::endl;
269 oss << "use_superres: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_useSuperres << std::endl;
270 oss << "allow_high_precision_mv: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_allowHighPrecisionMv << std::endl;
271 oss << "is_motion_mode_switchable: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_isMotionModeSwitchable << std::endl;
272 oss << "use_ref_frame_mvs: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_useRefFrameMvs << std::endl;
273 oss << "disable_frame_end_update_cdf: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_disableFrameEndUpdateCdf << std::endl;
274 oss << "uniform_tile_spacing_flag: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_uniformTileSpacingFlag << std::endl;
275 oss << "allow_warped_motion: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_allowWarpedMotion << std::endl;
276 oss << "large_scale_tile: " << std::hex << +picParams->m_picInfoFlags.m_fields.m_largeScaleTile << std::endl;
277
278 oss << "frame_width_minus1: " << std::hex << +picParams->m_frameWidthMinus1 << std::endl;
279 oss << "frame_height_minus1: " << std::hex << +picParams->m_frameHeightMinus1 << std::endl;
280
281 for (auto i = 0; i < 8; ++i)
282 {
283 oss << "ref_frame_map[" << +i << "] FrameIdx:" << std::hex << +picParams->m_refFrameMap[i].FrameIdx << std::endl;
284 oss << "ref_frame_map[" << +i << "] PicFlags:" << std::hex << +picParams->m_refFrameMap[i].PicFlags << std::endl;
285 }
286
287 for (auto i = 0; i < 7; i++)
288 {
289 oss << "ref_frame_idx[" << +i << "]: " << std::hex << +picParams->m_refFrameIdx[i] << std::endl;
290 }
291
292 oss << "primary_ref_frame: " << std::hex << +picParams->m_primaryRefFrame << std::endl;
293 oss << "output_frame_width_in_tiles_minus_1: " << std::hex << +picParams->m_outputFrameWidthInTilesMinus1 << std::endl;
294 oss << "output_frame_height_in_tiles_minus_1: " << std::hex << +picParams->m_outputFrameHeightInTilesMinus1 << std::endl;
295
296 for (auto i = 0; i < 2; i++)
297 {
298 oss << "filter_level[" << +i << "]: " << std::hex << +picParams->m_filterLevel[i] << std::endl;
299 }
300 oss << "filter_level_u: " << std::hex << +picParams->m_filterLevelU << std::endl;
301 oss << "filter_level_v: " << std::hex << +picParams->m_filterLevelV << std::endl;
302
303 //Loop Filter Info Flags
304 oss << "cLoopFilterInfoFlags value: " << std::hex << +picParams->m_loopFilterInfoFlags.m_value << std::endl;
305 oss << "sharpness_level: " << std::hex << +picParams->m_loopFilterInfoFlags.m_fields.m_sharpnessLevel << std::endl;
306 oss << "mode_ref_delta_enabled: " << std::hex << +picParams->m_loopFilterInfoFlags.m_fields.m_modeRefDeltaEnabled << std::endl;
307 oss << "mode_ref_delta_update: " << std::hex << +picParams->m_loopFilterInfoFlags.m_fields.m_modeRefDeltaUpdate << std::endl;
308
309 oss << "order_hint: " << std::hex << +picParams->m_orderHint << std::endl;
310 oss << "superres_scale_denominator: " << std::hex << +picParams->m_superresScaleDenominator << std::endl;
311 oss << "interp_filter: " << std::hex << +picParams->m_interpFilter << std::endl;
312
313 for (auto i = 0; i < 8; i++)
314 {
315 oss << "ref_deltas[" << +i << "]: " << std::hex << +picParams->m_refDeltas[i] << std::endl;
316 }
317
318 for (auto i = 0; i < 2; i++)
319 {
320 oss << "mode_deltas[" << +i << "]: " << std::hex << +picParams->m_modeDeltas[i] << std::endl;
321 }
322
323 oss << "base_qindex: " << std::hex << +picParams->m_baseQindex << std::endl;
324 oss << "y_dc_delta_q: " << std::hex << +picParams->m_yDcDeltaQ << std::endl;
325 oss << "u_dc_delta_q: " << std::hex << +picParams->m_uDcDeltaQ << std::endl;
326 oss << "u_ac_delta_q: " << std::hex << +picParams->m_uAcDeltaQ << std::endl;
327 oss << "v_dc_delta_q: " << std::hex << +picParams->m_vDcDeltaQ << std::endl;
328 oss << "v_ac_delta_q: " << std::hex << +picParams->m_vAcDeltaQ << std::endl;
329
330 // quantization_matrix
331 oss << "wQMatrixFlags value: " << std::hex << +picParams->m_qMatrixFlags.m_value << std::endl;
332 oss << "using_qmatrix: " << std::hex << +picParams->m_qMatrixFlags.m_fields.m_usingQmatrix<< std::endl;
333 oss << "qm_y: " << std::hex << +picParams->m_qMatrixFlags.m_fields.m_qmY << std::endl;
334 oss << "qm_u: " << std::hex << +picParams->m_qMatrixFlags.m_fields.m_qmU << std::endl;
335 oss << "qm_v: " << std::hex << +picParams->m_qMatrixFlags.m_fields.m_qmV << std::endl;
336
337 // Mode control flags
338 oss << "dwModeControlFlags value: " << std::hex << +picParams->m_modeControlFlags.m_value << std::endl;
339 oss << "delta_q_present_flag: " << std::hex << +picParams->m_modeControlFlags.m_fields.m_deltaQPresentFlag << std::endl;
340 oss << "log2_delta_q_res: " << std::hex << +picParams->m_modeControlFlags.m_fields.m_log2DeltaQRes << std::endl;
341 oss << "delta_lf_present_flag: " << std::hex << +picParams->m_modeControlFlags.m_fields.m_deltaLfPresentFlag << std::endl;
342 oss << "log2_delta_lf_res: " << std::hex << +picParams->m_modeControlFlags.m_fields.m_log2DeltaLfRes << std::endl;
343 oss << "delta_lf_multi: " << std::hex << +picParams->m_modeControlFlags.m_fields.m_deltaLfMulti << std::endl;
344 oss << "tx_mode: " << std::hex << +picParams->m_modeControlFlags.m_fields.m_txMode << std::endl;
345 oss << "reference_mode: " << std::hex << +picParams->m_modeControlFlags.m_fields.m_referenceMode << std::endl;
346 oss << "reduced_tx_set_used: " << std::hex << +picParams->m_modeControlFlags.m_fields.m_reducedTxSetUsed << std::endl;
347 oss << "skip_mode_present: " << std::hex << +picParams->m_modeControlFlags.m_fields.m_skipModePresent << std::endl;
348
349 // Segmentation
350 oss << "enabled: " << std::hex << +picParams->m_av1SegData.m_enabled << std::endl;
351 oss << "update_map: " << std::hex << +picParams->m_av1SegData.m_updateMap << std::endl;
352 oss << "temporal_update: " << std::hex << +picParams->m_av1SegData.m_temporalUpdate << std::endl;
353 oss << "update_data: " << std::hex << +picParams->m_av1SegData.m_updateData << std::endl;
354
355 for (auto i = 0; i < 8; i++)
356 {
357 for (auto j = 0; j < 8; j++)
358 {
359 oss << "feature_data[" << +i << "][" << +j << "]: " << std::hex << +picParams->m_av1SegData.m_featureData[i][j] << std::endl;
360 }
361 }
362 for (auto i = 0; i < 8; i++)
363 {
364 oss << "feature_mask[" << +i << "]: " << std::hex << +picParams->m_av1SegData.m_featureMask [i] << std::endl;
365 }
366
367 oss << "tile_cols: " << std::hex << +picParams->m_tileCols << std::endl;
368 for (auto i = 0; i < 63; i++)
369 {
370 oss << "width_in_sbs_minus_1[" << +i << "]: " << std::hex << +picParams->m_widthInSbsMinus1[i] << std::endl;
371 }
372 oss << "tile_rows: " << std::hex << +picParams->m_tileRows << std::endl;
373 for (auto i = 0; i < 63; i++)
374 {
375 oss << "height_in_sbs_minus_1[" << +i << "]: " << std::hex << +picParams->m_heightInSbsMinus1[i] << std::endl;
376 }
377
378
379 oss << "tile_count_minus_1: " << std::hex << +picParams->m_tileCountMinus1 << std::endl;
380 oss << "context_update_tile_id: " << std::hex << +picParams->m_contextUpdateTileId << std::endl;
381
382 oss << "cdef_damping_minus_3: " << std::hex << +picParams->m_cdefDampingMinus3 << std::endl;
383 oss << "cdef_bits: " << std::hex << +picParams->m_cdefBits << std::endl;
384 for (auto i = 0; i < 8; i++)
385 {
386 oss << "cdef_y_strengths[" << +i << "]: " << std::hex << +picParams->m_cdefYStrengths[i] << std::endl;
387 }
388 for (auto i = 0; i < 8; i++)
389 {
390 oss << "cdef_uv_strengths[" << +i << "]: " << std::hex << +picParams->m_cdefUvStrengths[i] << std::endl;
391 }
392
393 // Loop Restoration Flags
394 oss << "LoopRestorationFlags value: " << std::hex << +picParams->m_loopRestorationFlags.m_value << std::endl;
395 oss << "yframe_restoration_type: " << std::hex << +picParams->m_loopRestorationFlags.m_fields.m_yframeRestorationType << std::endl;
396 oss << "cbframe_restoration_type: " << std::hex << +picParams->m_loopRestorationFlags.m_fields.m_cbframeRestorationType << std::endl;
397 oss << "crframe_restoration_type: " << std::hex << +picParams->m_loopRestorationFlags.m_fields.m_crframeRestorationType << std::endl;
398 oss << "lr_unit_shift: " << std::hex << +picParams->m_loopRestorationFlags.m_fields.m_lrUnitShift << std::endl;
399 oss << "lr_uv_shift: " << std::hex << +picParams->m_loopRestorationFlags.m_fields.m_lrUvShift << std::endl;
400
401 for (auto i = 0; i < 7; i++)
402 {
403 oss << "wm[" << +i << "].wmtype: " << std::hex << +picParams->m_wm[i].m_wmtype << std::endl;
404 for (auto j = 0; j < 8; j++)
405 {
406 oss << "wm[" << +i << "].wmmat[" << +j << "]: " << std::hex << +picParams->m_wm[i].m_wmmat[j] << std::endl;
407 }
408 }
409
410 //Film Grain params
411 oss << "apply_grain: " << std::hex << +picParams->m_filmGrainParams.m_filmGrainInfoFlags.m_fields.m_applyGrain << std::endl;
412 oss << "chroma_scaling_from_luma: " << std::hex << +picParams->m_filmGrainParams.m_filmGrainInfoFlags.m_fields.m_chromaScalingFromLuma << std::endl;
413 oss << "grain_scaling_minus_8: " << std::hex << +picParams->m_filmGrainParams.m_filmGrainInfoFlags.m_fields.m_grainScalingMinus8 << std::endl;
414 oss << "ar_coeff_lag: " << std::hex << +picParams->m_filmGrainParams.m_filmGrainInfoFlags.m_fields.m_arCoeffLag << std::endl;
415 oss << "ar_coeff_shift_minus_6: " << std::hex << +picParams->m_filmGrainParams.m_filmGrainInfoFlags.m_fields.m_arCoeffShiftMinus6 << std::endl;
416 oss << "grain_scale_shift: " << std::hex << +picParams->m_filmGrainParams.m_filmGrainInfoFlags.m_fields.m_grainScaleShift << std::endl;
417 oss << "overlap_flag: " << std::hex << +picParams->m_filmGrainParams.m_filmGrainInfoFlags.m_fields.m_overlapFlag << std::endl;
418 oss << "clip_to_restricted_range: " << std::hex << +picParams->m_filmGrainParams.m_filmGrainInfoFlags.m_fields.m_clipToRestrictedRange << std::endl;
419
420 oss << "random_seed: " << std::hex << +picParams->m_filmGrainParams.m_randomSeed << std::endl;
421 oss << "num_y_points: " << std::hex << +picParams->m_filmGrainParams.m_numYPoints << std::endl;
422 for (auto i = 0; i < 14; i++)
423 {
424 oss << "point_y_value[" << +i << "]: " << std::hex << +picParams->m_filmGrainParams.m_pointYValue[i] << std::endl;
425 }
426 for (auto i = 0; i < 14; i++)
427 {
428 oss << "point_y_scaling[" << +i << "]: " << std::hex << +picParams->m_filmGrainParams.m_pointYScaling[i] << std::endl;
429 }
430
431 oss << "num_cb_points: " << std::hex << +picParams->m_filmGrainParams.m_numCbPoints << std::endl;
432 for (auto i = 0; i < 10; i++)
433 {
434 oss << "point_cb_value[" << +i << "]: " << std::hex << +picParams->m_filmGrainParams.m_pointCbValue[i] << std::endl;
435 }
436 for (auto i = 0; i < 10; i++)
437 {
438 oss << "point_cb_scaling[" << +i << "]: " << std::hex << +picParams->m_filmGrainParams.m_pointCbScaling[i] << std::endl;
439 }
440
441 oss << "num_cr_points: " << std::hex << +picParams->m_filmGrainParams.m_numCrPoints << std::endl;
442 for (auto i = 0; i < 10; i++)
443 {
444 oss << "point_cr_value[" << +i << "]: " << std::hex << +picParams->m_filmGrainParams.m_pointCrValue[i] << std::endl;
445 }
446 for (auto i = 0; i < 10; i++)
447 {
448 oss << "point_cr_scaling[" << +i << "]: " << std::hex << +picParams->m_filmGrainParams.m_pointCrScaling[i] << std::endl;
449 }
450
451 for (auto i = 0; i < 24; i++)
452 {
453 oss << "ar_coeffs_y[" << +i << "]: " << std::hex << +picParams->m_filmGrainParams.m_arCoeffsY[i] << std::endl;
454 }
455 for (auto i = 0; i < 25; i++)
456 {
457 oss << "ar_coeffs_cb[" << +i << "]: " << std::hex << +picParams->m_filmGrainParams.m_arCoeffsCb[i] << std::endl;
458 }
459 for (auto i = 0; i < 25; i++)
460 {
461 oss << "ar_coeffs_cr[" << +i << "]: " << std::hex << +picParams->m_filmGrainParams.m_arCoeffsCr[i] << std::endl;
462 }
463
464 oss << "cb_mult: " << std::hex << +picParams->m_filmGrainParams.m_cbMult << std::endl;
465 oss << "cb_luma_mult: " << std::hex << +picParams->m_filmGrainParams.m_cbLumaMult << std::endl;
466 oss << "cb_offset: " << std::hex << +picParams->m_filmGrainParams.m_cbOffset << std::endl;
467 oss << "cr_mult: " << std::hex << +picParams->m_filmGrainParams.m_crMult << std::endl;
468 oss << "cr_luma_mult: " << std::hex << +picParams->m_filmGrainParams.m_crLumaMult << std::endl;
469 oss << "cr_offset: " << std::hex << +picParams->m_filmGrainParams.m_crOffset << std::endl;
470 oss << "StatusReportFeedbackNumber: " << std::hex << +picParams->m_statusReportFeedbackNumber << std::endl;
471
472 //Driver internal
473 oss << "losslessMode: " << std::hex << +picParams->m_losslessMode << std::endl;
474 oss << "superResUpscaledWidthMinus1: " << std::hex << +picParams->m_superResUpscaledWidthMinus1 << std::endl;
475 oss << "superResUpscaledHeightMinus1: " << std::hex << +picParams->m_superResUpscaledHeightMinus1 << std::endl;
476 for (auto i = 0; i < 8; i++)
477 {
478 oss << "activeRefBitMaskMfmv[" << +i << "]: " << std::hex << +picParams->m_activeRefBitMaskMfmv[i] << std::endl;
479 }
480
481 const char* fileName = m_debugInterface->CreateFileName(
482 "DEC",
483 CodechalDbgBufferType::bufPicParams,
484 CodechalDbgExtType::txt);
485
486 std::ofstream ofs(fileName, std::ios::out);
487 ofs << oss.str();
488 ofs.close();
489
490 return MOS_STATUS_SUCCESS;
491 }
492 #endif
493
494 }
110110 //!
111111 virtual MOS_STATUS CreateFeatureManager() override;
112112
113 #if USE_CODECHAL_DEBUG_TOOL
114 //! \brief Dump the parameters
115 //!
116 //! \return MOS_STATUS
117 //! MOS_STATUS_SUCCESS if success, else fail reason
118 //!
119 MOS_STATUS DumpParams(Av1BasicFeature &basicFeature);
120
121 //! \brief Dump the picture parameters
122 //!
123 //! \param [in] picParams
124 //! Pointer to CodecAv1PicParams
125 //!
126 //! \return MOS_STATUS
127 //! MOS_STATUS_SUCCESS if success, else fail reason
128 //!
129 MOS_STATUS DumpPicParams(CodecAv1PicParams *picParams);
130
131 //! \brief Dump Tile Group parameters into file
132 //!
133 //! \param [in] tileParams
134 //! Pointer to CodecAv1TileParams
135 //!
136 //! \return MOS_STATUS
137 //! MOS_STATUS_SUCCESS if success, else fail reason
138 //!
139 MOS_STATUS DumpBitstreamControlParams(CodecAv1TileParams *tileParams);
140 #endif
141
113142 protected:
114143 HucCopyPkt *m_cdfCopyPkt = nullptr; //!< Update default cdf buffer with huc stream out packet
115144 Av1DecodeMode m_decodeMode = baseDecodeMode; //!< Decode mode
00 /*
1 * Copyright (c) 2020, Intel Corporation
1 * Copyright (c) 2020-2021, Intel Corporation
22 *
33 * Permission is hereby granted, free of charge, to any person obtaining a
44 * copy of this software and associated documentation files (the "Software"),
504504 uint32_t completedCount = m_statusReport->GetCompletedCount();
505505 if (completedCount <= m_statusCheckCount)
506506 {
507 DECODE_CHK_COND(completedCount < m_statusCheckCount, "Invalid statuc check count");
507 DECODE_CHK_COND(completedCount < m_statusCheckCount, "Invalid status check count");
508508 return MOS_STATUS_SUCCESS;
509509 }
510510
113113 m_statusReportData[submitIndex].currSfcOutputPicRes = inputParameters->sfcOutputPicRes;
114114 m_statusReportData[submitIndex].currHistogramOutBuf = inputParameters->histogramOutputBuf;
115115 m_statusReportData[submitIndex].frameType = inputParameters->pictureCodingType;
116 m_statusReportData[submitIndex].currFgOutputPicRes = inputParameters->fgOutputPicRes;
116117 #endif
117118 }
118119
6161 PMOS_RESOURCE currSfcOutputPicRes = nullptr;
6262 //! \brief Applies when debug dumps are enabled, pointer to histogram output resource for the picture associated with this status report
6363 PMOS_RESOURCE currHistogramOutBuf = nullptr;
64 //! \brief Applies when debug dumps are enabled, pointer to AV1 film grain output resource for the picture associated with this status report
65 PMOS_RESOURCE currFgOutputPicRes = nullptr;
6466 //! \brief Applies when debug dumps are enabled, stream out buffer
6567 PMOS_RESOURCE streamOutBuf = nullptr;
6668 //! \brief Applies when debug dumps are enabled, index of the streamout buffer
116116 #if (_DEBUG || _RELEASE_INTERNAL)
117117 MOS_RESOURCE *sfcOutputPicRes;
118118 MOS_RESOURCE *histogramOutputBuf;
119 MOS_RESOURCE *fgOutputPicRes;
119120 #endif
120121 };
121122
3737 // only used by other | _DECL: declaration
3838 // macros | _DEF : definition
3939
40 #define __MHW_CMD_PAR_T2(CMD) CMD##_Params // MHW command parameter type
41 #define _MHW_CMD_PAR_T(CMD) __MHW_CMD_PAR_T2(CMD) // to support 2-level macro expanding
42 #define __MHW_CMD_PAR_T(CMD) CMD##_Params_ // MHW command parameter type alias, to avoid compile error
40 #define __MHW_PAR_T(CMD) CMD##_PAR // MHW command parameter type
41 #define _MHW_PAR_T(CMD) __MHW_PAR_T(CMD) // to support 2-level macro expanding
42 #define __MHW_PAR_ALIAS_T(CMD) CMD##_PAR_ALIAS // MHW command parameter type alias, to avoid compile error
4343
44 #define __MHW_CMD_PAR_SET_F(CMD) SetCmdParams_##CMD // function name to set MHW command parameters
44 #define __MHW_SETPAR_F(CMD) SETPAR_##CMD // function name to set MHW command parameters
45 #define MHW_SETPAR_F(CMD) __MHW_SETPAR_F(CMD) // to support 2-level macro expanding
4546
46 #define __MHW_CMD_PAR_SET_COMMON_DECL(CMD) __MHW_CMD_PAR_SET_F(CMD)(mhw::Pointer<__MHW_CMD_PAR_T(CMD)> params) const
47 #define __MHW_SETPAR_COMMON_DECL(CMD) MHW_SETPAR_F(CMD)(__MHW_PAR_ALIAS_T(CMD) &params) const
4748
4849 // CodecHal uses it to define set MHW params functions in header file
49 #define MHW_CMD_PAR_SET_DECL_HDR(CMD) MOS_STATUS __MHW_CMD_PAR_SET_COMMON_DECL(CMD) override
50 #define MHW_SETPAR_DECL_HDR(CMD) MOS_STATUS __MHW_SETPAR_COMMON_DECL(CMD) override
5051
5152 // CodecHal uses it to define set MHW params functions in source file
52 #define MHW_CMD_PAR_SET_DECL_SRC(CMD, CLASS) MOS_STATUS CLASS::__MHW_CMD_PAR_SET_COMMON_DECL(CMD)
53 #define MHW_SETPAR_DECL_SRC(CMD, CLASS) MOS_STATUS CLASS::__MHW_SETPAR_COMMON_DECL(CMD)
5354
54 #define _MHW_CMD_PAR_SET_DEF(CMD) \
55 using __MHW_CMD_PAR_T(CMD) = _MHW_CMD_PAR_T(CMD); \
56 virtual MOS_STATUS __MHW_CMD_PAR_SET_COMMON_DECL(CMD) \
57 { \
58 return MOS_STATUS_SUCCESS; \
55 #define _MHW_SETPAR_DEF(CMD) \
56 using __MHW_PAR_ALIAS_T(CMD) = _MHW_PAR_T(CMD); \
57 virtual MOS_STATUS __MHW_SETPAR_COMMON_DECL(CMD) \
58 { \
59 return MOS_STATUS_SUCCESS; \
5960 }
6061
61 namespace mhw
62 {
63 template <typename T>
64 using Pointer = std::shared_ptr<T>;
65
66 template <typename T, typename U>
67 Pointer<T> StaticPointerCast(const Pointer<U> &r)
68 {
69 return std::static_pointer_cast<T>(r);
70 }
71
72 template <typename T, typename U>
73 Pointer<T> DynamicPointerCast(const Pointer<U> &r)
74 {
75 return std::dynamic_pointer_cast<T>(r);
76 }
77
78 template <typename T, typename U>
79 Pointer<T> ConstPointerCast(const Pointer<U> &r)
80 {
81 return std::const_pointer_cast<T>(r);
82 }
83
84 template <typename T>
85 Pointer<T> MakePointer()
86 {
87 return std::make_shared<T>();
88 }
89
90 template <typename T, typename... Args>
91 Pointer<T> MakePointer(Args &&...args)
92 {
93 return std::make_shared<T>(std::forward<Args>(args)...);
94 }
95 } // namespace mhw
96
9762 #endif // __MHW_CMDPAR_H__
3737 }
3838 #endif // MHW_HWCMDPARSER_ENABLED
3939 #undef DO_FIELDS
40 #endif // DO_FIELDS
4041 return MOS_STATUS_SUCCESS;
41 #endif // DO_FIELDS
3636 // only used by other | _DECL: declaration
3737 // macros | _DEF : definition
3838
39 #define _MHW_CMD_T(CMD) CMD##_CMD // MHW command type
40 #define __MHW_CMD_PAR_M(CMD) m_##CMD##_Params // member which is a pointer to MHW command parameters
41
42 #define __MHW_CMD_SET_F(CMD) SetCmd_##CMD // function name to set command data
39 #define __MHW_CMD_T(CMD) CMD##_CMD // MHW command type
40
41 // MHW command parameters and data
42 #define __MHW_CMDINFO_T(CMD) std::pair<_MHW_PAR_T(CMD), typename cmd_t::__MHW_CMD_T(CMD)>
43
44 #define __MHW_CMDINFO_M(CMD) m_##CMD##_Info
45
46 #define __MHW_GETPAR_DEF(CMD) \
47 __MHW_GETPAR_DECL(CMD) override \
48 { \
49 return this->__MHW_CMDINFO_M(CMD)->first; \
50 }
51
52 #define __MHW_GETSIZE_DEF(CMD) \
53 __MHW_GETSIZE_DECL(CMD) override \
54 { \
55 return sizeof(typename cmd_t::__MHW_CMD_T(CMD)); \
56 }
4357
4458 #if MHW_HWCMDPARSER_ENABLED
45 #define __MHW_CMD_SET_DECL(CMD) MOS_STATUS __MHW_CMD_SET_F(CMD)(void *cmdData, const std::string &cmdName = #CMD)
59 #define MHW_HWCMDPARSER_INITCMDNAME(CMD) this->m_currentCmdName = #CMD
4660 #else
47 #define __MHW_CMD_SET_DECL(CMD) MOS_STATUS __MHW_CMD_SET_F(CMD)(void *cmdData)
61 #define MHW_HWCMDPARSER_INITCMDNAME(CMD)
4862 #endif
4963
50 #define _MHW_CMD_SET_DECL_OVERRIDE(CMD) __MHW_CMD_SET_DECL(CMD) override
51
52 #define __MHW_CMD_PAR_GET_DEF(CMD) \
53 __MHW_CMD_PAR_GET_DECL(CMD) override \
54 { \
55 if (reset) \
56 { \
57 *(this->__MHW_CMD_PAR_M(CMD)) = {}; \
58 } \
59 return this->__MHW_CMD_PAR_M(CMD); \
60 }
61
62 #define __MHW_CMD_BYTE_SIZE_GET_DEF(CMD) \
63 __MHW_CMD_BYTE_SIZE_GET_DECL(CMD) override \
64 { \
65 return sizeof(typename cmd_t::_MHW_CMD_T(CMD)); \
66 }
67
68 #define __MHW_CMD_ADD_DEF(CMD) \
69 __MHW_CMD_ADD_DECL(CMD) override \
70 { \
71 MHW_FUNCTION_ENTER; \
72 this->m_currentCmdBuf = cmdBuf; \
73 this->m_currentBatchBuf = batchBuf; \
74 typename cmd_t::_MHW_CMD_T(CMD) cmdData; \
75 MHW_CHK_STATUS_RETURN(this->__MHW_CMD_SET_F(CMD)(&cmdData)); \
76 MHW_HWCMDPARSER_PARSECMD(#CMD, \
77 reinterpret_cast<uint32_t*>(&cmdData), \
78 sizeof(cmdData) / sizeof(uint32_t)); \
79 MHW_CHK_STATUS_RETURN(Mhw_AddCommandCmdOrBB(cmdBuf, batchBuf, &cmdData, sizeof(cmdData))); \
80 if (extraData && extraDataSize > 0) \
81 { \
82 MHW_CHK_STATUS_RETURN(Mhw_AddCommandCmdOrBB(cmdBuf, batchBuf, extraData, extraDataSize)); \
83 } \
84 return MOS_STATUS_SUCCESS; \
85 }
86
87 #define _MHW_CMD_ALL_DEF_FOR_IMPL(CMD) \
88 public: \
89 __MHW_CMD_PAR_GET_DEF(CMD); \
90 protected: \
91 virtual __MHW_CMD_SET_DECL(CMD) { return MOS_STATUS_SUCCESS; } \
92 mhw::Pointer<_MHW_CMD_PAR_T(CMD)> __MHW_CMD_PAR_M(CMD) = mhw::MakePointer<_MHW_CMD_PAR_T(CMD)>()
93
94 #define _MHW_CMD_ALL_DEF_FOR_IMPL_GENERIC(CMD) \
95 public: \
96 __MHW_CMD_BYTE_SIZE_GET_DEF(CMD); \
97 __MHW_CMD_ADD_DEF(CMD)
98
99 #define _MHW_CMDSET_GETCMDPARAMS_AND_CALLBASE(CMD) \
100 MHW_FUNCTION_ENTER; \
101 auto cmd = reinterpret_cast<typename cmd_t::_MHW_CMD_T(CMD) *>(cmdData); \
102 const auto &params = this->__MHW_CMD_PAR_M(CMD); \
103 base_t::__MHW_CMD_SET_F(CMD)(cmd)
64 #define __MHW_ADDCMD_DEF(CMD) \
65 __MHW_ADDCMD_DECL(CMD) override \
66 { \
67 MHW_FUNCTION_ENTER; \
68 MHW_HWCMDPARSER_INITCMDNAME(CMD); \
69 return this->AddCmd(cmdBuf, \
70 batchBuf, \
71 this->__MHW_CMDINFO_M(CMD)->second, \
72 [=]() -> MOS_STATUS { return this->__MHW_SETCMD_F(CMD)(); }); \
73 }
74
75 #if __cplusplus < 201402L
76 #define __MHW_CMDINFO_DEF(CMD) std::unique_ptr<__MHW_CMDINFO_T(CMD)> \
77 __MHW_CMDINFO_M(CMD) = std::unique_ptr<__MHW_CMDINFO_T(CMD)>(new __MHW_CMDINFO_T(CMD)())
78 #else
79 #define __MHW_CMDINFO_DEF(CMD) std::unique_ptr<__MHW_CMDINFO_T(CMD)> \
80 __MHW_CMDINFO_M(CMD) = std::make_unique<__MHW_CMDINFO_T(CMD)>()
81 #endif
82
83 #define _MHW_CMD_ALL_DEF_FOR_IMPL(CMD) \
84 public: \
85 __MHW_GETPAR_DEF(CMD); \
86 __MHW_GETSIZE_DEF(CMD); \
87 __MHW_ADDCMD_DEF(CMD) \
88 protected: \
89 __MHW_CMDINFO_DEF(CMD)
90
91 #define _MHW_SETCMD_OVERRIDE_DECL(CMD) __MHW_SETCMD_DECL(CMD) override
92
93 #define _MHW_SETCMD_CALLBASE(CMD) \
94 MHW_FUNCTION_ENTER; \
95 const auto &params = this->__MHW_CMDINFO_M(CMD)->first; \
96 auto & cmd = this->__MHW_CMDINFO_M(CMD)->second; \
97 MHW_CHK_STATUS_RETURN(base_t::__MHW_SETCMD_F(CMD)())
10498
10599 // DWORD location of a command field
106100 #define _MHW_CMD_DW_LOCATION(field) \
107 static_cast<uint32_t>((reinterpret_cast<uint32_t *>(&(cmd->field)) - reinterpret_cast<uint32_t *>(&(*cmd))))
108
109 #define _MHW_CMD_ASSIGN_FIELD(dw, field, value) cmd->dw.field = (value)
101 static_cast<uint32_t>((reinterpret_cast<uint32_t *>(&(cmd.field)) - reinterpret_cast<uint32_t *>(&cmd)))
102
103 #define _MHW_CMD_ASSIGN_FIELD(dw, field, value) cmd.dw.field = (value)
110104
111105 namespace mhw
112106 {
113 inline int32_t Clip3(int32_t x, int32_t y, int32_t z)
114 {
115 int32_t ret = 0;
116
117 if (z < x)
118 {
119 ret = x;
120 }
121 else if (z > y)
122 {
123 ret = y;
124 }
125 else
126 {
127 ret = z;
128 }
129
130 return ret;
131 }
132
133 inline bool MmcEnabled(MOS_MEMCOMP_STATE state)
134 {
135 return state == MOS_MEMCOMP_RC || state == MOS_MEMCOMP_MC;
136 }
137
138 inline bool MmcRcEnabled(MOS_MEMCOMP_STATE state)
139 {
140 return state == MOS_MEMCOMP_RC;
141 }
142
143 inline uint32_t GetHwTileType(MOS_TILE_TYPE tileType, MOS_TILE_MODE_GMM tileModeGMM, bool gmmTileEnabled)
144 {
145 uint32_t tileMode = 0;
146
147 if (gmmTileEnabled)
148 {
149 return tileModeGMM;
150 }
151
152 switch (tileType)
153 {
154 case MOS_TILE_LINEAR:
155 tileMode = 0;
156 break;
157 case MOS_TILE_YS:
158 tileMode = 1;
159 break;
160 case MOS_TILE_X:
161 tileMode = 2;
162 break;
163 default:
164 tileMode = 3;
165 break;
166 }
167
168 return tileMode;
169 }
170
171107 class Impl
172108 {
173109 protected:
110 static int32_t Clip3(int32_t x, int32_t y, int32_t z)
111 {
112 int32_t ret = 0;
113
114 if (z < x)
115 {
116 ret = x;
117 }
118 else if (z > y)
119 {
120 ret = y;
121 }
122 else
123 {
124 ret = z;
125 }
126
127 return ret;
128 }
129
130 static bool MmcEnabled(MOS_MEMCOMP_STATE state)
131 {
132 return state == MOS_MEMCOMP_RC || state == MOS_MEMCOMP_MC;
133 }
134
135 static bool MmcRcEnabled(MOS_MEMCOMP_STATE state)
136 {
137 return state == MOS_MEMCOMP_RC;
138 }
139
140 static uint32_t GetHwTileType(MOS_TILE_TYPE tileType, MOS_TILE_MODE_GMM tileModeGMM, bool gmmTileEnabled)
141 {
142 uint32_t tileMode = 0;
143
144 if (gmmTileEnabled)
145 {
146 return tileModeGMM;
147 }
148
149 switch (tileType)
150 {
151 case MOS_TILE_LINEAR:
152 tileMode = 0;
153 break;
154 case MOS_TILE_YS:
155 tileMode = 1;
156 break;
157 case MOS_TILE_X:
158 tileMode = 2;
159 break;
160 default:
161 tileMode = 3;
162 break;
163 }
164
165 return tileMode;
166 }
167
174168 Impl(PMOS_INTERFACE osItf)
175169 {
176170 MHW_FUNCTION_ENTER;
186180 {
187181 AddResourceToCmd = Mhw_AddResourceToCmd_PatchList;
188182 }
189 }
190
191 virtual ~Impl() = default;
183
184 #if MHW_HWCMDPARSER_ENABLED
185 mhw::HwcmdParser::InitInstance(osItf);
186
187 m_hwcmdParser = mhw::HwcmdParser::GetInstance();
188 MHW_CHK_NULL_NO_STATUS_RETURN(m_hwcmdParser);
189
190 m_parseFieldsLayout = m_hwcmdParser->ParseFieldsLayoutEn();
191 #endif
192 }
193
194 virtual ~Impl()
195 {
196 MHW_FUNCTION_ENTER;
197
198 #if MHW_HWCMDPARSER_ENABLED
199 mhw::HwcmdParser::DestroyInstance();
200 #endif
201 }
202
203 template <typename Cmd, typename CmdSetting>
204 MOS_STATUS AddCmd(PMOS_COMMAND_BUFFER cmdBuf,
205 PMHW_BATCH_BUFFER batchBuf,
206 Cmd & cmd,
207 const CmdSetting & setting)
208 {
209 this->m_currentCmdBuf = cmdBuf;
210 this->m_currentBatchBuf = batchBuf;
211
212 // set MHW cmd
213 cmd = {};
214 MHW_CHK_STATUS_RETURN(setting());
215
216 // call MHW cmd parser
217 #if MHW_HWCMDPARSER_ENABLED
218 this->m_hwcmdParser->ParseCmd(this->m_currentCmdName,
219 reinterpret_cast<uint32_t *>(&cmd),
220 sizeof(cmd) / sizeof(uint32_t));
221 #endif
222
223 // add cmd to cmd buffer
224 return Mhw_AddCommandCmdOrBB(cmdBuf, batchBuf, &cmd, sizeof(cmd));
225 }
192226
193227 protected:
194228 MOS_STATUS(*AddResourceToCmd)
199233 PMHW_BATCH_BUFFER m_currentBatchBuf = nullptr;
200234
201235 #if MHW_HWCMDPARSER_ENABLED
202 std::shared_ptr<HwcmdParser> m_hwcmdParser = mhw::HwcmdParser::GetInstance();
203 bool m_parseFieldsLayout = m_hwcmdParser->ParseFieldsLayoutEn();
236 std::string m_currentCmdName;
237 std::shared_ptr<HwcmdParser> m_hwcmdParser = nullptr;
238 bool m_parseFieldsLayout = false;
204239 #endif // MHW_HWCMDPARSER_ENABLED
205240 };
206241 } // namespace mhw
2929
3030 #include "mhw_cmdpar.h"
3131
32 #define MHW_HWCMDPARSER_ENABLED (_MHW_HWCMDPARSER_SUPPORTED && (_DEBUG || _RELEASE_INTERNAL))
33 #if MHW_HWCMDPARSER_ENABLED
32 #if _MHW_HWCMDPARSER_SUPPORTED
3433 #include "mhw_hwcmd_parser.h"
35 #else
36 #define MHW_HWCMDPARSER_INIT(osInterface)
37 #define MHW_HWCMDPARSER_DESTROY()
38 #define MHW_HWCMDPARSER_FRAMEINFOUPDATE(frameType)
39 #define MHW_HWCMDPARSER_PARSECMD(cmdName, cmdData, dwLen)
40 #define MHW_HWCMDPARSER_PARSECMDBUF(cmdBuf, dwLen)
41 #define MHW_HWCMDPARSER_PARSECMDBUFGFX(cmdBufGfx)
4234 #endif
4335
4436 // [Macro Prefixes] | [Macro Suffixes]
4840 // only used by other | _DECL: declaration
4941 // macros | _DEF : definition
5042
51 #define __MHW_CMD_PAR_GET_F(CMD) GetCmdPar_##CMD // function name to get the pointer to MHW command parameter
52 #define __MHW_CMD_BYTE_SIZE_GET_F(CMD) GetCmdByteSize_##CMD // function name to get MHW command size in byte
53 #define __MHW_CMD_ADD_F(CMD) AddCmd_##CMD // function name to add command
43 #define __MHW_GETPAR_F(CMD) GETPAR_##CMD // function name to get the pointer to MHW command parameter
44 #define MHW_GETPAR_F(CMD) __MHW_GETPAR_F(CMD) // to support 2-level macro expanding
45 #define __MHW_GETSIZE_F(CMD) GETSIZE_##CMD // function name to get MHW command size in byte
46 #define MHW_GETSIZE_F(CMD) __MHW_GETSIZE_F(CMD) // to support 2-level macro expanding
47 #define __MHW_ADDCMD_F(CMD) ADDCMD_##CMD // function name to add command
48 #define MHW_ADDCMD_F(CMD) __MHW_ADDCMD_F(CMD) // to support 2-level macro expanding
49 #define __MHW_SETCMD_F(CMD) SETCMD_##CMD // function name to set command data
5450
55 #define __MHW_CMD_PAR_GET_DECL(CMD) mhw::Pointer<_MHW_CMD_PAR_T(CMD)> __MHW_CMD_PAR_GET_F(CMD)(bool reset)
56 #define __MHW_CMD_BYTE_SIZE_GET_DECL(CMD) size_t __MHW_CMD_BYTE_SIZE_GET_F(CMD)() const
51 #define __MHW_GETPAR_DECL(CMD) _MHW_PAR_T(CMD) & MHW_GETPAR_F(CMD)()
52 #define __MHW_GETSIZE_DECL(CMD) size_t MHW_GETSIZE_F(CMD)() const
53 #define __MHW_ADDCMD_DECL(CMD) MOS_STATUS MHW_ADDCMD_F(CMD)(PMOS_COMMAND_BUFFER cmdBuf, PMHW_BATCH_BUFFER batchBuf = nullptr)
54 #define __MHW_SETCMD_DECL(CMD) MOS_STATUS __MHW_SETCMD_F(CMD)()
5755
58 #define __MHW_CMD_ADD_DECL(CMD) MOS_STATUS __MHW_CMD_ADD_F(CMD)(PMOS_COMMAND_BUFFER cmdBuf, \
59 PMHW_BATCH_BUFFER batchBuf = nullptr, \
60 const uint8_t *extraData = nullptr, \
61 size_t extraDataSize = 0)
62
63 #define _MHW_CMD_ALL_DEF_FOR_ITF(CMD) \
64 public: \
65 virtual __MHW_CMD_PAR_GET_DECL(CMD) = 0; \
66 virtual __MHW_CMD_BYTE_SIZE_GET_DECL(CMD) = 0; \
67 virtual __MHW_CMD_ADD_DECL(CMD) = 0
68
69 #define _MHW_SETPARAMS_AND_ADDCMD(CMD, cmdPar_t, GetPar, AddCmd, ...) \
70 { \
71 auto par = GetPar(CMD, true); \
72 auto p = dynamic_cast<const cmdPar_t *>(this); \
73 if (p) \
74 { \
75 p->__MHW_CMD_PAR_SET_F(CMD)(par); \
76 } \
77 LOOP_FEATURE_INTERFACE_RETURN(cmdPar_t, __MHW_CMD_PAR_SET_F(CMD), par); \
78 AddCmd(CMD, __VA_ARGS__); \
79 }
56 #define _MHW_CMD_ALL_DEF_FOR_ITF(CMD) \
57 public: \
58 virtual __MHW_GETPAR_DECL(CMD) = 0; \
59 virtual __MHW_GETSIZE_DECL(CMD) = 0; \
60 virtual __MHW_ADDCMD_DECL(CMD) = 0; \
61 \
62 protected: \
63 virtual __MHW_SETCMD_DECL(CMD) { return MOS_STATUS_SUCCESS; }
8064
8165 #endif // __MHW_DEF_H__
7878 ayuvVariant = 0x14,
7979 };
8080
81 struct _MHW_CMD_PAR_T(VDENC_CONTROL_STATE)
81 struct _MHW_PAR_T(VDENC_CONTROL_STATE)
8282 {
8383 bool vdencInitialization = true;
8484 };
8585
86 struct _MHW_CMD_PAR_T(VDENC_PIPE_MODE_SELECT)
86 struct _MHW_PAR_T(VDENC_PIPE_MODE_SELECT)
8787 {
8888 uint8_t standardSelect = 0;
8989 bool scalabilityMode = false;
115115 __MHW_VDBOX_VDENC_WRAPPER_EXT(VDENC_PIPE_MODE_SELECT_CMDPAR_EXT);
116116 };
117117
118 struct _MHW_CMD_PAR_T(VDENC_SRC_SURFACE_STATE)
118 struct _MHW_PAR_T(VDENC_SRC_SURFACE_STATE)
119119 {
120120 uint32_t width = 0;
121121 uint32_t height = 0;
131131 uint8_t vDirection = 0;
132132 };
133133
134 struct _MHW_CMD_PAR_T(VDENC_REF_SURFACE_STATE)
134 struct _MHW_PAR_T(VDENC_REF_SURFACE_STATE)
135135 {
136136 uint32_t width = 0;
137137 uint32_t height = 0;
145145 uint8_t vDirection = 0;
146146 };
147147
148 struct _MHW_CMD_PAR_T(VDENC_DS_REF_SURFACE_STATE)
148 struct _MHW_PAR_T(VDENC_DS_REF_SURFACE_STATE)
149149 {
150150 uint8_t vDirectionStage1 = 0;
151151 uint8_t vDirectionStage2 = 0;
167167 bool gmmTileEnStage2 = false;
168168 };
169169
170 struct _MHW_CMD_PAR_T(VDENC_PIPE_BUF_ADDR_STATE)
170 struct _MHW_PAR_T(VDENC_PIPE_BUF_ADDR_STATE)
171171 {
172172 PMOS_SURFACE surfaceRaw = nullptr;
173173 MOS_MEMCOMP_STATE mmcStateRaw = MOS_MEMCOMP_DISABLED;
189189 PMOS_SURFACE surfaceDsStage2 = nullptr;
190190 MOS_MEMCOMP_STATE mmcStateDsStage2 = MOS_MEMCOMP_DISABLED;
191191 bool lowDelayB = false;
192 bool isPFrame = false; //only HEVC should touch this flag
192193 PMOS_RESOURCE colocatedMvReadBuffer = nullptr;
193194 PMOS_RESOURCE colMvTempBuffer[MAX_REF_NUM_L0L1] = {};
194195 PMOS_RESOURCE pakObjCmdStreamOutBuffer = nullptr;
201202 __MHW_VDBOX_VDENC_WRAPPER_EXT(VDENC_PIPE_BUF_ADDR_STATE_CMDPAR_EXT);
202203 };
203204
204 struct _MHW_CMD_PAR_T(VDENC_WEIGHTSOFFSETS_STATE)
205 struct _MHW_PAR_T(VDENC_WEIGHTSOFFSETS_STATE)
205206 {
206207 int8_t weightsLuma[MAX_REF_LIST_NUM][MAX_REF_NUM] = {};
207208 int16_t offsetsLuma[MAX_REF_LIST_NUM][MAX_REF_NUM] = {};
211212 uint32_t denomChroma = 0;
212213 };
213214
214 struct _MHW_CMD_PAR_T(VDENC_HEVC_VP9_TILE_SLICE_STATE)
215 struct _MHW_PAR_T(VDENC_HEVC_VP9_TILE_SLICE_STATE)
215216 {
216217 bool tileEnable = false;
217218 bool tileRowStoreSelect = false;
231232 __MHW_VDBOX_VDENC_WRAPPER_EXT(VDENC_HEVC_VP9_TILE_SLICE_STATE_CMDPAR_EXT);
232233 };
233234
234 struct _MHW_CMD_PAR_T(VDENC_WALKER_STATE)
235 struct _MHW_PAR_T(VDENC_WALKER_STATE)
235236 {
236237 bool firstSuperSlice = true;
237238 uint32_t tileSliceStartLcuMbX = 0;
240241 uint32_t nextTileSliceStartLcuMbY = 0;
241242 };
242243
243 struct _MHW_CMD_PAR_T(VD_PIPELINE_FLUSH)
244 struct _MHW_PAR_T(VD_PIPELINE_FLUSH)
244245 {
245246 bool waitDoneHEVC = false;
246247 bool waitDoneVDENC = false;
254255 __MHW_VDBOX_VDENC_WRAPPER_EXT(VD_PIPELINE_FLUSH_CMDPAR_EXT);
255256 };
256257
257 struct _MHW_CMD_PAR_T(VDENC_CMD1)
258 struct _MHW_PAR_T(VDENC_CMD1)
258259 {
259260 __MHW_VDBOX_VDENC_WRAPPER_EXT(VDENC_CMD1_CMDPAR_EXT);
260261 };
261262
262 struct _MHW_CMD_PAR_T(VDENC_CMD2)
263 struct _MHW_PAR_T(VDENC_CMD2)
263264 {
264265 __MHW_VDBOX_VDENC_WRAPPER_EXT(VDENC_CMD2_CMDPAR_EXT);
265266 };
266267
267 struct _MHW_CMD_PAR_T(VDENC_CMD3)
268 struct _MHW_PAR_T(VDENC_CMD3)
268269 {
269270 __MHW_VDBOX_VDENC_WRAPPER_EXT(VDENC_CMD3_CMDPAR_EXT);
270271 };
271272
272 struct _MHW_CMD_PAR_T(VDENC_CMD4)
273 struct _MHW_PAR_T(VDENC_CMD4)
273274 {
274275 __MHW_VDBOX_VDENC_WRAPPER_EXT(VDENC_CMD4_CMDPAR_EXT);
275276 };
276277
277 struct _MHW_CMD_PAR_T(VDENC_CMD5)
278 struct _MHW_PAR_T(VDENC_CMD5)
278279 {
279280 __MHW_VDBOX_VDENC_WRAPPER_EXT(VDENC_CMD5_CMDPAR_EXT);
280 };
281
282 class CmdPar
283 {
284 public:
285 virtual ~CmdPar() = default;
286
287 _MHW_CMD_PAR_SET_DEF(VDENC_CONTROL_STATE);
288 _MHW_CMD_PAR_SET_DEF(VDENC_PIPE_MODE_SELECT);
289 _MHW_CMD_PAR_SET_DEF(VDENC_SRC_SURFACE_STATE);
290 _MHW_CMD_PAR_SET_DEF(VDENC_REF_SURFACE_STATE);
291 _MHW_CMD_PAR_SET_DEF(VDENC_DS_REF_SURFACE_STATE);
292 _MHW_CMD_PAR_SET_DEF(VDENC_PIPE_BUF_ADDR_STATE);
293 _MHW_CMD_PAR_SET_DEF(VDENC_WEIGHTSOFFSETS_STATE);
294 _MHW_CMD_PAR_SET_DEF(VDENC_HEVC_VP9_TILE_SLICE_STATE);
295 _MHW_CMD_PAR_SET_DEF(VDENC_WALKER_STATE);
296 _MHW_CMD_PAR_SET_DEF(VD_PIPELINE_FLUSH);
297 _MHW_CMD_PAR_SET_DEF(VDENC_CMD1);
298 _MHW_CMD_PAR_SET_DEF(VDENC_CMD2);
299 _MHW_CMD_PAR_SET_DEF(VDENC_CMD3);
300 _MHW_CMD_PAR_SET_DEF(VDENC_CMD4);
301 _MHW_CMD_PAR_SET_DEF(VDENC_CMD5);
302281 };
303282 } // namespace vdenc
304283 } // namespace vdbox
00 /*
1 * Copyright (c) 2020, Intel Corporation
1 * Copyright (c) 2020-2021, Intel Corporation
22 *
33 * Permission is hereby granted, free of charge, to any person obtaining a
44 * copy of this software and associated documentation files (the "Software"),
133133 }
134134 }
135135
136 template <typename cmd_t>
136137 class Impl : public Itf, public mhw::Impl
137138 {
138139 _MHW_CMD_ALL_DEF_FOR_IMPL(VDENC_CONTROL_STATE);
192193 protected:
193194 using base_t = Itf;
194195
196 vdbox::RowStoreCache m_vdencRowStoreCache = {};
197 vdbox::RowStoreCache m_vdencIpdlRowstoreCache = {};
198 MHW_MEMORY_OBJECT_CONTROL_PARAMS m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_END_CODEC] = {};
199
195200 Impl(PMOS_INTERFACE osItf) : mhw::Impl(osItf)
196201 {
197202 MHW_FUNCTION_ENTER;
257262 return MOS_STATUS_SUCCESS;
258263 }
259264
260 protected:
261 vdbox::RowStoreCache m_vdencRowStoreCache = {};
262 vdbox::RowStoreCache m_vdencIpdlRowstoreCache = {};
263 MHW_MEMORY_OBJECT_CONTROL_PARAMS m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_END_CODEC] = {};
264 };
265
266 template <typename cmd_t>
267 class ImplGeneric : public Impl
268 {
269 _MHW_CMD_ALL_DEF_FOR_IMPL_GENERIC(VDENC_CONTROL_STATE);
270 _MHW_CMD_ALL_DEF_FOR_IMPL_GENERIC(VDENC_PIPE_MODE_SELECT);
271 _MHW_CMD_ALL_DEF_FOR_IMPL_GENERIC(VDENC_SRC_SURFACE_STATE);
272 _MHW_CMD_ALL_DEF_FOR_IMPL_GENERIC(VDENC_REF_SURFACE_STATE);
273 _MHW_CMD_ALL_DEF_FOR_IMPL_GENERIC(VDENC_DS_REF_SURFACE_STATE);
274 _MHW_CMD_ALL_DEF_FOR_IMPL_GENERIC(VDENC_PIPE_BUF_ADDR_STATE);
275 _MHW_CMD_ALL_DEF_FOR_IMPL_GENERIC(VDENC_WEIGHTSOFFSETS_STATE);
276 _MHW_CMD_ALL_DEF_FOR_IMPL_GENERIC(VDENC_HEVC_VP9_TILE_SLICE_STATE);
277 _MHW_CMD_ALL_DEF_FOR_IMPL_GENERIC(VDENC_WALKER_STATE);
278 _MHW_CMD_ALL_DEF_FOR_IMPL_GENERIC(VD_PIPELINE_FLUSH);
279 _MHW_CMD_ALL_DEF_FOR_IMPL_GENERIC(VDENC_CMD1);
280 _MHW_CMD_ALL_DEF_FOR_IMPL_GENERIC(VDENC_CMD2);
281 _MHW_CMD_ALL_DEF_FOR_IMPL_GENERIC(VDENC_CMD3);
282 _MHW_CMD_ALL_DEF_FOR_IMPL_GENERIC(VDENC_CMD4);
283 _MHW_CMD_ALL_DEF_FOR_IMPL_GENERIC(VDENC_CMD5);
284
285 protected:
286 using base_t = Impl;
287
288 ImplGeneric(PMOS_INTERFACE osItf) : base_t(osItf){};
289
290 _MHW_CMD_SET_DECL_OVERRIDE(VDENC_CONTROL_STATE)
291 {
292 _MHW_CMDSET_GETCMDPARAMS_AND_CALLBASE(VDENC_CONTROL_STATE);
265 _MHW_SETCMD_OVERRIDE_DECL(VDENC_CONTROL_STATE)
266 {
267 _MHW_SETCMD_CALLBASE(VDENC_CONTROL_STATE);
293268
294269 #define DO_FIELDS() \
295 DO_FIELD(DW1, VdencInitialization, params->vdencInitialization)
296
297 #include "mhw_hwcmd_process_cmdfields.h"
298 }
299
300 _MHW_CMD_SET_DECL_OVERRIDE(VDENC_PIPE_MODE_SELECT)
301 {
302 _MHW_CMDSET_GETCMDPARAMS_AND_CALLBASE(VDENC_PIPE_MODE_SELECT);
303
304 #define DO_FIELDS() \
305 DO_FIELD(DW1, StandardSelect, params->standardSelect); \
306 DO_FIELD(DW1, ScalabilityMode, params->scalabilityMode); \
307 DO_FIELD(DW1, FrameStatisticsStreamOutEnable, params->frameStatisticsStreamOut); \
308 DO_FIELD(DW1, VdencPakObjCmdStreamOutEnable, params->pakObjCmdStreamOut); \
309 DO_FIELD(DW1, TlbPrefetchEnable, params->tlbPrefetch); \
310 DO_FIELD(DW1, PakThresholdCheckEnable, params->dynamicSlice); \
311 DO_FIELD(DW1, VdencStreamInEnable, params->streamIn); \
312 DO_FIELD(DW1, BitDepth, params->bitDepthMinus8); \
313 DO_FIELD(DW1, PakChromaSubSamplingType, params->chromaType); \
314 DO_FIELD(DW1, OutputRangeControlAfterColorSpaceConversion, params->outputRangeControlCsc); \
315 DO_FIELD(DW1, TileReplayEnable, params->tileBasedReplayMode); \
316 DO_FIELD(DW1, IsRandomAccess, params->randomAccess); \
317 DO_FIELD(DW1, RgbEncodingEnable, params->rgbEncodingMode); \
318 DO_FIELD(DW1, StreamingBufferConfig, params->streamingBufferConfig); \
319 \
320 DO_FIELD(DW2, HmeRegionPreFetchenable, params->hmeRegionPrefetch); \
321 DO_FIELD(DW2, Topprefetchenablemode, params->topPrefetchEnableMode); \
322 DO_FIELD(DW2, LeftpreFetchatwraparound, params->leftPrefetchAtWrapAround); \
323 DO_FIELD(DW2, Verticalshift32Minus1, params->verticalShift32Minus1); \
324 DO_FIELD(DW2, Hzshift32Minus1, params->hzShift32Minus1); \
325 DO_FIELD(DW2, NumVerticalReqMinus1, params->numVerticalReqMinus1); \
326 DO_FIELD(DW2, Numhzreqminus1, params->numHzReqMinus1); \
327 DO_FIELD(DW2, PreFetchOffsetForReferenceIn16PixelIncrement, params->prefetchOffset); \
328 \
329 DO_FIELD(DW5, CaptureMode, params->captureMode); \
330 DO_FIELD(DW5, ParallelCaptureAndEncodeSessionId, params->wirelessSessionId); \
331 DO_FIELD(DW5, TailPointerReadFrequency, params->tailPointerReadFrequency); \
332 DO_FIELD(DW5, QuantizationPrecisionOptimization, params->quantizationPrecision); \
333 DO_FIELD(DW5, LatencyToleratePreFetchEnable, params->latencyTolerate); \
334
335 #include "mhw_hwcmd_process_cmdfields.h"
336 }
337
338 _MHW_CMD_SET_DECL_OVERRIDE(VDENC_SRC_SURFACE_STATE)
339 {
340 _MHW_CMDSET_GETCMDPARAMS_AND_CALLBASE(VDENC_SRC_SURFACE_STATE);
341
342 #define DO_FIELDS() \
343 DO_FIELD(Dwords25.DW0, Width, params->width - 1); \
344 DO_FIELD(Dwords25.DW0, Height, params->height - 1); \
345 DO_FIELD(Dwords25.DW0, ColorSpaceSelection, params->colorSpaceSelection); \
346 DO_FIELD(Dwords25.DW0, CrVCbUPixelOffsetVDirection, params->vDirection); \
347 DO_FIELD(Dwords25.DW0, SurfaceFormatByteSwizzle, params->displayFormatSwizzle); \
348 \
349 DO_FIELD(Dwords25.DW1, TileMode, GetHwTileType(params->tileType, params->tileModeGmm, params->gmmTileEn)); \
350 DO_FIELD(Dwords25.DW1, SurfaceFormat, static_cast<uint32_t>(MosFormatToVdencSurfaceRawFormat(params->format))); \
351 DO_FIELD(Dwords25.DW1, SurfacePitch, params->pitch - 1); \
352 \
353 DO_FIELD(Dwords25.DW2, YOffsetForUCb, params->uOffset); \
354 DO_FIELD(Dwords25.DW3, YOffsetForVCr, params->vOffset)
355
356 #include "mhw_hwcmd_process_cmdfields.h"
357 }
358
359 _MHW_CMD_SET_DECL_OVERRIDE(VDENC_REF_SURFACE_STATE)
360 {
361 _MHW_CMDSET_GETCMDPARAMS_AND_CALLBASE(VDENC_REF_SURFACE_STATE);
362
363 #define DO_FIELDS() \
364 DO_FIELD(Dwords25.DW0, Width, params->width - 1); \
365 DO_FIELD(Dwords25.DW0, Height, params->height - 1); \
366 DO_FIELD(Dwords25.DW0, CrVCbUPixelOffsetVDirection, params->vDirection); \
367 \
368 DO_FIELD(Dwords25.DW1, TileMode, GetHwTileType(params->tileType, params->tileModeGmm, params->gmmTileEn)); \
369 DO_FIELD(Dwords25.DW1, SurfacePitch, params->pitch - 1); \
370 DO_FIELD(Dwords25.DW1, SurfaceFormat, static_cast<uint32_t>(MosFormatToVdencSurfaceReconFormat(params->format))); \
371 \
372 DO_FIELD(Dwords25.DW2, YOffsetForUCb, params->uOffset); \
373 DO_FIELD(Dwords25.DW3, YOffsetForVCr, params->vOffset)
374
375 #include "mhw_hwcmd_process_cmdfields.h"
376 }
377
378 _MHW_CMD_SET_DECL_OVERRIDE(VDENC_DS_REF_SURFACE_STATE)
379 {
380 _MHW_CMDSET_GETCMDPARAMS_AND_CALLBASE(VDENC_DS_REF_SURFACE_STATE);
381
382 const bool stage2 = params->widthStage2 && params->heightStage2 && params->pitchStage2;
383
384 #define DO_FIELDS() \
385 DO_FIELD(Dwords25.DW0, Width, params->widthStage1 - 1); \
386 DO_FIELD(Dwords25.DW0, Height, params->heightStage1 - 1); \
387 DO_FIELD(Dwords25.DW0, CrVCbUPixelOffsetVDirection, params->vDirectionStage1); \
388 \
389 DO_FIELD(Dwords25.DW1, TileMode, GetHwTileType(params->tileTypeStage1, params->tileModeGmmStage1, params->gmmTileEnStage1)); \
390 DO_FIELD(Dwords25.DW1, SurfaceFormat, cmd_t::VDENC_Surface_State_Fields_CMD::SURFACE_FORMAT_PLANAR_420_8); \
391 DO_FIELD(Dwords25.DW1, SurfacePitch, params->pitchStage1 - 1); \
392 \
393 DO_FIELD(Dwords25.DW2, YOffsetForUCb, params->uOffsetStage1); \
394 \
395 DO_FIELD(Dwords25.DW3, YOffsetForVCr, params->vOffsetStage1); \
396 \
397 DO_FIELD(Dwords69.DW0, Width, stage2 ? params->widthStage2 - 1 : 0); \
398 DO_FIELD(Dwords69.DW0, Height, stage2 ? params->heightStage2 - 1 : 0); \
399 DO_FIELD(Dwords69.DW0, CrVCbUPixelOffsetVDirection, stage2 ? params->vDirectionStage2 : 0); \
400 \
401 DO_FIELD(Dwords69.DW1, TileMode, stage2 ? GetHwTileType(params->tileTypeStage2, params->tileModeGmmStage2, params->gmmTileEnStage2) : 0); \
402 DO_FIELD(Dwords69.DW1, SurfaceFormat, stage2 ? cmd_t::VDENC_Surface_State_Fields_CMD::SURFACE_FORMAT_PLANAR_420_8 : 0); \
403 DO_FIELD(Dwords69.DW1, SurfacePitch, stage2 ? params->pitchStage2 - 1 : 0); \
404 \
405 DO_FIELD(Dwords69.DW2, YOffsetForUCb, stage2 ? params->uOffsetStage2 : 0); \
406 \
407 DO_FIELD(Dwords69.DW3, YOffsetForVCr, stage2 ? params->vOffsetStage2 : 0)
408
409 #include "mhw_hwcmd_process_cmdfields.h"
410 }
411
412 _MHW_CMD_SET_DECL_OVERRIDE(VDENC_PIPE_BUF_ADDR_STATE)
413 {
414 _MHW_CMDSET_GETCMDPARAMS_AND_CALLBASE(VDENC_PIPE_BUF_ADDR_STATE);
270 DO_FIELD(DW1, VdencInitialization, params.vdencInitialization)
271
272 #include "mhw_hwcmd_process_cmdfields.h"
273 }
274
275 _MHW_SETCMD_OVERRIDE_DECL(VDENC_PIPE_MODE_SELECT)
276 {
277 _MHW_SETCMD_CALLBASE(VDENC_PIPE_MODE_SELECT);
278
279 #define DO_FIELDS() \
280 DO_FIELD(DW1, StandardSelect, params.standardSelect); \
281 DO_FIELD(DW1, ScalabilityMode, params.scalabilityMode); \
282 DO_FIELD(DW1, FrameStatisticsStreamOutEnable, params.frameStatisticsStreamOut); \
283 DO_FIELD(DW1, VdencPakObjCmdStreamOutEnable, params.pakObjCmdStreamOut); \
284 DO_FIELD(DW1, TlbPrefetchEnable, params.tlbPrefetch); \
285 DO_FIELD(DW1, PakThresholdCheckEnable, params.dynamicSlice); \
286 DO_FIELD(DW1, VdencStreamInEnable, params.streamIn); \
287 DO_FIELD(DW1, BitDepth, params.bitDepthMinus8); \
288 DO_FIELD(DW1, PakChromaSubSamplingType, params.chromaType); \
289 DO_FIELD(DW1, OutputRangeControlAfterColorSpaceConversion, params.outputRangeControlCsc); \
290 DO_FIELD(DW1, TileReplayEnable, params.tileBasedReplayMode); \
291 DO_FIELD(DW1, IsRandomAccess, params.randomAccess); \
292 DO_FIELD(DW1, RgbEncodingEnable, params.rgbEncodingMode); \
293 DO_FIELD(DW1, StreamingBufferConfig, params.streamingBufferConfig); \
294 \
295 DO_FIELD(DW2, HmeRegionPreFetchenable, params.hmeRegionPrefetch); \
296 DO_FIELD(DW2, Topprefetchenablemode, params.topPrefetchEnableMode); \
297 DO_FIELD(DW2, LeftpreFetchatwraparound, params.leftPrefetchAtWrapAround); \
298 DO_FIELD(DW2, Verticalshift32Minus1, params.verticalShift32Minus1); \
299 DO_FIELD(DW2, Hzshift32Minus1, params.hzShift32Minus1); \
300 DO_FIELD(DW2, NumVerticalReqMinus1, params.numVerticalReqMinus1); \
301 DO_FIELD(DW2, Numhzreqminus1, params.numHzReqMinus1); \
302 DO_FIELD(DW2, PreFetchOffsetForReferenceIn16PixelIncrement, params.prefetchOffset); \
303 \
304 DO_FIELD(DW5, CaptureMode, params.captureMode); \
305 DO_FIELD(DW5, ParallelCaptureAndEncodeSessionId, params.wirelessSessionId); \
306 DO_FIELD(DW5, TailPointerReadFrequency, params.tailPointerReadFrequency); \
307 DO_FIELD(DW5, QuantizationPrecisionOptimization, params.quantizationPrecision); \
308 DO_FIELD(DW5, LatencyToleratePreFetchEnable, params.latencyTolerate);
309
310 #include "mhw_hwcmd_process_cmdfields.h"
311 }
312
313 _MHW_SETCMD_OVERRIDE_DECL(VDENC_SRC_SURFACE_STATE)
314 {
315 _MHW_SETCMD_CALLBASE(VDENC_SRC_SURFACE_STATE);
316
317 #define DO_FIELDS() \
318 DO_FIELD(Dwords25.DW0, Width, params.width - 1); \
319 DO_FIELD(Dwords25.DW0, Height, params.height - 1); \
320 DO_FIELD(Dwords25.DW0, ColorSpaceSelection, params.colorSpaceSelection); \
321 DO_FIELD(Dwords25.DW0, CrVCbUPixelOffsetVDirection, params.vDirection); \
322 DO_FIELD(Dwords25.DW0, SurfaceFormatByteSwizzle, params.displayFormatSwizzle); \
323 \
324 DO_FIELD(Dwords25.DW1, TileMode, GetHwTileType(params.tileType, params.tileModeGmm, params.gmmTileEn)); \
325 DO_FIELD(Dwords25.DW1, SurfaceFormat, static_cast<uint32_t>(MosFormatToVdencSurfaceRawFormat(params.format))); \
326 DO_FIELD(Dwords25.DW1, SurfacePitch, params.pitch - 1); \
327 \
328 DO_FIELD(Dwords25.DW2, YOffsetForUCb, params.uOffset); \
329 DO_FIELD(Dwords25.DW3, YOffsetForVCr, params.vOffset)
330
331 #include "mhw_hwcmd_process_cmdfields.h"
332 }
333
334 _MHW_SETCMD_OVERRIDE_DECL(VDENC_REF_SURFACE_STATE)
335 {
336 _MHW_SETCMD_CALLBASE(VDENC_REF_SURFACE_STATE);
337
338 #define DO_FIELDS() \
339 DO_FIELD(Dwords25.DW0, Width, params.width - 1); \
340 DO_FIELD(Dwords25.DW0, Height, params.height - 1); \
341 DO_FIELD(Dwords25.DW0, CrVCbUPixelOffsetVDirection, params.vDirection); \
342 \
343 DO_FIELD(Dwords25.DW1, TileMode, GetHwTileType(params.tileType, params.tileModeGmm, params.gmmTileEn)); \
344 DO_FIELD(Dwords25.DW1, SurfacePitch, params.pitch - 1); \
345 DO_FIELD(Dwords25.DW1, SurfaceFormat, static_cast<uint32_t>(MosFormatToVdencSurfaceReconFormat(params.format))); \
346 \
347 DO_FIELD(Dwords25.DW2, YOffsetForUCb, params.uOffset); \
348 DO_FIELD(Dwords25.DW3, YOffsetForVCr, params.vOffset)
349
350 #include "mhw_hwcmd_process_cmdfields.h"
351 }
352
353 _MHW_SETCMD_OVERRIDE_DECL(VDENC_DS_REF_SURFACE_STATE)
354 {
355 _MHW_SETCMD_CALLBASE(VDENC_DS_REF_SURFACE_STATE);
356
357 const bool stage2 = params.widthStage2 && params.heightStage2 && params.pitchStage2;
358
359 #define DO_FIELDS() \
360 DO_FIELD(Dwords25.DW0, Width, params.widthStage1 - 1); \
361 DO_FIELD(Dwords25.DW0, Height, params.heightStage1 - 1); \
362 DO_FIELD(Dwords25.DW0, CrVCbUPixelOffsetVDirection, params.vDirectionStage1); \
363 \
364 DO_FIELD(Dwords25.DW1, TileMode, GetHwTileType(params.tileTypeStage1, params.tileModeGmmStage1, params.gmmTileEnStage1)); \
365 DO_FIELD(Dwords25.DW1, SurfaceFormat, cmd_t::VDENC_Surface_State_Fields_CMD::SURFACE_FORMAT_PLANAR_420_8); \
366 DO_FIELD(Dwords25.DW1, SurfacePitch, params.pitchStage1 - 1); \
367 \
368 DO_FIELD(Dwords25.DW2, YOffsetForUCb, params.uOffsetStage1); \
369 \
370 DO_FIELD(Dwords25.DW3, YOffsetForVCr, params.vOffsetStage1); \
371 \
372 DO_FIELD(Dwords69.DW0, Width, stage2 ? params.widthStage2 - 1 : 0); \
373 DO_FIELD(Dwords69.DW0, Height, stage2 ? params.heightStage2 - 1 : 0); \
374 DO_FIELD(Dwords69.DW0, CrVCbUPixelOffsetVDirection, stage2 ? params.vDirectionStage2 : 0); \
375 \
376 DO_FIELD(Dwords69.DW1, TileMode, stage2 ? GetHwTileType(params.tileTypeStage2, params.tileModeGmmStage2, params.gmmTileEnStage2) : 0); \
377 DO_FIELD(Dwords69.DW1, SurfaceFormat, stage2 ? cmd_t::VDENC_Surface_State_Fields_CMD::SURFACE_FORMAT_PLANAR_420_8 : 0); \
378 DO_FIELD(Dwords69.DW1, SurfacePitch, stage2 ? params.pitchStage2 - 1 : 0); \
379 \
380 DO_FIELD(Dwords69.DW2, YOffsetForUCb, stage2 ? params.uOffsetStage2 : 0); \
381 \
382 DO_FIELD(Dwords69.DW3, YOffsetForVCr, stage2 ? params.vOffsetStage2 : 0)
383
384 #include "mhw_hwcmd_process_cmdfields.h"
385 }
386
387 _MHW_SETCMD_OVERRIDE_DECL(VDENC_PIPE_BUF_ADDR_STATE)
388 {
389 _MHW_SETCMD_CALLBASE(VDENC_PIPE_BUF_ADDR_STATE);
415390
416391 MHW_RESOURCE_PARAMS resourceParams;
417392
418 if (params->surfaceRaw)
419 {
420 cmd->OriginalUncompressedPicture.PictureFields.DW0.MemoryCompressionEnable = MmcEnabled(params->mmcStateRaw);
421 cmd->OriginalUncompressedPicture.PictureFields.DW0.CompressionType = MmcRcEnabled(params->mmcStateRaw);
422 cmd->OriginalUncompressedPicture.PictureFields.DW0.MemoryObjectControlState =
393 if (params.surfaceRaw)
394 {
395 cmd.OriginalUncompressedPicture.PictureFields.DW0.MemoryCompressionEnable = MmcEnabled(params.mmcStateRaw);
396 cmd.OriginalUncompressedPicture.PictureFields.DW0.CompressionType = MmcRcEnabled(params.mmcStateRaw);
397 cmd.OriginalUncompressedPicture.PictureFields.DW0.MemoryObjectControlState =
423398 this->m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_ORIGINAL_UNCOMPRESSED_PICTURE_ENCODE].Value;
424 cmd->OriginalUncompressedPicture.PictureFields.DW0.CompressionFormat = params->compressionFormatRaw;
399 cmd.OriginalUncompressedPicture.PictureFields.DW0.CompressionFormat = params.compressionFormatRaw;
425400
426401 resourceParams = {};
427 resourceParams.presResource = &params->surfaceRaw->OsResource;
428 resourceParams.dwOffset = params->surfaceRaw->dwOffset;
429 resourceParams.pdwCmd = (uint32_t *)&(cmd->OriginalUncompressedPicture.LowerAddress);
402 resourceParams.presResource = &params.surfaceRaw->OsResource;
403 resourceParams.dwOffset = params.surfaceRaw->dwOffset;
404 resourceParams.pdwCmd = (uint32_t *)&(cmd.OriginalUncompressedPicture.LowerAddress);
430405 resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(OriginalUncompressedPicture.LowerAddress);
431406 resourceParams.bIsWritable = false;
432407 resourceParams.HwCommandType = MOS_VDENC_PIPE_BUF_ADDR;
439414
440415 if (this->m_vdencRowStoreCache.enabled)
441416 {
442 cmd->RowStoreScratchBuffer.BufferPictureFields.DW0.CacheSelect = cmd_t::VDENC_Surface_Control_Bits_CMD::CACHE_SELECT_UNNAMED1;
443 cmd->RowStoreScratchBuffer.LowerAddress.DW0.Value = this->m_vdencRowStoreCache.dwAddress << 6;
444 }
445 else if (!Mos_ResourceIsNull(params->intraRowStoreScratchBuffer))
446 {
447 cmd->RowStoreScratchBuffer.BufferPictureFields.DW0.MemoryObjectControlState =
417 cmd.RowStoreScratchBuffer.BufferPictureFields.DW0.CacheSelect = cmd_t::VDENC_Surface_Control_Bits_CMD::CACHE_SELECT_UNNAMED1;
418 cmd.RowStoreScratchBuffer.LowerAddress.DW0.Value = this->m_vdencRowStoreCache.dwAddress << 6;
419 }
420 else if (!Mos_ResourceIsNull(params.intraRowStoreScratchBuffer))
421 {
422 cmd.RowStoreScratchBuffer.BufferPictureFields.DW0.MemoryObjectControlState =
448423 this->m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_VDENC_ROW_STORE_BUFFER_CODEC].Value;
449424
450 resourceParams.presResource = params->intraRowStoreScratchBuffer;
425 resourceParams.presResource = params.intraRowStoreScratchBuffer;
451426 resourceParams.dwOffset = 0;
452 resourceParams.pdwCmd = (uint32_t *)&(cmd->RowStoreScratchBuffer.LowerAddress);
427 resourceParams.pdwCmd = (uint32_t *)&(cmd.RowStoreScratchBuffer.LowerAddress);
453428 resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(RowStoreScratchBuffer.LowerAddress);
454429 resourceParams.bIsWritable = true;
455430 resourceParams.HwCommandType = MOS_VDENC_PIPE_BUF_ADDR;
460435 &resourceParams));
461436 }
462437
463 if (!Mos_ResourceIsNull(params->streamOutBuffer))
464 {
465 cmd->VdencStatisticsStreamout.PictureFields.DW0.MemoryObjectControlState =
438 if (!Mos_ResourceIsNull(params.streamOutBuffer))
439 {
440 cmd.VdencStatisticsStreamout.PictureFields.DW0.MemoryObjectControlState =
466441 this->m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_STREAMOUT_DATA_CODEC].Value;
467442
468 resourceParams.presResource = params->streamOutBuffer;
469 resourceParams.dwOffset = params->streamOutOffset;
470 resourceParams.pdwCmd = (uint32_t *)&(cmd->VdencStatisticsStreamout.LowerAddress);
443 resourceParams.presResource = params.streamOutBuffer;
444 resourceParams.dwOffset = params.streamOutOffset;
445 resourceParams.pdwCmd = (uint32_t *)&(cmd.VdencStatisticsStreamout.LowerAddress);
471446 resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(VdencStatisticsStreamout.LowerAddress);
472447 resourceParams.bIsWritable = true;
473448 resourceParams.HwCommandType = MOS_VDENC_PIPE_BUF_ADDR;
478453 &resourceParams));
479454 }
480455
481 if (!Mos_ResourceIsNull(params->streamInBuffer))
482 {
483 cmd->StreaminDataPicture.PictureFields.DW0.MemoryObjectControlState =
456 if (!Mos_ResourceIsNull(params.streamInBuffer))
457 {
458 cmd.StreaminDataPicture.PictureFields.DW0.MemoryObjectControlState =
484459 this->m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_VDENC_STREAMIN_CODEC].Value;
485460
486 resourceParams.presResource = params->streamInBuffer;
461 resourceParams.presResource = params.streamInBuffer;
487462 resourceParams.dwOffset = 0;
488 resourceParams.pdwCmd = (uint32_t *)&(cmd->StreaminDataPicture.LowerAddress);
463 resourceParams.pdwCmd = (uint32_t *)&(cmd.StreaminDataPicture.LowerAddress);
489464 resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(StreaminDataPicture.LowerAddress);
490465 resourceParams.bIsWritable = false;
491466 resourceParams.HwCommandType = MOS_VDENC_PIPE_BUF_ADDR;
497472 }
498473
499474 typename cmd_t::VDENC_Reference_Picture_CMD *fwdRefs[] =
500 {&cmd->FwdRef0, &cmd->FwdRef1, &cmd->FwdRef2, &cmd->BwdRef0};
475 {&cmd.FwdRef0, &cmd.FwdRef1, &cmd.FwdRef2, &cmd.BwdRef0};
501476 uint32_t fwdRefsDwLoaction[] =
502477 {_MHW_CMD_DW_LOCATION(FwdRef0), _MHW_CMD_DW_LOCATION(FwdRef1), _MHW_CMD_DW_LOCATION(FwdRef2)};
503478
504479 typename cmd_t::VDENC_Down_Scaled_Reference_Picture_CMD *fwdRefsDsStage1[] =
505 {&cmd->DsFwdRef0, &cmd->DsFwdRef1};
480 {&cmd.DsFwdRef0, &cmd.DsFwdRef1};
506481 uint32_t fwdRefsDsStage1DwLoaction[] =
507482 {_MHW_CMD_DW_LOCATION(DsFwdRef0), _MHW_CMD_DW_LOCATION(DsFwdRef1)};
508483
509484 typename cmd_t::VDENC_Down_Scaled_Reference_Picture_CMD *fwdRefsDsStage2[] =
510 {&cmd->DsFwdRef04X, &cmd->DsFwdRef14X, &cmd->Additional4xDsFwdRef};
485 {&cmd.DsFwdRef04X, &cmd.DsFwdRef14X, &cmd.Additional4xDsFwdRef};
511486 uint32_t fwdRefsDsStage2DwLoaction[] =
512487 {_MHW_CMD_DW_LOCATION(DsFwdRef04X), _MHW_CMD_DW_LOCATION(DsFwdRef14X), _MHW_CMD_DW_LOCATION(Additional4xDsFwdRef)};
513488
514489 uint8_t refIdx;
515 for (refIdx = 0; refIdx < params->numActiveRefL0; refIdx++)
516 {
517 if (!Mos_ResourceIsNull(params->refs[refIdx]) && refIdx < sizeof(fwdRefs) / sizeof(fwdRefs[0]))
490 for (refIdx = 0; refIdx < params.numActiveRefL0; refIdx++)
491 {
492 if (!Mos_ResourceIsNull(params.refs[refIdx]) && refIdx < sizeof(fwdRefs) / sizeof(fwdRefs[0]))
518493 {
519494 MOS_SURFACE details = {};
520495 details.Format = Format_Invalid;
521 MHW_CHK_STATUS_RETURN(this->m_osItf->pfnGetResourceInfo(this->m_osItf, params->refs[refIdx], &details));
522
523 resourceParams.presResource = params->refs[refIdx];
496 MHW_CHK_STATUS_RETURN(this->m_osItf->pfnGetResourceInfo(this->m_osItf, params.refs[refIdx], &details));
497
498 resourceParams.presResource = params.refs[refIdx];
524499 resourceParams.dwOffset = details.RenderOffset.YUV.Y.BaseOffset;
525500 resourceParams.dwLocationInCmd = fwdRefsDwLoaction[refIdx];
526501 resourceParams.bIsWritable = false;
527502 resourceParams.pdwCmd = (uint32_t *)&fwdRefs[refIdx]->LowerAddress;
528503 resourceParams.HwCommandType = MOS_VDENC_PIPE_BUF_ADDR;
529504
530 auto mmcMode = (params->mmcStatePostDeblock != MOS_MEMCOMP_DISABLED) ? params->mmcStatePostDeblock : params->mmcStatePreDeblock;
505 auto mmcMode = (params.mmcStatePostDeblock != MOS_MEMCOMP_DISABLED) ? params.mmcStatePostDeblock : params.mmcStatePreDeblock;
531506
532507 fwdRefs[refIdx]->PictureFields.DW0.MemoryCompressionEnable = MmcEnabled(mmcMode);
533508 fwdRefs[refIdx]->PictureFields.DW0.CompressionType = MmcRcEnabled(mmcMode);
534509 fwdRefs[refIdx]->PictureFields.DW0.MemoryObjectControlState =
535510 this->m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_REFERENCE_PICTURE_CODEC].Value;
536 fwdRefs[refIdx]->PictureFields.DW0.CompressionFormat = params->compressionFormatRecon;
511 fwdRefs[refIdx]->PictureFields.DW0.CompressionFormat = params.compressionFormatRecon;
537512
538513 MHW_CHK_STATUS_RETURN(this->AddResourceToCmd(
539514 this->m_osItf,
541516 &resourceParams));
542517 }
543518
544 if (!Mos_ResourceIsNull(params->refsDsStage1[refIdx]) && refIdx < sizeof(fwdRefsDsStage1) / sizeof(fwdRefsDsStage1[0]))
519 if (!Mos_ResourceIsNull(params.refsDsStage1[refIdx]) && refIdx < sizeof(fwdRefsDsStage1) / sizeof(fwdRefsDsStage1[0]))
545520 {
546521 MOS_SURFACE details = {};
547522 details.Format = Format_Invalid;
548 MHW_CHK_STATUS_RETURN(this->m_osItf->pfnGetResourceInfo(this->m_osItf, params->refsDsStage1[refIdx], &details));
549
550 resourceParams.presResource = params->refsDsStage1[refIdx];
523 MHW_CHK_STATUS_RETURN(this->m_osItf->pfnGetResourceInfo(this->m_osItf, params.refsDsStage1[refIdx], &details));
524
525 resourceParams.presResource = params.refsDsStage1[refIdx];
551526 resourceParams.dwOffset = details.RenderOffset.YUV.Y.BaseOffset;
552527 resourceParams.dwLocationInCmd = fwdRefsDsStage1DwLoaction[refIdx];
553528 resourceParams.bIsWritable = false;
554529 resourceParams.pdwCmd = (uint32_t *)&(fwdRefsDsStage1[refIdx]->LowerAddress);
555530 resourceParams.HwCommandType = MOS_VDENC_PIPE_BUF_ADDR;
556531
557 auto mmcMode = params->mmcStateDsStage1;
532 auto mmcMode = params.mmcStateDsStage1;
558533
559534 fwdRefsDsStage1[refIdx]->PictureFields.DW0.MemoryCompressionEnable = MmcEnabled(mmcMode);
560535 fwdRefsDsStage1[refIdx]->PictureFields.DW0.CompressionType = MmcRcEnabled(mmcMode);
567542 &resourceParams));
568543 }
569544
570 if (!Mos_ResourceIsNull(params->refsDsStage2[refIdx]) && refIdx < sizeof(fwdRefsDsStage2) / sizeof(fwdRefsDsStage2[0]))
545 if (!Mos_ResourceIsNull(params.refsDsStage2[refIdx]) && refIdx < sizeof(fwdRefsDsStage2) / sizeof(fwdRefsDsStage2[0]))
571546 {
572547 MOS_SURFACE details = {};
573548 details.Format = Format_Invalid;
574 MHW_CHK_STATUS_RETURN(this->m_osItf->pfnGetResourceInfo(this->m_osItf, params->refsDsStage2[refIdx], &details));
575
576 resourceParams.presResource = params->refsDsStage2[refIdx];
549 MHW_CHK_STATUS_RETURN(this->m_osItf->pfnGetResourceInfo(this->m_osItf, params.refsDsStage2[refIdx], &details));
550
551 resourceParams.presResource = params.refsDsStage2[refIdx];
577552 resourceParams.dwOffset = details.RenderOffset.YUV.Y.BaseOffset;
578553 resourceParams.dwLocationInCmd = fwdRefsDsStage2DwLoaction[refIdx];
579554 resourceParams.bIsWritable = false;
580555 resourceParams.pdwCmd = (uint32_t *)&(fwdRefsDsStage2[refIdx]->LowerAddress);
581556 resourceParams.HwCommandType = MOS_VDENC_PIPE_BUF_ADDR;
582557
583 auto mmcMode = params->mmcStateDsStage2;
558 auto mmcMode = params.mmcStateDsStage2;
584559
585560 fwdRefsDsStage2[refIdx]->PictureFields.DW0.MemoryCompressionEnable = MmcEnabled(mmcMode);
586561 fwdRefsDsStage2[refIdx]->PictureFields.DW0.CompressionType = MmcRcEnabled(mmcMode);
592567 this->m_currentCmdBuf,
593568 &resourceParams));
594569
595 if (params->numActiveRefL0 == 2 && params->numActiveRefL1 == 1 && refIdx == 1)
570 if (params.numActiveRefL0 == 2 && params.numActiveRefL1 == 1 && refIdx == 1)
596571 {
597572 resourceParams.dwLocationInCmd = fwdRefsDsStage2DwLoaction[refIdx + 1];
598573 resourceParams.pdwCmd = (uint32_t *)&(fwdRefsDsStage2[refIdx + 1]->LowerAddress);
611586 }
612587 }
613588
614 if (!params->lowDelayB && params->numActiveRefL1)
615 {
616 if (!Mos_ResourceIsNull(params->refs[refIdx]))
589 if ((!params.lowDelayB && params.numActiveRefL1) || params.isPFrame) //HW request HEVC PFrame to set address in BwdRef0 to be same as FwdRef0
590 {
591 if (!Mos_ResourceIsNull(params.refs[refIdx]))
617592 {
618593 MOS_SURFACE details = {};
619594 details.Format = Format_Invalid;
620 MHW_CHK_STATUS_RETURN(this->m_osItf->pfnGetResourceInfo(this->m_osItf, params->refs[refIdx], &details));
621
622 resourceParams.presResource = params->refs[refIdx];
595 MHW_CHK_STATUS_RETURN(this->m_osItf->pfnGetResourceInfo(this->m_osItf, params.refs[refIdx], &details));
596
597 resourceParams.presResource = params.refs[refIdx];
623598 resourceParams.dwOffset = details.RenderOffset.YUV.Y.BaseOffset;
624599 resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(BwdRef0);
625600 resourceParams.bIsWritable = false;
626 resourceParams.pdwCmd = (uint32_t *)&(cmd->BwdRef0.LowerAddress);
601 resourceParams.pdwCmd = (uint32_t *)&(cmd.BwdRef0.LowerAddress);
627602 resourceParams.HwCommandType = MOS_VDENC_PIPE_BUF_ADDR;
628603
629 auto mmcMode = (params->mmcStatePostDeblock != MOS_MEMCOMP_DISABLED) ? params->mmcStatePostDeblock : params->mmcStatePreDeblock;
630
631 cmd->BwdRef0.PictureFields.DW0.MemoryCompressionEnable = MmcEnabled(mmcMode);
632 cmd->BwdRef0.PictureFields.DW0.CompressionType = MmcRcEnabled(mmcMode);
633 cmd->BwdRef0.PictureFields.DW0.MemoryObjectControlState =
604 auto mmcMode = (params.mmcStatePostDeblock != MOS_MEMCOMP_DISABLED) ? params.mmcStatePostDeblock : params.mmcStatePreDeblock;
605
606 cmd.BwdRef0.PictureFields.DW0.MemoryCompressionEnable = MmcEnabled(mmcMode);
607 cmd.BwdRef0.PictureFields.DW0.CompressionType = MmcRcEnabled(mmcMode);
608 cmd.BwdRef0.PictureFields.DW0.MemoryObjectControlState =
634609 this->m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_REFERENCE_PICTURE_CODEC].Value;
635 cmd->BwdRef0.PictureFields.DW0.CompressionFormat = params->compressionFormatRecon;
610 cmd.BwdRef0.PictureFields.DW0.CompressionFormat = params.compressionFormatRecon;
636611
637612 MHW_CHK_STATUS_RETURN(this->AddResourceToCmd(
638613 this->m_osItf,
640615 &resourceParams));
641616 }
642617
643 if (!Mos_ResourceIsNull(params->refsDsStage1[refIdx]))
618 if (!Mos_ResourceIsNull(params.refsDsStage1[refIdx]))
644619 {
645620 MOS_SURFACE details = {};
646621 details.Format = Format_Invalid;
647 MHW_CHK_STATUS_RETURN(this->m_osItf->pfnGetResourceInfo(this->m_osItf, params->refsDsStage1[refIdx], &details));
648
649 resourceParams.presResource = params->refsDsStage1[refIdx];
622 MHW_CHK_STATUS_RETURN(this->m_osItf->pfnGetResourceInfo(this->m_osItf, params.refsDsStage1[refIdx], &details));
623
624 resourceParams.presResource = params.refsDsStage1[refIdx];
650625 resourceParams.dwOffset = details.RenderOffset.YUV.Y.BaseOffset;
651626 resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(DsBwdRef0);
652627 resourceParams.bIsWritable = false;
653 resourceParams.pdwCmd = (uint32_t *)&(cmd->DsBwdRef0.LowerAddress);
628 resourceParams.pdwCmd = (uint32_t *)&(cmd.DsBwdRef0.LowerAddress);
654629 resourceParams.HwCommandType = MOS_VDENC_PIPE_BUF_ADDR;
655630
656 auto mmcMode = params->mmcStateDsStage1;
657
658 cmd->DsBwdRef0.PictureFields.DW0.MemoryCompressionEnable = MmcEnabled(mmcMode);
659 cmd->DsBwdRef0.PictureFields.DW0.CompressionType = MmcRcEnabled(mmcMode);
660 cmd->DsBwdRef0.PictureFields.DW0.MemoryObjectControlState =
631 auto mmcMode = params.mmcStateDsStage1;
632
633 cmd.DsBwdRef0.PictureFields.DW0.MemoryCompressionEnable = MmcEnabled(mmcMode);
634 cmd.DsBwdRef0.PictureFields.DW0.CompressionType = MmcRcEnabled(mmcMode);
635 cmd.DsBwdRef0.PictureFields.DW0.MemoryObjectControlState =
661636 this->m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_REFERENCE_PICTURE_CODEC].Value;
662637
663638 MHW_CHK_STATUS_RETURN(this->AddResourceToCmd(
666641 &resourceParams));
667642 }
668643
669 if (!Mos_ResourceIsNull(params->refsDsStage2[refIdx]))
644 if (!Mos_ResourceIsNull(params.refsDsStage2[refIdx]))
670645 {
671646 MOS_SURFACE details = {};
672647 details.Format = Format_Invalid;
673 MHW_CHK_STATUS_RETURN(this->m_osItf->pfnGetResourceInfo(this->m_osItf, params->refsDsStage2[refIdx], &details));
674
675 resourceParams.presResource = params->refsDsStage2[refIdx];
648 MHW_CHK_STATUS_RETURN(this->m_osItf->pfnGetResourceInfo(this->m_osItf, params.refsDsStage2[refIdx], &details));
649
650 resourceParams.presResource = params.refsDsStage2[refIdx];
676651 resourceParams.dwOffset = details.RenderOffset.YUV.Y.BaseOffset;
677652 resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(DsBwdRef04X);
678653 resourceParams.bIsWritable = false;
679 resourceParams.pdwCmd = (uint32_t *)&(cmd->DsBwdRef04X.LowerAddress);
654 resourceParams.pdwCmd = (uint32_t *)&(cmd.DsBwdRef04X.LowerAddress);
680655 resourceParams.HwCommandType = MOS_VDENC_PIPE_BUF_ADDR;
681656
682 auto mmcMode = params->mmcStateDsStage2;
683
684 cmd->DsBwdRef04X.PictureFields.DW0.MemoryCompressionEnable = MmcEnabled(mmcMode);
685 cmd->DsBwdRef04X.PictureFields.DW0.CompressionType = MmcRcEnabled(mmcMode);
686 cmd->DsBwdRef04X.PictureFields.DW0.MemoryObjectControlState =
657 auto mmcMode = params.mmcStateDsStage2;
658
659 cmd.DsBwdRef04X.PictureFields.DW0.MemoryCompressionEnable = MmcEnabled(mmcMode);
660 cmd.DsBwdRef04X.PictureFields.DW0.CompressionType = MmcRcEnabled(mmcMode);
661 cmd.DsBwdRef04X.PictureFields.DW0.MemoryObjectControlState =
687662 this->m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_REFERENCE_PICTURE_CODEC].Value;
688663
689664 MHW_CHK_STATUS_RETURN(this->AddResourceToCmd(
693668 }
694669 }
695670
696 if (!Mos_ResourceIsNull(params->colocatedMvReadBuffer))
697 {
698 resourceParams.presResource = params->colocatedMvReadBuffer;
671 if (!Mos_ResourceIsNull(params.colocatedMvReadBuffer))
672 {
673 resourceParams.presResource = params.colocatedMvReadBuffer;
699674 resourceParams.dwOffset = 0;
700 resourceParams.pdwCmd = (uint32_t *)&(cmd->ColocatedMv.LowerAddress);
675 resourceParams.pdwCmd = (uint32_t *)&(cmd.ColocatedMv.LowerAddress);
701676 resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(ColocatedMv.LowerAddress);
702677 resourceParams.bIsWritable = false;
703678 resourceParams.HwCommandType = MOS_VDENC_PIPE_BUF_ADDR;
704679
705 cmd->ColocatedMv.PictureFields.DW0.MemoryCompressionEnable = 0;
706 cmd->ColocatedMv.PictureFields.DW0.CompressionType = 0;
707 cmd->ColocatedMv.PictureFields.DW0.MemoryObjectControlState =
680 cmd.ColocatedMv.PictureFields.DW0.MemoryCompressionEnable = 0;
681 cmd.ColocatedMv.PictureFields.DW0.CompressionType = 0;
682 cmd.ColocatedMv.PictureFields.DW0.MemoryObjectControlState =
708683 this->m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_REFERENCE_PICTURE_CODEC].Value;
709684
710685 MHW_CHK_STATUS_RETURN(this->AddResourceToCmd(
713688 &resourceParams));
714689 }
715690
716 if (!Mos_ResourceIsNull(params->colMvTempBuffer[0]))
717 {
718 resourceParams.presResource = params->colMvTempBuffer[0];
691 if (!Mos_ResourceIsNull(params.colMvTempBuffer[0]))
692 {
693 resourceParams.presResource = params.colMvTempBuffer[0];
719694 resourceParams.dwOffset = 0;
720 resourceParams.pdwCmd = (uint32_t *)&(cmd->ColocatedMv.LowerAddress);
695 resourceParams.pdwCmd = (uint32_t *)&(cmd.ColocatedMv.LowerAddress);
721696 resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(ColocatedMv.LowerAddress);
722697 resourceParams.bIsWritable = true;
723698 resourceParams.HwCommandType = MOS_VDENC_PIPE_BUF_ADDR;
724699
725 cmd->ColocatedMv.PictureFields.DW0.MemoryCompressionEnable = 0;
726 cmd->ColocatedMv.PictureFields.DW0.CompressionType = 0;
727 cmd->ColocatedMv.PictureFields.DW0.MemoryObjectControlState =
700 cmd.ColocatedMv.PictureFields.DW0.MemoryCompressionEnable = 0;
701 cmd.ColocatedMv.PictureFields.DW0.CompressionType = 0;
702 cmd.ColocatedMv.PictureFields.DW0.MemoryObjectControlState =
728703 this->m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_REFERENCE_PICTURE_CODEC].Value;
729704
730705 MHW_CHK_STATUS_RETURN(this->AddResourceToCmd(
733708 &resourceParams));
734709 }
735710
736 if (params->surfaceDsStage1)
737 {
738 resourceParams.presResource = &params->surfaceDsStage1->OsResource;
739 resourceParams.dwOffset = params->surfaceDsStage1->dwOffset;
740 resourceParams.pdwCmd = (uint32_t *)&(cmd->ScaledReferenceSurfaceStage1.LowerAddress);
711 if (params.surfaceDsStage1)
712 {
713 resourceParams.presResource = &params.surfaceDsStage1->OsResource;
714 resourceParams.dwOffset = params.surfaceDsStage1->dwOffset;
715 resourceParams.pdwCmd = (uint32_t *)&(cmd.ScaledReferenceSurfaceStage1.LowerAddress);
741716 resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(ScaledReferenceSurfaceStage1.LowerAddress);
742717 resourceParams.bIsWritable = true;
743718 resourceParams.HwCommandType = MOS_VDENC_PIPE_BUF_ADDR;
744719
745 auto mmcMode = params->mmcStateDsStage1;
746
747 cmd->ScaledReferenceSurfaceStage1.PictureFields.DW0.MemoryCompressionEnable = MmcEnabled(mmcMode);
748 cmd->ScaledReferenceSurfaceStage1.PictureFields.DW0.CompressionType = MmcRcEnabled(mmcMode);
749 cmd->ScaledReferenceSurfaceStage1.PictureFields.DW0.MemoryObjectControlState =
720 auto mmcMode = params.mmcStateDsStage1;
721
722 cmd.ScaledReferenceSurfaceStage1.PictureFields.DW0.MemoryCompressionEnable = MmcEnabled(mmcMode);
723 cmd.ScaledReferenceSurfaceStage1.PictureFields.DW0.CompressionType = MmcRcEnabled(mmcMode);
724 cmd.ScaledReferenceSurfaceStage1.PictureFields.DW0.MemoryObjectControlState =
750725 this->m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_REFERENCE_PICTURE_CODEC].Value;
751726
752727 MHW_CHK_STATUS_RETURN(this->AddResourceToCmd(
755730 &resourceParams));
756731 }
757732
758 if (params->surfaceDsStage2)
759 {
760 resourceParams.presResource = &params->surfaceDsStage2->OsResource;
761 resourceParams.dwOffset = params->surfaceDsStage2->dwOffset;
762 resourceParams.pdwCmd = (uint32_t *)&(cmd->ScaledReferenceSurfaceStage2.LowerAddress);
733 if (params.surfaceDsStage2)
734 {
735 resourceParams.presResource = &params.surfaceDsStage2->OsResource;
736 resourceParams.dwOffset = params.surfaceDsStage2->dwOffset;
737 resourceParams.pdwCmd = (uint32_t *)&(cmd.ScaledReferenceSurfaceStage2.LowerAddress);
763738 resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(ScaledReferenceSurfaceStage2.LowerAddress);
764739 resourceParams.bIsWritable = true;
765740 resourceParams.HwCommandType = MOS_VDENC_PIPE_BUF_ADDR;
766741
767 auto mmcMode = params->mmcStateDsStage2;
768
769 cmd->ScaledReferenceSurfaceStage2.PictureFields.DW0.MemoryCompressionEnable = MmcEnabled(mmcMode);
770 cmd->ScaledReferenceSurfaceStage2.PictureFields.DW0.CompressionType = MmcRcEnabled(mmcMode);
771 cmd->ScaledReferenceSurfaceStage2.PictureFields.DW0.MemoryObjectControlState =
742 auto mmcMode = params.mmcStateDsStage2;
743
744 cmd.ScaledReferenceSurfaceStage2.PictureFields.DW0.MemoryCompressionEnable = MmcEnabled(mmcMode);
745 cmd.ScaledReferenceSurfaceStage2.PictureFields.DW0.CompressionType = MmcRcEnabled(mmcMode);
746 cmd.ScaledReferenceSurfaceStage2.PictureFields.DW0.MemoryObjectControlState =
772747 this->m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_REFERENCE_PICTURE_CODEC].Value;
773748
774749 MHW_CHK_STATUS_RETURN(this->AddResourceToCmd(
777752 &resourceParams));
778753 }
779754
780 if (!Mos_ResourceIsNull(params->pakObjCmdStreamOutBuffer))
781 {
782 resourceParams.presResource = params->pakObjCmdStreamOutBuffer;
755 if (!Mos_ResourceIsNull(params.pakObjCmdStreamOutBuffer))
756 {
757 resourceParams.presResource = params.pakObjCmdStreamOutBuffer;
783758 resourceParams.dwOffset = 0;
784 resourceParams.pdwCmd = (uint32_t *)&(cmd->VdencLcuPakObjCmdBuffer.LowerAddress);
759 resourceParams.pdwCmd = (uint32_t *)&(cmd.VdencLcuPakObjCmdBuffer.LowerAddress);
785760 resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(VdencLcuPakObjCmdBuffer.LowerAddress);
786761 resourceParams.bIsWritable = true;
787762 resourceParams.HwCommandType = MOS_VDENC_PIPE_BUF_ADDR;
788763
789 cmd->VdencLcuPakObjCmdBuffer.PictureFields.DW0.MemoryCompressionEnable = 0;
790 cmd->VdencLcuPakObjCmdBuffer.PictureFields.DW0.CompressionType = 0;
791 cmd->VdencLcuPakObjCmdBuffer.PictureFields.DW0.MemoryObjectControlState =
764 cmd.VdencLcuPakObjCmdBuffer.PictureFields.DW0.MemoryCompressionEnable = 0;
765 cmd.VdencLcuPakObjCmdBuffer.PictureFields.DW0.CompressionType = 0;
766 cmd.VdencLcuPakObjCmdBuffer.PictureFields.DW0.MemoryObjectControlState =
792767 this->m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_REFERENCE_PICTURE_CODEC].Value;
793768
794769 MHW_CHK_STATUS_RETURN(this->AddResourceToCmd(
797772 &resourceParams));
798773 }
799774
800 if (!Mos_ResourceIsNull(params->segmentMapStreamInBuffer))
801 {
802 resourceParams.presResource = params->segmentMapStreamInBuffer;
775 if (!Mos_ResourceIsNull(params.segmentMapStreamInBuffer))
776 {
777 resourceParams.presResource = params.segmentMapStreamInBuffer;
803778 resourceParams.dwOffset = 0;
804 resourceParams.pdwCmd = (uint32_t *)&(cmd->Vp9SegmentationMapStreaminBuffer.LowerAddress);
779 resourceParams.pdwCmd = (uint32_t *)&(cmd.Vp9SegmentationMapStreaminBuffer.LowerAddress);
805780 resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(Vp9SegmentationMapStreaminBuffer.LowerAddress);
806781 resourceParams.bIsWritable = true;
807782 resourceParams.HwCommandType = MOS_VDENC_PIPE_BUF_ADDR;
812787 &resourceParams));
813788 }
814789
815 if (!Mos_ResourceIsNull(params->segmentMapStreamOutBuffer))
816 {
817 resourceParams.presResource = params->segmentMapStreamOutBuffer;
790 if (!Mos_ResourceIsNull(params.segmentMapStreamOutBuffer))
791 {
792 resourceParams.presResource = params.segmentMapStreamOutBuffer;
818793 resourceParams.dwOffset = 0;
819 resourceParams.pdwCmd = (uint32_t *)&(cmd->Vp9SegmentationMapStreamoutBuffer.LowerAddress);
794 resourceParams.pdwCmd = (uint32_t *)&(cmd.Vp9SegmentationMapStreamoutBuffer.LowerAddress);
820795 resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(Vp9SegmentationMapStreamoutBuffer.LowerAddress);
821796 resourceParams.bIsWritable = true;
822797 resourceParams.HwCommandType = MOS_VDENC_PIPE_BUF_ADDR;
827802 &resourceParams));
828803 }
829804
830 cmd->DW61.WeightsHistogramStreamoutOffset = 3 * MHW_CACHELINE_SIZE;
831
832 if (!Mos_ResourceIsNull(params->tileRowStoreBuffer))
833 {
834 resourceParams.presResource = params->tileRowStoreBuffer;
805 cmd.DW61.WeightsHistogramStreamoutOffset = 3 * MHW_CACHELINE_SIZE;
806
807 if (!Mos_ResourceIsNull(params.tileRowStoreBuffer))
808 {
809 resourceParams.presResource = params.tileRowStoreBuffer;
835810 resourceParams.dwOffset = 0;
836 resourceParams.pdwCmd = (uint32_t *)&(cmd->VdencTileRowStoreBuffer.LowerAddress);
811 resourceParams.pdwCmd = (uint32_t *)&(cmd.VdencTileRowStoreBuffer.LowerAddress);
837812 resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(VdencTileRowStoreBuffer.LowerAddress);
838813 resourceParams.bIsWritable = true;
839814 resourceParams.HwCommandType = MOS_VDENC_PIPE_BUF_ADDR;
840815
841 cmd->VdencTileRowStoreBuffer.BufferPictureFields.DW0.MemoryObjectControlState =
816 cmd.VdencTileRowStoreBuffer.BufferPictureFields.DW0.MemoryObjectControlState =
842817 this->m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_VDENC_ROW_STORE_BUFFER_CODEC].Value;
843818
844819 MHW_CHK_STATUS_RETURN(this->AddResourceToCmd(
849824
850825 if (this->m_vdencIpdlRowstoreCache.enabled)
851826 {
852 cmd->IntraPredictionRowstoreBaseAddress.BufferPictureFields.DW0.CacheSelect = cmd_t::VDENC_Surface_Control_Bits_CMD::CACHE_SELECT_UNNAMED1;
853 cmd->IntraPredictionRowstoreBaseAddress.LowerAddress.DW0.Value = m_vdencIpdlRowstoreCache.dwAddress << 6;
854 }
855 else if (!Mos_ResourceIsNull(params->mfdIntraRowStoreScratchBuffer))
856 {
857 resourceParams.presResource = params->mfdIntraRowStoreScratchBuffer;
827 cmd.IntraPredictionRowstoreBaseAddress.BufferPictureFields.DW0.CacheSelect = cmd_t::VDENC_Surface_Control_Bits_CMD::CACHE_SELECT_UNNAMED1;
828 cmd.IntraPredictionRowstoreBaseAddress.LowerAddress.DW0.Value = m_vdencIpdlRowstoreCache.dwAddress << 6;
829 }
830 else if (!Mos_ResourceIsNull(params.mfdIntraRowStoreScratchBuffer))
831 {
832 resourceParams.presResource = params.mfdIntraRowStoreScratchBuffer;
858833 resourceParams.dwOffset = 0;
859 resourceParams.pdwCmd = (uint32_t *)&(cmd->IntraPredictionRowstoreBaseAddress);
834 resourceParams.pdwCmd = (uint32_t *)&(cmd.IntraPredictionRowstoreBaseAddress);
860835 resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(IntraPredictionRowstoreBaseAddress);
861836 resourceParams.bIsWritable = true;
862837 resourceParams.HwCommandType = MOS_VDENC_PIPE_BUF_ADDR;
863838
864 cmd->IntraPredictionRowstoreBaseAddress.BufferPictureFields.DW0.MemoryObjectControlState =
839 cmd.IntraPredictionRowstoreBaseAddress.BufferPictureFields.DW0.MemoryObjectControlState =
865840 m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_INTRA_ROWSTORE_SCRATCH_BUFFER_CODEC].Value;
866 cmd->IntraPredictionRowstoreBaseAddress.BufferPictureFields.DW0.MemoryCompressionEnable = 0;
867
868 MHW_CHK_STATUS_RETURN(this->AddResourceToCmd(
869 this->m_osItf,
870 this->m_currentCmdBuf,
871 &resourceParams));
872 }
873
874 if (!Mos_ResourceIsNull(params->cumulativeCuCountStreamOutBuffer))
875 {
876 resourceParams.presResource = params->cumulativeCuCountStreamOutBuffer;
841 cmd.IntraPredictionRowstoreBaseAddress.BufferPictureFields.DW0.MemoryCompressionEnable = 0;
842
843 MHW_CHK_STATUS_RETURN(this->AddResourceToCmd(
844 this->m_osItf,
845 this->m_currentCmdBuf,
846 &resourceParams));
847 }
848
849 if (!Mos_ResourceIsNull(params.cumulativeCuCountStreamOutBuffer))
850 {
851 resourceParams.presResource = params.cumulativeCuCountStreamOutBuffer;
877852 resourceParams.dwOffset = 0;
878 resourceParams.pdwCmd = (uint32_t *)&(cmd->VdencCumulativeCuCountStreamoutSurface.LowerAddress);
853 resourceParams.pdwCmd = (uint32_t *)&(cmd.VdencCumulativeCuCountStreamoutSurface.LowerAddress);
879854 resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(VdencCumulativeCuCountStreamoutSurface.LowerAddress);
880855 resourceParams.bIsWritable = true;
881856 resourceParams.HwCommandType = MOS_VDENC_PIPE_BUF_ADDR;
886861 &resourceParams));
887862 }
888863
889 if (!Mos_ResourceIsNull(params->colocatedMvWriteBuffer))
890 {
891 resourceParams.presResource = params->colocatedMvWriteBuffer;
864 if (!Mos_ResourceIsNull(params.colocatedMvWriteBuffer))
865 {
866 resourceParams.presResource = params.colocatedMvWriteBuffer;
892867 resourceParams.dwOffset = 0;
893 resourceParams.pdwCmd = (uint32_t *)&(cmd->ColocatedMvAvcWriteBuffer.LowerAddress);
868 resourceParams.pdwCmd = (uint32_t *)&(cmd.ColocatedMvAvcWriteBuffer.LowerAddress);
894869 resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(ColocatedMvAvcWriteBuffer.LowerAddress);
895870 resourceParams.bIsWritable = true;
896871 resourceParams.HwCommandType = MOS_VDENC_PIPE_BUF_ADDR;
897872
898 cmd->ColocatedMvAvcWriteBuffer.PictureFields.DW0.MemoryCompressionEnable = 0;
899 cmd->ColocatedMvAvcWriteBuffer.PictureFields.DW0.CompressionType = 0;
900 cmd->ColocatedMvAvcWriteBuffer.PictureFields.DW0.MemoryObjectControlState =
873 cmd.ColocatedMvAvcWriteBuffer.PictureFields.DW0.MemoryCompressionEnable = 0;
874 cmd.ColocatedMvAvcWriteBuffer.PictureFields.DW0.CompressionType = 0;
875 cmd.ColocatedMvAvcWriteBuffer.PictureFields.DW0.MemoryObjectControlState =
901876 this->m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_REFERENCE_PICTURE_CODEC].Value;
902877
903878 MHW_CHK_STATUS_RETURN(this->AddResourceToCmd(
909884 return MOS_STATUS_SUCCESS;
910885 }
911886
912 _MHW_CMD_SET_DECL_OVERRIDE(VDENC_WEIGHTSOFFSETS_STATE)
913 {
914 _MHW_CMDSET_GETCMDPARAMS_AND_CALLBASE(VDENC_WEIGHTSOFFSETS_STATE);
915
916 #define DO_FIELDS() \
917 DO_FIELD(DW1, WeightsForwardReference0, Clip3(-128, 127, params->weightsLuma[0][0] + params->denomLuma)); \
918 DO_FIELD(DW1, OffsetForwardReference0, params->offsetsLuma[0][0]); \
919 DO_FIELD(DW1, WeightsForwardReference1, Clip3(-128, 127, params->weightsLuma[0][1] + params->denomLuma)); \
920 DO_FIELD(DW1, OffsetForwardReference1, params->offsetsLuma[0][1]); \
921 \
922 DO_FIELD(DW2, WeightsForwardReference2, Clip3(-128, 127, params->weightsLuma[0][2] + params->denomLuma)); \
923 DO_FIELD(DW2, OffsetForwardReference2, params->offsetsLuma[0][2]); \
924 DO_FIELD(DW2, WeightsBackwardReference0, Clip3(-128, 127, params->weightsLuma[1][0] + params->denomLuma)); \
925 DO_FIELD(DW2, OffsetBackwardReference0, params->offsetsLuma[1][0]); \
926 \
927 DO_FIELD(DW3, CbWeightsForwardReference0, Clip3(-128, 127, params->weightsChroma[0][0][0] + params->denomChroma)); \
928 DO_FIELD(DW3, CbOffsetForwardReference0, params->offsetsChroma[0][0][0]); \
929 DO_FIELD(DW3, CbWeightsForwardReference1, Clip3(-128, 127, params->weightsChroma[0][1][0] + params->denomChroma)); \
930 DO_FIELD(DW3, CbOffsetForwardReference1, params->offsetsChroma[0][1][0]); \
931 \
932 DO_FIELD(DW4, CbWeightsForwardReference2, Clip3(-128, 127, params->weightsChroma[0][2][0] + params->denomChroma)); \
933 DO_FIELD(DW4, CbOffsetForwardReference2, params->offsetsChroma[0][2][0]); \
934 DO_FIELD(DW4, CbWeightsBackwardReference0, Clip3(-128, 127, params->weightsChroma[1][0][0] + params->denomChroma)); \
935 DO_FIELD(DW4, CbOffsetBackwardReference0, params->offsetsChroma[1][0][0]); \
936 \
937 DO_FIELD(DW5, CrWeightsForwardReference0, Clip3(-128, 127, params->weightsChroma[0][0][1] + params->denomChroma)); \
938 DO_FIELD(DW5, CrOffsetForwardReference0, params->offsetsChroma[0][0][1]); \
939 DO_FIELD(DW5, CrWeightsForwardReference1, Clip3(-128, 127, params->weightsChroma[0][1][1] + params->denomChroma)); \
940 DO_FIELD(DW5, CrOffsetForwardReference1, params->offsetsChroma[0][1][1]); \
941 \
942 DO_FIELD(DW6, CrWeightsForwardReference2, Clip3(-128, 127, params->weightsChroma[0][2][1] + params->denomChroma)); \
943 DO_FIELD(DW6, CrOffsetForwardReference2, params->offsetsChroma[0][2][1]); \
944 DO_FIELD(DW6, CrWeightsBackwardReference0, Clip3(-128, 127, params->weightsChroma[1][0][1] + params->denomChroma)); \
945 DO_FIELD(DW6, CrOffsetBackwardReference0, params->offsetsChroma[1][0][1])
946
947 #include "mhw_hwcmd_process_cmdfields.h"
948 }
949
950 _MHW_CMD_SET_DECL_OVERRIDE(VDENC_HEVC_VP9_TILE_SLICE_STATE)
951 {
952 _MHW_CMDSET_GETCMDPARAMS_AND_CALLBASE(VDENC_HEVC_VP9_TILE_SLICE_STATE);
953
954 #define DO_FIELDS() \
955 DO_FIELD(DW3, NumParEngine, params->numPipe); \
956 DO_FIELD(DW3, TileNumber, params->tileId); \
957 DO_FIELD(DW3, TileRowStoreSelect, params->tileRowStoreSelect); \
958 DO_FIELD(DW3, Log2WeightDenomLuma, params->log2WeightDenomLuma); \
959 DO_FIELD(DW3, HevcVp9Log2WeightDenomLuma, params->hevcVp9Log2WeightDenomLuma); \
960 DO_FIELD(DW3, Log2WeightDenomChroma, params->log2WeightDenomChroma); \
961 \
962 DO_FIELD(DW4, TileStartCtbX, params->tileStartLCUX * params->ctbSize); \
963 DO_FIELD(DW4, TileStartCtbY, params->tileStartLCUY * params->ctbSize); \
964 \
965 DO_FIELD(DW5, TileWidth, (params->tileWidth >= 256 ? MOS_ALIGN_CEIL(params->tileWidth, 8) : params->tileWidth) - 1); \
966 DO_FIELD(DW5, TileHeight, (params->tileHeight >= 128 ? MOS_ALIGN_CEIL(params->tileHeight, 8) : params->tileHeight) - 1); \
967 \
968 DO_FIELD(DW6, StreaminOffsetEnable, params->tileEnable); \
969 DO_FIELD(DW6, TileStreaminOffset, params->tileStreamInOffset); \
970 \
971 DO_FIELD(DW7, RowStoreOffsetEnable, cmd->DW4.TileStartCtbY == 0 ? params->tileEnable : 0); \
972 DO_FIELD(DW7, TileRowstoreOffset, cmd->DW4.TileStartCtbY == 0 ? cmd->DW4.TileStartCtbX / 32 : 0); \
973 \
974 DO_FIELD(DW8, TileStreamoutOffsetEnable, params->tileEnable); \
975 DO_FIELD(DW8, TileStreamoutOffset, params->tileId * 19); \
976 \
977 DO_FIELD(DW9, LcuStreamOutOffsetEnable, params->tileEnable); \
978 DO_FIELD(DW9, TileLcuStreamOutOffset, params->tileLCUStreamOutOffset); \
979 \
980 DO_FIELD(DW17, CumulativeCuTileOffsetEnable, params->tileEnable); \
981 DO_FIELD(DW17, CumulativeCuTileOffset, params->cumulativeCUTileOffset); \
887 _MHW_SETCMD_OVERRIDE_DECL(VDENC_WEIGHTSOFFSETS_STATE)
888 {
889 _MHW_SETCMD_CALLBASE(VDENC_WEIGHTSOFFSETS_STATE);
890
891 #define DO_FIELDS() \
892 DO_FIELD(DW1, WeightsForwardReference0, Clip3(-128, 127, params.weightsLuma[0][0] + params.denomLuma)); \
893 DO_FIELD(DW1, OffsetForwardReference0, params.offsetsLuma[0][0]); \
894 DO_FIELD(DW1, WeightsForwardReference1, Clip3(-128, 127, params.weightsLuma[0][1] + params.denomLuma)); \
895 DO_FIELD(DW1, OffsetForwardReference1, params.offsetsLuma[0][1]); \
896 \
897 DO_FIELD(DW2, WeightsForwardReference2, Clip3(-128, 127, params.weightsLuma[0][2] + params.denomLuma)); \
898 DO_FIELD(DW2, OffsetForwardReference2, params.offsetsLuma[0][2]); \
899 DO_FIELD(DW2, WeightsBackwardReference0, Clip3(-128, 127, params.weightsLuma[1][0] + params.denomLuma)); \
900 DO_FIELD(DW2, OffsetBackwardReference0, params.offsetsLuma[1][0]); \
901 \
902 DO_FIELD(DW3, CbWeightsForwardReference0, Clip3(-128, 127, params.weightsChroma[0][0][0] + params.denomChroma)); \
903 DO_FIELD(DW3, CbOffsetForwardReference0, params.offsetsChroma[0][0][0]); \
904 DO_FIELD(DW3, CbWeightsForwardReference1, Clip3(-128, 127, params.weightsChroma[0][1][0] + params.denomChroma)); \
905 DO_FIELD(DW3, CbOffsetForwardReference1, params.offsetsChroma[0][1][0]); \
906 \
907 DO_FIELD(DW4, CbWeightsForwardReference2, Clip3(-128, 127, params.weightsChroma[0][2][0] + params.denomChroma)); \
908 DO_FIELD(DW4, CbOffsetForwardReference2, params.offsetsChroma[0][2][0]); \
909 DO_FIELD(DW4, CbWeightsBackwardReference0, Clip3(-128, 127, params.weightsChroma[1][0][0] + params.denomChroma)); \
910 DO_FIELD(DW4, CbOffsetBackwardReference0, params.offsetsChroma[1][0][0]); \
911 \
912 DO_FIELD(DW5, CrWeightsForwardReference0, Clip3(-128, 127, params.weightsChroma[0][0][1] + params.denomChroma)); \
913 DO_FIELD(DW5, CrOffsetForwardReference0, params.offsetsChroma[0][0][1]); \
914 DO_FIELD(DW5, CrWeightsForwardReference1, Clip3(-128, 127, params.weightsChroma[0][1][1] + params.denomChroma)); \
915 DO_FIELD(DW5, CrOffsetForwardReference1, params.offsetsChroma[0][1][1]); \
916 \
917 DO_FIELD(DW6, CrWeightsForwardReference2, Clip3(-128, 127, params.weightsChroma[0][2][1] + params.denomChroma)); \
918 DO_FIELD(DW6, CrOffsetForwardReference2, params.offsetsChroma[0][2][1]); \
919 DO_FIELD(DW6, CrWeightsBackwardReference0, Clip3(-128, 127, params.weightsChroma[1][0][1] + params.denomChroma)); \
920 DO_FIELD(DW6, CrOffsetBackwardReference0, params.offsetsChroma[1][0][1])
921
922 #include "mhw_hwcmd_process_cmdfields.h"
923 }
924
925 _MHW_SETCMD_OVERRIDE_DECL(VDENC_HEVC_VP9_TILE_SLICE_STATE)
926 {
927 _MHW_SETCMD_CALLBASE(VDENC_HEVC_VP9_TILE_SLICE_STATE);
928
929 #define DO_FIELDS() \
930 DO_FIELD(DW3, NumParEngine, params.numPipe); \
931 DO_FIELD(DW3, TileNumber, params.tileId); \
932 DO_FIELD(DW3, TileRowStoreSelect, params.tileRowStoreSelect); \
933 DO_FIELD(DW3, Log2WeightDenomLuma, params.log2WeightDenomLuma); \
934 DO_FIELD(DW3, HevcVp9Log2WeightDenomLuma, params.hevcVp9Log2WeightDenomLuma); \
935 DO_FIELD(DW3, Log2WeightDenomChroma, params.log2WeightDenomChroma); \
936 \
937 DO_FIELD(DW4, TileStartCtbX, params.tileStartLCUX *params.ctbSize); \
938 DO_FIELD(DW4, TileStartCtbY, params.tileStartLCUY *params.ctbSize); \
939 \
940 DO_FIELD(DW5, TileWidth, (params.tileWidth >= 256 ? MOS_ALIGN_CEIL(params.tileWidth, 8) : params.tileWidth) - 1); \
941 DO_FIELD(DW5, TileHeight, (params.tileHeight >= 128 ? MOS_ALIGN_CEIL(params.tileHeight, 8) : params.tileHeight) - 1); \
942 \
943 DO_FIELD(DW6, StreaminOffsetEnable, params.tileEnable); \
944 DO_FIELD(DW6, TileStreaminOffset, params.tileStreamInOffset); \
945 \
946 DO_FIELD(DW7, RowStoreOffsetEnable, cmd.DW4.TileStartCtbY == 0 ? params.tileEnable : 0); \
947 DO_FIELD(DW7, TileRowstoreOffset, cmd.DW4.TileStartCtbY == 0 ? cmd.DW4.TileStartCtbX / 32 : 0); \
948 \
949 DO_FIELD(DW8, TileStreamoutOffsetEnable, params.tileEnable); \
950 DO_FIELD(DW8, TileStreamoutOffset, params.tileId * 19); \
951 \
952 DO_FIELD(DW9, LcuStreamOutOffsetEnable, params.tileEnable); \
953 DO_FIELD(DW9, TileLcuStreamOutOffset, params.tileLCUStreamOutOffset); \
954 \
955 DO_FIELD(DW17, CumulativeCuTileOffsetEnable, params.tileEnable); \
956 DO_FIELD(DW17, CumulativeCuTileOffset, params.cumulativeCUTileOffset); \
982957 __MHW_VDBOX_VDENC_WRAPPER_EXT(VDENC_HEVC_VP9_TILE_SLICE_STATE_IMPL_EXT)
983958
984959 #include "mhw_hwcmd_process_cmdfields.h"
985960 }
986961
987 _MHW_CMD_SET_DECL_OVERRIDE(VDENC_WALKER_STATE)
988 {
989 _MHW_CMDSET_GETCMDPARAMS_AND_CALLBASE(VDENC_WALKER_STATE);
990
991 #define DO_FIELDS() \
992 DO_FIELD(DW1, FirstSuperSlice, params->firstSuperSlice); \
993 DO_FIELD(DW1, MbLcuStartXPosition, params->tileSliceStartLcuMbX); \
994 DO_FIELD(DW1, MbLcuStartYPosition, params->tileSliceStartLcuMbY); \
995 \
996 DO_FIELD(DW2, NextsliceMbLcuStartXPosition, params->nextTileSliceStartLcuMbX); \
997 DO_FIELD(DW2, NextsliceMbStartYPosition, params->nextTileSliceStartLcuMbY)
998
999 #include "mhw_hwcmd_process_cmdfields.h"
1000 }
1001
1002 _MHW_CMD_SET_DECL_OVERRIDE(VD_PIPELINE_FLUSH)
1003 {
1004 _MHW_CMDSET_GETCMDPARAMS_AND_CALLBASE(VD_PIPELINE_FLUSH);
1005
1006 #define DO_FIELDS() \
1007 DO_FIELD(DW1, HevcPipelineDone, params->waitDoneHEVC); \
1008 DO_FIELD(DW1, VdencPipelineDone, params->waitDoneVDENC); \
1009 DO_FIELD(DW1, MflPipelineDone, params->waitDoneMFL); \
1010 DO_FIELD(DW1, MfxPipelineDone, params->waitDoneMFX); \
1011 DO_FIELD(DW1, VdCommandMessageParserDone, params->waitDoneVDCmdMsgParser); \
1012 DO_FIELD(DW1, HevcPipelineCommandFlush, params->flushHEVC); \
1013 DO_FIELD(DW1, VdencPipelineCommandFlush, params->flushVDENC); \
1014 DO_FIELD(DW1, MflPipelineCommandFlush, params->flushMFL); \
1015 DO_FIELD(DW1, MfxPipelineCommandFlush, params->flushMFX); \
962 _MHW_SETCMD_OVERRIDE_DECL(VDENC_WALKER_STATE)
963 {
964 _MHW_SETCMD_CALLBASE(VDENC_WALKER_STATE);
965
966 #define DO_FIELDS() \
967 DO_FIELD(DW1, FirstSuperSlice, params.firstSuperSlice); \
968 DO_FIELD(DW1, MbLcuStartXPosition, params.tileSliceStartLcuMbX); \
969 DO_FIELD(DW1, MbLcuStartYPosition, params.tileSliceStartLcuMbY); \
970 \
971 DO_FIELD(DW2, NextsliceMbLcuStartXPosition, params.nextTileSliceStartLcuMbX); \
972 DO_FIELD(DW2, NextsliceMbStartYPosition, params.nextTileSliceStartLcuMbY)
973
974 #include "mhw_hwcmd_process_cmdfields.h"
975 }
976
977 _MHW_SETCMD_OVERRIDE_DECL(VD_PIPELINE_FLUSH)
978 {
979 _MHW_SETCMD_CALLBASE(VD_PIPELINE_FLUSH);
980
981 #define DO_FIELDS() \
982 DO_FIELD(DW1, HevcPipelineDone, params.waitDoneHEVC); \
983 DO_FIELD(DW1, VdencPipelineDone, params.waitDoneVDENC); \
984 DO_FIELD(DW1, MflPipelineDone, params.waitDoneMFL); \
985 DO_FIELD(DW1, MfxPipelineDone, params.waitDoneMFX); \
986 DO_FIELD(DW1, VdCommandMessageParserDone, params.waitDoneVDCmdMsgParser); \
987 DO_FIELD(DW1, HevcPipelineCommandFlush, params.flushHEVC); \
988 DO_FIELD(DW1, VdencPipelineCommandFlush, params.flushVDENC); \
989 DO_FIELD(DW1, MflPipelineCommandFlush, params.flushMFL); \
990 DO_FIELD(DW1, MfxPipelineCommandFlush, params.flushMFX); \
1016991 __MHW_VDBOX_VDENC_WRAPPER_EXT(VD_PIPELINE_FLUSH_IMPL_EXT)
1017992
1018993 #include "mhw_hwcmd_process_cmdfields.h"
1019994 }
1020995
1021 _MHW_CMD_SET_DECL_OVERRIDE(VDENC_CMD1)
1022 {
1023 _MHW_CMDSET_GETCMDPARAMS_AND_CALLBASE(VDENC_CMD1);
996 _MHW_SETCMD_OVERRIDE_DECL(VDENC_CMD1)
997 {
998 _MHW_SETCMD_CALLBASE(VDENC_CMD1);
1024999
10251000 #define DO_FIELDS() __MHW_VDBOX_VDENC_WRAPPER_EXT(VDENC_CMD1_IMPL_EXT)
10261001
10271002 #include "mhw_hwcmd_process_cmdfields.h"
10281003 }
10291004
1030 _MHW_CMD_SET_DECL_OVERRIDE(VDENC_CMD2)
1031 {
1032 _MHW_CMDSET_GETCMDPARAMS_AND_CALLBASE(VDENC_CMD2);
1005 _MHW_SETCMD_OVERRIDE_DECL(VDENC_CMD2)
1006 {
1007 _MHW_SETCMD_CALLBASE(VDENC_CMD2);
10331008
10341009 #define DO_FIELDS() __MHW_VDBOX_VDENC_WRAPPER_EXT(VDENC_CMD2_IMPL_EXT)
10351010
10361011 #include "mhw_hwcmd_process_cmdfields.h"
10371012 }
10381013
1039 _MHW_CMD_SET_DECL_OVERRIDE(VDENC_CMD3)
1040 {
1041 _MHW_CMDSET_GETCMDPARAMS_AND_CALLBASE(VDENC_CMD3);
1014 _MHW_SETCMD_OVERRIDE_DECL(VDENC_CMD3)
1015 {
1016 _MHW_SETCMD_CALLBASE(VDENC_CMD3);
10421017
10431018 #define DO_FIELDS() __MHW_VDBOX_VDENC_WRAPPER_EXT(VDENC_CMD3_IMPL_EXT)
10441019
10451020 #include "mhw_hwcmd_process_cmdfields.h"
10461021 }
10471022
1048 _MHW_CMD_SET_DECL_OVERRIDE(VDENC_CMD4)
1049 {
1050 _MHW_CMDSET_GETCMDPARAMS_AND_CALLBASE(VDENC_CMD4);
1023 _MHW_SETCMD_OVERRIDE_DECL(VDENC_CMD4)
1024 {
1025 _MHW_SETCMD_CALLBASE(VDENC_CMD4);
10511026
10521027 #define DO_FIELDS() __MHW_VDBOX_VDENC_WRAPPER_EXT(VDENC_CMD4_IMPL_EXT)
10531028
10541029 #include "mhw_hwcmd_process_cmdfields.h"
10551030 }
10561031
1057 _MHW_CMD_SET_DECL_OVERRIDE(VDENC_CMD5)
1058 {
1059 _MHW_CMDSET_GETCMDPARAMS_AND_CALLBASE(VDENC_CMD5);
1032 _MHW_SETCMD_OVERRIDE_DECL(VDENC_CMD5)
1033 {
1034 _MHW_SETCMD_CALLBASE(VDENC_CMD5);
10601035
10611036 #define DO_FIELDS() __MHW_VDBOX_VDENC_WRAPPER_EXT(VDENC_CMD5_IMPL_EXT)
10621037
00 /*
1 * Copyright (c) 2020, Intel Corporation
1 * Copyright (c) 2020-2021, Intel Corporation
22 *
33 * Permission is hereby granted, free of charge, to any person obtaining a
44 * copy of this software and associated documentation files (the "Software"),
3939 class Itf
4040 {
4141 public:
42 class ParSetting
43 {
44 public:
45 virtual ~ParSetting() = default;
46
47 _MHW_SETPAR_DEF(VDENC_CONTROL_STATE);
48 _MHW_SETPAR_DEF(VDENC_PIPE_MODE_SELECT);
49 _MHW_SETPAR_DEF(VDENC_SRC_SURFACE_STATE);
50 _MHW_SETPAR_DEF(VDENC_REF_SURFACE_STATE);
51 _MHW_SETPAR_DEF(VDENC_DS_REF_SURFACE_STATE);
52 _MHW_SETPAR_DEF(VDENC_PIPE_BUF_ADDR_STATE);
53 _MHW_SETPAR_DEF(VDENC_WEIGHTSOFFSETS_STATE);
54 _MHW_SETPAR_DEF(VDENC_HEVC_VP9_TILE_SLICE_STATE);
55 _MHW_SETPAR_DEF(VDENC_WALKER_STATE);
56 _MHW_SETPAR_DEF(VD_PIPELINE_FLUSH);
57 _MHW_SETPAR_DEF(VDENC_CMD1);
58 _MHW_SETPAR_DEF(VDENC_CMD2);
59 _MHW_SETPAR_DEF(VDENC_CMD3);
60 _MHW_SETPAR_DEF(VDENC_CMD4);
61 _MHW_SETPAR_DEF(VDENC_CMD5);
62 };
63
4264 virtual ~Itf() = default;
4365
4466 virtual MOS_STATUS EnableVdencRowstoreCacheIfSupported(uint32_t address) = 0;
81103 } // namespace vdbox
82104 } // namespace mhw
83105
84 #define MHW_VDBOX_VDENC_GET_CMD_PAR(CMD, reset) m_vdencItf->__MHW_CMD_PAR_GET_F(CMD)(reset)
85
86 #define MHW_VDBOX_VDENC_GET_CMD_SIZE(CMD) m_vdencItf->__MHW_CMD_BYTE_SIZE_GET_F(CMD)()
87
88 #define MHW_VDBOX_VDENC_ADD_CMD(CMD, ...) MHW_CHK_STATUS_RETURN(m_vdencItf->__MHW_CMD_ADD_F(CMD)(__VA_ARGS__))
89
90 #define MHW_VDBOX_VDENC_SETPARAMS_AND_ADDCMD(CMD, ...) \
91 _MHW_SETPARAMS_AND_ADDCMD(CMD, mhw::vdbox::vdenc::CmdPar, MHW_VDBOX_VDENC_GET_CMD_PAR, MHW_VDBOX_VDENC_ADD_CMD, __VA_ARGS__)
92
93106 #endif // __MHW_VDBOX_VDENC_ITF_H__
9090 } \
9191 }
9292
93 //!
94 //! \def LOOP_FEATURE_INTERFACE_RETURN(_interfaceClass, _interface, ...)
95 //! Run _featureInterface for all features
96 //!
97 #define LOOP_FEATURE_INTERFACE_RETURN(_interfaceClass, _interface, ...) \
98 { \
99 if (m_featureManager) \
100 { \
101 for (auto feature : *m_featureManager) \
102 { \
103 auto itf = dynamic_cast<_interfaceClass *>(feature); \
104 if (itf) \
105 { \
106 MHW_CHK_STATUS_RETURN(itf->_interface(__VA_ARGS__)); \
107 } \
108 } \
109 } \
110 }
111
112 //!
113 //! \def LOOP_FEATURE_INTERFACE_NO_RETURN(_interfaceClass, _interface, ...)
114 //! Run _featureInterface for all features
115 //!
116 #define LOOP_FEATURE_INTERFACE_NO_RETURN(_interfaceClass, _interface, ...) \
117 { \
118 if (m_featureManager) \
119 { \
120 for (auto feature : *m_featureManager) \
121 { \
122 auto itf = dynamic_cast<_interfaceClass *>(feature); \
123 if (itf) \
124 { \
125 itf->_interface(__VA_ARGS__); \
126 } \
127 } \
128 } \
129 }
130
13193 class MediaFeature;
13294
13395 enum class LIST_TYPE
3232 #include "mhw_mi.h"
3333 #include "media_status_report.h"
3434
35 #define SETPAR_AND_ADDCMD(CMD, itf, ...) \
36 { \
37 auto &par = itf->MHW_GETPAR_F(CMD)(); \
38 par = {}; \
39 using setting_t = typename std::remove_reference<decltype(*itf)>::type::ParSetting; \
40 auto p = dynamic_cast<const setting_t *>(this); \
41 if (p) \
42 { \
43 MHW_CHK_STATUS_RETURN(p->MHW_SETPAR_F(CMD)(par)); \
44 } \
45 if (m_featureManager) \
46 { \
47 for (auto feature : *m_featureManager) \
48 { \
49 p = dynamic_cast<const setting_t *>(feature); \
50 if (p) \
51 { \
52 MHW_CHK_STATUS_RETURN(p->MHW_SETPAR_F(CMD)(par)); \
53 } \
54 } \
55 } \
56 MHW_CHK_STATUS_RETURN(itf->MHW_ADDCMD_F(CMD)(__VA_ARGS__)); \
57 }
58
3559 namespace CMRT_UMD
3660 {
3761 class CmTask;
10371037 // which is designed to avoid splitting two cache lines
10381038 if (pSurface->Format == Format_R8G8B8)
10391039 {
1040 int dummyBytesPerLine = (int)(ceil)((planes[j].dwWidth) / 63.0);
1040 int dummyBytesPerLine = planes[j].dwWidth / 63;
1041 int resPixel = planes[j].dwWidth - 63 * dummyBytesPerLine;
10411042 for (int p = 0; p < dummyBytesPerLine; p++)
10421043 {
10431044 MOS_SecureMemcpy(
10451046 63,
10461047 &pTmpSrc[p * 64],
10471048 63);
1049 }
1050 if (resPixel > 0)
1051 {
1052 MOS_SecureMemcpy(
1053 &pTmpDst[dummyBytesPerLine * 63],
1054 resPixel,
1055 &pTmpSrc[dummyBytesPerLine * 64],
1056 resPixel);
10481057 }
10491058 }
10501059 else