1 /* 2 * Copyright (C) 2018-2021 Intel Corporation 3 * 4 * SPDX-License-Identifier: MIT 5 * 6 */ 7 8 #pragma once 9 #include "shared/source/command_stream/preemption_mode.h" 10 #include "shared/source/helpers/common_types.h" 11 #include "shared/source/helpers/engine_node_helper.h" 12 #include "shared/source/utilities/reference_tracked_object.h" 13 14 #include "engine_node.h" 15 16 #include <memory> 17 #include <mutex> 18 19 namespace NEO { 20 class OSInterface; 21 22 struct DirectSubmissionProperties; 23 struct HardwareInfo; 24 25 class OsContext : public ReferenceTrackedObject<OsContext> { 26 public: 27 OsContext(uint32_t contextId, const EngineDescriptor &engineDescriptor); 28 static OsContext *create(OSInterface *osInterface, uint32_t contextId, const EngineDescriptor &engineDescriptor); 29 30 bool isImmediateContextInitializationEnabled(bool isDefaultEngine) const; isInitialized()31 bool isInitialized() const { return contextInitialized; } 32 void ensureContextInitialized(); 33 getContextId()34 uint32_t getContextId() const { return contextId; } getNumSupportedDevices()35 uint32_t getNumSupportedDevices() const { return numSupportedDevices; } getDeviceBitfield()36 DeviceBitfield getDeviceBitfield() const { return deviceBitfield; } getPreemptionMode()37 PreemptionMode getPreemptionMode() const { return preemptionMode; } getEngineType()38 aub_stream::EngineType &getEngineType() { return engineType; } getEngineUsage()39 EngineUsage getEngineUsage() { return engineUsage; } isRegular()40 bool isRegular() const { return engineUsage == EngineUsage::Regular; } isLowPriority()41 bool isLowPriority() const { return engineUsage == EngineUsage::LowPriority; } isInternalEngine()42 bool isInternalEngine() const { return engineUsage == EngineUsage::Internal; } isCooperativeEngine()43 bool isCooperativeEngine() const { return engineUsage == EngineUsage::Cooperative; } isRootDevice()44 bool isRootDevice() const { return rootDevice; } isEngineInstanced()45 bool isEngineInstanced() const { return engineInstancedDevice; } isDirectSubmissionSupported(const HardwareInfo & hwInfo)46 virtual bool isDirectSubmissionSupported(const HardwareInfo &hwInfo) const { return false; } isDefaultContext()47 bool isDefaultContext() const { return defaultContext; } setDefaultContext(bool value)48 void setDefaultContext(bool value) { defaultContext = value; } isDirectSubmissionActive()49 bool isDirectSubmissionActive() { return directSubmissionActive; } setDirectSubmissionActive()50 void setDirectSubmissionActive() { directSubmissionActive = true; } 51 52 bool isDirectSubmissionAvailable(const HardwareInfo &hwInfo, bool &submitOnInit); 53 bool checkDirectSubmissionSupportsEngine(const DirectSubmissionProperties &directSubmissionProperty, 54 aub_stream::EngineType contextEngineType, 55 bool &startOnInit, 56 bool &startInContext); 57 58 protected: initializeContext()59 virtual void initializeContext() {} 60 61 const uint32_t contextId; 62 const DeviceBitfield deviceBitfield; 63 const PreemptionMode preemptionMode; 64 const uint32_t numSupportedDevices; 65 aub_stream::EngineType engineType = aub_stream::ENGINE_RCS; 66 const EngineUsage engineUsage; 67 const bool rootDevice = false; 68 bool defaultContext = false; 69 bool directSubmissionActive = false; 70 bool directSubmissionAvailableChecked = false; 71 std::once_flag contextInitializedFlag = {}; 72 bool contextInitialized = false; 73 bool engineInstancedDevice = false; 74 }; 75 } // namespace NEO 76