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