[VP] Change Stateless Buffer to AddResourceToCmd
change the stateless buffer added in common way
This commit is contained in:
parent
ffb3c1fcdb
commit
70cc7d5e76
|
@ -1216,6 +1216,12 @@ typedef struct _RENDERHAL_INTERFACE
|
||||||
|
|
||||||
const void *sseuTable; // pointer of const VphalSseuSetting table on a platform
|
const void *sseuTable; // pointer of const VphalSseuSetting table on a platform
|
||||||
|
|
||||||
|
PMHW_INDIRECT_STATE_RESOURCE_PARAMS curbeResourceList;
|
||||||
|
uint32_t curbeResourceListSize;
|
||||||
|
|
||||||
|
PMHW_INDIRECT_STATE_RESOURCE_PARAMS inlineResourceList;
|
||||||
|
uint32_t inlineResourceListSize;
|
||||||
|
|
||||||
uint32_t dwIndirectHeapSize;
|
uint32_t dwIndirectHeapSize;
|
||||||
uint32_t dwTimeoutMs;
|
uint32_t dwTimeoutMs;
|
||||||
int32_t iMaxPalettes;
|
int32_t iMaxPalettes;
|
||||||
|
@ -1766,6 +1772,16 @@ typedef struct _RENDERHAL_INTERFACE
|
||||||
PRENDERHAL_L3_CACHE_SETTINGS pCacheSettings,
|
PRENDERHAL_L3_CACHE_SETTINGS pCacheSettings,
|
||||||
bool bEnableSLM);
|
bool bEnableSLM);
|
||||||
|
|
||||||
|
MOS_STATUS (*pfnSetCurbeResourceList)(
|
||||||
|
PRENDERHAL_INTERFACE pRenderHal,
|
||||||
|
PMHW_INDIRECT_STATE_RESOURCE_PARAMS curbeResourceList,
|
||||||
|
uint32_t curbeResourceListSize);
|
||||||
|
|
||||||
|
MOS_STATUS (*pfnSetInlineResourceList)(
|
||||||
|
PRENDERHAL_INTERFACE pRenderHal,
|
||||||
|
PMHW_INDIRECT_STATE_RESOURCE_PARAMS inlineResourceList,
|
||||||
|
uint32_t inlineResourceListSize);
|
||||||
|
|
||||||
//!
|
//!
|
||||||
//! \brief Get mmio registers address
|
//! \brief Get mmio registers address
|
||||||
//! \details Get mmio registers address
|
//! \details Get mmio registers address
|
||||||
|
@ -1946,6 +1962,16 @@ MOS_STATUS RenderHal_SetSurfaceStateToken(
|
||||||
PMHW_SURFACE_TOKEN_PARAMS pParams,
|
PMHW_SURFACE_TOKEN_PARAMS pParams,
|
||||||
void *pSurfaceStateToken);
|
void *pSurfaceStateToken);
|
||||||
|
|
||||||
|
MOS_STATUS RenderHal_SetInlineResourceList(
|
||||||
|
PRENDERHAL_INTERFACE pRenderHal,
|
||||||
|
PMHW_INDIRECT_STATE_RESOURCE_PARAMS inlineResourceList,
|
||||||
|
uint32_t inlineResourceListSize);
|
||||||
|
|
||||||
|
MOS_STATUS RenderHal_SetCurbeResourceList(
|
||||||
|
PRENDERHAL_INTERFACE pRenderHal,
|
||||||
|
PMHW_INDIRECT_STATE_RESOURCE_PARAMS curbeResourceList,
|
||||||
|
uint32_t curbeResourceListSize);
|
||||||
|
|
||||||
//!
|
//!
|
||||||
//! \brief Send Surfaces PatchList
|
//! \brief Send Surfaces PatchList
|
||||||
//! \details Send Surface State commands
|
//! \details Send Surface State commands
|
||||||
|
|
|
@ -565,7 +565,7 @@ public:
|
||||||
return MOS_STATUS_SUCCESS;
|
return MOS_STATUS_SUCCESS;
|
||||||
};
|
};
|
||||||
|
|
||||||
virtual MOS_STATUS SendStateComputeMpde(
|
virtual MOS_STATUS SendStateComputeMode(
|
||||||
PRENDERHAL_INTERFACE pRenderHal,
|
PRENDERHAL_INTERFACE pRenderHal,
|
||||||
PMOS_COMMAND_BUFFER pCmdBuffer)
|
PMOS_COMMAND_BUFFER pCmdBuffer)
|
||||||
{
|
{
|
||||||
|
|
|
@ -218,6 +218,54 @@ public:
|
||||||
cmd.DW4.GenerateLocalId = params.isGenerateLocalId;
|
cmd.DW4.GenerateLocalId = params.isGenerateLocalId;
|
||||||
cmd.DW4.EmitLocal = params.emitLocal;
|
cmd.DW4.EmitLocal = params.emitLocal;
|
||||||
|
|
||||||
|
if (params.heapsResource.curbeResourceListSize > 0)
|
||||||
|
{
|
||||||
|
MHW_MI_CHK_NULL(params.heapsResource.curbeResourceList);
|
||||||
|
for (uint32_t i = 0; i < params.heapsResource.curbeResourceListSize; ++i)
|
||||||
|
{
|
||||||
|
MHW_INDIRECT_STATE_RESOURCE_PARAMS &resourceParam = params.heapsResource.curbeResourceList[i];
|
||||||
|
MHW_MI_CHK_NULL(resourceParam.stateHeap);
|
||||||
|
MHW_MI_CHK_NULL(resourceParam.stateBasePtr);
|
||||||
|
MOS_COMMAND_BUFFER cmdBuffer = {};
|
||||||
|
MHW_RESOURCE_PARAMS params = {};
|
||||||
|
cmdBuffer.OsResource = *resourceParam.stateHeap;
|
||||||
|
cmdBuffer.pCmdBase = (uint32_t *)resourceParam.stateBasePtr;
|
||||||
|
cmdBuffer.iOffset = resourceParam.stateOffset;
|
||||||
|
|
||||||
|
params.pdwCmd = (uint32_t*)(resourceParam.stateBasePtr + resourceParam.stateOffset);
|
||||||
|
params.presResource = resourceParam.resource;
|
||||||
|
params.dwLocationInCmd = 0;
|
||||||
|
params.dwOffset = resourceParam.resourceOffset;
|
||||||
|
params.bIsWritable = resourceParam.isWrite;
|
||||||
|
params.HwCommandType = MOS_HW_COMMANDS;
|
||||||
|
|
||||||
|
MHW_MI_CHK_STATUS(AddResourceToCmd(m_osItf, &cmdBuffer, ¶ms));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (params.heapsResource.inlineResourceListSize > 0)
|
||||||
|
{
|
||||||
|
MHW_MI_CHK_NULL(params.heapsResource.inlineResourceList);
|
||||||
|
for (uint32_t i = 0; i < params.heapsResource.inlineResourceListSize; ++i)
|
||||||
|
{
|
||||||
|
MHW_INDIRECT_STATE_RESOURCE_PARAMS &resourceParam = params.heapsResource.inlineResourceList[i];
|
||||||
|
MHW_RESOURCE_PARAMS params = {};
|
||||||
|
|
||||||
|
if (resourceParam.stateOffset % sizeof(uint32_t) != 0)
|
||||||
|
{
|
||||||
|
MHW_MI_CHK_STATUS(MOS_STATUS_INVALID_PARAMETER);
|
||||||
|
}
|
||||||
|
params.pdwCmd = (uint32_t *)((uint8_t *)cmd.InlineData.Value + resourceParam.stateOffset);
|
||||||
|
params.presResource = resourceParam.resource;
|
||||||
|
params.dwLocationInCmd = resourceParam.stateOffset / sizeof(uint32_t) + _MHW_CMD_DW_LOCATION(InlineData.Value);
|
||||||
|
params.dwOffset = resourceParam.resourceOffset;
|
||||||
|
params.bIsWritable = resourceParam.isWrite;
|
||||||
|
params.HwCommandType = MOS_HW_COMMANDS;
|
||||||
|
|
||||||
|
MHW_MI_CHK_STATUS(AddResourceToCmd(m_osItf, m_currentCmdBuf, ¶ms));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return MOS_STATUS_SUCCESS;
|
return MOS_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -63,8 +63,12 @@ struct MHW_VFE_SCOREBOARD
|
||||||
|
|
||||||
struct MHW_HEAPS_RESOURCE
|
struct MHW_HEAPS_RESOURCE
|
||||||
{
|
{
|
||||||
PMOS_RESOURCE presInstructionBuffer = nullptr;
|
PMOS_RESOURCE presInstructionBuffer = nullptr;
|
||||||
uint64_t kernelStartGfxAddress = 0;
|
uint64_t kernelStartGfxAddress = 0;
|
||||||
|
PMHW_INDIRECT_STATE_RESOURCE_PARAMS curbeResourceList = nullptr;
|
||||||
|
uint32_t curbeResourceListSize = 0;
|
||||||
|
PMHW_INDIRECT_STATE_RESOURCE_PARAMS inlineResourceList = nullptr;
|
||||||
|
uint32_t inlineResourceListSize = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum MHW_VFE_SLICE_DISABLE
|
enum MHW_VFE_SLICE_DISABLE
|
||||||
|
|
|
@ -603,6 +603,17 @@ typedef struct _MHW_MOCS_PARAMS
|
||||||
uint8_t bitFieldHigh;
|
uint8_t bitFieldHigh;
|
||||||
} MHW_MOCS_PARAMS;
|
} MHW_MOCS_PARAMS;
|
||||||
|
|
||||||
|
struct MHW_INDIRECT_STATE_RESOURCE_PARAMS
|
||||||
|
{
|
||||||
|
PMOS_RESOURCE stateHeap = nullptr;
|
||||||
|
uint8_t *stateBasePtr = nullptr;
|
||||||
|
uint32_t stateOffset = 0;
|
||||||
|
PMOS_RESOURCE resource = nullptr;
|
||||||
|
uint32_t resourceOffset = 0;
|
||||||
|
bool isWrite = false;
|
||||||
|
};
|
||||||
|
using PMHW_INDIRECT_STATE_RESOURCE_PARAMS = MHW_INDIRECT_STATE_RESOURCE_PARAMS*;
|
||||||
|
|
||||||
typedef struct _MHW_RESOURCE_PARAMS
|
typedef struct _MHW_RESOURCE_PARAMS
|
||||||
{
|
{
|
||||||
PMOS_RESOURCE presResource;
|
PMOS_RESOURCE presResource;
|
||||||
|
|
|
@ -4857,6 +4857,19 @@ int32_t RenderHal_LoadCurbeData(
|
||||||
{
|
{
|
||||||
MOS_ZeroMemory(pPtrCurbe + iSize, iCurbeSize);
|
MOS_ZeroMemory(pPtrCurbe + iSize, iCurbeSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pRenderHal->curbeResourceListSize > 0)
|
||||||
|
{
|
||||||
|
MHW_RENDERHAL_CHK_NULL_RETURN(pRenderHal->curbeResourceList);
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < pRenderHal->curbeResourceListSize; ++i)
|
||||||
|
{
|
||||||
|
MHW_INDIRECT_STATE_RESOURCE_PARAMS &resourceParam = pRenderHal->curbeResourceList[i];
|
||||||
|
resourceParam.stateHeap = &pStateHeap->GshOsResource;
|
||||||
|
resourceParam.stateBasePtr = pStateHeap->pGshBuffer;
|
||||||
|
resourceParam.stateOffset += (pStateHeap->pCurMediaState->dwOffset + pStateHeap->dwOffsetCurbe + iOffset);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5705,7 +5718,7 @@ MOS_STATUS RenderHal_AssignBindlessSurfaceStates(
|
||||||
return eStatus;
|
return eStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
MOS_STATUS RenderHal_SendSurfaces_Bindelss(
|
MOS_STATUS RenderHal_SendBindlessSurfaces(
|
||||||
PRENDERHAL_INTERFACE pRenderHal,
|
PRENDERHAL_INTERFACE pRenderHal,
|
||||||
PMOS_COMMAND_BUFFER pCmdBuffer,
|
PMOS_COMMAND_BUFFER pCmdBuffer,
|
||||||
bool bNeedNullPatch)
|
bool bNeedNullPatch)
|
||||||
|
@ -7493,7 +7506,7 @@ MOS_STATUS RenderHal_InitInterface(
|
||||||
pRenderHal->pfnSetSurfaceStateBuffer = RenderHal_SetSurfaceStateBuffer;
|
pRenderHal->pfnSetSurfaceStateBuffer = RenderHal_SetSurfaceStateBuffer;
|
||||||
pRenderHal->pfnCalculateYOffset = RenderHal_CalculateYOffset;
|
pRenderHal->pfnCalculateYOffset = RenderHal_CalculateYOffset;
|
||||||
pRenderHal->pfnAssignBindlessSurfaceStates = RenderHal_AssignBindlessSurfaceStates;
|
pRenderHal->pfnAssignBindlessSurfaceStates = RenderHal_AssignBindlessSurfaceStates;
|
||||||
pRenderHal->pfnSendBindlessSurfaceStates = RenderHal_SendSurfaces_Bindelss;
|
pRenderHal->pfnSendBindlessSurfaceStates = RenderHal_SendBindlessSurfaces;
|
||||||
|
|
||||||
pRenderHal->pfnGetPlaneDefinitionForCommonMessage = RenderHal_GetPlaneDefinitionForCommonMessage;
|
pRenderHal->pfnGetPlaneDefinitionForCommonMessage = RenderHal_GetPlaneDefinitionForCommonMessage;
|
||||||
|
|
||||||
|
@ -7527,6 +7540,8 @@ MOS_STATUS RenderHal_InitInterface(
|
||||||
pRenderHal->pfnSendPalette = RenderHal_SendPalette;
|
pRenderHal->pfnSendPalette = RenderHal_SendPalette;
|
||||||
pRenderHal->pfnSendMediaStates = RenderHal_SendMediaStates;
|
pRenderHal->pfnSendMediaStates = RenderHal_SendMediaStates;
|
||||||
pRenderHal->pfnSendStateBaseAddress = RenderHal_SendStateBaseAddress;
|
pRenderHal->pfnSendStateBaseAddress = RenderHal_SendStateBaseAddress;
|
||||||
|
pRenderHal->pfnSetCurbeResourceList = RenderHal_SetCurbeResourceList;
|
||||||
|
pRenderHal->pfnSetInlineResourceList = RenderHal_SetInlineResourceList;
|
||||||
|
|
||||||
// Initialize OS dependent RenderHal Interfaces common to all platforms
|
// Initialize OS dependent RenderHal Interfaces common to all platforms
|
||||||
pRenderHal->pfnReset = RenderHal_Reset;
|
pRenderHal->pfnReset = RenderHal_Reset;
|
||||||
|
@ -7759,3 +7774,44 @@ MOS_STATUS RenderHal_SetBufferSurfaceForHwAccess(
|
||||||
return eStatus;
|
return eStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MOS_STATUS RenderHal_SetInlineResourceList(
|
||||||
|
PRENDERHAL_INTERFACE pRenderHal,
|
||||||
|
PMHW_INDIRECT_STATE_RESOURCE_PARAMS inlineResourceList,
|
||||||
|
uint32_t inlineResourceListSize)
|
||||||
|
{
|
||||||
|
MHW_RENDERHAL_CHK_NULL_RETURN(pRenderHal);
|
||||||
|
if (inlineResourceListSize > 0)
|
||||||
|
{
|
||||||
|
MHW_RENDERHAL_CHK_NULL_RETURN(inlineResourceList);
|
||||||
|
pRenderHal->inlineResourceList = inlineResourceList;
|
||||||
|
pRenderHal->inlineResourceListSize = inlineResourceListSize;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pRenderHal->inlineResourceList = nullptr;
|
||||||
|
pRenderHal->inlineResourceListSize = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return MOS_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
MOS_STATUS RenderHal_SetCurbeResourceList(
|
||||||
|
PRENDERHAL_INTERFACE pRenderHal,
|
||||||
|
PMHW_INDIRECT_STATE_RESOURCE_PARAMS curbeResourceList,
|
||||||
|
uint32_t curbeResourceListSize)
|
||||||
|
{
|
||||||
|
MHW_RENDERHAL_CHK_NULL_RETURN(pRenderHal);
|
||||||
|
if (curbeResourceListSize > 0)
|
||||||
|
{
|
||||||
|
MHW_RENDERHAL_CHK_NULL_RETURN(curbeResourceList);
|
||||||
|
pRenderHal->curbeResourceList = curbeResourceList;
|
||||||
|
pRenderHal->curbeResourceListSize = curbeResourceListSize;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pRenderHal->curbeResourceList = nullptr;
|
||||||
|
pRenderHal->curbeResourceListSize = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return MOS_STATUS_SUCCESS;
|
||||||
|
}
|
|
@ -1544,6 +1544,7 @@ MHW_SETPAR_DECL_SRC(COMPUTE_WALKER, XRenderHal_Platform_Interface_Next)
|
||||||
{
|
{
|
||||||
MHW_RENDERHAL_CHK_NULL_RETURN(m_gpgpuWalkerParams);
|
MHW_RENDERHAL_CHK_NULL_RETURN(m_gpgpuWalkerParams);
|
||||||
MHW_RENDERHAL_CHK_NULL_RETURN(m_interfaceDescriptorParams);
|
MHW_RENDERHAL_CHK_NULL_RETURN(m_interfaceDescriptorParams);
|
||||||
|
MHW_RENDERHAL_CHK_NULL_RETURN(m_renderHal);
|
||||||
|
|
||||||
params.simdSize = m_gpgpuWalkerParams->simdSize;
|
params.simdSize = m_gpgpuWalkerParams->simdSize;
|
||||||
params.IndirectDataLength = m_gpgpuWalkerParams->IndirectDataLength;
|
params.IndirectDataLength = m_gpgpuWalkerParams->IndirectDataLength;
|
||||||
|
@ -1593,6 +1594,11 @@ MHW_SETPAR_DECL_SRC(COMPUTE_WALKER, XRenderHal_Platform_Interface_Next)
|
||||||
params.isGenerateLocalId = m_gpgpuWalkerParams->isGenerateLocalID;
|
params.isGenerateLocalId = m_gpgpuWalkerParams->isGenerateLocalID;
|
||||||
params.emitLocal = mhw::render::MHW_EMIT_LOCAL_MODE(m_gpgpuWalkerParams->emitLocal);
|
params.emitLocal = mhw::render::MHW_EMIT_LOCAL_MODE(m_gpgpuWalkerParams->emitLocal);
|
||||||
|
|
||||||
|
params.heapsResource.curbeResourceList = m_renderHal->curbeResourceList;
|
||||||
|
params.heapsResource.curbeResourceListSize = m_renderHal->curbeResourceListSize;
|
||||||
|
params.heapsResource.inlineResourceList = m_renderHal->inlineResourceList;
|
||||||
|
params.heapsResource.inlineResourceListSize = m_renderHal->inlineResourceListSize;
|
||||||
|
|
||||||
return MOS_STATUS_SUCCESS;
|
return MOS_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -193,10 +193,12 @@ MOS_STATUS VpHdrFilter::CalculateEngineParams(
|
||||||
case LUT_FILLLUTTABLE_IOLUTINDEX:
|
case LUT_FILLLUTTABLE_IOLUTINDEX:
|
||||||
VP_PUBLIC_CHK_NULL_RETURN(krnArg.pData);
|
VP_PUBLIC_CHK_NULL_RETURN(krnArg.pData);
|
||||||
*(uint32_t *)krnArg.pData = SurfaceType3DLut;
|
*(uint32_t *)krnArg.pData = SurfaceType3DLut;
|
||||||
|
krnArg.isOutput = true;
|
||||||
break;
|
break;
|
||||||
case LUT_FILLLUTTABLE_ICOEFINDEX:
|
case LUT_FILLLUTTABLE_ICOEFINDEX:
|
||||||
VP_PUBLIC_CHK_NULL_RETURN(krnArg.pData);
|
VP_PUBLIC_CHK_NULL_RETURN(krnArg.pData);
|
||||||
*(uint32_t *)krnArg.pData = SurfaceType3DLutCoef;
|
*(uint32_t *)krnArg.pData = SurfaceType3DLutCoef;
|
||||||
|
krnArg.isOutput = false;
|
||||||
break;
|
break;
|
||||||
case LUT_FILLLUTTABLE_LUTSIZE:
|
case LUT_FILLLUTTABLE_LUTSIZE:
|
||||||
VP_PUBLIC_CHK_NULL_RETURN(krnArg.pData);
|
VP_PUBLIC_CHK_NULL_RETURN(krnArg.pData);
|
||||||
|
|
|
@ -985,6 +985,7 @@ MOS_STATUS VpRenderCmdPacket::SetupCurbeStateInBindlessMode()
|
||||||
uint32_t curbeLengthAligned = 0;
|
uint32_t curbeLengthAligned = 0;
|
||||||
|
|
||||||
VP_RENDER_CHK_STATUS_RETURN(m_kernel->GetCurbeState(curbeData, curbeLength, curbeLengthAligned, m_renderData.KernelParam, m_renderHal->dwCurbeBlockAlign));
|
VP_RENDER_CHK_STATUS_RETURN(m_kernel->GetCurbeState(curbeData, curbeLength, curbeLengthAligned, m_renderData.KernelParam, m_renderHal->dwCurbeBlockAlign));
|
||||||
|
VP_RENDER_CHK_STATUS_RETURN(m_renderHal->pfnSetCurbeResourceList(m_renderHal, m_kernel->GetCurbeResourceList().data(), m_kernel->GetCurbeResourceList().size()));
|
||||||
|
|
||||||
m_renderData.iCurbeOffset = m_renderHal->pfnLoadCurbeData(
|
m_renderData.iCurbeOffset = m_renderHal->pfnLoadCurbeData(
|
||||||
m_renderHal,
|
m_renderHal,
|
||||||
|
@ -1096,6 +1097,7 @@ MOS_STATUS VpRenderCmdPacket::SetupWalkerParams()
|
||||||
VP_RENDER_CHK_NULL_RETURN(m_kernel);
|
VP_RENDER_CHK_NULL_RETURN(m_kernel);
|
||||||
|
|
||||||
VP_RENDER_CHK_STATUS_RETURN(m_kernel->GetWalkerSetting(m_renderData.walkerParam, m_renderData));
|
VP_RENDER_CHK_STATUS_RETURN(m_kernel->GetWalkerSetting(m_renderData.walkerParam, m_renderData));
|
||||||
|
VP_RENDER_CHK_STATUS_RETURN(m_renderHal->pfnSetInlineResourceList(m_renderHal, m_kernel->GetInlineResourceList().data(), m_kernel->GetInlineResourceList().size()));
|
||||||
MT_LOG2(MT_VP_CREATE, MT_NORMAL, MT_FUNC_END, 1, MT_MOS_STATUS, MOS_STATUS_SUCCESS);
|
MT_LOG2(MT_VP_CREATE, MT_NORMAL, MT_FUNC_END, 1, MT_MOS_STATUS, MOS_STATUS_SUCCESS);
|
||||||
|
|
||||||
return MOS_STATUS_SUCCESS;
|
return MOS_STATUS_SUCCESS;
|
||||||
|
@ -2034,7 +2036,7 @@ MOS_STATUS VpRenderCmdPacket::SendMediaStates(
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pRenderHal->pRenderHalPltInterface->SendStateComputeMpde(pRenderHal, pCmdBuffer);
|
pRenderHal->pRenderHalPltInterface->SendStateComputeMode(pRenderHal, pCmdBuffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -233,35 +233,10 @@ MOS_STATUS VpRenderKernelObj::CpPrepareResources()
|
||||||
|
|
||||||
MOS_STATUS VpRenderKernelObj::SetupStatelessBuffer()
|
MOS_STATUS VpRenderKernelObj::SetupStatelessBuffer()
|
||||||
{
|
{
|
||||||
m_statelessArray.clear();
|
|
||||||
VP_RENDER_NORMALMESSAGE("Not prepare stateless buffer in kernel %d.", m_kernelId);
|
VP_RENDER_NORMALMESSAGE("Not prepare stateless buffer in kernel %d.", m_kernelId);
|
||||||
return MOS_STATUS_SUCCESS;
|
return MOS_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
MOS_STATUS VpRenderKernelObj::SetupStatelessBufferResource(SurfaceType surf, bool isWrite)
|
|
||||||
{
|
|
||||||
VP_RENDER_CHK_NULL_RETURN(m_surfaceGroup);
|
|
||||||
VP_RENDER_CHK_NULL_RETURN(m_hwInterface);
|
|
||||||
if (surf != SurfaceTypeInvalid)
|
|
||||||
{
|
|
||||||
PMOS_INTERFACE osInterface = m_hwInterface->m_osInterface;
|
|
||||||
VP_RENDER_CHK_NULL_RETURN(osInterface);
|
|
||||||
auto it = m_surfaceGroup->find(surf);
|
|
||||||
VP_SURFACE *curSurf = (m_surfaceGroup->end() != it) ? it->second : nullptr;
|
|
||||||
VP_RENDER_CHK_NULL_RETURN(curSurf);
|
|
||||||
uint64_t ui64GfxAddress = osInterface->pfnGetResourceGfxAddress(osInterface, &curSurf->osSurface->OsResource);
|
|
||||||
|
|
||||||
VP_RENDER_CHK_STATUS_RETURN(osInterface->pfnRegisterResource(
|
|
||||||
osInterface,
|
|
||||||
&curSurf->osSurface->OsResource,
|
|
||||||
isWrite,
|
|
||||||
true));
|
|
||||||
m_statelessArray.emplace(surf, ui64GfxAddress);
|
|
||||||
}
|
|
||||||
|
|
||||||
return MOS_STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
MOS_STATUS VpRenderKernelObj::SetProcessSurfaceGroup(VP_SURFACE_GROUP &surfaces)
|
MOS_STATUS VpRenderKernelObj::SetProcessSurfaceGroup(VP_SURFACE_GROUP &surfaces)
|
||||||
{
|
{
|
||||||
m_surfaceGroup = &surfaces;
|
m_surfaceGroup = &surfaces;
|
||||||
|
|
|
@ -86,7 +86,6 @@ using KERNEL_SAMPLER_STATES = std::vector<MHW_SAMPLER_STATE_PARAM>;
|
||||||
using KERNEL_SAMPLER_INDEX = std::vector<SamplerIndex>;
|
using KERNEL_SAMPLER_INDEX = std::vector<SamplerIndex>;
|
||||||
using KERNEL_SURFACE_CONFIG = std::map<SurfaceType, KERNEL_SURFACE_STATE_PARAM>;
|
using KERNEL_SURFACE_CONFIG = std::map<SurfaceType, KERNEL_SURFACE_STATE_PARAM>;
|
||||||
using KERNEL_SURFACE_BINDING_INDEX = std::map<SurfaceType, std::set<uint32_t>>;
|
using KERNEL_SURFACE_BINDING_INDEX = std::map<SurfaceType, std::set<uint32_t>>;
|
||||||
using KERNEL_STATELESS_BUFF_CONFIG = std::map<SurfaceType, uint64_t>;
|
|
||||||
using KERNEL_BINDELESS_SURFACE = std::map<SurfaceType, std::vector<uint64_t>>;
|
using KERNEL_BINDELESS_SURFACE = std::map<SurfaceType, std::vector<uint64_t>>;
|
||||||
using KERNEL_BINDELESS_SAMPLER = std::map<uint32_t, uint64_t>;
|
using KERNEL_BINDELESS_SAMPLER = std::map<uint32_t, uint64_t>;
|
||||||
|
|
||||||
|
@ -570,6 +569,16 @@ public:
|
||||||
return MOS_STATUS_SUCCESS;
|
return MOS_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<MHW_INDIRECT_STATE_RESOURCE_PARAMS> &GetCurbeResourceList()
|
||||||
|
{
|
||||||
|
return m_curbeResourceList;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<MHW_INDIRECT_STATE_RESOURCE_PARAMS> &GetInlineResourceList()
|
||||||
|
{
|
||||||
|
return m_inlineResourceList;
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
virtual MOS_STATUS SetWalkerSetting(KERNEL_THREAD_SPACE &threadSpace, bool bSyncFlag, bool flushL1 = false);
|
virtual MOS_STATUS SetWalkerSetting(KERNEL_THREAD_SPACE &threadSpace, bool bSyncFlag, bool flushL1 = false);
|
||||||
|
@ -588,8 +597,6 @@ protected:
|
||||||
|
|
||||||
virtual MOS_STATUS SetupStatelessBuffer();
|
virtual MOS_STATUS SetupStatelessBuffer();
|
||||||
|
|
||||||
virtual MOS_STATUS SetupStatelessBufferResource(SurfaceType surf, bool isWrite);
|
|
||||||
|
|
||||||
virtual MOS_STATUS GetCurbeState(void *&curbe, uint32_t &curbeLength) = 0;
|
virtual MOS_STATUS GetCurbeState(void *&curbe, uint32_t &curbeLength) = 0;
|
||||||
|
|
||||||
virtual MOS_STATUS GetAlignedLength(uint32_t &curbeLength, uint32_t &curbeLengthAligned, RENDERHAL_KERNEL_PARAM kernelParam, uint32_t dwBlockAlign)
|
virtual MOS_STATUS GetAlignedLength(uint32_t &curbeLength, uint32_t &curbeLengthAligned, RENDERHAL_KERNEL_PARAM kernelParam, uint32_t dwBlockAlign)
|
||||||
|
@ -613,9 +620,10 @@ protected:
|
||||||
KERNEL_SURFACE_BINDING_INDEX m_surfaceBindingIndex; // store the binding index for processed surface
|
KERNEL_SURFACE_BINDING_INDEX m_surfaceBindingIndex; // store the binding index for processed surface
|
||||||
PVpAllocator m_allocator = nullptr;
|
PVpAllocator m_allocator = nullptr;
|
||||||
MediaUserSettingSharedPtr m_userSettingPtr = nullptr; // usersettingInstance
|
MediaUserSettingSharedPtr m_userSettingPtr = nullptr; // usersettingInstance
|
||||||
KERNEL_STATELESS_BUFF_CONFIG m_statelessArray;
|
|
||||||
KERNEL_BINDELESS_SURFACE m_bindlessSurfaceArray;
|
KERNEL_BINDELESS_SURFACE m_bindlessSurfaceArray;
|
||||||
KERNEL_BINDELESS_SAMPLER m_bindlessSamperArray;
|
KERNEL_BINDELESS_SAMPLER m_bindlessSamperArray;
|
||||||
|
std::vector<MHW_INDIRECT_STATE_RESOURCE_PARAMS> m_curbeResourceList = {};
|
||||||
|
std::vector<MHW_INDIRECT_STATE_RESOURCE_PARAMS> m_inlineResourceList = {};
|
||||||
// kernel attribute
|
// kernel attribute
|
||||||
std::string m_kernelName = "";
|
std::string m_kernelName = "";
|
||||||
void * m_kernelBinary = nullptr;
|
void * m_kernelBinary = nullptr;
|
||||||
|
|
|
@ -284,15 +284,14 @@ MOS_STATUS VpRenderHdr3DLutOclKernel::CpPrepareResources()
|
||||||
MOS_STATUS VpRenderHdr3DLutOclKernel::SetupStatelessBuffer()
|
MOS_STATUS VpRenderHdr3DLutOclKernel::SetupStatelessBuffer()
|
||||||
{
|
{
|
||||||
VP_FUNC_CALL();
|
VP_FUNC_CALL();
|
||||||
m_statelessArray.clear();
|
|
||||||
VP_RENDER_CHK_STATUS_RETURN(SetupStatelessBufferResource(SurfaceType3DLutCoef, false));
|
|
||||||
VP_RENDER_CHK_STATUS_RETURN(SetupStatelessBufferResource(SurfaceType3DLut, true));
|
|
||||||
return MOS_STATUS_SUCCESS;
|
return MOS_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
MOS_STATUS VpRenderHdr3DLutOclKernel::GetCurbeState(void *&curbe, uint32_t &curbeLength)
|
MOS_STATUS VpRenderHdr3DLutOclKernel::GetCurbeState(void *&curbe, uint32_t &curbeLength)
|
||||||
{
|
{
|
||||||
VP_FUNC_CALL();
|
VP_FUNC_CALL();
|
||||||
|
m_curbeResourceList.clear();
|
||||||
curbeLength = m_curbeSize;
|
curbeLength = m_curbeSize;
|
||||||
|
|
||||||
VP_RENDER_NORMALMESSAGE("KernelID %d, Curbe Size %d\n", m_kernelId, curbeLength);
|
VP_RENDER_NORMALMESSAGE("KernelID %d, Curbe Size %d\n", m_kernelId, curbeLength);
|
||||||
|
@ -326,11 +325,19 @@ MOS_STATUS VpRenderHdr3DLutOclKernel::GetCurbeState(void *&curbe, uint32_t &curb
|
||||||
{
|
{
|
||||||
if (arg.addressMode == AddressingModeStateless && arg.pData != nullptr)
|
if (arg.addressMode == AddressingModeStateless && arg.pData != nullptr)
|
||||||
{
|
{
|
||||||
|
VP_PUBLIC_CHK_NULL_RETURN(m_surfaceGroup);
|
||||||
SurfaceType surfType = *((SurfaceType *)arg.pData);
|
SurfaceType surfType = *((SurfaceType *)arg.pData);
|
||||||
auto it = m_statelessArray.find(surfType);
|
auto it = m_surfaceGroup->find(surfType);
|
||||||
VP_PUBLIC_CHK_NOT_FOUND_RETURN(it, &m_statelessArray);
|
VP_PUBLIC_CHK_NOT_FOUND_RETURN(it, m_surfaceGroup);
|
||||||
uint64_t ui64GfxAddress = it->second;
|
PVP_SURFACE surface = it->second;
|
||||||
MOS_SecureMemcpy(pCurbe + arg.uOffsetInPayload, arg.uSize, &ui64GfxAddress, sizeof(ui64GfxAddress));
|
VP_PUBLIC_CHK_NULL_RETURN(surface);
|
||||||
|
VP_PUBLIC_CHK_NULL_RETURN(surface->osSurface);
|
||||||
|
|
||||||
|
MHW_INDIRECT_STATE_RESOURCE_PARAMS params = {};
|
||||||
|
params.isWrite = arg.isOutput;
|
||||||
|
params.resource = &surface->osSurface->OsResource;
|
||||||
|
params.stateOffset = arg.uOffsetInPayload;
|
||||||
|
m_curbeResourceList.push_back(params);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (arg.eArgKind == ARG_KIND_INLINE)
|
else if (arg.eArgKind == ARG_KIND_INLINE)
|
||||||
|
@ -368,6 +375,7 @@ MOS_STATUS VpRenderHdr3DLutOclKernel::GetWalkerSetting(KERNEL_WALKER_PARAMS &wal
|
||||||
// Only for Adv kernels.
|
// Only for Adv kernels.
|
||||||
MOS_STATUS VpRenderHdr3DLutOclKernel::GetInlineData(uint8_t *inlineData)
|
MOS_STATUS VpRenderHdr3DLutOclKernel::GetInlineData(uint8_t *inlineData)
|
||||||
{
|
{
|
||||||
|
m_inlineResourceList.clear();
|
||||||
for (auto &arg : m_kernelArgs)
|
for (auto &arg : m_kernelArgs)
|
||||||
{
|
{
|
||||||
if (arg.eArgKind == ARG_KIND_INLINE)
|
if (arg.eArgKind == ARG_KIND_INLINE)
|
||||||
|
@ -376,12 +384,20 @@ MOS_STATUS VpRenderHdr3DLutOclKernel::GetInlineData(uint8_t *inlineData)
|
||||||
{
|
{
|
||||||
if (arg.addressMode == AddressingModeStateless)
|
if (arg.addressMode == AddressingModeStateless)
|
||||||
{
|
{
|
||||||
|
VP_PUBLIC_CHK_NULL_RETURN(m_surfaceGroup);
|
||||||
SurfaceType surfType = *((SurfaceType *)arg.pData);
|
SurfaceType surfType = *((SurfaceType *)arg.pData);
|
||||||
auto it = m_statelessArray.find(surfType);
|
auto it = m_surfaceGroup->find(surfType);
|
||||||
VP_PUBLIC_CHK_NOT_FOUND_RETURN(it, &m_statelessArray);
|
VP_PUBLIC_CHK_NOT_FOUND_RETURN(it, m_surfaceGroup);
|
||||||
uint64_t ui64GfxAddress = it->second;
|
PVP_SURFACE surface = it->second;
|
||||||
MOS_SecureMemcpy(inlineData + arg.uOffsetInPayload, arg.uSize, &ui64GfxAddress, sizeof(ui64GfxAddress));
|
VP_PUBLIC_CHK_NULL_RETURN(surface);
|
||||||
VP_RENDER_NORMALMESSAGE("Setting Inline Data Statelss Surface KernelID %d, index %d , value %d, address 0x%x argKind %d", m_kernelId, arg.uIndex, *(uint32_t *)arg.pData, ui64GfxAddress, arg.eArgKind);
|
VP_PUBLIC_CHK_NULL_RETURN(surface->osSurface);
|
||||||
|
|
||||||
|
MHW_INDIRECT_STATE_RESOURCE_PARAMS params = {};
|
||||||
|
params.isWrite = arg.isOutput;
|
||||||
|
params.resource = &surface->osSurface->OsResource;
|
||||||
|
params.stateOffset = arg.uOffsetInPayload;
|
||||||
|
m_inlineResourceList.push_back(params);
|
||||||
|
VP_RENDER_NORMALMESSAGE("Setting Stateless Inline Data Statelss Surface KernelID %d, index %d , surfType %d, argKind %d", m_kernelId, arg.uIndex, *(uint32_t *)arg.pData, arg.eArgKind);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -577,6 +593,7 @@ MOS_STATUS VpRenderHdr3DLutOclKernel::SetKernelArgs(KERNEL_ARGS &kernelArgs, VP_
|
||||||
{
|
{
|
||||||
dstArg.eArgKind = srcArg.eArgKind;
|
dstArg.eArgKind = srcArg.eArgKind;
|
||||||
dstArg.pData = srcArg.pData;
|
dstArg.pData = srcArg.pData;
|
||||||
|
dstArg.isOutput = srcArg.isOutput;
|
||||||
srcArg.pData = nullptr;
|
srcArg.pData = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue