feature: use iotclhelper to get num media engines

Related-To: NEO-9777

Signed-off-by: Bartosz Dunajski <bartosz.dunajski@intel.com>
This commit is contained in:
Bartosz Dunajski 2024-08-07 18:41:38 +00:00 committed by Compute-Runtime-Automation
parent 8210997f17
commit bca8478bd4
7 changed files with 39 additions and 0 deletions

View File

@ -306,6 +306,9 @@ class MemoryManager {
virtual bool createMediaContext(uint32_t rootDeviceIndex, void *controlSharedMemoryBuffer, uint32_t controlSharedMemoryBufferSize, void *controlBatchBuffer, uint32_t controlBatchBufferSize, uint64_t &outDoorbell) { return false; }
virtual bool releaseMediaContext(uint32_t rootDeviceIndex, uint64_t doorbellHandle) { return false; }
virtual uint32_t getNumMediaDecoders(uint32_t rootDeviceIndex) const { return 0; }
virtual uint32_t getNumMediaEncoders(uint32_t rootDeviceIndex) const { return 0; }
virtual bool isCompressionSupportedForShareable(bool isShareable) { return true; }
virtual bool usmCompressionSupported(Device *device);

View File

@ -2749,6 +2749,14 @@ bool DrmMemoryManager::releaseMediaContext(uint32_t rootDeviceIndex, uint64_t do
return getDrm(rootDeviceIndex).getIoctlHelper()->releaseMediaContext(doorbellHandle);
}
uint32_t DrmMemoryManager::getNumMediaDecoders(uint32_t rootDeviceIndex) const {
return getDrm(rootDeviceIndex).getIoctlHelper()->getNumMediaDecoders();
}
uint32_t DrmMemoryManager::getNumMediaEncoders(uint32_t rootDeviceIndex) const {
return getDrm(rootDeviceIndex).getIoctlHelper()->getNumMediaEncoders();
}
bool DrmMemoryManager::isCompressionSupportedForShareable(bool isShareable) {
// Currently KMD does not support compression with allocation sharing
return !isShareable;

View File

@ -104,6 +104,9 @@ class DrmMemoryManager : public MemoryManager {
bool createMediaContext(uint32_t rootDeviceIndex, void *controlSharedMemoryBuffer, uint32_t controlSharedMemoryBufferSize, void *controlBatchBuffer, uint32_t controlBatchBufferSize, uint64_t &outDoorbell) override;
bool releaseMediaContext(uint32_t rootDeviceIndex, uint64_t doorbellHandle) override;
uint32_t getNumMediaDecoders(uint32_t rootDeviceIndex) const override;
uint32_t getNumMediaEncoders(uint32_t rootDeviceIndex) const override;
bool isCompressionSupportedForShareable(bool isShareable) override;
bool usmCompressionSupported(Device *device) override;

View File

@ -161,6 +161,9 @@ class IoctlHelper {
virtual bool createMediaContext(void *controlSharedMemoryBuffer, uint32_t controlSharedMemoryBufferSize, void *controlBatchBuffer, uint32_t controlBatchBufferSize, uint64_t &outDoorbell) { return false; }
virtual bool releaseMediaContext(uint64_t doorbellHandle) { return false; }
virtual uint32_t getNumMediaDecoders() const { return 0; }
virtual uint32_t getNumMediaEncoders() const { return 0; }
virtual void fillExecObject(ExecObject &execObject, uint32_t handle, uint64_t gpuAddress, uint32_t drmContextId, bool bindInfo, bool isMarkedForCapture) = 0;
virtual void logExecObject(const ExecObject &execObject, std::stringstream &logger, size_t size) = 0;
virtual void fillExecBuffer(ExecBuffer &execBuffer, uintptr_t buffersPtr, uint32_t bufferCount, uint32_t startOffset, uint32_t size, uint64_t flags, uint32_t drmContextId) = 0;

View File

@ -37,6 +37,8 @@ class MockIoctlHelper : public IoctlHelperPrelim20 {
ADDMETHOD_NOBASE(allocateInterrupt, bool, true, (uint32_t &));
ADDMETHOD_NOBASE(createMediaContext, bool, true, (void *, uint32_t, void *, uint32_t, uint64_t &));
ADDMETHOD_NOBASE(releaseMediaContext, bool, true, (uint64_t));
ADDMETHOD_CONST_NOBASE(getNumMediaDecoders, uint32_t, 0, ());
ADDMETHOD_CONST_NOBASE(getNumMediaEncoders, uint32_t, 0, ());
int getDrmParamValue(DrmParam drmParam) const override {
if (drmParam == DrmParam::memoryClassSystem) {

View File

@ -20,7 +20,9 @@
#define ADDMETHOD_CONST_NOBASE(funcName, retType, defaultReturn, funcParams) \
retType funcName##Result = defaultReturn; \
mutable uint32_t funcName##Called = 0u; \
retType funcName funcParams const override { \
funcName##Called++; \
return funcName##Result; \
}

View File

@ -1776,6 +1776,24 @@ TEST_F(DrmMemoryManagerTest, whenCallingCreateAndReleaseMediaContextThenCallIoct
EXPECT_EQ(1u, mockIoctlHelper->releaseMediaContextCalled);
}
TEST_F(DrmMemoryManagerTest, whenCallingGetNumMediaThenCallIoctlHelper) {
auto mockIoctlHelper = new MockIoctlHelper(*mock);
auto &drm = static_cast<DrmMockCustom &>(memoryManager->getDrm(rootDeviceIndex));
drm.ioctlHelper.reset(mockIoctlHelper);
EXPECT_EQ(0u, mockIoctlHelper->getNumMediaDecodersCalled);
EXPECT_EQ(0u, mockIoctlHelper->getNumMediaEncodersCalled);
memoryManager->getNumMediaDecoders(rootDeviceIndex);
EXPECT_EQ(1u, mockIoctlHelper->getNumMediaDecodersCalled);
EXPECT_EQ(0u, mockIoctlHelper->getNumMediaEncodersCalled);
memoryManager->getNumMediaEncoders(rootDeviceIndex);
EXPECT_EQ(1u, mockIoctlHelper->getNumMediaDecodersCalled);
EXPECT_EQ(1u, mockIoctlHelper->getNumMediaEncodersCalled);
}
TEST_F(DrmMemoryManagerTest, GivenShareableEnabledWhenAskedToCreateGraphicsAllocationThenValidAllocationIsReturnedAndStandard64KBHeapIsUsed) {
mock->ioctlHelper.reset(new MockIoctlHelper(*mock));
mock->queryMemoryInfo();