mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-20 00:24:58 +08:00
Add methods to prepare VM BIND structs
create VmBindExt setup flags for VM BIND Related-To: NEO-6591 Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
cf27583264
commit
964596e514
@@ -82,6 +82,8 @@ class IoctlHelper {
|
||||
virtual int32_t getMemRegionsIoctlVal() = 0;
|
||||
virtual int32_t getEngineInfoIoctlVal() = 0;
|
||||
virtual uint32_t getComputeSlicesIoctlVal() = 0;
|
||||
virtual std::unique_ptr<uint8_t[]> prepareVmBindExt(const StackVec<uint32_t, 2> &bindExtHandles) = 0;
|
||||
virtual uint64_t getFlagsForVmBind(bool bindCapture, bool bindImmediate, bool bindMakeResident) = 0;
|
||||
virtual std::vector<EngineCapabilities> translateToEngineCaps(const std::vector<uint8_t> &data) = 0;
|
||||
virtual uint32_t queryDistances(Drm *drm, std::vector<drm_i915_query_item> &queryItems, std::vector<DistanceInfo> &distanceInfos) = 0;
|
||||
virtual int32_t getComputeEngineClass() = 0;
|
||||
@@ -112,6 +114,8 @@ class IoctlHelperUpstream : public IoctlHelper {
|
||||
int32_t getMemRegionsIoctlVal() override;
|
||||
int32_t getEngineInfoIoctlVal() override;
|
||||
uint32_t getComputeSlicesIoctlVal() override;
|
||||
std::unique_ptr<uint8_t[]> prepareVmBindExt(const StackVec<uint32_t, 2> &bindExtHandles) override;
|
||||
uint64_t getFlagsForVmBind(bool bindCapture, bool bindImmediate, bool bindMakeResident) override;
|
||||
std::vector<EngineCapabilities> translateToEngineCaps(const std::vector<uint8_t> &data) override;
|
||||
uint32_t queryDistances(Drm *drm, std::vector<drm_i915_query_item> &queryItems, std::vector<DistanceInfo> &distanceInfos) override;
|
||||
int32_t getComputeEngineClass() override;
|
||||
@@ -157,6 +161,8 @@ class IoctlHelperPrelim20 : public IoctlHelper {
|
||||
int32_t getMemRegionsIoctlVal() override;
|
||||
int32_t getEngineInfoIoctlVal() override;
|
||||
uint32_t getComputeSlicesIoctlVal() override;
|
||||
std::unique_ptr<uint8_t[]> prepareVmBindExt(const StackVec<uint32_t, 2> &bindExtHandles) override;
|
||||
uint64_t getFlagsForVmBind(bool bindCapture, bool bindImmediate, bool bindMakeResident) override;
|
||||
std::vector<EngineCapabilities> translateToEngineCaps(const std::vector<uint8_t> &data) override;
|
||||
uint32_t queryDistances(Drm *drm, std::vector<drm_i915_query_item> &queryItems, std::vector<DistanceInfo> &distanceInfos) override;
|
||||
int32_t getComputeEngineClass() override;
|
||||
|
||||
@@ -250,6 +250,36 @@ uint16_t IoctlHelperPrelim20::getWaitUserFenceSoftFlag() {
|
||||
return PRELIM_I915_UFENCE_WAIT_SOFT;
|
||||
};
|
||||
|
||||
std::unique_ptr<uint8_t[]> IoctlHelperPrelim20::prepareVmBindExt(const StackVec<uint32_t, 2> &bindExtHandles) {
|
||||
std::unique_ptr<prelim_drm_i915_vm_bind_ext_uuid[]> extensions;
|
||||
extensions = std::make_unique<prelim_drm_i915_vm_bind_ext_uuid[]>(bindExtHandles.size());
|
||||
memset(extensions.get(), 0, sizeof(prelim_drm_i915_vm_bind_ext_uuid) * bindExtHandles.size());
|
||||
|
||||
extensions[0].uuid_handle = bindExtHandles[0];
|
||||
extensions[0].base.name = PRELIM_I915_VM_BIND_EXT_UUID;
|
||||
|
||||
for (size_t i = 1; i < bindExtHandles.size(); i++) {
|
||||
extensions[i - 1].base.next_extension = reinterpret_cast<uint64_t>(&extensions[i]);
|
||||
extensions[i].uuid_handle = bindExtHandles[i];
|
||||
extensions[i].base.name = PRELIM_I915_VM_BIND_EXT_UUID;
|
||||
}
|
||||
return std::unique_ptr<uint8_t[]>(reinterpret_cast<uint8_t *>(extensions.release()));
|
||||
}
|
||||
|
||||
uint64_t IoctlHelperPrelim20::getFlagsForVmBind(bool bindCapture, bool bindImmediate, bool bindMakeResident) {
|
||||
uint64_t flags = 0u;
|
||||
if (bindCapture) {
|
||||
flags |= PRELIM_I915_GEM_VM_BIND_CAPTURE;
|
||||
}
|
||||
if (bindImmediate) {
|
||||
flags |= PRELIM_I915_GEM_VM_BIND_IMMEDIATE;
|
||||
}
|
||||
if (bindMakeResident) {
|
||||
flags |= PRELIM_I915_GEM_VM_BIND_MAKE_RESIDENT;
|
||||
}
|
||||
return flags;
|
||||
}
|
||||
|
||||
std::vector<EngineCapabilities> IoctlHelperPrelim20::translateToEngineCaps(const std::vector<uint8_t> &data) {
|
||||
auto engineInfo = reinterpret_cast<const prelim_drm_i915_query_engine_info *>(data.data());
|
||||
std::vector<EngineCapabilities> engines;
|
||||
|
||||
@@ -113,6 +113,13 @@ uint32_t IoctlHelperUpstream::getComputeSlicesIoctlVal() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::unique_ptr<uint8_t[]> IoctlHelperUpstream::prepareVmBindExt(const StackVec<uint32_t, 2> &bindExtHandles) {
|
||||
return {};
|
||||
}
|
||||
uint64_t IoctlHelperUpstream::getFlagsForVmBind(bool bindCapture, bool bindImmediate, bool bindMakeResident) {
|
||||
return 0u;
|
||||
}
|
||||
|
||||
std::vector<EngineCapabilities> IoctlHelperUpstream::translateToEngineCaps(const std::vector<uint8_t> &data) {
|
||||
auto engineInfo = reinterpret_cast<const drm_i915_query_engine_info *>(data.data());
|
||||
std::vector<EngineCapabilities> engines;
|
||||
|
||||
@@ -72,6 +72,47 @@ TEST_F(IoctlPrelimHelperTests, givenPrelimsWhenTranslateToMemoryRegionsThenRetur
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(IoctlPrelimHelperTests, whenGettingFlagsForVmBindThenProperValuesAreReturned) {
|
||||
for (auto &bindCapture : ::testing::Bool()) {
|
||||
for (auto &bindImmediate : ::testing::Bool()) {
|
||||
for (auto &bindMakeResident : ::testing::Bool()) {
|
||||
auto flags = ioctlHelper.getFlagsForVmBind(bindCapture, bindImmediate, bindMakeResident);
|
||||
if (bindCapture) {
|
||||
EXPECT_EQ(PRELIM_I915_GEM_VM_BIND_CAPTURE, (flags & PRELIM_I915_GEM_VM_BIND_CAPTURE));
|
||||
}
|
||||
if (bindImmediate) {
|
||||
EXPECT_EQ(PRELIM_I915_GEM_VM_BIND_IMMEDIATE, (flags & PRELIM_I915_GEM_VM_BIND_IMMEDIATE));
|
||||
}
|
||||
if (bindMakeResident) {
|
||||
EXPECT_EQ(PRELIM_I915_GEM_VM_BIND_MAKE_RESIDENT, (flags & PRELIM_I915_GEM_VM_BIND_MAKE_RESIDENT));
|
||||
}
|
||||
if (flags == 0) {
|
||||
EXPECT_FALSE(bindCapture);
|
||||
EXPECT_FALSE(bindImmediate);
|
||||
EXPECT_FALSE(bindMakeResident);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(IoctlPrelimHelperTests, whenGettingVmBindExtFromHandlesThenProperStructsAreReturned) {
|
||||
StackVec<uint32_t, 2> bindExtHandles;
|
||||
bindExtHandles.push_back(1u);
|
||||
bindExtHandles.push_back(2u);
|
||||
bindExtHandles.push_back(3u);
|
||||
auto retVal = ioctlHelper.prepareVmBindExt(bindExtHandles);
|
||||
auto vmBindExt = reinterpret_cast<prelim_drm_i915_vm_bind_ext_uuid *>(retVal.get());
|
||||
|
||||
for (size_t i = 0; i < bindExtHandles.size(); i++) {
|
||||
EXPECT_EQ(bindExtHandles[i], vmBindExt[i].uuid_handle);
|
||||
EXPECT_EQ(static_cast<uint32_t>(PRELIM_I915_VM_BIND_EXT_UUID), vmBindExt[i].base.name);
|
||||
}
|
||||
|
||||
EXPECT_EQ(reinterpret_cast<uintptr_t>(&vmBindExt[1]), vmBindExt[0].base.next_extension);
|
||||
EXPECT_EQ(reinterpret_cast<uintptr_t>(&vmBindExt[2]), vmBindExt[1].base.next_extension);
|
||||
}
|
||||
|
||||
TEST_F(IoctlPrelimHelperTests, givenPrelimsWhenGetHwConfigIoctlValThenCorrectValueReturned) {
|
||||
EXPECT_EQ(static_cast<uint32_t>(PRELIM_DRM_I915_QUERY_HWCONFIG_TABLE), ioctlHelper.getHwConfigIoctlVal());
|
||||
}
|
||||
|
||||
@@ -30,6 +30,27 @@ TEST(IoctlHelperUpstreamTest, givenIoctlParamWhenParseToStringThenProperStringIs
|
||||
EXPECT_STREQ(ioctlHelper.getIoctlParamString(ioctlParamCodeString.first).c_str(), ioctlParamCodeString.second);
|
||||
}
|
||||
}
|
||||
TEST(IoctlHelperUpstreamTest, whenGettingFlagsForVmBindThenZeroIsReturned) {
|
||||
IoctlHelperUpstream ioctlHelper{};
|
||||
for (auto &bindCapture : ::testing::Bool()) {
|
||||
for (auto &bindImmediate : ::testing::Bool()) {
|
||||
for (auto &bindMakeResident : ::testing::Bool()) {
|
||||
auto flags = ioctlHelper.getFlagsForVmBind(bindCapture, bindImmediate, bindMakeResident);
|
||||
EXPECT_EQ(0u, flags);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TEST(IoctlHelperUpstreamTest, whenGettingVmBindExtFromHandlesThenNullptrIsReturned) {
|
||||
IoctlHelperUpstream ioctlHelper{};
|
||||
StackVec<uint32_t, 2> bindExtHandles;
|
||||
bindExtHandles.push_back(1u);
|
||||
bindExtHandles.push_back(2u);
|
||||
bindExtHandles.push_back(3u);
|
||||
auto retVal = ioctlHelper.prepareVmBindExt(bindExtHandles);
|
||||
EXPECT_EQ(nullptr, retVal);
|
||||
}
|
||||
|
||||
TEST(IoctlHelperTestsUpstream, givenUpstreamWhenCreateGemExtThenReturnCorrectValue) {
|
||||
auto executionEnvironment = std::make_unique<ExecutionEnvironment>();
|
||||
|
||||
Reference in New Issue
Block a user