fix: use correct gpu address when bindless heaps helper is enabled

Related-To: NEO-7063
Signed-off-by: Fabian Zwoliński <fabian.zwolinski@intel.com>
This commit is contained in:
Fabian Zwoliński
2024-08-05 14:02:25 +00:00
committed by Compute-Runtime-Automation
parent 619b47e3d5
commit 674c4a15ad
19 changed files with 510 additions and 212 deletions

View File

@@ -43,7 +43,8 @@ struct DispatchFlagsHelper {
false, // hasRelaxedOrderingDependencies
false, // stateCacheInvalidation
false, // isStallingCommandsOnNextFlushRequired
false // isDcFlushRequiredOnStallingCommandsOnNextFlush
false, // isDcFlushRequiredOnStallingCommandsOnNextFlush
true // disableGlobalSSH
);
}
};

View File

@@ -95,6 +95,6 @@ struct ComputeModeRequirements : public ::testing::Test {
CommandStreamReceiver *csr = nullptr;
std::unique_ptr<MockDevice> device;
DispatchFlags flags{nullptr, {}, nullptr, QueueThrottle::MEDIUM, PreemptionMode::Disabled, GrfConfig::defaultGrfNumber, L3CachingSettings::l3CacheOn, ThreadArbitrationPolicy::NotPresent, AdditionalKernelExecInfo::notApplicable, KernelExecutionType::notApplicable, MemoryCompressionState::notApplicable, QueueSliceCount::defaultSliceCount, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false};
DispatchFlags flags{nullptr, {}, nullptr, QueueThrottle::MEDIUM, PreemptionMode::Disabled, GrfConfig::defaultGrfNumber, L3CachingSettings::l3CacheOn, ThreadArbitrationPolicy::NotPresent, AdditionalKernelExecInfo::notApplicable, KernelExecutionType::notApplicable, MemoryCompressionState::notApplicable, QueueSliceCount::defaultSliceCount, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true};
GraphicsAllocation *alloc = nullptr;
};

View File

@@ -9,6 +9,7 @@
#include "shared/source/command_container/encode_surface_state.h"
#include "shared/source/gmm_helper/gmm_helper.h"
#include "shared/source/helpers/state_base_address_helper.h"
#include "shared/source/memory_manager/allocation_properties.h"
#include "shared/test/common/helpers/debug_manager_state_restore.h"
#include "shared/test/common/mocks/mock_device.h"
@@ -746,3 +747,49 @@ HWTEST2_F(SbaTest, givenStateBaseAddressPropertiesWhenSettingBindlessSurfaceStat
EXPECT_EQ(surfaceHeapBase, sbaCmd.getBindlessSurfaceStateBaseAddress());
EXPECT_TRUE(sbaCmd.getBindlessSurfaceStateBaseAddressModifyEnable());
}
TEST(SbaHelperTest, givenIndirectHeapWhenGetStateBaseAddressAndGetStateSizeThenReturnValuesBasedOnGlobalHeapsAndBindlessKernelPresence) {
auto cpuBaseAddress = reinterpret_cast<void *>(0x3000);
MockGraphicsAllocation graphicsAllocation(cpuBaseAddress, 4096u);
graphicsAllocation.setGpuBaseAddress(4096u);
IndirectHeap heap(&graphicsAllocation, false);
auto gpuAddress = heap.getGraphicsAllocation()->getGpuAddress();
auto gpuBaseAddress = heap.getGraphicsAllocation()->getGpuBaseAddress();
auto heapSize = (static_cast<uint32_t>(heap.getMaxAvailableSpace()) + MemoryConstants::pageMask) / MemoryConstants::pageSize;
bool useGlobalHeaps = false;
{
useGlobalHeaps = false;
EXPECT_EQ(gpuAddress, NEO::getStateBaseAddress(heap, useGlobalHeaps));
EXPECT_EQ(heapSize, NEO::getStateSize(heap, useGlobalHeaps));
}
{
useGlobalHeaps = true;
EXPECT_EQ(gpuBaseAddress, NEO::getStateBaseAddress(heap, useGlobalHeaps));
EXPECT_EQ(MemoryConstants::sizeOf4GBinPageEntities, NEO::getStateSize(heap, useGlobalHeaps));
}
bool isBindlessKernel = false;
{
useGlobalHeaps = false;
isBindlessKernel = false;
EXPECT_EQ(gpuAddress, NEO::getStateBaseAddress(heap, useGlobalHeaps, isBindlessKernel));
EXPECT_EQ(heapSize, NEO::getStateSize(heap, useGlobalHeaps, isBindlessKernel));
}
{
useGlobalHeaps = true;
isBindlessKernel = false;
EXPECT_EQ(gpuAddress, NEO::getStateBaseAddress(heap, useGlobalHeaps, isBindlessKernel));
EXPECT_EQ(heapSize, NEO::getStateSize(heap, useGlobalHeaps, isBindlessKernel));
}
{
useGlobalHeaps = true;
isBindlessKernel = true;
EXPECT_EQ(gpuBaseAddress, NEO::getStateBaseAddress(heap, useGlobalHeaps, isBindlessKernel));
EXPECT_EQ(MemoryConstants::sizeOf4GBinPageEntities, NEO::getStateSize(heap, useGlobalHeaps, isBindlessKernel));
}
}