2017-12-21 07:45:38 +08:00
|
|
|
/*
|
2021-05-17 02:51:16 +08:00
|
|
|
* Copyright (C) 2018-2021 Intel Corporation
|
2017-12-21 07:45:38 +08:00
|
|
|
*
|
2018-09-18 15:11:08 +08:00
|
|
|
* SPDX-License-Identifier: MIT
|
2017-12-21 07:45:38 +08:00
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#pragma once
|
2020-02-24 05:44:01 +08:00
|
|
|
#include "shared/source/helpers/aligned_memory.h"
|
2021-01-21 20:10:13 +08:00
|
|
|
#include "shared/test/common/mocks/mock_device.h"
|
|
|
|
#include "shared/test/common/mocks/mock_graphics_allocation.h"
|
2020-02-24 17:22:30 +08:00
|
|
|
|
2020-05-04 17:04:43 +08:00
|
|
|
#include "opencl/source/helpers/memory_properties_helpers.h"
|
2020-02-23 05:50:57 +08:00
|
|
|
#include "opencl/source/mem_obj/buffer.h"
|
2020-02-23 22:20:22 +08:00
|
|
|
#include "opencl/test/unit_test/mocks/mock_context.h"
|
2020-02-22 16:28:27 +08:00
|
|
|
|
2019-03-26 18:59:46 +08:00
|
|
|
using namespace NEO;
|
2017-12-21 07:45:38 +08:00
|
|
|
|
|
|
|
class MockBufferStorage {
|
|
|
|
public:
|
2020-07-10 17:21:53 +08:00
|
|
|
MockBufferStorage() : mockGfxAllocation(data, sizeof(data) / 2),
|
|
|
|
multiGfxAllocation(GraphicsAllocationHelper::toMultiGraphicsAllocation(&mockGfxAllocation)) {
|
2017-12-21 07:45:38 +08:00
|
|
|
}
|
2020-07-10 17:21:53 +08:00
|
|
|
MockBufferStorage(bool unaligned) : mockGfxAllocation(unaligned ? alignUp(&data, 4) : alignUp(&data, 64), sizeof(data) / 2),
|
|
|
|
multiGfxAllocation(GraphicsAllocationHelper::toMultiGraphicsAllocation(&mockGfxAllocation)) {
|
2017-12-21 07:45:38 +08:00
|
|
|
}
|
|
|
|
char data[128];
|
|
|
|
MockGraphicsAllocation mockGfxAllocation;
|
2020-02-21 06:54:48 +08:00
|
|
|
std::unique_ptr<MockDevice> device = std::unique_ptr<MockDevice>(MockDevice::createWithNewExecutionEnvironment<MockDevice>(nullptr));
|
2020-07-10 17:21:53 +08:00
|
|
|
MultiGraphicsAllocation multiGfxAllocation;
|
2017-12-21 07:45:38 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
class MockBuffer : public MockBufferStorage, public Buffer {
|
|
|
|
public:
|
2018-04-04 15:29:48 +08:00
|
|
|
using Buffer::magic;
|
2019-01-25 19:55:17 +08:00
|
|
|
using Buffer::offset;
|
2019-11-06 17:01:37 +08:00
|
|
|
using Buffer::size;
|
2019-07-08 22:27:36 +08:00
|
|
|
using MemObj::isZeroCopy;
|
2020-11-26 00:54:47 +08:00
|
|
|
using MemObj::memObjectType;
|
2018-07-03 16:00:12 +08:00
|
|
|
using MockBufferStorage::device;
|
2017-12-21 07:45:38 +08:00
|
|
|
MockBuffer(GraphicsAllocation &alloc)
|
2020-07-10 17:21:53 +08:00
|
|
|
: MockBufferStorage(), Buffer(
|
2020-11-17 08:23:13 +08:00
|
|
|
nullptr, MemoryPropertiesHelper::createMemoryProperties(CL_MEM_USE_HOST_PTR, 0, 0, MockBufferStorage::device.get()),
|
|
|
|
CL_MEM_USE_HOST_PTR, 0, alloc.getUnderlyingBufferSize(), alloc.getUnderlyingBuffer(), alloc.getUnderlyingBuffer(),
|
2020-07-10 17:21:53 +08:00
|
|
|
GraphicsAllocationHelper::toMultiGraphicsAllocation(&alloc), true, false, false),
|
2017-12-21 07:45:38 +08:00
|
|
|
externalAlloc(&alloc) {
|
|
|
|
}
|
2020-07-10 17:21:53 +08:00
|
|
|
MockBuffer()
|
|
|
|
: MockBufferStorage(), Buffer(
|
2020-11-17 08:23:13 +08:00
|
|
|
nullptr, MemoryPropertiesHelper::createMemoryProperties(CL_MEM_USE_HOST_PTR, 0, 0, MockBufferStorage::device.get()),
|
|
|
|
CL_MEM_USE_HOST_PTR, 0, sizeof(data), &data, &data,
|
2020-07-10 17:21:53 +08:00
|
|
|
GraphicsAllocationHelper::toMultiGraphicsAllocation(&mockGfxAllocation), true, false, false) {
|
2017-12-21 07:45:38 +08:00
|
|
|
}
|
|
|
|
~MockBuffer() override {
|
|
|
|
if (externalAlloc != nullptr) {
|
|
|
|
// no ownership over graphics allocation
|
|
|
|
// return to mock allocations
|
2020-07-07 22:05:06 +08:00
|
|
|
this->multiGraphicsAllocation.addAllocation(&this->mockGfxAllocation);
|
2017-12-21 07:45:38 +08:00
|
|
|
}
|
|
|
|
}
|
2021-03-30 01:06:29 +08:00
|
|
|
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, (externalAlloc != nullptr) ? externalAlloc : &mockGfxAllocation, 0, 0, false, false);
|
2017-12-21 07:45:38 +08:00
|
|
|
}
|
|
|
|
GraphicsAllocation *externalAlloc = nullptr;
|
|
|
|
};
|
|
|
|
|
|
|
|
class AlignedBuffer : public MockBufferStorage, public Buffer {
|
|
|
|
public:
|
2018-07-03 16:00:12 +08:00
|
|
|
using MockBufferStorage::device;
|
2020-07-10 17:21:53 +08:00
|
|
|
|
|
|
|
AlignedBuffer() : MockBufferStorage(false), Buffer(
|
2020-11-17 08:23:13 +08:00
|
|
|
nullptr, MemoryPropertiesHelper::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),
|
2020-07-10 17:21:53 +08:00
|
|
|
GraphicsAllocationHelper::toMultiGraphicsAllocation(&mockGfxAllocation), true, false, false) {
|
2017-12-21 07:45:38 +08:00
|
|
|
}
|
2020-11-17 08:23:13 +08:00
|
|
|
AlignedBuffer(GraphicsAllocation *gfxAllocation)
|
|
|
|
: MockBufferStorage(), Buffer(
|
|
|
|
nullptr, MemoryPropertiesHelper::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),
|
|
|
|
GraphicsAllocationHelper::toMultiGraphicsAllocation(gfxAllocation), true, false, false) {
|
2017-12-21 07:45:38 +08:00
|
|
|
}
|
2021-03-30 01:06:29 +08:00
|
|
|
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);
|
2017-12-21 07:45:38 +08:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
class UnalignedBuffer : public MockBufferStorage, public Buffer {
|
|
|
|
public:
|
2018-07-03 16:00:12 +08:00
|
|
|
using MockBufferStorage::device;
|
2020-07-10 17:21:53 +08:00
|
|
|
|
|
|
|
UnalignedBuffer() : MockBufferStorage(true), Buffer(
|
2020-11-17 08:23:13 +08:00
|
|
|
nullptr, MemoryPropertiesHelper::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),
|
2020-07-10 17:21:53 +08:00
|
|
|
GraphicsAllocationHelper::toMultiGraphicsAllocation(&mockGfxAllocation), false, false, false) {
|
2017-12-21 07:45:38 +08:00
|
|
|
}
|
2020-11-17 08:23:13 +08:00
|
|
|
UnalignedBuffer(GraphicsAllocation *gfxAllocation)
|
|
|
|
: MockBufferStorage(true), Buffer(
|
|
|
|
nullptr, MemoryPropertiesHelper::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),
|
|
|
|
GraphicsAllocationHelper::toMultiGraphicsAllocation(gfxAllocation), false, false, false) {
|
2017-12-21 07:45:38 +08:00
|
|
|
}
|
2021-03-30 01:06:29 +08:00
|
|
|
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);
|
2017-12-21 07:45:38 +08:00
|
|
|
}
|
|
|
|
};
|
2018-07-25 00:36:26 +08:00
|
|
|
|
|
|
|
class MockPublicAccessBuffer : public Buffer {
|
|
|
|
public:
|
|
|
|
using Buffer::getGraphicsAllocationType;
|
|
|
|
};
|