Skip to content

Commit eca4bf2

Browse files
committed
fix bug affecting host allocations
1 parent 76f8149 commit eca4bf2

File tree

1 file changed

+34
-32
lines changed

1 file changed

+34
-32
lines changed

layers/99_svmplusplus/emulate.cpp

Lines changed: 34 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -486,61 +486,63 @@ void* CL_API_CALL clSVMAllocWithPropertiesKHR_EMU(
486486
size_t alignment = 0;
487487
parseSVMAllocProperties(properties, device, flags, alignment);
488488

489-
switch(typeCapsPlatform[svm_type_index]) {
490-
case CL_SVM_TYPE_MACRO_DEVICE_KHR:
489+
const auto caps = typeCapsPlatform[svm_type_index];
490+
if ((caps & CL_SVM_TYPE_MACRO_DEVICE_KHR) == CL_SVM_TYPE_MACRO_DEVICE_KHR) {
491491
return clDeviceMemAllocINTEL(
492492
context,
493493
device,
494494
nullptr,
495495
size,
496496
alignment,
497497
errcode_ret);
498-
case CL_SVM_TYPE_MACRO_HOST_KHR:
498+
}
499+
else if ((caps & CL_SVM_TYPE_MACRO_HOST_KHR) == CL_SVM_TYPE_MACRO_HOST_KHR) {
499500
return clHostMemAllocINTEL(
500501
context,
501502
nullptr,
502503
size,
503504
alignment,
504505
errcode_ret);
505-
case CL_SVM_TYPE_MACRO_SINGLE_DEVICE_SHARED_KHR:
506+
}
507+
else if ((caps & CL_SVM_TYPE_MACRO_SINGLE_DEVICE_SHARED_KHR) == CL_SVM_TYPE_MACRO_SINGLE_DEVICE_SHARED_KHR) {
506508
return clSharedMemAllocINTEL(
507509
context,
508510
device,
509511
nullptr,
510512
size,
511513
alignment,
512514
errcode_ret);
513-
case CL_SVM_TYPE_MACRO_COARSE_GRAIN_BUFFER_KHR: {
514-
void* ret = g_pNextDispatch->clSVMAlloc(
515-
context,
516-
CL_MEM_READ_WRITE,
517-
size,
518-
alignment);
519-
if (errcode_ret) {
520-
errcode_ret[0] = ret ? CL_SUCCESS : CL_INVALID_VALUE;
521-
}
522-
return ret;
523-
}
524-
case CL_SVM_TYPE_MACRO_FINE_GRAIN_BUFFER_KHR: {
525-
cl_svm_mem_flags svmFlags = CL_MEM_READ_WRITE | CL_MEM_SVM_FINE_GRAIN_BUFFER;
515+
}
516+
else if ((caps & CL_SVM_TYPE_MACRO_FINE_GRAIN_BUFFER_KHR) == CL_SVM_TYPE_MACRO_FINE_GRAIN_BUFFER_KHR) {
517+
cl_svm_mem_flags svmFlags = CL_MEM_READ_WRITE | CL_MEM_SVM_FINE_GRAIN_BUFFER;
526518

527-
const auto& typeCapsDevice = layerContext.TypeCapsDevice[device];
528-
if (typeCapsDevice[svm_type_index] & CL_SVM_CAPABILITY_CONCURRENT_ATOMIC_ACCESS_KHR) {
529-
svmFlags |= CL_MEM_SVM_ATOMICS;
530-
}
531-
void* ret = g_pNextDispatch->clSVMAlloc(
532-
context,
533-
svmFlags,
534-
size,
535-
alignment);
536-
if (errcode_ret) {
537-
errcode_ret[0] = ret ? CL_SUCCESS : CL_INVALID_VALUE;
538-
}
539-
return ret;
519+
const auto& typeCapsDevice = layerContext.TypeCapsDevice[device];
520+
if (typeCapsDevice[svm_type_index] & CL_SVM_CAPABILITY_CONCURRENT_ATOMIC_ACCESS_KHR) {
521+
svmFlags |= CL_MEM_SVM_ATOMICS;
540522
}
541-
default:
523+
void* ret = g_pNextDispatch->clSVMAlloc(
524+
context,
525+
svmFlags,
526+
size,
527+
alignment);
528+
if (errcode_ret) {
529+
errcode_ret[0] = ret ? CL_SUCCESS : CL_INVALID_VALUE;
530+
}
531+
return ret;
532+
}
533+
else if ((caps & CL_SVM_TYPE_MACRO_COARSE_GRAIN_BUFFER_KHR) == CL_SVM_TYPE_MACRO_COARSE_GRAIN_BUFFER_KHR) {
534+
void* ret = g_pNextDispatch->clSVMAlloc(
535+
context,
536+
CL_MEM_READ_WRITE,
537+
size,
538+
alignment);
539+
if (errcode_ret) {
540+
errcode_ret[0] = ret ? CL_SUCCESS : CL_INVALID_VALUE;
541+
}
542+
return ret;
543+
}
544+
else {
542545
assert(0 && "unknown SVM type");
543-
break;
544546
}
545547

546548
if (errcode_ret) {

0 commit comments

Comments
 (0)