@@ -892,11 +892,20 @@ LZT_TEST_F(
892892}
893893
894894void RunGivenImageCopyThatWaitsOnEventWhenExecutingCommandListTest (
895- zeCommandListEventTests &test, bool is_immediate ) {
895+ zeCommandListEventTests &test, lzt::zeCmdListMode cmd_list_mode ) {
896896 if (!(lzt::image_support ())) {
897897 GTEST_SKIP () << " device does not support images, cannot run test" ;
898898 }
899+ const bool is_immediate =
900+ (cmd_list_mode == lzt::zeCmdListMode::Immediate ||
901+ cmd_list_mode == lzt::zeCmdListMode::ImmediateAppendRegular);
899902 auto cmd_bundle = lzt::create_command_bundle (is_immediate);
903+ ze_command_list_handle_t append_list = nullptr ;
904+ if (cmd_list_mode == lzt::zeCmdListMode::ImmediateAppendRegular) {
905+ append_list = lzt::create_command_list ();
906+ } else {
907+ append_list = cmd_bundle.list ;
908+ }
900909 // create 2 images
901910 lzt::ImagePNG32Bit input (" test_input.png" );
902911 uint32_t width = input.width ();
@@ -911,25 +920,33 @@ void RunGivenImageCopyThatWaitsOnEventWhenExecutingCommandListTest(
911920 test.ep .create_event (hEvent3, ZE_EVENT_SCOPE_FLAG_HOST, 0 );
912921 test.ep .create_event (hEvent4, ZE_EVENT_SCOPE_FLAG_HOST, 0 );
913922
914- lzt::append_signal_event (cmd_bundle. list , hEvent0);
923+ lzt::append_signal_event (append_list , hEvent0);
915924
916925 // Use ImageCopyFromMemory to upload ImageA
917- lzt::append_image_copy_from_mem (cmd_bundle. list , input_xeimage,
918- input. raw_data (), hEvent1, 1 , &hEvent0);
926+ lzt::append_image_copy_from_mem (append_list , input_xeimage, input. raw_data () ,
927+ hEvent1, 1 , &hEvent0);
919928 // use ImageCopy to copy A -> B
920- lzt::append_image_copy (cmd_bundle. list , output_xeimage, input_xeimage,
921- hEvent2, 1 , &hEvent1);
929+ lzt::append_image_copy (append_list , output_xeimage, input_xeimage, hEvent2, 1 ,
930+ &hEvent1);
922931 // use ImageCopyRegion to copy part of A -> B
923932 ze_image_region_t sr = {0 , 0 , 0 , 1 , 1 , 1 };
924933 ze_image_region_t dr = {0 , 0 , 0 , 1 , 1 , 1 };
925- lzt::append_image_copy_region (cmd_bundle. list , output_xeimage, input_xeimage,
926- &dr, & sr, hEvent3, 1 , &hEvent2);
934+ lzt::append_image_copy_region (append_list , output_xeimage, input_xeimage, &dr ,
935+ &sr, hEvent3, 1 , &hEvent2);
927936 // use ImageCopyToMemory to dowload ImageB
928- lzt::append_image_copy_to_mem (cmd_bundle. list , output.raw_data (),
929- output_xeimage, hEvent4, 1 , &hEvent3);
930- lzt::append_wait_on_events (cmd_bundle. list , 1 , &hEvent4);
937+ lzt::append_image_copy_to_mem (append_list , output.raw_data (), output_xeimage ,
938+ hEvent4, 1 , &hEvent3);
939+ lzt::append_wait_on_events (append_list , 1 , &hEvent4);
931940 // execute commands
932- lzt::close_command_list (cmd_bundle.list );
941+ if (cmd_list_mode == lzt::zeCmdListMode::Regular ||
942+ cmd_list_mode == lzt::zeCmdListMode::ImmediateAppendRegular) {
943+ lzt::close_command_list (append_list);
944+ }
945+
946+ if (cmd_list_mode == lzt::zeCmdListMode::ImmediateAppendRegular) {
947+ lzt::append_command_lists_immediate_exp (cmd_bundle.list , 1 , &append_list);
948+ }
949+
933950 if (!is_immediate) {
934951 lzt::execute_command_lists (cmd_bundle.queue , 1 , &cmd_bundle.list , nullptr );
935952 }
@@ -958,24 +975,39 @@ void RunGivenImageCopyThatWaitsOnEventWhenExecutingCommandListTest(
958975 test.ep .destroy_event (hEvent4);
959976 lzt::destroy_ze_image (input_xeimage);
960977 lzt::destroy_ze_image (output_xeimage);
978+ if (cmd_list_mode == lzt::zeCmdListMode::ImmediateAppendRegular) {
979+ lzt::destroy_command_list (append_list);
980+ }
961981 lzt::destroy_command_bundle (cmd_bundle);
962982}
963983
964984LZT_TEST_F (
965985 zeCommandListEventTests,
966986 GivenImageCopyThatWaitsOnEventWhenExecutingCommandListThenCommandWaitsAndCompletesSuccessfully) {
967- RunGivenImageCopyThatWaitsOnEventWhenExecutingCommandListTest (*this , false );
987+ RunGivenImageCopyThatWaitsOnEventWhenExecutingCommandListTest (
988+ *this , lzt::zeCmdListMode::Regular);
968989}
969990
970991LZT_TEST_F (
971992 zeCommandListEventTests,
972993 GivenImageCopyThatWaitsOnEventWhenExecutingImmediateCommandListThenCommandWaitsAndCompletesSuccessfully) {
973- RunGivenImageCopyThatWaitsOnEventWhenExecutingCommandListTest (*this , true );
994+ RunGivenImageCopyThatWaitsOnEventWhenExecutingCommandListTest (
995+ *this , lzt::zeCmdListMode::Immediate);
996+ }
997+
998+ LZT_TEST_F (
999+ zeCommandListEventTests,
1000+ GivenImageCopyThatWaitsOnEventWhenExecutingImmediateCommandListAppendCmdListsThenCommandWaitsAndCompletesSuccessfully) {
1001+ RunGivenImageCopyThatWaitsOnEventWhenExecutingCommandListTest (
1002+ *this , lzt::zeCmdListMode::ImmediateAppendRegular);
9741003}
9751004
9761005void RunGivenSuccessiveMemoryCopiesWithEventWhenExecutingOnDifferentQueuesTest (
977- bool is_immediate, bool is_shared_system_src, bool is_shared_system_temp,
978- bool is_shared_system_dst) {
1006+ lzt::zeCmdListMode cmd_list_mode, bool is_shared_system_src,
1007+ bool is_shared_system_temp, bool is_shared_system_dst) {
1008+ const bool is_immediate =
1009+ (cmd_list_mode == lzt::zeCmdListMode::Immediate ||
1010+ cmd_list_mode == lzt::zeCmdListMode::ImmediateAppendRegular);
9791011 const size_t size = 1024 ;
9801012 auto driver = lzt::get_default_driver ();
9811013 auto context = lzt::create_context (driver);
@@ -1003,9 +1035,21 @@ void RunGivenSuccessiveMemoryCopiesWithEventWhenExecutingOnDifferentQueuesTest(
10031035 auto cmd_bundle_0 = lzt::create_command_bundle (
10041036 context, device, 0 , ZE_COMMAND_QUEUE_MODE_ASYNCHRONOUS,
10051037 ZE_COMMAND_QUEUE_PRIORITY_NORMAL, 0 , copy_ordinals[0 ], 0 , is_immediate);
1038+ ze_command_list_handle_t append_list_0 = nullptr ;
1039+ if (cmd_list_mode == lzt::zeCmdListMode::ImmediateAppendRegular) {
1040+ append_list_0 = lzt::create_command_list (context, device);
1041+ } else {
1042+ append_list_0 = cmd_bundle_0.list ;
1043+ }
10061044 auto cmd_bundle_1 = lzt::create_command_bundle (
10071045 context, device, 0 , ZE_COMMAND_QUEUE_MODE_ASYNCHRONOUS,
10081046 ZE_COMMAND_QUEUE_PRIORITY_NORMAL, 0 , copy_ordinals[1 ], 0 , is_immediate);
1047+ ze_command_list_handle_t append_list_1 = nullptr ;
1048+ if (cmd_list_mode == lzt::zeCmdListMode::ImmediateAppendRegular) {
1049+ append_list_1 = lzt::create_command_list (context, device);
1050+ } else {
1051+ append_list_1 = cmd_bundle_1.list ;
1052+ }
10091053
10101054 ze_event_pool_desc_t event_pool_desc = {};
10111055 event_pool_desc.stype = ZE_STRUCTURE_TYPE_EVENT_POOL_DESC;
@@ -1029,13 +1073,24 @@ void RunGivenSuccessiveMemoryCopiesWithEventWhenExecutingOnDifferentQueuesTest(
10291073 memset (dst_buffer, 0x0 , size);
10301074
10311075 // Execute and verify GPU reads event
1032- lzt::append_memory_copy (cmd_bundle_0. list , temp_buffer, src_buffer, size,
1033- event, 0 , nullptr );
1034- lzt::append_memory_copy (cmd_bundle_1. list , dst_buffer, temp_buffer, size,
1076+ lzt::append_memory_copy (append_list_0 , temp_buffer, src_buffer, size, event ,
1077+ 0 , nullptr );
1078+ lzt::append_memory_copy (append_list_1 , dst_buffer, temp_buffer, size,
10351079 nullptr , 1 , &event);
10361080
1037- lzt::close_command_list (cmd_bundle_0.list );
1038- lzt::close_command_list (cmd_bundle_1.list );
1081+ if (cmd_list_mode == lzt::zeCmdListMode::Regular ||
1082+ cmd_list_mode == lzt::zeCmdListMode::ImmediateAppendRegular) {
1083+ lzt::close_command_list (append_list_0);
1084+ lzt::close_command_list (append_list_1);
1085+ }
1086+
1087+ if (cmd_list_mode == lzt::zeCmdListMode::ImmediateAppendRegular) {
1088+ lzt::append_command_lists_immediate_exp (cmd_bundle_0.list , 1 ,
1089+ &append_list_0);
1090+ lzt::append_command_lists_immediate_exp (cmd_bundle_1.list , 1 ,
1091+ &append_list_1);
1092+ }
1093+
10391094 if (is_immediate) {
10401095 lzt::synchronize_command_list_host (cmd_bundle_0.list , UINT64_MAX);
10411096 lzt::synchronize_command_list_host (cmd_bundle_1.list , UINT64_MAX);
@@ -1061,28 +1116,39 @@ void RunGivenSuccessiveMemoryCopiesWithEventWhenExecutingOnDifferentQueuesTest(
10611116 is_shared_system_dst);
10621117 lzt::destroy_event (event);
10631118 lzt::destroy_event_pool (event_pool);
1119+ if (cmd_list_mode == lzt::zeCmdListMode::ImmediateAppendRegular) {
1120+ lzt::destroy_command_list (append_list_0);
1121+ lzt::destroy_command_list (append_list_1);
1122+ }
10641123 lzt::destroy_command_bundle (cmd_bundle_0);
10651124 lzt::destroy_command_bundle (cmd_bundle_1);
10661125 }
10671126 lzt::destroy_context (context);
10681127
10691128 if (!test_run) {
1070- LOG_WARNING << " Less than 2 engines that support copy, test not run" ;
1129+ GTEST_SKIP () << " Less than 2 engines that support copy, test not run" ;
10711130 }
10721131}
10731132
10741133LZT_TEST (
10751134 zeCommandListCopyEventTest,
10761135 GivenSuccessiveMemoryCopiesWithEventWhenExecutingOnDifferentQueuesThenCopiesCompleteSuccessfully) {
10771136 RunGivenSuccessiveMemoryCopiesWithEventWhenExecutingOnDifferentQueuesTest (
1078- false , false , false , false );
1137+ lzt::zeCmdListMode::Regular , false , false , false );
10791138}
10801139
10811140LZT_TEST (
10821141 zeCommandListCopyEventTest,
10831142 GivenSuccessiveMemoryCopiesWithEventWhenExecutingOnDifferentQueuesOnImmediateCmdListsThenCopiesCompleteSuccessfully) {
10841143 RunGivenSuccessiveMemoryCopiesWithEventWhenExecutingOnDifferentQueuesTest (
1085- true , false , false , false );
1144+ lzt::zeCmdListMode::Immediate, false , false , false );
1145+ }
1146+
1147+ LZT_TEST (
1148+ zeCommandListCopyEventTest,
1149+ GivenSuccessiveMemoryCopiesWithEventWhenExecutingOnDifferentQueuesOnImmediateCmdListsAppendCmdListsThenCopiesCompleteSuccessfully) {
1150+ RunGivenSuccessiveMemoryCopiesWithEventWhenExecutingOnDifferentQueuesTest (
1151+ lzt::zeCmdListMode::ImmediateAppendRegular, false , false , false );
10861152}
10871153
10881154LZT_TEST (
@@ -1092,7 +1158,7 @@ LZT_TEST(
10921158 for (uint32_t i = 1 ; i < 8 ; ++i) {
10931159 std::bitset<3 > bits (i);
10941160 RunGivenSuccessiveMemoryCopiesWithEventWhenExecutingOnDifferentQueuesTest (
1095- false , bits[2 ], bits[1 ], bits[0 ]);
1161+ lzt::zeCmdListMode::Regular , bits[2 ], bits[1 ], bits[0 ]);
10961162 }
10971163}
10981164
@@ -1103,7 +1169,18 @@ LZT_TEST(
11031169 for (uint32_t i = 1 ; i < 8 ; ++i) {
11041170 std::bitset<3 > bits (i);
11051171 RunGivenSuccessiveMemoryCopiesWithEventWhenExecutingOnDifferentQueuesTest (
1106- true , bits[2 ], bits[1 ], bits[0 ]);
1172+ lzt::zeCmdListMode::Immediate, bits[2 ], bits[1 ], bits[0 ]);
1173+ }
1174+ }
1175+
1176+ LZT_TEST (
1177+ zeCommandListCopyEventTest,
1178+ GivenSuccessiveMemoryCopiesWithEventWhenExecutingOnDifferentQueuesOnImmediateCmdListsAppendCmdListsThenCopiesCompleteSuccessfullyWithSharedSystemAllocator) {
1179+ SKIP_IF_SHARED_SYSTEM_ALLOC_UNSUPPORTED ();
1180+ for (uint32_t i = 1 ; i < 8 ; ++i) {
1181+ std::bitset<3 > bits (i);
1182+ RunGivenSuccessiveMemoryCopiesWithEventWhenExecutingOnDifferentQueuesTest (
1183+ lzt::zeCmdListMode::ImmediateAppendRegular, bits[2 ], bits[1 ], bits[0 ]);
11071184 }
11081185}
11091186
0 commit comments