Pass root device index to UpdateData

Related-To: NEO-4672
Change-Id: Ic264aa257bc721b48cd6460bb4843c6e2be213d9
Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
Mateusz Jablonski
2020-05-25 15:41:13 +02:00
committed by sys_ocldev
parent 4662183ccc
commit 990f81efea
13 changed files with 48 additions and 40 deletions

View File

@ -249,7 +249,7 @@ cl_int CommandQueue::enqueueAcquireSharedObjects(cl_uint numObjects, const cl_me
return CL_INVALID_MEM_OBJECT;
}
int result = memObject->peekSharingHandler()->acquire(memObject);
int result = memObject->peekSharingHandler()->acquire(memObject, getDevice().getRootDeviceIndex());
if (result != CL_SUCCESS) {
return result;
}

View File

@ -15,9 +15,9 @@
namespace NEO {
int SharingHandler::acquire(MemObj *memObj) {
int SharingHandler::acquire(MemObj *memObj, uint32_t rootDeviceIndex) {
if (acquireCount == 0) {
UpdateData updateData;
UpdateData updateData{rootDeviceIndex};
auto currentSharedHandle = memObj->getGraphicsAllocation()->peekSharedHandle();
updateData.sharedHandle = currentSharedHandle;
updateData.memObject = memObj;

View File

@ -20,6 +20,8 @@ enum SynchronizeStatus {
};
struct UpdateData {
UpdateData(uint32_t inRootDeviceIndex) : rootDeviceIndex(inRootDeviceIndex){};
const uint32_t rootDeviceIndex;
SynchronizeStatus synchronizationStatus;
osHandle sharedHandle;
MemObj *memObject = nullptr;
@ -35,7 +37,7 @@ class SharingFunctions {
class SharingHandler {
public:
int acquire(MemObj *memObj);
int acquire(MemObj *memObj, uint32_t rootDeviceIndex);
void release(MemObj *memObject, uint32_t rootDeviceIndex);
virtual ~SharingHandler() = default;

View File

@ -1003,13 +1003,17 @@ TEST(CommandQueue, givenEnqueueReleaseSharedObjectsWhenIncorrectArgumentsThenRet
}
TEST(CommandQueue, givenEnqueueAcquireSharedObjectsCallWhenAcquireFailsThenCorrectErrorIsReturned) {
const auto rootDeviceIndex = 1u;
class MockSharingHandler : public SharingHandler {
int validateUpdateData(UpdateData &data) override {
EXPECT_EQ(1u, data.rootDeviceIndex);
return CL_INVALID_MEM_OBJECT;
}
};
MockContext context;
MockCommandQueue cmdQ(&context, nullptr, 0);
UltClDeviceFactory deviceFactory{2, 0};
MockContext context(deviceFactory.rootDevices[rootDeviceIndex]);
MockCommandQueue cmdQ(&context, context.getDevice(0), 0);
auto buffer = std::unique_ptr<Buffer>(BufferHelper<>::create(&context));
MockSharingHandler *handler = new MockSharingHandler;

View File

@ -868,7 +868,7 @@ TEST_F(D3D9Tests, givenResourcesCreatedFromDifferentDevicesWhenAcquireReleaseCal
memoryManager->expectedLockingAllocation = sharedImg->getGraphicsAllocation();
mockSharingFcns->setDevice(nullptr); // force device change
sharedImg->getSharingHandler()->acquire(sharedImg.get());
sharedImg->getSharingHandler()->acquire(sharedImg.get(), context->getDevice(0)->getRootDeviceIndex());
EXPECT_EQ(createdResourceDevice, mockSharingFcns->getDevice());
mockSharingFcns->setDevice(nullptr); // force device change

View File

@ -713,7 +713,7 @@ TEST(D3DSurfaceTest, givenD3DSurfaceWhenInvalidMemObjectIsPassedToValidateUpdate
std::unique_ptr<D3DSurface> surface(new MockD3DSurface(&context, &surfaceInfo, nullptr, 0, imagePlane, 0, false, false));
MockBuffer buffer;
UpdateData updateData;
UpdateData updateData{context.getDevice(0)->getRootDeviceIndex()};
updateData.memObject = &buffer;
auto result = surface->validateUpdateData(updateData);
EXPECT_EQ(CL_INVALID_MEM_OBJECT, result);

View File

@ -106,7 +106,7 @@ TEST_F(GlReusedBufferTests, givenGlobalShareHandleChangedWhenAcquiringSharedBuff
bufferInfoOutput.globalShareHandle = 41;
dllParam.loadBuffer(bufferInfoOutput);
glBuffer->acquire(clBuffer.get());
glBuffer->acquire(clBuffer.get(), context.getDevice(0)->getRootDeviceIndex());
auto newGraphicsAllocation = clBuffer->getGraphicsAllocation();
EXPECT_NE(oldGraphicsAllocation, newGraphicsAllocation);
@ -135,7 +135,7 @@ TEST_F(GlReusedBufferTests, givenGlobalShareHandleDidNotChangeWhenAcquiringShare
auto glBuffer = new MyGlBuffer(context.getSharing<GLSharingFunctions>(), bufferId1);
clBuffer->setSharingHandler(glBuffer);
glBuffer->acquire(clBuffer.get());
glBuffer->acquire(clBuffer.get(), context.getDevice(0)->getRootDeviceIndex());
glBuffer->release(clBuffer.get(), context.getDevice(0)->getRootDeviceIndex());
}
@ -161,7 +161,7 @@ TEST_F(GlReusedBufferTests, givenGlobalShareHandleChangedWhenAcquiringSharedBuff
bufferInfoOutput.globalShareHandle = 41;
dllParam.loadBuffer(bufferInfoOutput);
glBuffer->acquire(clBuffer.get());
glBuffer->acquire(clBuffer.get(), context.getDevice(0)->getRootDeviceIndex());
glBuffer->release(clBuffer.get(), context.getDevice(0)->getRootDeviceIndex());
}
@ -181,12 +181,12 @@ TEST_F(GlReusedBufferTests, givenMultipleBuffersAndGlobalShareHandleChangedWhenA
bufferInfoOutput.globalShareHandle = 41;
dllParam.loadBuffer(bufferInfoOutput);
clBuffer1->peekSharingHandler()->acquire(clBuffer1.get());
clBuffer1->peekSharingHandler()->acquire(clBuffer1.get(), context.getDevice(0)->getRootDeviceIndex());
auto newGraphicsAllocation = clBuffer1->getGraphicsAllocation();
EXPECT_EQ(1, graphicsAllocationsForGlBufferReuse->size());
EXPECT_EQ(newGraphicsAllocation, graphicsAllocationsForGlBufferReuse->at(0).second);
clBuffer2->peekSharingHandler()->acquire(clBuffer2.get());
clBuffer2->peekSharingHandler()->acquire(clBuffer2.get(), context.getDevice(0)->getRootDeviceIndex());
EXPECT_EQ(clBuffer2->getGraphicsAllocation(), newGraphicsAllocation);
EXPECT_EQ(1, graphicsAllocationsForGlBufferReuse->size());
EXPECT_EQ(newGraphicsAllocation, graphicsAllocationsForGlBufferReuse->at(0).second);
@ -210,7 +210,7 @@ TEST_F(GlReusedBufferTests, givenGraphicsAllocationCreationReturnsNullptrWhenAcq
bufferInfoOutput.globalShareHandle = 41;
dllParam.loadBuffer(bufferInfoOutput);
context.memoryManager = failingMemoryManager.get();
auto result = glBuffer->acquire(clBuffer.get());
auto result = glBuffer->acquire(clBuffer.get(), context.getDevice(0)->getRootDeviceIndex());
EXPECT_EQ(CL_OUT_OF_RESOURCES, result);
EXPECT_EQ(nullptr, clBuffer->getGraphicsAllocation());

View File

@ -216,7 +216,7 @@ TEST_F(glSharingTests, givenClGLBufferWhenItIsAcquiredThenAcuqireCountIsIncremen
EXPECT_FALSE(memObject->isReadWriteOnCpuAllowed());
auto currentGraphicsAllocation = memObject->getGraphicsAllocation();
memObject->peekSharingHandler()->acquire(memObject);
memObject->peekSharingHandler()->acquire(memObject, context.getDevice(0)->getRootDeviceIndex());
EXPECT_EQ(2, mockGlSharing->dllParam->getParam("GLAcquireSharedBufferCalled"));
EXPECT_EQ(1, mockGlSharing->dllParam->getParam("GLGetCurrentContextCalled"));
@ -233,11 +233,11 @@ TEST_F(glSharingTests, givenClGLBufferWhenItIsAcquiredTwiceThenAcuqireIsNotCalle
auto glBuffer = clCreateFromGLBuffer(&context, 0, bufferId, &retVal);
auto memObject = castToObject<MemObj>(glBuffer);
memObject->peekSharingHandler()->acquire(memObject);
memObject->peekSharingHandler()->acquire(memObject, context.getDevice(0)->getRootDeviceIndex());
EXPECT_EQ(2, mockGlSharing->dllParam->getParam("GLAcquireSharedBufferCalled"));
EXPECT_EQ(1, mockGlSharing->dllParam->getParam("GLGetCurrentContextCalled"));
memObject->peekSharingHandler()->acquire(memObject);
memObject->peekSharingHandler()->acquire(memObject, context.getDevice(0)->getRootDeviceIndex());
EXPECT_EQ(2, mockGlSharing->dllParam->getParam("GLAcquireSharedBufferCalled"));
EXPECT_EQ(1, mockGlSharing->dllParam->getParam("GLGetCurrentContextCalled"));
@ -274,13 +274,13 @@ TEST_F(glSharingTests, givenClGLBufferWhenItIsAcquiredTwiceAfterReleaseThenAcuqi
auto glBuffer = clCreateFromGLBuffer(&context, 0, bufferId, &retVal);
auto memObject = castToObject<MemObj>(glBuffer);
memObject->peekSharingHandler()->acquire(memObject);
memObject->peekSharingHandler()->acquire(memObject, context.getDevice(0)->getRootDeviceIndex());
EXPECT_EQ(2, mockGlSharing->dllParam->getParam("GLAcquireSharedBufferCalled"));
EXPECT_EQ(1, mockGlSharing->dllParam->getParam("GLGetCurrentContextCalled"));
memObject->peekSharingHandler()->release(memObject, context.getDevice(0)->getRootDeviceIndex());
memObject->peekSharingHandler()->acquire(memObject);
memObject->peekSharingHandler()->acquire(memObject, context.getDevice(0)->getRootDeviceIndex());
EXPECT_EQ(3, mockGlSharing->dllParam->getParam("GLAcquireSharedBufferCalled"));
EXPECT_EQ(2, mockGlSharing->dllParam->getParam("GLGetCurrentContextCalled"));
@ -292,8 +292,8 @@ TEST_F(glSharingTests, givenClGLBufferWhenItIsAcquireCountIsDecrementedToZeroThe
std::unique_ptr<Buffer> buffer(GlBuffer::createSharedGlBuffer(&context, CL_MEM_READ_WRITE, bufferId, nullptr));
auto sharingHandler = buffer->peekSharingHandler();
sharingHandler->acquire(buffer.get());
sharingHandler->acquire(buffer.get());
sharingHandler->acquire(buffer.get(), context.getDevice(0)->getRootDeviceIndex());
sharingHandler->acquire(buffer.get(), context.getDevice(0)->getRootDeviceIndex());
sharingHandler->release(buffer.get(), context.getDevice(0)->getRootDeviceIndex());
EXPECT_EQ(0, mockGlSharing->dllParam->getParam("GLReleaseSharedBufferCalled"));
@ -313,7 +313,7 @@ TEST_F(glSharingTests, givenClGLBufferWhenItIsAcquiredWithDifferentOffsetThenGra
mockGlSharing->m_bufferInfoOutput.bufferOffset = 50u;
mockGlSharing->uploadDataToBufferInfo();
memObject->peekSharingHandler()->acquire(memObject);
memObject->peekSharingHandler()->acquire(memObject, context.getDevice(0)->getRootDeviceIndex());
auto offsetedGraphicsAddress = memObject->getGraphicsAllocation()->getGpuAddress();

View File

@ -442,8 +442,8 @@ TEST_F(GlSharingTextureTests, givenSharedGlTextureWhenItIsAcquireCountIsDecremen
std::unique_ptr<Image> image(GlTexture::createSharedGlTexture(clContext.get(), CL_MEM_READ_ONLY, GL_TEXTURE_2D, 0, textureId, nullptr));
auto sharingHandler = image->peekSharingHandler();
sharingHandler->acquire(image.get());
sharingHandler->acquire(image.get());
sharingHandler->acquire(image.get(), clContext->getDevice(0)->getRootDeviceIndex());
sharingHandler->acquire(image.get(), clContext->getDevice(0)->getRootDeviceIndex());
sharingHandler->release(image.get(), clContext->getDevice(0)->getRootDeviceIndex());
EXPECT_EQ(0, glSharing->dllParam->getParam("GLReleaseSharedTextureCalled"));
@ -458,8 +458,8 @@ TEST_F(GlSharingTextureTests, givenSharedRenderBufferWhenItIsAcquireCountIsDecre
std::unique_ptr<Image> image(GlTexture::createSharedGlTexture(clContext.get(), CL_MEM_READ_WRITE, GL_RENDERBUFFER_EXT, 0, textureId, nullptr));
auto sharingHandler = image->peekSharingHandler();
sharingHandler->acquire(image.get());
sharingHandler->acquire(image.get());
sharingHandler->acquire(image.get(), clContext->getDevice(0)->getRootDeviceIndex());
sharingHandler->acquire(image.get(), clContext->getDevice(0)->getRootDeviceIndex());
sharingHandler->release(image.get(), clContext->getDevice(0)->getRootDeviceIndex());
EXPECT_EQ(0, glSharing->dllParam->getParam("GLReleaseSharedRenderBufferCalled"));

View File

@ -21,7 +21,8 @@ TEST(sharingHandler, givenBasicSharingHandlerWhenSynchronizeObjectThenErrorIsRet
} sharingHandler;
UpdateData updateData;
const uint32_t rootDeviceIndex = 1u;
UpdateData updateData{rootDeviceIndex};
sharingHandler.synchronizeHandlerMock(updateData);
EXPECT_EQ(SynchronizeStatus::SYNCHRONIZE_ERROR, updateData.synchronizationStatus);
@ -49,7 +50,7 @@ TEST(sharingHandler, givenMemObjWhenAcquireIncrementCounterThenReleaseShouldDecr
} sharingHandler;
EXPECT_EQ(0u, sharingHandler.acquireCount);
sharingHandler.acquire(memObj.get());
sharingHandler.acquire(memObj.get(), mockAllocation->getRootDeviceIndex());
EXPECT_EQ(1u, sharingHandler.acquireCount);
sharingHandler.release(memObj.get(), mockAllocation->getRootDeviceIndex());
EXPECT_EQ(0u, sharingHandler.acquireCount);
@ -74,9 +75,9 @@ TEST(sharingHandler, givenMemObjWhenAcquireTwoTimesThenReleaseShouldBeCalledTwoT
} sharingHandler;
EXPECT_EQ(0u, sharingHandler.acquireCount);
sharingHandler.acquire(memObj.get());
sharingHandler.acquire(memObj.get(), mockAllocation->getRootDeviceIndex());
EXPECT_EQ(1u, sharingHandler.acquireCount);
sharingHandler.acquire(memObj.get());
sharingHandler.acquire(memObj.get(), mockAllocation->getRootDeviceIndex());
EXPECT_EQ(2u, sharingHandler.acquireCount);
sharingHandler.release(memObj.get(), mockAllocation->getRootDeviceIndex());
EXPECT_EQ(1u, sharingHandler.acquireCount);
@ -92,7 +93,8 @@ TEST(sharingHandler, givenSharingHandlerWhenValidateUpdateDataIsCalledWithNonNul
using SharingHandler::validateUpdateData;
};
MockSharingHandler sharingHandler;
UpdateData updateData;
const uint32_t rootDeviceIndex = 1u;
UpdateData updateData{rootDeviceIndex};
sharingHandler.validateUpdateData(updateData);
}
@ -103,6 +105,6 @@ TEST(sharingHandler, givenSharingHandlerWhenAcquiringThenReturnErrorCode) {
MemObj memObj(&context, CL_MEM_OBJECT_BUFFER, MemoryPropertiesHelper::createMemoryProperties(CL_MEM_USE_HOST_PTR, 0, 0), CL_MEM_USE_HOST_PTR, 0,
1, nullptr, nullptr, graphicsAllocation, true, false, false);
auto result = sharingHandler.acquire(&memObj);
auto result = sharingHandler.acquire(&memObj, graphicsAllocation->getRootDeviceIndex());
EXPECT_NE(CL_SUCCESS, result);
}

View File

@ -29,10 +29,10 @@ TEST_F(UnifiedSharingBufferTestsWithMemoryManager, givenUnifiedBufferThenItCanBe
ASSERT_EQ(0u, sharingHandler->acquireCount);
ASSERT_EQ(CL_SUCCESS, sharingHandler->acquire(buffer.get()));
ASSERT_EQ(CL_SUCCESS, sharingHandler->acquire(buffer.get(), context->getDevice(0)->getRootDeviceIndex()));
EXPECT_EQ(1u, sharingHandler->acquireCount);
ASSERT_EQ(CL_SUCCESS, sharingHandler->acquire(buffer.get()));
ASSERT_EQ(CL_SUCCESS, sharingHandler->acquire(buffer.get(), context->getDevice(0)->getRootDeviceIndex()));
EXPECT_EQ(2u, sharingHandler->acquireCount);
sharingHandler->release(buffer.get(), context->getDevice(0)->getRootDeviceIndex());

View File

@ -152,10 +152,10 @@ TEST_F(UnifiedSharingTestsWithMemoryManager, givenUnifiedSharingHandlerWhenAcqui
ASSERT_EQ(0u, sharingHandler->synchronizeObjectCalled);
ASSERT_EQ(CL_SUCCESS, sharingHandler->acquire(buffer.get()));
ASSERT_EQ(CL_SUCCESS, sharingHandler->acquire(buffer.get(), context->getDevice(0)->getRootDeviceIndex()));
EXPECT_EQ(1u, sharingHandler->synchronizeObjectCalled);
ASSERT_EQ(CL_SUCCESS, sharingHandler->acquire(buffer.get()));
ASSERT_EQ(CL_SUCCESS, sharingHandler->acquire(buffer.get(), context->getDevice(0)->getRootDeviceIndex()));
EXPECT_EQ(1u, sharingHandler->synchronizeObjectCalled);
ASSERT_EQ(0u, sharingHandler->releaseResourceCalled);

View File

@ -329,11 +329,11 @@ TEST_F(VaSharingTests, givenContextWhenClCreateFromVaApiMediaSurfaceIsCalledThen
TEST_F(VaSharingTests, givenVASurfaceWhenItIsAcquiredTwiceThenAcquireIsNotCalled) {
createMediaSurface();
sharedImg->peekSharingHandler()->acquire(sharedImg);
sharedImg->peekSharingHandler()->acquire(sharedImg, context.getDevice(0)->getRootDeviceIndex());
EXPECT_TRUE(vaSharing->sharingFunctions.extGetSurfaceHandleCalled);
vaSharing->sharingFunctions.extGetSurfaceHandleCalled = false;
sharedImg->peekSharingHandler()->acquire(sharedImg);
sharedImg->peekSharingHandler()->acquire(sharedImg, context.getDevice(0)->getRootDeviceIndex());
EXPECT_FALSE(vaSharing->sharingFunctions.extGetSurfaceHandleCalled);
}
@ -471,7 +471,7 @@ TEST_F(VaSharingTests, givenNonInteropUserSyncContextWhenAcquireIsCalledThenSync
auto memObj = castToObject<MemObj>(sharedClMem);
EXPECT_FALSE(vaSharing->sharingFunctions.syncSurfaceCalled);
memObj->peekSharingHandler()->acquire(sharedImg);
memObj->peekSharingHandler()->acquire(sharedImg, context.getDevice(0)->getRootDeviceIndex());
EXPECT_TRUE(vaSharing->sharingFunctions.syncSurfaceCalled);
}
@ -481,7 +481,7 @@ TEST_F(VaSharingTests, givenInteropUserSyncContextWhenAcquireIsCalledThenDontSyn
createMediaSurface();
EXPECT_FALSE(vaSharing->sharingFunctions.syncSurfaceCalled);
sharedImg->peekSharingHandler()->acquire(sharedImg);
sharedImg->peekSharingHandler()->acquire(sharedImg, context.getDevice(0)->getRootDeviceIndex());
EXPECT_FALSE(vaSharing->sharingFunctions.syncSurfaceCalled);
}