// ============================================= // Aster: helpers.h // Copyright (c) 2020-2024 Anish Bhobe // ============================================= #pragma once #include "aster/aster.h" #include "aster/core/queue_allocation.h" #include "EASTL/span.h" #include #include struct PhysicalDevice; class PhysicalDevices; PhysicalDevice FindSuitableDevice(const PhysicalDevices &physicalDevices); QueueAllocation FindAppropriateQueueAllocation(const PhysicalDevice *physicalDevice); eastl::vector ReadFile(cstr fileName); eastl::vector ReadFileBytes(cstr fileName, bool errorOnFail = true); bool WriteFileBytes(cstr fileName, eastl::span data); template using StackString = eastl::fixed_string; #define AbortIfFailed(RESULT) \ do \ { \ vk::Result _checkResultValue_; \ ERROR_IF(Failed(_checkResultValue_ = Cast(RESULT)), "Cause: {}", _checkResultValue_) \ THEN_ABORT(_checkResultValue_); \ } while (false) #define AbortIfFailedMV(RESULT, MSG, EXTRA) \ do \ { \ vk::Result _checkResultValue_; \ ERROR_IF(Failed(_checkResultValue_ = Cast(RESULT)), MSG " Cause: {}", EXTRA, _checkResultValue_) \ THEN_ABORT(_checkResultValue_); \ } while (false) #define AbortIfFailedM(RESULT, MSG) \ do \ { \ auto _checkResultValue_ = Cast(RESULT); \ ERROR_IF(Failed(_checkResultValue_), MSG " Cause: {}", _checkResultValue_) THEN_ABORT(_checkResultValue_); \ } while (false)