mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-24 20:39:56 +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;
|
||||
}
|
||||
|
||||
uint32_t getPrivateScratchSize() {
|
||||
return kernelInfo.patchInfo.mediaVfeStateSlot1 ? kernelInfo.patchInfo.mediaVfeStateSlot1->PerThreadScratchSpace : 0;
|
||||
}
|
||||
|
||||
void createReflectionSurface();
|
||||
template <bool mockable = false>
|
||||
void patchReflectionSurface(DeviceQueue *devQueue, PrintfHandler *printfHandler);
|
||||
|
||||
@@ -50,6 +50,7 @@ struct PatchInfo {
|
||||
const SPatchMediaInterfaceDescriptorLoad *interfaceDescriptorDataLoad = nullptr;
|
||||
const SPatchAllocateLocalSurface *localsurface = nullptr;
|
||||
const SPatchMediaVFEState *mediavfestate = nullptr;
|
||||
const SPatchMediaVFEState *mediaVfeStateSlot1 = nullptr;
|
||||
const SPatchInterfaceDescriptorData *interfaceDescriptorData = nullptr;
|
||||
const SPatchSamplerStateArray *samplerStateArray = nullptr;
|
||||
const SPatchBindingTableState *bindingTableState = nullptr;
|
||||
|
||||
@@ -206,6 +206,16 @@ cl_int Program::parsePatchList(KernelInfo &kernelInfo) {
|
||||
"\n .PerThreadScratchSpace", kernelInfo.patchInfo.mediavfestate->PerThreadScratchSpace);
|
||||
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:
|
||||
DBG_LOG(LogPatchTokens,
|
||||
"\n.DATA_PARAMETER_BUFFER", pPatch->Token,
|
||||
|
||||
@@ -394,6 +394,7 @@ TEST(PatchInfo, Constructor) {
|
||||
EXPECT_EQ(nullptr, patchInfo.interfaceDescriptorDataLoad);
|
||||
EXPECT_EQ(nullptr, patchInfo.localsurface);
|
||||
EXPECT_EQ(nullptr, patchInfo.mediavfestate);
|
||||
EXPECT_EQ(nullptr, patchInfo.mediaVfeStateSlot1);
|
||||
EXPECT_EQ(nullptr, patchInfo.interfaceDescriptorData);
|
||||
EXPECT_EQ(nullptr, patchInfo.samplerStateArray);
|
||||
EXPECT_EQ(nullptr, patchInfo.bindingTableState);
|
||||
@@ -2571,3 +2572,26 @@ TEST(KernelTest, givenNotAllArgumentsAreBuffersButAllBuffersAreStatefulWhenIniti
|
||||
kernel.mockKernel->initialize();
|
||||
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(&dataParameterStream, 0, sizeof(SPatchDataParameterStream));
|
||||
memset(&mediaVfeState, 0, sizeof(SPatchMediaVFEState));
|
||||
memset(&mediaVfeStateSlot1, 0, sizeof(SPatchMediaVFEState));
|
||||
executionEnvironment.NumGRFRequired = GrfConfig::DefaultGrfNumber;
|
||||
executionEnvironmentBlock.NumGRFRequired = GrfConfig::DefaultGrfNumber;
|
||||
kernelHeader.SurfaceStateHeapSize = sizeof(sshLocal);
|
||||
@@ -277,6 +278,7 @@ class MockKernelWithInternals {
|
||||
kernelInfo.patchInfo.executionEnvironment = &executionEnvironment;
|
||||
kernelInfo.patchInfo.threadPayload = &threadPayload;
|
||||
kernelInfo.patchInfo.mediavfestate = &mediaVfeState;
|
||||
kernelInfo.patchInfo.mediaVfeStateSlot1 = &mediaVfeStateSlot1;
|
||||
|
||||
if (context == nullptr) {
|
||||
mockContext = new MockContext;
|
||||
@@ -320,6 +322,7 @@ class MockKernelWithInternals {
|
||||
SKernelBinaryHeaderCommon kernelHeader = {};
|
||||
SPatchThreadPayload threadPayload = {};
|
||||
SPatchMediaVFEState mediaVfeState = {};
|
||||
SPatchMediaVFEState mediaVfeStateSlot1 = {};
|
||||
SPatchDataParameterStream dataParameterStream = {};
|
||||
SPatchExecutionEnvironment executionEnvironment = {};
|
||||
SPatchExecutionEnvironment executionEnvironmentBlock = {};
|
||||
|
||||
@@ -144,6 +144,23 @@ TEST_F(KernelDataTest, MediaVFEState) {
|
||||
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) {
|
||||
iOpenCL::SPatchInterfaceDescriptorData idData;
|
||||
idData.Token = PATCH_TOKEN_INTERFACE_DESCRIPTOR_DATA;
|
||||
|
||||
Reference in New Issue
Block a user