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:
Mateusz Jablonski
2019-06-27 14:06:19 +02:00
committed by sys_ocldev
parent 9f03864f37
commit 223b998d92
6 changed files with 59 additions and 0 deletions

View File

@@ -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);

View File

@@ -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;

View File

@@ -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,

View File

@@ -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());
}

View File

@@ -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 = {};

View File

@@ -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;