/* * Copyright (C) 2019-2021 Intel Corporation * * SPDX-License-Identifier: MIT * */ #include "opencl/test/unit_test/fixtures/media_kernel_fixture.h" #include "test.h" using namespace NEO; typedef MediaKernelFixture MediaKernelTest; GEN12LPTEST_F(MediaKernelTest, givenGen12LpCsrWhenEnqueueBlockedVmeKernelFirstTimeThenProgramPipelineSelectionAndMediaSampler) { typedef typename TGLLPFamily::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 expectedMask = pipelineSelectEnablePipelineSelectMaskBits | pipelineSelectMediaSamplerDopClockGateMaskBits; auto expectedPipelineSelection = PIPELINE_SELECT::PIPELINE_SELECTION_GPGPU; EXPECT_EQ(expectedMask, pCmd->getMaskBits()); EXPECT_EQ(expectedPipelineSelection, pCmd->getPipelineSelection()); EXPECT_FALSE(pCmd->getMediaSamplerDopClockGateEnable()); } GEN12LPTEST_F(MediaKernelTest, givenGen12LpCsrWhenEnqueueBlockedNonVmeKernelFirstTimeThenProgramPipelineSelectionAndMediaSampler) { typedef typename TGLLPFamily::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 expectedMask = pipelineSelectEnablePipelineSelectMaskBits | pipelineSelectMediaSamplerDopClockGateMaskBits; auto expectedPipelineSelection = PIPELINE_SELECT::PIPELINE_SELECTION_GPGPU; EXPECT_EQ(expectedMask, pCmd->getMaskBits()); EXPECT_EQ(expectedPipelineSelection, pCmd->getPipelineSelection()); EXPECT_TRUE(pCmd->getMediaSamplerDopClockGateEnable()); } GEN12LPTEST_F(MediaKernelTest, givenGen12LpCsrWhenEnqueueVmeKernelFirstTimeThenProgramPipelineSelectionAndMediaSampler) { typedef typename TGLLPFamily::PIPELINE_SELECT PIPELINE_SELECT; enqueueVmeKernel(); auto numCommands = getCommandsList().size(); EXPECT_EQ(1u, numCommands); auto pCmd = getCommand(); auto expectedMask = pipelineSelectEnablePipelineSelectMaskBits | pipelineSelectMediaSamplerDopClockGateMaskBits; auto expectedPipelineSelection = PIPELINE_SELECT::PIPELINE_SELECTION_GPGPU; EXPECT_EQ(expectedMask, pCmd->getMaskBits()); EXPECT_EQ(expectedPipelineSelection, pCmd->getPipelineSelection()); EXPECT_FALSE(pCmd->getMediaSamplerDopClockGateEnable()); } GEN12LPTEST_F(MediaKernelTest, givenGen12LpCsrWhenEnqueueNonVmeKernelFirstTimeThenProgramPipelineSelectionAndMediaSampler) { typedef typename TGLLPFamily::PIPELINE_SELECT PIPELINE_SELECT; enqueueRegularKernel(); auto numCommands = getCommandsList().size(); EXPECT_EQ(1u, numCommands); auto pCmd = getCommand(); auto expectedMask = pipelineSelectEnablePipelineSelectMaskBits | pipelineSelectMediaSamplerDopClockGateMaskBits; auto expectedPipelineSelection = PIPELINE_SELECT::PIPELINE_SELECTION_GPGPU; EXPECT_EQ(expectedMask, pCmd->getMaskBits()); EXPECT_EQ(expectedPipelineSelection, pCmd->getPipelineSelection()); EXPECT_TRUE(pCmd->getMediaSamplerDopClockGateEnable()); } GEN12LPTEST_F(MediaKernelTest, givenGen12LpCsrWhenEnqueueVmeKernelTwiceThenProgramPipelineSelectOnce) { typedef typename TGLLPFamily::PIPELINE_SELECT PIPELINE_SELECT; enqueueVmeKernel(); auto numCommands = getCommandsList().size(); EXPECT_EQ(1u, numCommands); } GEN12LPTEST_F(MediaKernelTest, givenGen12LpCsrWhenEnqueueNonVmeKernelTwiceThenProgramPipelineSelectOnce) { typedef typename TGLLPFamily::PIPELINE_SELECT PIPELINE_SELECT; enqueueVmeKernel(); auto numCommands = getCommandsList().size(); EXPECT_EQ(1u, numCommands); } GEN12LPTEST_F(MediaKernelTest, givenGen12LpCsrWhenEnqueueVmeKernelAfterNonVmeKernelThenProgramPipelineSelectionAndMediaSamplerTwice) { typedef typename TGLLPFamily::PIPELINE_SELECT PIPELINE_SELECT; enqueueRegularKernel(); enqueueVmeKernel(); auto commands = getCommandsList(); EXPECT_EQ(2u, commands.size()); auto pCmd = static_cast(commands.back()); auto expectedMask = pipelineSelectEnablePipelineSelectMaskBits | pipelineSelectMediaSamplerDopClockGateMaskBits; EXPECT_EQ(expectedMask, pCmd->getMaskBits()); EXPECT_FALSE(pCmd->getMediaSamplerDopClockGateEnable()); } GEN12LPTEST_F(MediaKernelTest, givenGen12LpCsrWhenEnqueueNonVmeKernelAfterVmeKernelThenProgramProgramPipelineSelectionAndMediaSamplerTwice) { typedef typename TGLLPFamily::PIPELINE_SELECT PIPELINE_SELECT; enqueueVmeKernel(); enqueueRegularKernel(); auto commands = getCommandsList(); EXPECT_EQ(2u, commands.size()); auto pCmd = static_cast(commands.back()); auto expectedMask = pipelineSelectEnablePipelineSelectMaskBits | pipelineSelectMediaSamplerDopClockGateMaskBits; EXPECT_EQ(expectedMask, pCmd->getMaskBits()); EXPECT_TRUE(pCmd->getMediaSamplerDopClockGateEnable()); } GEN12LPTEST_F(MediaKernelTest, givenGen12LpCsrWhenEnqueueVmeKernelThenVmeSubslicesConfigDoesntChangeToFalse) { auto csr = static_cast *>(&pDevice->getGpgpuCommandStreamReceiver()); csr->lastVmeSubslicesConfig = true; enqueueVmeKernel(); EXPECT_TRUE(csr->lastVmeSubslicesConfig); } GEN12LPTEST_F(MediaKernelTest, givenGen12LpCsrWhenEnqueueVmeKernelThenVmeSubslicesConfigDoesntChangeToTrue) { auto csr = static_cast *>(&pDevice->getGpgpuCommandStreamReceiver()); csr->lastVmeSubslicesConfig = false; enqueueVmeKernel(); EXPECT_FALSE(csr->lastVmeSubslicesConfig); } GEN12LPTEST_F(MediaKernelTest, GivenGen12lpWhenGettingCmdSizeForMediaSamplerThenZeroIsReturned) { auto csr = static_cast *>(&pDevice->getGpgpuCommandStreamReceiver()); csr->lastVmeSubslicesConfig = false; EXPECT_EQ(0u, csr->getCmdSizeForMediaSampler(false)); EXPECT_EQ(0u, csr->getCmdSizeForMediaSampler(true)); csr->lastVmeSubslicesConfig = true; EXPECT_EQ(0u, csr->getCmdSizeForMediaSampler(false)); EXPECT_EQ(0u, csr->getCmdSizeForMediaSampler(true)); }