1111#include " runtime/event/hw_timestamps.h"
1212#include " runtime/event/perf_counter.h"
1313#include " runtime/gmm_helper/gmm.h"
14+ #include " runtime/gmm_helper/gmm_helper.h"
15+ #include " runtime/gmm_helper/resource_info.h"
1416#include " runtime/helpers/aligned_memory.h"
1517#include " runtime/helpers/basic_math.h"
1618#include " runtime/helpers/kernel_commands.h"
@@ -89,11 +91,11 @@ GraphicsAllocation *MemoryManager::allocateGraphicsMemoryWithHostPtr(const Alloc
8991 return graphicsAllocation;
9092}
9193
92- GraphicsAllocation *MemoryManager::allocateGraphicsMemoryForImageFromHostPtr (ImageInfo &imgInfo, const void *hostPtr ) {
93- bool copyRequired = Image::isCopyRequired (imgInfo, hostPtr);
94+ GraphicsAllocation *MemoryManager::allocateGraphicsMemoryForImageFromHostPtr (const AllocationData &allocationData ) {
95+ bool copyRequired = Image::isCopyRequired (*allocationData. imgInfo , allocationData. hostPtr );
9496
95- if (hostPtr && !copyRequired) {
96- return allocateGraphicsMemory ({ false , imgInfo. size , GraphicsAllocation::AllocationType::UNDECIDED}, hostPtr );
97+ if (allocationData. hostPtr && !copyRequired) {
98+ return allocateGraphicsMemoryWithHostPtr (allocationData );
9799 }
98100 return nullptr ;
99101}
@@ -291,7 +293,6 @@ bool MemoryManager::getAllocationData(AllocationData &allocationData, const Allo
291293GraphicsAllocation *MemoryManager::allocateGraphicsMemoryInPreferredPool (AllocationProperties properties, DevicesBitfield devicesBitfield, const void *hostPtr) {
292294 AllocationData allocationData;
293295 getAllocationData (allocationData, properties, devicesBitfield, hostPtr);
294- UNRECOVERABLE_IF (allocationData.type == GraphicsAllocation::AllocationType::SHARED_RESOURCE);
295296
296297 AllocationStatus status = AllocationStatus::Error;
297298 GraphicsAllocation *allocation = allocateGraphicsMemoryInDevicePool (allocationData, status);
@@ -306,9 +307,9 @@ GraphicsAllocation *MemoryManager::allocateGraphicsMemoryInPreferredPool(Allocat
306307}
307308
308309GraphicsAllocation *MemoryManager::allocateGraphicsMemory (const AllocationData &allocationData) {
309- if (allocationData.type == GraphicsAllocation::AllocationType::IMAGE) {
310+ if (allocationData.type == GraphicsAllocation::AllocationType::IMAGE || allocationData. type == GraphicsAllocation::AllocationType::SHARED_RESOURCE ) {
310311 UNRECOVERABLE_IF (allocationData.imgInfo == nullptr );
311- return allocateGraphicsMemoryForImage (* allocationData. imgInfo , allocationData. hostPtr );
312+ return allocateGraphicsMemoryForImage (allocationData);
312313 }
313314
314315 if (force32bitAllocations && allocationData.flags .allow32Bit && is64bit) {
@@ -323,6 +324,23 @@ GraphicsAllocation *MemoryManager::allocateGraphicsMemory(const AllocationData &
323324 return allocateGraphicsMemoryWithAlignment (allocationData);
324325}
325326
327+ GraphicsAllocation *MemoryManager::allocateGraphicsMemoryForImage (const AllocationData &allocationData) {
328+ auto gmm = std::make_unique<Gmm>(*allocationData.imgInfo );
329+
330+ // AllocationData needs to be reconfigured for System Memory paths
331+ AllocationData allocationDataWithSize = allocationData;
332+ allocationDataWithSize.size = allocationData.imgInfo ->size ;
333+
334+ auto hostPtrAllocation = allocateGraphicsMemoryForImageFromHostPtr (allocationDataWithSize);
335+
336+ if (hostPtrAllocation) {
337+ hostPtrAllocation->gmm = gmm.release ();
338+ return hostPtrAllocation;
339+ }
340+
341+ return allocateGraphicsMemoryForImageImpl (allocationDataWithSize, std::move (gmm));
342+ }
343+
326344const CsrContainer &MemoryManager::getCommandStreamReceivers () const {
327345 return executionEnvironment.commandStreamReceivers ;
328346}
0 commit comments