@@ -4387,27 +4387,36 @@ void *CL_API_CALL clSVMAlloc(cl_context context,
43874387 return pAlloc;
43884388 }
43894389
4390- if (flags == 0 ) {
4391- flags = CL_MEM_READ_WRITE;
4392- }
4393-
4394- if (!((flags == CL_MEM_READ_WRITE) ||
4395- (flags == CL_MEM_WRITE_ONLY) ||
4396- (flags == CL_MEM_READ_ONLY) ||
4397- (flags == CL_MEM_SVM_FINE_GRAIN_BUFFER) ||
4398- (flags == (CL_MEM_SVM_FINE_GRAIN_BUFFER | CL_MEM_SVM_ATOMICS)) ||
4399- (flags == (CL_MEM_READ_WRITE | CL_MEM_SVM_FINE_GRAIN_BUFFER)) ||
4400- (flags == (CL_MEM_READ_WRITE | CL_MEM_SVM_FINE_GRAIN_BUFFER | CL_MEM_SVM_ATOMICS)) ||
4401- (flags == (CL_MEM_WRITE_ONLY | CL_MEM_SVM_FINE_GRAIN_BUFFER)) ||
4402- (flags == (CL_MEM_WRITE_ONLY | CL_MEM_SVM_FINE_GRAIN_BUFFER | CL_MEM_SVM_ATOMICS)) ||
4403- (flags == (CL_MEM_READ_ONLY | CL_MEM_SVM_FINE_GRAIN_BUFFER)) ||
4404- (flags == (CL_MEM_READ_ONLY | CL_MEM_SVM_FINE_GRAIN_BUFFER | CL_MEM_SVM_ATOMICS)))) {
4405- TRACING_EXIT (clSVMAlloc, &pAlloc);
4406- return pAlloc;
4390+ {
4391+ // allow CL_MEM_ALLOW_UNRESTRICTED_SIZE_INTEL with every combination
4392+ cl_svm_mem_flags tempFlags = flags & (~CL_MEM_ALLOW_UNRESTRICTED_SIZE_INTEL);
4393+
4394+ if (tempFlags == 0 ) {
4395+ tempFlags = CL_MEM_READ_WRITE;
4396+ }
4397+
4398+ if (!((tempFlags == CL_MEM_READ_WRITE) ||
4399+ (tempFlags == CL_MEM_WRITE_ONLY) ||
4400+ (tempFlags == CL_MEM_READ_ONLY) ||
4401+ (tempFlags == CL_MEM_SVM_FINE_GRAIN_BUFFER) ||
4402+ (tempFlags == (CL_MEM_SVM_FINE_GRAIN_BUFFER | CL_MEM_SVM_ATOMICS)) ||
4403+ (tempFlags == (CL_MEM_READ_WRITE | CL_MEM_SVM_FINE_GRAIN_BUFFER)) ||
4404+ (tempFlags == (CL_MEM_READ_WRITE | CL_MEM_SVM_FINE_GRAIN_BUFFER | CL_MEM_SVM_ATOMICS)) ||
4405+ (tempFlags == (CL_MEM_WRITE_ONLY | CL_MEM_SVM_FINE_GRAIN_BUFFER)) ||
4406+ (tempFlags == (CL_MEM_WRITE_ONLY | CL_MEM_SVM_FINE_GRAIN_BUFFER | CL_MEM_SVM_ATOMICS)) ||
4407+ (tempFlags == (CL_MEM_READ_ONLY | CL_MEM_SVM_FINE_GRAIN_BUFFER)) ||
4408+ (tempFlags == (CL_MEM_READ_ONLY | CL_MEM_SVM_FINE_GRAIN_BUFFER | CL_MEM_SVM_ATOMICS)))) {
4409+
4410+ TRACING_EXIT (clSVMAlloc, &pAlloc);
4411+ return pAlloc;
4412+ }
44074413 }
44084414
44094415 auto pDevice = pContext->getDevice (0 );
4410- if ((size == 0 ) || (size > pDevice->getSharedDeviceInfo ().maxMemAllocSize )) {
4416+ bool allowUnrestrictedSize = (flags & CL_MEM_ALLOW_UNRESTRICTED_SIZE_INTEL);
4417+
4418+ if ((size == 0 ) ||
4419+ (!allowUnrestrictedSize && (size > pDevice->getSharedDeviceInfo ().maxMemAllocSize ))) {
44114420 TRACING_EXIT (clSVMAlloc, &pAlloc);
44124421 return pAlloc;
44134422 }
0 commit comments