Files
UnrealEngine/Engine/Source/Runtime/VulkanRHI/Private/VulkanLLM.h
2025-05-18 13:04:45 +08:00

84 lines
3.0 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
/*=============================================================================
VulkanLLM.h: Vulkan LLM definitions.
=============================================================================*/
#pragma once
#include "HAL/LowLevelMemTracker.h"
#include "VulkanConfiguration.h"
#if ENABLE_LOW_LEVEL_MEM_TRACKER
#if VULKAN_USE_LLM
// Add custom Tags
enum class ELLMTagVulkan : LLM_TAG_TYPE
{
VulkanMisc = (LLM_TAG_TYPE)ELLMTag::PlatformTagStart,
VulkanUniformBuffers,
VulkanBuffers,
VulkanTextures,
VulkanRenderTargets,
VulkanSpareMemoryGPU,
VulkanShaders,
VulkanFrameTemp,
VulkanStagingBuffers,
VulkanDriverMemoryCPU,
VulkanDriverMemoryGPU,
Count,
};
extern uint64 GVulkanLLMAllocationID;
#define LLM_TRACK_VULKAN_HIGH_LEVEL_ALLOC(AllocObj, Size) { AllocObj.SetLLMTrackerID(0xDEAD | (++GVulkanLLMAllocationID << 16)); FLowLevelMemTracker::Get().OnLowLevelAlloc(ELLMTracker::Default, (void*)AllocObj.GetLLMTrackerID(), Size, (ELLMTag)ELLMTagVulkan::VulkanMisc); }
#define LLM_TRACK_VULKAN_HIGH_LEVEL_FREE(AllocObj) { FLowLevelMemTracker::Get().OnLowLevelFree(ELLMTracker::Default, (void*)AllocObj.GetLLMTrackerID()); }
#define LLM_TRACK_VULKAN_SPARE_MEMORY_GPU(Size) { LLM_SCOPED_PAUSE_TRACKING_WITH_ENUM_AND_AMOUNT((ELLMTag)ELLMTagVulkan::VulkanSpareMemoryGPU, Size, ELLMTracker::Default, ELLMAllocType::None); }
#define LLM_TRACK_VULKAN_HIGH_LEVEL_ALLOCATION
static_assert((int32)ELLMTagVulkan::Count <= (int32)ELLMTag::PlatformTagEnd, "too many ELLMTagVulkan tags");
namespace VulkanLLM
{
void Initialize();
}
#else // #if VULKAN_USE_LLM
// Translate VulkanTag to regular Tag
enum class ELLMTagVulkan : LLM_TAG_TYPE
{
VulkanMisc = (LLM_TAG_TYPE)ELLMTag::RHIMisc,
VulkanUniformBuffers = (LLM_TAG_TYPE)ELLMTag::RHIMisc,
VulkanBuffers = (LLM_TAG_TYPE)ELLMTag::RHIMisc,
VulkanTextures = (LLM_TAG_TYPE)ELLMTag::Textures,
VulkanRenderTargets = (LLM_TAG_TYPE)ELLMTag::RHIMisc,
VulkanSpareMemoryGPU = (LLM_TAG_TYPE)ELLMTag::RHIMisc,
VulkanShaders = (LLM_TAG_TYPE)ELLMTag::Shaders,
VulkanFrameTemp = (LLM_TAG_TYPE)ELLMTag::RHIMisc,
VulkanStagingBuffers = (LLM_TAG_TYPE)ELLMTag::RHIMisc,
VulkanDriverMemoryCPU = (LLM_TAG_TYPE)ELLMTag::RHIMisc,
VulkanDriverMemoryGPU = (LLM_TAG_TYPE)ELLMTag::RHIMisc,
Count = (LLM_TAG_TYPE)ELLMTag::PlatformTagStart + 11,
};
#define LLM_TRACK_VULKAN_HIGH_LEVEL_ALLOC(...)
#define LLM_TRACK_VULKAN_HIGH_LEVEL_FREE(...)
#define LLM_TRACK_VULKAN_SPARE_MEMORY_GPU(...)
#endif // #if VULKAN_USE_LLM
#define LLM_SCOPE_VULKAN(Tag) LLM_SCOPE((ELLMTag)Tag)
#define LLM_PLATFORM_SCOPE_VULKAN(Tag) LLM_PLATFORM_SCOPE((ELLMTag)Tag)
static_assert((int32)ELLMTagVulkan::Count == (int32)ELLMTag::PlatformTagStart + 11, "There needs to be a 1 to 1 mapping between VulkanTag and Translation");
#else // #if ENABLE_LOW_LEVEL_MEM_TRACKER
#define LLM_SCOPE_VULKAN(...)
#define LLM_PLATFORM_SCOPE_VULKAN(...)
#define LLM_TRACK_VULKAN_HIGH_LEVEL_ALLOC(...)
#define LLM_TRACK_VULKAN_HIGH_LEVEL_FREE(...)
#define LLM_TRACK_VULKAN_SPARE_MEMORY_GPU(...)
#endif // #if ENABLE_LOW_LEVEL_MEM_TRACKER