From bca6568e5b20d7a940a755ac0b6b3db68e0cab03 Mon Sep 17 00:00:00 2001 From: Jaroslaw Warchulski Date: Wed, 12 Jun 2024 15:32:01 +0000 Subject: [PATCH] fix: add support for arrays of NV12 surfaces Resolves: NEO-11498 Signed-off-by: Jaroslaw Warchulski --- .../source/os_interface/windows/wddm/wddm.cpp | 14 ++-- shared/test/common/mock_gdi/mock_gdi.cpp | 26 ++++--- shared/test/common/mock_gdi/mock_gdi.h | 2 +- .../common/mocks/mock_gmm_resource_info.h | 4 +- .../os_interface/windows/wddm20_tests.cpp | 67 +++++++++++-------- .../windows/wddm_memory_manager_tests.cpp | 51 +++++++++----- 6 files changed, 101 insertions(+), 63 deletions(-) diff --git a/shared/source/os_interface/windows/wddm/wddm.cpp b/shared/source/os_interface/windows/wddm/wddm.cpp index f5e010a307..dfe4a82d42 100644 --- a/shared/source/os_interface/windows/wddm/wddm.cpp +++ b/shared/source/os_interface/windows/wddm/wddm.cpp @@ -842,14 +842,14 @@ bool Wddm::openSharedHandle(const MemoryManager::ExtendedOsHandleData &osHandleD std::unique_ptr allocPrivateData(new char[queryResourceInfo.TotalPrivateDriverDataSize]); std::unique_ptr resPrivateData(new char[queryResourceInfo.ResourcePrivateDriverDataSize]); std::unique_ptr resPrivateRuntimeData(new char[queryResourceInfo.PrivateRuntimeDataSize]); - std::unique_ptr allocationInfo(new D3DDDI_OPENALLOCATIONINFO2[queryResourceInfo.NumAllocations]); + std::unique_ptr allocationInfo(new D3DDDI_OPENALLOCATIONINFO[queryResourceInfo.NumAllocations]); D3DKMT_OPENRESOURCE openResource = {}; openResource.hDevice = device; openResource.hGlobalShare = osHandleData.handle; openResource.NumAllocations = queryResourceInfo.NumAllocations; - openResource.pOpenAllocationInfo2 = allocationInfo.get(); + openResource.pOpenAllocationInfo = allocationInfo.get(); openResource.pTotalPrivateDriverDataBuffer = allocPrivateData.get(); openResource.TotalPrivateDriverDataBufferSize = queryResourceInfo.TotalPrivateDriverDataSize; openResource.pResourcePrivateDriverData = resPrivateData.get(); @@ -860,10 +860,11 @@ bool Wddm::openSharedHandle(const MemoryManager::ExtendedOsHandleData &osHandleD status = getGdi()->openResource(&openResource); DEBUG_BREAK_IF(status != STATUS_SUCCESS); - alloc->setDefaultHandle(allocationInfo[0].hAllocation); + auto allocationInfoIndex = osHandleData.arrayIndex < queryResourceInfo.NumAllocations ? osHandleData.arrayIndex : 0; + alloc->setDefaultHandle(allocationInfo[allocationInfoIndex].hAllocation); alloc->setResourceHandle(openResource.hResource); - auto resourceInfo = const_cast(allocationInfo[0].pPrivateDriverData); + auto resourceInfo = const_cast(allocationInfo[allocationInfoIndex].pPrivateDriverData); alloc->setDefaultGmm(new Gmm(rootDeviceEnvironment.getGmmHelper(), static_cast(resourceInfo))); return true; @@ -905,11 +906,12 @@ bool Wddm::openNTHandle(const MemoryManager::ExtendedOsHandleData &osHandleData, status = getGdi()->openResourceFromNtHandle(&openResourceFromNtHandle); DEBUG_BREAK_IF(status != STATUS_SUCCESS); - auto resourceInfo = const_cast(allocationInfo2[0].pPrivateDriverData); + auto allocationInfoIndex = osHandleData.arrayIndex < queryResourceInfoFromNtHandle.NumAllocations ? osHandleData.arrayIndex : 0; + auto resourceInfo = const_cast(allocationInfo2[allocationInfoIndex].pPrivateDriverData); alloc->setDefaultGmm(new Gmm(rootDeviceEnvironment.getGmmHelper(), static_cast(resourceInfo), hwDeviceId->getUmKmDataTranslator()->enabled())); - alloc->setDefaultHandle(allocationInfo2[0].hAllocation); + alloc->setDefaultHandle(allocationInfo2[allocationInfoIndex].hAllocation); alloc->setResourceHandle(openResourceFromNtHandle.hResource); return true; diff --git a/shared/test/common/mock_gdi/mock_gdi.cpp b/shared/test/common/mock_gdi/mock_gdi.cpp index a5f80e0391..8739d7eec0 100644 --- a/shared/test/common/mock_gdi/mock_gdi.cpp +++ b/shared/test/common/mock_gdi/mock_gdi.cpp @@ -458,20 +458,24 @@ NTSTATUS __stdcall mockD3DKMTMakeResident(IN OUT D3DDDI_MAKERESIDENT *makeReside static UINT totalPrivateSize = 0u; static UINT gmmSize = 0u; -static void *gmmPtr = nullptr; +static void **gmmPtrArray = nullptr; static UINT numberOfAllocsToReturn = 0u; -NTSTATUS __stdcall mockD3DKMTOpenResource(IN OUT D3DKMT_OPENRESOURCE *openResurce) { - openResurce->hResource = RESOURCE_HANDLE; - openResurce->pOpenAllocationInfo[0].hAllocation = ALLOCATION_HANDLE; - openResurce->pOpenAllocationInfo[0].pPrivateDriverData = gmmPtr; +NTSTATUS __stdcall mockD3DKMTOpenResource(IN OUT D3DKMT_OPENRESOURCE *openResource) { + openResource->hResource = RESOURCE_HANDLE; + for (UINT i = 0; i < openResource->NumAllocations; i++) { + openResource->pOpenAllocationInfo[i].hAllocation = ALLOCATION_HANDLE; + openResource->pOpenAllocationInfo[i].pPrivateDriverData = gmmPtrArray[i]; + } return STATUS_SUCCESS; } -NTSTATUS __stdcall mockD3DKMTOpenResourceFromNtHandle(IN OUT D3DKMT_OPENRESOURCEFROMNTHANDLE *openResurce) { - openResurce->hResource = NT_RESOURCE_HANDLE; - openResurce->pOpenAllocationInfo2[0].hAllocation = NT_ALLOCATION_HANDLE; - openResurce->pOpenAllocationInfo2[0].pPrivateDriverData = gmmPtr; +NTSTATUS __stdcall mockD3DKMTOpenResourceFromNtHandle(IN OUT D3DKMT_OPENRESOURCEFROMNTHANDLE *openResource) { + openResource->hResource = NT_RESOURCE_HANDLE; + for (UINT i = 0; i < openResource->NumAllocations; i++) { + openResource->pOpenAllocationInfo2[i].hAllocation = NT_ALLOCATION_HANDLE; + openResource->pOpenAllocationInfo2[i].pPrivateDriverData = gmmPtrArray[i]; + } return STATUS_SUCCESS; } @@ -702,9 +706,9 @@ NTSTATUS __stdcall mockD3DKMTUnregisterTrimNotification(IN D3DKMT_UNREGISTERTRIM return STATUS_SUCCESS; } -NTSTATUS setMockSizes(void *inGmmPtr, UINT inNumAllocsToReturn, UINT inGmmSize, UINT inTotalPrivateSize) { +NTSTATUS setMockSizes(void **inGmmPtrArray, UINT inNumAllocsToReturn, UINT inGmmSize, UINT inTotalPrivateSize) { gmmSize = inGmmSize; - gmmPtr = inGmmPtr; + gmmPtrArray = inGmmPtrArray; totalPrivateSize = inTotalPrivateSize; numberOfAllocsToReturn = inNumAllocsToReturn; return STATUS_SUCCESS; diff --git a/shared/test/common/mock_gdi/mock_gdi.h b/shared/test/common/mock_gdi/mock_gdi.h index bb109aaa67..4d8322f75c 100644 --- a/shared/test/common/mock_gdi/mock_gdi.h +++ b/shared/test/common/mock_gdi/mock_gdi.h @@ -80,7 +80,7 @@ NTSTATUS __stdcall mockD3DKMTEvict(IN OUT D3DKMT_EVICT *); NTSTATUS __stdcall mockD3DKMTGetDeviceState(IN OUT D3DKMT_GETDEVICESTATE *); NTSTATUS __stdcall mockD3DKMTUnregisterTrimNotification(IN D3DKMT_UNREGISTERTRIMNOTIFICATION *); -NTSTATUS setMockSizes(void *gmmPtr, UINT numAllocsToReturn, UINT gmmSize, UINT totalPrivateSize); +NTSTATUS setMockSizes(void **gmmPtrArray, UINT numAllocsToReturn, UINT gmmSize, UINT totalPrivateSize); NTSTATUS getMockSizes(UINT &destroyAlloactionWithResourceHandleCalled, D3DKMT_DESTROYALLOCATION2 *&ptrDestroyAlloc); D3DKMT_HANDLE getMockLastDestroyedResHandle(); void setMockLastDestroyedResHandle(D3DKMT_HANDLE handle); diff --git a/shared/test/common/mocks/mock_gmm_resource_info.h b/shared/test/common/mocks/mock_gmm_resource_info.h index 62cb9f8b80..87adfcae30 100644 --- a/shared/test/common/mocks/mock_gmm_resource_info.h +++ b/shared/test/common/mocks/mock_gmm_resource_info.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2023 Intel Corporation + * Copyright (C) 2018-2024 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -63,6 +63,8 @@ class MockGmmResourceInfo : public GmmResourceInfo { GMM_RESOURCE_TYPE getResourceType() override { return mockResourceCreateParams.Type; } + GMM_RESOURCE_USAGE_TYPE getResourceUsage() { return mockResourceCreateParams.Usage; } + GMM_RESOURCE_FLAG *getResourceFlags() override { return &mockResourceCreateParams.Flags; } GMM_STATUS getOffset(GMM_REQ_OFFSET_INFO &reqOffsetInfo) override; diff --git a/shared/test/unit_test/os_interface/windows/wddm20_tests.cpp b/shared/test/unit_test/os_interface/windows/wddm20_tests.cpp index 9379ca1e5e..572136750d 100644 --- a/shared/test/unit_test/os_interface/windows/wddm20_tests.cpp +++ b/shared/test/unit_test/os_interface/windows/wddm20_tests.cpp @@ -507,45 +507,55 @@ TEST_F(Wddm20Tests, WhenMakingResidentAndEvictingThenReturnIsCorrect) { mm.freeSystemMemory(allocation.getUnderlyingBuffer()); } -TEST_F(Wddm20WithMockGdiDllTests, givenSharedHandleWhenCreateGraphicsAllocationFromSharedHandleIsCalledThenGraphicsAllocationWithSharedPropertiesIsCreated) { +TEST_F(Wddm20WithMockGdiDllTests, givenSharedHandlesWhenCreateGraphicsAllocationFromSharedHandleIsCalledThenGraphicsAllocationsWithSharedPropertiesAreCreated) { void *pSysMem = (void *)0x1000; GmmRequirements gmmRequirements{}; gmmRequirements.allowLargePages = true; gmmRequirements.preferCompressed = false; std::unique_ptr gmm(new Gmm(getGmmHelper(), pSysMem, 4096u, 0, GMM_RESOURCE_USAGE_OCL_BUFFER, {}, gmmRequirements)); - auto status = setSizesFcn(gmm->gmmResourceInfo.get(), 1u, 1024u, 1u); + std::unique_ptr gmm2(new Gmm(getGmmHelper(), pSysMem, 4096u, 0, GMM_RESOURCE_USAGE_OCL_IMAGE, {}, gmmRequirements)); + void *gmmPtrArray[]{gmm->gmmResourceInfo.get(), gmm2->gmmResourceInfo.get()}; + auto status = setSizesFcn(gmmPtrArray, 2u, 1024u, 1u); EXPECT_EQ(0u, static_cast(status)); MemoryManagerCreate mm(false, false, *executionEnvironment); - AllocationProperties properties(0, false, 4096u, AllocationType::sharedBuffer, false, {}); - WddmMemoryManager::OsHandleData osHandleData{ALLOCATION_HANDLE}; + AllocationProperties properties(0, false, 4096u, AllocationType::sharedImage, false, {}); - auto graphicsAllocation = mm.createGraphicsAllocationFromSharedHandle(osHandleData, properties, false, false, true, nullptr); - auto wddmAllocation = (WddmAllocation *)graphicsAllocation; - ASSERT_NE(nullptr, wddmAllocation); + for (uint32_t i = 0; i < 3; i++) { + WddmMemoryManager::ExtendedOsHandleData osHandleData{ALLOCATION_HANDLE, i}; - EXPECT_EQ(ALLOCATION_HANDLE, wddmAllocation->peekSharedHandle()); - EXPECT_EQ(RESOURCE_HANDLE, wddmAllocation->getResourceHandle()); - EXPECT_NE(0u, wddmAllocation->getDefaultHandle()); - EXPECT_EQ(ALLOCATION_HANDLE, wddmAllocation->getDefaultHandle()); - EXPECT_NE(0u, wddmAllocation->getGpuAddress()); - EXPECT_EQ(4096u, wddmAllocation->getUnderlyingBufferSize()); - EXPECT_EQ(nullptr, wddmAllocation->getAlignedCpuPtr()); - EXPECT_NE(nullptr, wddmAllocation->getDefaultGmm()); + auto graphicsAllocation = mm.createGraphicsAllocationFromSharedHandle(osHandleData, properties, false, false, true, nullptr); + auto wddmAllocation = (WddmAllocation *)graphicsAllocation; + ASSERT_NE(nullptr, wddmAllocation); - EXPECT_EQ(4096u, wddmAllocation->getDefaultGmm()->gmmResourceInfo->getSizeAllocation()); + EXPECT_EQ(ALLOCATION_HANDLE, wddmAllocation->peekSharedHandle()); + EXPECT_EQ(RESOURCE_HANDLE, wddmAllocation->getResourceHandle()); + EXPECT_NE(0u, wddmAllocation->getDefaultHandle()); + EXPECT_EQ(ALLOCATION_HANDLE, wddmAllocation->getDefaultHandle()); + EXPECT_NE(0u, wddmAllocation->getGpuAddress()); + EXPECT_EQ(4096u, wddmAllocation->getUnderlyingBufferSize()); + EXPECT_EQ(nullptr, wddmAllocation->getAlignedCpuPtr()); + EXPECT_NE(nullptr, wddmAllocation->getDefaultGmm()); - mm.freeGraphicsMemory(graphicsAllocation); - auto destroyWithResourceHandleCalled = 0u; - D3DKMT_DESTROYALLOCATION2 *ptrToDestroyAlloc2 = nullptr; + EXPECT_EQ(4096u, wddmAllocation->getDefaultGmm()->gmmResourceInfo->getSizeAllocation()); - status = getSizesFcn(destroyWithResourceHandleCalled, ptrToDestroyAlloc2); + if (i % 2) + EXPECT_EQ(GMM_RESOURCE_USAGE_OCL_IMAGE, reinterpret_cast(wddmAllocation->getDefaultGmm()->gmmResourceInfo.get())->getResourceUsage()); + else + EXPECT_EQ(GMM_RESOURCE_USAGE_OCL_BUFFER, reinterpret_cast(wddmAllocation->getDefaultGmm()->gmmResourceInfo.get())->getResourceUsage()); - EXPECT_EQ(0u, ptrToDestroyAlloc2->Flags.SynchronousDestroy); - EXPECT_EQ(1u, ptrToDestroyAlloc2->Flags.AssumeNotInUse); + mm.freeGraphicsMemory(graphicsAllocation); + auto destroyWithResourceHandleCalled = 0u; + D3DKMT_DESTROYALLOCATION2 *ptrToDestroyAlloc2 = nullptr; - EXPECT_EQ(0u, static_cast(status)); - EXPECT_EQ(1u, destroyWithResourceHandleCalled); + status = getSizesFcn(destroyWithResourceHandleCalled, ptrToDestroyAlloc2); + + EXPECT_EQ(0u, ptrToDestroyAlloc2->Flags.SynchronousDestroy); + EXPECT_EQ(1u, ptrToDestroyAlloc2->Flags.AssumeNotInUse); + + EXPECT_EQ(0u, static_cast(status)); + EXPECT_EQ(1u, destroyWithResourceHandleCalled); + } } TEST_F(Wddm20WithMockGdiDllTests, givenSharedHandleWhenCreateGraphicsAllocationFromSharedHandleIsCalledWithMapPointerThenGraphicsAllocationWithSharedPropertiesIsCreated) { @@ -558,7 +568,8 @@ TEST_F(Wddm20WithMockGdiDllTests, givenSharedHandleWhenCreateGraphicsAllocationF gmmRequirements.allowLargePages = true; gmmRequirements.preferCompressed = false; std::unique_ptr gmm(new Gmm(getGmmHelper(), pSysMem, sizeAlignedTo64Kb, 0, GMM_RESOURCE_USAGE_OCL_BUFFER, {}, gmmRequirements)); - auto status = setSizesFcn(gmm->gmmResourceInfo.get(), 1u, 1024u, 1u); + void *gmmPtrArray[]{gmm->gmmResourceInfo.get()}; + auto status = setSizesFcn(gmmPtrArray, 1u, 1024u, 1u); EXPECT_EQ(0u, static_cast(status)); MemoryManagerCreate mm(false, false, *executionEnvironment); @@ -599,7 +610,8 @@ TEST_F(Wddm20WithMockGdiDllTests, givenSharedHandleWhenCreateGraphicsAllocationF gmmRequirements.allowLargePages = true; gmmRequirements.preferCompressed = false; std::unique_ptr gmm(new Gmm(getGmmHelper(), pSysMem, 4096u, 0, GMM_RESOURCE_USAGE_OCL_BUFFER, {}, gmmRequirements)); - auto status = setSizesFcn(gmm->gmmResourceInfo.get(), 1u, 1024u, 1u); + void *gmmPtrArray[]{gmm->gmmResourceInfo.get()}; + auto status = setSizesFcn(gmmPtrArray, 1u, 1024u, 1u); EXPECT_EQ(0u, static_cast(status)); MemoryManagerCreate mm(false, false, *executionEnvironment); @@ -616,7 +628,8 @@ TEST_F(Wddm20WithMockGdiDllTests, givenSharedHandleWhenCreateGraphicsAllocationF gmmRequirements.allowLargePages = true; gmmRequirements.preferCompressed = false; std::unique_ptr gmm(new Gmm(getGmmHelper(), pSysMem, 4096u, 0, GMM_RESOURCE_USAGE_OCL_BUFFER, {}, gmmRequirements)); - auto status = setSizesFcn(gmm->gmmResourceInfo.get(), 1u, 1024u, 1u); + void *gmmPtrArray[]{gmm->gmmResourceInfo.get()}; + auto status = setSizesFcn(gmmPtrArray, 1u, 1024u, 1u); EXPECT_EQ(0u, static_cast(status)); MemoryManagerCreate mm(false, false, *executionEnvironment); diff --git a/shared/test/unit_test/os_interface/windows/wddm_memory_manager_tests.cpp b/shared/test/unit_test/os_interface/windows/wddm_memory_manager_tests.cpp index 899111db34..39e9b6c665 100644 --- a/shared/test/unit_test/os_interface/windows/wddm_memory_manager_tests.cpp +++ b/shared/test/unit_test/os_interface/windows/wddm_memory_manager_tests.cpp @@ -27,6 +27,7 @@ #include "shared/test/common/mocks/mock_gmm.h" #include "shared/test/common/mocks/mock_gmm_client_context_base.h" #include "shared/test/common/mocks/mock_gmm_page_table_mngr.h" +#include "shared/test/common/mocks/mock_gmm_resource_info.h" #include "shared/test/common/mocks/mock_memory_manager.h" #include "shared/test/common/mocks/mock_os_context.h" #include "shared/test/common/mocks/mock_product_helper.h" @@ -2641,7 +2642,8 @@ TEST_F(WddmMemoryManagerTest, givenWddmMemoryManagerWhenCreateFromSharedHandleIs gmmRequirements.allowLargePages = true; gmmRequirements.preferCompressed = false; std::unique_ptr gmm(new Gmm(rootDeviceEnvironment->getGmmHelper(), pSysMem, 4096u, 0, GMM_RESOURCE_USAGE_OCL_BUFFER, {}, gmmRequirements)); - setSizesFcn(gmm->gmmResourceInfo.get(), 1u, 1024u, 1u); + void *gmmPtrArray[]{gmm->gmmResourceInfo.get()}; + setSizesFcn(gmmPtrArray, 1u, 1024u, 1u); AllocationProperties properties(0, false, 4096u, AllocationType::sharedBuffer, false, false, mockDeviceBitfield); @@ -2654,23 +2656,32 @@ TEST_F(WddmMemoryManagerTest, givenWddmMemoryManagerWhenCreateFromSharedHandleIs memoryManager->freeGraphicsMemory(gpuAllocation); } -TEST_F(WddmMemoryManagerTest, givenWddmMemoryManagerWhenCreateFromNTHandleIsCalledThenNonNullGraphicsAllocationIsReturned) { +TEST_F(WddmMemoryManagerTest, givenWddmMemoryManagerWhenCreateFromNTHandleIsCalledThenNonNullGraphicsAllocationsAreReturned) { void *pSysMem = reinterpret_cast(0x1000); GmmRequirements gmmRequirements{}; gmmRequirements.allowLargePages = true; gmmRequirements.preferCompressed = false; std::unique_ptr gmm(new Gmm(rootDeviceEnvironment->getGmmHelper(), pSysMem, 4096u, 0, GMM_RESOURCE_USAGE_OCL_BUFFER, {}, gmmRequirements)); - setSizesFcn(gmm->gmmResourceInfo.get(), 1u, 1024u, 1u); + std::unique_ptr gmm2(new Gmm(rootDeviceEnvironment->getGmmHelper(), pSysMem, 4096u, 0, GMM_RESOURCE_USAGE_OCL_IMAGE, {}, gmmRequirements)); + void *gmmPtrArray[]{gmm->gmmResourceInfo.get(), gmm2->gmmResourceInfo.get()}; + setSizesFcn(gmmPtrArray, 2u, 1024u, 1u); - MockWddmMemoryManager::ExtendedOsHandleData osHandleData{1u}; - auto *gpuAllocation = memoryManager->createGraphicsAllocationFromNTHandle(osHandleData, 0, AllocationType::sharedImage); - auto wddmAlloc = static_cast(gpuAllocation); - ASSERT_NE(nullptr, gpuAllocation); - EXPECT_EQ(NT_RESOURCE_HANDLE, wddmAlloc->getResourceHandle()); - EXPECT_EQ(NT_ALLOCATION_HANDLE, wddmAlloc->getDefaultHandle()); - EXPECT_EQ(AllocationType::sharedImage, wddmAlloc->getAllocationType()); + for (uint32_t i = 0; i < 3; i++) { + MockWddmMemoryManager::ExtendedOsHandleData osHandleData{1u, i}; + auto *gpuAllocation = memoryManager->createGraphicsAllocationFromNTHandle(osHandleData, 0, AllocationType::sharedImage); + auto wddmAlloc = static_cast(gpuAllocation); + ASSERT_NE(nullptr, gpuAllocation); + EXPECT_EQ(NT_RESOURCE_HANDLE, wddmAlloc->getResourceHandle()); + EXPECT_EQ(NT_ALLOCATION_HANDLE, wddmAlloc->getDefaultHandle()); + EXPECT_EQ(AllocationType::sharedImage, wddmAlloc->getAllocationType()); - memoryManager->freeGraphicsMemory(gpuAllocation); + if (i % 2) + EXPECT_EQ(GMM_RESOURCE_USAGE_OCL_IMAGE, reinterpret_cast(wddmAlloc->getDefaultGmm()->gmmResourceInfo.get())->getResourceUsage()); + else + EXPECT_EQ(GMM_RESOURCE_USAGE_OCL_BUFFER, reinterpret_cast(wddmAlloc->getDefaultGmm()->gmmResourceInfo.get())->getResourceUsage()); + + memoryManager->freeGraphicsMemory(gpuAllocation); + } } TEST_F(WddmMemoryManagerTest, givenWddmMemoryManagerWhenCreateFromNTHandleIsCalledWithUmKmDataTranslatorEnabledThenNonNullGraphicsAllocationIsReturned) { @@ -2692,7 +2703,8 @@ TEST_F(WddmMemoryManagerTest, givenWddmMemoryManagerWhenCreateFromNTHandleIsCall gmmRequirements.allowLargePages = true; gmmRequirements.preferCompressed = false; std::unique_ptr gmm(new Gmm(rootDeviceEnvironment->getGmmHelper(), pSysMem, 4096u, 0, GMM_RESOURCE_USAGE_OCL_BUFFER, {}, gmmRequirements)); - setSizesFcn(gmm->gmmResourceInfo.get(), 1u, 1024u, 1u); + void *gmmPtrArray[]{gmm->gmmResourceInfo.get()}; + setSizesFcn(gmmPtrArray, 1u, 1024u, 1u); MockWddmMemoryManager::ExtendedOsHandleData osHandleData{1u}; auto *gpuAllocation = memoryManager->createGraphicsAllocationFromNTHandle(osHandleData, 0, AllocationType::sharedImage); @@ -2727,7 +2739,8 @@ TEST_F(WddmMemoryManagerTest, GivenForce32bitAddressingAndRequireSpecificBitness gmmRequirements.allowLargePages = true; gmmRequirements.preferCompressed = false; std::unique_ptr gmm(new Gmm(rootDeviceEnvironment->getGmmHelper(), pSysMem, 4096u, 0, GMM_RESOURCE_USAGE_OCL_BUFFER, {}, gmmRequirements)); - setSizesFcn(gmm->gmmResourceInfo.get(), 1u, 1024u, 1u); + void *gmmPtrArray[]{gmm->gmmResourceInfo.get()}; + setSizesFcn(gmmPtrArray, 1u, 1024u, 1u); memoryManager->setForce32BitAllocations(true); @@ -2754,7 +2767,8 @@ TEST_F(WddmMemoryManagerTest, GivenForce32bitAddressingAndNotRequiredSpecificBit gmmRequirements.allowLargePages = true; gmmRequirements.preferCompressed = false; std::unique_ptr gmm(new Gmm(rootDeviceEnvironment->getGmmHelper(), pSysMem, 4096u, 0, GMM_RESOURCE_USAGE_OCL_BUFFER, {}, gmmRequirements)); - setSizesFcn(gmm->gmmResourceInfo.get(), 1u, 1024u, 1u); + void *gmmPtrArray[]{gmm->gmmResourceInfo.get()}; + setSizesFcn(gmmPtrArray, 1u, 1024u, 1u); memoryManager->setForce32BitAllocations(true); @@ -2778,7 +2792,8 @@ TEST_F(WddmMemoryManagerTest, givenWddmMemoryManagerWhenFreeAllocFromSharedHandl gmmRequirements.allowLargePages = true; gmmRequirements.preferCompressed = false; std::unique_ptr gmm(new Gmm(rootDeviceEnvironment->getGmmHelper(), pSysMem, 4096u, 0, GMM_RESOURCE_USAGE_OCL_BUFFER, {}, gmmRequirements)); - setSizesFcn(gmm->gmmResourceInfo.get(), 1u, 1024u, 1u); + void *gmmPtrArray[]{gmm->gmmResourceInfo.get()}; + setSizesFcn(gmmPtrArray, 1u, 1024u, 1u); AllocationProperties properties(0, false, 4096u, AllocationType::sharedBuffer, false, false, 0); auto gpuAllocation = (WddmAllocation *)memoryManager->createGraphicsAllocationFromSharedHandle(osHandleData, properties, false, false, true, nullptr); @@ -2815,7 +2830,8 @@ TEST_F(WddmMemoryManagerTest, givenWddmMemoryManagerSizeZeroWhenCreateFromShared gmmRequirements.allowLargePages = true; gmmRequirements.preferCompressed = false; std::unique_ptr gmm(new Gmm(rootDeviceEnvironment->getGmmHelper(), pSysMem, size, 0, GMM_RESOURCE_USAGE_OCL_BUFFER, {}, gmmRequirements)); - setSizesFcn(gmm->gmmResourceInfo.get(), 1u, 1024u, 1u); + void *gmmPtrArray[]{gmm->gmmResourceInfo.get()}; + setSizesFcn(gmmPtrArray, 1u, 1024u, 1u); AllocationProperties properties(0, false, size, AllocationType::sharedBuffer, false, false, 0); auto *gpuAllocation = memoryManager->createGraphicsAllocationFromSharedHandle(osHandleData, properties, false, false, true, nullptr); @@ -2924,7 +2940,8 @@ TEST_F(WddmMemoryManagerTest, givenWddmMemoryManagerWhenCreateFromSharedHandleFa gmmRequirements.allowLargePages = true; gmmRequirements.preferCompressed = false; std::unique_ptr gmm(new Gmm(rootDeviceEnvironment->getGmmHelper(), pSysMem, size, 0, GMM_RESOURCE_USAGE_OCL_BUFFER, {}, gmmRequirements)); - setSizesFcn(gmm->gmmResourceInfo.get(), 1u, 1024u, 1u); + void *gmmPtrArray[]{gmm->gmmResourceInfo.get()}; + setSizesFcn(gmmPtrArray, 1u, 1024u, 1u); wddm->failOpenSharedHandle = true;