mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-22 10:17:01 +08:00
Refactor direct submission: remove csr from members
create translation layer to obtain needed params Related-To: NEO-6643 Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
10be59cb15
commit
4cb46ee15c
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (C) 2020-2021 Intel Corporation
|
||||
# Copyright (C) 2020-2022 Intel Corporation
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
#
|
||||
@@ -10,6 +10,7 @@ set(NEO_CORE_DIRECT_SUBMISSION
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/direct_submission_prefetch_mitigation_base.inl
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/direct_submission_controller.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/direct_submission_controller.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/direct_submission_hw.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/direct_submission_hw.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/direct_submission_hw.inl
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/direct_submission_bdw_and_later.inl
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
namespace NEO {
|
||||
template <typename GfxFamily, typename Dispatcher>
|
||||
inline std::unique_ptr<DirectSubmissionHw<GfxFamily, Dispatcher>> DirectSubmissionHw<GfxFamily, Dispatcher>::create(const CommandStreamReceiver &commandStreamReceiver) {
|
||||
return std::make_unique<DrmDirectSubmission<GfxFamily, Dispatcher>>(commandStreamReceiver);
|
||||
inline std::unique_ptr<DirectSubmissionHw<GfxFamily, Dispatcher>> DirectSubmissionHw<GfxFamily, Dispatcher>::create(const DirectSubmissionInputParams &inputParams) {
|
||||
return std::make_unique<DrmDirectSubmission<GfxFamily, Dispatcher>>(inputParams);
|
||||
}
|
||||
} // namespace NEO
|
||||
|
||||
@@ -10,11 +10,11 @@
|
||||
|
||||
namespace NEO {
|
||||
template <typename GfxFamily, typename Dispatcher>
|
||||
inline std::unique_ptr<DirectSubmissionHw<GfxFamily, Dispatcher>> DirectSubmissionHw<GfxFamily, Dispatcher>::create(const CommandStreamReceiver &commandStreamReceiver) {
|
||||
if (commandStreamReceiver.peekRootDeviceEnvironment().osInterface->getDriverModel()->getDriverModelType() == DriverModelType::DRM) {
|
||||
return std::make_unique<DrmDirectSubmission<GfxFamily, Dispatcher>>(commandStreamReceiver);
|
||||
inline std::unique_ptr<DirectSubmissionHw<GfxFamily, Dispatcher>> DirectSubmissionHw<GfxFamily, Dispatcher>::create(const DirectSubmissionInputParams &inputParams) {
|
||||
if (inputParams.rootDeviceEnvironment.osInterface->getDriverModel()->getDriverModelType() == DriverModelType::DRM) {
|
||||
return std::make_unique<DrmDirectSubmission<GfxFamily, Dispatcher>>(inputParams);
|
||||
} else {
|
||||
return std::make_unique<WddmDirectSubmission<GfxFamily, Dispatcher>>(commandStreamReceiver);
|
||||
return std::make_unique<WddmDirectSubmission<GfxFamily, Dispatcher>>(inputParams);
|
||||
}
|
||||
}
|
||||
} // namespace NEO
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
namespace NEO {
|
||||
template <typename GfxFamily, typename Dispatcher>
|
||||
inline std::unique_ptr<DirectSubmissionHw<GfxFamily, Dispatcher>> DirectSubmissionHw<GfxFamily, Dispatcher>::create(const CommandStreamReceiver &commandStreamReceiver) {
|
||||
return std::make_unique<WddmDirectSubmission<GfxFamily, Dispatcher>>(commandStreamReceiver);
|
||||
inline std::unique_ptr<DirectSubmissionHw<GfxFamily, Dispatcher>> DirectSubmissionHw<GfxFamily, Dispatcher>::create(const DirectSubmissionInputParams &inputParams) {
|
||||
return std::make_unique<WddmDirectSubmission<GfxFamily, Dispatcher>>(inputParams);
|
||||
}
|
||||
} // namespace NEO
|
||||
|
||||
19
shared/source/direct_submission/direct_submission_hw.cpp
Normal file
19
shared/source/direct_submission/direct_submission_hw.cpp
Normal file
@@ -0,0 +1,19 @@
|
||||
/*
|
||||
* Copyright (C) 2022 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#include "shared/source/direct_submission/direct_submission_hw.h"
|
||||
|
||||
#include "shared/source/command_stream/command_stream_receiver.h"
|
||||
|
||||
namespace NEO {
|
||||
DirectSubmissionInputParams::DirectSubmissionInputParams(const CommandStreamReceiver &commandStreamReceiver) : osContext(commandStreamReceiver.getOsContext()), rootDeviceEnvironment(commandStreamReceiver.peekRootDeviceEnvironment()), rootDeviceIndex(commandStreamReceiver.getRootDeviceIndex()) {
|
||||
memoryManager = commandStreamReceiver.getMemoryManager();
|
||||
globalFenceAllocation = commandStreamReceiver.getGlobalFenceAllocation();
|
||||
workPartitionAllocation = commandStreamReceiver.getWorkPartitionAllocation();
|
||||
}
|
||||
|
||||
} // namespace NEO
|
||||
@@ -55,11 +55,22 @@ class FlushStampTracker;
|
||||
class GraphicsAllocation;
|
||||
struct HardwareInfo;
|
||||
class OsContext;
|
||||
class MemoryOperationsHandler;
|
||||
|
||||
struct DirectSubmissionInputParams : NonCopyableClass {
|
||||
DirectSubmissionInputParams(const CommandStreamReceiver &commandStreamReceiver);
|
||||
OsContext &osContext;
|
||||
const RootDeviceEnvironment &rootDeviceEnvironment;
|
||||
MemoryManager *memoryManager = nullptr;
|
||||
const GraphicsAllocation *globalFenceAllocation = nullptr;
|
||||
GraphicsAllocation *workPartitionAllocation = nullptr;
|
||||
const uint32_t rootDeviceIndex;
|
||||
};
|
||||
|
||||
template <typename GfxFamily, typename Dispatcher>
|
||||
class DirectSubmissionHw {
|
||||
public:
|
||||
DirectSubmissionHw(const CommandStreamReceiver &commandStreamReceiver);
|
||||
DirectSubmissionHw(const DirectSubmissionInputParams &inputParams);
|
||||
|
||||
virtual ~DirectSubmissionHw();
|
||||
|
||||
@@ -71,7 +82,7 @@ class DirectSubmissionHw {
|
||||
|
||||
MOCKABLE_VIRTUAL bool dispatchCommandBuffer(BatchBuffer &batchBuffer, FlushStampTracker &flushStamp);
|
||||
|
||||
static std::unique_ptr<DirectSubmissionHw<GfxFamily, Dispatcher>> create(const CommandStreamReceiver &commandStreamReceiver);
|
||||
static std::unique_ptr<DirectSubmissionHw<GfxFamily, Dispatcher>> create(const DirectSubmissionInputParams &inputParams);
|
||||
|
||||
protected:
|
||||
static constexpr size_t prefetchSize = 8 * MemoryConstants::cacheLineSize;
|
||||
@@ -143,8 +154,10 @@ class DirectSubmissionHw {
|
||||
uint64_t semaphoreGpuVa = 0u;
|
||||
uint64_t gpuVaForMiFlush = 0u;
|
||||
|
||||
const CommandStreamReceiver &commandStreamReceiver;
|
||||
OsContext &osContext;
|
||||
const uint32_t rootDeviceIndex;
|
||||
MemoryManager *memoryManager = nullptr;
|
||||
MemoryOperationsHandler *memoryOperationHandler = nullptr;
|
||||
const HardwareInfo *hwInfo = nullptr;
|
||||
const GraphicsAllocation *globalFenceAllocation = nullptr;
|
||||
GraphicsAllocation *ringBuffer = nullptr;
|
||||
|
||||
@@ -30,9 +30,12 @@
|
||||
namespace NEO {
|
||||
|
||||
template <typename GfxFamily, typename Dispatcher>
|
||||
DirectSubmissionHw<GfxFamily, Dispatcher>::DirectSubmissionHw(const CommandStreamReceiver &commandStreamReceiver)
|
||||
: commandStreamReceiver(commandStreamReceiver), osContext(commandStreamReceiver.getOsContext()), globalFenceAllocation(commandStreamReceiver.getGlobalFenceAllocation()) {
|
||||
hwInfo = &commandStreamReceiver.peekHwInfo();
|
||||
DirectSubmissionHw<GfxFamily, Dispatcher>::DirectSubmissionHw(const DirectSubmissionInputParams &inputParams)
|
||||
: osContext(inputParams.osContext), rootDeviceIndex(inputParams.rootDeviceIndex) {
|
||||
memoryManager = inputParams.memoryManager;
|
||||
globalFenceAllocation = inputParams.globalFenceAllocation;
|
||||
hwInfo = inputParams.rootDeviceEnvironment.getHardwareInfo();
|
||||
memoryOperationHandler = inputParams.rootDeviceEnvironment.memoryOperationsInterface.get();
|
||||
|
||||
auto hwInfoConfig = HwInfoConfig::get(hwInfo->platform.eProductFamily);
|
||||
|
||||
@@ -70,11 +73,10 @@ bool DirectSubmissionHw<GfxFamily, Dispatcher>::allocateResources() {
|
||||
DirectSubmissionAllocations allocations;
|
||||
|
||||
bool isMultiOsContextCapable = osContext.getNumSupportedDevices() > 1u;
|
||||
MemoryManager *memoryManager = commandStreamReceiver.getMemoryManager();
|
||||
constexpr size_t minimumRequiredSize = 256 * MemoryConstants::kiloByte;
|
||||
constexpr size_t additionalAllocationSize = MemoryConstants::pageSize;
|
||||
const auto allocationSize = alignUp(minimumRequiredSize + additionalAllocationSize, MemoryConstants::pageSize64k);
|
||||
const AllocationProperties commandStreamAllocationProperties{commandStreamReceiver.getRootDeviceIndex(),
|
||||
const AllocationProperties commandStreamAllocationProperties{rootDeviceIndex,
|
||||
true, allocationSize,
|
||||
AllocationType::RING_BUFFER,
|
||||
isMultiOsContextCapable, false, osContext.getDeviceBitfield()};
|
||||
@@ -86,7 +88,7 @@ bool DirectSubmissionHw<GfxFamily, Dispatcher>::allocateResources() {
|
||||
UNRECOVERABLE_IF(ringBuffer2 == nullptr);
|
||||
allocations.push_back(ringBuffer2);
|
||||
|
||||
const AllocationProperties semaphoreAllocationProperties{commandStreamReceiver.getRootDeviceIndex(),
|
||||
const AllocationProperties semaphoreAllocationProperties{rootDeviceIndex,
|
||||
true, MemoryConstants::pageSize,
|
||||
AllocationType::SEMAPHORE_BUFFER,
|
||||
isMultiOsContextCapable, false, osContext.getDeviceBitfield()};
|
||||
@@ -138,9 +140,7 @@ bool DirectSubmissionHw<GfxFamily, Dispatcher>::allocateResources() {
|
||||
|
||||
template <typename GfxFamily, typename Dispatcher>
|
||||
bool DirectSubmissionHw<GfxFamily, Dispatcher>::makeResourcesResident(DirectSubmissionAllocations &allocations) {
|
||||
auto memoryInterface = commandStreamReceiver.peekRootDeviceEnvironment().memoryOperationsInterface.get();
|
||||
|
||||
auto ret = memoryInterface->makeResidentWithinOsContext(&this->osContext, ArrayRef<GraphicsAllocation *>(allocations), false) == MemoryOperationsStatus::SUCCESS;
|
||||
auto ret = memoryOperationHandler->makeResidentWithinOsContext(&this->osContext, ArrayRef<GraphicsAllocation *>(allocations), false) == MemoryOperationsStatus::SUCCESS;
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -532,8 +532,6 @@ inline GraphicsAllocation *DirectSubmissionHw<GfxFamily, Dispatcher>::switchRing
|
||||
|
||||
template <typename GfxFamily, typename Dispatcher>
|
||||
void DirectSubmissionHw<GfxFamily, Dispatcher>::deallocateResources() {
|
||||
MemoryManager *memoryManager = commandStreamReceiver.getMemoryManager();
|
||||
|
||||
if (ringBuffer) {
|
||||
memoryManager->freeGraphicsMemory(ringBuffer);
|
||||
ringBuffer = nullptr;
|
||||
|
||||
@@ -16,7 +16,7 @@ class DrmDirectSubmission : public DirectSubmissionHw<GfxFamily, Dispatcher> {
|
||||
using DirectSubmissionHw<GfxFamily, Dispatcher>::ringCommandStream;
|
||||
using DirectSubmissionHw<GfxFamily, Dispatcher>::switchRingBuffersAllocations;
|
||||
|
||||
DrmDirectSubmission(const CommandStreamReceiver &commandStreamReceiver);
|
||||
DrmDirectSubmission(const DirectSubmissionInputParams &inputParams);
|
||||
|
||||
~DrmDirectSubmission();
|
||||
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
namespace NEO {
|
||||
|
||||
template <typename GfxFamily, typename Dispatcher>
|
||||
DrmDirectSubmission<GfxFamily, Dispatcher>::DrmDirectSubmission(const CommandStreamReceiver &commandStreamReceiver)
|
||||
: DirectSubmissionHw<GfxFamily, Dispatcher>(commandStreamReceiver) {
|
||||
DrmDirectSubmission<GfxFamily, Dispatcher>::DrmDirectSubmission(const DirectSubmissionInputParams &inputParams)
|
||||
: DirectSubmissionHw<GfxFamily, Dispatcher>(inputParams) {
|
||||
|
||||
this->disableMonitorFence = true;
|
||||
|
||||
@@ -42,7 +42,7 @@ DrmDirectSubmission<GfxFamily, Dispatcher>::DrmDirectSubmission(const CommandStr
|
||||
osContextLinux->getDrm().setDirectSubmissionActive(true);
|
||||
|
||||
if (this->partitionedMode) {
|
||||
this->workPartitionAllocation = commandStreamReceiver.getWorkPartitionAllocation();
|
||||
this->workPartitionAllocation = inputParams.workPartitionAllocation;
|
||||
UNRECOVERABLE_IF(this->workPartitionAllocation == nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ class Wddm;
|
||||
template <typename GfxFamily, typename Dispatcher>
|
||||
class WddmDirectSubmission : public DirectSubmissionHw<GfxFamily, Dispatcher> {
|
||||
public:
|
||||
WddmDirectSubmission(const CommandStreamReceiver &commandStreamReceiver);
|
||||
WddmDirectSubmission(const DirectSubmissionInputParams &inputParams);
|
||||
|
||||
~WddmDirectSubmission();
|
||||
|
||||
|
||||
@@ -23,8 +23,8 @@ namespace NEO {
|
||||
DECLARE_COMMAND_BUFFER(CommandBufferHeader, UMD_OCL, FALSE, FALSE, PERFTAG_OCL);
|
||||
|
||||
template <typename GfxFamily, typename Dispatcher>
|
||||
WddmDirectSubmission<GfxFamily, Dispatcher>::WddmDirectSubmission(const CommandStreamReceiver &commandStreamReceiver)
|
||||
: DirectSubmissionHw<GfxFamily, Dispatcher>(commandStreamReceiver) {
|
||||
WddmDirectSubmission<GfxFamily, Dispatcher>::WddmDirectSubmission(const DirectSubmissionInputParams &inputParams)
|
||||
: DirectSubmissionHw<GfxFamily, Dispatcher>(inputParams) {
|
||||
osContextWin = reinterpret_cast<OsContextWin *>(&this->osContext);
|
||||
wddm = osContextWin->getWddm();
|
||||
commandBufferHeader = std::make_unique<COMMAND_BUFFER_HEADER_REC>();
|
||||
|
||||
@@ -17,7 +17,6 @@ struct MockDirectSubmissionHw : public DirectSubmissionHw<GfxFamily, Dispatcher>
|
||||
using BaseClass = DirectSubmissionHw<GfxFamily, Dispatcher>;
|
||||
using BaseClass::activeTiles;
|
||||
using BaseClass::allocateResources;
|
||||
using BaseClass::commandStreamReceiver;
|
||||
using BaseClass::completionRingBuffers;
|
||||
using BaseClass::cpuCachelineFlush;
|
||||
using BaseClass::currentQueueWorkCount;
|
||||
|
||||
Reference in New Issue
Block a user