mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-24 21:18:24 +08:00
Check if direct submission enable in OsContext
Signed-off-by: Lukasz Jobczyk <lukasz.jobczyk@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
8a700c5187
commit
7c99739b89
@@ -106,10 +106,6 @@ class CommandStreamReceiverHw : public CommandStreamReceiver {
|
||||
}
|
||||
|
||||
bool initDirectSubmission(Device &device, OsContext &osContext) override;
|
||||
bool checkDirectSubmissionSupportsEngine(const DirectSubmissionProperties &directSubmissionProperty,
|
||||
aub_stream::EngineType contextEngineType,
|
||||
bool &startOnInit,
|
||||
bool &startInContext);
|
||||
GraphicsAllocation *getClearColorAllocation() override;
|
||||
|
||||
protected:
|
||||
|
||||
@@ -1132,81 +1132,23 @@ template <typename GfxFamily>
|
||||
inline bool CommandStreamReceiverHw<GfxFamily>::initDirectSubmission(Device &device, OsContext &osContext) {
|
||||
bool ret = true;
|
||||
|
||||
if (DebugManager.flags.EnableDirectSubmission.get() == 1) {
|
||||
auto contextEngineType = osContext.getEngineType();
|
||||
const DirectSubmissionProperties &directSubmissionProperty =
|
||||
device.getHardwareInfo().capabilityTable.directSubmissionEngines.data[contextEngineType];
|
||||
bool submitOnInit = false;
|
||||
auto startDirect = osContext.isDirectSubmissionAvailable(device.getHardwareInfo(), submitOnInit);
|
||||
|
||||
bool startDirect = true;
|
||||
if (!osContext.isDefaultContext()) {
|
||||
startDirect = directSubmissionProperty.useNonDefault;
|
||||
}
|
||||
if (osContext.isLowPriority()) {
|
||||
startDirect = directSubmissionProperty.useLowPriority;
|
||||
}
|
||||
if (osContext.isInternalEngine()) {
|
||||
startDirect = directSubmissionProperty.useInternal;
|
||||
}
|
||||
if (osContext.isRootDevice()) {
|
||||
startDirect = directSubmissionProperty.useRootDevice;
|
||||
}
|
||||
|
||||
bool submitOnInit = directSubmissionProperty.submitOnInit;
|
||||
bool engineSupported = checkDirectSubmissionSupportsEngine(directSubmissionProperty,
|
||||
contextEngineType,
|
||||
submitOnInit,
|
||||
startDirect);
|
||||
if (engineSupported && startDirect) {
|
||||
if (contextEngineType == aub_stream::ENGINE_BCS) {
|
||||
blitterDirectSubmission = DirectSubmissionHw<GfxFamily, BlitterDispatcher<GfxFamily>>::create(device, osContext);
|
||||
ret = blitterDirectSubmission->initialize(submitOnInit);
|
||||
} else {
|
||||
directSubmission = DirectSubmissionHw<GfxFamily, RenderDispatcher<GfxFamily>>::create(device, osContext);
|
||||
ret = directSubmission->initialize(submitOnInit);
|
||||
this->dispatchMode = DispatchMode::ImmediateDispatch;
|
||||
}
|
||||
osContext.setDirectSubmissionActive();
|
||||
if (startDirect) {
|
||||
if (osContext.getEngineType() == aub_stream::ENGINE_BCS) {
|
||||
blitterDirectSubmission = DirectSubmissionHw<GfxFamily, BlitterDispatcher<GfxFamily>>::create(device, osContext);
|
||||
ret = blitterDirectSubmission->initialize(submitOnInit);
|
||||
} else {
|
||||
directSubmission = DirectSubmissionHw<GfxFamily, RenderDispatcher<GfxFamily>>::create(device, osContext);
|
||||
ret = directSubmission->initialize(submitOnInit);
|
||||
this->dispatchMode = DispatchMode::ImmediateDispatch;
|
||||
}
|
||||
osContext.setDirectSubmissionActive();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
template <typename GfxFamily>
|
||||
inline bool CommandStreamReceiverHw<GfxFamily>::checkDirectSubmissionSupportsEngine(const DirectSubmissionProperties &directSubmissionProperty,
|
||||
aub_stream::EngineType contextEngineType,
|
||||
bool &startOnInit,
|
||||
bool &startInContext) {
|
||||
bool supported = directSubmissionProperty.engineSupported;
|
||||
startOnInit = directSubmissionProperty.submitOnInit;
|
||||
if (contextEngineType == aub_stream::ENGINE_BCS) {
|
||||
int32_t blitterOverrideKey = DebugManager.flags.DirectSubmissionOverrideBlitterSupport.get();
|
||||
if (blitterOverrideKey != -1) {
|
||||
supported = blitterOverrideKey == 0 ? false : true;
|
||||
startOnInit = blitterOverrideKey == 1 ? true : false;
|
||||
}
|
||||
} else if (contextEngineType == aub_stream::ENGINE_RCS) {
|
||||
int32_t renderOverrideKey = DebugManager.flags.DirectSubmissionOverrideRenderSupport.get();
|
||||
if (renderOverrideKey != -1) {
|
||||
supported = renderOverrideKey == 0 ? false : true;
|
||||
startOnInit = renderOverrideKey == 1 ? true : false;
|
||||
}
|
||||
} else {
|
||||
//assume else is CCS
|
||||
int32_t computeOverrideKey = DebugManager.flags.DirectSubmissionOverrideComputeSupport.get();
|
||||
if (computeOverrideKey != -1) {
|
||||
supported = computeOverrideKey == 0 ? false : true;
|
||||
startOnInit = computeOverrideKey == 1 ? true : false;
|
||||
}
|
||||
}
|
||||
|
||||
//enable start in context only when default support is overridden and enabled
|
||||
if (supported && !directSubmissionProperty.engineSupported) {
|
||||
startInContext = true;
|
||||
}
|
||||
|
||||
return supported;
|
||||
}
|
||||
|
||||
template <typename GfxFamily>
|
||||
size_t CommandStreamReceiverHw<GfxFamily>::getCmdSizeForPerDssBackedBuffer(const HardwareInfo &hwInfo) {
|
||||
return 0;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (C) 2018-2020 Intel Corporation
|
||||
# Copyright (C) 2018-2021 Intel Corporation
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
#
|
||||
@@ -16,6 +16,7 @@ set(NEO_CORE_OS_INTERFACE
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/hw_info_config.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/hw_info_config.inl
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/hw_info_config_bdw_plus.inl
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/os_context.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/os_context.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/os_environment.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/os_interface.h
|
||||
|
||||
@@ -207,8 +207,11 @@ void Drm::setNonPersistentContext(uint32_t drmContextId) {
|
||||
ioctl(DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM, &contextParam);
|
||||
}
|
||||
|
||||
uint32_t Drm::createDrmContext(uint32_t drmVmId) {
|
||||
uint32_t Drm::createDrmContext(uint32_t drmVmId, bool isDirectSubmission) {
|
||||
drm_i915_gem_context_create_ext gcc = {};
|
||||
|
||||
this->appendDrmContextFlags(gcc, isDirectSubmission);
|
||||
|
||||
auto retVal = ioctl(DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT, &gcc);
|
||||
UNRECOVERABLE_IF(retVal != 0);
|
||||
|
||||
|
||||
@@ -86,7 +86,8 @@ class Drm {
|
||||
inline int getFileDescriptor() const { return hwDeviceId->getFileDescriptor(); }
|
||||
int createDrmVirtualMemory(uint32_t &drmVmId);
|
||||
void destroyDrmVirtualMemory(uint32_t drmVmId);
|
||||
uint32_t createDrmContext(uint32_t drmVmId);
|
||||
uint32_t createDrmContext(uint32_t drmVmId, bool isDirectSubmission);
|
||||
void appendDrmContextFlags(drm_i915_gem_context_create_ext &gcc, bool isDirectSubmission);
|
||||
void destroyDrmContext(uint32_t drmContextId);
|
||||
int queryVmId(uint32_t drmContextId, uint32_t &vmId);
|
||||
void setLowPriorityContextParam(uint32_t drmContextId);
|
||||
|
||||
@@ -70,6 +70,9 @@ bool Drm::isVmBindAvailable() {
|
||||
return this->bindAvailable;
|
||||
}
|
||||
|
||||
void Drm::appendDrmContextFlags(drm_i915_gem_context_create_ext &gcc, bool isDirectSubmission) {
|
||||
}
|
||||
|
||||
void Drm::setupCacheInfo(const HardwareInfo &hwInfo) {
|
||||
this->cacheInfo.reset(new CacheInfoImpl());
|
||||
}
|
||||
|
||||
@@ -79,6 +79,9 @@ bool Drm::isVmBindAvailable() {
|
||||
return this->bindAvailable;
|
||||
}
|
||||
|
||||
void Drm::appendDrmContextFlags(drm_i915_gem_context_create_ext &gcc, bool isDirectSubmission) {
|
||||
}
|
||||
|
||||
void Drm::setupCacheInfo(const HardwareInfo &hwInfo) {
|
||||
this->cacheInfo.reset(new CacheInfoImpl());
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
#include "shared/source/execution_environment/execution_environment.h"
|
||||
#include "shared/source/execution_environment/root_device_environment.h"
|
||||
#include "shared/source/helpers/hw_info.h"
|
||||
#include "shared/source/os_interface/linux/drm_neo.h"
|
||||
#include "shared/source/os_interface/linux/os_interface.h"
|
||||
#include "shared/source/os_interface/os_context.h"
|
||||
@@ -31,10 +32,20 @@ OsContextLinux::OsContextLinux(Drm &drm, uint32_t contextId, DeviceBitfield devi
|
||||
bool lowPriority, bool internalEngine, bool rootDevice)
|
||||
: OsContext(contextId, deviceBitfield, engineType, preemptionMode, lowPriority, internalEngine, rootDevice),
|
||||
drm(drm) {
|
||||
auto hwInfo = drm.getRootDeviceEnvironment().getHardwareInfo();
|
||||
auto defaultEngineType = getChosenEngineType(*hwInfo);
|
||||
|
||||
if (engineType == defaultEngineType && !lowPriority && !internalEngine) {
|
||||
this->setDefaultContext(true);
|
||||
}
|
||||
|
||||
bool submitDirect = false;
|
||||
this->isDirectSubmissionAvailable(*drm.getRootDeviceEnvironment().getHardwareInfo(), submitDirect);
|
||||
|
||||
for (auto deviceIndex = 0u; deviceIndex < deviceBitfield.size(); deviceIndex++) {
|
||||
if (deviceBitfield.test(deviceIndex)) {
|
||||
auto drmVmId = drm.getVirtualMemoryAddressSpace(deviceIndex);
|
||||
auto drmContextId = drm.createDrmContext(drmVmId);
|
||||
auto drmContextId = drm.createDrmContext(drmVmId, this->isDirectSubmissionActive());
|
||||
if (drm.areNonPersistentContextsSupported()) {
|
||||
drm.setNonPersistentContext(drmContextId);
|
||||
}
|
||||
|
||||
81
shared/source/os_interface/os_context.cpp
Normal file
81
shared/source/os_interface/os_context.cpp
Normal file
@@ -0,0 +1,81 @@
|
||||
/*
|
||||
* Copyright (C) 2021 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#include "shared/source/os_interface/os_context.h"
|
||||
|
||||
#include "shared/source/debug_settings/debug_settings_manager.h"
|
||||
#include "shared/source/direct_submission/direct_submission_properties.h"
|
||||
#include "shared/source/helpers/hw_info.h"
|
||||
|
||||
namespace NEO {
|
||||
bool OsContext::isDirectSubmissionAvailable(const HardwareInfo &hwInfo, bool &submitOnInit) {
|
||||
if (DebugManager.flags.EnableDirectSubmission.get() == 1) {
|
||||
auto contextEngineType = this->getEngineType();
|
||||
const DirectSubmissionProperties &directSubmissionProperty =
|
||||
hwInfo.capabilityTable.directSubmissionEngines.data[contextEngineType];
|
||||
|
||||
bool startDirect = true;
|
||||
if (!this->isDefaultContext()) {
|
||||
startDirect = directSubmissionProperty.useNonDefault;
|
||||
}
|
||||
if (this->isLowPriority()) {
|
||||
startDirect = directSubmissionProperty.useLowPriority;
|
||||
}
|
||||
if (this->isInternalEngine()) {
|
||||
startDirect = directSubmissionProperty.useInternal;
|
||||
}
|
||||
if (this->isRootDevice()) {
|
||||
startDirect = directSubmissionProperty.useRootDevice;
|
||||
}
|
||||
|
||||
submitOnInit = directSubmissionProperty.submitOnInit;
|
||||
bool engineSupported = checkDirectSubmissionSupportsEngine(directSubmissionProperty,
|
||||
contextEngineType,
|
||||
submitOnInit,
|
||||
startDirect);
|
||||
|
||||
if (engineSupported && startDirect) {
|
||||
this->setDirectSubmissionActive();
|
||||
}
|
||||
|
||||
return engineSupported && startDirect;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool OsContext::checkDirectSubmissionSupportsEngine(const DirectSubmissionProperties &directSubmissionProperty, aub_stream::EngineType contextEngineType, bool &startOnInit, bool &startInContext) {
|
||||
bool supported = directSubmissionProperty.engineSupported;
|
||||
startOnInit = directSubmissionProperty.submitOnInit;
|
||||
if (contextEngineType == aub_stream::ENGINE_BCS) {
|
||||
int32_t blitterOverrideKey = DebugManager.flags.DirectSubmissionOverrideBlitterSupport.get();
|
||||
if (blitterOverrideKey != -1) {
|
||||
supported = blitterOverrideKey == 0 ? false : true;
|
||||
startOnInit = blitterOverrideKey == 1 ? true : false;
|
||||
}
|
||||
} else if (contextEngineType == aub_stream::ENGINE_RCS) {
|
||||
int32_t renderOverrideKey = DebugManager.flags.DirectSubmissionOverrideRenderSupport.get();
|
||||
if (renderOverrideKey != -1) {
|
||||
supported = renderOverrideKey == 0 ? false : true;
|
||||
startOnInit = renderOverrideKey == 1 ? true : false;
|
||||
}
|
||||
} else {
|
||||
//assume else is CCS
|
||||
int32_t computeOverrideKey = DebugManager.flags.DirectSubmissionOverrideComputeSupport.get();
|
||||
if (computeOverrideKey != -1) {
|
||||
supported = computeOverrideKey == 0 ? false : true;
|
||||
startOnInit = computeOverrideKey == 1 ? true : false;
|
||||
}
|
||||
}
|
||||
|
||||
//enable start in context only when default support is overridden and enabled
|
||||
if (supported && !directSubmissionProperty.engineSupported) {
|
||||
startInContext = true;
|
||||
}
|
||||
|
||||
return supported;
|
||||
}
|
||||
} // namespace NEO
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2018-2020 Intel Corporation
|
||||
* Copyright (C) 2018-2021 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
@@ -17,6 +17,9 @@
|
||||
namespace NEO {
|
||||
class OSInterface;
|
||||
|
||||
struct DirectSubmissionProperties;
|
||||
struct HardwareInfo;
|
||||
|
||||
class OsContext : public ReferenceTrackedObject<OsContext> {
|
||||
public:
|
||||
OsContext() = delete;
|
||||
@@ -38,6 +41,12 @@ class OsContext : public ReferenceTrackedObject<OsContext> {
|
||||
bool isDirectSubmissionActive() { return directSubmissionActive; }
|
||||
void setDirectSubmissionActive() { directSubmissionActive = true; }
|
||||
|
||||
bool isDirectSubmissionAvailable(const HardwareInfo &hwInfo, bool &submitOnInit);
|
||||
bool checkDirectSubmissionSupportsEngine(const DirectSubmissionProperties &directSubmissionProperty,
|
||||
aub_stream::EngineType contextEngineType,
|
||||
bool &startOnInit,
|
||||
bool &startInContext);
|
||||
|
||||
protected:
|
||||
OsContext(uint32_t contextId, DeviceBitfield deviceBitfield, aub_stream::EngineType engineType, PreemptionMode preemptionMode,
|
||||
bool lowPriority, bool internalEngine, bool rootDevice)
|
||||
|
||||
Reference in New Issue
Block a user