mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-24 12:23:05 +08:00
Handle PATCH_TOKEN_MEDIA_VFE_STATE_SLOT1 patch token
Related-To: NEO-3190 Change-Id: I3e357f7e21a58e5bd2aa8cb8005b720c690664f2 Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
committed by
sys_ocldev
parent
9f03864f37
commit
223b998d92
@@ -206,6 +206,10 @@ class Kernel : public BaseObject<_cl_kernel> {
|
|||||||
return kernelInfo.patchInfo.mediavfestate ? kernelInfo.patchInfo.mediavfestate->PerThreadScratchSpace : 0;
|
return kernelInfo.patchInfo.mediavfestate ? kernelInfo.patchInfo.mediavfestate->PerThreadScratchSpace : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t getPrivateScratchSize() {
|
||||||
|
return kernelInfo.patchInfo.mediaVfeStateSlot1 ? kernelInfo.patchInfo.mediaVfeStateSlot1->PerThreadScratchSpace : 0;
|
||||||
|
}
|
||||||
|
|
||||||
void createReflectionSurface();
|
void createReflectionSurface();
|
||||||
template <bool mockable = false>
|
template <bool mockable = false>
|
||||||
void patchReflectionSurface(DeviceQueue *devQueue, PrintfHandler *printfHandler);
|
void patchReflectionSurface(DeviceQueue *devQueue, PrintfHandler *printfHandler);
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ struct PatchInfo {
|
|||||||
const SPatchMediaInterfaceDescriptorLoad *interfaceDescriptorDataLoad = nullptr;
|
const SPatchMediaInterfaceDescriptorLoad *interfaceDescriptorDataLoad = nullptr;
|
||||||
const SPatchAllocateLocalSurface *localsurface = nullptr;
|
const SPatchAllocateLocalSurface *localsurface = nullptr;
|
||||||
const SPatchMediaVFEState *mediavfestate = nullptr;
|
const SPatchMediaVFEState *mediavfestate = nullptr;
|
||||||
|
const SPatchMediaVFEState *mediaVfeStateSlot1 = nullptr;
|
||||||
const SPatchInterfaceDescriptorData *interfaceDescriptorData = nullptr;
|
const SPatchInterfaceDescriptorData *interfaceDescriptorData = nullptr;
|
||||||
const SPatchSamplerStateArray *samplerStateArray = nullptr;
|
const SPatchSamplerStateArray *samplerStateArray = nullptr;
|
||||||
const SPatchBindingTableState *bindingTableState = nullptr;
|
const SPatchBindingTableState *bindingTableState = nullptr;
|
||||||
|
|||||||
@@ -206,6 +206,16 @@ cl_int Program::parsePatchList(KernelInfo &kernelInfo) {
|
|||||||
"\n .PerThreadScratchSpace", kernelInfo.patchInfo.mediavfestate->PerThreadScratchSpace);
|
"\n .PerThreadScratchSpace", kernelInfo.patchInfo.mediavfestate->PerThreadScratchSpace);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PATCH_TOKEN_MEDIA_VFE_STATE_SLOT1:
|
||||||
|
kernelInfo.patchInfo.mediaVfeStateSlot1 =
|
||||||
|
reinterpret_cast<const SPatchMediaVFEState *>(pPatch);
|
||||||
|
DBG_LOG(LogPatchTokens,
|
||||||
|
"\n.MEDIA_VFE_STATE_SLOT1", pPatch->Token,
|
||||||
|
"\n .Size", pPatch->Size,
|
||||||
|
"\n .ScratchSpaceOffset", kernelInfo.patchInfo.mediaVfeStateSlot1->ScratchSpaceOffset,
|
||||||
|
"\n .PerThreadScratchSpace", kernelInfo.patchInfo.mediaVfeStateSlot1->PerThreadScratchSpace);
|
||||||
|
break;
|
||||||
|
|
||||||
case PATCH_TOKEN_DATA_PARAMETER_BUFFER:
|
case PATCH_TOKEN_DATA_PARAMETER_BUFFER:
|
||||||
DBG_LOG(LogPatchTokens,
|
DBG_LOG(LogPatchTokens,
|
||||||
"\n.DATA_PARAMETER_BUFFER", pPatch->Token,
|
"\n.DATA_PARAMETER_BUFFER", pPatch->Token,
|
||||||
|
|||||||
@@ -394,6 +394,7 @@ TEST(PatchInfo, Constructor) {
|
|||||||
EXPECT_EQ(nullptr, patchInfo.interfaceDescriptorDataLoad);
|
EXPECT_EQ(nullptr, patchInfo.interfaceDescriptorDataLoad);
|
||||||
EXPECT_EQ(nullptr, patchInfo.localsurface);
|
EXPECT_EQ(nullptr, patchInfo.localsurface);
|
||||||
EXPECT_EQ(nullptr, patchInfo.mediavfestate);
|
EXPECT_EQ(nullptr, patchInfo.mediavfestate);
|
||||||
|
EXPECT_EQ(nullptr, patchInfo.mediaVfeStateSlot1);
|
||||||
EXPECT_EQ(nullptr, patchInfo.interfaceDescriptorData);
|
EXPECT_EQ(nullptr, patchInfo.interfaceDescriptorData);
|
||||||
EXPECT_EQ(nullptr, patchInfo.samplerStateArray);
|
EXPECT_EQ(nullptr, patchInfo.samplerStateArray);
|
||||||
EXPECT_EQ(nullptr, patchInfo.bindingTableState);
|
EXPECT_EQ(nullptr, patchInfo.bindingTableState);
|
||||||
@@ -2571,3 +2572,26 @@ TEST(KernelTest, givenNotAllArgumentsAreBuffersButAllBuffersAreStatefulWhenIniti
|
|||||||
kernel.mockKernel->initialize();
|
kernel.mockKernel->initialize();
|
||||||
EXPECT_TRUE(kernel.mockKernel->allBufferArgsStateful);
|
EXPECT_TRUE(kernel.mockKernel->allBufferArgsStateful);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(KernelTest, givenKernelRequiringPrivateScratchSpaceWhenGettingSizeForPrivateScratchSpaceThenCorrectSizeIsReturned) {
|
||||||
|
std::unique_ptr<MockDevice> device(MockDevice::createWithNewExecutionEnvironment<MockDevice>(platformDevices[0]));
|
||||||
|
|
||||||
|
MockKernelWithInternals mockKernel(*device);
|
||||||
|
SPatchMediaVFEState mediaVFEstate;
|
||||||
|
SPatchMediaVFEState mediaVFEstateSlot1;
|
||||||
|
mediaVFEstateSlot1.PerThreadScratchSpace = 1024u;
|
||||||
|
mediaVFEstate.PerThreadScratchSpace = 512u;
|
||||||
|
mockKernel.kernelInfo.patchInfo.mediavfestate = &mediaVFEstate;
|
||||||
|
mockKernel.kernelInfo.patchInfo.mediaVfeStateSlot1 = &mediaVFEstateSlot1;
|
||||||
|
|
||||||
|
EXPECT_EQ(1024u, mockKernel.mockKernel->getPrivateScratchSize());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(KernelTest, givenKernelWithoutMediaVfeStateSlot1WhenGettingSizeForPrivateScratchSpaceThenCorrectSizeIsReturned) {
|
||||||
|
std::unique_ptr<MockDevice> device(MockDevice::createWithNewExecutionEnvironment<MockDevice>(platformDevices[0]));
|
||||||
|
|
||||||
|
MockKernelWithInternals mockKernel(*device);
|
||||||
|
mockKernel.kernelInfo.patchInfo.mediaVfeStateSlot1 = nullptr;
|
||||||
|
|
||||||
|
EXPECT_EQ(0u, mockKernel.mockKernel->getPrivateScratchSize());
|
||||||
|
}
|
||||||
|
|||||||
@@ -263,6 +263,7 @@ class MockKernelWithInternals {
|
|||||||
memset(&executionEnvironmentBlock, 0, sizeof(SPatchExecutionEnvironment));
|
memset(&executionEnvironmentBlock, 0, sizeof(SPatchExecutionEnvironment));
|
||||||
memset(&dataParameterStream, 0, sizeof(SPatchDataParameterStream));
|
memset(&dataParameterStream, 0, sizeof(SPatchDataParameterStream));
|
||||||
memset(&mediaVfeState, 0, sizeof(SPatchMediaVFEState));
|
memset(&mediaVfeState, 0, sizeof(SPatchMediaVFEState));
|
||||||
|
memset(&mediaVfeStateSlot1, 0, sizeof(SPatchMediaVFEState));
|
||||||
executionEnvironment.NumGRFRequired = GrfConfig::DefaultGrfNumber;
|
executionEnvironment.NumGRFRequired = GrfConfig::DefaultGrfNumber;
|
||||||
executionEnvironmentBlock.NumGRFRequired = GrfConfig::DefaultGrfNumber;
|
executionEnvironmentBlock.NumGRFRequired = GrfConfig::DefaultGrfNumber;
|
||||||
kernelHeader.SurfaceStateHeapSize = sizeof(sshLocal);
|
kernelHeader.SurfaceStateHeapSize = sizeof(sshLocal);
|
||||||
@@ -277,6 +278,7 @@ class MockKernelWithInternals {
|
|||||||
kernelInfo.patchInfo.executionEnvironment = &executionEnvironment;
|
kernelInfo.patchInfo.executionEnvironment = &executionEnvironment;
|
||||||
kernelInfo.patchInfo.threadPayload = &threadPayload;
|
kernelInfo.patchInfo.threadPayload = &threadPayload;
|
||||||
kernelInfo.patchInfo.mediavfestate = &mediaVfeState;
|
kernelInfo.patchInfo.mediavfestate = &mediaVfeState;
|
||||||
|
kernelInfo.patchInfo.mediaVfeStateSlot1 = &mediaVfeStateSlot1;
|
||||||
|
|
||||||
if (context == nullptr) {
|
if (context == nullptr) {
|
||||||
mockContext = new MockContext;
|
mockContext = new MockContext;
|
||||||
@@ -320,6 +322,7 @@ class MockKernelWithInternals {
|
|||||||
SKernelBinaryHeaderCommon kernelHeader = {};
|
SKernelBinaryHeaderCommon kernelHeader = {};
|
||||||
SPatchThreadPayload threadPayload = {};
|
SPatchThreadPayload threadPayload = {};
|
||||||
SPatchMediaVFEState mediaVfeState = {};
|
SPatchMediaVFEState mediaVfeState = {};
|
||||||
|
SPatchMediaVFEState mediaVfeStateSlot1 = {};
|
||||||
SPatchDataParameterStream dataParameterStream = {};
|
SPatchDataParameterStream dataParameterStream = {};
|
||||||
SPatchExecutionEnvironment executionEnvironment = {};
|
SPatchExecutionEnvironment executionEnvironment = {};
|
||||||
SPatchExecutionEnvironment executionEnvironmentBlock = {};
|
SPatchExecutionEnvironment executionEnvironmentBlock = {};
|
||||||
|
|||||||
@@ -144,6 +144,23 @@ TEST_F(KernelDataTest, MediaVFEState) {
|
|||||||
EXPECT_EQ_VAL(MediaVFEState.ScratchSpaceOffset, pKernelInfo->patchInfo.mediavfestate->ScratchSpaceOffset);
|
EXPECT_EQ_VAL(MediaVFEState.ScratchSpaceOffset, pKernelInfo->patchInfo.mediavfestate->ScratchSpaceOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(KernelDataTest, WhenMediaVFEStateSlot1TokenIsParsedThenCorrectValuesAreSet) {
|
||||||
|
iOpenCL::SPatchMediaVFEState MediaVFEState;
|
||||||
|
MediaVFEState.Token = PATCH_TOKEN_MEDIA_VFE_STATE_SLOT1;
|
||||||
|
MediaVFEState.Size = sizeof(SPatchMediaVFEState);
|
||||||
|
MediaVFEState.PerThreadScratchSpace = 1;
|
||||||
|
MediaVFEState.ScratchSpaceOffset = 0;
|
||||||
|
|
||||||
|
pPatchList = &MediaVFEState;
|
||||||
|
patchListSize = MediaVFEState.Size;
|
||||||
|
|
||||||
|
buildAndDecode();
|
||||||
|
|
||||||
|
EXPECT_EQ_CONST(PATCH_TOKEN_MEDIA_VFE_STATE_SLOT1, pKernelInfo->patchInfo.mediaVfeStateSlot1->Token);
|
||||||
|
EXPECT_EQ_VAL(MediaVFEState.PerThreadScratchSpace, pKernelInfo->patchInfo.mediaVfeStateSlot1->PerThreadScratchSpace);
|
||||||
|
EXPECT_EQ_VAL(MediaVFEState.ScratchSpaceOffset, pKernelInfo->patchInfo.mediaVfeStateSlot1->ScratchSpaceOffset);
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(KernelDataTest, MediaIDData) {
|
TEST_F(KernelDataTest, MediaIDData) {
|
||||||
iOpenCL::SPatchInterfaceDescriptorData idData;
|
iOpenCL::SPatchInterfaceDescriptorData idData;
|
||||||
idData.Token = PATCH_TOKEN_INTERFACE_DESCRIPTOR_DATA;
|
idData.Token = PATCH_TOKEN_INTERFACE_DESCRIPTOR_DATA;
|
||||||
|
|||||||
Reference in New Issue
Block a user