mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-04 15:53:45 +08:00
Add logic to change queue slice count
Change-Id: I4f5ccb4ecb290e1a05e3a312b9fa2a5d9c5c17f7 Signed-off-by: Katarzyna Cencelewska <katarzyna.cencelewska@intel.com>
This commit is contained in:
committed by
sys_ocldev
parent
7fa3865f0b
commit
260759268a
@@ -11,8 +11,6 @@
|
||||
#include "core/utilities/directory.h"
|
||||
#include "runtime/os_interface/os_inc_base.h"
|
||||
|
||||
#include "drm/i915_drm.h"
|
||||
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
#include <fstream>
|
||||
@@ -131,6 +129,10 @@ void Drm::checkPreemptionSupport() {
|
||||
preemptionSupported = ((0 == ret) && (value & I915_SCHEDULER_CAP_PREEMPTION));
|
||||
}
|
||||
|
||||
void Drm::checkQueueSliceSupport() {
|
||||
sliceCountChangeSupported = getQueueSliceCount(&sseu) == 0 ? true : false;
|
||||
}
|
||||
|
||||
void Drm::setLowPriorityContextParam(uint32_t drmContextId) {
|
||||
drm_i915_gem_context_param gcp = {};
|
||||
gcp.ctx_id = drmContextId;
|
||||
@@ -141,6 +143,37 @@ void Drm::setLowPriorityContextParam(uint32_t drmContextId) {
|
||||
UNRECOVERABLE_IF(retVal != 0);
|
||||
}
|
||||
|
||||
int Drm::getQueueSliceCount(drm_i915_gem_context_param_sseu *sseu) {
|
||||
drm_i915_gem_context_param contextParam = {};
|
||||
contextParam.param = I915_CONTEXT_PARAM_SSEU;
|
||||
sseu->engine.engine_class = I915_ENGINE_CLASS_RENDER;
|
||||
sseu->engine.engine_instance = I915_EXEC_DEFAULT;
|
||||
contextParam.value = reinterpret_cast<uint64_t>(sseu);
|
||||
contextParam.size = sizeof(struct drm_i915_gem_context_param_sseu);
|
||||
|
||||
return ioctl(DRM_IOCTL_I915_GEM_CONTEXT_GETPARAM, &contextParam);
|
||||
}
|
||||
|
||||
uint64_t Drm::getSliceMask(uint64_t sliceCount) {
|
||||
return static_cast<uint64_t>((1 << sliceCount) - 1);
|
||||
}
|
||||
bool Drm::setQueueSliceCount(uint64_t sliceCount) {
|
||||
if (sliceCountChangeSupported) {
|
||||
drm_i915_gem_context_param contextParam = {};
|
||||
sseu.slice_mask = getSliceMask(sliceCount);
|
||||
|
||||
contextParam.param = I915_CONTEXT_PARAM_SSEU;
|
||||
contextParam.ctx_id = 0;
|
||||
contextParam.value = reinterpret_cast<uint64_t>(&sseu);
|
||||
contextParam.size = sizeof(struct drm_i915_gem_context_param_sseu);
|
||||
int retVal = ioctl(DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM, &contextParam);
|
||||
if (retVal == 0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
uint32_t Drm::createDrmContext() {
|
||||
drm_i915_gem_context_create gcc = {};
|
||||
auto retVal = ioctl(DRM_IOCTL_I915_GEM_CONTEXT_CREATE, &gcc);
|
||||
|
||||
Reference in New Issue
Block a user