mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-21 01:04:57 +08:00
Refactor: Update Drm::createDrmContext
Signed-off-by: Filip Hazubski <filip.hazubski@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
ce5f9c2214
commit
fe08216102
@@ -561,7 +561,7 @@ TEST_F(DrmTests, GivenFailOnContextCreateWhenCreatingDrmThenDrmIsCreated) {
|
||||
auto drm = DrmWrap::createDrm(*rootDeviceEnvironment);
|
||||
EXPECT_NE(drm, nullptr);
|
||||
failOnContextCreate = -1;
|
||||
EXPECT_THROW(drm->createDrmContext(1, false), std::exception);
|
||||
EXPECT_THROW(drm->createDrmContext(1, false, false), std::exception);
|
||||
EXPECT_FALSE(drm->isPreemptionSupported());
|
||||
failOnContextCreate = 0;
|
||||
}
|
||||
@@ -572,7 +572,7 @@ TEST_F(DrmTests, GivenFailOnSetPriorityWhenCreatingDrmThenDrmIsCreated) {
|
||||
auto drm = DrmWrap::createDrm(*rootDeviceEnvironment);
|
||||
EXPECT_NE(drm, nullptr);
|
||||
failOnSetPriority = -1;
|
||||
auto drmContext = drm->createDrmContext(1, false);
|
||||
auto drmContext = drm->createDrmContext(1, false, false);
|
||||
EXPECT_THROW(drm->setLowPriorityContextParam(drmContext), std::exception);
|
||||
EXPECT_FALSE(drm->isPreemptionSupported());
|
||||
failOnSetPriority = 0;
|
||||
|
||||
@@ -181,7 +181,7 @@ TEST(DrmTest, GivenDrmWhenAskedForContextThatFailsThenFalseIsReturned) {
|
||||
executionEnvironment->prepareRootDeviceEnvironments(1);
|
||||
DrmMock *pDrm = new DrmMock(*executionEnvironment->rootDeviceEnvironments[0]);
|
||||
pDrm->storedRetVal = -1;
|
||||
EXPECT_THROW(pDrm->createDrmContext(1, false), std::exception);
|
||||
EXPECT_THROW(pDrm->createDrmContext(1, false, false), std::exception);
|
||||
pDrm->storedRetVal = 0;
|
||||
delete pDrm;
|
||||
}
|
||||
|
||||
@@ -54,6 +54,17 @@ TEST(OSContext, givenOsContextCreatedDefaultIsFalseWhenSettingTrueThenFlagTrueRe
|
||||
delete osContext;
|
||||
}
|
||||
|
||||
TEST(OSContext, givenCooperativeEngineWhenIsCooperativeEngineIsCalledThenReturnTrue) {
|
||||
auto engineDescriptor = EngineDescriptorHelper::getDefaultDescriptor();
|
||||
engineDescriptor.engineTypeUsage.second = EngineUsage::Cooperative;
|
||||
auto pOsContext = OsContext::create(nullptr, 0, engineDescriptor);
|
||||
EXPECT_FALSE(pOsContext->isRegular());
|
||||
EXPECT_FALSE(pOsContext->isLowPriority());
|
||||
EXPECT_FALSE(pOsContext->isInternalEngine());
|
||||
EXPECT_TRUE(pOsContext->isCooperativeEngine());
|
||||
delete pOsContext;
|
||||
}
|
||||
|
||||
struct DeferredOsContextCreationTests : ::testing::Test {
|
||||
void SetUp() override {
|
||||
device = std::unique_ptr<MockDevice>{MockDevice::createWithNewExecutionEnvironment<MockDevice>(defaultHwInfo.get())};
|
||||
|
||||
@@ -391,12 +391,12 @@ void Drm::setUnrecoverableContext(uint32_t drmContextId) {
|
||||
ioctl(DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM, &contextParam);
|
||||
}
|
||||
|
||||
uint32_t Drm::createDrmContext(uint32_t drmVmId, bool isSpecialContextRequested) {
|
||||
uint32_t Drm::createDrmContext(uint32_t drmVmId, bool isSpecialContextRequested, bool isCooperativeContextRequested) {
|
||||
drm_i915_gem_context_create_ext gcc = {};
|
||||
|
||||
this->appendDrmContextFlags(gcc, isSpecialContextRequested);
|
||||
|
||||
auto retVal = this->createDrmContextExt(gcc, drmVmId, isSpecialContextRequested);
|
||||
auto retVal = this->createDrmContextExt(gcc, drmVmId, isSpecialContextRequested, isCooperativeContextRequested);
|
||||
UNRECOVERABLE_IF(retVal != 0);
|
||||
|
||||
if (drmVmId > 0) {
|
||||
|
||||
@@ -119,7 +119,7 @@ class Drm : public DriverModel {
|
||||
int queryAdapterBDF();
|
||||
int createDrmVirtualMemory(uint32_t &drmVmId);
|
||||
void destroyDrmVirtualMemory(uint32_t drmVmId);
|
||||
uint32_t createDrmContext(uint32_t drmVmId, bool isSpecialContextRequested);
|
||||
uint32_t createDrmContext(uint32_t drmVmId, bool isSpecialContextRequested, bool isCooperativeContextRequested);
|
||||
void appendDrmContextFlags(drm_i915_gem_context_create_ext &gcc, bool isSpecialContextRequested);
|
||||
void destroyDrmContext(uint32_t drmContextId);
|
||||
int queryVmId(uint32_t drmContextId, uint32_t &vmId);
|
||||
@@ -253,7 +253,8 @@ class Drm : public DriverModel {
|
||||
protected:
|
||||
Drm(std::unique_ptr<HwDeviceIdDrm> &&hwDeviceIdIn, RootDeviceEnvironment &rootDeviceEnvironment);
|
||||
|
||||
uint32_t createDrmContextExt(drm_i915_gem_context_create_ext &gcc, uint32_t drmVmId, bool isSpecialContextRequested);
|
||||
uint32_t createDrmContextExt(drm_i915_gem_context_create_ext &gcc, uint32_t drmVmId, bool isSpecialContextRequested,
|
||||
bool isCooperativeContextRequested);
|
||||
int getQueueSliceCount(drm_i915_gem_context_param_sseu *sseu);
|
||||
bool translateTopologyInfo(const drm_i915_query_topology_info *queryTopologyInfo, QueryTopologyData &data, TopologyMapping &mapping);
|
||||
std::string generateUUID();
|
||||
|
||||
@@ -144,7 +144,8 @@ bool Drm::isVmBindAvailable() {
|
||||
return this->bindAvailable;
|
||||
}
|
||||
|
||||
uint32_t Drm::createDrmContextExt(drm_i915_gem_context_create_ext &gcc, uint32_t drmVmId, bool isSpecialContextRequested) {
|
||||
uint32_t Drm::createDrmContextExt(drm_i915_gem_context_create_ext &gcc, uint32_t drmVmId, bool isSpecialContextRequested,
|
||||
bool isCooperativeContextRequested) {
|
||||
return ioctl(DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT, &gcc);
|
||||
}
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ void OsContextLinux::initializeContext() {
|
||||
for (auto deviceIndex = 0u; deviceIndex < deviceBitfield.size(); deviceIndex++) {
|
||||
if (deviceBitfield.test(deviceIndex)) {
|
||||
auto drmVmId = drm.getVirtualMemoryAddressSpace(deviceIndex);
|
||||
auto drmContextId = drm.createDrmContext(drmVmId, drm.isVmBindAvailable());
|
||||
auto drmContextId = drm.createDrmContext(drmVmId, drm.isVmBindAvailable(), isCooperativeEngine());
|
||||
if (drm.areNonPersistentContextsSupported()) {
|
||||
drm.setNonPersistentContext(drmContextId);
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@ class OsContext : public ReferenceTrackedObject<OsContext> {
|
||||
bool isRegular() const { return engineUsage == EngineUsage::Regular; }
|
||||
bool isLowPriority() const { return engineUsage == EngineUsage::LowPriority; }
|
||||
bool isInternalEngine() const { return engineUsage == EngineUsage::Internal; }
|
||||
bool isCooperativeEngine() const { return engineUsage == EngineUsage::Cooperative; }
|
||||
bool isRootDevice() const { return rootDevice; }
|
||||
bool isEngineInstanced() const { return engineInstancedDevice; }
|
||||
virtual bool isDirectSubmissionSupported(const HardwareInfo &hwInfo) const { return false; }
|
||||
|
||||
Reference in New Issue
Block a user