1 /* 2 * Copyright (C) 2018-2021 Intel Corporation 3 * 4 * SPDX-License-Identifier: MIT 5 * 6 */ 7 8 #pragma once 9 #include "shared/test/common/helpers/default_hw_info.h" 10 11 #include "opencl/test/unit_test/command_queue/enqueue_fixture.h" 12 #include "opencl/test/unit_test/fixtures/hello_world_fixture.h" 13 #include "opencl/test/unit_test/helpers/cl_hw_parse.h" 14 15 namespace NEO { 16 17 template <typename FactoryType> 18 struct MediaKernelFixture : public HelloWorldFixture<FactoryType>, 19 public ClHardwareParse, 20 public ::testing::Test { 21 typedef HelloWorldFixture<FactoryType> Parent; 22 23 using Parent::pCmdBuffer; 24 using Parent::pCmdQ; 25 using Parent::pContext; 26 using Parent::pCS; 27 using Parent::pDevice; 28 using Parent::pKernel; 29 using Parent::pProgram; 30 using Parent::retVal; 31 MediaKernelFixtureMediaKernelFixture32 MediaKernelFixture() {} 33 34 template <typename FamilyType> enqueueRegularKernelMediaKernelFixture35 void enqueueRegularKernel() { 36 auto retVal = EnqueueKernelHelper<>::enqueueKernel( 37 pCmdQ, 38 pKernel); 39 ASSERT_EQ(CL_SUCCESS, retVal); 40 41 parseCommands<FamilyType>(*pCmdQ); 42 43 itorWalker1 = find<typename FamilyType::WALKER_TYPE *>(cmdList.begin(), cmdList.end()); 44 ASSERT_NE(cmdList.end(), itorWalker1); 45 } 46 47 template <typename FamilyType> enqueueVmeKernelMediaKernelFixture48 void enqueueVmeKernel() { 49 auto retVal = EnqueueKernelHelper<>::enqueueKernel( 50 pCmdQ, 51 pVmeKernel); 52 ASSERT_EQ(CL_SUCCESS, retVal); 53 54 parseCommands<FamilyType>(*pCmdQ); 55 56 itorWalker1 = find<typename FamilyType::WALKER_TYPE *>(cmdList.begin(), cmdList.end()); 57 ASSERT_NE(cmdList.end(), itorWalker1); 58 } 59 SetUpMediaKernelFixture60 void SetUp() override { 61 skipVmeTest = !defaultHwInfo->capabilityTable.supportsVme; 62 if (skipVmeTest) { 63 GTEST_SKIP(); 64 } 65 Parent::kernelFilename = "vme_kernels"; 66 Parent::kernelName = "non_vme_kernel"; 67 68 Parent::SetUp(); 69 ClHardwareParse::SetUp(); 70 71 ASSERT_NE(nullptr, pKernel); 72 ASSERT_EQ(false, pKernel->isVmeKernel()); 73 74 cl_int retVal; 75 76 // create the VME kernel 77 pMultiDeviceVmeKernel = MultiDeviceKernel::create<MockKernel>( 78 pProgram, 79 pProgram->getKernelInfosForKernel("device_side_block_motion_estimate_intel"), 80 &retVal); 81 82 pVmeKernel = pMultiDeviceVmeKernel->getKernel(pDevice->getRootDeviceIndex()); 83 ASSERT_NE(nullptr, pVmeKernel); 84 ASSERT_EQ(true, pVmeKernel->isVmeKernel()); 85 } 86 TearDownMediaKernelFixture87 void TearDown() override { 88 if (skipVmeTest) { 89 return; 90 } 91 pMultiDeviceVmeKernel->release(); 92 93 ClHardwareParse::TearDown(); 94 Parent::TearDown(); 95 } 96 97 GenCmdList::iterator itorWalker1; 98 GenCmdList::iterator itorWalker2; 99 100 MultiDeviceKernel *pMultiDeviceVmeKernel = nullptr; 101 Kernel *pVmeKernel = nullptr; 102 bool skipVmeTest = false; 103 }; 104 } // namespace NEO 105