Move storage of mapped operations to OpenCL context
Relate-To: NEO-6352 Signed-off-by: Maciej Dziuban <maciej.dziuban@intel.com>
This commit is contained in:
parent
ca0138da2e
commit
8c9dd3085b
|
@ -16,6 +16,7 @@
|
||||||
#include "opencl/source/gtpin/gtpin_notify.h"
|
#include "opencl/source/gtpin/gtpin_notify.h"
|
||||||
#include "opencl/source/helpers/base_object.h"
|
#include "opencl/source/helpers/base_object.h"
|
||||||
#include "opencl/source/helpers/destructor_callbacks.h"
|
#include "opencl/source/helpers/destructor_callbacks.h"
|
||||||
|
#include "opencl/source/mem_obj/map_operations_handler.h"
|
||||||
|
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
@ -93,6 +94,8 @@ class Context : public BaseObject<_cl_context> {
|
||||||
return svmAllocsManager;
|
return svmAllocsManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto &getMapOperationsStorage() { return mapOperationsStorage; }
|
||||||
|
|
||||||
const std::set<uint32_t> &getRootDeviceIndices() const;
|
const std::set<uint32_t> &getRootDeviceIndices() const;
|
||||||
|
|
||||||
uint32_t getMaxRootDeviceIndex() const;
|
uint32_t getMaxRootDeviceIndex() const;
|
||||||
|
@ -199,6 +202,7 @@ class Context : public BaseObject<_cl_context> {
|
||||||
void *userData = nullptr;
|
void *userData = nullptr;
|
||||||
MemoryManager *memoryManager = nullptr;
|
MemoryManager *memoryManager = nullptr;
|
||||||
SVMAllocsManager *svmAllocsManager = nullptr;
|
SVMAllocsManager *svmAllocsManager = nullptr;
|
||||||
|
MapOperationsStorage mapOperationsStorage = {};
|
||||||
StackVec<CommandQueue *, 1> specialQueues;
|
StackVec<CommandQueue *, 1> specialQueues;
|
||||||
DeviceQueue *defaultDeviceQueue = nullptr;
|
DeviceQueue *defaultDeviceQueue = nullptr;
|
||||||
DriverDiagnostics *driverDiagnostics = nullptr;
|
DriverDiagnostics *driverDiagnostics = nullptr;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2018-2020 Intel Corporation
|
* Copyright (C) 2018-2021 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
|
@ -72,3 +72,21 @@ void MapOperationsHandler::remove(void *mappedPtr) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MapOperationsHandler &NEO::MapOperationsStorage::getHandler(cl_mem memObj) {
|
||||||
|
return handlers[memObj];
|
||||||
|
}
|
||||||
|
|
||||||
|
MapOperationsHandler *NEO::MapOperationsStorage::getHandlerIfExists(cl_mem memObj) {
|
||||||
|
auto iterator = handlers.find(memObj);
|
||||||
|
if (iterator == handlers.end()) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return &iterator->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
void NEO::MapOperationsStorage::removeHandler(cl_mem memObj) {
|
||||||
|
auto iterator = handlers.find(memObj);
|
||||||
|
handlers.erase(iterator);
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2018-2020 Intel Corporation
|
* Copyright (C) 2018-2021 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
|
@ -9,6 +9,7 @@
|
||||||
#include "opencl/source/helpers/properties_helper.h"
|
#include "opencl/source/helpers/properties_helper.h"
|
||||||
|
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
|
#include <unordered_map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace NEO {
|
namespace NEO {
|
||||||
|
@ -28,4 +29,16 @@ class MapOperationsHandler {
|
||||||
mutable std::mutex mtx;
|
mutable std::mutex mtx;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class MapOperationsStorage {
|
||||||
|
public:
|
||||||
|
using HandlersMap = std::unordered_map<cl_mem, MapOperationsHandler>;
|
||||||
|
|
||||||
|
MapOperationsHandler &getHandler(cl_mem memObj);
|
||||||
|
MapOperationsHandler *getHandlerIfExists(cl_mem memObj);
|
||||||
|
void removeHandler(cl_mem memObj);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
HandlersMap handlers{};
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace NEO
|
} // namespace NEO
|
||||||
|
|
|
@ -62,9 +62,14 @@ MemObj::~MemObj() {
|
||||||
if (allocatedMapPtr != nullptr) {
|
if (allocatedMapPtr != nullptr) {
|
||||||
needWait = true;
|
needWait = true;
|
||||||
}
|
}
|
||||||
if (mapOperationsHandler.size() > 0 && !getCpuAddressForMapping()) {
|
|
||||||
needWait = true;
|
if (auto mapOperationsHandler = getMapOperationsHandlerIfExists(); mapOperationsHandler != nullptr) {
|
||||||
|
if (mapOperationsHandler->size() > 0 && !getCpuAddressForMapping()) {
|
||||||
|
needWait = true;
|
||||||
|
}
|
||||||
|
context->getMapOperationsStorage().removeHandler(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!destructorCallbacks.empty()) {
|
if (!destructorCallbacks.empty()) {
|
||||||
needWait = true;
|
needWait = true;
|
||||||
}
|
}
|
||||||
|
@ -172,7 +177,7 @@ cl_int MemObj::getMemObjectInfo(cl_mem_info paramName,
|
||||||
|
|
||||||
case CL_MEM_MAP_COUNT:
|
case CL_MEM_MAP_COUNT:
|
||||||
srcParamSize = sizeof(mapCount);
|
srcParamSize = sizeof(mapCount);
|
||||||
mapCount = static_cast<cl_uint>(mapOperationsHandler.size());
|
mapCount = static_cast<cl_uint>(getMapOperationsHandler().size());
|
||||||
srcParam = &mapCount;
|
srcParam = &mapCount;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -382,11 +387,26 @@ void *MemObj::getBasePtrForMap(uint32_t rootDeviceIndex) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MapOperationsHandler &MemObj::getMapOperationsHandler() {
|
||||||
|
return context->getMapOperationsStorage().getHandler(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
MapOperationsHandler *MemObj::getMapOperationsHandlerIfExists() {
|
||||||
|
return context->getMapOperationsStorage().getHandlerIfExists(this);
|
||||||
|
}
|
||||||
|
|
||||||
bool MemObj::addMappedPtr(void *ptr, size_t ptrLength, cl_map_flags &mapFlags,
|
bool MemObj::addMappedPtr(void *ptr, size_t ptrLength, cl_map_flags &mapFlags,
|
||||||
MemObjSizeArray &size, MemObjOffsetArray &offset,
|
MemObjSizeArray &size, MemObjOffsetArray &offset,
|
||||||
uint32_t mipLevel) {
|
uint32_t mipLevel) {
|
||||||
return mapOperationsHandler.add(ptr, ptrLength, mapFlags, size, offset,
|
return getMapOperationsHandler().add(ptr, ptrLength, mapFlags, size, offset, mipLevel);
|
||||||
mipLevel);
|
}
|
||||||
|
|
||||||
|
bool MemObj::findMappedPtr(void *mappedPtr, MapInfo &outMapInfo) {
|
||||||
|
return getMapOperationsHandler().find(mappedPtr, outMapInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MemObj::removeMappedPtr(void *mappedPtr) {
|
||||||
|
getMapOperationsHandler().remove(mappedPtr);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MemObj::isTiledAllocation() const {
|
bool MemObj::isTiledAllocation() const {
|
||||||
|
|
|
@ -86,9 +86,11 @@ class MemObj : public BaseObject<_cl_mem> {
|
||||||
bool getIsObjectRedescribed() const { return isObjectRedescribed; };
|
bool getIsObjectRedescribed() const { return isObjectRedescribed; };
|
||||||
size_t getSize() const;
|
size_t getSize() const;
|
||||||
|
|
||||||
|
MapOperationsHandler &getMapOperationsHandler();
|
||||||
|
MapOperationsHandler *getMapOperationsHandlerIfExists();
|
||||||
bool addMappedPtr(void *ptr, size_t ptrLength, cl_map_flags &mapFlags, MemObjSizeArray &size, MemObjOffsetArray &offset, uint32_t mipLevel);
|
bool addMappedPtr(void *ptr, size_t ptrLength, cl_map_flags &mapFlags, MemObjSizeArray &size, MemObjOffsetArray &offset, uint32_t mipLevel);
|
||||||
bool findMappedPtr(void *mappedPtr, MapInfo &outMapInfo) { return mapOperationsHandler.find(mappedPtr, outMapInfo); }
|
bool findMappedPtr(void *mappedPtr, MapInfo &outMapInfo);
|
||||||
void removeMappedPtr(void *mappedPtr) { mapOperationsHandler.remove(mappedPtr); }
|
void removeMappedPtr(void *mappedPtr);
|
||||||
void *getBasePtrForMap(uint32_t rootDeviceIndex);
|
void *getBasePtrForMap(uint32_t rootDeviceIndex);
|
||||||
|
|
||||||
MOCKABLE_VIRTUAL void setAllocatedMapPtr(void *allocatedMapPtr);
|
MOCKABLE_VIRTUAL void setAllocatedMapPtr(void *allocatedMapPtr);
|
||||||
|
@ -173,7 +175,6 @@ class MemObj : public BaseObject<_cl_mem> {
|
||||||
void *memoryStorage;
|
void *memoryStorage;
|
||||||
void *hostPtr;
|
void *hostPtr;
|
||||||
void *allocatedMapPtr = nullptr;
|
void *allocatedMapPtr = nullptr;
|
||||||
MapOperationsHandler mapOperationsHandler;
|
|
||||||
size_t offset = 0;
|
size_t offset = 0;
|
||||||
MemObj *associatedMemObject = nullptr;
|
MemObj *associatedMemObject = nullptr;
|
||||||
cl_uint refCount = 0;
|
cl_uint refCount = 0;
|
||||||
|
|
|
@ -89,7 +89,9 @@ TEST_F(clEnqueueUnmapMemObjTests, givenInvalidAddressWhenUnmappingOnGpuThenRetur
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(clEnqueueUnmapMemObjTests, GivenInvalidMemObjectTypeWhenUnmappingImageThenInvalidMemObjectIsReturned) {
|
TEST_F(clEnqueueUnmapMemObjTests, GivenInvalidMemObjectTypeWhenUnmappingImageThenInvalidMemObjectIsReturned) {
|
||||||
MockBuffer buffer{};
|
MockContext context{};
|
||||||
|
MockGraphicsAllocation allocation{};
|
||||||
|
MockBuffer buffer{&context, allocation};
|
||||||
cl_int retVal = CL_SUCCESS;
|
cl_int retVal = CL_SUCCESS;
|
||||||
|
|
||||||
auto mappedPtr = clEnqueueMapBuffer(pCommandQueue, &buffer, CL_TRUE, CL_MAP_READ, 0, 1, 0, nullptr, nullptr, &retVal);
|
auto mappedPtr = clEnqueueMapBuffer(pCommandQueue, &buffer, CL_TRUE, CL_MAP_READ, 0, 1, 0, nullptr, nullptr, &retVal);
|
||||||
|
|
|
@ -59,7 +59,7 @@ struct EnqueueWaitlistTest : public EnqueueWaitlistFixture,
|
||||||
void SetUp() override {
|
void SetUp() override {
|
||||||
EnqueueWaitlistFixture::SetUp();
|
EnqueueWaitlistFixture::SetUp();
|
||||||
buffer = BufferHelper<>::create();
|
buffer = BufferHelper<>::create();
|
||||||
bufferNonZeroCopy = new UnalignedBuffer;
|
bufferNonZeroCopy = new UnalignedBuffer(BufferDefaults::context, &bufferNonZeroCopyAlloc);
|
||||||
image = Image1dHelper<>::create(BufferDefaults::context);
|
image = Image1dHelper<>::create(BufferDefaults::context);
|
||||||
imageNonZeroCopy = ImageHelper<ImageUseHostPtr<Image1dDefaults>>::create(BufferDefaults::context);
|
imageNonZeroCopy = ImageHelper<ImageUseHostPtr<Image1dDefaults>>::create(BufferDefaults::context);
|
||||||
}
|
}
|
||||||
|
@ -75,6 +75,7 @@ struct EnqueueWaitlistTest : public EnqueueWaitlistFixture,
|
||||||
cl_int retVal = CL_SUCCESS;
|
cl_int retVal = CL_SUCCESS;
|
||||||
cl_int error = CL_SUCCESS;
|
cl_int error = CL_SUCCESS;
|
||||||
|
|
||||||
|
MockGraphicsAllocation bufferNonZeroCopyAlloc{nullptr, MemoryConstants::pageSize};
|
||||||
Buffer *buffer;
|
Buffer *buffer;
|
||||||
Buffer *bufferNonZeroCopy;
|
Buffer *bufferNonZeroCopy;
|
||||||
Image *image;
|
Image *image;
|
||||||
|
|
|
@ -20,8 +20,6 @@ using namespace NEO;
|
||||||
struct MultipleMapBufferTest : public ClDeviceFixture, public ::testing::Test {
|
struct MultipleMapBufferTest : public ClDeviceFixture, public ::testing::Test {
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct MockBuffer : public BufferHw<T> {
|
struct MockBuffer : public BufferHw<T> {
|
||||||
using Buffer::mapOperationsHandler;
|
|
||||||
|
|
||||||
template <class... Params>
|
template <class... Params>
|
||||||
MockBuffer(Params... params) : BufferHw<T>(params...) {
|
MockBuffer(Params... params) : BufferHw<T>(params...) {
|
||||||
this->createFunction = BufferHw<T>::create;
|
this->createFunction = BufferHw<T>::create;
|
||||||
|
@ -135,13 +133,13 @@ HWTEST_F(MultipleMapBufferTest, givenValidReadAndWriteBufferWhenMappedOnGpuThenA
|
||||||
size_t size = 3;
|
size_t size = 3;
|
||||||
void *mappedPtr = clEnqueueMapBuffer(cmdQ.get(), buffer.get(), CL_FALSE, CL_MAP_WRITE, offset, size, 0, nullptr, nullptr, nullptr);
|
void *mappedPtr = clEnqueueMapBuffer(cmdQ.get(), buffer.get(), CL_FALSE, CL_MAP_WRITE, offset, size, 0, nullptr, nullptr, nullptr);
|
||||||
EXPECT_NE(nullptr, mappedPtr);
|
EXPECT_NE(nullptr, mappedPtr);
|
||||||
EXPECT_EQ(1u, buffer->mapOperationsHandler.size());
|
EXPECT_EQ(1u, buffer->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(cmdQ->readBufferCalled, 1u);
|
EXPECT_EQ(cmdQ->readBufferCalled, 1u);
|
||||||
EXPECT_EQ(cmdQ->enqueueSize, size);
|
EXPECT_EQ(cmdQ->enqueueSize, size);
|
||||||
EXPECT_EQ(cmdQ->enqueueOffset, offset);
|
EXPECT_EQ(cmdQ->enqueueOffset, offset);
|
||||||
|
|
||||||
retVal = clEnqueueUnmapMemObject(cmdQ.get(), buffer.get(), mappedPtr, 0, nullptr, nullptr);
|
retVal = clEnqueueUnmapMemObject(cmdQ.get(), buffer.get(), mappedPtr, 0, nullptr, nullptr);
|
||||||
EXPECT_EQ(0u, buffer->mapOperationsHandler.size());
|
EXPECT_EQ(0u, buffer->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(cmdQ->writeBufferCalled, 1u);
|
EXPECT_EQ(cmdQ->writeBufferCalled, 1u);
|
||||||
EXPECT_EQ(cmdQ->enqueueSize, size);
|
EXPECT_EQ(cmdQ->enqueueSize, size);
|
||||||
EXPECT_EQ(cmdQ->enqueueOffset, offset);
|
EXPECT_EQ(cmdQ->enqueueOffset, offset);
|
||||||
|
@ -157,11 +155,11 @@ HWTEST_F(MultipleMapBufferTest, givenReadOnlyMapWhenUnmappedOnGpuThenEnqueueMark
|
||||||
size_t size = 3;
|
size_t size = 3;
|
||||||
void *mappedPtr = clEnqueueMapBuffer(cmdQ.get(), buffer.get(), CL_FALSE, CL_MAP_READ, offset, size, 0, nullptr, nullptr, nullptr);
|
void *mappedPtr = clEnqueueMapBuffer(cmdQ.get(), buffer.get(), CL_FALSE, CL_MAP_READ, offset, size, 0, nullptr, nullptr, nullptr);
|
||||||
EXPECT_NE(nullptr, mappedPtr);
|
EXPECT_NE(nullptr, mappedPtr);
|
||||||
EXPECT_EQ(1u, buffer->mapOperationsHandler.size());
|
EXPECT_EQ(1u, buffer->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(cmdQ->readBufferCalled, 1u);
|
EXPECT_EQ(cmdQ->readBufferCalled, 1u);
|
||||||
|
|
||||||
retVal = clEnqueueUnmapMemObject(cmdQ.get(), buffer.get(), mappedPtr, 0, nullptr, nullptr);
|
retVal = clEnqueueUnmapMemObject(cmdQ.get(), buffer.get(), mappedPtr, 0, nullptr, nullptr);
|
||||||
EXPECT_EQ(0u, buffer->mapOperationsHandler.size());
|
EXPECT_EQ(0u, buffer->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(cmdQ->writeBufferCalled, 0u);
|
EXPECT_EQ(cmdQ->writeBufferCalled, 0u);
|
||||||
EXPECT_EQ(cmdQ->enqueueMarkerCalled, 1u);
|
EXPECT_EQ(cmdQ->enqueueMarkerCalled, 1u);
|
||||||
}
|
}
|
||||||
|
@ -175,12 +173,12 @@ HWTEST_F(MultipleMapBufferTest, givenWriteInvalidateMapWhenMappedOnGpuThenCallEn
|
||||||
size_t size = 3;
|
size_t size = 3;
|
||||||
void *mappedPtr = clEnqueueMapBuffer(cmdQ.get(), buffer.get(), CL_FALSE, CL_MAP_WRITE_INVALIDATE_REGION, offset, size, 0, nullptr, nullptr, nullptr);
|
void *mappedPtr = clEnqueueMapBuffer(cmdQ.get(), buffer.get(), CL_FALSE, CL_MAP_WRITE_INVALIDATE_REGION, offset, size, 0, nullptr, nullptr, nullptr);
|
||||||
EXPECT_NE(nullptr, mappedPtr);
|
EXPECT_NE(nullptr, mappedPtr);
|
||||||
EXPECT_EQ(1u, buffer->mapOperationsHandler.size());
|
EXPECT_EQ(1u, buffer->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(cmdQ->readBufferCalled, 0u);
|
EXPECT_EQ(cmdQ->readBufferCalled, 0u);
|
||||||
EXPECT_EQ(cmdQ->enqueueMarkerCalled, 1u);
|
EXPECT_EQ(cmdQ->enqueueMarkerCalled, 1u);
|
||||||
|
|
||||||
retVal = clEnqueueUnmapMemObject(cmdQ.get(), buffer.get(), mappedPtr, 0, nullptr, nullptr);
|
retVal = clEnqueueUnmapMemObject(cmdQ.get(), buffer.get(), mappedPtr, 0, nullptr, nullptr);
|
||||||
EXPECT_EQ(0u, buffer->mapOperationsHandler.size());
|
EXPECT_EQ(0u, buffer->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(cmdQ->writeBufferCalled, 1u);
|
EXPECT_EQ(cmdQ->writeBufferCalled, 1u);
|
||||||
EXPECT_EQ(cmdQ->enqueueMarkerCalled, 1u);
|
EXPECT_EQ(cmdQ->enqueueMarkerCalled, 1u);
|
||||||
}
|
}
|
||||||
|
@ -190,7 +188,7 @@ HWTEST_F(MultipleMapBufferTest, givenNotMappedPtrWhenUnmapedOnGpuThenReturnError
|
||||||
auto cmdQ = createMockCmdQ<FamilyType>();
|
auto cmdQ = createMockCmdQ<FamilyType>();
|
||||||
EXPECT_FALSE(buffer->mappingOnCpuAllowed());
|
EXPECT_FALSE(buffer->mappingOnCpuAllowed());
|
||||||
|
|
||||||
EXPECT_EQ(0u, buffer->mapOperationsHandler.size());
|
EXPECT_EQ(0u, buffer->getMapOperationsHandler().size());
|
||||||
retVal = clEnqueueUnmapMemObject(cmdQ.get(), buffer.get(), buffer->getBasePtrForMap(cmdQ->getDevice().getRootDeviceIndex()), 0, nullptr, nullptr);
|
retVal = clEnqueueUnmapMemObject(cmdQ.get(), buffer.get(), buffer->getBasePtrForMap(cmdQ->getDevice().getRootDeviceIndex()), 0, nullptr, nullptr);
|
||||||
EXPECT_EQ(CL_INVALID_VALUE, retVal);
|
EXPECT_EQ(CL_INVALID_VALUE, retVal);
|
||||||
}
|
}
|
||||||
|
@ -206,7 +204,7 @@ HWTEST_F(MultipleMapBufferTest, givenErrorFromReadBufferWhenMappedOnGpuThenDontA
|
||||||
void *mappedPtr = clEnqueueMapBuffer(cmdQ.get(), buffer.get(), CL_FALSE, CL_MAP_READ, offset, size, 0, nullptr, nullptr, &retVal);
|
void *mappedPtr = clEnqueueMapBuffer(cmdQ.get(), buffer.get(), CL_FALSE, CL_MAP_READ, offset, size, 0, nullptr, nullptr, &retVal);
|
||||||
EXPECT_EQ(nullptr, mappedPtr);
|
EXPECT_EQ(nullptr, mappedPtr);
|
||||||
EXPECT_EQ(CL_OUT_OF_RESOURCES, retVal);
|
EXPECT_EQ(CL_OUT_OF_RESOURCES, retVal);
|
||||||
EXPECT_EQ(0u, buffer->mapOperationsHandler.size());
|
EXPECT_EQ(0u, buffer->getMapOperationsHandler().size());
|
||||||
}
|
}
|
||||||
|
|
||||||
HWTEST_F(MultipleMapBufferTest, givenErrorFromWriteBufferWhenUnmappedOnGpuThenDontRemoveMappedPtr) {
|
HWTEST_F(MultipleMapBufferTest, givenErrorFromWriteBufferWhenUnmappedOnGpuThenDontRemoveMappedPtr) {
|
||||||
|
@ -219,12 +217,12 @@ HWTEST_F(MultipleMapBufferTest, givenErrorFromWriteBufferWhenUnmappedOnGpuThenDo
|
||||||
size_t size = 3;
|
size_t size = 3;
|
||||||
void *mappedPtr = clEnqueueMapBuffer(cmdQ.get(), buffer.get(), CL_FALSE, CL_MAP_WRITE, offset, size, 0, nullptr, nullptr, &retVal);
|
void *mappedPtr = clEnqueueMapBuffer(cmdQ.get(), buffer.get(), CL_FALSE, CL_MAP_WRITE, offset, size, 0, nullptr, nullptr, &retVal);
|
||||||
EXPECT_NE(nullptr, mappedPtr);
|
EXPECT_NE(nullptr, mappedPtr);
|
||||||
EXPECT_EQ(1u, buffer->mapOperationsHandler.size());
|
EXPECT_EQ(1u, buffer->getMapOperationsHandler().size());
|
||||||
|
|
||||||
retVal = clEnqueueUnmapMemObject(cmdQ.get(), buffer.get(), mappedPtr, 0, nullptr, nullptr);
|
retVal = clEnqueueUnmapMemObject(cmdQ.get(), buffer.get(), mappedPtr, 0, nullptr, nullptr);
|
||||||
EXPECT_EQ(1u, cmdQ->writeBufferCalled);
|
EXPECT_EQ(1u, cmdQ->writeBufferCalled);
|
||||||
EXPECT_EQ(CL_OUT_OF_RESOURCES, retVal);
|
EXPECT_EQ(CL_OUT_OF_RESOURCES, retVal);
|
||||||
EXPECT_EQ(1u, buffer->mapOperationsHandler.size());
|
EXPECT_EQ(1u, buffer->getMapOperationsHandler().size());
|
||||||
}
|
}
|
||||||
|
|
||||||
HWTEST_F(MultipleMapBufferTest, givenUnblockedQueueWhenMappedOnCpuThenAddMappedPtrAndRemoveOnUnmap) {
|
HWTEST_F(MultipleMapBufferTest, givenUnblockedQueueWhenMappedOnCpuThenAddMappedPtrAndRemoveOnUnmap) {
|
||||||
|
@ -236,13 +234,13 @@ HWTEST_F(MultipleMapBufferTest, givenUnblockedQueueWhenMappedOnCpuThenAddMappedP
|
||||||
size_t size = 3;
|
size_t size = 3;
|
||||||
void *mappedPtr = clEnqueueMapBuffer(cmdQ.get(), buffer.get(), CL_FALSE, CL_MAP_WRITE, offset, size, 0, nullptr, nullptr, &retVal);
|
void *mappedPtr = clEnqueueMapBuffer(cmdQ.get(), buffer.get(), CL_FALSE, CL_MAP_WRITE, offset, size, 0, nullptr, nullptr, &retVal);
|
||||||
EXPECT_NE(nullptr, mappedPtr);
|
EXPECT_NE(nullptr, mappedPtr);
|
||||||
EXPECT_EQ(1u, buffer->mapOperationsHandler.size());
|
EXPECT_EQ(1u, buffer->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(1u, buffer->transferToHostPtrCalled);
|
EXPECT_EQ(1u, buffer->transferToHostPtrCalled);
|
||||||
EXPECT_EQ(buffer->copySize, size);
|
EXPECT_EQ(buffer->copySize, size);
|
||||||
EXPECT_EQ(buffer->copyOffset, offset);
|
EXPECT_EQ(buffer->copyOffset, offset);
|
||||||
|
|
||||||
retVal = clEnqueueUnmapMemObject(cmdQ.get(), buffer.get(), mappedPtr, 0, nullptr, nullptr);
|
retVal = clEnqueueUnmapMemObject(cmdQ.get(), buffer.get(), mappedPtr, 0, nullptr, nullptr);
|
||||||
EXPECT_EQ(0u, buffer->mapOperationsHandler.size());
|
EXPECT_EQ(0u, buffer->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(1u, buffer->transferFromHostPtrCalled);
|
EXPECT_EQ(1u, buffer->transferFromHostPtrCalled);
|
||||||
EXPECT_EQ(buffer->copySize, size);
|
EXPECT_EQ(buffer->copySize, size);
|
||||||
EXPECT_EQ(buffer->copyOffset, offset);
|
EXPECT_EQ(buffer->copyOffset, offset);
|
||||||
|
@ -257,11 +255,11 @@ HWTEST_F(MultipleMapBufferTest, givenUnblockedQueueWhenReadOnlyMappedOnCpuThenDo
|
||||||
size_t size = 3;
|
size_t size = 3;
|
||||||
void *mappedPtr = clEnqueueMapBuffer(cmdQ.get(), buffer.get(), CL_FALSE, CL_MAP_READ, offset, size, 0, nullptr, nullptr, &retVal);
|
void *mappedPtr = clEnqueueMapBuffer(cmdQ.get(), buffer.get(), CL_FALSE, CL_MAP_READ, offset, size, 0, nullptr, nullptr, &retVal);
|
||||||
EXPECT_NE(nullptr, mappedPtr);
|
EXPECT_NE(nullptr, mappedPtr);
|
||||||
EXPECT_EQ(1u, buffer->mapOperationsHandler.size());
|
EXPECT_EQ(1u, buffer->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(1u, buffer->transferToHostPtrCalled);
|
EXPECT_EQ(1u, buffer->transferToHostPtrCalled);
|
||||||
|
|
||||||
retVal = clEnqueueUnmapMemObject(cmdQ.get(), buffer.get(), mappedPtr, 0, nullptr, nullptr);
|
retVal = clEnqueueUnmapMemObject(cmdQ.get(), buffer.get(), mappedPtr, 0, nullptr, nullptr);
|
||||||
EXPECT_EQ(0u, buffer->mapOperationsHandler.size());
|
EXPECT_EQ(0u, buffer->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(0u, buffer->transferFromHostPtrCalled);
|
EXPECT_EQ(0u, buffer->transferFromHostPtrCalled);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -274,11 +272,11 @@ HWTEST_F(MultipleMapBufferTest, givenUnblockedQueueWhenWriteInvalidateMappedOnCp
|
||||||
size_t size = 3;
|
size_t size = 3;
|
||||||
void *mappedPtr = clEnqueueMapBuffer(cmdQ.get(), buffer.get(), CL_FALSE, CL_MAP_WRITE_INVALIDATE_REGION, offset, size, 0, nullptr, nullptr, &retVal);
|
void *mappedPtr = clEnqueueMapBuffer(cmdQ.get(), buffer.get(), CL_FALSE, CL_MAP_WRITE_INVALIDATE_REGION, offset, size, 0, nullptr, nullptr, &retVal);
|
||||||
EXPECT_NE(nullptr, mappedPtr);
|
EXPECT_NE(nullptr, mappedPtr);
|
||||||
EXPECT_EQ(1u, buffer->mapOperationsHandler.size());
|
EXPECT_EQ(1u, buffer->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(0u, buffer->transferToHostPtrCalled);
|
EXPECT_EQ(0u, buffer->transferToHostPtrCalled);
|
||||||
|
|
||||||
retVal = clEnqueueUnmapMemObject(cmdQ.get(), buffer.get(), mappedPtr, 0, nullptr, nullptr);
|
retVal = clEnqueueUnmapMemObject(cmdQ.get(), buffer.get(), mappedPtr, 0, nullptr, nullptr);
|
||||||
EXPECT_EQ(0u, buffer->mapOperationsHandler.size());
|
EXPECT_EQ(0u, buffer->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(1u, buffer->transferFromHostPtrCalled);
|
EXPECT_EQ(1u, buffer->transferFromHostPtrCalled);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -296,14 +294,14 @@ HWTEST_F(MultipleMapBufferTest, givenBlockedQueueWhenMappedOnCpuThenAddMappedPtr
|
||||||
void *mappedPtr = clEnqueueMapBuffer(cmdQ.get(), buffer.get(), CL_FALSE, CL_MAP_WRITE, offset, size, 1, &clMapEvent, nullptr, &retVal);
|
void *mappedPtr = clEnqueueMapBuffer(cmdQ.get(), buffer.get(), CL_FALSE, CL_MAP_WRITE, offset, size, 1, &clMapEvent, nullptr, &retVal);
|
||||||
mapEvent.setStatus(CL_COMPLETE);
|
mapEvent.setStatus(CL_COMPLETE);
|
||||||
EXPECT_NE(nullptr, mappedPtr);
|
EXPECT_NE(nullptr, mappedPtr);
|
||||||
EXPECT_EQ(1u, buffer->mapOperationsHandler.size());
|
EXPECT_EQ(1u, buffer->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(buffer->copySize, size);
|
EXPECT_EQ(buffer->copySize, size);
|
||||||
EXPECT_EQ(buffer->copyOffset, offset);
|
EXPECT_EQ(buffer->copyOffset, offset);
|
||||||
EXPECT_EQ(1u, buffer->transferToHostPtrCalled);
|
EXPECT_EQ(1u, buffer->transferToHostPtrCalled);
|
||||||
|
|
||||||
retVal = clEnqueueUnmapMemObject(cmdQ.get(), buffer.get(), mappedPtr, 1, &clUnmapEvent, nullptr);
|
retVal = clEnqueueUnmapMemObject(cmdQ.get(), buffer.get(), mappedPtr, 1, &clUnmapEvent, nullptr);
|
||||||
unmapEvent.setStatus(CL_COMPLETE);
|
unmapEvent.setStatus(CL_COMPLETE);
|
||||||
EXPECT_EQ(0u, buffer->mapOperationsHandler.size());
|
EXPECT_EQ(0u, buffer->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(buffer->copySize, size);
|
EXPECT_EQ(buffer->copySize, size);
|
||||||
EXPECT_EQ(buffer->copyOffset, offset);
|
EXPECT_EQ(buffer->copyOffset, offset);
|
||||||
EXPECT_EQ(1u, buffer->transferFromHostPtrCalled);
|
EXPECT_EQ(1u, buffer->transferFromHostPtrCalled);
|
||||||
|
@ -324,11 +322,11 @@ HWTEST_F(MultipleMapBufferTest, givenBlockedQueueWhenMappedReadOnlyOnCpuThenDont
|
||||||
mapEvent.setStatus(CL_COMPLETE);
|
mapEvent.setStatus(CL_COMPLETE);
|
||||||
EXPECT_NE(nullptr, mappedPtr);
|
EXPECT_NE(nullptr, mappedPtr);
|
||||||
EXPECT_EQ(1u, buffer->transferToHostPtrCalled);
|
EXPECT_EQ(1u, buffer->transferToHostPtrCalled);
|
||||||
EXPECT_EQ(1u, buffer->mapOperationsHandler.size());
|
EXPECT_EQ(1u, buffer->getMapOperationsHandler().size());
|
||||||
|
|
||||||
retVal = clEnqueueUnmapMemObject(cmdQ.get(), buffer.get(), mappedPtr, 1, &clUnmapEvent, nullptr);
|
retVal = clEnqueueUnmapMemObject(cmdQ.get(), buffer.get(), mappedPtr, 1, &clUnmapEvent, nullptr);
|
||||||
unmapEvent.setStatus(CL_COMPLETE);
|
unmapEvent.setStatus(CL_COMPLETE);
|
||||||
EXPECT_EQ(0u, buffer->mapOperationsHandler.size());
|
EXPECT_EQ(0u, buffer->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(0u, buffer->transferFromHostPtrCalled);
|
EXPECT_EQ(0u, buffer->transferFromHostPtrCalled);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -355,26 +353,26 @@ HWTEST_F(MultipleMapBufferTest, givenMultimpleMapsWhenUnmappingThenRemoveCorrect
|
||||||
mappedPtrs[i].ptr = clEnqueueMapBuffer(cmdQ.get(), buffer.get(), CL_FALSE, CL_MAP_WRITE,
|
mappedPtrs[i].ptr = clEnqueueMapBuffer(cmdQ.get(), buffer.get(), CL_FALSE, CL_MAP_WRITE,
|
||||||
mappedPtrs[i].offset[0], mappedPtrs[i].size[0], 0, nullptr, nullptr, &retVal);
|
mappedPtrs[i].offset[0], mappedPtrs[i].size[0], 0, nullptr, nullptr, &retVal);
|
||||||
EXPECT_NE(nullptr, mappedPtrs[i].ptr);
|
EXPECT_NE(nullptr, mappedPtrs[i].ptr);
|
||||||
EXPECT_EQ(i + 1, buffer->mapOperationsHandler.size());
|
EXPECT_EQ(i + 1, buffer->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(cmdQ->enqueueSize, mappedPtrs[i].size[0]);
|
EXPECT_EQ(cmdQ->enqueueSize, mappedPtrs[i].size[0]);
|
||||||
EXPECT_EQ(cmdQ->enqueueOffset, mappedPtrs[i].offset[0]);
|
EXPECT_EQ(cmdQ->enqueueOffset, mappedPtrs[i].offset[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// reordered unmap
|
// reordered unmap
|
||||||
clEnqueueUnmapMemObject(cmdQ.get(), buffer.get(), mappedPtrs[1].ptr, 0, nullptr, nullptr);
|
clEnqueueUnmapMemObject(cmdQ.get(), buffer.get(), mappedPtrs[1].ptr, 0, nullptr, nullptr);
|
||||||
EXPECT_EQ(2u, buffer->mapOperationsHandler.size());
|
EXPECT_EQ(2u, buffer->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(cmdQ->unmapPtr, mappedPtrs[1].ptr);
|
EXPECT_EQ(cmdQ->unmapPtr, mappedPtrs[1].ptr);
|
||||||
EXPECT_EQ(cmdQ->enqueueSize, mappedPtrs[1].size[0]);
|
EXPECT_EQ(cmdQ->enqueueSize, mappedPtrs[1].size[0]);
|
||||||
EXPECT_EQ(cmdQ->enqueueOffset, mappedPtrs[1].offset[0]);
|
EXPECT_EQ(cmdQ->enqueueOffset, mappedPtrs[1].offset[0]);
|
||||||
|
|
||||||
clEnqueueUnmapMemObject(cmdQ.get(), buffer.get(), mappedPtrs[2].ptr, 0, nullptr, nullptr);
|
clEnqueueUnmapMemObject(cmdQ.get(), buffer.get(), mappedPtrs[2].ptr, 0, nullptr, nullptr);
|
||||||
EXPECT_EQ(1u, buffer->mapOperationsHandler.size());
|
EXPECT_EQ(1u, buffer->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(cmdQ->unmapPtr, mappedPtrs[2].ptr);
|
EXPECT_EQ(cmdQ->unmapPtr, mappedPtrs[2].ptr);
|
||||||
EXPECT_EQ(cmdQ->enqueueSize, mappedPtrs[2].size[0]);
|
EXPECT_EQ(cmdQ->enqueueSize, mappedPtrs[2].size[0]);
|
||||||
EXPECT_EQ(cmdQ->enqueueOffset, mappedPtrs[2].offset[0]);
|
EXPECT_EQ(cmdQ->enqueueOffset, mappedPtrs[2].offset[0]);
|
||||||
|
|
||||||
clEnqueueUnmapMemObject(cmdQ.get(), buffer.get(), mappedPtrs[0].ptr, 0, nullptr, nullptr);
|
clEnqueueUnmapMemObject(cmdQ.get(), buffer.get(), mappedPtrs[0].ptr, 0, nullptr, nullptr);
|
||||||
EXPECT_EQ(0u, buffer->mapOperationsHandler.size());
|
EXPECT_EQ(0u, buffer->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(cmdQ->unmapPtr, mappedPtrs[0].ptr);
|
EXPECT_EQ(cmdQ->unmapPtr, mappedPtrs[0].ptr);
|
||||||
EXPECT_EQ(cmdQ->enqueueSize, mappedPtrs[0].size[0]);
|
EXPECT_EQ(cmdQ->enqueueSize, mappedPtrs[0].size[0]);
|
||||||
EXPECT_EQ(cmdQ->enqueueOffset, mappedPtrs[0].offset[0]);
|
EXPECT_EQ(cmdQ->enqueueOffset, mappedPtrs[0].offset[0]);
|
||||||
|
@ -390,13 +388,13 @@ HWTEST_F(MultipleMapBufferTest, givenOverlapingPtrWhenMappingOnGpuForWriteThenRe
|
||||||
void *mappedPtr = clEnqueueMapBuffer(cmdQ.get(), buffer.get(), CL_FALSE, CL_MAP_READ, offset, size, 0, nullptr, nullptr, &retVal);
|
void *mappedPtr = clEnqueueMapBuffer(cmdQ.get(), buffer.get(), CL_FALSE, CL_MAP_READ, offset, size, 0, nullptr, nullptr, &retVal);
|
||||||
EXPECT_NE(nullptr, mappedPtr);
|
EXPECT_NE(nullptr, mappedPtr);
|
||||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||||
EXPECT_EQ(1u, buffer->mapOperationsHandler.size());
|
EXPECT_EQ(1u, buffer->getMapOperationsHandler().size());
|
||||||
|
|
||||||
offset++;
|
offset++;
|
||||||
void *mappedPtr2 = clEnqueueMapBuffer(cmdQ.get(), buffer.get(), CL_FALSE, CL_MAP_WRITE, offset, size, 0, nullptr, nullptr, &retVal);
|
void *mappedPtr2 = clEnqueueMapBuffer(cmdQ.get(), buffer.get(), CL_FALSE, CL_MAP_WRITE, offset, size, 0, nullptr, nullptr, &retVal);
|
||||||
EXPECT_EQ(nullptr, mappedPtr2);
|
EXPECT_EQ(nullptr, mappedPtr2);
|
||||||
EXPECT_EQ(CL_INVALID_OPERATION, retVal);
|
EXPECT_EQ(CL_INVALID_OPERATION, retVal);
|
||||||
EXPECT_EQ(1u, buffer->mapOperationsHandler.size());
|
EXPECT_EQ(1u, buffer->getMapOperationsHandler().size());
|
||||||
}
|
}
|
||||||
|
|
||||||
HWTEST_F(MultipleMapBufferTest, givenOverlapingPtrWhenMappingOnCpuForWriteThenReturnError) {
|
HWTEST_F(MultipleMapBufferTest, givenOverlapingPtrWhenMappingOnCpuForWriteThenReturnError) {
|
||||||
|
@ -409,11 +407,11 @@ HWTEST_F(MultipleMapBufferTest, givenOverlapingPtrWhenMappingOnCpuForWriteThenRe
|
||||||
void *mappedPtr = clEnqueueMapBuffer(cmdQ.get(), buffer.get(), CL_FALSE, CL_MAP_READ, offset, size, 0, nullptr, nullptr, &retVal);
|
void *mappedPtr = clEnqueueMapBuffer(cmdQ.get(), buffer.get(), CL_FALSE, CL_MAP_READ, offset, size, 0, nullptr, nullptr, &retVal);
|
||||||
EXPECT_NE(nullptr, mappedPtr);
|
EXPECT_NE(nullptr, mappedPtr);
|
||||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||||
EXPECT_EQ(1u, buffer->mapOperationsHandler.size());
|
EXPECT_EQ(1u, buffer->getMapOperationsHandler().size());
|
||||||
|
|
||||||
offset++;
|
offset++;
|
||||||
void *mappedPtr2 = clEnqueueMapBuffer(cmdQ.get(), buffer.get(), CL_FALSE, CL_MAP_WRITE, offset, size, 0, nullptr, nullptr, &retVal);
|
void *mappedPtr2 = clEnqueueMapBuffer(cmdQ.get(), buffer.get(), CL_FALSE, CL_MAP_WRITE, offset, size, 0, nullptr, nullptr, &retVal);
|
||||||
EXPECT_EQ(nullptr, mappedPtr2);
|
EXPECT_EQ(nullptr, mappedPtr2);
|
||||||
EXPECT_EQ(CL_INVALID_OPERATION, retVal);
|
EXPECT_EQ(CL_INVALID_OPERATION, retVal);
|
||||||
EXPECT_EQ(1u, buffer->mapOperationsHandler.size());
|
EXPECT_EQ(1u, buffer->getMapOperationsHandler().size());
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,6 @@ extern ImageFactoryFuncs imageFactory[IGFX_MAX_CORE];
|
||||||
struct MultipleMapImageTest : public ClDeviceFixture, public ::testing::Test {
|
struct MultipleMapImageTest : public ClDeviceFixture, public ::testing::Test {
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct MockImage : public ImageHw<T> {
|
struct MockImage : public ImageHw<T> {
|
||||||
using Image::mapOperationsHandler;
|
|
||||||
using ImageHw<T>::isZeroCopy;
|
using ImageHw<T>::isZeroCopy;
|
||||||
using ImageHw<T>::ImageHw;
|
using ImageHw<T>::ImageHw;
|
||||||
|
|
||||||
|
@ -156,13 +155,13 @@ HWTEST_F(MultipleMapImageTest, givenValidReadAndWriteImageWhenMappedOnGpuThenAdd
|
||||||
MemObjSizeArray region = {{3, 4, 1}};
|
MemObjSizeArray region = {{3, 4, 1}};
|
||||||
void *mappedPtr = clEnqueueMapImage(cmdQ.get(), image.get(), CL_TRUE, CL_MAP_WRITE, &origin[0], ®ion[0], nullptr, nullptr, 0, nullptr, nullptr, &retVal);
|
void *mappedPtr = clEnqueueMapImage(cmdQ.get(), image.get(), CL_TRUE, CL_MAP_WRITE, &origin[0], ®ion[0], nullptr, nullptr, 0, nullptr, nullptr, &retVal);
|
||||||
EXPECT_NE(nullptr, mappedPtr);
|
EXPECT_NE(nullptr, mappedPtr);
|
||||||
EXPECT_EQ(1u, image->mapOperationsHandler.size());
|
EXPECT_EQ(1u, image->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(cmdQ->enqueueRegion, region);
|
EXPECT_EQ(cmdQ->enqueueRegion, region);
|
||||||
EXPECT_EQ(cmdQ->enqueueOrigin, origin);
|
EXPECT_EQ(cmdQ->enqueueOrigin, origin);
|
||||||
EXPECT_EQ(cmdQ->readImageCalled, 1u);
|
EXPECT_EQ(cmdQ->readImageCalled, 1u);
|
||||||
|
|
||||||
retVal = clEnqueueUnmapMemObject(cmdQ.get(), image.get(), mappedPtr, 0, nullptr, nullptr);
|
retVal = clEnqueueUnmapMemObject(cmdQ.get(), image.get(), mappedPtr, 0, nullptr, nullptr);
|
||||||
EXPECT_EQ(0u, image->mapOperationsHandler.size());
|
EXPECT_EQ(0u, image->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(cmdQ->enqueueRegion, region);
|
EXPECT_EQ(cmdQ->enqueueRegion, region);
|
||||||
EXPECT_EQ(cmdQ->enqueueOrigin, origin);
|
EXPECT_EQ(cmdQ->enqueueOrigin, origin);
|
||||||
EXPECT_EQ(cmdQ->unmapPtr, mappedPtr);
|
EXPECT_EQ(cmdQ->unmapPtr, mappedPtr);
|
||||||
|
@ -181,13 +180,13 @@ HWTEST_F(MultipleMapImageTest, givenReadOnlyMapWhenUnmappedOnGpuThenEnqueueMarke
|
||||||
MemObjSizeArray region = {{3, 4, 1}};
|
MemObjSizeArray region = {{3, 4, 1}};
|
||||||
void *mappedPtr = clEnqueueMapImage(cmdQ.get(), image.get(), CL_TRUE, CL_MAP_READ, &origin[0], ®ion[0], nullptr, nullptr, 0, nullptr, nullptr, &retVal);
|
void *mappedPtr = clEnqueueMapImage(cmdQ.get(), image.get(), CL_TRUE, CL_MAP_READ, &origin[0], ®ion[0], nullptr, nullptr, 0, nullptr, nullptr, &retVal);
|
||||||
EXPECT_NE(nullptr, mappedPtr);
|
EXPECT_NE(nullptr, mappedPtr);
|
||||||
EXPECT_EQ(1u, image->mapOperationsHandler.size());
|
EXPECT_EQ(1u, image->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(cmdQ->enqueueRegion, region);
|
EXPECT_EQ(cmdQ->enqueueRegion, region);
|
||||||
EXPECT_EQ(cmdQ->enqueueOrigin, origin);
|
EXPECT_EQ(cmdQ->enqueueOrigin, origin);
|
||||||
EXPECT_EQ(cmdQ->readImageCalled, 1u);
|
EXPECT_EQ(cmdQ->readImageCalled, 1u);
|
||||||
|
|
||||||
retVal = clEnqueueUnmapMemObject(cmdQ.get(), image.get(), mappedPtr, 0, nullptr, nullptr);
|
retVal = clEnqueueUnmapMemObject(cmdQ.get(), image.get(), mappedPtr, 0, nullptr, nullptr);
|
||||||
EXPECT_EQ(0u, image->mapOperationsHandler.size());
|
EXPECT_EQ(0u, image->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(cmdQ->writeImageCalled, 0u);
|
EXPECT_EQ(cmdQ->writeImageCalled, 0u);
|
||||||
EXPECT_EQ(cmdQ->enqueueMarkerCalled, 1u);
|
EXPECT_EQ(cmdQ->enqueueMarkerCalled, 1u);
|
||||||
}
|
}
|
||||||
|
@ -204,12 +203,12 @@ HWTEST_F(MultipleMapImageTest, givenWriteInvalidateMapWhenMappedOnGpuThenEnqueue
|
||||||
MemObjSizeArray region = {{3, 4, 1}};
|
MemObjSizeArray region = {{3, 4, 1}};
|
||||||
void *mappedPtr = clEnqueueMapImage(cmdQ.get(), image.get(), CL_TRUE, CL_MAP_WRITE_INVALIDATE_REGION, &origin[0], ®ion[0], nullptr, nullptr, 0, nullptr, nullptr, &retVal);
|
void *mappedPtr = clEnqueueMapImage(cmdQ.get(), image.get(), CL_TRUE, CL_MAP_WRITE_INVALIDATE_REGION, &origin[0], ®ion[0], nullptr, nullptr, 0, nullptr, nullptr, &retVal);
|
||||||
EXPECT_NE(nullptr, mappedPtr);
|
EXPECT_NE(nullptr, mappedPtr);
|
||||||
EXPECT_EQ(1u, image->mapOperationsHandler.size());
|
EXPECT_EQ(1u, image->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(cmdQ->readImageCalled, 0u);
|
EXPECT_EQ(cmdQ->readImageCalled, 0u);
|
||||||
EXPECT_EQ(cmdQ->enqueueMarkerCalled, 1u);
|
EXPECT_EQ(cmdQ->enqueueMarkerCalled, 1u);
|
||||||
|
|
||||||
retVal = clEnqueueUnmapMemObject(cmdQ.get(), image.get(), mappedPtr, 0, nullptr, nullptr);
|
retVal = clEnqueueUnmapMemObject(cmdQ.get(), image.get(), mappedPtr, 0, nullptr, nullptr);
|
||||||
EXPECT_EQ(0u, image->mapOperationsHandler.size());
|
EXPECT_EQ(0u, image->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(cmdQ->writeImageCalled, 1u);
|
EXPECT_EQ(cmdQ->writeImageCalled, 1u);
|
||||||
EXPECT_EQ(cmdQ->enqueueMarkerCalled, 1u);
|
EXPECT_EQ(cmdQ->enqueueMarkerCalled, 1u);
|
||||||
EXPECT_EQ(cmdQ->enqueueRegion, region);
|
EXPECT_EQ(cmdQ->enqueueRegion, region);
|
||||||
|
@ -221,7 +220,7 @@ HWTEST_F(MultipleMapImageTest, givenNotMappedPtrWhenUnmapedThenReturnError) {
|
||||||
auto cmdQ = createMockCmdQ<FamilyType>();
|
auto cmdQ = createMockCmdQ<FamilyType>();
|
||||||
EXPECT_EQ(!UnitTestHelper<FamilyType>::tiledImagesSupported, image->mappingOnCpuAllowed());
|
EXPECT_EQ(!UnitTestHelper<FamilyType>::tiledImagesSupported, image->mappingOnCpuAllowed());
|
||||||
|
|
||||||
EXPECT_EQ(0u, image->mapOperationsHandler.size());
|
EXPECT_EQ(0u, image->getMapOperationsHandler().size());
|
||||||
retVal = clEnqueueUnmapMemObject(cmdQ.get(), image.get(), image->getBasePtrForMap(cmdQ->getDevice().getRootDeviceIndex()), 0, nullptr, nullptr);
|
retVal = clEnqueueUnmapMemObject(cmdQ.get(), image.get(), image->getBasePtrForMap(cmdQ->getDevice().getRootDeviceIndex()), 0, nullptr, nullptr);
|
||||||
EXPECT_EQ(CL_INVALID_VALUE, retVal);
|
EXPECT_EQ(CL_INVALID_VALUE, retVal);
|
||||||
}
|
}
|
||||||
|
@ -240,7 +239,7 @@ HWTEST_F(MultipleMapImageTest, givenErrorFromReadImageWhenMappedOnGpuThenDontAdd
|
||||||
void *mappedPtr = clEnqueueMapImage(cmdQ.get(), image.get(), CL_TRUE, CL_MAP_READ, origin, region, nullptr, nullptr, 0, nullptr, nullptr, &retVal);
|
void *mappedPtr = clEnqueueMapImage(cmdQ.get(), image.get(), CL_TRUE, CL_MAP_READ, origin, region, nullptr, nullptr, 0, nullptr, nullptr, &retVal);
|
||||||
EXPECT_EQ(nullptr, mappedPtr);
|
EXPECT_EQ(nullptr, mappedPtr);
|
||||||
EXPECT_EQ(CL_OUT_OF_RESOURCES, retVal);
|
EXPECT_EQ(CL_OUT_OF_RESOURCES, retVal);
|
||||||
EXPECT_EQ(0u, image->mapOperationsHandler.size());
|
EXPECT_EQ(0u, image->getMapOperationsHandler().size());
|
||||||
}
|
}
|
||||||
|
|
||||||
HWTEST_F(MultipleMapImageTest, givenErrorFromWriteImageWhenUnmappedOnGpuThenDontRemoveMappedPtr) {
|
HWTEST_F(MultipleMapImageTest, givenErrorFromWriteImageWhenUnmappedOnGpuThenDontRemoveMappedPtr) {
|
||||||
|
@ -256,12 +255,12 @@ HWTEST_F(MultipleMapImageTest, givenErrorFromWriteImageWhenUnmappedOnGpuThenDont
|
||||||
size_t region[] = {2, 1, 1};
|
size_t region[] = {2, 1, 1};
|
||||||
void *mappedPtr = clEnqueueMapImage(cmdQ.get(), image.get(), CL_TRUE, CL_MAP_WRITE, origin, region, nullptr, nullptr, 0, nullptr, nullptr, &retVal);
|
void *mappedPtr = clEnqueueMapImage(cmdQ.get(), image.get(), CL_TRUE, CL_MAP_WRITE, origin, region, nullptr, nullptr, 0, nullptr, nullptr, &retVal);
|
||||||
EXPECT_NE(nullptr, mappedPtr);
|
EXPECT_NE(nullptr, mappedPtr);
|
||||||
EXPECT_EQ(1u, image->mapOperationsHandler.size());
|
EXPECT_EQ(1u, image->getMapOperationsHandler().size());
|
||||||
|
|
||||||
retVal = clEnqueueUnmapMemObject(cmdQ.get(), image.get(), mappedPtr, 0, nullptr, nullptr);
|
retVal = clEnqueueUnmapMemObject(cmdQ.get(), image.get(), mappedPtr, 0, nullptr, nullptr);
|
||||||
EXPECT_EQ(CL_OUT_OF_RESOURCES, retVal);
|
EXPECT_EQ(CL_OUT_OF_RESOURCES, retVal);
|
||||||
EXPECT_EQ(cmdQ->writeImageCalled, 1u);
|
EXPECT_EQ(cmdQ->writeImageCalled, 1u);
|
||||||
EXPECT_EQ(1u, image->mapOperationsHandler.size());
|
EXPECT_EQ(1u, image->getMapOperationsHandler().size());
|
||||||
}
|
}
|
||||||
|
|
||||||
HWTEST_F(MultipleMapImageTest, givenUnblockedQueueWhenMappedOnCpuThenAddMappedPtrAndRemoveOnUnmap) {
|
HWTEST_F(MultipleMapImageTest, givenUnblockedQueueWhenMappedOnCpuThenAddMappedPtrAndRemoveOnUnmap) {
|
||||||
|
@ -274,13 +273,13 @@ HWTEST_F(MultipleMapImageTest, givenUnblockedQueueWhenMappedOnCpuThenAddMappedPt
|
||||||
MemObjSizeArray region = {{3, 1, 1}};
|
MemObjSizeArray region = {{3, 1, 1}};
|
||||||
void *mappedPtr = clEnqueueMapImage(cmdQ.get(), image.get(), CL_TRUE, CL_MAP_WRITE, &origin[0], ®ion[0], nullptr, nullptr, 0, nullptr, nullptr, &retVal);
|
void *mappedPtr = clEnqueueMapImage(cmdQ.get(), image.get(), CL_TRUE, CL_MAP_WRITE, &origin[0], ®ion[0], nullptr, nullptr, 0, nullptr, nullptr, &retVal);
|
||||||
EXPECT_NE(nullptr, mappedPtr);
|
EXPECT_NE(nullptr, mappedPtr);
|
||||||
EXPECT_EQ(1u, image->mapOperationsHandler.size());
|
EXPECT_EQ(1u, image->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(1u, image->transferToHostPtrCalled);
|
EXPECT_EQ(1u, image->transferToHostPtrCalled);
|
||||||
EXPECT_EQ(image->copyRegion, region);
|
EXPECT_EQ(image->copyRegion, region);
|
||||||
EXPECT_EQ(image->copyOrigin, origin);
|
EXPECT_EQ(image->copyOrigin, origin);
|
||||||
|
|
||||||
retVal = clEnqueueUnmapMemObject(cmdQ.get(), image.get(), mappedPtr, 0, nullptr, nullptr);
|
retVal = clEnqueueUnmapMemObject(cmdQ.get(), image.get(), mappedPtr, 0, nullptr, nullptr);
|
||||||
EXPECT_EQ(0u, image->mapOperationsHandler.size());
|
EXPECT_EQ(0u, image->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(1u, image->transferFromHostPtrCalled);
|
EXPECT_EQ(1u, image->transferFromHostPtrCalled);
|
||||||
EXPECT_EQ(image->copyRegion, region);
|
EXPECT_EQ(image->copyRegion, region);
|
||||||
EXPECT_EQ(image->copyOrigin, origin);
|
EXPECT_EQ(image->copyOrigin, origin);
|
||||||
|
@ -297,13 +296,13 @@ HWTEST_F(MultipleMapImageTest, givenUnblockedQueueWhenReadOnlyUnmappedOnCpuThenD
|
||||||
MemObjSizeArray region = {{3, 1, 1}};
|
MemObjSizeArray region = {{3, 1, 1}};
|
||||||
void *mappedPtr = clEnqueueMapImage(cmdQ.get(), image.get(), CL_TRUE, CL_MAP_READ, &origin[0], ®ion[0], nullptr, nullptr, 0, nullptr, nullptr, &retVal);
|
void *mappedPtr = clEnqueueMapImage(cmdQ.get(), image.get(), CL_TRUE, CL_MAP_READ, &origin[0], ®ion[0], nullptr, nullptr, 0, nullptr, nullptr, &retVal);
|
||||||
EXPECT_NE(nullptr, mappedPtr);
|
EXPECT_NE(nullptr, mappedPtr);
|
||||||
EXPECT_EQ(1u, image->mapOperationsHandler.size());
|
EXPECT_EQ(1u, image->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(1u, image->transferToHostPtrCalled);
|
EXPECT_EQ(1u, image->transferToHostPtrCalled);
|
||||||
EXPECT_EQ(image->copyRegion, region);
|
EXPECT_EQ(image->copyRegion, region);
|
||||||
EXPECT_EQ(image->copyOrigin, origin);
|
EXPECT_EQ(image->copyOrigin, origin);
|
||||||
|
|
||||||
retVal = clEnqueueUnmapMemObject(cmdQ.get(), image.get(), mappedPtr, 0, nullptr, nullptr);
|
retVal = clEnqueueUnmapMemObject(cmdQ.get(), image.get(), mappedPtr, 0, nullptr, nullptr);
|
||||||
EXPECT_EQ(0u, image->mapOperationsHandler.size());
|
EXPECT_EQ(0u, image->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(0u, image->transferFromHostPtrCalled);
|
EXPECT_EQ(0u, image->transferFromHostPtrCalled);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -318,11 +317,11 @@ HWTEST_F(MultipleMapImageTest, givenUnblockedQueueWhenWriteInvalidateMappedOnCpu
|
||||||
MemObjSizeArray region = {{3, 1, 1}};
|
MemObjSizeArray region = {{3, 1, 1}};
|
||||||
void *mappedPtr = clEnqueueMapImage(cmdQ.get(), image.get(), CL_TRUE, CL_MAP_WRITE_INVALIDATE_REGION, &origin[0], ®ion[0], nullptr, nullptr, 0, nullptr, nullptr, &retVal);
|
void *mappedPtr = clEnqueueMapImage(cmdQ.get(), image.get(), CL_TRUE, CL_MAP_WRITE_INVALIDATE_REGION, &origin[0], ®ion[0], nullptr, nullptr, 0, nullptr, nullptr, &retVal);
|
||||||
EXPECT_NE(nullptr, mappedPtr);
|
EXPECT_NE(nullptr, mappedPtr);
|
||||||
EXPECT_EQ(1u, image->mapOperationsHandler.size());
|
EXPECT_EQ(1u, image->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(0u, image->transferToHostPtrCalled);
|
EXPECT_EQ(0u, image->transferToHostPtrCalled);
|
||||||
|
|
||||||
retVal = clEnqueueUnmapMemObject(cmdQ.get(), image.get(), mappedPtr, 0, nullptr, nullptr);
|
retVal = clEnqueueUnmapMemObject(cmdQ.get(), image.get(), mappedPtr, 0, nullptr, nullptr);
|
||||||
EXPECT_EQ(0u, image->mapOperationsHandler.size());
|
EXPECT_EQ(0u, image->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(1u, image->transferFromHostPtrCalled);
|
EXPECT_EQ(1u, image->transferFromHostPtrCalled);
|
||||||
EXPECT_EQ(image->copyRegion, region);
|
EXPECT_EQ(image->copyRegion, region);
|
||||||
EXPECT_EQ(image->copyOrigin, origin);
|
EXPECT_EQ(image->copyOrigin, origin);
|
||||||
|
@ -345,13 +344,13 @@ HWTEST_F(MultipleMapImageTest, givenBlockedQueueWhenMappedOnCpuThenAddMappedPtrA
|
||||||
mapEvent.setStatus(CL_COMPLETE);
|
mapEvent.setStatus(CL_COMPLETE);
|
||||||
EXPECT_NE(nullptr, mappedPtr);
|
EXPECT_NE(nullptr, mappedPtr);
|
||||||
EXPECT_EQ(1u, image->transferToHostPtrCalled);
|
EXPECT_EQ(1u, image->transferToHostPtrCalled);
|
||||||
EXPECT_EQ(1u, image->mapOperationsHandler.size());
|
EXPECT_EQ(1u, image->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(image->copyRegion, region);
|
EXPECT_EQ(image->copyRegion, region);
|
||||||
EXPECT_EQ(image->copyOrigin, origin);
|
EXPECT_EQ(image->copyOrigin, origin);
|
||||||
|
|
||||||
retVal = clEnqueueUnmapMemObject(cmdQ.get(), image.get(), mappedPtr, 1, &clUnmapEvent, nullptr);
|
retVal = clEnqueueUnmapMemObject(cmdQ.get(), image.get(), mappedPtr, 1, &clUnmapEvent, nullptr);
|
||||||
unmapEvent.setStatus(CL_COMPLETE);
|
unmapEvent.setStatus(CL_COMPLETE);
|
||||||
EXPECT_EQ(0u, image->mapOperationsHandler.size());
|
EXPECT_EQ(0u, image->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(1u, image->transferFromHostPtrCalled);
|
EXPECT_EQ(1u, image->transferFromHostPtrCalled);
|
||||||
EXPECT_EQ(image->copyRegion, region);
|
EXPECT_EQ(image->copyRegion, region);
|
||||||
EXPECT_EQ(image->copyOrigin, origin);
|
EXPECT_EQ(image->copyOrigin, origin);
|
||||||
|
@ -374,13 +373,13 @@ HWTEST_F(MultipleMapImageTest, givenBlockedQueueWhenMappedReadOnlyOnCpuThenDontM
|
||||||
mapEvent.setStatus(CL_COMPLETE);
|
mapEvent.setStatus(CL_COMPLETE);
|
||||||
EXPECT_NE(nullptr, mappedPtr);
|
EXPECT_NE(nullptr, mappedPtr);
|
||||||
EXPECT_EQ(1u, image->transferToHostPtrCalled);
|
EXPECT_EQ(1u, image->transferToHostPtrCalled);
|
||||||
EXPECT_EQ(1u, image->mapOperationsHandler.size());
|
EXPECT_EQ(1u, image->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(image->copyRegion, region);
|
EXPECT_EQ(image->copyRegion, region);
|
||||||
EXPECT_EQ(image->copyOrigin, origin);
|
EXPECT_EQ(image->copyOrigin, origin);
|
||||||
|
|
||||||
retVal = clEnqueueUnmapMemObject(cmdQ.get(), image.get(), mappedPtr, 1, &clUnmapEvent, nullptr);
|
retVal = clEnqueueUnmapMemObject(cmdQ.get(), image.get(), mappedPtr, 1, &clUnmapEvent, nullptr);
|
||||||
unmapEvent.setStatus(CL_COMPLETE);
|
unmapEvent.setStatus(CL_COMPLETE);
|
||||||
EXPECT_EQ(0u, image->mapOperationsHandler.size());
|
EXPECT_EQ(0u, image->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(0u, image->transferFromHostPtrCalled);
|
EXPECT_EQ(0u, image->transferFromHostPtrCalled);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -408,26 +407,26 @@ HWTEST_F(MultipleMapImageTest, givenMultimpleMapsWhenUnmappingThenRemoveCorrectP
|
||||||
mappedPtrs[i].ptr = clEnqueueMapImage(cmdQ.get(), image.get(), CL_TRUE, CL_MAP_WRITE, &mappedPtrs[i].offset[0], &mappedPtrs[i].size[0],
|
mappedPtrs[i].ptr = clEnqueueMapImage(cmdQ.get(), image.get(), CL_TRUE, CL_MAP_WRITE, &mappedPtrs[i].offset[0], &mappedPtrs[i].size[0],
|
||||||
nullptr, nullptr, 0, nullptr, nullptr, &retVal);
|
nullptr, nullptr, 0, nullptr, nullptr, &retVal);
|
||||||
EXPECT_NE(nullptr, mappedPtrs[i].ptr);
|
EXPECT_NE(nullptr, mappedPtrs[i].ptr);
|
||||||
EXPECT_EQ(i + 1, image->mapOperationsHandler.size());
|
EXPECT_EQ(i + 1, image->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(cmdQ->enqueueRegion, mappedPtrs[i].size);
|
EXPECT_EQ(cmdQ->enqueueRegion, mappedPtrs[i].size);
|
||||||
EXPECT_EQ(cmdQ->enqueueOrigin, mappedPtrs[i].offset);
|
EXPECT_EQ(cmdQ->enqueueOrigin, mappedPtrs[i].offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
// reordered unmap
|
// reordered unmap
|
||||||
clEnqueueUnmapMemObject(cmdQ.get(), image.get(), mappedPtrs[1].ptr, 0, nullptr, nullptr);
|
clEnqueueUnmapMemObject(cmdQ.get(), image.get(), mappedPtrs[1].ptr, 0, nullptr, nullptr);
|
||||||
EXPECT_EQ(2u, image->mapOperationsHandler.size());
|
EXPECT_EQ(2u, image->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(cmdQ->unmapPtr, mappedPtrs[1].ptr);
|
EXPECT_EQ(cmdQ->unmapPtr, mappedPtrs[1].ptr);
|
||||||
EXPECT_EQ(cmdQ->enqueueRegion, mappedPtrs[1].size);
|
EXPECT_EQ(cmdQ->enqueueRegion, mappedPtrs[1].size);
|
||||||
EXPECT_EQ(cmdQ->enqueueOrigin, mappedPtrs[1].offset);
|
EXPECT_EQ(cmdQ->enqueueOrigin, mappedPtrs[1].offset);
|
||||||
|
|
||||||
clEnqueueUnmapMemObject(cmdQ.get(), image.get(), mappedPtrs[2].ptr, 0, nullptr, nullptr);
|
clEnqueueUnmapMemObject(cmdQ.get(), image.get(), mappedPtrs[2].ptr, 0, nullptr, nullptr);
|
||||||
EXPECT_EQ(1u, image->mapOperationsHandler.size());
|
EXPECT_EQ(1u, image->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(cmdQ->unmapPtr, mappedPtrs[2].ptr);
|
EXPECT_EQ(cmdQ->unmapPtr, mappedPtrs[2].ptr);
|
||||||
EXPECT_EQ(cmdQ->enqueueRegion, mappedPtrs[2].size);
|
EXPECT_EQ(cmdQ->enqueueRegion, mappedPtrs[2].size);
|
||||||
EXPECT_EQ(cmdQ->enqueueOrigin, mappedPtrs[2].offset);
|
EXPECT_EQ(cmdQ->enqueueOrigin, mappedPtrs[2].offset);
|
||||||
|
|
||||||
clEnqueueUnmapMemObject(cmdQ.get(), image.get(), mappedPtrs[0].ptr, 0, nullptr, nullptr);
|
clEnqueueUnmapMemObject(cmdQ.get(), image.get(), mappedPtrs[0].ptr, 0, nullptr, nullptr);
|
||||||
EXPECT_EQ(0u, image->mapOperationsHandler.size());
|
EXPECT_EQ(0u, image->getMapOperationsHandler().size());
|
||||||
EXPECT_EQ(cmdQ->unmapPtr, mappedPtrs[0].ptr);
|
EXPECT_EQ(cmdQ->unmapPtr, mappedPtrs[0].ptr);
|
||||||
EXPECT_EQ(cmdQ->enqueueRegion, mappedPtrs[0].size);
|
EXPECT_EQ(cmdQ->enqueueRegion, mappedPtrs[0].size);
|
||||||
EXPECT_EQ(cmdQ->enqueueOrigin, mappedPtrs[0].offset);
|
EXPECT_EQ(cmdQ->enqueueOrigin, mappedPtrs[0].offset);
|
||||||
|
@ -443,13 +442,13 @@ HWTEST_F(MultipleMapImageTest, givenOverlapingPtrWhenMappingForWriteThenReturnEr
|
||||||
void *mappedPtr = clEnqueueMapImage(cmdQ.get(), image.get(), CL_TRUE, CL_MAP_READ, &origin[0], ®ion[0], nullptr, nullptr, 0, nullptr, nullptr, &retVal);
|
void *mappedPtr = clEnqueueMapImage(cmdQ.get(), image.get(), CL_TRUE, CL_MAP_READ, &origin[0], ®ion[0], nullptr, nullptr, 0, nullptr, nullptr, &retVal);
|
||||||
EXPECT_NE(nullptr, mappedPtr);
|
EXPECT_NE(nullptr, mappedPtr);
|
||||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||||
EXPECT_EQ(1u, image->mapOperationsHandler.size());
|
EXPECT_EQ(1u, image->getMapOperationsHandler().size());
|
||||||
|
|
||||||
origin[0]++;
|
origin[0]++;
|
||||||
void *mappedPtr2 = clEnqueueMapImage(cmdQ.get(), image.get(), CL_TRUE, CL_MAP_WRITE, &origin[0], ®ion[0], nullptr, nullptr, 0, nullptr, nullptr, &retVal);
|
void *mappedPtr2 = clEnqueueMapImage(cmdQ.get(), image.get(), CL_TRUE, CL_MAP_WRITE, &origin[0], ®ion[0], nullptr, nullptr, 0, nullptr, nullptr, &retVal);
|
||||||
EXPECT_EQ(nullptr, mappedPtr2);
|
EXPECT_EQ(nullptr, mappedPtr2);
|
||||||
EXPECT_EQ(CL_INVALID_OPERATION, retVal);
|
EXPECT_EQ(CL_INVALID_OPERATION, retVal);
|
||||||
EXPECT_EQ(1u, image->mapOperationsHandler.size());
|
EXPECT_EQ(1u, image->getMapOperationsHandler().size());
|
||||||
}
|
}
|
||||||
|
|
||||||
HWTEST_F(MultipleMapImageTest, givenOverlapingPtrWhenMappingOnCpuForWriteThenReturnError) {
|
HWTEST_F(MultipleMapImageTest, givenOverlapingPtrWhenMappingOnCpuForWriteThenReturnError) {
|
||||||
|
@ -462,12 +461,12 @@ HWTEST_F(MultipleMapImageTest, givenOverlapingPtrWhenMappingOnCpuForWriteThenRet
|
||||||
void *mappedPtr = clEnqueueMapImage(cmdQ.get(), image.get(), CL_TRUE, CL_MAP_READ, &origin[0], ®ion[0], nullptr, nullptr, 0, nullptr, nullptr, &retVal);
|
void *mappedPtr = clEnqueueMapImage(cmdQ.get(), image.get(), CL_TRUE, CL_MAP_READ, &origin[0], ®ion[0], nullptr, nullptr, 0, nullptr, nullptr, &retVal);
|
||||||
EXPECT_NE(nullptr, mappedPtr);
|
EXPECT_NE(nullptr, mappedPtr);
|
||||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||||
EXPECT_EQ(1u, image->mapOperationsHandler.size());
|
EXPECT_EQ(1u, image->getMapOperationsHandler().size());
|
||||||
|
|
||||||
origin[0]++;
|
origin[0]++;
|
||||||
void *mappedPtr2 = clEnqueueMapImage(cmdQ.get(), image.get(), CL_TRUE, CL_MAP_WRITE, &origin[0], ®ion[0], nullptr, nullptr, 0, nullptr, nullptr, &retVal);
|
void *mappedPtr2 = clEnqueueMapImage(cmdQ.get(), image.get(), CL_TRUE, CL_MAP_WRITE, &origin[0], ®ion[0], nullptr, nullptr, 0, nullptr, nullptr, &retVal);
|
||||||
EXPECT_EQ(nullptr, mappedPtr2);
|
EXPECT_EQ(nullptr, mappedPtr2);
|
||||||
EXPECT_EQ(CL_INVALID_OPERATION, retVal);
|
EXPECT_EQ(CL_INVALID_OPERATION, retVal);
|
||||||
EXPECT_EQ(1u, image->mapOperationsHandler.size());
|
EXPECT_EQ(1u, image->getMapOperationsHandler().size());
|
||||||
}
|
}
|
||||||
} // namespace NEO
|
} // namespace NEO
|
||||||
|
|
|
@ -283,7 +283,9 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, GivenNonBlockingMapEnqueueWhenFini
|
||||||
size_t tempBuffer[] = {0, 1, 2};
|
size_t tempBuffer[] = {0, 1, 2};
|
||||||
cl_int retVal;
|
cl_int retVal;
|
||||||
|
|
||||||
AlignedBuffer mockBuffer;
|
auto cpuAllocation = std::make_unique<std::byte[]>(MemoryConstants::pageSize);
|
||||||
|
MockGraphicsAllocation allocation{cpuAllocation.get(), MemoryConstants::pageSize};
|
||||||
|
AlignedBuffer mockBuffer{&ctx, &allocation};
|
||||||
|
|
||||||
uint32_t taskCount = 0;
|
uint32_t taskCount = 0;
|
||||||
taskLevel = taskCount;
|
taskLevel = taskCount;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2018-2020 Intel Corporation
|
* Copyright (C) 2018-2021 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
|
@ -8,6 +8,7 @@
|
||||||
#include "shared/source/helpers/ptr_math.h"
|
#include "shared/source/helpers/ptr_math.h"
|
||||||
|
|
||||||
#include "opencl/source/mem_obj/map_operations_handler.h"
|
#include "opencl/source/mem_obj/map_operations_handler.h"
|
||||||
|
#include "opencl/test/unit_test/mocks/mock_buffer.h"
|
||||||
#include "test.h"
|
#include "test.h"
|
||||||
|
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
|
@ -160,3 +161,56 @@ TEST_P(MapOperationsHandlerOverlapTests, givenAlreadyMappedPtrWhenAskingForOverl
|
||||||
INSTANTIATE_TEST_CASE_P(MapOperationsHandlerOverlapTests,
|
INSTANTIATE_TEST_CASE_P(MapOperationsHandlerOverlapTests,
|
||||||
MapOperationsHandlerOverlapTests,
|
MapOperationsHandlerOverlapTests,
|
||||||
::testing::ValuesIn(overlappingCombinations));
|
::testing::ValuesIn(overlappingCombinations));
|
||||||
|
|
||||||
|
struct MapOperationsStorageWhitebox : MapOperationsStorage {
|
||||||
|
using MapOperationsStorage::handlers;
|
||||||
|
};
|
||||||
|
|
||||||
|
TEST(MapOperationsStorageTest, givenMapOperationsStorageWhenGetHandlerIsUsedThenCreateHandler) {
|
||||||
|
MockBuffer buffer1{};
|
||||||
|
MockBuffer buffer2{};
|
||||||
|
|
||||||
|
MapOperationsStorageWhitebox storage{};
|
||||||
|
EXPECT_EQ(0u, storage.handlers.size());
|
||||||
|
|
||||||
|
storage.getHandler(&buffer1);
|
||||||
|
EXPECT_EQ(1u, storage.handlers.size());
|
||||||
|
|
||||||
|
storage.getHandler(&buffer2);
|
||||||
|
EXPECT_EQ(2u, storage.handlers.size());
|
||||||
|
|
||||||
|
storage.getHandler(&buffer1);
|
||||||
|
EXPECT_EQ(2u, storage.handlers.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(MapOperationsStorageTest, givenMapOperationsStorageWhenGetHandlerIfExistsIsUsedThenDoNotCreateHandler) {
|
||||||
|
MockBuffer buffer1{};
|
||||||
|
MockBuffer buffer2{};
|
||||||
|
|
||||||
|
MapOperationsStorageWhitebox storage{};
|
||||||
|
EXPECT_EQ(0u, storage.handlers.size());
|
||||||
|
EXPECT_EQ(nullptr, storage.getHandlerIfExists(&buffer1));
|
||||||
|
EXPECT_EQ(nullptr, storage.getHandlerIfExists(&buffer2));
|
||||||
|
|
||||||
|
storage.getHandler(&buffer1);
|
||||||
|
EXPECT_EQ(1u, storage.handlers.size());
|
||||||
|
EXPECT_NE(nullptr, storage.getHandlerIfExists(&buffer1));
|
||||||
|
EXPECT_EQ(nullptr, storage.getHandlerIfExists(&buffer2));
|
||||||
|
|
||||||
|
storage.getHandler(&buffer2);
|
||||||
|
EXPECT_EQ(2u, storage.handlers.size());
|
||||||
|
EXPECT_NE(nullptr, storage.getHandlerIfExists(&buffer1));
|
||||||
|
EXPECT_NE(nullptr, storage.getHandlerIfExists(&buffer2));
|
||||||
|
EXPECT_NE(storage.getHandlerIfExists(&buffer1), storage.getHandlerIfExists(&buffer2));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(MapOperationsStorageTest, givenMapOperationsStorageWhenRemoveHandlerIsUsedThenRemoveHandler) {
|
||||||
|
MockBuffer buffer{};
|
||||||
|
MapOperationsStorageWhitebox storage{};
|
||||||
|
|
||||||
|
storage.getHandler(&buffer);
|
||||||
|
ASSERT_EQ(1u, storage.handlers.size());
|
||||||
|
|
||||||
|
storage.removeHandler(&buffer);
|
||||||
|
EXPECT_EQ(0u, storage.handlers.size());
|
||||||
|
}
|
||||||
|
|
|
@ -35,16 +35,21 @@ class MockBuffer : public MockBufferStorage, public Buffer {
|
||||||
using Buffer::magic;
|
using Buffer::magic;
|
||||||
using Buffer::offset;
|
using Buffer::offset;
|
||||||
using Buffer::size;
|
using Buffer::size;
|
||||||
|
using MemObj::context;
|
||||||
using MemObj::isZeroCopy;
|
using MemObj::isZeroCopy;
|
||||||
using MemObj::memObjectType;
|
using MemObj::memObjectType;
|
||||||
using MockBufferStorage::device;
|
using MockBufferStorage::device;
|
||||||
MockBuffer(GraphicsAllocation &alloc)
|
|
||||||
|
MockBuffer(GraphicsAllocation &alloc) : MockBuffer(nullptr, alloc) {}
|
||||||
|
|
||||||
|
MockBuffer(Context *context, GraphicsAllocation &alloc)
|
||||||
: MockBufferStorage(), Buffer(
|
: MockBufferStorage(), Buffer(
|
||||||
nullptr, ClMemoryPropertiesHelper::createMemoryProperties(CL_MEM_USE_HOST_PTR, 0, 0, MockBufferStorage::device.get()),
|
context, ClMemoryPropertiesHelper::createMemoryProperties(CL_MEM_USE_HOST_PTR, 0, 0, MockBufferStorage::device.get()),
|
||||||
CL_MEM_USE_HOST_PTR, 0, alloc.getUnderlyingBufferSize(), alloc.getUnderlyingBuffer(), alloc.getUnderlyingBuffer(),
|
CL_MEM_USE_HOST_PTR, 0, alloc.getUnderlyingBufferSize(), alloc.getUnderlyingBuffer(), alloc.getUnderlyingBuffer(),
|
||||||
GraphicsAllocationHelper::toMultiGraphicsAllocation(&alloc), true, false, false),
|
GraphicsAllocationHelper::toMultiGraphicsAllocation(&alloc), true, false, false),
|
||||||
externalAlloc(&alloc) {
|
externalAlloc(&alloc) {
|
||||||
}
|
}
|
||||||
|
|
||||||
MockBuffer()
|
MockBuffer()
|
||||||
: MockBufferStorage(), Buffer(
|
: MockBufferStorage(), Buffer(
|
||||||
nullptr, ClMemoryPropertiesHelper::createMemoryProperties(CL_MEM_USE_HOST_PTR, 0, 0, MockBufferStorage::device.get()),
|
nullptr, ClMemoryPropertiesHelper::createMemoryProperties(CL_MEM_USE_HOST_PTR, 0, 0, MockBufferStorage::device.get()),
|
||||||
|
@ -53,9 +58,8 @@ class MockBuffer : public MockBufferStorage, public Buffer {
|
||||||
}
|
}
|
||||||
~MockBuffer() override {
|
~MockBuffer() override {
|
||||||
if (externalAlloc != nullptr) {
|
if (externalAlloc != nullptr) {
|
||||||
// no ownership over graphics allocation
|
// no ownership over graphics allocation, do not release it
|
||||||
// return to mock allocations
|
this->multiGraphicsAllocation.removeAllocation(0u);
|
||||||
this->multiGraphicsAllocation.addAllocation(&this->mockGfxAllocation);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void setArgStateful(void *memory, bool forceNonAuxMode, bool disableL3, bool alignSizeForAuxTranslation, bool isReadOnly, const Device &device, bool useGlobalAtomics, bool areMultipleSubDevicesInContext) override {
|
void setArgStateful(void *memory, bool forceNonAuxMode, bool disableL3, bool alignSizeForAuxTranslation, bool isReadOnly, const Device &device, bool useGlobalAtomics, bool areMultipleSubDevicesInContext) override {
|
||||||
|
@ -73,15 +77,29 @@ class AlignedBuffer : public MockBufferStorage, public Buffer {
|
||||||
CL_MEM_USE_HOST_PTR, 0, sizeof(data) / 2, alignUp(&data, 64), alignUp(&data, 64),
|
CL_MEM_USE_HOST_PTR, 0, sizeof(data) / 2, alignUp(&data, 64), alignUp(&data, 64),
|
||||||
GraphicsAllocationHelper::toMultiGraphicsAllocation(&mockGfxAllocation), true, false, false) {
|
GraphicsAllocationHelper::toMultiGraphicsAllocation(&mockGfxAllocation), true, false, false) {
|
||||||
}
|
}
|
||||||
AlignedBuffer(GraphicsAllocation *gfxAllocation)
|
|
||||||
|
AlignedBuffer(GraphicsAllocation *gfxAllocation) : AlignedBuffer(nullptr, gfxAllocation) {}
|
||||||
|
|
||||||
|
AlignedBuffer(Context *context, GraphicsAllocation *gfxAllocation)
|
||||||
: MockBufferStorage(), Buffer(
|
: MockBufferStorage(), Buffer(
|
||||||
nullptr, ClMemoryPropertiesHelper::createMemoryProperties(CL_MEM_USE_HOST_PTR, 0, 0, MockBufferStorage::device.get()),
|
context, ClMemoryPropertiesHelper::createMemoryProperties(CL_MEM_USE_HOST_PTR, 0, 0, MockBufferStorage::device.get()),
|
||||||
CL_MEM_USE_HOST_PTR, 0, sizeof(data) / 2, alignUp(&data, 64), alignUp(&data, 64),
|
CL_MEM_USE_HOST_PTR, 0, sizeof(data) / 2, alignUp(&data, 64), alignUp(&data, 64),
|
||||||
GraphicsAllocationHelper::toMultiGraphicsAllocation(gfxAllocation), true, false, false) {
|
GraphicsAllocationHelper::toMultiGraphicsAllocation(gfxAllocation), true, false, false),
|
||||||
|
externalAlloc(gfxAllocation) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
~AlignedBuffer() override {
|
||||||
|
if (externalAlloc != nullptr) {
|
||||||
|
// no ownership over graphics allocation, do not release it
|
||||||
|
this->multiGraphicsAllocation.removeAllocation(0u);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void setArgStateful(void *memory, bool forceNonAuxMode, bool disableL3, bool alignSizeForAuxTranslation, bool isReadOnly, const Device &device, bool useGlobalAtomics, bool areMultipleSubDevicesInContext) override {
|
void setArgStateful(void *memory, bool forceNonAuxMode, bool disableL3, bool alignSizeForAuxTranslation, bool isReadOnly, const Device &device, bool useGlobalAtomics, bool areMultipleSubDevicesInContext) override {
|
||||||
Buffer::setSurfaceState(this->device.get(), memory, forceNonAuxMode, disableL3, getSize(), getCpuAddress(), 0, &mockGfxAllocation, 0, 0, false, false);
|
Buffer::setSurfaceState(this->device.get(), memory, forceNonAuxMode, disableL3, getSize(), getCpuAddress(), 0, &mockGfxAllocation, 0, 0, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GraphicsAllocation *externalAlloc = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
class UnalignedBuffer : public MockBufferStorage, public Buffer {
|
class UnalignedBuffer : public MockBufferStorage, public Buffer {
|
||||||
|
@ -93,15 +111,29 @@ class UnalignedBuffer : public MockBufferStorage, public Buffer {
|
||||||
CL_MEM_USE_HOST_PTR, 0, sizeof(data) / 2, alignUp(&data, 4), alignUp(&data, 4),
|
CL_MEM_USE_HOST_PTR, 0, sizeof(data) / 2, alignUp(&data, 4), alignUp(&data, 4),
|
||||||
GraphicsAllocationHelper::toMultiGraphicsAllocation(&mockGfxAllocation), false, false, false) {
|
GraphicsAllocationHelper::toMultiGraphicsAllocation(&mockGfxAllocation), false, false, false) {
|
||||||
}
|
}
|
||||||
UnalignedBuffer(GraphicsAllocation *gfxAllocation)
|
|
||||||
|
UnalignedBuffer(GraphicsAllocation *gfxAllocation) : UnalignedBuffer(nullptr, gfxAllocation) {}
|
||||||
|
|
||||||
|
UnalignedBuffer(Context *context, GraphicsAllocation *gfxAllocation)
|
||||||
: MockBufferStorage(true), Buffer(
|
: MockBufferStorage(true), Buffer(
|
||||||
nullptr, ClMemoryPropertiesHelper::createMemoryProperties(CL_MEM_USE_HOST_PTR, 0, 0, MockBufferStorage::device.get()),
|
context, ClMemoryPropertiesHelper::createMemoryProperties(CL_MEM_USE_HOST_PTR, 0, 0, MockBufferStorage::device.get()),
|
||||||
CL_MEM_USE_HOST_PTR, 0, sizeof(data) / 2, alignUp(&data, 4), alignUp(&data, 4),
|
CL_MEM_USE_HOST_PTR, 0, sizeof(data) / 2, alignUp(&data, 4), alignUp(&data, 4),
|
||||||
GraphicsAllocationHelper::toMultiGraphicsAllocation(gfxAllocation), false, false, false) {
|
GraphicsAllocationHelper::toMultiGraphicsAllocation(gfxAllocation), false, false, false),
|
||||||
|
externalAlloc(gfxAllocation) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
~UnalignedBuffer() override {
|
||||||
|
if (externalAlloc != nullptr) {
|
||||||
|
// no ownership over graphics allocation, do not release it
|
||||||
|
this->multiGraphicsAllocation.removeAllocation(0u);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void setArgStateful(void *memory, bool forceNonAuxMode, bool disableL3, bool alignSizeForAuxTranslation, bool isReadOnly, const Device &device, bool useGlobalAtomics, bool areMultipleSubDevicesInContext) override {
|
void setArgStateful(void *memory, bool forceNonAuxMode, bool disableL3, bool alignSizeForAuxTranslation, bool isReadOnly, const Device &device, bool useGlobalAtomics, bool areMultipleSubDevicesInContext) override {
|
||||||
Buffer::setSurfaceState(this->device.get(), memory, forceNonAuxMode, disableL3, getSize(), getCpuAddress(), 0, &mockGfxAllocation, 0, 0, false, false);
|
Buffer::setSurfaceState(this->device.get(), memory, forceNonAuxMode, disableL3, getSize(), getCpuAddress(), 0, &mockGfxAllocation, 0, 0, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GraphicsAllocation *externalAlloc = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
class MockPublicAccessBuffer : public Buffer {
|
class MockPublicAccessBuffer : public Buffer {
|
||||||
|
|
|
@ -86,7 +86,8 @@ TEST_F(IOQTaskTestsMt, GivenBlockedOnUserEventWhenEnqueingMarkerThenSuccessIsRet
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(IOQTaskTestsMt, GivenMultipleThreadsWhenMappingBufferThenEventsAreCompleted) {
|
TEST_F(IOQTaskTestsMt, GivenMultipleThreadsWhenMappingBufferThenEventsAreCompleted) {
|
||||||
AlignedBuffer alignedBuffer;
|
MockGraphicsAllocation alignedBufferAlloc{nullptr, MemoryConstants::pageSize};
|
||||||
|
AlignedBuffer alignedBuffer{pContext, &alignedBufferAlloc};
|
||||||
|
|
||||||
auto userEvent = clCreateUserEvent(pContext, &retVal);
|
auto userEvent = clCreateUserEvent(pContext, &retVal);
|
||||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||||
|
|
Loading…
Reference in New Issue