2121
2222#include " emulate.h"
2323
24+ // !!! TODO: When removing this code block, also if the SVM type macros have
25+ // also been updated!
26+ #if !defined(CL_SVM_CAPABILITY_CREATE_BUFFER_KHR)
27+ #define CL_SVM_CAPABILITY_CREATE_BUFFER_KHR (1 << 15 )
28+ #else
29+ #pragma message("CL_SVM_CAPABILITY_CREATE_BUFFER_KHR is now properly defined.")
30+ #endif
31+
2432static constexpr cl_version version_cl_khr_unified_svm =
2533 CL_MAKE_VERSION (0 , 2 , 0 );
2634
@@ -129,6 +137,7 @@ static cl_svm_capabilities_khr getCoarseGrainSVMCaps(cl_device_id device)
129137
130138 if (svmCaps & CL_DEVICE_SVM_COARSE_GRAIN_BUFFER ) {
131139 ret = CL_SVM_TYPE_MACRO_COARSE_GRAIN_BUFFER_KHR ;
140+ ret |= CL_SVM_CAPABILITY_CREATE_BUFFER_KHR ;
132141 }
133142
134143 return ret;
@@ -148,6 +157,8 @@ static cl_svm_capabilities_khr getFineGrainSVMCaps(cl_device_id device)
148157
149158 if (svmCaps & CL_DEVICE_SVM_FINE_GRAIN_BUFFER ) {
150159 ret = CL_SVM_TYPE_MACRO_FINE_GRAIN_BUFFER_KHR ;
160+ ret |= CL_SVM_CAPABILITY_CREATE_BUFFER_KHR ;
161+
151162
152163 if (svmCaps & CL_DEVICE_SVM_ATOMICS ) {
153164 ret |= CL_SVM_CAPABILITY_CONCURRENT_ATOMIC_ACCESS_KHR ;
@@ -177,8 +188,15 @@ static cl_svm_capabilities_khr getSystemSVMCaps(cl_device_id device)
177188 &usmCaps,
178189 nullptr );
179190
180- if (svmCaps & CL_DEVICE_SVM_FINE_GRAIN_SYSTEM || usmCaps != 0 ) {
191+ if (svmCaps & CL_DEVICE_SVM_FINE_GRAIN_SYSTEM ) {
192+ ret = CL_SVM_TYPE_MACRO_SYSTEM_KHR ;
193+ ret |= CL_SVM_CAPABILITY_CREATE_BUFFER_KHR ;
194+ }
195+ else if (usmCaps != 0 ) {
181196 ret = CL_SVM_TYPE_MACRO_SYSTEM_KHR ;
197+ ret |= CL_SVM_CAPABILITY_CREATE_BUFFER_KHR ;
198+ // USM does not currently support mapping system memory.
199+ ret &= ~CL_SVM_CAPABILITY_HOST_MAP_KHR ;
182200 }
183201
184202 return ret;
0 commit comments