Skip to content

Commit 562eded

Browse files
Fix setting mediaSamplerRequired dispatch flag
Change-Id: Ie5d1100c34183ca970c99a5f46ce7866a7108ebc
1 parent f64f9c7 commit 562eded

File tree

2 files changed

+69
-0
lines changed

2 files changed

+69
-0
lines changed

runtime/helpers/task_information.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,7 @@ CompletionStamp &CommandComputeKernel::submit(uint32_t taskLevel, bool terminate
223223
dispatchFlags.lowPriority = commandQueue.getPriority() == QueuePriority::LOW;
224224
dispatchFlags.throttle = commandQueue.getThrottle();
225225
dispatchFlags.preemptionMode = preemptionMode;
226+
dispatchFlags.mediaSamplerRequired = (kernel != nullptr) ? kernel->isVmeKernel() : false;
226227

227228
DEBUG_BREAK_IF(taskLevel >= Event::eventNotReady);
228229

unit_tests/gen9/enqueue_media_kernel_gen9.cpp

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,74 @@
2727
using namespace OCLRT;
2828
typedef MediaKernelFixture<HelloWorldFixtureFactory> MediaKernelTest;
2929

30+
GEN9TEST_F(MediaKernelTest, givenGen9CsrWhenEnqueueBlockedVmeKernelFirstTimeThenProgramPipelineSelectionAndMediaSampler) {
31+
typedef typename SKLFamily::PIPELINE_SELECT PIPELINE_SELECT;
32+
33+
cl_uint workDim = 1;
34+
size_t globalWorkOffset[3] = {0, 0, 0};
35+
size_t globalWorkSize[3] = {1, 1, 1};
36+
37+
UserEvent userEvent(context);
38+
cl_event blockedEvent = &userEvent;
39+
40+
auto retVal = pCmdQ->enqueueKernel(
41+
pVmeKernel,
42+
workDim,
43+
globalWorkOffset,
44+
globalWorkSize,
45+
nullptr,
46+
1,
47+
&blockedEvent,
48+
nullptr);
49+
ASSERT_EQ(CL_SUCCESS, retVal);
50+
51+
userEvent.setStatus(CL_COMPLETE);
52+
53+
parseCommands<SKLFamily>(*pCmdQ);
54+
ASSERT_NE(cmdPipelineSelect, nullptr);
55+
auto *pCmd = genCmdCast<PIPELINE_SELECT *>(cmdPipelineSelect);
56+
57+
auto expectedMask = pipelineSelectEnablePipelineSelectMaskBits | pipelineSelectMediaSamplerDopClockGateMaskBits;
58+
auto expectedPipelineSelection = PIPELINE_SELECT::PIPELINE_SELECTION_GPGPU;
59+
EXPECT_EQ(expectedMask, pCmd->getMaskBits());
60+
EXPECT_EQ(expectedPipelineSelection, pCmd->getPipelineSelection());
61+
EXPECT_FALSE(pCmd->getMediaSamplerDopClockGateEnable());
62+
}
63+
64+
GEN9TEST_F(MediaKernelTest, givenGen9CsrWhenEnqueueBlockedNonVmeKernelFirstTimeThenProgramPipelineSelectionAndMediaSampler) {
65+
typedef typename SKLFamily::PIPELINE_SELECT PIPELINE_SELECT;
66+
67+
cl_uint workDim = 1;
68+
size_t globalWorkOffset[3] = {0, 0, 0};
69+
size_t globalWorkSize[3] = {1, 1, 1};
70+
71+
UserEvent userEvent(context);
72+
cl_event blockedEvent = &userEvent;
73+
74+
auto retVal = pCmdQ->enqueueKernel(
75+
pKernel,
76+
workDim,
77+
globalWorkOffset,
78+
globalWorkSize,
79+
nullptr,
80+
1,
81+
&blockedEvent,
82+
nullptr);
83+
ASSERT_EQ(CL_SUCCESS, retVal);
84+
85+
userEvent.setStatus(CL_COMPLETE);
86+
87+
parseCommands<SKLFamily>(*pCmdQ);
88+
ASSERT_NE(cmdPipelineSelect, nullptr);
89+
auto *pCmd = genCmdCast<PIPELINE_SELECT *>(cmdPipelineSelect);
90+
91+
auto expectedMask = pipelineSelectEnablePipelineSelectMaskBits | pipelineSelectMediaSamplerDopClockGateMaskBits;
92+
auto expectedPipelineSelection = PIPELINE_SELECT::PIPELINE_SELECTION_GPGPU;
93+
EXPECT_EQ(expectedMask, pCmd->getMaskBits());
94+
EXPECT_EQ(expectedPipelineSelection, pCmd->getPipelineSelection());
95+
EXPECT_TRUE(pCmd->getMediaSamplerDopClockGateEnable());
96+
}
97+
3098
GEN9TEST_F(MediaKernelTest, givenGen9CsrWhenEnqueueVmeKernelFirstTimeThenProgramPipelineSelectionAndMediaSampler) {
3199
typedef typename SKLFamily::PIPELINE_SELECT PIPELINE_SELECT;
32100
enqueueVmeKernel<SKLFamily>();

0 commit comments

Comments
 (0)