1 /* 2 * Copyright (C) 2018-2021 Intel Corporation 3 * 4 * SPDX-License-Identifier: MIT 5 * 6 */ 7 8 #pragma once 9 #include "shared/source/memory_manager/graphics_allocation.h" 10 11 namespace NEO { 12 class Context; 13 class MemObj; 14 15 enum SynchronizeStatus { 16 SHARED_OBJECT_NOT_CHANGED, 17 SHARED_OBJECT_REQUIRES_UPDATE, 18 ACQUIRE_SUCCESFUL, 19 SYNCHRONIZE_ERROR 20 }; 21 22 struct UpdateData { UpdateDataUpdateData23 UpdateData(uint32_t inRootDeviceIndex) : rootDeviceIndex(inRootDeviceIndex){}; 24 const uint32_t rootDeviceIndex; 25 SynchronizeStatus synchronizationStatus = SHARED_OBJECT_NOT_CHANGED; 26 osHandle sharedHandle = 0; 27 MemObj *memObject = nullptr; 28 void *updateData = nullptr; 29 }; 30 31 class SharingFunctions { 32 public: 33 virtual uint32_t getId() const = 0; 34 35 virtual ~SharingFunctions() = default; 36 }; 37 38 class SharingHandler { 39 public: 40 int acquire(MemObj *memObj, uint32_t rootDeviceIndex); 41 void release(MemObj *memObject, uint32_t rootDeviceIndex); 42 virtual ~SharingHandler() = default; 43 getMemObjectInfo(size_t & paramValueSize,void * & paramValue)44 virtual void getMemObjectInfo(size_t ¶mValueSize, void *¶mValue){}; releaseReusedGraphicsAllocation()45 virtual void releaseReusedGraphicsAllocation(){}; 46 47 protected: 48 virtual int synchronizeHandler(UpdateData &updateData); 49 virtual int validateUpdateData(UpdateData &updateData); synchronizeObject(UpdateData & updateData)50 virtual void synchronizeObject(UpdateData &updateData) { updateData.synchronizationStatus = SYNCHRONIZE_ERROR; } 51 virtual void resolveGraphicsAllocationChange(osHandle currentSharedHandle, UpdateData *updateData); releaseResource(MemObj * memObject,uint32_t rootDeviceIndex)52 virtual void releaseResource(MemObj *memObject, uint32_t rootDeviceIndex){}; 53 unsigned int acquireCount = 0u; 54 }; 55 } // namespace NEO 56