Skip to content

Commit 4cb46ee

Browse files
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>
1 parent 10be59c commit 4cb46ee

File tree

12 files changed

+61
-31
lines changed

12 files changed

+61
-31
lines changed

shared/source/direct_submission/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#
2-
# Copyright (C) 2020-2021 Intel Corporation
2+
# Copyright (C) 2020-2022 Intel Corporation
33
#
44
# SPDX-License-Identifier: MIT
55
#
@@ -10,6 +10,7 @@ set(NEO_CORE_DIRECT_SUBMISSION
1010
${CMAKE_CURRENT_SOURCE_DIR}/direct_submission_prefetch_mitigation_base.inl
1111
${CMAKE_CURRENT_SOURCE_DIR}/direct_submission_controller.cpp
1212
${CMAKE_CURRENT_SOURCE_DIR}/direct_submission_controller.h
13+
${CMAKE_CURRENT_SOURCE_DIR}/direct_submission_hw.cpp
1314
${CMAKE_CURRENT_SOURCE_DIR}/direct_submission_hw.h
1415
${CMAKE_CURRENT_SOURCE_DIR}/direct_submission_hw.inl
1516
${CMAKE_CURRENT_SOURCE_DIR}/direct_submission_bdw_and_later.inl

shared/source/direct_submission/create_direct_submission_drm/create_direct_submission_hw.inl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
namespace NEO {
1111
template <typename GfxFamily, typename Dispatcher>
12-
inline std::unique_ptr<DirectSubmissionHw<GfxFamily, Dispatcher>> DirectSubmissionHw<GfxFamily, Dispatcher>::create(const CommandStreamReceiver &commandStreamReceiver) {
13-
return std::make_unique<DrmDirectSubmission<GfxFamily, Dispatcher>>(commandStreamReceiver);
12+
inline std::unique_ptr<DirectSubmissionHw<GfxFamily, Dispatcher>> DirectSubmissionHw<GfxFamily, Dispatcher>::create(const DirectSubmissionInputParams &inputParams) {
13+
return std::make_unique<DrmDirectSubmission<GfxFamily, Dispatcher>>(inputParams);
1414
}
1515
} // namespace NEO

shared/source/direct_submission/create_direct_submission_drm_or_wddm/create_direct_submission_hw.inl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010

1111
namespace NEO {
1212
template <typename GfxFamily, typename Dispatcher>
13-
inline std::unique_ptr<DirectSubmissionHw<GfxFamily, Dispatcher>> DirectSubmissionHw<GfxFamily, Dispatcher>::create(const CommandStreamReceiver &commandStreamReceiver) {
14-
if (commandStreamReceiver.peekRootDeviceEnvironment().osInterface->getDriverModel()->getDriverModelType() == DriverModelType::DRM) {
15-
return std::make_unique<DrmDirectSubmission<GfxFamily, Dispatcher>>(commandStreamReceiver);
13+
inline std::unique_ptr<DirectSubmissionHw<GfxFamily, Dispatcher>> DirectSubmissionHw<GfxFamily, Dispatcher>::create(const DirectSubmissionInputParams &inputParams) {
14+
if (inputParams.rootDeviceEnvironment.osInterface->getDriverModel()->getDriverModelType() == DriverModelType::DRM) {
15+
return std::make_unique<DrmDirectSubmission<GfxFamily, Dispatcher>>(inputParams);
1616
} else {
17-
return std::make_unique<WddmDirectSubmission<GfxFamily, Dispatcher>>(commandStreamReceiver);
17+
return std::make_unique<WddmDirectSubmission<GfxFamily, Dispatcher>>(inputParams);
1818
}
1919
}
2020
} // namespace NEO

shared/source/direct_submission/create_direct_submission_wddm/create_direct_submission_hw.inl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
namespace NEO {
1111
template <typename GfxFamily, typename Dispatcher>
12-
inline std::unique_ptr<DirectSubmissionHw<GfxFamily, Dispatcher>> DirectSubmissionHw<GfxFamily, Dispatcher>::create(const CommandStreamReceiver &commandStreamReceiver) {
13-
return std::make_unique<WddmDirectSubmission<GfxFamily, Dispatcher>>(commandStreamReceiver);
12+
inline std::unique_ptr<DirectSubmissionHw<GfxFamily, Dispatcher>> DirectSubmissionHw<GfxFamily, Dispatcher>::create(const DirectSubmissionInputParams &inputParams) {
13+
return std::make_unique<WddmDirectSubmission<GfxFamily, Dispatcher>>(inputParams);
1414
}
1515
} // namespace NEO
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/*
2+
* Copyright (C) 2022 Intel Corporation
3+
*
4+
* SPDX-License-Identifier: MIT
5+
*
6+
*/
7+
8+
#include "shared/source/direct_submission/direct_submission_hw.h"
9+
10+
#include "shared/source/command_stream/command_stream_receiver.h"
11+
12+
namespace NEO {
13+
DirectSubmissionInputParams::DirectSubmissionInputParams(const CommandStreamReceiver &commandStreamReceiver) : osContext(commandStreamReceiver.getOsContext()), rootDeviceEnvironment(commandStreamReceiver.peekRootDeviceEnvironment()), rootDeviceIndex(commandStreamReceiver.getRootDeviceIndex()) {
14+
memoryManager = commandStreamReceiver.getMemoryManager();
15+
globalFenceAllocation = commandStreamReceiver.getGlobalFenceAllocation();
16+
workPartitionAllocation = commandStreamReceiver.getWorkPartitionAllocation();
17+
}
18+
19+
} // namespace NEO

shared/source/direct_submission/direct_submission_hw.h

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,22 @@ class FlushStampTracker;
5555
class GraphicsAllocation;
5656
struct HardwareInfo;
5757
class OsContext;
58+
class MemoryOperationsHandler;
59+
60+
struct DirectSubmissionInputParams : NonCopyableClass {
61+
DirectSubmissionInputParams(const CommandStreamReceiver &commandStreamReceiver);
62+
OsContext &osContext;
63+
const RootDeviceEnvironment &rootDeviceEnvironment;
64+
MemoryManager *memoryManager = nullptr;
65+
const GraphicsAllocation *globalFenceAllocation = nullptr;
66+
GraphicsAllocation *workPartitionAllocation = nullptr;
67+
const uint32_t rootDeviceIndex;
68+
};
5869

5970
template <typename GfxFamily, typename Dispatcher>
6071
class DirectSubmissionHw {
6172
public:
62-
DirectSubmissionHw(const CommandStreamReceiver &commandStreamReceiver);
73+
DirectSubmissionHw(const DirectSubmissionInputParams &inputParams);
6374

6475
virtual ~DirectSubmissionHw();
6576

@@ -71,7 +82,7 @@ class DirectSubmissionHw {
7182

7283
MOCKABLE_VIRTUAL bool dispatchCommandBuffer(BatchBuffer &batchBuffer, FlushStampTracker &flushStamp);
7384

74-
static std::unique_ptr<DirectSubmissionHw<GfxFamily, Dispatcher>> create(const CommandStreamReceiver &commandStreamReceiver);
85+
static std::unique_ptr<DirectSubmissionHw<GfxFamily, Dispatcher>> create(const DirectSubmissionInputParams &inputParams);
7586

7687
protected:
7788
static constexpr size_t prefetchSize = 8 * MemoryConstants::cacheLineSize;
@@ -143,8 +154,10 @@ class DirectSubmissionHw {
143154
uint64_t semaphoreGpuVa = 0u;
144155
uint64_t gpuVaForMiFlush = 0u;
145156

146-
const CommandStreamReceiver &commandStreamReceiver;
147157
OsContext &osContext;
158+
const uint32_t rootDeviceIndex;
159+
MemoryManager *memoryManager = nullptr;
160+
MemoryOperationsHandler *memoryOperationHandler = nullptr;
148161
const HardwareInfo *hwInfo = nullptr;
149162
const GraphicsAllocation *globalFenceAllocation = nullptr;
150163
GraphicsAllocation *ringBuffer = nullptr;

shared/source/direct_submission/direct_submission_hw.inl

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,12 @@
3030
namespace NEO {
3131

3232
template <typename GfxFamily, typename Dispatcher>
33-
DirectSubmissionHw<GfxFamily, Dispatcher>::DirectSubmissionHw(const CommandStreamReceiver &commandStreamReceiver)
34-
: commandStreamReceiver(commandStreamReceiver), osContext(commandStreamReceiver.getOsContext()), globalFenceAllocation(commandStreamReceiver.getGlobalFenceAllocation()) {
35-
hwInfo = &commandStreamReceiver.peekHwInfo();
33+
DirectSubmissionHw<GfxFamily, Dispatcher>::DirectSubmissionHw(const DirectSubmissionInputParams &inputParams)
34+
: osContext(inputParams.osContext), rootDeviceIndex(inputParams.rootDeviceIndex) {
35+
memoryManager = inputParams.memoryManager;
36+
globalFenceAllocation = inputParams.globalFenceAllocation;
37+
hwInfo = inputParams.rootDeviceEnvironment.getHardwareInfo();
38+
memoryOperationHandler = inputParams.rootDeviceEnvironment.memoryOperationsInterface.get();
3639

3740
auto hwInfoConfig = HwInfoConfig::get(hwInfo->platform.eProductFamily);
3841

@@ -70,11 +73,10 @@ bool DirectSubmissionHw<GfxFamily, Dispatcher>::allocateResources() {
7073
DirectSubmissionAllocations allocations;
7174

7275
bool isMultiOsContextCapable = osContext.getNumSupportedDevices() > 1u;
73-
MemoryManager *memoryManager = commandStreamReceiver.getMemoryManager();
7476
constexpr size_t minimumRequiredSize = 256 * MemoryConstants::kiloByte;
7577
constexpr size_t additionalAllocationSize = MemoryConstants::pageSize;
7678
const auto allocationSize = alignUp(minimumRequiredSize + additionalAllocationSize, MemoryConstants::pageSize64k);
77-
const AllocationProperties commandStreamAllocationProperties{commandStreamReceiver.getRootDeviceIndex(),
79+
const AllocationProperties commandStreamAllocationProperties{rootDeviceIndex,
7880
true, allocationSize,
7981
AllocationType::RING_BUFFER,
8082
isMultiOsContextCapable, false, osContext.getDeviceBitfield()};
@@ -86,7 +88,7 @@ bool DirectSubmissionHw<GfxFamily, Dispatcher>::allocateResources() {
8688
UNRECOVERABLE_IF(ringBuffer2 == nullptr);
8789
allocations.push_back(ringBuffer2);
8890

89-
const AllocationProperties semaphoreAllocationProperties{commandStreamReceiver.getRootDeviceIndex(),
91+
const AllocationProperties semaphoreAllocationProperties{rootDeviceIndex,
9092
true, MemoryConstants::pageSize,
9193
AllocationType::SEMAPHORE_BUFFER,
9294
isMultiOsContextCapable, false, osContext.getDeviceBitfield()};
@@ -138,9 +140,7 @@ bool DirectSubmissionHw<GfxFamily, Dispatcher>::allocateResources() {
138140

139141
template <typename GfxFamily, typename Dispatcher>
140142
bool DirectSubmissionHw<GfxFamily, Dispatcher>::makeResourcesResident(DirectSubmissionAllocations &allocations) {
141-
auto memoryInterface = commandStreamReceiver.peekRootDeviceEnvironment().memoryOperationsInterface.get();
142-
143-
auto ret = memoryInterface->makeResidentWithinOsContext(&this->osContext, ArrayRef<GraphicsAllocation *>(allocations), false) == MemoryOperationsStatus::SUCCESS;
143+
auto ret = memoryOperationHandler->makeResidentWithinOsContext(&this->osContext, ArrayRef<GraphicsAllocation *>(allocations), false) == MemoryOperationsStatus::SUCCESS;
144144

145145
return ret;
146146
}
@@ -532,8 +532,6 @@ inline GraphicsAllocation *DirectSubmissionHw<GfxFamily, Dispatcher>::switchRing
532532

533533
template <typename GfxFamily, typename Dispatcher>
534534
void DirectSubmissionHw<GfxFamily, Dispatcher>::deallocateResources() {
535-
MemoryManager *memoryManager = commandStreamReceiver.getMemoryManager();
536-
537535
if (ringBuffer) {
538536
memoryManager->freeGraphicsMemory(ringBuffer);
539537
ringBuffer = nullptr;

shared/source/direct_submission/linux/drm_direct_submission.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class DrmDirectSubmission : public DirectSubmissionHw<GfxFamily, Dispatcher> {
1616
using DirectSubmissionHw<GfxFamily, Dispatcher>::ringCommandStream;
1717
using DirectSubmissionHw<GfxFamily, Dispatcher>::switchRingBuffersAllocations;
1818

19-
DrmDirectSubmission(const CommandStreamReceiver &commandStreamReceiver);
19+
DrmDirectSubmission(const DirectSubmissionInputParams &inputParams);
2020

2121
~DrmDirectSubmission();
2222

shared/source/direct_submission/linux/drm_direct_submission.inl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
namespace NEO {
2121

2222
template <typename GfxFamily, typename Dispatcher>
23-
DrmDirectSubmission<GfxFamily, Dispatcher>::DrmDirectSubmission(const CommandStreamReceiver &commandStreamReceiver)
24-
: DirectSubmissionHw<GfxFamily, Dispatcher>(commandStreamReceiver) {
23+
DrmDirectSubmission<GfxFamily, Dispatcher>::DrmDirectSubmission(const DirectSubmissionInputParams &inputParams)
24+
: DirectSubmissionHw<GfxFamily, Dispatcher>(inputParams) {
2525

2626
this->disableMonitorFence = true;
2727

@@ -42,7 +42,7 @@ DrmDirectSubmission<GfxFamily, Dispatcher>::DrmDirectSubmission(const CommandStr
4242
osContextLinux->getDrm().setDirectSubmissionActive(true);
4343

4444
if (this->partitionedMode) {
45-
this->workPartitionAllocation = commandStreamReceiver.getWorkPartitionAllocation();
45+
this->workPartitionAllocation = inputParams.workPartitionAllocation;
4646
UNRECOVERABLE_IF(this->workPartitionAllocation == nullptr);
4747
}
4848
}

shared/source/direct_submission/windows/wddm_direct_submission.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class Wddm;
1919
template <typename GfxFamily, typename Dispatcher>
2020
class WddmDirectSubmission : public DirectSubmissionHw<GfxFamily, Dispatcher> {
2121
public:
22-
WddmDirectSubmission(const CommandStreamReceiver &commandStreamReceiver);
22+
WddmDirectSubmission(const DirectSubmissionInputParams &inputParams);
2323

2424
~WddmDirectSubmission();
2525

shared/source/direct_submission/windows/wddm_direct_submission.inl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ namespace NEO {
2323
DECLARE_COMMAND_BUFFER(CommandBufferHeader, UMD_OCL, FALSE, FALSE, PERFTAG_OCL);
2424

2525
template <typename GfxFamily, typename Dispatcher>
26-
WddmDirectSubmission<GfxFamily, Dispatcher>::WddmDirectSubmission(const CommandStreamReceiver &commandStreamReceiver)
27-
: DirectSubmissionHw<GfxFamily, Dispatcher>(commandStreamReceiver) {
26+
WddmDirectSubmission<GfxFamily, Dispatcher>::WddmDirectSubmission(const DirectSubmissionInputParams &inputParams)
27+
: DirectSubmissionHw<GfxFamily, Dispatcher>(inputParams) {
2828
osContextWin = reinterpret_cast<OsContextWin *>(&this->osContext);
2929
wddm = osContextWin->getWddm();
3030
commandBufferHeader = std::make_unique<COMMAND_BUFFER_HEADER_REC>();

shared/test/common/mocks/mock_direct_submission_hw.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ struct MockDirectSubmissionHw : public DirectSubmissionHw<GfxFamily, Dispatcher>
1717
using BaseClass = DirectSubmissionHw<GfxFamily, Dispatcher>;
1818
using BaseClass::activeTiles;
1919
using BaseClass::allocateResources;
20-
using BaseClass::commandStreamReceiver;
2120
using BaseClass::completionRingBuffers;
2221
using BaseClass::cpuCachelineFlush;
2322
using BaseClass::currentQueueWorkCount;

0 commit comments

Comments
 (0)