From 1e11d8939f5aee62ff20baf6f477c9cafc1816f8 Mon Sep 17 00:00:00 2001 From: Mateusz Jablonski Date: Mon, 15 Apr 2019 13:10:26 +0200 Subject: [PATCH] Add new allocation type for device queue's allocatons remove not used mustBeZeroCopy flag Related-To: NEO-2733 Change-Id: I8b8faf4e2d46249f897a06170dd777193c7f8729 Signed-off-by: Mateusz Jablonski --- runtime/device_queue/device_queue.cpp | 12 +++--- runtime/memory_manager/graphics_allocation.h | 1 + runtime/memory_manager/memory_manager.cpp | 26 +++---------- runtime/memory_manager/memory_manager.h | 3 +- .../os_interface/debug_settings_manager.cpp | 2 + ...nager_allocate_in_preferred_pool_tests.inl | 14 ++++--- .../debug_settings_manager_tests.cpp | 37 ++++++++++--------- 7 files changed, 43 insertions(+), 52 deletions(-) diff --git a/runtime/device_queue/device_queue.cpp b/runtime/device_queue/device_queue.cpp index 000c136be6..da472b2058 100644 --- a/runtime/device_queue/device_queue.cpp +++ b/runtime/device_queue/device_queue.cpp @@ -99,21 +99,21 @@ void DeviceQueue::allocateResources() { auto &caps = device->getDeviceInfo(); uint32_t alignedQueueSize = alignUp(queueSize, MemoryConstants::pageSize); - queueBuffer = device->getMemoryManager()->allocateGraphicsMemoryWithProperties({alignedQueueSize, GraphicsAllocation::AllocationType::UNDECIDED}); + queueBuffer = device->getMemoryManager()->allocateGraphicsMemoryWithProperties({alignedQueueSize, GraphicsAllocation::AllocationType::DEVICE_QUEUE_BUFFER}); auto eventPoolBufferSize = static_cast(caps.maxOnDeviceEvents) * sizeof(IGIL_DeviceEvent) + sizeof(IGIL_EventPool); eventPoolBufferSize = alignUp(eventPoolBufferSize, MemoryConstants::pageSize); - eventPoolBuffer = device->getMemoryManager()->allocateGraphicsMemoryWithProperties({eventPoolBufferSize, GraphicsAllocation::AllocationType::UNDECIDED}); + eventPoolBuffer = device->getMemoryManager()->allocateGraphicsMemoryWithProperties({eventPoolBufferSize, GraphicsAllocation::AllocationType::DEVICE_QUEUE_BUFFER}); auto maxEnqueue = static_cast(alignedQueueSize) / sizeof(IGIL_CommandHeader); auto expectedStackSize = maxEnqueue * sizeof(uint32_t) * 3; // 3 full loads of commands expectedStackSize = alignUp(expectedStackSize, MemoryConstants::pageSize); - stackBuffer = device->getMemoryManager()->allocateGraphicsMemoryWithProperties({expectedStackSize, GraphicsAllocation::AllocationType::UNDECIDED}); + stackBuffer = device->getMemoryManager()->allocateGraphicsMemoryWithProperties({expectedStackSize, GraphicsAllocation::AllocationType::DEVICE_QUEUE_BUFFER}); memset(stackBuffer->getUnderlyingBuffer(), 0, stackBuffer->getUnderlyingBufferSize()); auto queueStorageSize = alignedQueueSize * 2; // place for 2 full loads of queue_t queueStorageSize = alignUp(queueStorageSize, MemoryConstants::pageSize); - queueStorageBuffer = device->getMemoryManager()->allocateGraphicsMemoryWithProperties({queueStorageSize, GraphicsAllocation::AllocationType::UNDECIDED}); + queueStorageBuffer = device->getMemoryManager()->allocateGraphicsMemoryWithProperties({queueStorageSize, GraphicsAllocation::AllocationType::DEVICE_QUEUE_BUFFER}); memset(queueStorageBuffer->getUnderlyingBuffer(), 0, queueStorageBuffer->getUnderlyingBufferSize()); auto &hwHelper = HwHelper::get(device->getHardwareInfo().pPlatform->eRenderCoreFamily); @@ -122,9 +122,9 @@ void DeviceQueue::allocateResources() { // Additional padding of PAGE_SIZE for PageFaults just after DSH to satisfy hw requirements auto dshSize = (PARALLEL_SCHEDULER_HW_GROUPS + 2) * MAX_DSH_SIZE_PER_ENQUEUE * 8 + IDTSize + colorCalcStateSize + MemoryConstants::pageSize; dshSize = alignUp(dshSize, MemoryConstants::pageSize); - dshBuffer = device->getMemoryManager()->allocateGraphicsMemoryWithProperties({dshSize, GraphicsAllocation::AllocationType::UNDECIDED}); + dshBuffer = device->getMemoryManager()->allocateGraphicsMemoryWithProperties({dshSize, GraphicsAllocation::AllocationType::DEVICE_QUEUE_BUFFER}); - debugQueue = device->getMemoryManager()->allocateGraphicsMemoryWithProperties({MemoryConstants::pageSize, GraphicsAllocation::AllocationType::UNDECIDED}); + debugQueue = device->getMemoryManager()->allocateGraphicsMemoryWithProperties({MemoryConstants::pageSize, GraphicsAllocation::AllocationType::DEVICE_QUEUE_BUFFER}); debugData = (DebugDataBuffer *)debugQueue->getUnderlyingBuffer(); memset(debugQueue->getUnderlyingBuffer(), 0, debugQueue->getUnderlyingBufferSize()); } diff --git a/runtime/memory_manager/graphics_allocation.h b/runtime/memory_manager/graphics_allocation.h index 268788a57e..5a4fa40def 100644 --- a/runtime/memory_manager/graphics_allocation.h +++ b/runtime/memory_manager/graphics_allocation.h @@ -45,6 +45,7 @@ class GraphicsAllocation : public IDNode { BUFFER_HOST_MEMORY, COMMAND_BUFFER, CONSTANT_SURFACE, + DEVICE_QUEUE_BUFFER, EXTERNAL_HOST_PTR, FILL_PATTERN, GLOBAL_SURFACE, diff --git a/runtime/memory_manager/memory_manager.cpp b/runtime/memory_manager/memory_manager.cpp index c994358d5f..9676eb1b66 100644 --- a/runtime/memory_manager/memory_manager.cpp +++ b/runtime/memory_manager/memory_manager.cpp @@ -212,7 +212,6 @@ bool MemoryManager::getAllocationData(AllocationData &allocationData, const Allo bool allow64KbPages = false; bool allow32Bit = false; bool forcePin = properties.flags.forcePin; - bool mustBeZeroCopy = false; bool mayRequireL3Flush = false; switch (properties.allocationType) { @@ -248,20 +247,6 @@ bool MemoryManager::getAllocationData(AllocationData &allocationData, const Allo break; } - switch (properties.allocationType) { - case GraphicsAllocation::AllocationType::BUFFER_HOST_MEMORY: - case GraphicsAllocation::AllocationType::CONSTANT_SURFACE: - case GraphicsAllocation::AllocationType::EXTERNAL_HOST_PTR: - case GraphicsAllocation::AllocationType::GLOBAL_SURFACE: - case GraphicsAllocation::AllocationType::PIPE: - case GraphicsAllocation::AllocationType::PRINTF_SURFACE: - case GraphicsAllocation::AllocationType::SVM_CPU: - case GraphicsAllocation::AllocationType::SVM_ZERO_COPY: - mustBeZeroCopy = true; - default: - break; - } - switch (properties.allocationType) { case GraphicsAllocation::AllocationType::BUFFER: case GraphicsAllocation::AllocationType::BUFFER_COMPRESSED: @@ -283,8 +268,14 @@ bool MemoryManager::getAllocationData(AllocationData &allocationData, const Allo } switch (properties.allocationType) { + case GraphicsAllocation::AllocationType::BUFFER_HOST_MEMORY: + case GraphicsAllocation::AllocationType::CONSTANT_SURFACE: + case GraphicsAllocation::AllocationType::DEVICE_QUEUE_BUFFER: case GraphicsAllocation::AllocationType::EXTERNAL_HOST_PTR: case GraphicsAllocation::AllocationType::FILL_PATTERN: + case GraphicsAllocation::AllocationType::GLOBAL_SURFACE: + case GraphicsAllocation::AllocationType::PIPE: + case GraphicsAllocation::AllocationType::PRINTF_SURFACE: case GraphicsAllocation::AllocationType::PROFILING_TAG_BUFFER: case GraphicsAllocation::AllocationType::SVM_CPU: case GraphicsAllocation::AllocationType::SVM_ZERO_COPY: @@ -296,7 +287,6 @@ bool MemoryManager::getAllocationData(AllocationData &allocationData, const Allo } allocationData.flags.requiresCpuAccess = GraphicsAllocation::isCpuAccessRequired(properties.allocationType); - allocationData.flags.mustBeZeroCopy = mustBeZeroCopy; allocationData.flags.allocateMemory = properties.flags.allocateMemory; allocationData.flags.allow32Bit = allow32Bit; allocationData.flags.allow64kbPages = allow64KbPages; @@ -307,10 +297,6 @@ bool MemoryManager::getAllocationData(AllocationData &allocationData, const Allo allocationData.flags.preferRenderCompressed = GraphicsAllocation::AllocationType::BUFFER_COMPRESSED == properties.allocationType; allocationData.flags.multiOsContextCapable = properties.flags.multiOsContextCapable; - if (allocationData.flags.mustBeZeroCopy) { - allocationData.flags.useSystemMemory = true; - } - allocationData.hostPtr = hostPtr; allocationData.size = properties.size; allocationData.type = properties.allocationType; diff --git a/runtime/memory_manager/memory_manager.h b/runtime/memory_manager/memory_manager.h index ab650c577b..fc57cf04df 100644 --- a/runtime/memory_manager/memory_manager.h +++ b/runtime/memory_manager/memory_manager.h @@ -160,7 +160,6 @@ class MemoryManager { struct AllocationData { union { struct { - uint32_t mustBeZeroCopy : 1; uint32_t allocateMemory : 1; uint32_t allow64kbPages : 1; uint32_t allow32Bit : 1; @@ -171,7 +170,7 @@ class MemoryManager { uint32_t preferRenderCompressed : 1; uint32_t multiOsContextCapable : 1; uint32_t requiresCpuAccess : 1; - uint32_t reserved : 21; + uint32_t reserved : 22; } flags; uint32_t allFlags = 0; }; diff --git a/runtime/os_interface/debug_settings_manager.cpp b/runtime/os_interface/debug_settings_manager.cpp index 453867c57a..edb6e1afcc 100644 --- a/runtime/os_interface/debug_settings_manager.cpp +++ b/runtime/os_interface/debug_settings_manager.cpp @@ -317,6 +317,8 @@ const char *DebugSettingsManager::getAllocationTypeString(GraphicsAl return "COMMAND_BUFFER"; case GraphicsAllocation::AllocationType::CONSTANT_SURFACE: return "CONSTANT_SURFACE"; + case GraphicsAllocation::AllocationType::DEVICE_QUEUE_BUFFER: + return "DEVICE_QUEUE_BUFFER"; case GraphicsAllocation::AllocationType::EXTERNAL_HOST_PTR: return "EXTERNAL_HOST_PTR"; case GraphicsAllocation::AllocationType::FILL_PATTERN: diff --git a/unit_tests/memory_manager/memory_manager_allocate_in_preferred_pool_tests.inl b/unit_tests/memory_manager/memory_manager_allocate_in_preferred_pool_tests.inl index 3c34ed4f3e..a61e3abe2b 100644 --- a/unit_tests/memory_manager/memory_manager_allocate_in_preferred_pool_tests.inl +++ b/unit_tests/memory_manager/memory_manager_allocate_in_preferred_pool_tests.inl @@ -26,19 +26,17 @@ TEST(MemoryManagerGetAlloctionDataTest, givenHostMemoryAllocationTypeAndAllocate AllocationProperties properties(true, 10, GraphicsAllocation::AllocationType::BUFFER_HOST_MEMORY); MockMemoryManager::getAllocationData(allocData, properties, {}, nullptr); - EXPECT_TRUE(allocData.flags.mustBeZeroCopy); EXPECT_TRUE(allocData.flags.useSystemMemory); EXPECT_EQ(10u, allocData.size); EXPECT_EQ(nullptr, allocData.hostPtr); } -TEST(MemoryManagerGetAlloctionDataTest, givenNonHostMemoryAllocatoinTypeWhenAllocationDataIsQueriedThenMustBeZeroCopyAndUseSystemMemoryFlagsAreNotSet) { +TEST(MemoryManagerGetAlloctionDataTest, givenNonHostMemoryAllocatoinTypeWhenAllocationDataIsQueriedThenUseSystemMemoryFlagsIsNotSet) { AllocationData allocData; AllocationProperties properties(true, 10, GraphicsAllocation::AllocationType::BUFFER); MockMemoryManager::getAllocationData(allocData, properties, {}, nullptr); - EXPECT_FALSE(allocData.flags.mustBeZeroCopy); EXPECT_FALSE(allocData.flags.useSystemMemory); EXPECT_EQ(10u, allocData.size); EXPECT_EQ(nullptr, allocData.hostPtr); @@ -345,10 +343,9 @@ TEST(MemoryManagerTest, givenMemoryManagerWhenBufferTypeIsPassedAndAllocateInDev memoryManager.freeGraphicsMemory(allocation); } -TEST(MemoryManagerTest, givenSvmAllocationTypeWhenGetAllocationDataIsCalledThenZeroCopyIsRequested) { +TEST(MemoryManagerTest, givenSvmAllocationTypeWhenGetAllocationDataIsCalledThenAllocatingMemoryIsRequested) { AllocationData allocData; MockMemoryManager::getAllocationData(allocData, {1, GraphicsAllocation::AllocationType::SVM_ZERO_COPY}, {}, nullptr); - EXPECT_TRUE(allocData.flags.mustBeZeroCopy); EXPECT_TRUE(allocData.flags.allocateMemory); } @@ -371,6 +368,12 @@ TEST(MemoryManagerTest, givenTagBufferTypeWhenGetAllocationDataIsCalledThenSyste EXPECT_TRUE(allocData.flags.useSystemMemory); } +TEST(MemoryManagerTest, givenDeviceQueueBufferTypeWhenGetAllocationDataIsCalledThenSystemMemoryIsRequested) { + AllocationData allocData; + MockMemoryManager::getAllocationData(allocData, {1, GraphicsAllocation::AllocationType::DEVICE_QUEUE_BUFFER}, {}, nullptr); + EXPECT_TRUE(allocData.flags.useSystemMemory); +} + TEST(MemoryManagerTest, givenFillPatternTypeWhenGetAllocationDataIsCalledThenSystemMemoryIsRequested) { AllocationData allocData; MockMemoryManager::getAllocationData(allocData, {1, GraphicsAllocation::AllocationType::FILL_PATTERN}, {}, nullptr); @@ -461,7 +464,6 @@ TEST(MemoryManagerTest, givenExternalHostMemoryWhenGetAllocationDataIsCalledThen auto hostPtr = reinterpret_cast(0x1234); MockMemoryManager::getAllocationData(allocData, {false, 1, GraphicsAllocation::AllocationType::EXTERNAL_HOST_PTR}, {}, hostPtr); EXPECT_TRUE(allocData.flags.useSystemMemory); - EXPECT_TRUE(allocData.flags.mustBeZeroCopy); EXPECT_FALSE(allocData.flags.allocateMemory); EXPECT_FALSE(allocData.flags.allow32Bit); EXPECT_FALSE(allocData.flags.allow64kbPages); diff --git a/unit_tests/os_interface/debug_settings_manager_tests.cpp b/unit_tests/os_interface/debug_settings_manager_tests.cpp index 95b7ce28fd..757815454e 100644 --- a/unit_tests/os_interface/debug_settings_manager_tests.cpp +++ b/unit_tests/os_interface/debug_settings_manager_tests.cpp @@ -892,32 +892,33 @@ struct AllocationTypeTestCase { }; AllocationTypeTestCase allocationTypeValues[] = { - {GraphicsAllocation::AllocationType::UNKNOWN, "UNKNOWN"}, + {GraphicsAllocation::AllocationType::BUFFER, "BUFFER"}, {GraphicsAllocation::AllocationType::BUFFER_COMPRESSED, "BUFFER_COMPRESSED"}, {GraphicsAllocation::AllocationType::BUFFER_HOST_MEMORY, "BUFFER_HOST_MEMORY"}, - {GraphicsAllocation::AllocationType::BUFFER, "BUFFER"}, - {GraphicsAllocation::AllocationType::IMAGE, "IMAGE"}, - {GraphicsAllocation::AllocationType::TAG_BUFFER, "TAG_BUFFER"}, - {GraphicsAllocation::AllocationType::LINEAR_STREAM, "LINEAR_STREAM"}, - {GraphicsAllocation::AllocationType::FILL_PATTERN, "FILL_PATTERN"}, - {GraphicsAllocation::AllocationType::PIPE, "PIPE"}, - {GraphicsAllocation::AllocationType::TIMESTAMP_PACKET_TAG_BUFFER, "TIMESTAMP_PACKET_TAG_BUFFER"}, - {GraphicsAllocation::AllocationType::PROFILING_TAG_BUFFER, "PROFILING_TAG_BUFFER"}, {GraphicsAllocation::AllocationType::COMMAND_BUFFER, "COMMAND_BUFFER"}, - {GraphicsAllocation::AllocationType::PRINTF_SURFACE, "PRINTF_SURFACE"}, - {GraphicsAllocation::AllocationType::GLOBAL_SURFACE, "GLOBAL_SURFACE"}, - {GraphicsAllocation::AllocationType::PRIVATE_SURFACE, "PRIVATE_SURFACE"}, {GraphicsAllocation::AllocationType::CONSTANT_SURFACE, "CONSTANT_SURFACE"}, - {GraphicsAllocation::AllocationType::SCRATCH_SURFACE, "SCRATCH_SURFACE"}, - {GraphicsAllocation::AllocationType::INSTRUCTION_HEAP, "INSTRUCTION_HEAP"}, + {GraphicsAllocation::AllocationType::DEVICE_QUEUE_BUFFER, "DEVICE_QUEUE_BUFFER"}, + {GraphicsAllocation::AllocationType::EXTERNAL_HOST_PTR, "EXTERNAL_HOST_PTR"}, + {GraphicsAllocation::AllocationType::FILL_PATTERN, "FILL_PATTERN"}, + {GraphicsAllocation::AllocationType::GLOBAL_SURFACE, "GLOBAL_SURFACE"}, + {GraphicsAllocation::AllocationType::IMAGE, "IMAGE"}, {GraphicsAllocation::AllocationType::INDIRECT_OBJECT_HEAP, "INDIRECT_OBJECT_HEAP"}, - {GraphicsAllocation::AllocationType::SURFACE_STATE_HEAP, "SURFACE_STATE_HEAP"}, + {GraphicsAllocation::AllocationType::INSTRUCTION_HEAP, "INSTRUCTION_HEAP"}, + {GraphicsAllocation::AllocationType::LINEAR_STREAM, "LINEAR_STREAM"}, + {GraphicsAllocation::AllocationType::PIPE, "PIPE"}, + {GraphicsAllocation::AllocationType::PRINTF_SURFACE, "PRINTF_SURFACE"}, + {GraphicsAllocation::AllocationType::PRIVATE_SURFACE, "PRIVATE_SURFACE"}, + {GraphicsAllocation::AllocationType::PROFILING_TAG_BUFFER, "PROFILING_TAG_BUFFER"}, + {GraphicsAllocation::AllocationType::SCRATCH_SURFACE, "SCRATCH_SURFACE"}, {GraphicsAllocation::AllocationType::SHARED_RESOURCE_COPY, "SHARED_RESOURCE_COPY"}, - {GraphicsAllocation::AllocationType::SVM_ZERO_COPY, "SVM_ZERO_COPY"}, + {GraphicsAllocation::AllocationType::SURFACE_STATE_HEAP, "SURFACE_STATE_HEAP"}, {GraphicsAllocation::AllocationType::SVM_CPU, "SVM_CPU"}, {GraphicsAllocation::AllocationType::SVM_GPU, "SVM_GPU"}, - {GraphicsAllocation::AllocationType::EXTERNAL_HOST_PTR, "EXTERNAL_HOST_PTR"}, - {GraphicsAllocation::AllocationType::UNDECIDED, "UNDECIDED"}}; + {GraphicsAllocation::AllocationType::SVM_ZERO_COPY, "SVM_ZERO_COPY"}, + {GraphicsAllocation::AllocationType::TAG_BUFFER, "TAG_BUFFER"}, + {GraphicsAllocation::AllocationType::TIMESTAMP_PACKET_TAG_BUFFER, "TIMESTAMP_PACKET_TAG_BUFFER"}, + {GraphicsAllocation::AllocationType::UNDECIDED, "UNDECIDED"}, + {GraphicsAllocation::AllocationType::UNKNOWN, "UNKNOWN"}}; class AllocationTypeLogging : public ::testing::TestWithParam {};