2017-12-21 00:45:38 +01:00
|
|
|
/*
|
2019-01-07 09:29:49 +01:00
|
|
|
* Copyright (C) 2017-2019 Intel Corporation
|
2017-12-21 00:45:38 +01:00
|
|
|
*
|
2018-09-17 14:03:37 +02:00
|
|
|
* SPDX-License-Identifier: MIT
|
2017-12-21 00:45:38 +01:00
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#pragma once
|
2019-01-09 12:56:38 +01:00
|
|
|
#include "public/cl_ext_private.h"
|
2019-02-12 17:27:13 +01:00
|
|
|
#include "runtime/command_stream/preemption_mode.h"
|
2018-07-22 19:27:33 +02:00
|
|
|
#include "runtime/helpers/aligned_memory.h"
|
2019-02-18 13:59:16 +01:00
|
|
|
#include "runtime/helpers/engine_control.h"
|
2019-03-01 16:14:28 +01:00
|
|
|
#include "runtime/memory_manager/gfx_partition.h"
|
2018-07-22 19:27:33 +02:00
|
|
|
#include "runtime/memory_manager/graphics_allocation.h"
|
2017-12-21 00:45:38 +01:00
|
|
|
#include "runtime/memory_manager/host_ptr_defines.h"
|
|
|
|
|
#include "runtime/os_interface/32bit_memory.h"
|
2019-02-27 11:39:32 +01:00
|
|
|
|
2018-11-26 14:04:52 +01:00
|
|
|
#include "engine_node.h"
|
2017-12-21 00:45:38 +01:00
|
|
|
|
2019-03-13 15:00:07 +01:00
|
|
|
#include <bitset>
|
2017-12-21 00:45:38 +01:00
|
|
|
#include <cstdint>
|
|
|
|
|
#include <mutex>
|
2018-07-22 19:27:33 +02:00
|
|
|
#include <vector>
|
2017-12-21 00:45:38 +01:00
|
|
|
|
|
|
|
|
namespace OCLRT {
|
2018-12-20 16:58:15 +01:00
|
|
|
class CommandStreamReceiver;
|
2017-12-21 00:45:38 +01:00
|
|
|
class DeferredDeleter;
|
2018-10-01 16:10:54 +02:00
|
|
|
class ExecutionEnvironment;
|
2018-12-20 16:58:15 +01:00
|
|
|
class Gmm;
|
2017-12-21 00:45:38 +01:00
|
|
|
class GraphicsAllocation;
|
2018-10-24 08:46:54 +02:00
|
|
|
class HostPtrManager;
|
2018-10-22 16:43:20 +02:00
|
|
|
class OsContext;
|
2019-02-20 11:18:24 +01:00
|
|
|
struct HardwareInfo;
|
2018-12-20 16:58:15 +01:00
|
|
|
struct ImageInfo;
|
|
|
|
|
|
2019-01-10 13:57:40 +01:00
|
|
|
using CsrContainer = std::vector<std::vector<std::unique_ptr<CommandStreamReceiver>>>;
|
2019-02-18 13:59:16 +01:00
|
|
|
using EngineControlContainer = std::vector<EngineControl>;
|
2019-03-13 15:00:07 +01:00
|
|
|
using DeviceBitfield = std::bitset<32>;
|
2018-11-29 11:39:10 +01:00
|
|
|
|
2018-07-05 16:31:57 +02:00
|
|
|
enum AllocationUsage {
|
2017-12-21 00:45:38 +01:00
|
|
|
TEMPORARY_ALLOCATION,
|
|
|
|
|
REUSABLE_ALLOCATION
|
|
|
|
|
};
|
|
|
|
|
|
2018-11-30 11:01:33 +01:00
|
|
|
struct AllocationProperties {
|
2018-09-17 14:03:37 +02:00
|
|
|
union {
|
|
|
|
|
struct {
|
|
|
|
|
uint32_t allocateMemory : 1;
|
|
|
|
|
uint32_t flushL3RequiredForRead : 1;
|
|
|
|
|
uint32_t flushL3RequiredForWrite : 1;
|
2018-11-30 11:01:33 +01:00
|
|
|
uint32_t forcePin : 1;
|
|
|
|
|
uint32_t uncacheable : 1;
|
2019-01-07 09:29:49 +01:00
|
|
|
uint32_t multiOsContextCapable : 1;
|
2018-12-20 07:43:57 +00:00
|
|
|
uint32_t reserved : 26;
|
2018-09-17 14:03:37 +02:00
|
|
|
} flags;
|
2018-11-30 11:01:33 +01:00
|
|
|
uint32_t allFlags = 0;
|
2018-09-17 14:03:37 +02:00
|
|
|
};
|
2018-11-30 11:01:33 +01:00
|
|
|
static_assert(sizeof(AllocationProperties::flags) == sizeof(AllocationProperties::allFlags), "");
|
|
|
|
|
size_t size = 0;
|
|
|
|
|
size_t alignment = 0;
|
2018-12-11 18:56:37 +01:00
|
|
|
GraphicsAllocation::AllocationType allocationType = GraphicsAllocation::AllocationType::UNKNOWN;
|
2018-12-20 16:58:15 +01:00
|
|
|
ImageInfo *imgInfo = nullptr;
|
2018-09-17 14:03:37 +02:00
|
|
|
|
2019-01-09 12:56:38 +01:00
|
|
|
AllocationProperties(size_t size, GraphicsAllocation::AllocationType allocationType)
|
|
|
|
|
: AllocationProperties(true, size, allocationType) {}
|
|
|
|
|
AllocationProperties(bool allocateMemory, size_t size, GraphicsAllocation::AllocationType allocationType)
|
2019-02-20 14:03:04 +01:00
|
|
|
: AllocationProperties(allocateMemory, size, allocationType, false) {}
|
|
|
|
|
AllocationProperties(bool allocateMemory, size_t size, GraphicsAllocation::AllocationType allocationType, bool multiOsContextCapable)
|
2019-01-09 12:56:38 +01:00
|
|
|
: size(size), allocationType(allocationType) {
|
2018-09-17 14:03:37 +02:00
|
|
|
allFlags = 0;
|
|
|
|
|
flags.flushL3RequiredForRead = 1;
|
|
|
|
|
flags.flushL3RequiredForWrite = 1;
|
|
|
|
|
flags.allocateMemory = allocateMemory;
|
2019-02-20 14:03:04 +01:00
|
|
|
flags.multiOsContextCapable = multiOsContextCapable;
|
2018-09-17 14:03:37 +02:00
|
|
|
}
|
2019-01-22 12:40:17 +01:00
|
|
|
AllocationProperties(ImageInfo *imgInfo, bool allocateMemory) : AllocationProperties(allocateMemory, 0, GraphicsAllocation::AllocationType::IMAGE) {
|
2018-12-20 16:58:15 +01:00
|
|
|
this->imgInfo = imgInfo;
|
|
|
|
|
}
|
2018-09-17 14:03:37 +02:00
|
|
|
};
|
|
|
|
|
|
2018-01-22 16:43:26 +01:00
|
|
|
struct AlignedMallocRestrictions {
|
|
|
|
|
uintptr_t minAddress;
|
|
|
|
|
};
|
|
|
|
|
|
2017-12-21 00:45:38 +01:00
|
|
|
constexpr size_t paddingBufferSize = 2 * MemoryConstants::megaByte;
|
|
|
|
|
|
|
|
|
|
class MemoryManager {
|
|
|
|
|
public:
|
2018-02-28 12:09:48 +01:00
|
|
|
enum AllocationStatus {
|
|
|
|
|
Success = 0,
|
|
|
|
|
Error,
|
|
|
|
|
InvalidHostPointer,
|
2018-07-18 09:48:21 +02:00
|
|
|
RetryInNonDevicePool
|
2018-02-28 12:09:48 +01:00
|
|
|
};
|
|
|
|
|
|
2018-10-01 16:10:54 +02:00
|
|
|
MemoryManager(bool enable64kbpages, bool enableLocalMemory, ExecutionEnvironment &executionEnvironment);
|
2017-12-21 00:45:38 +01:00
|
|
|
|
|
|
|
|
virtual ~MemoryManager();
|
2018-01-26 16:53:18 +01:00
|
|
|
MOCKABLE_VIRTUAL void *allocateSystemMemory(size_t size, size_t alignment);
|
2017-12-21 00:45:38 +01:00
|
|
|
|
2018-05-08 10:00:23 +02:00
|
|
|
virtual void addAllocationToHostPtrManager(GraphicsAllocation *memory) = 0;
|
|
|
|
|
virtual void removeAllocationFromHostPtrManager(GraphicsAllocation *memory) = 0;
|
|
|
|
|
|
2018-12-14 11:24:45 +01:00
|
|
|
MOCKABLE_VIRTUAL GraphicsAllocation *allocateGraphicsMemoryWithProperties(const AllocationProperties &properties) {
|
2019-02-28 16:12:23 +01:00
|
|
|
return allocateGraphicsMemoryInPreferredPool(properties, GraphicsAllocation::createStorageInfoFromProperties(properties), nullptr);
|
2018-11-30 11:01:33 +01:00
|
|
|
}
|
2017-12-21 00:45:38 +01:00
|
|
|
|
2019-03-12 12:00:41 +01:00
|
|
|
virtual GraphicsAllocation *allocateGraphicsMemoryWithProperties(const AllocationProperties &properties, const void *ptr) {
|
2019-02-28 16:12:23 +01:00
|
|
|
return allocateGraphicsMemoryInPreferredPool(properties, GraphicsAllocation::createStorageInfoFromProperties(properties), ptr);
|
2017-12-21 00:45:38 +01:00
|
|
|
}
|
|
|
|
|
|
2019-02-28 16:12:23 +01:00
|
|
|
GraphicsAllocation *allocateGraphicsMemoryInPreferredPool(const AllocationProperties &properties,
|
|
|
|
|
StorageInfo storageInfo, const void *hostPtr);
|
2018-07-09 14:12:32 +02:00
|
|
|
|
2018-08-29 14:50:36 +02:00
|
|
|
virtual GraphicsAllocation *createGraphicsAllocationFromSharedHandle(osHandle handle, bool requireSpecificBitness) = 0;
|
2017-12-21 00:45:38 +01:00
|
|
|
|
|
|
|
|
virtual GraphicsAllocation *createGraphicsAllocationFromNTHandle(void *handle) = 0;
|
|
|
|
|
|
2019-02-25 14:11:34 +01:00
|
|
|
virtual bool mapAuxGpuVA(GraphicsAllocation *graphicsAllocation) { return false; }
|
2018-01-25 15:10:07 +01:00
|
|
|
|
2019-01-24 11:51:33 +01:00
|
|
|
void *lockResource(GraphicsAllocation *graphicsAllocation);
|
|
|
|
|
void unlockResource(GraphicsAllocation *graphicsAllocation);
|
2017-12-21 00:45:38 +01:00
|
|
|
|
|
|
|
|
void cleanGraphicsMemoryCreatedFromHostPtr(GraphicsAllocation *);
|
|
|
|
|
GraphicsAllocation *createGraphicsAllocationWithPadding(GraphicsAllocation *inputGraphicsAllocation, size_t sizeWithPadding);
|
|
|
|
|
virtual GraphicsAllocation *createPaddedAllocation(GraphicsAllocation *inputGraphicsAllocation, size_t sizeWithPadding);
|
|
|
|
|
|
2018-02-28 12:09:48 +01:00
|
|
|
virtual AllocationStatus populateOsHandles(OsHandleStorage &handleStorage) = 0;
|
2017-12-21 00:45:38 +01:00
|
|
|
virtual void cleanOsHandles(OsHandleStorage &handleStorage) = 0;
|
|
|
|
|
|
|
|
|
|
void freeSystemMemory(void *ptr);
|
|
|
|
|
|
|
|
|
|
virtual void freeGraphicsMemoryImpl(GraphicsAllocation *gfxAllocation) = 0;
|
|
|
|
|
void freeGraphicsMemory(GraphicsAllocation *gfxAllocation);
|
2019-03-04 14:50:26 +01:00
|
|
|
virtual void handleFenceCompletion(GraphicsAllocation *allocation){};
|
2017-12-21 00:45:38 +01:00
|
|
|
|
2018-01-19 10:55:36 +01:00
|
|
|
void checkGpuUsageAndDestroyGraphicsAllocations(GraphicsAllocation *gfxAllocation);
|
|
|
|
|
|
2017-12-21 00:45:38 +01:00
|
|
|
virtual uint64_t getSystemSharedMemory() = 0;
|
|
|
|
|
|
|
|
|
|
virtual uint64_t getMaxApplicationAddress() = 0;
|
|
|
|
|
|
2018-03-12 15:24:46 +01:00
|
|
|
virtual uint64_t getInternalHeapBaseAddress() = 0;
|
|
|
|
|
|
2018-07-11 09:45:20 +02:00
|
|
|
bool peek64kbPagesEnabled() const { return enable64kbpages; }
|
2019-02-25 14:11:34 +01:00
|
|
|
bool peekForce32BitAllocations() const { return force32bitAllocations; }
|
2018-02-28 09:27:38 +01:00
|
|
|
void setForce32BitAllocations(bool newValue);
|
2017-12-21 00:45:38 +01:00
|
|
|
|
|
|
|
|
std::unique_ptr<Allocator32bit> allocator32Bit;
|
|
|
|
|
|
2019-02-25 14:11:34 +01:00
|
|
|
bool peekVirtualPaddingSupport() const { return virtualPaddingAvailable; }
|
2017-12-21 00:45:38 +01:00
|
|
|
void setVirtualPaddingSupport(bool virtualPaddingSupport) { virtualPaddingAvailable = virtualPaddingSupport; }
|
|
|
|
|
GraphicsAllocation *peekPaddingAllocation() { return paddingAllocation; }
|
|
|
|
|
|
|
|
|
|
DeferredDeleter *getDeferredDeleter() const {
|
|
|
|
|
return deferredDeleter.get();
|
|
|
|
|
}
|
|
|
|
|
|
2018-05-10 10:16:22 +02:00
|
|
|
void waitForDeletions();
|
2017-12-21 00:45:38 +01:00
|
|
|
|
|
|
|
|
bool isAsyncDeleterEnabled() const;
|
2018-10-12 15:20:02 +02:00
|
|
|
bool isLocalMemorySupported() const;
|
2017-12-21 00:45:38 +01:00
|
|
|
virtual bool isMemoryBudgetExhausted() const;
|
|
|
|
|
|
2018-01-22 16:43:26 +01:00
|
|
|
virtual AlignedMallocRestrictions *getAlignedMallocRestrictions() {
|
|
|
|
|
return nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MOCKABLE_VIRTUAL void *alignedMallocWrapper(size_t bytes, size_t alignment) {
|
|
|
|
|
return ::alignedMalloc(bytes, alignment);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MOCKABLE_VIRTUAL void alignedFreeWrapper(void *ptr) {
|
|
|
|
|
::alignedFree(ptr);
|
|
|
|
|
}
|
|
|
|
|
|
2019-02-18 13:59:16 +01:00
|
|
|
OsContext *createAndRegisterOsContext(CommandStreamReceiver *commandStreamReceiver, EngineInstanceT engineType,
|
2019-03-18 13:57:59 +01:00
|
|
|
DeviceBitfield deviceBitfield, PreemptionMode preemptionMode, bool lowPriority);
|
2019-02-25 14:11:34 +01:00
|
|
|
uint32_t getRegisteredEnginesCount() const { return static_cast<uint32_t>(registeredEngines.size()); }
|
2018-11-29 11:39:10 +01:00
|
|
|
CommandStreamReceiver *getDefaultCommandStreamReceiver(uint32_t deviceId) const;
|
2019-02-18 13:59:16 +01:00
|
|
|
EngineControlContainer &getRegisteredEngines();
|
2019-02-26 17:52:31 +01:00
|
|
|
EngineControl *getRegisteredEngineForCsr(CommandStreamReceiver *commandStreamReceiver);
|
2018-10-24 08:46:54 +02:00
|
|
|
HostPtrManager *getHostPtrManager() const { return hostPtrManager.get(); }
|
2018-11-29 11:39:10 +01:00
|
|
|
void setDefaultEngineIndex(uint32_t index) { defaultEngineIndex = index; }
|
2019-03-01 14:25:33 +01:00
|
|
|
virtual bool copyMemoryToAllocation(GraphicsAllocation *graphicsAllocation, const void *memoryToCopy, uint32_t sizeToCopy) const;
|
2019-02-20 11:18:24 +01:00
|
|
|
static HeapIndex selectHeap(const GraphicsAllocation *allocation, const void *ptr, const HardwareInfo &hwInfo);
|
2019-02-19 08:55:11 +01:00
|
|
|
static std::unique_ptr<MemoryManager> createMemoryManager(bool enable64KBpages, bool enableLocalMemory, ExecutionEnvironment &exeEnv);
|
2019-03-13 15:31:46 +01:00
|
|
|
virtual void *reserveCpuAddressRange(size_t size) = 0;
|
|
|
|
|
virtual void releaseReservedCpuAddressRange(void *reserved, size_t size) = 0;
|
2019-02-20 11:18:24 +01:00
|
|
|
|
2017-12-21 00:45:38 +01:00
|
|
|
protected:
|
2018-12-06 15:03:06 +01:00
|
|
|
struct AllocationData {
|
|
|
|
|
union {
|
|
|
|
|
struct {
|
|
|
|
|
uint32_t mustBeZeroCopy : 1;
|
|
|
|
|
uint32_t allocateMemory : 1;
|
|
|
|
|
uint32_t allow64kbPages : 1;
|
|
|
|
|
uint32_t allow32Bit : 1;
|
|
|
|
|
uint32_t useSystemMemory : 1;
|
|
|
|
|
uint32_t forcePin : 1;
|
|
|
|
|
uint32_t uncacheable : 1;
|
|
|
|
|
uint32_t flushL3 : 1;
|
|
|
|
|
uint32_t preferRenderCompressed : 1;
|
2019-01-07 09:29:49 +01:00
|
|
|
uint32_t multiOsContextCapable : 1;
|
2019-02-04 14:13:51 +01:00
|
|
|
uint32_t requiresCpuAccess : 1;
|
|
|
|
|
uint32_t reserved : 21;
|
2018-12-06 15:03:06 +01:00
|
|
|
} flags;
|
|
|
|
|
uint32_t allFlags = 0;
|
|
|
|
|
};
|
|
|
|
|
static_assert(sizeof(AllocationData::flags) == sizeof(AllocationData::allFlags), "");
|
|
|
|
|
GraphicsAllocation::AllocationType type = GraphicsAllocation::AllocationType::UNKNOWN;
|
|
|
|
|
const void *hostPtr = nullptr;
|
|
|
|
|
size_t size = 0;
|
|
|
|
|
size_t alignment = 0;
|
2019-02-28 16:12:23 +01:00
|
|
|
StorageInfo storageInfo = {};
|
2018-12-20 16:58:15 +01:00
|
|
|
ImageInfo *imgInfo = nullptr;
|
2018-12-06 15:03:06 +01:00
|
|
|
};
|
|
|
|
|
|
2019-02-28 16:12:23 +01:00
|
|
|
static bool getAllocationData(AllocationData &allocationData, const AllocationProperties &properties, const StorageInfo storageInfo,
|
2018-12-11 18:56:37 +01:00
|
|
|
const void *hostPtr);
|
2019-02-21 16:29:05 +01:00
|
|
|
static bool useInternal32BitAllocator(GraphicsAllocation::AllocationType allocationType) {
|
|
|
|
|
return allocationType == GraphicsAllocation::AllocationType::KERNEL_ISA ||
|
|
|
|
|
allocationType == GraphicsAllocation::AllocationType::INTERNAL_HEAP;
|
|
|
|
|
}
|
2018-07-09 14:12:32 +02:00
|
|
|
|
2019-02-25 14:11:34 +01:00
|
|
|
virtual GraphicsAllocation *createGraphicsAllocation(OsHandleStorage &handleStorage, const AllocationData &allocationData) = 0;
|
2019-03-12 12:00:41 +01:00
|
|
|
virtual GraphicsAllocation *allocateGraphicsMemoryForNonSvmHostPtr(const AllocationData &allocationData) = 0;
|
2018-07-09 14:12:32 +02:00
|
|
|
GraphicsAllocation *allocateGraphicsMemory(const AllocationData &allocationData);
|
2018-11-30 11:01:33 +01:00
|
|
|
virtual GraphicsAllocation *allocateGraphicsMemoryWithHostPtr(const AllocationData &allocationData);
|
|
|
|
|
virtual GraphicsAllocation *allocateGraphicsMemoryWithAlignment(const AllocationData &allocationData) = 0;
|
2019-02-28 14:12:13 +01:00
|
|
|
virtual GraphicsAllocation *allocateGraphicsMemory64kb(const AllocationData &allocationData) = 0;
|
2018-12-21 10:16:27 +01:00
|
|
|
virtual GraphicsAllocation *allocate32BitGraphicsMemoryImpl(const AllocationData &allocationData) = 0;
|
2018-12-06 15:03:06 +01:00
|
|
|
virtual GraphicsAllocation *allocateGraphicsMemoryInDevicePool(const AllocationData &allocationData, AllocationStatus &status) {
|
|
|
|
|
status = AllocationStatus::Error;
|
2019-01-22 12:40:17 +01:00
|
|
|
switch (allocationData.type) {
|
|
|
|
|
case GraphicsAllocation::AllocationType::IMAGE:
|
2019-01-28 13:59:37 +01:00
|
|
|
case GraphicsAllocation::AllocationType::SHARED_RESOURCE_COPY:
|
2019-01-22 12:40:17 +01:00
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
if (!allocationData.flags.useSystemMemory && !(allocationData.flags.allow32Bit && this->force32bitAllocations)) {
|
|
|
|
|
auto allocation = allocateGraphicsMemory(allocationData);
|
|
|
|
|
if (allocation) {
|
2019-02-28 16:12:23 +01:00
|
|
|
allocation->storageInfo = allocationData.storageInfo;
|
2019-02-27 14:59:46 +01:00
|
|
|
allocation->setFlushL3Required(allocationData.flags.flushL3);
|
2019-01-22 12:40:17 +01:00
|
|
|
status = AllocationStatus::Success;
|
|
|
|
|
}
|
|
|
|
|
return allocation;
|
2018-12-06 15:03:06 +01:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
status = AllocationStatus::RetryInNonDevicePool;
|
|
|
|
|
return nullptr;
|
|
|
|
|
}
|
2019-01-22 12:40:17 +01:00
|
|
|
GraphicsAllocation *allocateGraphicsMemoryForImageFromHostPtr(const AllocationData &allocationData);
|
|
|
|
|
MOCKABLE_VIRTUAL GraphicsAllocation *allocateGraphicsMemoryForImage(const AllocationData &allocationData);
|
|
|
|
|
virtual GraphicsAllocation *allocateGraphicsMemoryForImageImpl(const AllocationData &allocationData, std::unique_ptr<Gmm> gmm) = 0;
|
2018-11-30 11:01:33 +01:00
|
|
|
|
2019-01-24 11:51:33 +01:00
|
|
|
virtual void *lockResourceImpl(GraphicsAllocation &graphicsAllocation) = 0;
|
|
|
|
|
virtual void unlockResourceImpl(GraphicsAllocation &graphicsAllocation) = 0;
|
2019-03-11 10:19:02 +01:00
|
|
|
virtual void freeAssociatedResourceImpl(GraphicsAllocation &graphicsAllocation) { return unlockResourceImpl(graphicsAllocation); };
|
2019-01-24 11:51:33 +01:00
|
|
|
|
2017-12-21 00:45:38 +01:00
|
|
|
bool force32bitAllocations = false;
|
|
|
|
|
bool virtualPaddingAvailable = false;
|
|
|
|
|
GraphicsAllocation *paddingAllocation = nullptr;
|
|
|
|
|
void applyCommonCleanup();
|
|
|
|
|
std::unique_ptr<DeferredDeleter> deferredDeleter;
|
|
|
|
|
bool asyncDeleterEnabled = false;
|
|
|
|
|
bool enable64kbpages = false;
|
2018-09-06 10:53:35 +02:00
|
|
|
bool localMemorySupported = false;
|
2018-10-01 16:10:54 +02:00
|
|
|
ExecutionEnvironment &executionEnvironment;
|
2019-02-18 13:59:16 +01:00
|
|
|
EngineControlContainer registeredEngines;
|
2018-10-24 08:46:54 +02:00
|
|
|
std::unique_ptr<HostPtrManager> hostPtrManager;
|
2018-11-21 09:57:51 +01:00
|
|
|
uint32_t latestContextId = std::numeric_limits<uint32_t>::max();
|
2018-11-29 11:39:10 +01:00
|
|
|
uint32_t defaultEngineIndex = 0;
|
2019-01-03 14:48:24 +01:00
|
|
|
std::unique_ptr<DeferredDeleter> multiContextResourceDestructor;
|
2019-03-01 16:14:28 +01:00
|
|
|
GfxPartition gfxPartition;
|
2017-12-21 00:45:38 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
std::unique_ptr<DeferredDeleter> createDeferredDeleter();
|
|
|
|
|
} // namespace OCLRT
|