@@ -222,7 +222,7 @@ MOS_STATUS VpRenderHdr3DLutOclKernel::Init(VpRenderKernel &kernel)
222222{
223223 VP_FUNC_CALL ();
224224
225- VP_RENDER_NORMALMESSAGE (" Initializing SR krn %s" , kernel.GetKernelName ().c_str ());
225+ VP_RENDER_NORMALMESSAGE (" Initializing OCL 3DLUT krn %s" , kernel.GetKernelName ().c_str ());
226226
227227 m_kernelSize = kernel.GetKernelSize ();
228228
@@ -298,7 +298,9 @@ MOS_STATUS VpRenderHdr3DLutOclKernel::GetCurbeState(void *&curbe, uint32_t &curb
298298 VP_RENDER_NORMALMESSAGE (" KernelID %d, Curbe Size %d\n " , m_kernelId, curbeLength);
299299 if (curbeLength == 0 )
300300 {
301- return MOS_STATUS_INVALID_PARAMETER;
301+ VP_RENDER_NORMALMESSAGE (" Skip Allocate Curbe for its Size is 0" );
302+ curbe = nullptr ;
303+ return MOS_STATUS_SUCCESS;
302304 }
303305
304306 uint8_t *pCurbe = (uint8_t *)MOS_AllocAndZeroMemory (curbeLength);
@@ -324,23 +326,11 @@ MOS_STATUS VpRenderHdr3DLutOclKernel::GetCurbeState(void *&curbe, uint32_t &curb
324326 {
325327 if (arg.addressMode == AddressingModeStateless && arg.pData != nullptr )
326328 {
327- for (uint32_t idx = 0 ; idx < arg.uSize / sizeof (SurfaceType); idx++)
328- {
329- uint32_t *pSurfaceindex = (uint32_t *)(arg.pData ) + idx;
330- SurfaceType surf = (SurfaceType)*pSurfaceindex;
331-
332- if (surf != SurfaceTypeInvalid)
333- {
334- auto it = m_statelessArray.find (surf);
335- uint64_t ui64GfxAddress = (m_statelessArray.end () != it) ? it->second : 0xFFFF ;
336- *((uint64_t *)(pCurbe + arg.uOffsetInPayload ) + idx) = ui64GfxAddress;
337- break ;
338- }
339- else
340- {
341- *((uint64_t *)(pCurbe + arg.uOffsetInPayload ) + idx) = 0xFFFF ;
342- }
343- }
329+ SurfaceType surfType = *((SurfaceType *)arg.pData );
330+ auto it = m_statelessArray.find (surfType);
331+ VP_PUBLIC_CHK_NOT_FOUND_RETURN (it, &m_statelessArray);
332+ uint64_t ui64GfxAddress = it->second ;
333+ MOS_SecureMemcpy (pCurbe + arg.uOffsetInPayload , arg.uSize , &ui64GfxAddress, sizeof (ui64GfxAddress));
344334 }
345335 }
346336 else if (arg.eArgKind == ARG_KIND_INLINE)
@@ -376,6 +366,40 @@ MOS_STATUS VpRenderHdr3DLutOclKernel::GetWalkerSetting(KERNEL_WALKER_PARAMS &wal
376366}
377367
378368// Only for Adv kernels.
369+ MOS_STATUS VpRenderHdr3DLutOclKernel::GetInlineData (uint8_t *inlineData)
370+ {
371+ for (auto &arg : m_kernelArgs)
372+ {
373+ if (arg.eArgKind == ARG_KIND_INLINE)
374+ {
375+ if (arg.pData != nullptr )
376+ {
377+ if (arg.addressMode == AddressingModeStateless)
378+ {
379+ SurfaceType surfType = *((SurfaceType *)arg.pData );
380+ auto it = m_statelessArray.find (surfType);
381+ VP_PUBLIC_CHK_NOT_FOUND_RETURN (it, &m_statelessArray);
382+ uint64_t ui64GfxAddress = it->second ;
383+ MOS_SecureMemcpy (inlineData + arg.uOffsetInPayload , arg.uSize , &ui64GfxAddress, sizeof (ui64GfxAddress));
384+ 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 );
385+ }
386+ else
387+ {
388+ MOS_SecureMemcpy (inlineData + arg.uOffsetInPayload , arg.uSize , arg.pData , arg.uSize );
389+ VP_RENDER_NORMALMESSAGE (" Setting Inline Data KernelID %d, index %d , value %d, argKind %d" , m_kernelId, arg.uIndex , *(uint32_t *)arg.pData , arg.eArgKind );
390+ }
391+
392+ }
393+ else
394+ {
395+ VP_RENDER_NORMALMESSAGE (" KernelID %d, index %d, argKind %d is empty" , m_kernelId, arg.uIndex , arg.eArgKind );
396+ }
397+ }
398+ }
399+
400+ return MOS_STATUS_SUCCESS;
401+ }
402+
379403MOS_STATUS VpRenderHdr3DLutOclKernel::SetWalkerSetting (KERNEL_THREAD_SPACE &threadSpace, bool bSyncFlag, bool flushL1)
380404{
381405 VP_FUNC_CALL ();
@@ -395,21 +419,8 @@ MOS_STATUS VpRenderHdr3DLutOclKernel::SetWalkerSetting(KERNEL_THREAD_SPACE &thre
395419 m_walkerParam.pipeControlParams .bFlushRenderTargetCache = false ;
396420 m_walkerParam.pipeControlParams .bInvalidateTextureCache = false ;
397421
398- for (auto &arg : m_kernelArgs)
399- {
400- if (arg.eArgKind == ARG_KIND_INLINE)
401- {
402- if (arg.pData != nullptr )
403- {
404- MOS_SecureMemcpy (m_inlineData + arg.uOffsetInPayload , arg.uSize , arg.pData , arg.uSize );
405- VP_RENDER_NORMALMESSAGE (" Setting Inline Data KernelID %d, index %d , value %d, argKind %d" , m_kernelId, arg.uIndex , *(uint32_t *)arg.pData , arg.eArgKind );
406- }
407- else
408- {
409- VP_RENDER_NORMALMESSAGE (" KernelID %d, index %d, argKind %d is empty" , m_kernelId, arg.uIndex , arg.eArgKind );
410- }
411- }
412- }
422+ MOS_ZeroMemory (m_inlineData, sizeof (m_inlineData));
423+ VP_PUBLIC_CHK_STATUS_RETURN (GetInlineData (m_inlineData));
413424 m_walkerParam.inlineDataLength = sizeof (m_inlineData);
414425 m_walkerParam.inlineData = m_inlineData;
415426
0 commit comments