const std = @import("std"); const vk = @import("vulkan"); pub const VkError = error{ NotReady, Timeout, EventSet, EventReset, Incomplete, OutOfHostMemory, OutOfDeviceMemory, InitializationFailed, DeviceLost, MemoryMapFailed, LayerNotPresent, ExtensionNotPresent, FeatureNotPresent, IncompatibleDriver, TooManyObjects, FormatNotSupported, FragmentedPool, Unknown, ValidationFailed, OutOfPoolMemory, InvalidExternalHandle, InvalidOpaqueCaptureAddress, Fragmentation, PipelineCompileRequired, NotPermitted, SurfaceLostKhr, NativeWindowInUseKhr, SuboptimalKhr, OutOfDateKhr, IncompatibleDisplayKhr, InvalidShaderNv, ImageUsageNotSupportedKhr, VideoPictureLayoutNotSupportedKhr, VideoProfileOperationNotSupportedKhr, VideoProfileFormatNotSupportedKhr, VideoProfileCodecNotSupportedKhr, VideoStdVersionNotSupportedKhr, InvalidDrmFormatModifierPlaneLayoutExt, FullScreenExclusiveModeLostExt, ThreadIdleKhr, ThreadDoneKhr, OperationDeferredKhr, OperationNotDeferredKhr, InvalidVideoStdParametersKhr, CompressionExhaustedExt, IncompatibleShaderBinaryExt, PipelineBinaryMissingKhr, NotEnoughSpaceKhr, // == Set of internal errors for better debugging. They map to VK_UNKNOWN_ERROR InvalidHandleDrv, InvalidPipelineDrv, InvalidDeviceMemoryDrv, }; pub inline fn errorLogger(err: VkError) void { std.log.scoped(.errorLogger).err("Error logger catched a '{s}'", .{@errorName(err)}); } pub inline fn errorLoggerContext(err: VkError, context: []const u8) void { std.log.scoped(.errorLogger).err("Error logger catched a '{s}' in {s}", .{ @errorName(err), context }); } pub inline fn toVkResult(err: VkError) vk.Result { errorLogger(err); return switch (err) { VkError.NotReady => .not_ready, VkError.Timeout => .timeout, VkError.EventSet => .event_set, VkError.EventReset => .event_reset, VkError.Incomplete => .incomplete, VkError.OutOfHostMemory => .error_out_of_host_memory, VkError.OutOfDeviceMemory => .error_out_of_device_memory, VkError.InitializationFailed => .error_initialization_failed, VkError.DeviceLost => .error_device_lost, VkError.MemoryMapFailed => .error_memory_map_failed, VkError.LayerNotPresent => .error_layer_not_present, VkError.ExtensionNotPresent => .error_extension_not_present, VkError.FeatureNotPresent => .error_feature_not_present, VkError.IncompatibleDriver => .error_incompatible_driver, VkError.TooManyObjects => .error_too_many_objects, VkError.FormatNotSupported => .error_format_not_supported, VkError.FragmentedPool => .error_fragmented_pool, VkError.ValidationFailed => .error_validation_failed, VkError.OutOfPoolMemory => .error_out_of_pool_memory, VkError.InvalidExternalHandle => .error_invalid_external_handle, VkError.InvalidOpaqueCaptureAddress => .error_invalid_opaque_capture_address, VkError.Fragmentation => .error_fragmentation, VkError.PipelineCompileRequired => .pipeline_compile_required, VkError.NotPermitted => .error_not_permitted, VkError.SurfaceLostKhr => .error_surface_lost_khr, VkError.NativeWindowInUseKhr => .error_native_window_in_use_khr, VkError.SuboptimalKhr => .suboptimal_khr, VkError.OutOfDateKhr => .error_out_of_date_khr, VkError.IncompatibleDisplayKhr => .error_incompatible_display_khr, VkError.InvalidShaderNv => .error_invalid_shader_nv, VkError.ImageUsageNotSupportedKhr => .error_image_usage_not_supported_khr, VkError.VideoPictureLayoutNotSupportedKhr => .error_video_picture_layout_not_supported_khr, VkError.VideoProfileOperationNotSupportedKhr => .error_video_profile_operation_not_supported_khr, VkError.VideoProfileFormatNotSupportedKhr => .error_video_profile_format_not_supported_khr, VkError.VideoProfileCodecNotSupportedKhr => .error_video_profile_codec_not_supported_khr, VkError.VideoStdVersionNotSupportedKhr => .error_video_std_version_not_supported_khr, VkError.InvalidDrmFormatModifierPlaneLayoutExt => .error_invalid_drm_format_modifier_plane_layout_ext, VkError.FullScreenExclusiveModeLostExt => .error_full_screen_exclusive_mode_lost_ext, VkError.ThreadIdleKhr => .thread_idle_khr, VkError.ThreadDoneKhr => .thread_done_khr, VkError.OperationDeferredKhr => .operation_deferred_khr, VkError.OperationNotDeferredKhr => .operation_not_deferred_khr, VkError.InvalidVideoStdParametersKhr => .error_invalid_video_std_parameters_khr, VkError.CompressionExhaustedExt => .error_compression_exhausted_ext, VkError.IncompatibleShaderBinaryExt => .incompatible_shader_binary_ext, VkError.PipelineBinaryMissingKhr => .pipeline_binary_missing_khr, VkError.NotEnoughSpaceKhr => .error_not_enough_space_khr, VkError.InvalidHandleDrv => .error_validation_failed, else => .error_unknown, }; }