|
|
|
@ -1867,6 +1867,7 @@ void dml32_CalculateSurfaceSizeInMall(
|
|
|
|
|
} // CalculateSurfaceSizeInMall
|
|
|
|
|
|
|
|
|
|
void dml32_CalculateVMRowAndSwath(
|
|
|
|
|
struct dml32_CalculateVMRowAndSwath *st_vars,
|
|
|
|
|
unsigned int NumberOfActiveSurfaces,
|
|
|
|
|
DmlPipe myPipe[],
|
|
|
|
|
unsigned int SurfaceSizeInMALL[],
|
|
|
|
@ -1932,21 +1933,6 @@ void dml32_CalculateVMRowAndSwath(
|
|
|
|
|
unsigned int BIGK_FRAGMENT_SIZE[])
|
|
|
|
|
{
|
|
|
|
|
unsigned int k;
|
|
|
|
|
unsigned int PTEBufferSizeInRequestsForLuma[DC__NUM_DPP__MAX];
|
|
|
|
|
unsigned int PTEBufferSizeInRequestsForChroma[DC__NUM_DPP__MAX];
|
|
|
|
|
unsigned int PDEAndMetaPTEBytesFrameY;
|
|
|
|
|
unsigned int PDEAndMetaPTEBytesFrameC;
|
|
|
|
|
unsigned int MetaRowByteY[DC__NUM_DPP__MAX];
|
|
|
|
|
unsigned int MetaRowByteC[DC__NUM_DPP__MAX];
|
|
|
|
|
unsigned int PixelPTEBytesPerRowY[DC__NUM_DPP__MAX];
|
|
|
|
|
unsigned int PixelPTEBytesPerRowC[DC__NUM_DPP__MAX];
|
|
|
|
|
unsigned int PixelPTEBytesPerRowY_one_row_per_frame[DC__NUM_DPP__MAX];
|
|
|
|
|
unsigned int PixelPTEBytesPerRowC_one_row_per_frame[DC__NUM_DPP__MAX];
|
|
|
|
|
unsigned int dpte_row_width_luma_ub_one_row_per_frame[DC__NUM_DPP__MAX];
|
|
|
|
|
unsigned int dpte_row_height_luma_one_row_per_frame[DC__NUM_DPP__MAX];
|
|
|
|
|
unsigned int dpte_row_width_chroma_ub_one_row_per_frame[DC__NUM_DPP__MAX];
|
|
|
|
|
unsigned int dpte_row_height_chroma_one_row_per_frame[DC__NUM_DPP__MAX];
|
|
|
|
|
bool one_row_per_frame_fits_in_buffer[DC__NUM_DPP__MAX];
|
|
|
|
|
|
|
|
|
|
for (k = 0; k < NumberOfActiveSurfaces; ++k) {
|
|
|
|
|
if (HostVMEnable == true) {
|
|
|
|
@ -1968,15 +1954,15 @@ void dml32_CalculateVMRowAndSwath(
|
|
|
|
|
myPipe[k].SourcePixelFormat == dm_rgbe_alpha) {
|
|
|
|
|
if ((myPipe[k].SourcePixelFormat == dm_420_10 || myPipe[k].SourcePixelFormat == dm_420_12) &&
|
|
|
|
|
!IsVertical(myPipe[k].SourceRotation)) {
|
|
|
|
|
PTEBufferSizeInRequestsForLuma[k] =
|
|
|
|
|
st_vars->PTEBufferSizeInRequestsForLuma[k] =
|
|
|
|
|
(PTEBufferSizeInRequestsLuma + PTEBufferSizeInRequestsChroma) / 2;
|
|
|
|
|
PTEBufferSizeInRequestsForChroma[k] = PTEBufferSizeInRequestsForLuma[k];
|
|
|
|
|
st_vars->PTEBufferSizeInRequestsForChroma[k] = st_vars->PTEBufferSizeInRequestsForLuma[k];
|
|
|
|
|
} else {
|
|
|
|
|
PTEBufferSizeInRequestsForLuma[k] = PTEBufferSizeInRequestsLuma;
|
|
|
|
|
PTEBufferSizeInRequestsForChroma[k] = PTEBufferSizeInRequestsChroma;
|
|
|
|
|
st_vars->PTEBufferSizeInRequestsForLuma[k] = PTEBufferSizeInRequestsLuma;
|
|
|
|
|
st_vars->PTEBufferSizeInRequestsForChroma[k] = PTEBufferSizeInRequestsChroma;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PDEAndMetaPTEBytesFrameC = dml32_CalculateVMAndRowBytes(
|
|
|
|
|
st_vars->PDEAndMetaPTEBytesFrameC = dml32_CalculateVMAndRowBytes(
|
|
|
|
|
myPipe[k].ViewportStationary,
|
|
|
|
|
myPipe[k].DCCEnable,
|
|
|
|
|
myPipe[k].DPPPerSurface,
|
|
|
|
@ -1996,21 +1982,21 @@ void dml32_CalculateVMRowAndSwath(
|
|
|
|
|
GPUVMMaxPageTableLevels,
|
|
|
|
|
GPUVMMinPageSizeKBytes[k],
|
|
|
|
|
HostVMMinPageSize,
|
|
|
|
|
PTEBufferSizeInRequestsForChroma[k],
|
|
|
|
|
st_vars->PTEBufferSizeInRequestsForChroma[k],
|
|
|
|
|
myPipe[k].PitchC,
|
|
|
|
|
myPipe[k].DCCMetaPitchC,
|
|
|
|
|
myPipe[k].BlockWidthC,
|
|
|
|
|
myPipe[k].BlockHeightC,
|
|
|
|
|
|
|
|
|
|
/* Output */
|
|
|
|
|
&MetaRowByteC[k],
|
|
|
|
|
&PixelPTEBytesPerRowC[k],
|
|
|
|
|
&st_vars->MetaRowByteC[k],
|
|
|
|
|
&st_vars->PixelPTEBytesPerRowC[k],
|
|
|
|
|
&dpte_row_width_chroma_ub[k],
|
|
|
|
|
&dpte_row_height_chroma[k],
|
|
|
|
|
&dpte_row_height_linear_chroma[k],
|
|
|
|
|
&PixelPTEBytesPerRowC_one_row_per_frame[k],
|
|
|
|
|
&dpte_row_width_chroma_ub_one_row_per_frame[k],
|
|
|
|
|
&dpte_row_height_chroma_one_row_per_frame[k],
|
|
|
|
|
&st_vars->PixelPTEBytesPerRowC_one_row_per_frame[k],
|
|
|
|
|
&st_vars->dpte_row_width_chroma_ub_one_row_per_frame[k],
|
|
|
|
|
&st_vars->dpte_row_height_chroma_one_row_per_frame[k],
|
|
|
|
|
&meta_req_width_chroma[k],
|
|
|
|
|
&meta_req_height_chroma[k],
|
|
|
|
|
&meta_row_width_chroma[k],
|
|
|
|
@ -2038,19 +2024,19 @@ void dml32_CalculateVMRowAndSwath(
|
|
|
|
|
&VInitPreFillC[k],
|
|
|
|
|
&MaxNumSwathC[k]);
|
|
|
|
|
} else {
|
|
|
|
|
PTEBufferSizeInRequestsForLuma[k] = PTEBufferSizeInRequestsLuma + PTEBufferSizeInRequestsChroma;
|
|
|
|
|
PTEBufferSizeInRequestsForChroma[k] = 0;
|
|
|
|
|
PixelPTEBytesPerRowC[k] = 0;
|
|
|
|
|
PDEAndMetaPTEBytesFrameC = 0;
|
|
|
|
|
MetaRowByteC[k] = 0;
|
|
|
|
|
st_vars->PTEBufferSizeInRequestsForLuma[k] = PTEBufferSizeInRequestsLuma + PTEBufferSizeInRequestsChroma;
|
|
|
|
|
st_vars->PTEBufferSizeInRequestsForChroma[k] = 0;
|
|
|
|
|
st_vars->PixelPTEBytesPerRowC[k] = 0;
|
|
|
|
|
st_vars->PDEAndMetaPTEBytesFrameC = 0;
|
|
|
|
|
st_vars->MetaRowByteC[k] = 0;
|
|
|
|
|
MaxNumSwathC[k] = 0;
|
|
|
|
|
PrefetchSourceLinesC[k] = 0;
|
|
|
|
|
dpte_row_height_chroma_one_row_per_frame[k] = 0;
|
|
|
|
|
dpte_row_width_chroma_ub_one_row_per_frame[k] = 0;
|
|
|
|
|
PixelPTEBytesPerRowC_one_row_per_frame[k] = 0;
|
|
|
|
|
st_vars->dpte_row_height_chroma_one_row_per_frame[k] = 0;
|
|
|
|
|
st_vars->dpte_row_width_chroma_ub_one_row_per_frame[k] = 0;
|
|
|
|
|
st_vars->PixelPTEBytesPerRowC_one_row_per_frame[k] = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PDEAndMetaPTEBytesFrameY = dml32_CalculateVMAndRowBytes(
|
|
|
|
|
st_vars->PDEAndMetaPTEBytesFrameY = dml32_CalculateVMAndRowBytes(
|
|
|
|
|
myPipe[k].ViewportStationary,
|
|
|
|
|
myPipe[k].DCCEnable,
|
|
|
|
|
myPipe[k].DPPPerSurface,
|
|
|
|
@ -2070,21 +2056,21 @@ void dml32_CalculateVMRowAndSwath(
|
|
|
|
|
GPUVMMaxPageTableLevels,
|
|
|
|
|
GPUVMMinPageSizeKBytes[k],
|
|
|
|
|
HostVMMinPageSize,
|
|
|
|
|
PTEBufferSizeInRequestsForLuma[k],
|
|
|
|
|
st_vars->PTEBufferSizeInRequestsForLuma[k],
|
|
|
|
|
myPipe[k].PitchY,
|
|
|
|
|
myPipe[k].DCCMetaPitchY,
|
|
|
|
|
myPipe[k].BlockWidthY,
|
|
|
|
|
myPipe[k].BlockHeightY,
|
|
|
|
|
|
|
|
|
|
/* Output */
|
|
|
|
|
&MetaRowByteY[k],
|
|
|
|
|
&PixelPTEBytesPerRowY[k],
|
|
|
|
|
&st_vars->MetaRowByteY[k],
|
|
|
|
|
&st_vars->PixelPTEBytesPerRowY[k],
|
|
|
|
|
&dpte_row_width_luma_ub[k],
|
|
|
|
|
&dpte_row_height_luma[k],
|
|
|
|
|
&dpte_row_height_linear_luma[k],
|
|
|
|
|
&PixelPTEBytesPerRowY_one_row_per_frame[k],
|
|
|
|
|
&dpte_row_width_luma_ub_one_row_per_frame[k],
|
|
|
|
|
&dpte_row_height_luma_one_row_per_frame[k],
|
|
|
|
|
&st_vars->PixelPTEBytesPerRowY_one_row_per_frame[k],
|
|
|
|
|
&st_vars->dpte_row_width_luma_ub_one_row_per_frame[k],
|
|
|
|
|
&st_vars->dpte_row_height_luma_one_row_per_frame[k],
|
|
|
|
|
&meta_req_width[k],
|
|
|
|
|
&meta_req_height[k],
|
|
|
|
|
&meta_row_width[k],
|
|
|
|
@ -2112,19 +2098,19 @@ void dml32_CalculateVMRowAndSwath(
|
|
|
|
|
&VInitPreFillY[k],
|
|
|
|
|
&MaxNumSwathY[k]);
|
|
|
|
|
|
|
|
|
|
PDEAndMetaPTEBytesFrame[k] = PDEAndMetaPTEBytesFrameY + PDEAndMetaPTEBytesFrameC;
|
|
|
|
|
MetaRowByte[k] = MetaRowByteY[k] + MetaRowByteC[k];
|
|
|
|
|
PDEAndMetaPTEBytesFrame[k] = st_vars->PDEAndMetaPTEBytesFrameY + st_vars->PDEAndMetaPTEBytesFrameC;
|
|
|
|
|
MetaRowByte[k] = st_vars->MetaRowByteY[k] + st_vars->MetaRowByteC[k];
|
|
|
|
|
|
|
|
|
|
if (PixelPTEBytesPerRowY[k] <= 64 * PTEBufferSizeInRequestsForLuma[k] &&
|
|
|
|
|
PixelPTEBytesPerRowC[k] <= 64 * PTEBufferSizeInRequestsForChroma[k]) {
|
|
|
|
|
if (st_vars->PixelPTEBytesPerRowY[k] <= 64 * st_vars->PTEBufferSizeInRequestsForLuma[k] &&
|
|
|
|
|
st_vars->PixelPTEBytesPerRowC[k] <= 64 * st_vars->PTEBufferSizeInRequestsForChroma[k]) {
|
|
|
|
|
PTEBufferSizeNotExceeded[k] = true;
|
|
|
|
|
} else {
|
|
|
|
|
PTEBufferSizeNotExceeded[k] = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
one_row_per_frame_fits_in_buffer[k] = (PixelPTEBytesPerRowY_one_row_per_frame[k] <= 64 * 2 *
|
|
|
|
|
PTEBufferSizeInRequestsForLuma[k] &&
|
|
|
|
|
PixelPTEBytesPerRowC_one_row_per_frame[k] <= 64 * 2 * PTEBufferSizeInRequestsForChroma[k]);
|
|
|
|
|
st_vars->one_row_per_frame_fits_in_buffer[k] = (st_vars->PixelPTEBytesPerRowY_one_row_per_frame[k] <= 64 * 2 *
|
|
|
|
|
st_vars->PTEBufferSizeInRequestsForLuma[k] &&
|
|
|
|
|
st_vars->PixelPTEBytesPerRowC_one_row_per_frame[k] <= 64 * 2 * st_vars->PTEBufferSizeInRequestsForChroma[k]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dml32_CalculateMALLUseForStaticScreen(
|
|
|
|
@ -2132,7 +2118,7 @@ void dml32_CalculateVMRowAndSwath(
|
|
|
|
|
MALLAllocatedForDCN,
|
|
|
|
|
UseMALLForStaticScreen, // mode
|
|
|
|
|
SurfaceSizeInMALL,
|
|
|
|
|
one_row_per_frame_fits_in_buffer,
|
|
|
|
|
st_vars->one_row_per_frame_fits_in_buffer,
|
|
|
|
|
/* Output */
|
|
|
|
|
UsesMALLForStaticScreen); // boolen
|
|
|
|
|
|
|
|
|
@ -2158,13 +2144,13 @@ void dml32_CalculateVMRowAndSwath(
|
|
|
|
|
!(UseMALLForPStateChange[k] == dm_use_mall_pstate_change_full_frame);
|
|
|
|
|
|
|
|
|
|
if (use_one_row_for_frame[k]) {
|
|
|
|
|
dpte_row_height_luma[k] = dpte_row_height_luma_one_row_per_frame[k];
|
|
|
|
|
dpte_row_width_luma_ub[k] = dpte_row_width_luma_ub_one_row_per_frame[k];
|
|
|
|
|
PixelPTEBytesPerRowY[k] = PixelPTEBytesPerRowY_one_row_per_frame[k];
|
|
|
|
|
dpte_row_height_chroma[k] = dpte_row_height_chroma_one_row_per_frame[k];
|
|
|
|
|
dpte_row_width_chroma_ub[k] = dpte_row_width_chroma_ub_one_row_per_frame[k];
|
|
|
|
|
PixelPTEBytesPerRowC[k] = PixelPTEBytesPerRowC_one_row_per_frame[k];
|
|
|
|
|
PTEBufferSizeNotExceeded[k] = one_row_per_frame_fits_in_buffer[k];
|
|
|
|
|
dpte_row_height_luma[k] = st_vars->dpte_row_height_luma_one_row_per_frame[k];
|
|
|
|
|
dpte_row_width_luma_ub[k] = st_vars->dpte_row_width_luma_ub_one_row_per_frame[k];
|
|
|
|
|
st_vars->PixelPTEBytesPerRowY[k] = st_vars->PixelPTEBytesPerRowY_one_row_per_frame[k];
|
|
|
|
|
dpte_row_height_chroma[k] = st_vars->dpte_row_height_chroma_one_row_per_frame[k];
|
|
|
|
|
dpte_row_width_chroma_ub[k] = st_vars->dpte_row_width_chroma_ub_one_row_per_frame[k];
|
|
|
|
|
st_vars->PixelPTEBytesPerRowC[k] = st_vars->PixelPTEBytesPerRowC_one_row_per_frame[k];
|
|
|
|
|
PTEBufferSizeNotExceeded[k] = st_vars->one_row_per_frame_fits_in_buffer[k];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (MetaRowByte[k] <= DCCMetaBufferSizeBytes)
|
|
|
|
@ -2172,7 +2158,7 @@ void dml32_CalculateVMRowAndSwath(
|
|
|
|
|
else
|
|
|
|
|
DCCMetaBufferSizeNotExceeded[k] = false;
|
|
|
|
|
|
|
|
|
|
PixelPTEBytesPerRow[k] = PixelPTEBytesPerRowY[k] + PixelPTEBytesPerRowC[k];
|
|
|
|
|
PixelPTEBytesPerRow[k] = st_vars->PixelPTEBytesPerRowY[k] + st_vars->PixelPTEBytesPerRowC[k];
|
|
|
|
|
if (use_one_row_for_frame[k])
|
|
|
|
|
PixelPTEBytesPerRow[k] = PixelPTEBytesPerRow[k] / 2;
|
|
|
|
|
|
|
|
|
@ -2183,11 +2169,11 @@ void dml32_CalculateVMRowAndSwath(
|
|
|
|
|
myPipe[k].VRatioChroma,
|
|
|
|
|
myPipe[k].DCCEnable,
|
|
|
|
|
myPipe[k].HTotal / myPipe[k].PixelClock,
|
|
|
|
|
MetaRowByteY[k], MetaRowByteC[k],
|
|
|
|
|
st_vars->MetaRowByteY[k], st_vars->MetaRowByteC[k],
|
|
|
|
|
meta_row_height[k],
|
|
|
|
|
meta_row_height_chroma[k],
|
|
|
|
|
PixelPTEBytesPerRowY[k],
|
|
|
|
|
PixelPTEBytesPerRowC[k],
|
|
|
|
|
st_vars->PixelPTEBytesPerRowY[k],
|
|
|
|
|
st_vars->PixelPTEBytesPerRowC[k],
|
|
|
|
|
dpte_row_height_luma[k],
|
|
|
|
|
dpte_row_height_chroma[k],
|
|
|
|
|
|
|
|
|
@ -2203,12 +2189,12 @@ void dml32_CalculateVMRowAndSwath(
|
|
|
|
|
dml_print("DML::%s: k=%d, dpte_row_height_luma = %d\n", __func__, k, dpte_row_height_luma[k]);
|
|
|
|
|
dml_print("DML::%s: k=%d, dpte_row_width_luma_ub = %d\n",
|
|
|
|
|
__func__, k, dpte_row_width_luma_ub[k]);
|
|
|
|
|
dml_print("DML::%s: k=%d, PixelPTEBytesPerRowY = %d\n", __func__, k, PixelPTEBytesPerRowY[k]);
|
|
|
|
|
dml_print("DML::%s: k=%d, PixelPTEBytesPerRowY = %d\n", __func__, k, st_vars->PixelPTEBytesPerRowY[k]);
|
|
|
|
|
dml_print("DML::%s: k=%d, dpte_row_height_chroma = %d\n",
|
|
|
|
|
__func__, k, dpte_row_height_chroma[k]);
|
|
|
|
|
dml_print("DML::%s: k=%d, dpte_row_width_chroma_ub = %d\n",
|
|
|
|
|
__func__, k, dpte_row_width_chroma_ub[k]);
|
|
|
|
|
dml_print("DML::%s: k=%d, PixelPTEBytesPerRowC = %d\n", __func__, k, PixelPTEBytesPerRowC[k]);
|
|
|
|
|
dml_print("DML::%s: k=%d, PixelPTEBytesPerRowC = %d\n", __func__, k, st_vars->PixelPTEBytesPerRowC[k]);
|
|
|
|
|
dml_print("DML::%s: k=%d, PixelPTEBytesPerRow = %d\n", __func__, k, PixelPTEBytesPerRow[k]);
|
|
|
|
|
dml_print("DML::%s: k=%d, PTEBufferSizeNotExceeded = %d\n",
|
|
|
|
|
__func__, k, PTEBufferSizeNotExceeded[k]);
|
|
|
|
|