mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-05 09:09:04 +08:00
feature: use stateless only kernels in command lists of stateless mode
Related-To: NEO-10381 Signed-off-by: Zbigniew Zdanowicz <zbigniew.zdanowicz@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
00aa0802dd
commit
3560e8a735
@@ -1356,7 +1356,7 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendPageFaultCopy(NEO::Graph
|
||||
|
||||
size_t middleElSize = sizeof(uint32_t) * 4;
|
||||
uintptr_t rightSize = size % middleElSize;
|
||||
bool isStateless = false;
|
||||
bool isStateless = this->cmdListHeapAddressModel == NEO::HeapAddressModel::globalStateless;
|
||||
|
||||
if (size >= 4ull * MemoryConstants::gigaByte) {
|
||||
isStateless = true;
|
||||
@@ -1441,7 +1441,7 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendMemoryCopy(void *dstptr,
|
||||
uintptr_t leftSize = 0;
|
||||
uintptr_t rightSize = 0;
|
||||
uintptr_t middleSizeBytes = 0;
|
||||
bool isStateless = false;
|
||||
bool isStateless = this->cmdListHeapAddressModel == NEO::HeapAddressModel::globalStateless;
|
||||
const bool isHeapless = this->isHeaplessModeEnabled();
|
||||
|
||||
if (!isCopyOnly()) {
|
||||
@@ -1887,7 +1887,7 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendMemoryFill(void *ptr,
|
||||
ze_event_handle_t hSignalEvent,
|
||||
uint32_t numWaitEvents,
|
||||
ze_event_handle_t *phWaitEvents, bool relaxedOrderingDispatch) {
|
||||
bool isStateless = false;
|
||||
bool isStateless = this->cmdListHeapAddressModel == NEO::HeapAddressModel::globalStateless;
|
||||
const bool isHeapless = this->isHeaplessModeEnabled();
|
||||
|
||||
NEO::Device *neoDevice = device->getNEODevice();
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#include "shared/test/common/libult/ult_command_stream_receiver.h"
|
||||
#include "shared/test/common/mocks/mock_command_stream_receiver.h"
|
||||
#include "shared/test/common/mocks/mock_device.h"
|
||||
#include "shared/test/common/mocks/mock_graphics_allocation.h"
|
||||
#include "shared/test/common/mocks/mock_memory_operations_handler.h"
|
||||
#include "shared/test/common/mocks/ult_device_factory.h"
|
||||
#include "shared/test/common/test_macros/hw_test.h"
|
||||
@@ -2704,5 +2705,84 @@ HWTEST2_F(CommandListStateBaseAddressGlobalStatelessTest,
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||
}
|
||||
|
||||
HWTEST2_F(CommandListStateBaseAddressGlobalStatelessTest,
|
||||
givenCommandListUsingGlobalHeapsWhenAppendingCopyKernelThenStatelessKernelUsedAndNoSurfaceHeapUsed,
|
||||
IsAtLeastXeHpCore) {
|
||||
auto &container = commandList->getCmdContainer();
|
||||
|
||||
auto ssh = container.getIndirectHeap(NEO::HeapType::surfaceState);
|
||||
EXPECT_EQ(nullptr, ssh);
|
||||
|
||||
void *hostPtr = nullptr;
|
||||
void *devicePtr = nullptr;
|
||||
|
||||
constexpr size_t size = 1;
|
||||
ze_host_mem_alloc_desc_t hostDesc = {};
|
||||
auto result = context->allocHostMem(&hostDesc, size, 1u, &hostPtr);
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||
|
||||
ze_device_mem_alloc_desc_t deviceDesc = {};
|
||||
result = context->allocDeviceMem(device->toHandle(), &deviceDesc, size, 1u, &devicePtr);
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||
|
||||
result = commandList->appendMemoryCopy(devicePtr, hostPtr, size, nullptr, 0, nullptr, false, false);
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||
|
||||
ssh = container.getIndirectHeap(NEO::HeapType::surfaceState);
|
||||
EXPECT_EQ(nullptr, ssh);
|
||||
|
||||
context->freeMem(hostPtr);
|
||||
context->freeMem(devicePtr);
|
||||
}
|
||||
|
||||
HWTEST2_F(CommandListStateBaseAddressGlobalStatelessTest,
|
||||
givenCommandListUsingGlobalHeapsWhenAppendingFillKernelThenStatelessKernelUsedAndNoSurfaceHeapUsed,
|
||||
IsAtLeastXeHpCore) {
|
||||
auto &container = commandList->getCmdContainer();
|
||||
|
||||
auto ssh = container.getIndirectHeap(NEO::HeapType::surfaceState);
|
||||
EXPECT_EQ(nullptr, ssh);
|
||||
|
||||
char pattern = 1;
|
||||
void *patternPtr = &pattern;
|
||||
void *devicePtr = nullptr;
|
||||
|
||||
constexpr size_t size = 128;
|
||||
|
||||
ze_device_mem_alloc_desc_t deviceDesc = {};
|
||||
auto result = context->allocDeviceMem(device->toHandle(), &deviceDesc, size, 1u, &devicePtr);
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||
|
||||
result = commandList->appendMemoryFill(devicePtr, patternPtr, sizeof(pattern), size, nullptr, 0, nullptr, false);
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||
|
||||
ssh = container.getIndirectHeap(NEO::HeapType::surfaceState);
|
||||
EXPECT_EQ(nullptr, ssh);
|
||||
|
||||
context->freeMem(devicePtr);
|
||||
}
|
||||
|
||||
HWTEST2_F(CommandListStateBaseAddressGlobalStatelessTest,
|
||||
givenCommandListUsingGlobalHeapsWhenAppendingPageFaultCopyThenStatelessKernelUsedAndNoSurfaceHeapUsed,
|
||||
IsAtLeastXeHpCore) {
|
||||
auto &container = commandList->getCmdContainer();
|
||||
|
||||
auto ssh = container.getIndirectHeap(NEO::HeapType::surfaceState);
|
||||
EXPECT_EQ(nullptr, ssh);
|
||||
|
||||
constexpr size_t size = 64;
|
||||
uint8_t *buffer[size];
|
||||
uint64_t gpuAddress = 0x1200;
|
||||
|
||||
NEO::MockGraphicsAllocation mockSrcAllocation(buffer, gpuAddress, size);
|
||||
NEO::MockGraphicsAllocation mockDstAllocation(buffer, gpuAddress, size);
|
||||
|
||||
auto result = commandList->appendPageFaultCopy(&mockDstAllocation, &mockSrcAllocation, size, false);
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||
|
||||
ssh = container.getIndirectHeap(NEO::HeapType::surfaceState);
|
||||
EXPECT_EQ(nullptr, ssh);
|
||||
}
|
||||
|
||||
} // namespace ult
|
||||
} // namespace L0
|
||||
|
||||
Reference in New Issue
Block a user