Skip to content

Commit 197841a

Browse files
peiyigu-intelintel-mediadev
authored andcommitted
[VP] Fix FC Corruption When Blending without Colorfill in Legacy Path
Fix fc will show corruption when alignedRect is bigger than DestYBottomRightLayer0/DestXBottomRightLayer0 and not set color fill
1 parent 22dc216 commit 197841a

File tree

2 files changed

+49
-0
lines changed

2 files changed

+49
-0
lines changed

media_driver/agnostic/common/vp/hal/vphal_render_composite.cpp

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1994,6 +1994,8 @@ MOS_STATUS CompositeState::RenderMultiPhase(
19941994
for (index = 0, phase = 0; (!bLastPhase); phase++)
19951995
{
19961996
bool disableAvsSampler = false;
1997+
// AdjustParamsBasedOnFcLimit must be called before IsDisableAVSSampler in legacy path, or it will miss the AVS WA
1998+
bool adjustParamBasedOnFcLimit = AdjustParamsBasedOnFcLimit(pcRenderParams);
19971999
VPHAL_COMPOSITE_PARAMS CompositeParams;
19982000
// Prepare compositing structure
19992001
ResetCompParams(&CompositeParams);
@@ -6086,6 +6088,44 @@ bool CompositeState::RenderBufferComputeWalker(
60866088
return bResult;
60876089
}
60886090

6091+
//!
6092+
//! \brief Adjust Params Based On Fc Limit
6093+
//! \param [in,out] pCompParams
6094+
//! Pointer to Composite parameters.
6095+
//! \return bool
6096+
//!
6097+
bool CompositeState::AdjustParamsBasedOnFcLimit(
6098+
PCVPHAL_RENDER_PARAMS pcRenderParam)
6099+
{
6100+
//The kernel is using the rectangle data to calculate mask. If the rectangle configuration does not comply to kernel requirement, the mask calculation will be incorrect and will see corruption.
6101+
if (pcRenderParam->pColorFillParams == nullptr &&
6102+
pcRenderParam->uSrcCount == 1 &&
6103+
pcRenderParam->uDstCount == 1 &&
6104+
pcRenderParam->pSrc[0] != nullptr &&
6105+
pcRenderParam->pTarget[0] != nullptr)
6106+
{
6107+
if (pcRenderParam->pSrc[0]->rcDst.top >= pcRenderParam->pTarget[0]->rcDst.top &&
6108+
pcRenderParam->pSrc[0]->rcDst.left >= pcRenderParam->pTarget[0]->rcDst.left &&
6109+
pcRenderParam->pSrc[0]->rcDst.right <= pcRenderParam->pTarget[0]->rcDst.right &&
6110+
pcRenderParam->pSrc[0]->rcDst.bottom <= pcRenderParam->pTarget[0]->rcDst.bottom)
6111+
{
6112+
VPHAL_RENDER_NORMALMESSAGE("Render Path : 1 Surface to 1 Surface FC Composition. ColorFill is Disabled. Output Dst is bigger than Input Dst. Will make Output Dst become Input Dst to Avoid FC Corruption. (%d %d %d %d) -> (%d %d %d %d)",
6113+
pcRenderParam->pTarget[0]->rcDst.left,
6114+
pcRenderParam->pTarget[0]->rcDst.top,
6115+
pcRenderParam->pTarget[0]->rcDst.right,
6116+
pcRenderParam->pTarget[0]->rcDst.bottom,
6117+
pcRenderParam->pSrc[0]->rcDst.left,
6118+
pcRenderParam->pSrc[0]->rcDst.top,
6119+
pcRenderParam->pSrc[0]->rcDst.right,
6120+
pcRenderParam->pSrc[0]->rcDst.bottom);
6121+
pcRenderParam->pTarget[0]->rcSrc = pcRenderParam->pSrc[0]->rcDst;
6122+
pcRenderParam->pTarget[0]->rcDst = pcRenderParam->pSrc[0]->rcDst;
6123+
return true;
6124+
}
6125+
}
6126+
return false;
6127+
}
6128+
60896129
//!
60906130
//! \brief Calculate Composite parameter and render data
60916131
//! \param [in] pCompParams

media_driver/agnostic/common/vp/hal/vphal_render_composite.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -497,6 +497,15 @@ class CompositeState : public RenderState
497497
PVPHAL_RENDERING_DATA_COMPOSITE pRenderingData,
498498
bool* pbColorfill);
499499

500+
//!
501+
//! \brief Adjust Params Based On Fc Limit
502+
//! \param [in,out] PCVPHAL_RENDER_PARAMS
503+
//! Pointer to pcRenderParam parameters.
504+
//! \return bool
505+
//!
506+
bool AdjustParamsBasedOnFcLimit(
507+
PCVPHAL_RENDER_PARAMS pcRenderParam);
508+
500509
//!
501510
//! \brief Set Sampler AVS parameters
502511
//! \param [in] pRenderingData

0 commit comments

Comments
 (0)