@@ -248,9 +248,9 @@ struct SLayerContext
248248 return TypeCapsDevice[device];
249249 }
250250
251- const size_t getConcurrentAccessAtomSize (cl_device_id device)
251+ const std::vector< size_t >& getConcurrentAccessAtomSizes (cl_device_id device)
252252 {
253- return ConcurrentAccessAtomSize [device];
253+ return ConcurrentAccessAtomSizes [device];
254254 }
255255
256256 const SUSMFuncs& getUSMFuncs (cl_platform_id platform)
@@ -434,7 +434,7 @@ struct SLayerContext
434434
435435 for (auto device: devices) {
436436 std::vector<cl_svm_capabilities_khr> typeCapsDevice;
437- size_t concurrentAccessAtomSize = 0 ;
437+ std::vector< size_t > concurrentAccessAtomSizes ;
438438
439439 for (auto caps: typeCapsPlatform) {
440440 if ((caps & CL_SVM_TYPE_MACRO_DEVICE_KHR ) == CL_SVM_TYPE_MACRO_DEVICE_KHR ) {
@@ -459,13 +459,17 @@ struct SLayerContext
459459 assert (0 && " unknown platform SVM type" );
460460 }
461461
462- if (!typeCapsDevice.empty () && (typeCapsDevice.back () & CL_SVM_CAPABILITY_CONCURRENT_ACCESS_KHR )) {
463- concurrentAccessAtomSize = 1 ;
462+ if (typeCapsDevice.size () > concurrentAccessAtomSizes.size ()) {
463+ if (typeCapsDevice.back () & CL_SVM_CAPABILITY_CONCURRENT_ACCESS_KHR ) {
464+ concurrentAccessAtomSizes.push_back (1 );
465+ } else {
466+ concurrentAccessAtomSizes.push_back (0 );
467+ }
464468 }
465469 }
466470
467471 TypeCapsDevice[device] = typeCapsDevice;
468- ConcurrentAccessAtomSize [device] = concurrentAccessAtomSize ;
472+ ConcurrentAccessAtomSizes [device] = concurrentAccessAtomSizes ;
469473 }
470474 }
471475
@@ -508,7 +512,7 @@ struct SLayerContext
508512 std::map<cl_platform_id, std::vector<cl_svm_capabilities_khr>> TypeCapsPlatform;
509513 std::map<cl_device_id, std::vector<cl_svm_capabilities_khr>> TypeCapsDevice;
510514
511- std::map<cl_device_id, size_t > ConcurrentAccessAtomSize ;
515+ std::map<cl_device_id, std::vector< size_t >> ConcurrentAccessAtomSizes ;
512516
513517 std::map<cl_platform_id, SUSMFuncs> USMFuncs;
514518
@@ -1121,11 +1125,11 @@ cl_int CL_API_CALL clGetDeviceInfo_override(
11211125 break ;
11221126 case CL_DEVICE_SVM_CONCURRENT_ACCESS_ATOM_SIZE_KHR :
11231127 {
1124- const auto concurrentAccessAtomSize = getLayerContext ().getConcurrentAccessAtomSize (device);
1128+ const auto & sizes = getLayerContext ().getConcurrentAccessAtomSizes (device);
11251129 auto ptr = (size_t *)param_value;
1126- return writeParamToMemory (
1130+ return writeVectorToMemory (
11271131 param_value_size,
1128- concurrentAccessAtomSize ,
1132+ sizes ,
11291133 param_value_size_ret,
11301134 ptr);
11311135 }
0 commit comments