Skip to content

Commit 9741b50

Browse files
peiyigu-intelintel-mediadev
authored andcommitted
[VP] Fix Driver OCL 3DLut
fix 3dlut statelss surface unnecessary loop
1 parent e36fe34 commit 9741b50

File tree

6 files changed

+316
-316
lines changed

6 files changed

+316
-316
lines changed

media_softlet/agnostic/Xe_R/Xe2_HPG/vp/kernel/igvp3dlut_xe2.cpp

Lines changed: 265 additions & 269 deletions
Large diffs are not rendered by default.

media_softlet/agnostic/Xe_R/Xe2_HPG/vp/kernel/igvp3dlut_xe2.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2024, Intel Corporation
2+
* Copyright (c) 2025, Intel Corporation
33
*
44
* Permission is hereby granted, free of charge, to any person obtaining a
55
* copy of this software and associated documentation files (the

media_softlet/agnostic/common/vp/hal/features/kernel_args/igvp3dlut_args.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2024, Intel Corporation
2+
* Copyright (c) 2025, Intel Corporation
33
*
44
* Permission is hereby granted, free of charge, to any person obtaining a
55
* copy of this software and associated documentation files (the
@@ -36,8 +36,6 @@ enum ARGS_3DLUT_FILLLUTTABLE
3636
LUT_FILLLUTTABLE_LUTSIZE,
3737
LUT_FILLLUTTABLE_MULSIZE,
3838
LUT_FILLLUTTABLE_PRIVATE_BASE_STATELESS,
39-
LUT_FILLLUTTABLE_GLOBAL_ID_OFFSET,
40-
LUT_FILLLUTTABLE_LOCAL_SIZE,
4139
LUT_FILLLUTTABLE_MAX
4240
};
4341

media_softlet/agnostic/common/vp/hal/features/vp_hdr_filter.cpp

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ MOS_STATUS VpHdrFilter::CalculateEngineParams(
186186
VP_PUBLIC_CHK_VALUE_RETURN(krnArg.uSize, kernelArg.uSize);
187187
MOS_ZeroMemory(krnArg.pData, krnArg.uSize);
188188
}
189-
uint16_t mulSize = hdrParams.lutSize == 65 ? 128 : 64;
189+
uint32_t mulSize = hdrParams.lutSize == 65 ? 128 : 64;
190190
krnArg.eArgKind = kernelArg.eArgKind;
191191
switch (krnArg.uIndex)
192192
{
@@ -200,17 +200,11 @@ MOS_STATUS VpHdrFilter::CalculateEngineParams(
200200
break;
201201
case LUT_FILLLUTTABLE_LUTSIZE:
202202
VP_PUBLIC_CHK_NULL_RETURN(krnArg.pData);
203-
MOS_SecureMemcpy(krnArg.pData, kernelArg.uSize, &hdrParams.lutSize, sizeof(uint16_t));
203+
MOS_SecureMemcpy(krnArg.pData, kernelArg.uSize, &hdrParams.lutSize, sizeof(hdrParams.lutSize));
204204
break;
205205
case LUT_FILLLUTTABLE_MULSIZE:
206206
VP_PUBLIC_CHK_NULL_RETURN(krnArg.pData);
207-
MOS_SecureMemcpy(krnArg.pData, kernelArg.uSize, &mulSize, sizeof(uint16_t));
208-
break;
209-
case LUT_FILLLUTTABLE_LOCAL_SIZE:
210-
VP_PUBLIC_CHK_NULL_RETURN(krnArg.pData);
211-
static_cast<uint32_t *>(krnArg.pData)[0] = localWidth;
212-
static_cast<uint32_t *>(krnArg.pData)[1] = localHeight;
213-
static_cast<uint32_t *>(krnArg.pData)[2] = localDepth;
207+
MOS_SecureMemcpy(krnArg.pData, kernelArg.uSize, &mulSize, sizeof(mulSize));
214208
break;
215209
default:
216210
bInit = false;

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

Lines changed: 45 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
379403
MOS_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

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ class VpRenderHdr3DLutOclKernel : public VpRenderKernelObj
4040

4141
virtual MOS_STATUS Init(VpRenderKernel& kernel);
4242
virtual MOS_STATUS GetCurbeState(void *&curbe, uint32_t &curbeLength) override;
43+
virtual MOS_STATUS GetInlineData(uint8_t *inlineData);
4344

4445
virtual MOS_STATUS FreeCurbe(void*& curbe) override
4546
{

0 commit comments

Comments
 (0)