Skip to content

Commit 8a00543

Browse files
[1/n] Initialize WDDM only once
- remove Wddm parameter from WddmCommandStreamReceiver and pass it via ExecutionEnvironment - remove drm parameter from DrmCommandStreamReceiver and pass it via ExecutionEnvironment - remove void parametr from TbxCommandStreamReceiverHw Change-Id: Ib76332f1341339426e86e0ce2b6ce96919219881
1 parent 7eceb30 commit 8a00543

15 files changed

+142
-49
lines changed

runtime/command_stream/command_stream_receiver_with_aub_dump.inl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ extern CommandStreamReceiverCreateFunc commandStreamReceiverFactory[2 * IGFX_MAX
2929

3030
template <typename BaseCSR>
3131
CommandStreamReceiverWithAUBDump<BaseCSR>::CommandStreamReceiverWithAUBDump(const HardwareInfo &hwInfoIn, ExecutionEnvironment &executionEnvironment)
32-
: BaseCSR(hwInfoIn, nullptr, executionEnvironment) {
32+
: BaseCSR(hwInfoIn, executionEnvironment) {
3333
aubCSR = AUBCommandStreamReceiver::create(hwInfoIn, "aubfile", false, executionEnvironment);
3434
}
3535

runtime/command_stream/tbx_command_stream_receiver_hw.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ class TbxCommandStreamReceiverHw : public CommandStreamReceiverHw<GfxFamily> {
6060

6161
static CommandStreamReceiver *create(const HardwareInfo &hwInfoIn, bool withAubDump, ExecutionEnvironment &executionEnvironment);
6262

63-
TbxCommandStreamReceiverHw(const HardwareInfo &hwInfoIn, void *ptr, ExecutionEnvironment &executionEnvironment);
63+
TbxCommandStreamReceiverHw(const HardwareInfo &hwInfoIn, ExecutionEnvironment &executionEnvironment);
6464
~TbxCommandStreamReceiverHw() override;
6565

6666
void initializeEngine(EngineType engineType);

runtime/command_stream/tbx_command_stream_receiver_hw.inl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@
3232
namespace OCLRT {
3333

3434
template <typename GfxFamily>
35-
TbxCommandStreamReceiverHw<GfxFamily>::TbxCommandStreamReceiverHw(const HardwareInfo &hwInfoIn, void *ptr, ExecutionEnvironment &executionEnvironment)
35+
TbxCommandStreamReceiverHw<GfxFamily>::TbxCommandStreamReceiverHw(const HardwareInfo &hwInfoIn,
36+
ExecutionEnvironment &executionEnvironment)
3637
: BaseClass(hwInfoIn, executionEnvironment) {
3738
for (auto &engineInfo : engineInfoTable) {
3839
engineInfo.pLRCA = nullptr;
@@ -175,7 +176,7 @@ CommandStreamReceiver *TbxCommandStreamReceiverHw<GfxFamily>::create(const Hardw
175176
if (withAubDump) {
176177
csr = new CommandStreamReceiverWithAUBDump<TbxCommandStreamReceiverHw<GfxFamily>>(hwInfoIn, executionEnvironment);
177178
} else {
178-
csr = new TbxCommandStreamReceiverHw<GfxFamily>(hwInfoIn, nullptr, executionEnvironment);
179+
csr = new TbxCommandStreamReceiverHw<GfxFamily>(hwInfoIn, executionEnvironment);
179180
}
180181

181182
// Open our stream

runtime/os_interface/linux/device_command_stream.inl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ CommandStreamReceiver *DeviceCommandStreamReceiver<GfxFamily>::create(const Hard
3333
if (withAubDump) {
3434
return new CommandStreamReceiverWithAUBDump<DrmCommandStreamReceiver<GfxFamily>>(hwInfo, executionEnvironment);
3535
} else {
36-
return new DrmCommandStreamReceiver<GfxFamily>(hwInfo, nullptr, executionEnvironment);
36+
return new DrmCommandStreamReceiver<GfxFamily>(hwInfo, executionEnvironment);
3737
}
3838
};
3939
} // namespace OCLRT

runtime/os_interface/linux/drm_command_stream.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ class DrmCommandStreamReceiver : public DeviceCommandStreamReceiver<GfxFamily> {
4848
public:
4949
// When drm is null default implementation is used. In this case DrmCommandStreamReceiver is responsible to free drm.
5050
// When drm is passed, DCSR will not free it at destruction
51-
DrmCommandStreamReceiver(const HardwareInfo &hwInfoIn, Drm *drm, ExecutionEnvironment &executionEnvironment, gemCloseWorkerMode mode = gemCloseWorkerMode::gemCloseWorkerActive);
51+
DrmCommandStreamReceiver(const HardwareInfo &hwInfoIn, ExecutionEnvironment &executionEnvironment,
52+
gemCloseWorkerMode mode = gemCloseWorkerMode::gemCloseWorkerActive);
5253

5354
FlushStamp flush(BatchBuffer &batchBuffer, EngineType engineType, ResidencyContainer *allocationsForResidency, OsContext &osContext) override;
5455
void makeResident(GraphicsAllocation &gfxAllocation) override;

runtime/os_interface/linux/drm_command_stream.inl

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,19 @@ namespace OCLRT {
4141

4242
template <typename GfxFamily>
4343
DrmCommandStreamReceiver<GfxFamily>::DrmCommandStreamReceiver(const HardwareInfo &hwInfoIn,
44-
Drm *drm, ExecutionEnvironment &executionEnvironment, gemCloseWorkerMode mode)
44+
ExecutionEnvironment &executionEnvironment, gemCloseWorkerMode mode)
4545
: BaseClass(hwInfoIn, executionEnvironment), gemCloseWorkerOperationMode(mode) {
46-
this->drm = drm ? drm : Drm::get(0);
47-
residency.reserve(512);
48-
execObjectsStorage.reserve(512);
4946
if (!executionEnvironment.osInterface) {
5047
executionEnvironment.osInterface = std::make_unique<OSInterface>();
48+
this->drm = Drm::get(0);
49+
} else {
50+
this->drm = executionEnvironment.osInterface->get()->getDrm()
51+
? executionEnvironment.osInterface->get()->getDrm()
52+
: Drm::get(0);
5153
}
54+
residency.reserve(512);
55+
execObjectsStorage.reserve(512);
56+
5257
executionEnvironment.osInterface->get()->setDrm(this->drm);
5358
CommandStreamReceiver::osInterface = executionEnvironment.osInterface.get();
5459
auto gmmHelper = platform()->peekExecutionEnvironment()->getGmmHelper();

runtime/os_interface/windows/device_command_stream.inl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ CommandStreamReceiver *DeviceCommandStreamReceiver<GfxFamily>::create(const Hard
3737
if (withAubDump) {
3838
return new CommandStreamReceiverWithAUBDump<WddmCommandStreamReceiver<GfxFamily>>(hwInfo, executionEnvironment);
3939
} else {
40-
return new WddmCommandStreamReceiver<GfxFamily>(hwInfo, nullptr, executionEnvironment);
40+
return new WddmCommandStreamReceiver<GfxFamily>(hwInfo, executionEnvironment);
4141
}
4242
}
4343
} // namespace OCLRT

runtime/os_interface/windows/wddm_device_command_stream.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class WddmCommandStreamReceiver : public DeviceCommandStreamReceiver<GfxFamily>
3737
using CommandStreamReceiverHw<GfxFamily>::CommandStreamReceiver::memoryManager;
3838

3939
public:
40-
WddmCommandStreamReceiver(const HardwareInfo &hwInfoIn, Wddm *wddm, ExecutionEnvironment &executionEnvironment);
40+
WddmCommandStreamReceiver(const HardwareInfo &hwInfoIn, ExecutionEnvironment &executionEnvironment);
4141
virtual ~WddmCommandStreamReceiver();
4242

4343
FlushStamp flush(BatchBuffer &batchBuffer, EngineType engineType, ResidencyContainer *allocationsForResidency, OsContext &osContext) override;

runtime/os_interface/windows/wddm_device_command_stream.inl

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,21 +49,26 @@ namespace OCLRT {
4949
DECLARE_COMMAND_BUFFER(CommandBufferHeader, UMD_OCL, FALSE, FALSE, PERFTAG_OCL);
5050

5151
template <typename GfxFamily>
52-
WddmCommandStreamReceiver<GfxFamily>::WddmCommandStreamReceiver(const HardwareInfo &hwInfoIn, Wddm *wddm, ExecutionEnvironment &executionEnvironment)
52+
WddmCommandStreamReceiver<GfxFamily>::WddmCommandStreamReceiver(const HardwareInfo &hwInfoIn,
53+
ExecutionEnvironment &executionEnvironment)
5354
: BaseClass(hwInfoIn, executionEnvironment) {
54-
this->wddm = wddm;
55-
if (this->wddm == nullptr) {
55+
56+
if (!executionEnvironment.osInterface) {
57+
executionEnvironment.osInterface = std::make_unique<OSInterface>();
5658
this->wddm = Wddm::createWddm();
59+
this->osInterface = executionEnvironment.osInterface.get();
60+
this->osInterface->get()->setWddm(this->wddm);
61+
} else {
62+
this->wddm = executionEnvironment.osInterface->get()->getWddm();
63+
this->osInterface = executionEnvironment.osInterface.get();
5764
}
65+
5866
GPUNODE_ORDINAL nodeOrdinal = GPUNODE_3D;
5967
UNRECOVERABLE_IF(!WddmEngineMapper<GfxFamily>::engineNodeMap(hwInfoIn.capabilityTable.defaultEngineType, nodeOrdinal));
6068
this->wddm->setNode(nodeOrdinal);
6169
PreemptionMode preemptionMode = PreemptionHelper::getDefaultPreemptionMode(hwInfoIn);
6270
this->wddm->setPreemptionMode(preemptionMode);
6371

64-
executionEnvironment.osInterface.reset(new OSInterface());
65-
this->osInterface = executionEnvironment.osInterface.get();
66-
this->osInterface->get()->setWddm(this->wddm);
6772
commandBufferHeader = new COMMAND_BUFFER_HEADER;
6873
*commandBufferHeader = CommandBufferHeader;
6974

unit_tests/command_stream/command_stream_receiver_with_aub_dump_tests.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@
3232
using namespace OCLRT;
3333

3434
struct MyMockCsr : UltCommandStreamReceiver<DEFAULT_TEST_FAMILY_NAME> {
35-
MyMockCsr(const HardwareInfo &hwInfoIn, void *ptr, ExecutionEnvironment &executionEnvironment) : UltCommandStreamReceiver(hwInfoIn, executionEnvironment) {
35+
MyMockCsr(const HardwareInfo &hwInfoIn, ExecutionEnvironment &executionEnvironment)
36+
: UltCommandStreamReceiver(hwInfoIn, executionEnvironment) {
3637
}
3738

3839
FlushStamp flush(BatchBuffer &batchBuffer, EngineType engineOrdinal, ResidencyContainer *allocationsForResidency, OsContext &osContext) override {
@@ -101,7 +102,7 @@ struct MyMockCsrWithAubDump : CommandStreamReceiverWithAUBDump<BaseCSR> {
101102
}
102103
if (createAubCSR) {
103104
// overwrite with mock
104-
this->aubCSR = new MyMockCsr(hwInfoIn, nullptr, executionEnvironment);
105+
this->aubCSR = new MyMockCsr(hwInfoIn, executionEnvironment);
105106
}
106107
}
107108

unit_tests/command_stream/tbx_command_stream_tests.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ template <typename GfxFamily>
5858
class MockTbxCsr : public TbxCommandStreamReceiverHw<GfxFamily> {
5959
public:
6060
using CommandStreamReceiver::latestFlushedTaskCount;
61-
MockTbxCsr(const HardwareInfo &hwInfoIn, void *ptr, ExecutionEnvironment &executionEnvironment) : TbxCommandStreamReceiverHw<GfxFamily>(hwInfoIn, ptr, executionEnvironment) {}
61+
MockTbxCsr(const HardwareInfo &hwInfoIn, ExecutionEnvironment &executionEnvironment)
62+
: TbxCommandStreamReceiverHw<GfxFamily>(hwInfoIn, executionEnvironment) {}
6263

6364
void makeCoherent(GraphicsAllocation &gfxAllocation) override {
6465
auto tagAddress = reinterpret_cast<uint32_t *>(gfxAllocation.getUnderlyingBuffer());
@@ -318,7 +319,7 @@ HWTEST_F(TbxCommandStreamTests, givenDbgDeviceIdFlagIsSetWhenTbxCsrIsCreatedThen
318319

319320
HWTEST_F(TbxCommandSteamSimpleTest, givenTbxCsrWhenWaitBeforeMakeNonResidentWhenRequiredIsCalledWithBlockingFlagTrueThenFunctionStallsUntilMakeCoherentUpdatesTagAddress) {
320321
uint32_t tag = 0;
321-
MockTbxCsr<FamilyType> tbxCsr(*platformDevices[0], &tag, *pDevice->executionEnvironment);
322+
MockTbxCsr<FamilyType> tbxCsr(*platformDevices[0], *pDevice->executionEnvironment);
322323
GraphicsAllocation graphicsAllocation(&tag, sizeof(tag));
323324
tbxCsr.setTagAllocation(&graphicsAllocation);
324325

unit_tests/os_interface/linux/device_command_stream_tests.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include "runtime/command_stream/linear_stream.h"
2929
#include "runtime/os_interface/linux/device_command_stream.inl"
3030
#include "runtime/os_interface/linux/drm_command_stream.h"
31+
#include "runtime/os_interface/linux/os_interface.h"
3132
#include "hw_cmds.h"
3233
#include "unit_tests/fixtures/device_fixture.h"
3334
#include "test.h"
@@ -39,21 +40,32 @@ using namespace OCLRT;
3940
typedef Test<DeviceFixture> DeviceCommandStreamLeaksTest;
4041

4142
HWTEST_F(DeviceCommandStreamLeaksTest, Create) {
43+
this->executionEnvironment.osInterface = std::make_unique<OSInterface>();
4244
std::unique_ptr<CommandStreamReceiver> ptr(DeviceCommandStreamReceiver<FamilyType>::create(*platformDevices[0], false, this->executionEnvironment));
4345
DrmMockSuccess mockDrm;
4446
EXPECT_NE(nullptr, ptr);
4547
}
4648

4749
HWTEST_F(DeviceCommandStreamLeaksTest, givenDefaultDrmCsrWhenItIsCreatedThenGemCloseWorkerInactiveModeIsSelected) {
50+
this->executionEnvironment.osInterface = std::make_unique<OSInterface>();
4851
std::unique_ptr<CommandStreamReceiver> ptr(DeviceCommandStreamReceiver<FamilyType>::create(*platformDevices[0], false, this->executionEnvironment));
4952
auto drmCsr = (DrmCommandStreamReceiver<FamilyType> *)ptr.get();
5053
EXPECT_EQ(drmCsr->peekGemCloseWorkerOperationMode(), gemCloseWorkerMode::gemCloseWorkerActive);
5154
}
5255

5356
HWTEST_F(DeviceCommandStreamLeaksTest, givenDefaultDrmCsrWithAubDumWhenItIsCreatedThenGemCloseWorkerInactiveModeIsSelected) {
57+
this->executionEnvironment.osInterface = std::make_unique<OSInterface>();
5458
std::unique_ptr<CommandStreamReceiver> ptr(DeviceCommandStreamReceiver<FamilyType>::create(*platformDevices[0], true, this->executionEnvironment));
5559
auto drmCsrWithAubDump = (CommandStreamReceiverWithAUBDump<DrmCommandStreamReceiver<FamilyType>> *)ptr.get();
5660
EXPECT_EQ(drmCsrWithAubDump->peekGemCloseWorkerOperationMode(), gemCloseWorkerMode::gemCloseWorkerActive);
5761
auto aubCSR = static_cast<CommandStreamReceiverWithAUBDump<DrmCommandStreamReceiver<FamilyType>> *>(ptr.get())->aubCSR;
5862
EXPECT_NE(nullptr, aubCSR);
5963
}
64+
65+
HWTEST_F(DeviceCommandStreamLeaksTest, givenDefaultDrmCsrWhenOsInterfaceIsNullptrThenValidateDrm) {
66+
std::unique_ptr<CommandStreamReceiver> ptr(DeviceCommandStreamReceiver<FamilyType>::create(*platformDevices[0], false,
67+
this->executionEnvironment));
68+
auto drmCsr = (DrmCommandStreamReceiver<FamilyType> *)ptr.get();
69+
EXPECT_NE(nullptr, executionEnvironment.osInterface);
70+
EXPECT_EQ(drmCsr->getOSInterface()->get()->getDrm(), executionEnvironment.osInterface->get()->getDrm());
71+
}

unit_tests/os_interface/linux/drm_command_stream_mm_tests.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "runtime/execution_environment/execution_environment.h"
2424
#include "runtime/os_interface/linux/drm_command_stream.h"
2525
#include "runtime/os_interface/linux/drm_memory_manager.h"
26+
#include "runtime/os_interface/linux/os_interface.h"
2627
#include "unit_tests/helpers/debug_manager_state_restore.h"
2728
#include "unit_tests/os_interface/linux/device_command_stream_fixture.h"
2829
#include "test.h"
@@ -41,7 +42,11 @@ HWTEST_F(DrmCommandStreamMMTest, MMwithPinBB) {
4142
std::unique_ptr<DrmMockCustom> mock(new DrmMockCustom());
4243
ASSERT_NE(nullptr, mock);
4344

44-
DrmCommandStreamReceiver<FamilyType> csr(*platformDevices[0], mock.get(), executionEnvironment, gemCloseWorkerMode::gemCloseWorkerInactive);
45+
executionEnvironment.osInterface = std::make_unique<OSInterface>();
46+
executionEnvironment.osInterface->get()->setDrm(mock.get());
47+
48+
DrmCommandStreamReceiver<FamilyType> csr(*platformDevices[0], executionEnvironment,
49+
gemCloseWorkerMode::gemCloseWorkerInactive);
4550

4651
auto mm = (DrmMemoryManager *)csr.createMemoryManager(false);
4752
ASSERT_NE(nullptr, mm);
@@ -61,7 +66,11 @@ HWTEST_F(DrmCommandStreamMMTest, givenForcePinDisabledWhenMemoryManagerIsCreated
6166
std::unique_ptr<DrmMockCustom> mock(new DrmMockCustom());
6267
ASSERT_NE(nullptr, mock);
6368

64-
DrmCommandStreamReceiver<FamilyType> csr(*platformDevices[0], mock.get(), executionEnvironment, gemCloseWorkerMode::gemCloseWorkerInactive);
69+
executionEnvironment.osInterface = std::make_unique<OSInterface>();
70+
executionEnvironment.osInterface->get()->setDrm(mock.get());
71+
72+
DrmCommandStreamReceiver<FamilyType> csr(*platformDevices[0], executionEnvironment,
73+
gemCloseWorkerMode::gemCloseWorkerInactive);
6574

6675
auto mm = (DrmMemoryManager *)csr.createMemoryManager(false);
6776
csr.setMemoryManager(nullptr);

0 commit comments

Comments
 (0)