Update memory flags validation for Images

Change-Id: Ifc8b50301cd82bd7e9c83da626a02dbc1643e0b0
Signed-off-by: Filip Hazubski <filip.hazubski@intel.com>
This commit is contained in:
Hazubski
2019-03-14 18:26:50 +01:00
committed by sys_ocldev
parent 82ec564ca2
commit cb3ee6e8d2
2 changed files with 22 additions and 2 deletions

View File

@@ -62,13 +62,16 @@ class MemObjHelper {
return false;
}
MemObj *parentMemObj = castToObject<MemObj>(parent);
auto parentMemObj = castToObject<MemObj>(parent);
if (parentMemObj != nullptr && properties.flags) {
auto parentFlags = parentMemObj->getFlags();
/* Check whether flags are compatible with parent. */
if ((!isValueSet(parentFlags, CL_MEM_ACCESS_FLAGS_UNRESTRICTED_INTEL)) &&
(!isValueSet(properties.flags, CL_MEM_ACCESS_FLAGS_UNRESTRICTED_INTEL)) &&
((isValueSet(parentFlags, CL_MEM_WRITE_ONLY) && isValueSet(properties.flags, CL_MEM_READ_WRITE)) ||
(isValueSet(properties.flags, CL_MEM_ALLOC_HOST_PTR) ||
isValueSet(properties.flags, CL_MEM_COPY_HOST_PTR) ||
isValueSet(properties.flags, CL_MEM_USE_HOST_PTR) ||
(isValueSet(parentFlags, CL_MEM_WRITE_ONLY) && isValueSet(properties.flags, CL_MEM_READ_WRITE)) ||
(isValueSet(parentFlags, CL_MEM_WRITE_ONLY) && isValueSet(properties.flags, CL_MEM_READ_ONLY)) ||
(isValueSet(parentFlags, CL_MEM_READ_ONLY) && isValueSet(properties.flags, CL_MEM_READ_WRITE)) ||
(isValueSet(parentFlags, CL_MEM_READ_ONLY) && isValueSet(properties.flags, CL_MEM_WRITE_ONLY)) ||

View File

@@ -6,6 +6,8 @@
*/
#include "runtime/mem_obj/mem_obj_helper.h"
#include "unit_tests/fixtures/image_fixture.h"
#include "unit_tests/utilities/base_object_utils.h"
#include "gtest/gtest.h"
@@ -110,3 +112,18 @@ TEST(MemObjHelper, givenInvalidPropertiesWhenValidatingMemoryPropertiesThenFalse
EXPECT_FALSE(MemObjHelper::validateMemoryPropertiesForBuffer(properties));
EXPECT_FALSE(MemObjHelper::validateMemoryPropertiesForImage(properties, nullptr));
}
TEST(MemObjHelper, givenParentMemObjAndHostPtrFlagsWhenValidatingMemoryPropertiesForImageThenFalseIsReturned) {
MemoryProperties properties;
MockContext context;
auto image = clUniquePtr(Image1dHelper<>::create(&context));
properties.flags = CL_MEM_USE_HOST_PTR;
EXPECT_FALSE(MemObjHelper::validateMemoryPropertiesForImage(properties, image.get()));
properties.flags = CL_MEM_ALLOC_HOST_PTR;
EXPECT_FALSE(MemObjHelper::validateMemoryPropertiesForImage(properties, image.get()));
properties.flags = CL_MEM_COPY_HOST_PTR;
EXPECT_FALSE(MemObjHelper::validateMemoryPropertiesForImage(properties, image.get()));
}