@@ -1025,6 +1025,132 @@ HWTEST_TEMPLATED_F(BlitEnqueueFlushTests, givenDebugFlagSetWhenCheckingBcsCacheF
10251025 EXPECT_TRUE (mockCommandQueue->isCacheFlushForBcsRequired ());
10261026}
10271027
1028+ using BlitEnqueueTaskCountTests = BlitEnqueueTests<1 >;
1029+
1030+ HWTEST_TEMPLATED_F (BlitEnqueueTaskCountTests, whenWaitUntilCompletionCalledThenWaitForSpecificBcsTaskCount) {
1031+ uint32_t gpgpuTaskCount = 123 ;
1032+ uint32_t bcsTaskCount = 123 ;
1033+
1034+ commandQueue->waitUntilComplete (gpgpuTaskCount, bcsTaskCount, 0 , false );
1035+
1036+ EXPECT_EQ (gpgpuTaskCount, static_cast <UltCommandStreamReceiver<FamilyType> *>(gpgpuCsr)->latestWaitForCompletionWithTimeoutTaskCount .load ());
1037+ EXPECT_EQ (bcsTaskCount, static_cast <UltCommandStreamReceiver<FamilyType> *>(bcsCsr)->latestWaitForCompletionWithTimeoutTaskCount .load ());
1038+ }
1039+
1040+ HWTEST_TEMPLATED_F (BlitEnqueueTaskCountTests, givenEventWhenWaitingForCompletionThenWaitForCurrentBcsTaskCount) {
1041+ auto buffer = createBuffer (1 , false );
1042+ buffer->forceDisallowCPUCopy = true ;
1043+ int hostPtr = 0 ;
1044+
1045+ auto ultGpgpuCsr = static_cast <UltCommandStreamReceiver<FamilyType> *>(gpgpuCsr);
1046+ auto ultBcsCsr = static_cast <UltCommandStreamReceiver<FamilyType> *>(bcsCsr);
1047+
1048+ cl_event outEvent1, outEvent2;
1049+ commandQueue->enqueueWriteBuffer (buffer.get (), false , 0 , 1 , &hostPtr, nullptr , 0 , nullptr , &outEvent1);
1050+ commandQueue->enqueueWriteBuffer (buffer.get (), false , 0 , 1 , &hostPtr, nullptr , 0 , nullptr , &outEvent2);
1051+
1052+ clWaitForEvents (1 , &outEvent2);
1053+ EXPECT_EQ (2u , ultGpgpuCsr->latestWaitForCompletionWithTimeoutTaskCount .load ());
1054+ EXPECT_EQ (2u , ultBcsCsr->latestWaitForCompletionWithTimeoutTaskCount .load ());
1055+
1056+ clWaitForEvents (1 , &outEvent1);
1057+ EXPECT_EQ (1u , ultGpgpuCsr->latestWaitForCompletionWithTimeoutTaskCount .load ());
1058+ EXPECT_EQ (1u , ultBcsCsr->latestWaitForCompletionWithTimeoutTaskCount .load ());
1059+
1060+ clReleaseEvent (outEvent1);
1061+ clReleaseEvent (outEvent2);
1062+ }
1063+
1064+ HWTEST_TEMPLATED_F (BlitEnqueueTaskCountTests, givenBlockedEventWhenWaitingForCompletionThenWaitForCurrentBcsTaskCount) {
1065+ auto buffer = createBuffer (1 , false );
1066+ buffer->forceDisallowCPUCopy = true ;
1067+ int hostPtr = 0 ;
1068+
1069+ auto ultGpgpuCsr = static_cast <UltCommandStreamReceiver<FamilyType> *>(gpgpuCsr);
1070+ auto ultBcsCsr = static_cast <UltCommandStreamReceiver<FamilyType> *>(bcsCsr);
1071+
1072+ cl_event outEvent1, outEvent2;
1073+ UserEvent userEvent;
1074+ cl_event waitlist1 = &userEvent;
1075+ cl_event *waitlist2 = &outEvent1;
1076+
1077+ commandQueue->enqueueWriteBuffer (buffer.get (), false , 0 , 1 , &hostPtr, nullptr , 1 , &waitlist1, &outEvent1);
1078+ commandQueue->enqueueWriteBuffer (buffer.get (), false , 0 , 1 , &hostPtr, nullptr , 1 , waitlist2, &outEvent2);
1079+
1080+ userEvent.setStatus (CL_COMPLETE);
1081+
1082+ clWaitForEvents (1 , &outEvent2);
1083+ EXPECT_EQ (2u , ultGpgpuCsr->latestWaitForCompletionWithTimeoutTaskCount .load ());
1084+ EXPECT_EQ (2u , ultBcsCsr->latestWaitForCompletionWithTimeoutTaskCount .load ());
1085+
1086+ clWaitForEvents (1 , &outEvent1);
1087+ EXPECT_EQ (1u , ultGpgpuCsr->latestWaitForCompletionWithTimeoutTaskCount .load ());
1088+ EXPECT_EQ (1u , ultBcsCsr->latestWaitForCompletionWithTimeoutTaskCount .load ());
1089+
1090+ clReleaseEvent (outEvent1);
1091+ clReleaseEvent (outEvent2);
1092+
1093+ EXPECT_FALSE (commandQueue->isQueueBlocked ());
1094+ }
1095+
1096+ HWTEST_TEMPLATED_F (BlitEnqueueTaskCountTests, givenBlockedEnqueueWithoutKernelWhenWaitingForCompletionThenWaitForCurrentBcsTaskCount) {
1097+ auto ultGpgpuCsr = static_cast <UltCommandStreamReceiver<FamilyType> *>(gpgpuCsr);
1098+ auto ultBcsCsr = static_cast <UltCommandStreamReceiver<FamilyType> *>(bcsCsr);
1099+
1100+ cl_event outEvent1, outEvent2;
1101+ UserEvent userEvent;
1102+ cl_event waitlist1 = &userEvent;
1103+ cl_event *waitlist2 = &outEvent1;
1104+
1105+ commandQueue->enqueueMarkerWithWaitList (1 , &waitlist1, &outEvent1);
1106+ commandQueue->enqueueMarkerWithWaitList (1 , waitlist2, &outEvent2);
1107+
1108+ userEvent.setStatus (CL_COMPLETE);
1109+
1110+ clWaitForEvents (1 , &outEvent2);
1111+ EXPECT_EQ (1u , ultGpgpuCsr->latestWaitForCompletionWithTimeoutTaskCount .load ());
1112+ EXPECT_EQ (0u , ultBcsCsr->latestWaitForCompletionWithTimeoutTaskCount .load ());
1113+
1114+ clWaitForEvents (1 , &outEvent1);
1115+ EXPECT_EQ (0u , ultGpgpuCsr->latestWaitForCompletionWithTimeoutTaskCount .load ());
1116+ EXPECT_EQ (0u , ultBcsCsr->latestWaitForCompletionWithTimeoutTaskCount .load ());
1117+
1118+ clReleaseEvent (outEvent1);
1119+ clReleaseEvent (outEvent2);
1120+
1121+ EXPECT_FALSE (commandQueue->isQueueBlocked ());
1122+ }
1123+
1124+ HWTEST_TEMPLATED_F (BlitEnqueueTaskCountTests, givenEventFromCpuCopyWhenWaitingForCompletionThenWaitForCurrentBcsTaskCount) {
1125+ DebugManager.flags .DoCpuCopyOnWriteBuffer .set (1 );
1126+ auto buffer = createBuffer (1 , false );
1127+ int hostPtr = 0 ;
1128+
1129+ auto ultGpgpuCsr = static_cast <UltCommandStreamReceiver<FamilyType> *>(gpgpuCsr);
1130+ auto ultBcsCsr = static_cast <UltCommandStreamReceiver<FamilyType> *>(bcsCsr);
1131+
1132+ ultGpgpuCsr->taskCount = 1 ;
1133+ commandQueue->taskCount = 1 ;
1134+
1135+ ultBcsCsr->taskCount = 2 ;
1136+ commandQueue->updateBcsTaskCount (2 );
1137+
1138+ cl_event outEvent1, outEvent2;
1139+ commandQueue->enqueueWriteBuffer (buffer.get (), false , 0 , 1 , &hostPtr, nullptr , 0 , nullptr , &outEvent1);
1140+ commandQueue->enqueueWriteBuffer (buffer.get (), false , 0 , 1 , &hostPtr, nullptr , 0 , nullptr , &outEvent2);
1141+
1142+ clWaitForEvents (1 , &outEvent2);
1143+ EXPECT_EQ (1u , static_cast <UltCommandStreamReceiver<FamilyType> *>(gpgpuCsr)->latestWaitForCompletionWithTimeoutTaskCount .load ());
1144+ EXPECT_EQ (2u , static_cast <UltCommandStreamReceiver<FamilyType> *>(bcsCsr)->latestWaitForCompletionWithTimeoutTaskCount .load ());
1145+
1146+ clWaitForEvents (1 , &outEvent1);
1147+ EXPECT_EQ (1u , static_cast <UltCommandStreamReceiver<FamilyType> *>(gpgpuCsr)->latestWaitForCompletionWithTimeoutTaskCount .load ());
1148+ EXPECT_EQ (2u , static_cast <UltCommandStreamReceiver<FamilyType> *>(bcsCsr)->latestWaitForCompletionWithTimeoutTaskCount .load ());
1149+
1150+ clReleaseEvent (outEvent1);
1151+ clReleaseEvent (outEvent2);
1152+ }
1153+
10281154using BlitEnqueueWithDisabledGpgpuSubmissionTests = BlitEnqueueTests<1 >;
10291155
10301156HWTEST_TEMPLATED_F (BlitEnqueueWithDisabledGpgpuSubmissionTests, givenDebugFlagSetWhenDoingBcsCopyThenSubmitToGpgpuOnlyIfPreviousEnqueueWasGpgpu) {
0 commit comments