Skip to content

Commit e81fe19

Browse files
peiyigu-intelintel-mediadev
authored andcommitted
[VP] Refactor VpRenderKernelObj
Make one BTI map to one SurfType instead of one SurfType map to one BTI. One SurfType can map to multiple BTI.
1 parent e5d9401 commit e81fe19

File tree

6 files changed

+82
-51
lines changed

6 files changed

+82
-51
lines changed

media_softlet/agnostic/common/vp/hal/packet/vp_render_cmd_packet.cpp

Lines changed: 36 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -665,6 +665,7 @@ MOS_STATUS VpRenderCmdPacket::SetupSurfaceState()
665665
{
666666
KERNEL_SURFACE_STATE_PARAM *kernelSurfaceParam = &surface->second;
667667
SurfaceType type = surface->first;
668+
auto bindingMap = m_kernel->GetSurfaceBindingIndex(type);
668669

669670
RENDERHAL_SURFACE_NEXT renderHalSurface;
670671
MOS_ZeroMemory(&renderHalSurface, sizeof(RENDERHAL_SURFACE_NEXT));
@@ -741,29 +742,44 @@ MOS_STATUS VpRenderCmdPacket::SetupSurfaceState()
741742

742743
if (kernelSurfaceParam->surfaceOverwriteParams.bindedKernel && !kernelSurfaceParam->surfaceOverwriteParams.bufferResource)
743744
{
744-
VP_RENDER_CHK_STATUS_RETURN(SetSurfaceForHwAccess(
745-
&renderHalSurface.OsSurface,
746-
&renderHalSurface,
747-
&renderSurfaceParams,
748-
kernelSurfaceParam->surfaceOverwriteParams.bindIndex,
749-
bWrite,
750-
kernelSurfaceParam->surfaceEntries,
751-
kernelSurfaceParam->sizeOfSurfaceEntries));
752-
753-
index = kernelSurfaceParam->surfaceOverwriteParams.bindIndex;
745+
if (bindingMap.empty())
746+
{
747+
VP_RENDER_CHK_STATUS_RETURN(MOS_STATUS_INVALID_PARAMETER);
748+
}
749+
for (uint32_t bti : bindingMap)
750+
{
751+
VP_RENDER_CHK_STATUS_RETURN(SetSurfaceForHwAccess(
752+
&renderHalSurface.OsSurface,
753+
&renderHalSurface,
754+
&renderSurfaceParams,
755+
bti,
756+
bWrite,
757+
kernelSurfaceParam->surfaceEntries,
758+
kernelSurfaceParam->sizeOfSurfaceEntries));
759+
index = bti;
760+
VP_RENDER_NORMALMESSAGE("Using Binded Index Surface. KernelID %d, SurfType %d, bti %d", m_kernel->GetKernelId(), type, index);
761+
}
754762
}
755763
else
756764
{
757765
if ((kernelSurfaceParam->surfaceOverwriteParams.updatedSurfaceParams &&
758766
kernelSurfaceParam->surfaceOverwriteParams.bufferResource &&
759767
kernelSurfaceParam->surfaceOverwriteParams.bindedKernel))
760768
{
761-
index = SetBufferForHwAccess(
762-
&renderHalSurface.OsSurface,
763-
&renderHalSurface,
764-
&renderSurfaceParams,
765-
kernelSurfaceParam->surfaceOverwriteParams.bindIndex,
766-
bWrite);
769+
if (bindingMap.empty())
770+
{
771+
VP_RENDER_CHK_STATUS_RETURN(MOS_STATUS_INVALID_PARAMETER);
772+
}
773+
for (uint32_t bti : bindingMap)
774+
{
775+
index = SetBufferForHwAccess(
776+
&renderHalSurface.OsSurface,
777+
&renderHalSurface,
778+
&renderSurfaceParams,
779+
bti,
780+
bWrite);
781+
VP_RENDER_NORMALMESSAGE("Using Binded Index Buffer. KernelID %d, SurfType %d, bti %d", m_kernel->GetKernelId(), type, index);
782+
}
767783
}
768784
else if ((kernelSurfaceParam->surfaceOverwriteParams.updatedSurfaceParams &&
769785
kernelSurfaceParam->surfaceOverwriteParams.bufferResource &&
@@ -777,18 +793,20 @@ MOS_STATUS VpRenderCmdPacket::SetupSurfaceState()
777793
&renderHalSurface,
778794
&renderSurfaceParams,
779795
bWrite);
796+
VP_RENDER_CHK_STATUS_RETURN(m_kernel->UpdateCurbeBindingIndex(type, index));
797+
VP_RENDER_NORMALMESSAGE("Using UnBinded Index Buffer. KernelID %d, SurfType %d, bti %d", m_kernel->GetKernelId(), type, index);
780798
}
781799
else
782800
{
783-
VP_RENDER_NORMALMESSAGE("If 1D buffer overwrite to 2D for use, it will go SetSurfaceForHwAccess()");
784801
index = SetSurfaceForHwAccess(
785802
&renderHalSurface.OsSurface,
786803
&renderHalSurface,
787804
&renderSurfaceParams,
788805
bWrite);
806+
VP_RENDER_CHK_STATUS_RETURN(m_kernel->UpdateCurbeBindingIndex(type, index));
807+
VP_RENDER_NORMALMESSAGE("Using UnBinded Index Surface. KernelID %d, SurfType %d, bti %d. If 1D buffer overwrite to 2D for use, it will go SetSurfaceForHwAccess()", m_kernel->GetKernelId(), type, index);
789808
}
790809
}
791-
VP_RENDER_CHK_STATUS_RETURN(m_kernel->UpdateCurbeBindingIndex(type, index));
792810
}
793811
VP_RENDER_CHK_STATUS_RETURN(m_kernel->UpdateCompParams());
794812
}

media_softlet/agnostic/common/vp/hal/packet/vp_render_fc_kernel.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ MOS_STATUS VpRenderFcKernel::SetupSurfaceState()
264264
VP_COMPOSITE_PARAMS &compParams = m_fcParams->compParams;
265265

266266
m_surfaceState.clear();
267+
m_surfaceBindingIndex.clear();
267268

268269
for (i = 0; i < compParams.sourceCount; ++i)
269270
{
@@ -305,7 +306,7 @@ MOS_STATUS VpRenderFcKernel::SetupSurfaceState()
305306
}
306307
}
307308

308-
surfParam.surfaceOverwriteParams.bindIndex = s_bindingTableIndex[layer->layerID];
309+
UpdateCurbeBindingIndex(SurfaceType(SurfaceTypeFcInputLayer0 + layer->layerID), s_bindingTableIndex[layer->layerID]);
309310

310311
SetSurfaceParams(surfParam, *layer, false);
311312
surfParam.surfaceOverwriteParams.renderSurfaceParams.bChromasiting = layer->calculatedParams.chromaSitingEnabled;
@@ -329,7 +330,7 @@ MOS_STATUS VpRenderFcKernel::SetupSurfaceState()
329330
surfParamField.surfaceOverwriteParams.renderSurfaceParams.bVertStrideOffs = true;
330331
}
331332

332-
surfParamField.surfaceOverwriteParams.bindIndex = s_bindingTableIndexField[layer->layerID];
333+
UpdateCurbeBindingIndex(SurfaceType(SurfaceTypeFcInputLayer0Field1Dual + layer->layerID), s_bindingTableIndexField[layer->layerID]);
333334
m_surfaceState.insert(std::make_pair(SurfaceType(SurfaceTypeFcInputLayer0Field1Dual + layer->layerID), surfParamField));
334335

335336
//update render GMM resource usage type
@@ -367,11 +368,11 @@ MOS_STATUS VpRenderFcKernel::SetupSurfaceState()
367368
surfParam.surfaceOverwriteParams.bindedKernel = true;
368369
if (compParams.targetCount > 1 && 0 == i)
369370
{
370-
surfParam.surfaceOverwriteParams.bindIndex = VP_COMP_BTINDEX_RT_SECOND;
371+
UpdateCurbeBindingIndex(SurfaceType(SurfaceTypeFcTarget0 + i), VP_COMP_BTINDEX_RT_SECOND);
371372
}
372373
else
373374
{
374-
surfParam.surfaceOverwriteParams.bindIndex = VP_COMP_BTINDEX_RENDERTARGET;
375+
UpdateCurbeBindingIndex(SurfaceType(SurfaceTypeFcTarget0 + i), VP_COMP_BTINDEX_RENDERTARGET);
375376
}
376377

377378
SetSurfaceParams(surfParam, compParams.target[i], is32MWColorFillKern);
@@ -401,7 +402,7 @@ MOS_STATUS VpRenderFcKernel::SetupSurfaceState()
401402
surfParam.surfaceOverwriteParams.updatedSurfaceParams = true;
402403
// Only need to specify binding index in surface parameters.
403404
surfParam.surfaceOverwriteParams.bindedKernel = true;
404-
surfParam.surfaceOverwriteParams.bindIndex = VP_COMP_BTINDEX_CSC_COEFF;
405+
UpdateCurbeBindingIndex(SurfaceTypeFcCscCoeff, VP_COMP_BTINDEX_CSC_COEFF);
405406

406407
surfParam.surfaceOverwriteParams.updatedRenderSurfaces = true;
407408
surfParam.surfaceOverwriteParams.renderSurfaceParams.Type = RENDERHAL_SURFACE_TYPE_G10;

media_softlet/agnostic/common/vp/hal/packet/vp_render_hdr_kernel.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3404,6 +3404,7 @@ MOS_STATUS VpRenderHdrKernel::SetupSurfaceState()
34043404
VP_RENDER_CHK_NULL_RETURN(m_hwInterface);
34053405
VP_RENDER_CHK_NULL_RETURN(m_hwInterface->m_renderHal);
34063406
renderHal = m_hwInterface->m_renderHal;
3407+
m_surfaceBindingIndex.clear();
34073408

34083409
UpdatePerLayerPipelineStates(&dwUpdateMask);
34093410

@@ -3418,7 +3419,7 @@ MOS_STATUS VpRenderHdrKernel::SetupSurfaceState()
34183419
surfParam.surfaceOverwriteParams.updatedSurfaceParams = true;
34193420
surfParam.surfaceOverwriteParams.bindedKernel = true;
34203421

3421-
surfParam.surfaceOverwriteParams.bindIndex = m_hdrParams->uSourceBindingTableIndex[i];
3422+
UpdateCurbeBindingIndex(SurfaceType(SurfaceTypeHdrInputLayer0 + i), m_hdrParams->uSourceBindingTableIndex[i]);
34223423
iBTentry = m_hdrParams->uSourceBindingTableIndex[i];
34233424

34243425
SetSurfaceParams(surfParam, layer, false);
@@ -3459,13 +3460,13 @@ MOS_STATUS VpRenderHdrKernel::SetupSurfaceState()
34593460
if (m_hdrParams->LUTMode[i] == VPHAL_HDR_LUT_MODE_2D)
34603461
{
34613462
surfaceResource.surfaceOverwriteParams.renderSurfaceParams.MemObjCtl = m_surfMemCacheCtl.Lut2DSurfMemObjCtl;
3462-
surfaceResource.surfaceOverwriteParams.bindIndex = iBTentry + VPHAL_HDR_BTINDEX_OETF1DLUT_OFFSET;
3463+
UpdateCurbeBindingIndex(SurfaceType(SurfaceTypeHdrOETF1DLUTSurface0 + i), iBTentry + VPHAL_HDR_BTINDEX_OETF1DLUT_OFFSET);
34633464
m_surfaceState.insert(std::make_pair(SurfaceType(SurfaceTypeHdrOETF1DLUTSurface0 + i), surfaceResource));
34643465
}
34653466
else if (m_hdrParams->LUTMode[i] == VPHAL_HDR_LUT_MODE_3D)
34663467
{
34673468
surfaceResource.surfaceOverwriteParams.renderSurfaceParams.MemObjCtl = m_surfMemCacheCtl.Lut3DSurfMemObjCtl;
3468-
surfaceResource.surfaceOverwriteParams.bindIndex = iBTentry + VPHAL_HDR_BTINDEX_CRI3DLUT_OFFSET;
3469+
UpdateCurbeBindingIndex(SurfaceType(SurfaceTypeHdrCRI3DLUTSurface0 + i), iBTentry + VPHAL_HDR_BTINDEX_CRI3DLUT_OFFSET);
34693470
surfaceResource.surfaceOverwriteParams.renderSurfaceParams.bWidthInDword_Y = false;
34703471
surfaceResource.surfaceOverwriteParams.renderSurfaceParams.bWidthInDword_UV = false;
34713472
m_surfaceState.insert(std::make_pair(SurfaceType(SurfaceTypeHdrCRI3DLUTSurface0 + i), surfaceResource));
@@ -3480,7 +3481,7 @@ MOS_STATUS VpRenderHdrKernel::SetupSurfaceState()
34803481

34813482
// Only need to specify binding index in surface parameters.
34823483
surfParam.surfaceOverwriteParams.bindedKernel = true;
3483-
surfParam.surfaceOverwriteParams.bindIndex = m_hdrParams->uTargetBindingTableIndex[i];
3484+
UpdateCurbeBindingIndex(SurfaceType(SurfaceTypeHdrTarget0 + i), m_hdrParams->uTargetBindingTableIndex[i]);
34843485

34853486
iBTentry = m_hdrParams->uTargetBindingTableIndex[i];
34863487
auto outputSrc = m_surfaceGroup->find(SurfaceTypeHdrTarget0);
@@ -3526,7 +3527,6 @@ MOS_STATUS VpRenderHdrKernel::SetupSurfaceState()
35263527
surfCoeffParam.surfaceOverwriteParams.updatedSurfaceParams = true;
35273528
// Only need to specify binding index in surface parameters.
35283529
surfCoeffParam.surfaceOverwriteParams.bindedKernel = true;
3529-
surfCoeffParam.surfaceOverwriteParams.bindIndex = VPHAL_HDR_BTINDEX_COEFF;
35303530

35313531
surfCoeffParam.surfaceOverwriteParams.updatedRenderSurfaces = true;
35323532
surfCoeffParam.surfaceOverwriteParams.renderSurfaceParams.Type = RENDERHAL_SURFACE_TYPE_G10;
@@ -3537,10 +3537,12 @@ MOS_STATUS VpRenderHdrKernel::SetupSurfaceState()
35373537

35383538
if (m_hdrParams->bUsingAutoModePipe && bHasAutoModeLayer)
35393539
{
3540+
UpdateCurbeBindingIndex(SurfaceTypeHdrAutoModeCoeff, VPHAL_HDR_BTINDEX_COEFF);
35403541
m_surfaceState.insert(std::make_pair(SurfaceTypeHdrAutoModeCoeff, surfCoeffParam));
35413542
}
35423543
else
35433544
{
3545+
UpdateCurbeBindingIndex(SurfaceTypeHdrCoeff, VPHAL_HDR_BTINDEX_COEFF);
35443546
m_surfaceState.insert(std::make_pair(SurfaceTypeHdrCoeff, surfCoeffParam));
35453547
}
35463548

media_softlet/agnostic/common/vp/hal/packet/vp_render_kernel_obj.h

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include "vp_platform_interface.h"
2929
#include <vector>
3030
#include <map>
31+
#include <set>
3132

3233
class RenderCmdPacket;
3334

@@ -62,7 +63,6 @@ typedef struct _KERNEL_SURFACE_STATE_PARAM
6263
MOS_TILE_TYPE tileType;
6364
bool bufferResource;
6465
bool bindedKernel; // true if bind index is hardcoded by bindIndex.
65-
uint32_t bindIndex;
6666
bool updatedRenderSurfaces; // true if renderSurfaceParams be used.
6767
RENDERHAL_SURFACE_STATE_PARAMS renderSurfaceParams; // default can be skip. for future usages, if surface configed by kernel, use it directlly
6868
} surfaceOverwriteParams;
@@ -78,7 +78,7 @@ using KERNEL_SAMPLER_STATE_GROUP = std::map<SamplerIndex, MHW_SAMPLER_STATE_PARA
7878
using KERNEL_SAMPLER_STATES = std::vector<MHW_SAMPLER_STATE_PARAM>;
7979
using KERNEL_SAMPLER_INDEX = std::vector<SamplerIndex>;
8080
using KERNEL_SURFACE_CONFIG = std::map<SurfaceType, KERNEL_SURFACE_STATE_PARAM>;
81-
using KERNEL_SURFACE_BINDING_INDEX = std::map<SurfaceType, uint32_t>;
81+
using KERNEL_SURFACE_BINDING_INDEX = std::map<SurfaceType, std::set<uint32_t>>;
8282

8383
typedef struct _KERNEL_PARAMS
8484
{
@@ -441,29 +441,29 @@ class VpRenderKernelObj
441441
auto it = m_surfaceBindingIndex.find(surface);
442442
if (it != m_surfaceBindingIndex.end())
443443
{
444-
it->second = index;
444+
it->second.insert(index);
445445
}
446446
else
447447
{
448-
m_surfaceBindingIndex.insert(std::make_pair(surface, index));
448+
std::set<uint32_t> bindingMap;
449+
bindingMap.insert(index);
450+
m_surfaceBindingIndex.insert(std::make_pair(surface, bindingMap));
449451
}
450452

451453
return MOS_STATUS_SUCCESS;
452454
}
453455

454-
uint32_t GetSurfaceBindingIndex(SurfaceType surface)
456+
std::set<uint32_t>& GetSurfaceBindingIndex(SurfaceType surface)
455457
{
456458
auto it = m_surfaceBindingIndex.find(surface);
457459

458-
if (it != m_surfaceBindingIndex.end())
459-
{
460-
return it->second;
461-
}
462-
else
460+
if (it == m_surfaceBindingIndex.end())
463461
{
464462
VP_RENDER_ASSERTMESSAGE("No surface index created for current surface");
465-
return 0;
463+
std::set<uint32_t> bindingMap;
464+
it = m_surfaceBindingIndex.insert(std::make_pair(surface, bindingMap)).first;
466465
}
466+
return it->second;
467467
}
468468

469469
MOS_STATUS InitKernel(void* binary, uint32_t size, KERNEL_CONFIGS& kernelConfigs,

media_softlet/agnostic/common/vp/hal/packet/vp_render_vebox_hdr_3dlut_kernel.cpp

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -239,17 +239,18 @@ MOS_STATUS VpRenderHdr3DLutKernel::SetupSurfaceState()
239239

240240
PRENDERHAL_INTERFACE renderHal = m_hwInterface->m_renderHal;
241241
PMOS_INTERFACE osInterface = m_hwInterface->m_osInterface;
242+
m_surfaceBindingIndex.clear();
242243

243244
KERNEL_SURFACE_STATE_PARAM kernelSurfaceParam = {};
244245
// Only need to specify binding index in surface parameters.
245246
kernelSurfaceParam.surfaceOverwriteParams.updatedSurfaceParams = true;
246247
kernelSurfaceParam.surfaceOverwriteParams.bindedKernel = true;
247248
kernelSurfaceParam.surfaceOverwriteParams.bufferResource = true;
248249

249-
kernelSurfaceParam.surfaceOverwriteParams.bindIndex = BI_VEBOX_HDR_3DLUT_3DLUT;
250+
UpdateCurbeBindingIndex(SurfaceType3DLut, BI_VEBOX_HDR_3DLUT_3DLUT);
250251
kernelSurfaceParam.isOutput = true;
251252
m_surfaceState.insert(std::make_pair(SurfaceType3DLut, kernelSurfaceParam));
252-
kernelSurfaceParam.surfaceOverwriteParams.bindIndex = BI_VEBOX_HDR_3DLUT_COEF;
253+
UpdateCurbeBindingIndex(SurfaceType3DLutCoef, BI_VEBOX_HDR_3DLUT_COEF);
253254
kernelSurfaceParam.isOutput = false;
254255
m_surfaceState.insert(std::make_pair(SurfaceType3DLutCoef, kernelSurfaceParam));
255256

@@ -287,12 +288,19 @@ MOS_STATUS VpRenderHdr3DLutKernel::GetCurbeState(void *&curbe, uint32_t &curbeLe
287288
{
288289
VP_FUNC_CALL();
289290
// init the hdr 3dlut static data
291+
auto bindingMap3DLut = GetSurfaceBindingIndex(SurfaceType3DLut);
292+
auto bindingMapCoef = GetSurfaceBindingIndex(SurfaceType3DLutCoef);
293+
if (bindingMap3DLut.empty() || bindingMapCoef.empty())
294+
{
295+
VP_RENDER_CHK_STATUS_RETURN(MOS_STATUS_INVALID_PARAMETER);
296+
}
297+
290298
MOS_ZeroMemory(&m_curbe, sizeof(m_curbe));
291299
m_curbe.DW00.Thread_Group_X = LUT65_SEG_SIZE;
292300
m_curbe.DW01.Thread_Group_Y = LUT65_SEG_SIZE;
293301
m_curbe.DW02.Thread_Group_Z = 1;
294-
m_curbe.DW06.hdr3DLutSurface = GetSurfaceBindingIndex(SurfaceType3DLut);
295-
m_curbe.DW07.hdrCoefSurface = GetSurfaceBindingIndex(SurfaceType3DLutCoef);
302+
m_curbe.DW06.hdr3DLutSurface = *bindingMap3DLut.begin();
303+
m_curbe.DW07.hdrCoefSurface = *bindingMapCoef.begin();
296304
m_curbe.DW08.hdr3DLutSurfaceHeight = LUT65_SEG_SIZE * LUT65_MUL_SIZE;
297305
m_curbe.DW08.hdr3DLutSurfaceWidth = LUT65_SEG_SIZE * 2;
298306

@@ -530,12 +538,12 @@ MOS_STATUS VpRenderHdr3DLutKernelCM::GetCurbeState(void *&curbe, uint32_t &curbe
530538
{
531539
// Resource need be added.
532540
uint32_t *pSurfaceindex = static_cast<uint32_t *>(arg.pData);
533-
auto it = m_surfaceBindingIndex.find((SurfaceType)*pSurfaceindex);
534-
if (it == m_surfaceBindingIndex.end())
541+
auto bindingMap = GetSurfaceBindingIndex((SurfaceType)*pSurfaceindex);
542+
if (bindingMap.empty())
535543
{
536544
VP_RENDER_CHK_STATUS_RETURN(MOS_STATUS_INVALID_PARAMETER);
537545
}
538-
*((uint32_t *)(data + arg.uOffsetInPayload)) = it->second;
546+
*((uint32_t *)(data + arg.uOffsetInPayload)) = *bindingMap.begin();
539547
}
540548
else if (arg.eArgKind == ARG_KIND_GENERAL)
541549
{
@@ -560,15 +568,16 @@ MOS_STATUS VpRenderHdr3DLutKernelCM::SetupSurfaceState()
560568

561569
PRENDERHAL_INTERFACE renderHal = m_hwInterface->m_renderHal;
562570
PMOS_INTERFACE osInterface = m_hwInterface->m_osInterface;
571+
m_surfaceBindingIndex.clear();
563572

564573
KERNEL_SURFACE_STATE_PARAM kernelSurfaceParam = {};
565574
kernelSurfaceParam.surfaceOverwriteParams.bindedKernel = true;
566575
kernelSurfaceParam.surfaceOverwriteParams.bufferResource = true;
567576

568-
kernelSurfaceParam.surfaceOverwriteParams.bindIndex = BI_VEBOX_HDR_3DLUT_3DLUT_CM;
577+
UpdateCurbeBindingIndex(SurfaceType3DLut, BI_VEBOX_HDR_3DLUT_3DLUT_CM);
569578
kernelSurfaceParam.isOutput = true;
570579
m_surfaceState.insert(std::make_pair(SurfaceType3DLut, kernelSurfaceParam));
571-
kernelSurfaceParam.surfaceOverwriteParams.bindIndex = BI_VEBOX_HDR_3DLUT_COEF_CM;
580+
UpdateCurbeBindingIndex(SurfaceType3DLutCoef, BI_VEBOX_HDR_3DLUT_COEF_CM);
572581
kernelSurfaceParam.isOutput = false;
573582
m_surfaceState.insert(std::make_pair(SurfaceType3DLutCoef, kernelSurfaceParam));
574583

media_softlet/agnostic/common/vp/hal/packet/vp_render_vebox_hvs_kernel.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -275,12 +275,12 @@ MOS_STATUS VpRenderHVSKernel::GetCurbeState(void *&curbe, uint32_t &curbeLength)
275275
{
276276
// Resource need be added.
277277
uint32_t *pSurfaceindex = static_cast<uint32_t *>(arg.pData);
278-
auto it = m_surfaceBindingIndex.find((SurfaceType)*pSurfaceindex);
279-
if (it == m_surfaceBindingIndex.end())
278+
auto bindingMap = GetSurfaceBindingIndex((SurfaceType)*pSurfaceindex);
279+
if (bindingMap.empty())
280280
{
281281
VP_RENDER_CHK_STATUS_RETURN(MOS_STATUS_INVALID_PARAMETER);
282282
}
283-
*((uint32_t *)(data + arg.uOffsetInPayload)) = it->second;
283+
*((uint32_t *)(data + arg.uOffsetInPayload)) = *bindingMap.begin();
284284
}
285285
else if (arg.eArgKind == ARG_KIND_GENERAL)
286286
{
@@ -305,6 +305,7 @@ MOS_STATUS VpRenderHVSKernel::SetupSurfaceState()
305305

306306
PRENDERHAL_INTERFACE renderHal = m_hwInterface->m_renderHal;
307307
PMOS_INTERFACE osInterface = m_hwInterface->m_osInterface;
308+
m_surfaceBindingIndex.clear();
308309

309310
for (auto arg : m_kernelArgs)
310311
{

0 commit comments

Comments
 (0)