mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-25 05:24:02 +08:00
Create a wrapper for drm_i915_query_item
Related-To: NEO-6852 Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
771298c6e2
commit
ac3005a463
@@ -12,8 +12,6 @@
|
||||
#include "shared/source/os_interface/linux/drm_wrappers.h"
|
||||
#include "shared/source/os_interface/os_interface.h"
|
||||
|
||||
#include "drm/i915_drm.h"
|
||||
|
||||
#include <time.h>
|
||||
|
||||
namespace NEO {
|
||||
|
||||
@@ -19,8 +19,6 @@
|
||||
#include "shared/source/os_interface/os_context.h"
|
||||
#include "shared/source/utilities/stackvec.h"
|
||||
|
||||
#include "drm/i915_drm.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <map>
|
||||
|
||||
@@ -31,8 +31,6 @@
|
||||
#include "shared/source/os_interface/linux/os_context_linux.h"
|
||||
#include "shared/source/os_interface/os_interface.h"
|
||||
|
||||
#include "drm/i915_drm.h"
|
||||
|
||||
#include <cstring>
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include "shared/source/os_interface/linux/drm_gem_close_worker.h"
|
||||
#include "shared/source/os_interface/linux/drm_memory_manager.h"
|
||||
#include "shared/source/os_interface/linux/drm_memory_operations_handler_bind.h"
|
||||
#include "shared/source/os_interface/linux/drm_wrappers.h"
|
||||
#include "shared/source/os_interface/linux/hw_device_id.h"
|
||||
#include "shared/source/os_interface/linux/ioctl_helper.h"
|
||||
#include "shared/source/os_interface/linux/ioctl_strings.h"
|
||||
@@ -674,8 +675,8 @@ bool Drm::isi915Version(int fileDescriptor) {
|
||||
|
||||
std::vector<uint8_t> Drm::query(uint32_t queryId, uint32_t queryItemFlags) {
|
||||
drm_i915_query query{};
|
||||
drm_i915_query_item queryItem{};
|
||||
queryItem.query_id = queryId;
|
||||
QueryItem queryItem{};
|
||||
queryItem.queryId = queryId;
|
||||
queryItem.length = 0; // query length first
|
||||
queryItem.flags = queryItemFlags;
|
||||
query.items_ptr = reinterpret_cast<__u64>(&queryItem);
|
||||
@@ -687,7 +688,7 @@ std::vector<uint8_t> Drm::query(uint32_t queryId, uint32_t queryItemFlags) {
|
||||
}
|
||||
|
||||
auto data = std::vector<uint8_t>(queryItem.length, 0);
|
||||
queryItem.data_ptr = castToUint64(data.data());
|
||||
queryItem.dataPtr = castToUint64(data.data());
|
||||
|
||||
ret = this->ioctl(DRM_IOCTL_I915_QUERY, &query);
|
||||
if (ret != 0 || queryItem.length <= 0) {
|
||||
@@ -1093,14 +1094,14 @@ bool Drm::queryEngineInfo(bool isSysmanEnabled) {
|
||||
return true;
|
||||
}
|
||||
|
||||
std::vector<drm_i915_query_item> queryItems{distanceInfos.size()};
|
||||
std::vector<QueryItem> queryItems{distanceInfos.size()};
|
||||
auto ret = ioctlHelper->queryDistances(this, queryItems, distanceInfos);
|
||||
if (ret != 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const bool queryUnsupported = std::all_of(queryItems.begin(), queryItems.end(),
|
||||
[](const drm_i915_query_item &item) { return item.length == -EINVAL; });
|
||||
[](const QueryItem &item) { return item.length == -EINVAL; });
|
||||
if (queryUnsupported) {
|
||||
DEBUG_BREAK_IF(tileCount != 1);
|
||||
this->engineInfo.reset(new EngineInfo(this, hwInfo, engines));
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include "shared/source/utilities/api_intercept.h"
|
||||
#include "shared/source/utilities/stackvec.h"
|
||||
|
||||
#include "drm/i915_drm.h"
|
||||
#include "engine_node.h"
|
||||
#include "igfxfmid.h"
|
||||
|
||||
|
||||
@@ -45,4 +45,10 @@ static_assert(sizeof(ExecObject) == sizeof(drm_i915_gem_exec_object2));
|
||||
|
||||
static_assert(sizeof(ExecBuffer) == sizeof(drm_i915_gem_execbuffer2));
|
||||
|
||||
static_assert(sizeof(QueryItem) == sizeof(drm_i915_query_item));
|
||||
static_assert(offsetof(QueryItem, queryId) == offsetof(drm_i915_query_item, query_id));
|
||||
static_assert(offsetof(QueryItem, length) == offsetof(drm_i915_query_item, length));
|
||||
static_assert(offsetof(QueryItem, flags) == offsetof(drm_i915_query_item, flags));
|
||||
static_assert(offsetof(QueryItem, dataPtr) == offsetof(drm_i915_query_item, data_ptr));
|
||||
|
||||
} // namespace NEO
|
||||
|
||||
@@ -49,4 +49,12 @@ struct GemGetTiling {
|
||||
uint32_t swizzleMode;
|
||||
uint32_t physSwizzleMode;
|
||||
};
|
||||
|
||||
struct QueryItem {
|
||||
uint64_t queryId;
|
||||
int32_t length;
|
||||
uint32_t flags;
|
||||
uint64_t dataPtr;
|
||||
};
|
||||
|
||||
} // namespace NEO
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include "shared/source/helpers/engine_node_helper.h"
|
||||
#include "shared/source/helpers/hw_info.h"
|
||||
#include "shared/source/os_interface/linux/drm_neo.h"
|
||||
#include "shared/source/os_interface/linux/drm_wrappers.h"
|
||||
|
||||
#include <array>
|
||||
|
||||
@@ -76,7 +77,7 @@ EngineInfo::EngineInfo(Drm *drm, HardwareInfo *hwInfo, const std::vector<EngineC
|
||||
setSupportedEnginesInfo(hwInfo, computeEngines, bcsInfoMask);
|
||||
}
|
||||
|
||||
EngineInfo::EngineInfo(Drm *drm, HardwareInfo *hwInfo, uint32_t tileCount, const std::vector<DistanceInfo> &distanceInfos, const std::vector<drm_i915_query_item> &queryItems, const std::vector<EngineCapabilities> &engineInfos)
|
||||
EngineInfo::EngineInfo(Drm *drm, HardwareInfo *hwInfo, uint32_t tileCount, const std::vector<DistanceInfo> &distanceInfos, const std::vector<QueryItem> &queryItems, const std::vector<EngineCapabilities> &engineInfos)
|
||||
: engines(engineInfos), tileToEngineToInstanceMap(tileCount) {
|
||||
auto tile = 0u;
|
||||
auto computeEnginesPerTile = 0u;
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
#include "shared/source/os_interface/linux/engine_info.h"
|
||||
#include "shared/source/os_interface/linux/ioctl_helper.h"
|
||||
|
||||
#include "drm/i915_drm.h"
|
||||
#include "engine_node.h"
|
||||
#include "sku_info.h"
|
||||
|
||||
@@ -26,7 +25,7 @@ struct EngineInfo {
|
||||
using EngineToInstanceMap = std::map<aub_stream::EngineType, EngineClassInstance>;
|
||||
|
||||
EngineInfo(Drm *drm, HardwareInfo *hwInfo, const std::vector<EngineCapabilities> &engineInfos);
|
||||
EngineInfo(Drm *drm, HardwareInfo *hwInfo, uint32_t tileCount, const std::vector<DistanceInfo> &distanceInfos, const std::vector<drm_i915_query_item> &queryItems, const std::vector<EngineCapabilities> &engineInfos);
|
||||
EngineInfo(Drm *drm, HardwareInfo *hwInfo, uint32_t tileCount, const std::vector<DistanceInfo> &distanceInfos, const std::vector<QueryItem> &queryItems, const std::vector<EngineCapabilities> &engineInfos);
|
||||
|
||||
~EngineInfo() = default;
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
struct drm_i915_query_item;
|
||||
struct drm_i915_gem_context_create_ext;
|
||||
|
||||
namespace NEO {
|
||||
@@ -27,6 +26,7 @@ enum class CacheRegion : uint16_t;
|
||||
struct HardwareInfo;
|
||||
struct ExecBuffer;
|
||||
struct ExecObject;
|
||||
struct QueryItem;
|
||||
|
||||
extern IoctlHelper *ioctlHelperFactory[IGFX_MAX_PRODUCT];
|
||||
|
||||
@@ -103,7 +103,7 @@ class IoctlHelper {
|
||||
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 uint32_t queryDistances(Drm *drm, std::vector<QueryItem> &queryItems, std::vector<DistanceInfo> &distanceInfos) = 0;
|
||||
virtual int32_t getComputeEngineClass() = 0;
|
||||
virtual uint16_t getWaitUserFenceSoftFlag() = 0;
|
||||
virtual int execBuffer(Drm *drm, ExecBuffer *execBuffer, uint64_t completionGpuAddress, uint32_t counterValue) = 0;
|
||||
@@ -160,7 +160,7 @@ class IoctlHelperUpstream : public IoctlHelper {
|
||||
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;
|
||||
uint32_t queryDistances(Drm *drm, std::vector<QueryItem> &queryItems, std::vector<DistanceInfo> &distanceInfos) override;
|
||||
int32_t getComputeEngineClass() override;
|
||||
uint16_t getWaitUserFenceSoftFlag() override;
|
||||
int execBuffer(Drm *drm, ExecBuffer *execBuffer, uint64_t completionGpuAddress, uint32_t counterValue) override;
|
||||
@@ -224,7 +224,7 @@ class IoctlHelperPrelim20 : public IoctlHelper {
|
||||
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;
|
||||
uint32_t queryDistances(Drm *drm, std::vector<QueryItem> &queryItems, std::vector<DistanceInfo> &distanceInfos) override;
|
||||
int32_t getComputeEngineClass() override;
|
||||
uint16_t getWaitUserFenceSoftFlag() override;
|
||||
int execBuffer(Drm *drm, ExecBuffer *execBuffer, uint64_t completionGpuAddress, uint32_t counterValue) override;
|
||||
|
||||
@@ -311,15 +311,15 @@ prelim_drm_i915_query_distance_info translateToi915(const DistanceInfo &distance
|
||||
return dist;
|
||||
}
|
||||
|
||||
uint32_t IoctlHelperPrelim20::queryDistances(Drm *drm, std::vector<drm_i915_query_item> &queryItems, std::vector<DistanceInfo> &distanceInfos) {
|
||||
uint32_t IoctlHelperPrelim20::queryDistances(Drm *drm, std::vector<QueryItem> &queryItems, std::vector<DistanceInfo> &distanceInfos) {
|
||||
std::vector<prelim_drm_i915_query_distance_info> i915Distances(distanceInfos.size());
|
||||
std::transform(distanceInfos.begin(), distanceInfos.end(), i915Distances.begin(), translateToi915);
|
||||
|
||||
for (auto i = 0u; i < i915Distances.size(); i++) {
|
||||
queryItems[i].query_id = PRELIM_DRM_I915_QUERY_DISTANCE_INFO;
|
||||
queryItems[i].queryId = PRELIM_DRM_I915_QUERY_DISTANCE_INFO;
|
||||
queryItems[i].length = sizeof(prelim_drm_i915_query_distance_info);
|
||||
queryItems[i].flags = 0u;
|
||||
queryItems[i].data_ptr = reinterpret_cast<__u64>(&i915Distances[i]);
|
||||
queryItems[i].dataPtr = reinterpret_cast<uint64_t>(&i915Distances[i]);
|
||||
}
|
||||
|
||||
drm_i915_query query{};
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include "shared/source/debug_settings/debug_settings_manager.h"
|
||||
#include "shared/source/helpers/common_types.h"
|
||||
#include "shared/source/os_interface/linux/cache_info.h"
|
||||
#include "shared/source/os_interface/linux/drm_wrappers.h"
|
||||
#include "shared/source/os_interface/linux/ioctl_helper.h"
|
||||
|
||||
#include "third_party/uapi/drm/i915_drm.h"
|
||||
@@ -144,7 +145,7 @@ std::vector<EngineCapabilities> IoctlHelperUpstream::translateToEngineCaps(const
|
||||
return engines;
|
||||
}
|
||||
|
||||
uint32_t IoctlHelperUpstream::queryDistances(Drm *drm, std::vector<drm_i915_query_item> &queryItems, std::vector<DistanceInfo> &distanceInfos) {
|
||||
uint32_t IoctlHelperUpstream::queryDistances(Drm *drm, std::vector<QueryItem> &queryItems, std::vector<DistanceInfo> &distanceInfos) {
|
||||
for (auto &query : queryItems) {
|
||||
query.length = -EINVAL;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user