1 /*
2 * Copyright (C) 2021 Intel Corporation
3 *
4 * SPDX-License-Identifier: MIT
5 *
6 */
7
8 #include "opencl/source/cl_device/cl_device.h"
9 #include "opencl/source/context/context.h"
10 #include "opencl/source/helpers/cl_memory_properties_helpers_base.inl"
11 #include "opencl/source/mem_obj/mem_obj_helper.h"
12
13 namespace NEO {
14
parseMemoryProperties(const cl_mem_properties_intel * properties,MemoryProperties & memoryProperties,cl_mem_flags & flags,cl_mem_flags_intel & flagsIntel,cl_mem_alloc_flags_intel & allocflags,MemoryPropertiesHelper::ObjType objectType,Context & context)15 bool ClMemoryPropertiesHelper::parseMemoryProperties(const cl_mem_properties_intel *properties, MemoryProperties &memoryProperties,
16 cl_mem_flags &flags, cl_mem_flags_intel &flagsIntel,
17 cl_mem_alloc_flags_intel &allocflags, MemoryPropertiesHelper::ObjType objectType, Context &context) {
18 Device *pDevice = &context.getDevice(0)->getDevice();
19
20 if (properties != nullptr) {
21 for (int i = 0; properties[i] != 0; i += 2) {
22 switch (properties[i]) {
23 case CL_MEM_FLAGS:
24 flags |= static_cast<cl_mem_flags>(properties[i + 1]);
25 break;
26 case CL_MEM_FLAGS_INTEL:
27 flagsIntel |= static_cast<cl_mem_flags_intel>(properties[i + 1]);
28 break;
29 case CL_MEM_ALLOC_FLAGS_INTEL:
30 allocflags |= static_cast<cl_mem_alloc_flags_intel>(properties[i + 1]);
31 break;
32 default:
33 return false;
34 }
35 }
36 }
37
38 memoryProperties = ClMemoryPropertiesHelper::createMemoryProperties(flags, flagsIntel, allocflags, pDevice);
39
40 switch (objectType) {
41 case MemoryPropertiesHelper::ObjType::BUFFER:
42 return isFieldValid(flags, MemObjHelper::validFlagsForBuffer) &&
43 isFieldValid(flagsIntel, MemObjHelper::validFlagsForBufferIntel);
44 case MemoryPropertiesHelper::ObjType::IMAGE:
45 return isFieldValid(flags, MemObjHelper::validFlagsForImage) &&
46 isFieldValid(flagsIntel, MemObjHelper::validFlagsForImageIntel);
47 default:
48 break;
49 }
50 return true;
51 }
52
53 } // namespace NEO
54