mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-15 13:01:45 +08:00
Create a wrapper for drm_i915_gem_context_param_sseu
Related-To: NEO-6852 Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:

committed by
Compute-Runtime-Automation

parent
cbd73d2d9c
commit
e7e1e64cca
@ -186,7 +186,7 @@ int drmSetContextParam(drm_i915_gem_context_param *param) {
|
||||
break;
|
||||
#endif
|
||||
case I915_CONTEXT_PARAM_SSEU:
|
||||
if (param->size == sizeof(struct drm_i915_gem_context_param_sseu) && param->value != 0 && param->ctx_id == 0) {
|
||||
if (param->size == sizeof(NEO::GemContextParamSseu) && param->value != 0 && param->ctx_id == 0) {
|
||||
ret = failOnSetParamSseu;
|
||||
} else {
|
||||
ret = -1;
|
||||
@ -203,7 +203,7 @@ int drmGetContextParam(drm_i915_gem_context_param *param) {
|
||||
|
||||
switch (param->param) {
|
||||
case I915_CONTEXT_PARAM_SSEU:
|
||||
if (param->size == sizeof(struct drm_i915_gem_context_param_sseu) && param->value != 0 && param->ctx_id == 0) {
|
||||
if (param->size == sizeof(NEO::GemContextParamSseu) && param->value != 0 && param->ctx_id == 0) {
|
||||
ret = failOnGetParamSseu;
|
||||
} else {
|
||||
ret = -1;
|
||||
|
@ -456,9 +456,9 @@ TEST(DrmTest, givenPlatformWithSupportToChangeSliceCountWhenCallSetQueueSliceCou
|
||||
|
||||
EXPECT_TRUE(drm->sliceCountChangeSupported);
|
||||
EXPECT_TRUE(drm->setQueueSliceCount(newSliceCount));
|
||||
drm_i915_gem_context_param_sseu sseu = {};
|
||||
GemContextParamSseu sseu = {};
|
||||
EXPECT_EQ(0, drm->getQueueSliceCount(&sseu));
|
||||
EXPECT_EQ(drm->getSliceMask(newSliceCount), sseu.slice_mask);
|
||||
EXPECT_EQ(drm->getSliceMask(newSliceCount), sseu.sliceMask);
|
||||
}
|
||||
|
||||
namespace NEO {
|
||||
|
@ -141,9 +141,9 @@ HWTEST_F(clCreateCommandQueueWithPropertiesLinux, givenPropertiesWithClQueueSlic
|
||||
mdevice->getDevice());
|
||||
auto expectedSliceMask = drm->getSliceMask(newSliceCount);
|
||||
EXPECT_EQ(expectedSliceMask, drm->storedParamSseu);
|
||||
drm_i915_gem_context_param_sseu sseu = {};
|
||||
GemContextParamSseu sseu = {};
|
||||
EXPECT_EQ(0, drm->getQueueSliceCount(&sseu));
|
||||
EXPECT_EQ(expectedSliceMask, sseu.slice_mask);
|
||||
EXPECT_EQ(expectedSliceMask, sseu.sliceMask);
|
||||
EXPECT_EQ(newSliceCount, mockCsr->lastSentSliceCount);
|
||||
|
||||
retVal = clReleaseCommandQueue(cmdQ);
|
||||
@ -188,9 +188,9 @@ HWTEST_F(clCreateCommandQueueWithPropertiesLinux, givenSameSliceCountAsRecentlyS
|
||||
mdevice->getDevice());
|
||||
auto expectedSliceMask = drm->getSliceMask(newSliceCount);
|
||||
EXPECT_NE(expectedSliceMask, drm->storedParamSseu);
|
||||
drm_i915_gem_context_param_sseu sseu = {};
|
||||
GemContextParamSseu sseu = {};
|
||||
EXPECT_EQ(0, drm->getQueueSliceCount(&sseu));
|
||||
EXPECT_NE(expectedSliceMask, sseu.slice_mask);
|
||||
EXPECT_NE(expectedSliceMask, sseu.sliceMask);
|
||||
|
||||
retVal = clReleaseCommandQueue(cmdQ);
|
||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||
|
@ -370,13 +370,13 @@ void Drm::setLowPriorityContextParam(uint32_t drmContextId) {
|
||||
UNRECOVERABLE_IF(retVal != 0);
|
||||
}
|
||||
|
||||
int Drm::getQueueSliceCount(drm_i915_gem_context_param_sseu *sseu) {
|
||||
int Drm::getQueueSliceCount(GemContextParamSseu *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;
|
||||
sseu->engine.engineClass = I915_ENGINE_CLASS_RENDER;
|
||||
sseu->engine.engineInstance = I915_EXEC_DEFAULT;
|
||||
contextParam.value = reinterpret_cast<uint64_t>(sseu);
|
||||
contextParam.size = sizeof(struct drm_i915_gem_context_param_sseu);
|
||||
contextParam.size = sizeof(struct GemContextParamSseu);
|
||||
|
||||
return ioctl(DRM_IOCTL_I915_GEM_CONTEXT_GETPARAM, &contextParam);
|
||||
}
|
||||
@ -387,12 +387,12 @@ uint64_t Drm::getSliceMask(uint64_t sliceCount) {
|
||||
bool Drm::setQueueSliceCount(uint64_t sliceCount) {
|
||||
if (sliceCountChangeSupported) {
|
||||
drm_i915_gem_context_param contextParam = {};
|
||||
sseu.slice_mask = getSliceMask(sliceCount);
|
||||
sseu.sliceMask = 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);
|
||||
contextParam.size = sizeof(struct GemContextParamSseu);
|
||||
int retVal = ioctl(DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM, &contextParam);
|
||||
if (retVal == 0) {
|
||||
return true;
|
||||
|
@ -256,7 +256,7 @@ class Drm : public DriverModel {
|
||||
protected:
|
||||
Drm(std::unique_ptr<HwDeviceIdDrm> &&hwDeviceIdIn, RootDeviceEnvironment &rootDeviceEnvironment);
|
||||
|
||||
int getQueueSliceCount(drm_i915_gem_context_param_sseu *sseu);
|
||||
int getQueueSliceCount(GemContextParamSseu *sseu);
|
||||
bool translateTopologyInfo(const drm_i915_query_topology_info *queryTopologyInfo, QueryTopologyData &data, TopologyMapping &mapping);
|
||||
std::string generateUUID();
|
||||
std::string generateElfUUID(const void *data);
|
||||
@ -294,7 +294,7 @@ class Drm : public DriverModel {
|
||||
};
|
||||
#pragma pack()
|
||||
|
||||
drm_i915_gem_context_param_sseu sseu{};
|
||||
GemContextParamSseu sseu{};
|
||||
ADAPTER_BDF adapterBDF{};
|
||||
uint32_t pciDomain = 0;
|
||||
|
||||
|
@ -51,4 +51,16 @@ static_assert(offsetof(QueryItem, length) == offsetof(drm_i915_query_item, lengt
|
||||
static_assert(offsetof(QueryItem, flags) == offsetof(drm_i915_query_item, flags));
|
||||
static_assert(offsetof(QueryItem, dataPtr) == offsetof(drm_i915_query_item, data_ptr));
|
||||
|
||||
static_assert(sizeof(EngineClassInstance) == sizeof(i915_engine_class_instance));
|
||||
static_assert(offsetof(EngineClassInstance, engineClass) == offsetof(i915_engine_class_instance, engine_class));
|
||||
static_assert(offsetof(EngineClassInstance, engineInstance) == offsetof(i915_engine_class_instance, engine_instance));
|
||||
|
||||
static_assert(sizeof(GemContextParamSseu) == sizeof(drm_i915_gem_context_param_sseu));
|
||||
static_assert(offsetof(GemContextParamSseu, engine) == offsetof(drm_i915_gem_context_param_sseu, engine));
|
||||
static_assert(offsetof(GemContextParamSseu, flags) == offsetof(drm_i915_gem_context_param_sseu, flags));
|
||||
static_assert(offsetof(GemContextParamSseu, sliceMask) == offsetof(drm_i915_gem_context_param_sseu, slice_mask));
|
||||
static_assert(offsetof(GemContextParamSseu, subsliceMask) == offsetof(drm_i915_gem_context_param_sseu, subslice_mask));
|
||||
static_assert(offsetof(GemContextParamSseu, minEusPerSubslice) == offsetof(drm_i915_gem_context_param_sseu, min_eus_per_subslice));
|
||||
static_assert(offsetof(GemContextParamSseu, maxEusPerSubslice) == offsetof(drm_i915_gem_context_param_sseu, max_eus_per_subslice));
|
||||
|
||||
} // namespace NEO
|
||||
|
@ -57,4 +57,18 @@ struct QueryItem {
|
||||
uint64_t dataPtr;
|
||||
};
|
||||
|
||||
struct EngineClassInstance {
|
||||
uint16_t engineClass;
|
||||
uint16_t engineInstance;
|
||||
};
|
||||
|
||||
struct GemContextParamSseu {
|
||||
EngineClassInstance engine;
|
||||
uint32_t flags;
|
||||
uint64_t sliceMask;
|
||||
uint64_t subsliceMask;
|
||||
uint16_t minEusPerSubslice;
|
||||
uint16_t maxEusPerSubslice;
|
||||
};
|
||||
|
||||
} // namespace NEO
|
||||
|
@ -6,6 +6,7 @@
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include "shared/source/os_interface/linux/drm_wrappers.h"
|
||||
#include "shared/source/utilities/stackvec.h"
|
||||
|
||||
#include "igfxfmid.h"
|
||||
@ -24,9 +25,6 @@ class Drm;
|
||||
class IoctlHelper;
|
||||
enum class CacheRegion : uint16_t;
|
||||
struct HardwareInfo;
|
||||
struct ExecBuffer;
|
||||
struct ExecObject;
|
||||
struct QueryItem;
|
||||
|
||||
extern IoctlHelper *ioctlHelperFactory[IGFX_MAX_PRODUCT];
|
||||
|
||||
@ -35,11 +33,6 @@ struct MemoryClassInstance {
|
||||
uint16_t memoryInstance;
|
||||
};
|
||||
|
||||
struct EngineClassInstance {
|
||||
uint16_t engineClass;
|
||||
uint16_t engineInstance;
|
||||
};
|
||||
|
||||
struct MemoryRegion {
|
||||
MemoryClassInstance region;
|
||||
uint64_t probedSize;
|
||||
|
@ -112,7 +112,7 @@ int DrmMock::ioctl(unsigned long request, void *arg) {
|
||||
}
|
||||
if (receivedContextParamRequest.param == I915_CONTEXT_PARAM_SSEU) {
|
||||
if (storedRetValForSetSSEU == 0) {
|
||||
storedParamSseu = (*static_cast<drm_i915_gem_context_param_sseu *>(reinterpret_cast<void *>(receivedContextParamRequest.value))).slice_mask;
|
||||
storedParamSseu = (*static_cast<GemContextParamSseu *>(reinterpret_cast<void *>(receivedContextParamRequest.value))).sliceMask;
|
||||
}
|
||||
return this->storedRetValForSetSSEU;
|
||||
}
|
||||
@ -138,7 +138,7 @@ int DrmMock::ioctl(unsigned long request, void *arg) {
|
||||
}
|
||||
if (receivedContextParamRequest.param == I915_CONTEXT_PARAM_SSEU) {
|
||||
if (storedRetValForGetSSEU == 0) {
|
||||
(*static_cast<drm_i915_gem_context_param_sseu *>(reinterpret_cast<void *>(receivedContextParamRequest.value))).slice_mask = storedParamSseu;
|
||||
(*static_cast<GemContextParamSseu *>(reinterpret_cast<void *>(receivedContextParamRequest.value))).sliceMask = storedParamSseu;
|
||||
}
|
||||
return this->storedRetValForGetSSEU;
|
||||
}
|
||||
|
Reference in New Issue
Block a user