Files
UnrealEngine/Engine/Plugins/Experimental/NNERuntimeIREE/Source/IREEDriverRDG/Private/IREEDriverRDGNoOpExecutableCache.cpp
Brandyn / Techy fcc1b09210 init
2026-04-04 15:40:51 -05:00

104 lines
3.9 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "IREEDriverRDGNoOpExecutableCache.h"
#ifdef WITH_IREE_DRIVER_RDG
#include "IREEDriverRDGExecutable.h"
#include "IREEDriverRDGLog.h"
namespace UE::IREE::HAL::RDG
{
namespace Private
{
class FNoOpExecutableCache
{
public:
static iree_status_t Create(iree_allocator_t HostAllocator, const TMap<FString, TArray<uint8>>* Executables, iree_hal_executable_cache_t** OutExecutableCache)
{
check(Executables);
check(OutExecutableCache);
FNoOpExecutableCache* ExecutableCache;
IREE_RETURN_IF_ERROR(iree_allocator_malloc(HostAllocator, sizeof(*ExecutableCache), (void**)&ExecutableCache));
iree_hal_resource_initialize((const void*)&FNoOpExecutableCache::VTable, &ExecutableCache->Resource);
ExecutableCache->HostAllocator = HostAllocator;
ExecutableCache->Executables = Executables;
*OutExecutableCache = (iree_hal_executable_cache_t*)ExecutableCache;
return iree_ok_status();
}
private:
static FNoOpExecutableCache* Cast(iree_hal_executable_cache_t* ExecutableCache)
{
checkf(iree_hal_resource_is(ExecutableCache, &FNoOpExecutableCache::VTable), TEXT("FNoOpExecutableCache: type does not match"));
return (FNoOpExecutableCache*)ExecutableCache;
}
static void Destroy(iree_hal_executable_cache_t* BaseExecutableCache)
{
#if IREE_DRIVER_RDG_VERBOSITY == 1
UE_LOG(LogIREEDriverRDG, Display, TEXT("%s"), StringCast<TCHAR>(__FUNCTION__).Get());
#endif
FNoOpExecutableCache* ExecutableCache = Cast(BaseExecutableCache);
iree_allocator_free(ExecutableCache->HostAllocator, ExecutableCache);
}
static bool CanPrepareFormat(iree_hal_executable_cache_t* BaseExecutableCache, iree_hal_executable_caching_mode_t CachingMode, iree_string_view_t ExecutableFormat)
{
#if IREE_DRIVER_RDG_VERBOSITY == 1
UE_LOG(LogIREEDriverRDG, Display, TEXT("%s format: %*.hs"), StringCast<TCHAR>(__FUNCTION__).Get(), (int)ExecutableFormat.size, ExecutableFormat.data);
#endif
if (iree_string_view_equal(ExecutableFormat, iree_make_cstring_view("vulkan-spirv-fb")))
{
return true;
}
// else if (iree_string_view_equal(ExecutableFormat, iree_make_cstring_view("vulkan-spirv-fb-ptr")))
// {
// return iree_all_bits_set(executable_cache->logical_device->enabled_features(), IREE_HAL_VULKAN_FEATURE_ENABLE_BUFFER_DEVICE_ADDRESSES);
// }
return false;
}
static iree_status_t PrepareExecutable(iree_hal_executable_cache_t* BaseExecutableCache, const iree_hal_executable_params_t* ExecutableParams, iree_hal_executable_t** OutExecutable)
{
#if IREE_DRIVER_RDG_VERBOSITY == 1
UE_LOG(LogIREEDriverRDG, Display, TEXT("%s"), StringCast<TCHAR>(__FUNCTION__).Get());
#endif
if (!FNoOpExecutableCache::CanPrepareFormat(BaseExecutableCache, ExecutableParams->caching_mode, ExecutableParams->executable_format))
{
return iree_make_status(IREE_STATUS_NOT_FOUND, "No executable implementation registered for the given executable format '%.*s'", (int)ExecutableParams->executable_format.size, ExecutableParams->executable_format.data);
}
FNoOpExecutableCache* ExecutableCache = Cast(BaseExecutableCache);
return ExecutableCreate(ExecutableCache->HostAllocator, ExecutableCache->Executables, ExecutableParams, OutExecutable);
}
static const iree_hal_executable_cache_vtable_t VTable;
iree_hal_resource_t Resource;
iree_allocator_t HostAllocator;
const TMap<FString, TArray<uint8>>* Executables;
};
const iree_hal_executable_cache_vtable_t FNoOpExecutableCache::VTable =
{
.destroy = FNoOpExecutableCache::Destroy,
.can_prepare_format = FNoOpExecutableCache::CanPrepareFormat,
.prepare_executable = FNoOpExecutableCache::PrepareExecutable
};
} // namespace Private
iree_status_t NoOpExecutableCacheCreate(iree_allocator_t HostAllocator, const TMap<FString, TArray<uint8>>* Executables, iree_hal_executable_cache_t** OutExecutableCache)
{
return Private::FNoOpExecutableCache::Create(HostAllocator, Executables, OutExecutableCache);
}
} // UE::IREE
#endif // WITH_IREE_DRIVER_RDG