Skip to content

Commit d3aecdc

Browse files
Update StreamProperties
Signed-off-by: Bartosz Dunajski <bartosz.dunajski@intel.com>
1 parent 97af428 commit d3aecdc

File tree

4 files changed

+37
-1
lines changed

4 files changed

+37
-1
lines changed

shared/source/command_stream/definitions/stream_properties.inl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ namespace NEO {
1212
struct StateComputeModeProperties {
1313
StreamProperty isCoherencyRequired{};
1414
StreamProperty largeGrfMode{};
15+
StreamProperty zPassAsyncComputeThreadLimit{};
16+
StreamProperty pixelAsyncComputeThreadLimit{};
1517

1618
void setProperties(bool requiresCoherency, uint32_t numGrfRequired, uint32_t threadArbitrationPolicy);
1719
void setProperties(const StateComputeModeProperties &properties);

shared/source/command_stream/stream_properties.cpp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,39 @@ void StateComputeModeProperties::setProperties(bool requiresCoherency, uint32_t
1919

2020
int32_t largeGrfMode = (numGrfRequired == GrfConfig::LargeGrfNumber ? 1 : 0);
2121
this->largeGrfMode.set(largeGrfMode);
22+
23+
int32_t zPassAsyncComputeThreadLimit = -1;
24+
if (DebugManager.flags.ForceZPassAsyncComputeThreadLimit.get() != -1) {
25+
zPassAsyncComputeThreadLimit = DebugManager.flags.ForceZPassAsyncComputeThreadLimit.get();
26+
}
27+
this->zPassAsyncComputeThreadLimit.set(zPassAsyncComputeThreadLimit);
28+
29+
int32_t pixelAsyncComputeThreadLimit = -1;
30+
if (DebugManager.flags.ForcePixelAsyncComputeThreadLimit.get() != -1) {
31+
pixelAsyncComputeThreadLimit = DebugManager.flags.ForcePixelAsyncComputeThreadLimit.get();
32+
}
33+
this->pixelAsyncComputeThreadLimit.set(pixelAsyncComputeThreadLimit);
2234
}
2335

2436
void StateComputeModeProperties::setProperties(const StateComputeModeProperties &properties) {
2537
clearIsDirty();
2638

2739
isCoherencyRequired.set(properties.isCoherencyRequired.value);
2840
largeGrfMode.set(properties.largeGrfMode.value);
41+
zPassAsyncComputeThreadLimit.set(properties.zPassAsyncComputeThreadLimit.value);
42+
pixelAsyncComputeThreadLimit.set(properties.pixelAsyncComputeThreadLimit.value);
2943
}
3044

3145
bool StateComputeModeProperties::isDirty() {
32-
return isCoherencyRequired.isDirty || largeGrfMode.isDirty;
46+
return isCoherencyRequired.isDirty || largeGrfMode.isDirty || zPassAsyncComputeThreadLimit.isDirty ||
47+
pixelAsyncComputeThreadLimit.isDirty;
3348
}
3449

3550
void StateComputeModeProperties::clearIsDirty() {
3651
isCoherencyRequired.isDirty = false;
3752
largeGrfMode.isDirty = false;
53+
zPassAsyncComputeThreadLimit.isDirty = false;
54+
pixelAsyncComputeThreadLimit.isDirty = false;
3855
}
3956

4057
void FrontEndProperties::setProperties(bool isCooperativeKernel, bool disableOverdispatch, int32_t engineInstancedDevice,

shared/test/unit_test/command_stream/stream_properties_tests.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ std::vector<StreamProperty *> getAllStateComputeModeProperties(StateComputeModeP
1717
std::vector<StreamProperty *> allProperties;
1818
allProperties.push_back(&properties.isCoherencyRequired);
1919
allProperties.push_back(&properties.largeGrfMode);
20+
allProperties.push_back(&properties.zPassAsyncComputeThreadLimit);
21+
allProperties.push_back(&properties.pixelAsyncComputeThreadLimit);
2022
return allProperties;
2123
}
2224

shared/test/unit_test/command_stream/stream_properties_tests_common.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,29 @@ TEST(StreamPropertiesTests, whenPropertyValueIsChangedThenProperStateIsSet) {
4242
}
4343

4444
TEST(StreamPropertiesTests, whenSettingStateComputeModePropertiesThenCorrectValuesAreSet) {
45+
DebugManagerStateRestore restorer;
4546
StreamProperties properties;
4647
for (auto requiresCoherency : ::testing::Bool()) {
4748
for (auto largeGrf : ::testing::Bool()) {
4849
properties.stateComputeMode.setProperties(requiresCoherency, largeGrf ? 256 : 128, 0u);
4950
EXPECT_EQ(largeGrf, properties.stateComputeMode.largeGrfMode.value);
5051
EXPECT_EQ(requiresCoherency, properties.stateComputeMode.isCoherencyRequired.value);
52+
EXPECT_EQ(-1, properties.stateComputeMode.zPassAsyncComputeThreadLimit.value);
53+
EXPECT_EQ(-1, properties.stateComputeMode.pixelAsyncComputeThreadLimit.value);
5154
}
5255
}
56+
57+
for (auto forceZPassAsyncComputeThreadLimit : ::testing::Bool()) {
58+
DebugManager.flags.ForceZPassAsyncComputeThreadLimit.set(forceZPassAsyncComputeThreadLimit);
59+
properties.stateComputeMode.setProperties(false, 0u, 0u);
60+
EXPECT_EQ(forceZPassAsyncComputeThreadLimit, properties.stateComputeMode.zPassAsyncComputeThreadLimit.value);
61+
}
62+
63+
for (auto forcePixelAsyncComputeThreadLimit : ::testing::Bool()) {
64+
DebugManager.flags.ForcePixelAsyncComputeThreadLimit.set(forcePixelAsyncComputeThreadLimit);
65+
properties.stateComputeMode.setProperties(false, 0u, 0u);
66+
EXPECT_EQ(forcePixelAsyncComputeThreadLimit, properties.stateComputeMode.pixelAsyncComputeThreadLimit.value);
67+
}
5368
}
5469

5570
template <typename PropertiesT>

0 commit comments

Comments
 (0)