@@ -222,7 +222,7 @@ MOS_STATUS VpRenderHdr3DLutOclKernel::Init(VpRenderKernel &kernel)
222
222
{
223
223
VP_FUNC_CALL ();
224
224
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 ());
226
226
227
227
m_kernelSize = kernel.GetKernelSize ();
228
228
@@ -298,7 +298,9 @@ MOS_STATUS VpRenderHdr3DLutOclKernel::GetCurbeState(void *&curbe, uint32_t &curb
298
298
VP_RENDER_NORMALMESSAGE (" KernelID %d, Curbe Size %d\n " , m_kernelId, curbeLength);
299
299
if (curbeLength == 0 )
300
300
{
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;
302
304
}
303
305
304
306
uint8_t *pCurbe = (uint8_t *)MOS_AllocAndZeroMemory (curbeLength);
@@ -324,23 +326,11 @@ MOS_STATUS VpRenderHdr3DLutOclKernel::GetCurbeState(void *&curbe, uint32_t &curb
324
326
{
325
327
if (arg.addressMode == AddressingModeStateless && arg.pData != nullptr )
326
328
{
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));
344
334
}
345
335
}
346
336
else if (arg.eArgKind == ARG_KIND_INLINE)
@@ -376,6 +366,40 @@ MOS_STATUS VpRenderHdr3DLutOclKernel::GetWalkerSetting(KERNEL_WALKER_PARAMS &wal
376
366
}
377
367
378
368
// 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
+
379
403
MOS_STATUS VpRenderHdr3DLutOclKernel::SetWalkerSetting (KERNEL_THREAD_SPACE &threadSpace, bool bSyncFlag, bool flushL1)
380
404
{
381
405
VP_FUNC_CALL ();
@@ -395,21 +419,8 @@ MOS_STATUS VpRenderHdr3DLutOclKernel::SetWalkerSetting(KERNEL_THREAD_SPACE &thre
395
419
m_walkerParam.pipeControlParams .bFlushRenderTargetCache = false ;
396
420
m_walkerParam.pipeControlParams .bInvalidateTextureCache = false ;
397
421
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));
413
424
m_walkerParam.inlineDataLength = sizeof (m_inlineData);
414
425
m_walkerParam.inlineData = m_inlineData;
415
426
0 commit comments