mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-15 13:01:45 +08:00
Enable memory transfer in enqueueMigrateMemObjects
Related-To: NEO-4589 Signed-off-by: Krzysztof Gibala <krzysztof.gibala@intel.com>
This commit is contained in:

committed by
Compute-Runtime-Automation

parent
bbb0e9d095
commit
2e346b58cd
@ -3355,6 +3355,15 @@ cl_int CL_API_CALL clEnqueueMigrateMemObjects(cl_command_queue commandQueue,
|
|||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (unsigned int object = 0; object < numMemObjects; object++) {
|
||||||
|
auto memObject = castToObject<MemObj>(memObjects[object]);
|
||||||
|
if (!memObject) {
|
||||||
|
retVal = CL_INVALID_MEM_OBJECT;
|
||||||
|
TRACING_EXIT(clEnqueueMigrateMemObjects, &retVal);
|
||||||
|
return retVal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const cl_mem_migration_flags allValidFlags = CL_MIGRATE_MEM_OBJECT_CONTENT_UNDEFINED | CL_MIGRATE_MEM_OBJECT_HOST;
|
const cl_mem_migration_flags allValidFlags = CL_MIGRATE_MEM_OBJECT_CONTENT_UNDEFINED | CL_MIGRATE_MEM_OBJECT_HOST;
|
||||||
|
|
||||||
if ((flags & (~allValidFlags)) != 0) {
|
if ((flags & (~allValidFlags)) != 0) {
|
||||||
|
@ -26,6 +26,13 @@ cl_int CommandQueueHw<GfxFamily>::enqueueMigrateMemObjects(cl_uint numMemObjects
|
|||||||
NullSurface s;
|
NullSurface s;
|
||||||
Surface *surfaces[] = {&s};
|
Surface *surfaces[] = {&s};
|
||||||
|
|
||||||
|
auto rootDeviceIndex = getDevice().getRootDeviceIndex();
|
||||||
|
|
||||||
|
for (unsigned int object = 0; object < numMemObjects; object++) {
|
||||||
|
auto memObject = castToObject<MemObj>(memObjects[object]);
|
||||||
|
memObject->getMigrateableMultiGraphicsAllocation().ensureMemoryOnDevice(*getDevice().getMemoryManager(), rootDeviceIndex);
|
||||||
|
}
|
||||||
|
|
||||||
enqueueHandler<CL_COMMAND_MIGRATE_MEM_OBJECTS>(surfaces,
|
enqueueHandler<CL_COMMAND_MIGRATE_MEM_OBJECTS>(surfaces,
|
||||||
false,
|
false,
|
||||||
MultiDispatchInfo(),
|
MultiDispatchInfo(),
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#include "opencl/source/command_queue/command_queue.h"
|
#include "opencl/source/command_queue/command_queue.h"
|
||||||
#include "opencl/source/context/context.h"
|
#include "opencl/source/context/context.h"
|
||||||
#include "opencl/source/event/event.h"
|
#include "opencl/source/event/event.h"
|
||||||
|
#include "opencl/test/unit_test/mocks/mock_buffer.h"
|
||||||
|
|
||||||
#include "cl_api_tests.h"
|
#include "cl_api_tests.h"
|
||||||
|
|
||||||
@ -31,7 +32,7 @@ TEST_F(clEnqueueMigrateMemObjectsTests, GivenNullCommandQueueWhenMigratingMemObj
|
|||||||
EXPECT_NE(nullptr, buffer);
|
EXPECT_NE(nullptr, buffer);
|
||||||
|
|
||||||
cl_event eventReturned = nullptr;
|
cl_event eventReturned = nullptr;
|
||||||
auto Result = clEnqueueMigrateMemObjects(
|
auto result = clEnqueueMigrateMemObjects(
|
||||||
nullptr,
|
nullptr,
|
||||||
1,
|
1,
|
||||||
&buffer,
|
&buffer,
|
||||||
@ -39,7 +40,7 @@ TEST_F(clEnqueueMigrateMemObjectsTests, GivenNullCommandQueueWhenMigratingMemObj
|
|||||||
0,
|
0,
|
||||||
nullptr,
|
nullptr,
|
||||||
&eventReturned);
|
&eventReturned);
|
||||||
EXPECT_EQ(CL_INVALID_COMMAND_QUEUE, Result);
|
EXPECT_EQ(CL_INVALID_COMMAND_QUEUE, result);
|
||||||
|
|
||||||
retVal = clReleaseMemObject(buffer);
|
retVal = clReleaseMemObject(buffer);
|
||||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||||
@ -65,7 +66,7 @@ TEST_F(clEnqueueMigrateMemObjectsTests, GivenValidInputsWhenMigratingMemObjThenS
|
|||||||
EXPECT_NE(nullptr, buffer);
|
EXPECT_NE(nullptr, buffer);
|
||||||
|
|
||||||
cl_event eventReturned = nullptr;
|
cl_event eventReturned = nullptr;
|
||||||
auto Result = clEnqueueMigrateMemObjects(
|
auto result = clEnqueueMigrateMemObjects(
|
||||||
pCommandQueue,
|
pCommandQueue,
|
||||||
1,
|
1,
|
||||||
&buffer,
|
&buffer,
|
||||||
@ -73,7 +74,7 @@ TEST_F(clEnqueueMigrateMemObjectsTests, GivenValidInputsWhenMigratingMemObjThenS
|
|||||||
0,
|
0,
|
||||||
nullptr,
|
nullptr,
|
||||||
&eventReturned);
|
&eventReturned);
|
||||||
EXPECT_EQ(CL_SUCCESS, Result);
|
EXPECT_EQ(CL_SUCCESS, result);
|
||||||
|
|
||||||
retVal = clReleaseMemObject(buffer);
|
retVal = clReleaseMemObject(buffer);
|
||||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||||
@ -86,7 +87,7 @@ TEST_F(clEnqueueMigrateMemObjectsTests, GivenValidInputsWhenMigratingMemObjThenS
|
|||||||
TEST_F(clEnqueueMigrateMemObjectsTests, GivenNullMemObjsWhenMigratingMemObjThenInvalidValueErrorIsReturned) {
|
TEST_F(clEnqueueMigrateMemObjectsTests, GivenNullMemObjsWhenMigratingMemObjThenInvalidValueErrorIsReturned) {
|
||||||
|
|
||||||
cl_event eventReturned = nullptr;
|
cl_event eventReturned = nullptr;
|
||||||
auto Result = clEnqueueMigrateMemObjects(
|
auto result = clEnqueueMigrateMemObjects(
|
||||||
pCommandQueue,
|
pCommandQueue,
|
||||||
1,
|
1,
|
||||||
nullptr,
|
nullptr,
|
||||||
@ -94,13 +95,13 @@ TEST_F(clEnqueueMigrateMemObjectsTests, GivenNullMemObjsWhenMigratingMemObjThenI
|
|||||||
0,
|
0,
|
||||||
nullptr,
|
nullptr,
|
||||||
&eventReturned);
|
&eventReturned);
|
||||||
EXPECT_EQ(CL_INVALID_VALUE, Result);
|
EXPECT_EQ(CL_INVALID_VALUE, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(clEnqueueMigrateMemObjectsTests, GivenZeroMemObjectsWhenMigratingMemObjsThenInvalidValueErrorIsReturned) {
|
TEST_F(clEnqueueMigrateMemObjectsTests, GivenZeroMemObjectsWhenMigratingMemObjsThenInvalidValueErrorIsReturned) {
|
||||||
|
|
||||||
cl_event eventReturned = nullptr;
|
cl_event eventReturned = nullptr;
|
||||||
auto Result = clEnqueueMigrateMemObjects(
|
auto result = clEnqueueMigrateMemObjects(
|
||||||
pCommandQueue,
|
pCommandQueue,
|
||||||
0,
|
0,
|
||||||
nullptr,
|
nullptr,
|
||||||
@ -108,13 +109,13 @@ TEST_F(clEnqueueMigrateMemObjectsTests, GivenZeroMemObjectsWhenMigratingMemObjsT
|
|||||||
0,
|
0,
|
||||||
nullptr,
|
nullptr,
|
||||||
&eventReturned);
|
&eventReturned);
|
||||||
EXPECT_EQ(CL_INVALID_VALUE, Result);
|
EXPECT_EQ(CL_INVALID_VALUE, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(clEnqueueMigrateMemObjectsTests, GivenNonZeroEventsAndNullWaitlistWhenMigratingMemObjThenInvalidWaitListErrorIsReturned) {
|
TEST_F(clEnqueueMigrateMemObjectsTests, GivenNonZeroEventsAndNullWaitlistWhenMigratingMemObjThenInvalidWaitListErrorIsReturned) {
|
||||||
|
|
||||||
cl_event eventReturned = nullptr;
|
cl_event eventReturned = nullptr;
|
||||||
auto Result = clEnqueueMigrateMemObjects(
|
auto result = clEnqueueMigrateMemObjects(
|
||||||
pCommandQueue,
|
pCommandQueue,
|
||||||
0,
|
0,
|
||||||
nullptr,
|
nullptr,
|
||||||
@ -122,7 +123,7 @@ TEST_F(clEnqueueMigrateMemObjectsTests, GivenNonZeroEventsAndNullWaitlistWhenMig
|
|||||||
2,
|
2,
|
||||||
nullptr,
|
nullptr,
|
||||||
&eventReturned);
|
&eventReturned);
|
||||||
EXPECT_EQ(CL_INVALID_EVENT_WAIT_LIST, Result);
|
EXPECT_EQ(CL_INVALID_EVENT_WAIT_LIST, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(clEnqueueMigrateMemObjectsTests, GivenZeroEventsAndNonNullWaitlistWhenMigratingMemObjsThenInvalidWaitListErrorIsReturned) {
|
TEST_F(clEnqueueMigrateMemObjectsTests, GivenZeroEventsAndNonNullWaitlistWhenMigratingMemObjsThenInvalidWaitListErrorIsReturned) {
|
||||||
@ -130,7 +131,7 @@ TEST_F(clEnqueueMigrateMemObjectsTests, GivenZeroEventsAndNonNullWaitlistWhenMig
|
|||||||
cl_event eventReturned = nullptr;
|
cl_event eventReturned = nullptr;
|
||||||
Event event(pCommandQueue, CL_COMMAND_MIGRATE_MEM_OBJECTS, 0, 0);
|
Event event(pCommandQueue, CL_COMMAND_MIGRATE_MEM_OBJECTS, 0, 0);
|
||||||
|
|
||||||
auto Result = clEnqueueMigrateMemObjects(
|
auto result = clEnqueueMigrateMemObjects(
|
||||||
pCommandQueue,
|
pCommandQueue,
|
||||||
0,
|
0,
|
||||||
nullptr,
|
nullptr,
|
||||||
@ -138,7 +139,7 @@ TEST_F(clEnqueueMigrateMemObjectsTests, GivenZeroEventsAndNonNullWaitlistWhenMig
|
|||||||
0,
|
0,
|
||||||
(cl_event *)&event,
|
(cl_event *)&event,
|
||||||
&eventReturned);
|
&eventReturned);
|
||||||
EXPECT_EQ(CL_INVALID_EVENT_WAIT_LIST, Result);
|
EXPECT_EQ(CL_INVALID_EVENT_WAIT_LIST, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(clEnqueueMigrateMemObjectsTests, GivenValidFlagsWhenMigratingMemObjsThenSuccessIsReturned) {
|
TEST_F(clEnqueueMigrateMemObjectsTests, GivenValidFlagsWhenMigratingMemObjsThenSuccessIsReturned) {
|
||||||
@ -160,7 +161,7 @@ TEST_F(clEnqueueMigrateMemObjectsTests, GivenValidFlagsWhenMigratingMemObjsThenS
|
|||||||
|
|
||||||
for (auto validFlag : validFlags) {
|
for (auto validFlag : validFlags) {
|
||||||
cl_event eventReturned = nullptr;
|
cl_event eventReturned = nullptr;
|
||||||
auto Result = clEnqueueMigrateMemObjects(
|
auto result = clEnqueueMigrateMemObjects(
|
||||||
pCommandQueue,
|
pCommandQueue,
|
||||||
1,
|
1,
|
||||||
&buffer,
|
&buffer,
|
||||||
@ -168,7 +169,7 @@ TEST_F(clEnqueueMigrateMemObjectsTests, GivenValidFlagsWhenMigratingMemObjsThenS
|
|||||||
0,
|
0,
|
||||||
nullptr,
|
nullptr,
|
||||||
&eventReturned);
|
&eventReturned);
|
||||||
EXPECT_EQ(CL_SUCCESS, Result);
|
EXPECT_EQ(CL_SUCCESS, result);
|
||||||
clReleaseEvent(eventReturned);
|
clReleaseEvent(eventReturned);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -197,7 +198,7 @@ TEST_F(clEnqueueMigrateMemObjectsTests, GivenInvalidFlagsWhenMigratingMemObjsThe
|
|||||||
|
|
||||||
for (auto invalidFlag : invalidFlags) {
|
for (auto invalidFlag : invalidFlags) {
|
||||||
cl_event eventReturned = nullptr;
|
cl_event eventReturned = nullptr;
|
||||||
auto Result = clEnqueueMigrateMemObjects(
|
auto result = clEnqueueMigrateMemObjects(
|
||||||
pCommandQueue,
|
pCommandQueue,
|
||||||
1,
|
1,
|
||||||
&buffer,
|
&buffer,
|
||||||
@ -205,7 +206,7 @@ TEST_F(clEnqueueMigrateMemObjectsTests, GivenInvalidFlagsWhenMigratingMemObjsThe
|
|||||||
0,
|
0,
|
||||||
nullptr,
|
nullptr,
|
||||||
&eventReturned);
|
&eventReturned);
|
||||||
EXPECT_EQ(CL_INVALID_VALUE, Result);
|
EXPECT_EQ(CL_INVALID_VALUE, result);
|
||||||
clReleaseEvent(eventReturned);
|
clReleaseEvent(eventReturned);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -214,3 +215,18 @@ TEST_F(clEnqueueMigrateMemObjectsTests, GivenInvalidFlagsWhenMigratingMemObjsThe
|
|||||||
|
|
||||||
delete[] pHostMem;
|
delete[] pHostMem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(clEnqueueMigrateMemObjectsTests, GivenInvalidMemObjectWhenMigratingMemObjsThenInvalidMemObjectErrorIsReturned) {
|
||||||
|
cl_event eventReturned = nullptr;
|
||||||
|
|
||||||
|
auto result = clEnqueueMigrateMemObjects(
|
||||||
|
pCommandQueue,
|
||||||
|
1,
|
||||||
|
reinterpret_cast<cl_mem *>(pCommandQueue),
|
||||||
|
CL_MIGRATE_MEM_OBJECT_HOST,
|
||||||
|
0,
|
||||||
|
nullptr,
|
||||||
|
&eventReturned);
|
||||||
|
|
||||||
|
EXPECT_EQ(CL_INVALID_MEM_OBJECT, result);
|
||||||
|
}
|
||||||
|
@ -37,10 +37,12 @@ typedef Test<MigrateMemObjectsFixture> MigrateMemObjectsTest;
|
|||||||
TEST_F(MigrateMemObjectsTest, GivenNullEventWhenMigratingEventsThenSuccessIsReturned) {
|
TEST_F(MigrateMemObjectsTest, GivenNullEventWhenMigratingEventsThenSuccessIsReturned) {
|
||||||
|
|
||||||
MockBuffer buffer;
|
MockBuffer buffer;
|
||||||
|
auto bufferMemObj = static_cast<cl_mem>(&buffer);
|
||||||
|
auto pBufferMemObj = &bufferMemObj;
|
||||||
|
|
||||||
auto retVal = pCmdQ->enqueueMigrateMemObjects(
|
auto retVal = pCmdQ->enqueueMigrateMemObjects(
|
||||||
1,
|
1,
|
||||||
(cl_mem *)&buffer,
|
pBufferMemObj,
|
||||||
CL_MIGRATE_MEM_OBJECT_HOST,
|
CL_MIGRATE_MEM_OBJECT_HOST,
|
||||||
0,
|
0,
|
||||||
nullptr,
|
nullptr,
|
||||||
@ -52,13 +54,15 @@ TEST_F(MigrateMemObjectsTest, GivenNullEventWhenMigratingEventsThenSuccessIsRetu
|
|||||||
TEST_F(MigrateMemObjectsTest, GivenValidEventListWhenMigratingEventsThenSuccessIsReturned) {
|
TEST_F(MigrateMemObjectsTest, GivenValidEventListWhenMigratingEventsThenSuccessIsReturned) {
|
||||||
|
|
||||||
MockBuffer buffer;
|
MockBuffer buffer;
|
||||||
|
auto bufferMemObj = static_cast<cl_mem>(&buffer);
|
||||||
|
auto pBufferMemObj = &bufferMemObj;
|
||||||
|
|
||||||
UserEvent uEvent;
|
UserEvent uEvent;
|
||||||
cl_event eventWaitList[] = {&uEvent};
|
cl_event eventWaitList[] = {&uEvent};
|
||||||
|
|
||||||
auto retVal = pCmdQ->enqueueMigrateMemObjects(
|
auto retVal = pCmdQ->enqueueMigrateMemObjects(
|
||||||
1,
|
1,
|
||||||
(cl_mem *)&buffer,
|
pBufferMemObj,
|
||||||
CL_MIGRATE_MEM_OBJECT_HOST,
|
CL_MIGRATE_MEM_OBJECT_HOST,
|
||||||
1,
|
1,
|
||||||
eventWaitList,
|
eventWaitList,
|
||||||
@ -70,12 +74,14 @@ TEST_F(MigrateMemObjectsTest, GivenValidEventListWhenMigratingEventsThenSuccessI
|
|||||||
TEST_F(MigrateMemObjectsTest, GivenEventPointerWhenMigratingEventsThenEventIsReturned) {
|
TEST_F(MigrateMemObjectsTest, GivenEventPointerWhenMigratingEventsThenEventIsReturned) {
|
||||||
|
|
||||||
MockBuffer buffer;
|
MockBuffer buffer;
|
||||||
|
auto bufferMemObj = static_cast<cl_mem>(&buffer);
|
||||||
|
auto pBufferMemObj = &bufferMemObj;
|
||||||
|
|
||||||
cl_event event = nullptr;
|
cl_event event = nullptr;
|
||||||
|
|
||||||
auto retVal = pCmdQ->enqueueMigrateMemObjects(
|
auto retVal = pCmdQ->enqueueMigrateMemObjects(
|
||||||
1,
|
1,
|
||||||
(cl_mem *)&buffer,
|
pBufferMemObj,
|
||||||
CL_MIGRATE_MEM_OBJECT_HOST,
|
CL_MIGRATE_MEM_OBJECT_HOST,
|
||||||
0,
|
0,
|
||||||
nullptr,
|
nullptr,
|
||||||
|
@ -17,8 +17,10 @@
|
|||||||
#include "opencl/source/helpers/properties_helper.h"
|
#include "opencl/source/helpers/properties_helper.h"
|
||||||
#include "opencl/source/mem_obj/mem_obj.h"
|
#include "opencl/source/mem_obj/mem_obj.h"
|
||||||
#include "opencl/source/platform/platform.h"
|
#include "opencl/source/platform/platform.h"
|
||||||
|
#include "opencl/test/unit_test/command_queue/command_queue_fixture.h"
|
||||||
#include "opencl/test/unit_test/fixtures/multi_root_device_fixture.h"
|
#include "opencl/test/unit_test/fixtures/multi_root_device_fixture.h"
|
||||||
#include "opencl/test/unit_test/mocks/mock_allocation_properties.h"
|
#include "opencl/test/unit_test/mocks/mock_allocation_properties.h"
|
||||||
|
#include "opencl/test/unit_test/mocks/mock_buffer.h"
|
||||||
#include "opencl/test/unit_test/mocks/mock_context.h"
|
#include "opencl/test/unit_test/mocks/mock_context.h"
|
||||||
#include "opencl/test/unit_test/mocks/mock_deferred_deleter.h"
|
#include "opencl/test/unit_test/mocks/mock_deferred_deleter.h"
|
||||||
#include "opencl/test/unit_test/mocks/mock_memory_manager.h"
|
#include "opencl/test/unit_test/mocks/mock_memory_manager.h"
|
||||||
@ -570,3 +572,36 @@ TEST_F(MemObjMultiRootDeviceTests, WhenMemObjMapAreCreatedThenAllAllocationAreDe
|
|||||||
|
|
||||||
memObj.reset(nullptr);
|
memObj.reset(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(MemObjMultiRootDeviceTests, WhenMemObjIsCreatedAndEnqueueMigrateMemObjectsCalledThenMemObjMultiGraphicsAllocationLastUsedRootDeviceIndexHasCorrectRootDeviceIndex) {
|
||||||
|
cl_int retVal = 0;
|
||||||
|
std::unique_ptr<Buffer> buffer(Buffer::create(context.get(), 0, MemoryConstants::pageSize, nullptr, retVal));
|
||||||
|
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||||
|
EXPECT_NE(nullptr, buffer);
|
||||||
|
|
||||||
|
auto bufferMemObj = static_cast<cl_mem>(buffer.get());
|
||||||
|
auto pBufferMemObj = &bufferMemObj;
|
||||||
|
|
||||||
|
auto cmdQ1 = context->getSpecialQueue(1u);
|
||||||
|
retVal = cmdQ1->enqueueMigrateMemObjects(1, pBufferMemObj, CL_MIGRATE_MEM_OBJECT_HOST, 0, nullptr, nullptr);
|
||||||
|
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||||
|
EXPECT_EQ(buffer.get()->getMultiGraphicsAllocation().getLastUsedRootDeviceIndex(), 1u);
|
||||||
|
|
||||||
|
retVal = cmdQ1->enqueueMigrateMemObjects(1, pBufferMemObj, CL_MIGRATE_MEM_OBJECT_HOST, 0, nullptr, nullptr);
|
||||||
|
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||||
|
EXPECT_EQ(buffer.get()->getMultiGraphicsAllocation().getLastUsedRootDeviceIndex(), 1u);
|
||||||
|
|
||||||
|
auto cmdQ2 = context->getSpecialQueue(2u);
|
||||||
|
retVal = cmdQ2->enqueueMigrateMemObjects(1, pBufferMemObj, CL_MIGRATE_MEM_OBJECT_HOST, 0, nullptr, nullptr);
|
||||||
|
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||||
|
EXPECT_EQ(buffer.get()->getMultiGraphicsAllocation().getLastUsedRootDeviceIndex(), 2u);
|
||||||
|
|
||||||
|
retVal = cmdQ1->enqueueMigrateMemObjects(1, pBufferMemObj, CL_MIGRATE_MEM_OBJECT_HOST, 0, nullptr, nullptr);
|
||||||
|
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||||
|
EXPECT_EQ(buffer.get()->getMultiGraphicsAllocation().getLastUsedRootDeviceIndex(), 1u);
|
||||||
|
|
||||||
|
static_cast<MemoryAllocation *>(buffer.get()->getMigrateableMultiGraphicsAllocation().getGraphicsAllocation(2u))->overrideMemoryPool(MemoryPool::LocalMemory);
|
||||||
|
retVal = cmdQ2->enqueueMigrateMemObjects(1, pBufferMemObj, CL_MIGRATE_MEM_OBJECT_HOST, 0, nullptr, nullptr);
|
||||||
|
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||||
|
EXPECT_EQ(buffer.get()->getMultiGraphicsAllocation().getLastUsedRootDeviceIndex(), 2u);
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user