/* * Copyright (C) 2018-2020 Intel Corporation * * SPDX-License-Identifier: MIT * */ #include "helpers/pipeline_select_helper.h" #include "helpers/preamble.h" #include "opencl/test/unit_test/fixtures/media_kernel_fixture.h" #include "test.h" using namespace NEO; typedef MediaKernelFixture MediaKernelTest; auto expectedMask = pipelineSelectEnablePipelineSelectMaskBits | pipelineSelectMediaSamplerDopClockGateMaskBits | pipelineSelectMediaSamplerPowerClockGateMaskBits; GEN11TEST_F(MediaKernelTest, givenGen11CsrWhenEnqueueBlockedVmeKernelFirstTimeThenProgramPipelineSelectionAndMediaSampler) { typedef typename ICLFamily::PIPELINE_SELECT PIPELINE_SELECT; cl_uint workDim = 1; size_t globalWorkOffset[3] = {0, 0, 0}; size_t globalWorkSize[3] = {1, 1, 1}; UserEvent userEvent(context); cl_event blockedEvent = &userEvent; auto retVal = pCmdQ->enqueueKernel( pVmeKernel, workDim, globalWorkOffset, globalWorkSize, nullptr, 1, &blockedEvent, nullptr); ASSERT_EQ(CL_SUCCESS, retVal); userEvent.setStatus(CL_COMPLETE); parseCommands(*pCmdQ); ASSERT_NE(cmdPipelineSelect, nullptr); auto *pCmd = genCmdCast(cmdPipelineSelect); auto expectedPipelineSelection = PIPELINE_SELECT::PIPELINE_SELECTION_GPGPU; EXPECT_EQ(expectedMask, pCmd->getMaskBits()); EXPECT_EQ(expectedPipelineSelection, pCmd->getPipelineSelection()); EXPECT_FALSE(pCmd->getMediaSamplerDopClockGateEnable()); } GEN11TEST_F(MediaKernelTest, givenGen11CsrWhenEnqueueBlockedNonVmeKernelFirstTimeThenProgramPipelineSelectionAndMediaSampler) { typedef typename ICLFamily::PIPELINE_SELECT PIPELINE_SELECT; cl_uint workDim = 1; size_t globalWorkOffset[3] = {0, 0, 0}; size_t globalWorkSize[3] = {1, 1, 1}; UserEvent userEvent(context); cl_event blockedEvent = &userEvent; auto retVal = pCmdQ->enqueueKernel( pKernel, workDim, globalWorkOffset, globalWorkSize, nullptr, 1, &blockedEvent, nullptr); ASSERT_EQ(CL_SUCCESS, retVal); userEvent.setStatus(CL_COMPLETE); parseCommands(*pCmdQ); ASSERT_NE(cmdPipelineSelect, nullptr); auto *pCmd = genCmdCast(cmdPipelineSelect); auto expectedPipelineSelection = PIPELINE_SELECT::PIPELINE_SELECTION_GPGPU; EXPECT_EQ(expectedMask, pCmd->getMaskBits()); EXPECT_EQ(expectedPipelineSelection, pCmd->getPipelineSelection()); EXPECT_TRUE(pCmd->getMediaSamplerDopClockGateEnable()); } GEN11TEST_F(MediaKernelTest, givenGen11CsrWhenEnqueueVmeKernelFirstTimeThenProgramPipelineSelectionAndMediaSampler) { typedef typename ICLFamily::PIPELINE_SELECT PIPELINE_SELECT; enqueueVmeKernel(); auto numCommands = getCommandsList().size(); EXPECT_EQ(1u, numCommands); auto pCmd = getCommand(); auto expectedPipelineSelection = PIPELINE_SELECT::PIPELINE_SELECTION_GPGPU; EXPECT_EQ(expectedMask, pCmd->getMaskBits()); EXPECT_EQ(expectedPipelineSelection, pCmd->getPipelineSelection()); EXPECT_FALSE(pCmd->getMediaSamplerDopClockGateEnable()); EXPECT_EQ(1u, pCmd->getMediaSamplerPowerClockGateDisable()); } GEN11TEST_F(MediaKernelTest, givenGen11CsrWhenEnqueueNonVmeKernelFirstTimeThenProgramPipelineSelectionAndMediaSampler) { typedef typename ICLFamily::PIPELINE_SELECT PIPELINE_SELECT; enqueueRegularKernel(); auto numCommands = getCommandsList().size(); EXPECT_EQ(1u, numCommands); auto pCmd = getCommand(); auto expectedPipelineSelection = PIPELINE_SELECT::PIPELINE_SELECTION_GPGPU; EXPECT_EQ(expectedMask, pCmd->getMaskBits()); EXPECT_EQ(expectedPipelineSelection, pCmd->getPipelineSelection()); EXPECT_TRUE(pCmd->getMediaSamplerDopClockGateEnable()); EXPECT_EQ(0u, pCmd->getMediaSamplerPowerClockGateDisable()); } GEN11TEST_F(MediaKernelTest, givenGen11CsrWhenEnqueueVmeKernelTwiceThenProgramPipelineSelectOnce) { typedef typename ICLFamily::PIPELINE_SELECT PIPELINE_SELECT; enqueueVmeKernel(); auto numCommands = getCommandsList().size(); EXPECT_EQ(1u, numCommands); } GEN11TEST_F(MediaKernelTest, givenGen11CsrWhenEnqueueNonVmeKernelTwiceThenProgramPipelineSelectOnce) { typedef typename ICLFamily::PIPELINE_SELECT PIPELINE_SELECT; enqueueVmeKernel(); auto numCommands = getCommandsList().size(); EXPECT_EQ(1u, numCommands); } GEN11TEST_F(MediaKernelTest, givenGen11CsrWhenEnqueueVmeKernelAfterNonVmeKernelThenProgramPipelineSelectionAndMediaSamplerTwice) { typedef typename ICLFamily::PIPELINE_SELECT PIPELINE_SELECT; enqueueRegularKernel(); enqueueVmeKernel(); auto commands = getCommandsList(); EXPECT_EQ(2u, commands.size()); auto pCmd = static_cast(commands.back()); EXPECT_EQ(expectedMask, pCmd->getMaskBits()); EXPECT_FALSE(pCmd->getMediaSamplerDopClockGateEnable()); EXPECT_EQ(1u, pCmd->getMediaSamplerPowerClockGateDisable()); } GEN11TEST_F(MediaKernelTest, givenGen11CsrWhenEnqueueNonVmeKernelAfterVmeKernelThenProgramProgramPipelineSelectionAndMediaSamplerTwice) { typedef typename ICLFamily::PIPELINE_SELECT PIPELINE_SELECT; enqueueVmeKernel(); enqueueRegularKernel(); auto commands = getCommandsList(); EXPECT_EQ(2u, commands.size()); auto pCmd = static_cast(commands.back()); EXPECT_EQ(expectedMask, pCmd->getMaskBits()); EXPECT_TRUE(pCmd->getMediaSamplerDopClockGateEnable()); EXPECT_EQ(0u, pCmd->getMediaSamplerPowerClockGateDisable()); }