fix: don't flush texture cache if not required

Related-To: NEO-14645

Signed-off-by: Szymon Morek <szymon.morek@intel.com>
This commit is contained in:
Szymon Morek
2025-04-15 13:39:15 +00:00
committed by Compute-Runtime-Automation
parent b423084861
commit 4d60465a9e
7 changed files with 41 additions and 7 deletions

View File

@@ -994,13 +994,15 @@ TaskCountType CommandQueue::peekBcsTaskCount(aub_stream::EngineType bcsEngineTyp
}
bool CommandQueue::isTextureCacheFlushNeeded(uint32_t commandType) const {
auto isDirectSubmissionEnabled = getGpgpuCommandStreamReceiver().isDirectSubmissionEnabled();
switch (commandType) {
case CL_COMMAND_COPY_IMAGE:
case CL_COMMAND_WRITE_IMAGE:
case CL_COMMAND_FILL_IMAGE:
return isDirectSubmissionEnabled;
case CL_COMMAND_READ_IMAGE:
case CL_COMMAND_COPY_IMAGE_TO_BUFFER:
return getGpgpuCommandStreamReceiver().isDirectSubmissionEnabled();
return isDirectSubmissionEnabled && getDevice().getGfxCoreHelper().isCacheFlushPriorImageReadRequired();
default:
return false;
}

View File

@@ -451,17 +451,24 @@ HWTEST_F(CommandQueueCommandStreamTest, WhenCheckIsTextureCacheFlushNeededThenRe
std::set<cl_command_type> typesToFlush = {CL_COMMAND_COPY_IMAGE, CL_COMMAND_WRITE_IMAGE, CL_COMMAND_FILL_IMAGE,
CL_COMMAND_READ_IMAGE, CL_COMMAND_COPY_IMAGE_TO_BUFFER};
for (auto i = CL_COMMAND_NDRANGE_KERNEL; i < CL_COMMAND_SVM_MIGRATE_MEM; i++) {
if (typesToFlush.find(i) != typesToFlush.end()) {
for (auto operation = CL_COMMAND_NDRANGE_KERNEL; operation < CL_COMMAND_SVM_MIGRATE_MEM; operation++) {
if (typesToFlush.find(operation) != typesToFlush.end()) {
commandStreamReceiver.directSubmissionAvailable = true;
EXPECT_TRUE(cmdQ.isTextureCacheFlushNeeded(i));
if (operation == CL_COMMAND_READ_IMAGE || operation == CL_COMMAND_COPY_IMAGE_TO_BUFFER) {
auto isCacheFlushPriorImageReadRequired = mockDevice->getGfxCoreHelper().isCacheFlushPriorImageReadRequired();
EXPECT_EQ(isCacheFlushPriorImageReadRequired, cmdQ.isTextureCacheFlushNeeded(operation));
} else {
EXPECT_TRUE(cmdQ.isTextureCacheFlushNeeded(operation));
}
commandStreamReceiver.directSubmissionAvailable = false;
EXPECT_FALSE(cmdQ.isTextureCacheFlushNeeded(i));
EXPECT_FALSE(cmdQ.isTextureCacheFlushNeeded(operation));
} else {
commandStreamReceiver.directSubmissionAvailable = true;
EXPECT_FALSE(cmdQ.isTextureCacheFlushNeeded(i));
EXPECT_FALSE(cmdQ.isTextureCacheFlushNeeded(operation));
commandStreamReceiver.directSubmissionAvailable = false;
EXPECT_FALSE(cmdQ.isTextureCacheFlushNeeded(i));
EXPECT_FALSE(cmdQ.isTextureCacheFlushNeeded(operation));
}
}
}