mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-15 13:01:45 +08:00
Interfaces to register resources
Change-Id: Ic587aaa5a41e4e7648211cfa730a0aa5bbc2985a Signed-off-by: Mateusz Hoppe <mateusz.hoppe@intel.com>
This commit is contained in:

committed by
sys_ocldev

parent
9981cdd9e2
commit
d363448515
@ -13,6 +13,7 @@ namespace NEO {
|
||||
|
||||
class MockBufferObject : public BufferObject {
|
||||
public:
|
||||
using BufferObject::bindExtHandles;
|
||||
using BufferObject::bindInfo;
|
||||
using BufferObject::BufferObject;
|
||||
using BufferObject::handle;
|
||||
|
@ -16,6 +16,7 @@ set(IGDRCL_SRCS_tests_os_interface_linux
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/drm_buffer_object_tests.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/drm_command_stream_mm_tests.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/drm_command_stream_tests.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/drm_debug_tests.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/drm_gem_close_worker_tests.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/drm_mapper_tests.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/drm_engine_info_tests.cpp
|
||||
|
@ -329,3 +329,30 @@ TEST(DrmBufferObject, givenPerContextVmRequiredWhenBoBoundAndUnboundThenCorrectB
|
||||
bo.unbind(osContext, 0);
|
||||
EXPECT_FALSE(bo.bindInfo[contextId][0]);
|
||||
}
|
||||
|
||||
TEST(DrmBufferObject, whenBindExtHandleAddedThenItIsStored) {
|
||||
auto executionEnvironment = std::make_unique<ExecutionEnvironment>();
|
||||
executionEnvironment->prepareRootDeviceEnvironments(1);
|
||||
DrmMockResources drm(*executionEnvironment->rootDeviceEnvironments[0]);
|
||||
|
||||
MockBufferObject bo(&drm, 0, 0, 1);
|
||||
bo.addBindExtHandle(4);
|
||||
|
||||
EXPECT_EQ(1u, bo.bindExtHandles.size());
|
||||
EXPECT_EQ(4u, bo.bindExtHandles[0]);
|
||||
}
|
||||
|
||||
TEST(DrmBufferObject, givenBoWithBindExtHandlesWhenBoIsDestructedThenHandlesAreUnregistered) {
|
||||
auto executionEnvironment = std::make_unique<ExecutionEnvironment>();
|
||||
executionEnvironment->prepareRootDeviceEnvironments(1);
|
||||
DrmMockResources drm(*executionEnvironment->rootDeviceEnvironments[0]);
|
||||
|
||||
{
|
||||
MockBufferObject bo(&drm, 0, 0, 1);
|
||||
bo.addBindExtHandle(4);
|
||||
bo.addBindExtHandle(5);
|
||||
bo.addBindExtHandle(6);
|
||||
}
|
||||
EXPECT_EQ(6u, drm.unregisteredHandle);
|
||||
EXPECT_EQ(3u, drm.unregisterCalledCount);
|
||||
}
|
||||
|
42
opencl/test/unit_test/os_interface/linux/drm_debug_tests.cpp
Normal file
42
opencl/test/unit_test/os_interface/linux/drm_debug_tests.cpp
Normal file
@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#include "shared/source/os_interface/linux/drm_neo.h"
|
||||
|
||||
#include "opencl/test/unit_test/os_interface/linux/drm_mock.h"
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
using namespace NEO;
|
||||
|
||||
TEST(DrmTest, whenRegisterResourceClassesCalledThenFalseIsReturned) {
|
||||
auto executionEnvironment = std::make_unique<ExecutionEnvironment>();
|
||||
executionEnvironment->prepareRootDeviceEnvironments(1);
|
||||
DrmMock drmMock(*executionEnvironment->rootDeviceEnvironments[0]);
|
||||
|
||||
auto result = drmMock.registerResourceClasses();
|
||||
EXPECT_FALSE(result);
|
||||
}
|
||||
|
||||
TEST(DrmTest, whenResourceClassIsUsedToIndexClassNamesThenCorrectNamesAreReturned) {
|
||||
EXPECT_STREQ(Drm::classNames[static_cast<uint32_t>(Drm::ResourceClass::Elf)], "I915_CLASS_ELF_FILE");
|
||||
EXPECT_STREQ(Drm::classNames[static_cast<uint32_t>(Drm::ResourceClass::Isa)], "I915_CLASS_ISA");
|
||||
EXPECT_STREQ(Drm::classNames[static_cast<uint32_t>(Drm::ResourceClass::ContextSaveArea)], "I915_CLASS_CONTEXT_SAVE_AREA");
|
||||
EXPECT_STREQ(Drm::classNames[static_cast<uint32_t>(Drm::ResourceClass::ModuleHeapDebugArea)], "I915_CLASS_MODULE_HEAP_DEBUG_AREA");
|
||||
EXPECT_STREQ(Drm::classNames[static_cast<uint32_t>(Drm::ResourceClass::SbaTrackingBuffer)], "I915_CLASS_SBA_TRACKING_BUFFER");
|
||||
}
|
||||
|
||||
TEST(DrmTest, whenRegisterResourceCalledThenImplementationIsEmpty) {
|
||||
auto executionEnvironment = std::make_unique<ExecutionEnvironment>();
|
||||
executionEnvironment->prepareRootDeviceEnvironments(1);
|
||||
DrmMock drmMock(*executionEnvironment->rootDeviceEnvironments[0]);
|
||||
|
||||
auto handle = drmMock.registerResource(Drm::ResourceClass::MaxSize, nullptr, 0);
|
||||
EXPECT_EQ(0u, handle);
|
||||
drmMock.unregisterResource(handle);
|
||||
EXPECT_EQ(0u, drmMock.ioctlCallsCount);
|
||||
}
|
@ -33,11 +33,13 @@
|
||||
#include "opencl/source/mem_obj/image.h"
|
||||
#include "opencl/source/os_interface/linux/drm_command_stream.h"
|
||||
#include "opencl/test/unit_test/helpers/unit_test_helper.h"
|
||||
#include "opencl/test/unit_test/mocks/linux/mock_drm_allocation.h"
|
||||
#include "opencl/test/unit_test/mocks/mock_allocation_properties.h"
|
||||
#include "opencl/test/unit_test/mocks/mock_context.h"
|
||||
#include "opencl/test/unit_test/mocks/mock_gfx_partition.h"
|
||||
#include "opencl/test/unit_test/mocks/mock_gmm.h"
|
||||
#include "opencl/test/unit_test/mocks/mock_platform.h"
|
||||
#include "opencl/test/unit_test/os_interface/linux/drm_mock.h"
|
||||
#include "test.h"
|
||||
|
||||
#include "drm/i915_drm.h"
|
||||
@ -3803,4 +3805,69 @@ TEST(DrmMemoryMangerTest, givenMultipleRootDeviceWhenMemoryManagerGetsDrmThenDrm
|
||||
}
|
||||
EXPECT_EQ(CommonConstants::unspecifiedDeviceIndex, drmMemoryManager.getRootDeviceIndex(nullptr));
|
||||
}
|
||||
|
||||
TEST(DrmAllocationTest, givenResourceRegistrationEnabledWhenAllocationTypeShouldBeRegisteredThenBoHasBindExtHandleAdded) {
|
||||
auto executionEnvironment = std::make_unique<ExecutionEnvironment>();
|
||||
executionEnvironment->prepareRootDeviceEnvironments(1);
|
||||
|
||||
DrmMockResources drm(*executionEnvironment->rootDeviceEnvironments[0]);
|
||||
|
||||
for (uint32_t i = 3; i < 3 + static_cast<uint32_t>(Drm::ResourceClass::MaxSize); i++) {
|
||||
drm.classHandles.push_back(i);
|
||||
}
|
||||
|
||||
{
|
||||
MockBufferObject bo(&drm, 0, 0, 1);
|
||||
MockDrmAllocation allocation(GraphicsAllocation::AllocationType::DEBUG_CONTEXT_SAVE_AREA, MemoryPool::System4KBPages);
|
||||
allocation.bufferObjects[0] = &bo;
|
||||
allocation.registerBOBindExtHandle(&drm);
|
||||
EXPECT_EQ(DrmMockResources::registerResourceReturnHandle, bo.bindExtHandles[0]);
|
||||
EXPECT_EQ(Drm::ResourceClass::ContextSaveArea, drm.registeredClass);
|
||||
}
|
||||
drm.registeredClass = Drm::ResourceClass::MaxSize;
|
||||
|
||||
{
|
||||
MockBufferObject bo(&drm, 0, 0, 1);
|
||||
MockDrmAllocation allocation(GraphicsAllocation::AllocationType::DEBUG_SBA_TRACKING_BUFFER, MemoryPool::System4KBPages);
|
||||
allocation.bufferObjects[0] = &bo;
|
||||
allocation.registerBOBindExtHandle(&drm);
|
||||
EXPECT_EQ(DrmMockResources::registerResourceReturnHandle, bo.bindExtHandles[0]);
|
||||
EXPECT_EQ(Drm::ResourceClass::SbaTrackingBuffer, drm.registeredClass);
|
||||
}
|
||||
drm.registeredClass = Drm::ResourceClass::MaxSize;
|
||||
|
||||
{
|
||||
MockBufferObject bo(&drm, 0, 0, 1);
|
||||
MockDrmAllocation allocation(GraphicsAllocation::AllocationType::KERNEL_ISA, MemoryPool::System4KBPages);
|
||||
allocation.bufferObjects[0] = &bo;
|
||||
allocation.registerBOBindExtHandle(&drm);
|
||||
EXPECT_EQ(DrmMockResources::registerResourceReturnHandle, bo.bindExtHandles[0]);
|
||||
EXPECT_EQ(Drm::ResourceClass::Isa, drm.registeredClass);
|
||||
}
|
||||
|
||||
drm.registeredClass = Drm::ResourceClass::MaxSize;
|
||||
|
||||
{
|
||||
MockBufferObject bo(&drm, 0, 0, 1);
|
||||
MockDrmAllocation allocation(GraphicsAllocation::AllocationType::BUFFER_HOST_MEMORY, MemoryPool::System4KBPages);
|
||||
allocation.bufferObjects[0] = &bo;
|
||||
allocation.registerBOBindExtHandle(&drm);
|
||||
EXPECT_EQ(0u, bo.bindExtHandles.size());
|
||||
EXPECT_EQ(Drm::ResourceClass::MaxSize, drm.registeredClass);
|
||||
}
|
||||
}
|
||||
TEST(DrmAllocationTest, givenResourceRegistrationNotEnabledWhenRegisteringBindExtHandleThenHandleIsNotAddedToBo) {
|
||||
auto executionEnvironment = std::make_unique<ExecutionEnvironment>();
|
||||
executionEnvironment->prepareRootDeviceEnvironments(1);
|
||||
DrmMockResources drm(*executionEnvironment->rootDeviceEnvironments[0]);
|
||||
EXPECT_EQ(0u, drm.classHandles.size());
|
||||
|
||||
MockBufferObject bo(&drm, 0, 0, 1);
|
||||
MockDrmAllocation allocation(GraphicsAllocation::AllocationType::DEBUG_CONTEXT_SAVE_AREA, MemoryPool::System4KBPages);
|
||||
allocation.bufferObjects[0] = &bo;
|
||||
allocation.registerBOBindExtHandle(&drm);
|
||||
EXPECT_EQ(0u, bo.bindExtHandles.size());
|
||||
EXPECT_EQ(Drm::ResourceClass::MaxSize, drm.registeredClass);
|
||||
}
|
||||
|
||||
} // namespace NEO
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include <cstring>
|
||||
|
||||
const int DrmMock::mockFd;
|
||||
const uint32_t DrmMockResources::registerResourceReturnHandle = 3;
|
||||
|
||||
int DrmMock::ioctl(unsigned long request, void *arg) {
|
||||
ioctlCallsCount++;
|
||||
|
@ -29,6 +29,7 @@ using namespace NEO;
|
||||
class DrmMock : public Drm {
|
||||
public:
|
||||
using Drm::checkQueueSliceSupport;
|
||||
using Drm::classHandles;
|
||||
using Drm::engineInfo;
|
||||
using Drm::generateUUID;
|
||||
using Drm::getQueueSliceCount;
|
||||
@ -199,3 +200,30 @@ class DrmMockEngine : public DrmMock {
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class DrmMockResources : public DrmMock {
|
||||
public:
|
||||
using DrmMock::DrmMock;
|
||||
|
||||
bool registerResourceClasses() override {
|
||||
registerClassesCalled = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
uint32_t registerResource(ResourceClass classType, void *data, size_t size) override {
|
||||
registeredClass = classType;
|
||||
return registerResourceReturnHandle;
|
||||
}
|
||||
|
||||
void unregisterResource(uint32_t handle) override {
|
||||
unregisterCalledCount++;
|
||||
unregisteredHandle = handle;
|
||||
}
|
||||
|
||||
static const uint32_t registerResourceReturnHandle;
|
||||
|
||||
uint32_t unregisteredHandle = 0;
|
||||
uint32_t unregisterCalledCount = 0;
|
||||
ResourceClass registeredClass = ResourceClass::MaxSize;
|
||||
bool registerClassesCalled = false;
|
||||
};
|
||||
|
Reference in New Issue
Block a user