From 0ab6581fe9a9162eca0a421e2821fa9b2c3b3226 Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Fri, 29 May 2026 16:42:06 +0200 Subject: [PATCH] new identity --- .gitignore | 1 + README.md | 6 +- build.zig | 2 +- logo.png | Bin 0 -> 113000 bytes src/soft/SoftPhysicalDevice.zig | 2 +- src/soft/device/blitter.zig | 5 +- src/soft/lib.zig | 2 +- src/vulkan/lib.zig | 5 +- src/vulkan/lib_vulkan.zig | 324 +++++++++++++-------------- src/vulkan/logger.zig | 2 +- src/vulkan/wsi/WaylandSurfaceKHR.zig | 2 +- 11 files changed, 173 insertions(+), 178 deletions(-) create mode 100644 logo.png diff --git a/.gitignore b/.gitignore index 7b3f86f..dcd4970 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ scripts/__pycache__/ .gdb_history *.json *.png +!logo.png *.bin *.qpa *.xml diff --git a/README.md b/README.md index 446b1a3..83b67b8 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# Stroll Vulkan ICD +# Ape Vulkan ICD - + -A driver as slow as Lance Stroll. +For I feel as an ape, smiting sticks together in the vain hope of forging a driver. Here lies the source code of a rather calamitous attempt at the Vulkan specification, shaped into an Installable Client Driver all written in Zig. diff --git a/build.zig b/build.zig index 9f53a93..0e323b6 100644 --- a/build.zig +++ b/build.zig @@ -108,7 +108,7 @@ pub fn build(b: *std.Build) !void { } const icd_file = b.addWriteFile( - b.getInstallPath(.lib, b.fmt("vk_stroll_{s}.json", .{impl.name})), + b.getInstallPath(.lib, b.fmt("vk_ape_{s}.json", .{impl.name})), b.fmt( \\{{ \\ "file_format_version": "1.0.1", diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ff0f90e826743565d7d665a213596125d67e777c GIT binary patch literal 113000 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 V2mZ<$<>cjJ`U3qkIa*(J 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

L)?mU{W3B0NaytWCt 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 V!gp|-n<3ywQ%y&;TG=+@{{aGz{j&f7 literal 0 HcmV?d00001 diff --git a/src/soft/SoftPhysicalDevice.zig b/src/soft/SoftPhysicalDevice.zig index 89c64c3..919433a 100644 --- a/src/soft/SoftPhysicalDevice.zig +++ b/src/soft/SoftPhysicalDevice.zig @@ -243,7 +243,7 @@ pub fn create(allocator: std.mem.Allocator, instance: *base.Instance) VkError!*S defer command_allocator.free(name); var writer = std.Io.Writer.fixed(device_name[0 .. vk.MAX_PHYSICAL_DEVICE_NAME_SIZE - 1]); - writer.print("{s} [" ++ lib.DRIVER_NAME ++ " StrollDriver]", .{name}) catch return VkError.InitializationFailed; + writer.print("{s} [" ++ lib.DRIVER_NAME ++ " ApeDriver]", .{name}) catch return VkError.InitializationFailed; } @memcpy(&interface.props.device_name, &device_name); diff --git a/src/soft/device/blitter.zig b/src/soft/device/blitter.zig index ac22690..f3da1e9 100644 --- a/src/soft/device/blitter.zig +++ b/src/soft/device/blitter.zig @@ -1013,10 +1013,7 @@ pub fn writeFloat4(c: F32x4, map: []u8, dst_format: vk.Format) void { (@as(u32, a) << 30); }, - .r32g32b32a32_uint => { - std.debug.print("{}\n", .{@as(@Vector(4, f64), color) * @as(@Vector(4, f64), @splat(std.math.maxInt(u32)))}); - std.mem.bytesAsValue(U32x4, map).* = @intFromFloat(@round(@as(@Vector(4, f64), color) * @as(@Vector(4, f64), @splat(std.math.maxInt(u32))))); - }, + .r32g32b32a32_uint => std.mem.bytesAsValue(U32x4, map).* = @intFromFloat(@round(@as(@Vector(4, f64), color) * @as(@Vector(4, f64), @splat(std.math.maxInt(u32))))), .r32g32b32a32_sfloat => std.mem.bytesAsValue(F32x4, map).* = color, diff --git a/src/soft/lib.zig b/src/soft/lib.zig index 77d101b..55d8a48 100644 --- a/src/soft/lib.zig +++ b/src/soft/lib.zig @@ -68,7 +68,7 @@ pub const MAX_IMAGE_LEVELS_3D = 12; pub const MAX_IMAGE_LEVELS_CUBE = 15; pub const MAX_IMAGE_ARRAY_LAYERS = 2048; -pub const PHYSICAL_DEVICE_DEFAULT_NAME = "StrollSoft device"; +pub const PHYSICAL_DEVICE_DEFAULT_NAME = "Ape software device"; pub const PHYSICAL_DEVICE_FALLBACK_HEAP_SIZE = 0x10000000; // 256MB pub const std_options = base.std_options; diff --git a/src/vulkan/lib.zig b/src/vulkan/lib.zig index 3eb54d1..12bee5f 100644 --- a/src/vulkan/lib.zig +++ b/src/vulkan/lib.zig @@ -54,11 +54,8 @@ pub const SwapchainKHR = @import("wsi/SwapchainKHR.zig"); pub const VULKAN_VENDOR_ID = @typeInfo(vk.VendorId).@"enum".fields[@typeInfo(vk.VendorId).@"enum".fields.len - 1].value + 1; -pub const DRIVER_DEBUG_ALLOCATOR_ENV_NAME = "STROLL_DEBUG_ALLOCATOR"; -pub const DRIVER_LOGS_ENV_NAME = "STROLL_LOGS_LEVEL"; - /// Default driver name -pub const DRIVER_NAME = "Unnamed Stroll Driver"; +pub const DRIVER_NAME = "Unnamed Ape Driver"; /// Default Vulkan version pub const VULKAN_VERSION = vk.makeApiVersion(0, 1, 0, 0); diff --git a/src/vulkan/lib_vulkan.zig b/src/vulkan/lib_vulkan.zig index cb46b1b..4fa74a0 100644 --- a/src/vulkan/lib_vulkan.zig +++ b/src/vulkan/lib_vulkan.zig @@ -59,13 +59,13 @@ inline fn notImplementedWarning() void { } fn functionMapEntryPoint(comptime name: []const u8) struct { []const u8, vk.PfnVoidFunction } { - // Mapping 'vkFnName' to 'strollFnName' - const stroll_name = std.fmt.comptimePrint("stroll{s}", .{name[2..]}); + // Mapping 'vkFnName' to 'apeFnName' + const ape_name = std.fmt.comptimePrint("ape{s}", .{name[2..]}); return if (std.meta.hasFn(@This(), name)) .{ name, @as(vk.PfnVoidFunction, @ptrCast(&@field(@This(), name))) } - else if (std.meta.hasFn(@This(), stroll_name)) - .{ name, @as(vk.PfnVoidFunction, @ptrCast(&@field(@This(), stroll_name))) } + else if (std.meta.hasFn(@This(), ape_name)) + .{ name, @as(vk.PfnVoidFunction, @ptrCast(&@field(@This(), ape_name))) } else @compileError("Invalid entry point name"); } @@ -252,7 +252,7 @@ const device_pfn_map = block: { // ICD Interface ============================================================================================================================================= -pub export fn stroll_icdNegotiateLoaderICDInterfaceVersion(p_version: *u32) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn ape_icdNegotiateLoaderICDInterfaceVersion(p_version: *u32) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vk_icdNegociateLoaderICDInterfaceVersion); defer entryPointEndLogTrace(); @@ -270,7 +270,7 @@ pub export fn vk_icdGetInstanceProcAddr(p_instance: vk.Instance, p_name: ?[*:0]c return vkGetInstanceProcAddr(p_instance, p_name); } -pub export fn stroll_icdGetPhysicalDeviceProcAddr(_: vk.Instance, p_name: ?[*:0]const u8) callconv(vk.vulkan_call_conv) vk.PfnVoidFunction { +pub export fn ape_icdGetPhysicalDeviceProcAddr(_: vk.Instance, p_name: ?[*:0]const u8) callconv(vk.vulkan_call_conv) vk.PfnVoidFunction { defer entryPointEndLogTrace(); if (p_name == null) return null; @@ -298,7 +298,7 @@ pub export fn vkGetInstanceProcAddr(p_instance: vk.Instance, p_name: ?[*:0]const return null; } -pub export fn strollCreateInstance(info: *const vk.InstanceCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_instance: *vk.Instance) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeCreateInstance(info: *const vk.InstanceCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_instance: *vk.Instance) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkCreateInstance); defer entryPointEndLogTrace(); @@ -318,7 +318,7 @@ pub export fn strollCreateInstance(info: *const vk.InstanceCreateInfo, callbacks return .success; } -pub export fn strollEnumerateInstanceLayerProperties(property_count: *u32, properties: ?[*]vk.LayerProperties) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeEnumerateInstanceLayerProperties(property_count: *u32, properties: ?[*]vk.LayerProperties) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkEnumerateInstanceLayerProperties); defer entryPointEndLogTrace(); @@ -326,7 +326,7 @@ pub export fn strollEnumerateInstanceLayerProperties(property_count: *u32, prope return .success; } -pub export fn strollEnumerateInstanceExtensionProperties(p_layer_name: ?[*:0]const u8, property_count: *u32, properties: ?[*]vk.ExtensionProperties) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeEnumerateInstanceExtensionProperties(p_layer_name: ?[*:0]const u8, property_count: *u32, properties: ?[*]vk.ExtensionProperties) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkEnumerateInstanceExtensionProperties); defer entryPointEndLogTrace(); @@ -339,7 +339,7 @@ pub export fn strollEnumerateInstanceExtensionProperties(p_layer_name: ?[*:0]con } /// Do not make it available to GetProcAddr until Vulkan 1.1 is implemented -pub export fn strollEnumerateInstanceVersion(version: *u32) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeEnumerateInstanceVersion(version: *u32) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkEnumerateInstanceVersion); defer entryPointEndLogTrace(); @@ -349,7 +349,7 @@ pub export fn strollEnumerateInstanceVersion(version: *u32) callconv(vk.vulkan_c // Instance functions ======================================================================================================================================== -pub export fn strollDestroyInstance(p_instance: vk.Instance, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { +pub export fn apeDestroyInstance(p_instance: vk.Instance, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkDestroyInstance); defer entryPointEndLogTrace(); @@ -359,7 +359,7 @@ pub export fn strollDestroyInstance(p_instance: vk.Instance, callbacks: ?*const dispatchable.destroy(allocator); } -pub export fn strollEnumeratePhysicalDevices(p_instance: vk.Instance, count: *u32, p_devices: ?[*]vk.PhysicalDevice) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeEnumeratePhysicalDevices(p_instance: vk.Instance, count: *u32, p_devices: ?[*]vk.PhysicalDevice) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkEnumeratePhysicalDevices); defer entryPointEndLogTrace(); @@ -375,7 +375,7 @@ pub export fn strollEnumeratePhysicalDevices(p_instance: vk.Instance, count: *u3 // Physical Device functions ================================================================================================================================= -pub export fn strollCreateDevice(p_physical_device: vk.PhysicalDevice, info: *const vk.DeviceCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_device: *vk.Device) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeCreateDevice(p_physical_device: vk.PhysicalDevice, info: *const vk.DeviceCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_device: *vk.Device) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkCreateDevice); defer entryPointEndLogTrace(); @@ -393,7 +393,7 @@ pub export fn strollCreateDevice(p_physical_device: vk.PhysicalDevice, info: *co return .success; } -pub export fn strollEnumerateDeviceLayerProperties(p_physical_device: vk.PhysicalDevice, property_count: *u32, properties: ?[*]vk.LayerProperties) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeEnumerateDeviceLayerProperties(p_physical_device: vk.PhysicalDevice, property_count: *u32, properties: ?[*]vk.LayerProperties) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkEnumerateDeviceLayerProperties); defer entryPointEndLogTrace(); @@ -402,7 +402,7 @@ pub export fn strollEnumerateDeviceLayerProperties(p_physical_device: vk.Physica return .success; } -pub export fn strollEnumerateDeviceExtensionProperties(p_physical_device: vk.PhysicalDevice, p_layer_name: ?[*:0]const u8, property_count: *u32, properties: ?[*]vk.ExtensionProperties) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeEnumerateDeviceExtensionProperties(p_physical_device: vk.PhysicalDevice, p_layer_name: ?[*:0]const u8, property_count: *u32, properties: ?[*]vk.ExtensionProperties) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkEnumerateDeviceExtensionProperties); defer entryPointEndLogTrace(); @@ -415,7 +415,7 @@ pub export fn strollEnumerateDeviceExtensionProperties(p_physical_device: vk.Phy return .success; } -pub export fn strollGetPhysicalDeviceFormatProperties(p_physical_device: vk.PhysicalDevice, format: vk.Format, properties: *vk.FormatProperties) callconv(vk.vulkan_call_conv) void { +pub export fn apeGetPhysicalDeviceFormatProperties(p_physical_device: vk.PhysicalDevice, format: vk.Format, properties: *vk.FormatProperties) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkGetPhysicalDeviceFormatProperties); defer entryPointEndLogTrace(); @@ -423,7 +423,7 @@ pub export fn strollGetPhysicalDeviceFormatProperties(p_physical_device: vk.Phys properties.* = physical_device.getFormatProperties(format) catch |err| return errorLogger(err); } -pub export fn strollGetPhysicalDeviceFormatProperties2KHR(p_physical_device: vk.PhysicalDevice, format: vk.Format, properties: *vk.FormatProperties2KHR) callconv(vk.vulkan_call_conv) void { +pub export fn apeGetPhysicalDeviceFormatProperties2KHR(p_physical_device: vk.PhysicalDevice, format: vk.Format, properties: *vk.FormatProperties2KHR) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkGetPhysicalDeviceFormatProperties2KHR); defer entryPointEndLogTrace(); @@ -433,7 +433,7 @@ pub export fn strollGetPhysicalDeviceFormatProperties2KHR(p_physical_device: vk. properties.format_properties = physical_device.getFormatProperties(format) catch |err| return errorLogger(err); } -pub export fn strollGetPhysicalDeviceFeatures(p_physical_device: vk.PhysicalDevice, features: *vk.PhysicalDeviceFeatures) callconv(vk.vulkan_call_conv) void { +pub export fn apeGetPhysicalDeviceFeatures(p_physical_device: vk.PhysicalDevice, features: *vk.PhysicalDeviceFeatures) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkGetPhysicalDeviceFeatures); defer entryPointEndLogTrace(); @@ -441,7 +441,7 @@ pub export fn strollGetPhysicalDeviceFeatures(p_physical_device: vk.PhysicalDevi features.* = physical_device.features; } -pub export fn strollGetPhysicalDeviceFeatures2KHR(p_physical_device: vk.PhysicalDevice, features: *vk.PhysicalDeviceFeatures2KHR) callconv(vk.vulkan_call_conv) void { +pub export fn apeGetPhysicalDeviceFeatures2KHR(p_physical_device: vk.PhysicalDevice, features: *vk.PhysicalDeviceFeatures2KHR) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkGetPhysicalDeviceFeatures2KHR); defer entryPointEndLogTrace(); @@ -451,7 +451,7 @@ pub export fn strollGetPhysicalDeviceFeatures2KHR(p_physical_device: vk.Physical features.features = physical_device.features; } -pub export fn strollGetPhysicalDeviceImageFormatProperties( +pub export fn apeGetPhysicalDeviceImageFormatProperties( p_physical_device: vk.PhysicalDevice, format: vk.Format, image_type: vk.ImageType, @@ -468,7 +468,7 @@ pub export fn strollGetPhysicalDeviceImageFormatProperties( return .success; } -pub export fn strollGetPhysicalDeviceImageFormatProperties2KHR(p_physical_device: vk.PhysicalDevice, format_info: *vk.PhysicalDeviceImageFormatInfo2KHR, properties: *vk.ImageFormatProperties2KHR) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeGetPhysicalDeviceImageFormatProperties2KHR(p_physical_device: vk.PhysicalDevice, format_info: *vk.PhysicalDeviceImageFormatInfo2KHR, properties: *vk.ImageFormatProperties2KHR) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkGetPhysicalDeviceImageFormatProperties2KHR); defer entryPointEndLogTrace(); @@ -486,7 +486,7 @@ pub export fn strollGetPhysicalDeviceImageFormatProperties2KHR(p_physical_device return .success; } -pub export fn strollGetPhysicalDeviceProperties(p_physical_device: vk.PhysicalDevice, properties: *vk.PhysicalDeviceProperties) callconv(vk.vulkan_call_conv) void { +pub export fn apeGetPhysicalDeviceProperties(p_physical_device: vk.PhysicalDevice, properties: *vk.PhysicalDeviceProperties) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkGetPhysicalDeviceProperties); defer entryPointEndLogTrace(); @@ -494,7 +494,7 @@ pub export fn strollGetPhysicalDeviceProperties(p_physical_device: vk.PhysicalDe properties.* = physical_device.props; } -pub export fn strollGetPhysicalDeviceProperties2KHR(p_physical_device: vk.PhysicalDevice, properties: *vk.PhysicalDeviceProperties2KHR) callconv(vk.vulkan_call_conv) void { +pub export fn apeGetPhysicalDeviceProperties2KHR(p_physical_device: vk.PhysicalDevice, properties: *vk.PhysicalDeviceProperties2KHR) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkGetPhysicalDeviceProperties2KHR); defer entryPointEndLogTrace(); @@ -504,7 +504,7 @@ pub export fn strollGetPhysicalDeviceProperties2KHR(p_physical_device: vk.Physic properties.properties = physical_device.props; } -pub export fn strollGetPhysicalDeviceMemoryProperties(p_physical_device: vk.PhysicalDevice, properties: *vk.PhysicalDeviceMemoryProperties) callconv(vk.vulkan_call_conv) void { +pub export fn apeGetPhysicalDeviceMemoryProperties(p_physical_device: vk.PhysicalDevice, properties: *vk.PhysicalDeviceMemoryProperties) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkGetPhysicalDeviceMemoryProperties); defer entryPointEndLogTrace(); @@ -512,7 +512,7 @@ pub export fn strollGetPhysicalDeviceMemoryProperties(p_physical_device: vk.Phys properties.* = physical_device.mem_props; } -pub export fn strollGetPhysicalDeviceMemoryProperties2KHR(p_physical_device: vk.PhysicalDevice, properties: *vk.PhysicalDeviceMemoryProperties2KHR) callconv(vk.vulkan_call_conv) void { +pub export fn apeGetPhysicalDeviceMemoryProperties2KHR(p_physical_device: vk.PhysicalDevice, properties: *vk.PhysicalDeviceMemoryProperties2KHR) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkGetPhysicalDeviceMemoryProperties2KHR); defer entryPointEndLogTrace(); @@ -522,7 +522,7 @@ pub export fn strollGetPhysicalDeviceMemoryProperties2KHR(p_physical_device: vk. properties.memory_properties = physical_device.mem_props; } -pub export fn strollGetPhysicalDeviceQueueFamilyProperties(p_physical_device: vk.PhysicalDevice, count: *u32, properties: ?[*]vk.QueueFamilyProperties) callconv(vk.vulkan_call_conv) void { +pub export fn apeGetPhysicalDeviceQueueFamilyProperties(p_physical_device: vk.PhysicalDevice, count: *u32, properties: ?[*]vk.QueueFamilyProperties) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkGetPhysicalDeviceQueueFamilyProperties); defer entryPointEndLogTrace(); @@ -533,7 +533,7 @@ pub export fn strollGetPhysicalDeviceQueueFamilyProperties(p_physical_device: vk } } -pub export fn strollGetPhysicalDeviceQueueFamilyProperties2KHR(p_physical_device: vk.PhysicalDevice, count: *u32, properties: ?[*]vk.QueueFamilyProperties2KHR) callconv(vk.vulkan_call_conv) void { +pub export fn apeGetPhysicalDeviceQueueFamilyProperties2KHR(p_physical_device: vk.PhysicalDevice, count: *u32, properties: ?[*]vk.QueueFamilyProperties2KHR) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkGetPhysicalDeviceQueueFamilyProperties2KHR); defer entryPointEndLogTrace(); @@ -547,7 +547,7 @@ pub export fn strollGetPhysicalDeviceQueueFamilyProperties2KHR(p_physical_device } } -pub export fn strollGetPhysicalDeviceSparseImageFormatProperties( +pub export fn apeGetPhysicalDeviceSparseImageFormatProperties( p_physical_device: vk.PhysicalDevice, format: vk.Format, image_type: vk.ImageType, @@ -565,7 +565,7 @@ pub export fn strollGetPhysicalDeviceSparseImageFormatProperties( return .success; } -pub export fn strollGetPhysicalDeviceSparseImageFormatProperties2KHR( +pub export fn apeGetPhysicalDeviceSparseImageFormatProperties2KHR( p_physical_device: vk.PhysicalDevice, format_info: *const vk.PhysicalDeviceSparseImageFormatInfo2KHR, count: *u32, @@ -588,7 +588,7 @@ pub export fn strollGetPhysicalDeviceSparseImageFormatProperties2KHR( // Queue functions =========================================================================================================================================== -pub export fn strollQueueBindSparse(p_queue: vk.Queue, count: u32, info: [*]vk.BindSparseInfo, p_fence: vk.Fence) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeQueueBindSparse(p_queue: vk.Queue, count: u32, info: [*]vk.BindSparseInfo, p_fence: vk.Fence) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkQueueBindSparse); defer entryPointEndLogTrace(); @@ -598,7 +598,7 @@ pub export fn strollQueueBindSparse(p_queue: vk.Queue, count: u32, info: [*]vk.B return .success; } -pub export fn strollQueueSubmit(p_queue: vk.Queue, count: u32, info: [*]const vk.SubmitInfo, p_fence: vk.Fence) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeQueueSubmit(p_queue: vk.Queue, count: u32, info: [*]const vk.SubmitInfo, p_fence: vk.Fence) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkQueueSubmit); defer entryPointEndLogTrace(); @@ -608,7 +608,7 @@ pub export fn strollQueueSubmit(p_queue: vk.Queue, count: u32, info: [*]const vk return .success; } -pub export fn strollQueueWaitIdle(p_queue: vk.Queue) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeQueueWaitIdle(p_queue: vk.Queue) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkQueueWaitIdle); defer entryPointEndLogTrace(); @@ -619,7 +619,7 @@ pub export fn strollQueueWaitIdle(p_queue: vk.Queue) callconv(vk.vulkan_call_con // Device functions ========================================================================================================================================== -pub export fn strollAllocateCommandBuffers(p_device: vk.Device, info: *const vk.CommandBufferAllocateInfo, p_cmds: [*]vk.CommandBuffer) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeAllocateCommandBuffers(p_device: vk.Device, info: *const vk.CommandBufferAllocateInfo, p_cmds: [*]vk.CommandBuffer) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkAllocateCommandBuffers); defer entryPointEndLogTrace(); @@ -637,7 +637,7 @@ pub export fn strollAllocateCommandBuffers(p_device: vk.Device, info: *const vk. return .success; } -pub export fn strollAllocateDescriptorSets(p_device: vk.Device, info: *const vk.DescriptorSetAllocateInfo, p_sets: [*]vk.DescriptorSet) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeAllocateDescriptorSets(p_device: vk.Device, info: *const vk.DescriptorSetAllocateInfo, p_sets: [*]vk.DescriptorSet) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkAllocateDescriptorSets); defer entryPointEndLogTrace(); @@ -659,7 +659,7 @@ pub export fn strollAllocateDescriptorSets(p_device: vk.Device, info: *const vk. return .success; } -pub export fn strollAllocateMemory(p_device: vk.Device, info: *const vk.MemoryAllocateInfo, callbacks: ?*const vk.AllocationCallbacks, p_memory: *vk.DeviceMemory) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeAllocateMemory(p_device: vk.Device, info: *const vk.MemoryAllocateInfo, callbacks: ?*const vk.AllocationCallbacks, p_memory: *vk.DeviceMemory) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkAllocateMemory); defer entryPointEndLogTrace(); @@ -677,7 +677,7 @@ pub export fn strollAllocateMemory(p_device: vk.Device, info: *const vk.MemoryAl return .success; } -pub export fn strollBindBufferMemory(p_device: vk.Device, p_buffer: vk.Buffer, p_memory: vk.DeviceMemory, offset: vk.DeviceSize) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeBindBufferMemory(p_device: vk.Device, p_buffer: vk.Buffer, p_memory: vk.DeviceMemory, offset: vk.DeviceSize) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkBindBufferMemory); defer entryPointEndLogTrace(); @@ -692,7 +692,7 @@ pub export fn strollBindBufferMemory(p_device: vk.Device, p_buffer: vk.Buffer, p return .success; } -pub export fn strollBindImageMemory(p_device: vk.Device, p_image: vk.Image, p_memory: vk.DeviceMemory, offset: vk.DeviceSize) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeBindImageMemory(p_device: vk.Device, p_image: vk.Image, p_memory: vk.DeviceMemory, offset: vk.DeviceSize) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkBindImageMemory); defer entryPointEndLogTrace(); @@ -707,7 +707,7 @@ pub export fn strollBindImageMemory(p_device: vk.Device, p_image: vk.Image, p_me return .success; } -pub export fn strollCreateBuffer(p_device: vk.Device, info: *const vk.BufferCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_buffer: *vk.Buffer) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeCreateBuffer(p_device: vk.Device, info: *const vk.BufferCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_buffer: *vk.Buffer) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkCreateBuffer); defer entryPointEndLogTrace(); @@ -721,7 +721,7 @@ pub export fn strollCreateBuffer(p_device: vk.Device, info: *const vk.BufferCrea return .success; } -pub export fn strollCreateBufferView(p_device: vk.Device, info: *const vk.BufferViewCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_view: *vk.BufferView) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeCreateBufferView(p_device: vk.Device, info: *const vk.BufferViewCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_view: *vk.BufferView) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkCreateBufferView); defer entryPointEndLogTrace(); @@ -735,7 +735,7 @@ pub export fn strollCreateBufferView(p_device: vk.Device, info: *const vk.Buffer return .success; } -pub export fn strollCreateCommandPool(p_device: vk.Device, info: *const vk.CommandPoolCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_pool: *vk.CommandPool) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeCreateCommandPool(p_device: vk.Device, info: *const vk.CommandPoolCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_pool: *vk.CommandPool) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkCreateCommandPool); defer entryPointEndLogTrace(); @@ -750,7 +750,7 @@ pub export fn strollCreateCommandPool(p_device: vk.Device, info: *const vk.Comma return .success; } -pub export fn strollCreateComputePipelines(p_device: vk.Device, p_cache: vk.PipelineCache, count: u32, infos: [*]const vk.ComputePipelineCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_pipelines: [*]vk.Pipeline) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeCreateComputePipelines(p_device: vk.Device, p_cache: vk.PipelineCache, count: u32, infos: [*]const vk.ComputePipelineCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_pipelines: [*]vk.Pipeline) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkCreateComputePipelines); defer entryPointEndLogTrace(); @@ -791,7 +791,7 @@ pub export fn strollCreateComputePipelines(p_device: vk.Device, p_cache: vk.Pipe return global_res; } -pub export fn strollCreateDescriptorPool(p_device: vk.Device, info: *const vk.DescriptorPoolCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_pool: *vk.DescriptorPool) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeCreateDescriptorPool(p_device: vk.Device, info: *const vk.DescriptorPoolCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_pool: *vk.DescriptorPool) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkCreateDescriptorPool); defer entryPointEndLogTrace(); @@ -806,7 +806,7 @@ pub export fn strollCreateDescriptorPool(p_device: vk.Device, info: *const vk.De return .success; } -pub export fn strollCreateDescriptorSetLayout(p_device: vk.Device, info: *const vk.DescriptorSetLayoutCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_layout: *vk.DescriptorSetLayout) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeCreateDescriptorSetLayout(p_device: vk.Device, info: *const vk.DescriptorSetLayoutCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_layout: *vk.DescriptorSetLayout) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkCreateDescriptorSetLayout); defer entryPointEndLogTrace(); @@ -822,7 +822,7 @@ pub export fn strollCreateDescriptorSetLayout(p_device: vk.Device, info: *const return .success; } -pub export fn strollCreateEvent(p_device: vk.Device, info: *const vk.EventCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_event: *vk.Event) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeCreateEvent(p_device: vk.Device, info: *const vk.EventCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_event: *vk.Event) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkCreateEvent); defer entryPointEndLogTrace(); @@ -837,7 +837,7 @@ pub export fn strollCreateEvent(p_device: vk.Device, info: *const vk.EventCreate return .success; } -pub export fn strollCreateFence(p_device: vk.Device, info: *const vk.FenceCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_fence: *vk.Fence) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeCreateFence(p_device: vk.Device, info: *const vk.FenceCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_fence: *vk.Fence) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkCreateFence); defer entryPointEndLogTrace(); @@ -852,7 +852,7 @@ pub export fn strollCreateFence(p_device: vk.Device, info: *const vk.FenceCreate return .success; } -pub export fn strollCreateFramebuffer(p_device: vk.Device, info: *const vk.FramebufferCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_framebuffer: *vk.Framebuffer) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeCreateFramebuffer(p_device: vk.Device, info: *const vk.FramebufferCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_framebuffer: *vk.Framebuffer) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkCreateFramebuffer); defer entryPointEndLogTrace(); @@ -867,7 +867,7 @@ pub export fn strollCreateFramebuffer(p_device: vk.Device, info: *const vk.Frame return .success; } -pub export fn strollCreateGraphicsPipelines(p_device: vk.Device, p_cache: vk.PipelineCache, count: u32, infos: [*]const vk.GraphicsPipelineCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_pipelines: [*]vk.Pipeline) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeCreateGraphicsPipelines(p_device: vk.Device, p_cache: vk.PipelineCache, count: u32, infos: [*]const vk.GraphicsPipelineCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_pipelines: [*]vk.Pipeline) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkCreateGraphicsPipelines); defer entryPointEndLogTrace(); @@ -906,7 +906,7 @@ pub export fn strollCreateGraphicsPipelines(p_device: vk.Device, p_cache: vk.Pip return global_res; } -pub export fn strollCreateImage(p_device: vk.Device, info: *const vk.ImageCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_image: *vk.Image) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeCreateImage(p_device: vk.Device, info: *const vk.ImageCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_image: *vk.Image) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkCreateImage); defer entryPointEndLogTrace(); @@ -920,7 +920,7 @@ pub export fn strollCreateImage(p_device: vk.Device, info: *const vk.ImageCreate return .success; } -pub export fn strollCreateImageView(p_device: vk.Device, info: *const vk.ImageViewCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_image_view: *vk.ImageView) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeCreateImageView(p_device: vk.Device, info: *const vk.ImageViewCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_image_view: *vk.ImageView) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkCreateImageView); defer entryPointEndLogTrace(); @@ -934,7 +934,7 @@ pub export fn strollCreateImageView(p_device: vk.Device, info: *const vk.ImageVi return .success; } -pub export fn strollCreatePipelineCache(p_device: vk.Device, info: *const vk.PipelineCacheCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_cache: *vk.PipelineCache) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeCreatePipelineCache(p_device: vk.Device, info: *const vk.PipelineCacheCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_cache: *vk.PipelineCache) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkCreatePipelineCache); defer entryPointEndLogTrace(); @@ -949,7 +949,7 @@ pub export fn strollCreatePipelineCache(p_device: vk.Device, info: *const vk.Pip return .success; } -pub export fn strollCreatePipelineLayout(p_device: vk.Device, info: *const vk.PipelineLayoutCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_layout: *vk.PipelineLayout) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeCreatePipelineLayout(p_device: vk.Device, info: *const vk.PipelineLayoutCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_layout: *vk.PipelineLayout) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkCreatePipelineLayout); defer entryPointEndLogTrace(); @@ -965,7 +965,7 @@ pub export fn strollCreatePipelineLayout(p_device: vk.Device, info: *const vk.Pi return .success; } -pub export fn strollCreateQueryPool(p_device: vk.Device, info: *const vk.QueryPoolCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_pool: *vk.QueryPool) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeCreateQueryPool(p_device: vk.Device, info: *const vk.QueryPoolCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_pool: *vk.QueryPool) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkCreateQueryPool); defer entryPointEndLogTrace(); @@ -980,7 +980,7 @@ pub export fn strollCreateQueryPool(p_device: vk.Device, info: *const vk.QueryPo return .success; } -pub export fn strollCreateRenderPass(p_device: vk.Device, info: *const vk.RenderPassCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_pass: *vk.RenderPass) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeCreateRenderPass(p_device: vk.Device, info: *const vk.RenderPassCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_pass: *vk.RenderPass) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkCreateRenderPass); defer entryPointEndLogTrace(); @@ -995,7 +995,7 @@ pub export fn strollCreateRenderPass(p_device: vk.Device, info: *const vk.Render return .success; } -pub export fn strollCreateSampler(p_device: vk.Device, info: *const vk.SamplerCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_sampler: *vk.Sampler) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeCreateSampler(p_device: vk.Device, info: *const vk.SamplerCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_sampler: *vk.Sampler) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkCreateSampler); defer entryPointEndLogTrace(); @@ -1010,7 +1010,7 @@ pub export fn strollCreateSampler(p_device: vk.Device, info: *const vk.SamplerCr return .success; } -pub export fn strollCreateSemaphore(p_device: vk.Device, info: *const vk.SemaphoreCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_semaphore: *vk.Semaphore) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeCreateSemaphore(p_device: vk.Device, info: *const vk.SemaphoreCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_semaphore: *vk.Semaphore) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkCreateSemaphore); defer entryPointEndLogTrace(); @@ -1025,7 +1025,7 @@ pub export fn strollCreateSemaphore(p_device: vk.Device, info: *const vk.Semapho return .success; } -pub export fn strollCreateShaderModule(p_device: vk.Device, info: *const vk.ShaderModuleCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_module: *vk.ShaderModule) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeCreateShaderModule(p_device: vk.Device, info: *const vk.ShaderModuleCreateInfo, callbacks: ?*const vk.AllocationCallbacks, p_module: *vk.ShaderModule) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkCreateShaderModule); defer entryPointEndLogTrace(); @@ -1040,7 +1040,7 @@ pub export fn strollCreateShaderModule(p_device: vk.Device, info: *const vk.Shad return .success; } -pub export fn strollDestroyBuffer(p_device: vk.Device, p_buffer: vk.Buffer, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { +pub export fn apeDestroyBuffer(p_device: vk.Device, p_buffer: vk.Buffer, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkDestroyBuffer); defer entryPointEndLogTrace(); @@ -1051,7 +1051,7 @@ pub export fn strollDestroyBuffer(p_device: vk.Device, p_buffer: vk.Buffer, call non_dispatchable.intrusiveDestroy(allocator); } -pub export fn strollDestroyBufferView(p_device: vk.Device, p_view: vk.BufferView, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { +pub export fn apeDestroyBufferView(p_device: vk.Device, p_view: vk.BufferView, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkDestroyBufferView); defer entryPointEndLogTrace(); @@ -1062,7 +1062,7 @@ pub export fn strollDestroyBufferView(p_device: vk.Device, p_view: vk.BufferView non_dispatchable.intrusiveDestroy(allocator); } -pub export fn strollDestroyCommandPool(p_device: vk.Device, p_pool: vk.CommandPool, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { +pub export fn apeDestroyCommandPool(p_device: vk.Device, p_pool: vk.CommandPool, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkDestroyCommandPool); defer entryPointEndLogTrace(); @@ -1073,7 +1073,7 @@ pub export fn strollDestroyCommandPool(p_device: vk.Device, p_pool: vk.CommandPo non_dispatchable.intrusiveDestroy(allocator); } -pub export fn strollDestroyDescriptorPool(p_device: vk.Device, p_pool: vk.DescriptorPool, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { +pub export fn apeDestroyDescriptorPool(p_device: vk.Device, p_pool: vk.DescriptorPool, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkDestroyDescriptorPool); defer entryPointEndLogTrace(); @@ -1084,7 +1084,7 @@ pub export fn strollDestroyDescriptorPool(p_device: vk.Device, p_pool: vk.Descri non_dispatchable.intrusiveDestroy(allocator); } -pub export fn strollDestroyDescriptorSetLayout(p_device: vk.Device, p_layout: vk.DescriptorSetLayout, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { +pub export fn apeDestroyDescriptorSetLayout(p_device: vk.Device, p_layout: vk.DescriptorSetLayout, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkDestroyDescriptorLayout); defer entryPointEndLogTrace(); @@ -1095,7 +1095,7 @@ pub export fn strollDestroyDescriptorSetLayout(p_device: vk.Device, p_layout: vk non_dispatchable.intrusiveDestroy(allocator); } -pub export fn strollDestroyDevice(p_device: vk.Device, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { +pub export fn apeDestroyDevice(p_device: vk.Device, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkDestroyDevice); defer entryPointEndLogTrace(); @@ -1108,7 +1108,7 @@ pub export fn strollDestroyDevice(p_device: vk.Device, callbacks: ?*const vk.All dispatchable.destroy(allocator); } -pub export fn strollDestroyEvent(p_device: vk.Device, p_event: vk.Event, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { +pub export fn apeDestroyEvent(p_device: vk.Device, p_event: vk.Event, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkDestroyEvent); defer entryPointEndLogTrace(); @@ -1119,7 +1119,7 @@ pub export fn strollDestroyEvent(p_device: vk.Device, p_event: vk.Event, callbac non_dispatchable.intrusiveDestroy(allocator); } -pub export fn strollDestroyFence(p_device: vk.Device, p_fence: vk.Fence, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { +pub export fn apeDestroyFence(p_device: vk.Device, p_fence: vk.Fence, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkDestroyFence); defer entryPointEndLogTrace(); @@ -1130,7 +1130,7 @@ pub export fn strollDestroyFence(p_device: vk.Device, p_fence: vk.Fence, callbac non_dispatchable.intrusiveDestroy(allocator); } -pub export fn strollDestroyFramebuffer(p_device: vk.Device, p_framebuffer: vk.Framebuffer, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { +pub export fn apeDestroyFramebuffer(p_device: vk.Device, p_framebuffer: vk.Framebuffer, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkDestroyFramebuffer); defer entryPointEndLogTrace(); @@ -1141,7 +1141,7 @@ pub export fn strollDestroyFramebuffer(p_device: vk.Device, p_framebuffer: vk.Fr non_dispatchable.intrusiveDestroy(allocator); } -pub export fn strollDestroyImage(p_device: vk.Device, p_image: vk.Image, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { +pub export fn apeDestroyImage(p_device: vk.Device, p_image: vk.Image, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkDestroyImage); defer entryPointEndLogTrace(); @@ -1152,7 +1152,7 @@ pub export fn strollDestroyImage(p_device: vk.Device, p_image: vk.Image, callbac non_dispatchable.intrusiveDestroy(allocator); } -pub export fn strollDestroyImageView(p_device: vk.Device, p_image_view: vk.ImageView, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { +pub export fn apeDestroyImageView(p_device: vk.Device, p_image_view: vk.ImageView, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkDestroyImageView); defer entryPointEndLogTrace(); @@ -1163,7 +1163,7 @@ pub export fn strollDestroyImageView(p_device: vk.Device, p_image_view: vk.Image non_dispatchable.intrusiveDestroy(allocator); } -pub export fn strollDestroyPipeline(p_device: vk.Device, p_pipeline: vk.Pipeline, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { +pub export fn apeDestroyPipeline(p_device: vk.Device, p_pipeline: vk.Pipeline, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkDestroyPipeline); defer entryPointEndLogTrace(); @@ -1174,7 +1174,7 @@ pub export fn strollDestroyPipeline(p_device: vk.Device, p_pipeline: vk.Pipeline non_dispatchable.intrusiveDestroy(allocator); } -pub export fn strollDestroyPipelineCache(p_device: vk.Device, p_cache: vk.PipelineCache, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { +pub export fn apeDestroyPipelineCache(p_device: vk.Device, p_cache: vk.PipelineCache, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkDestroyPipelineCache); defer entryPointEndLogTrace(); @@ -1185,7 +1185,7 @@ pub export fn strollDestroyPipelineCache(p_device: vk.Device, p_cache: vk.Pipeli non_dispatchable.intrusiveDestroy(allocator); } -pub export fn strollDestroyPipelineLayout(p_device: vk.Device, p_layout: vk.PipelineLayout, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { +pub export fn apeDestroyPipelineLayout(p_device: vk.Device, p_layout: vk.PipelineLayout, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkDestroyPipelineCache); defer entryPointEndLogTrace(); @@ -1196,7 +1196,7 @@ pub export fn strollDestroyPipelineLayout(p_device: vk.Device, p_layout: vk.Pipe non_dispatchable.intrusiveDestroy(allocator); } -pub export fn strollDestroyQueryPool(p_device: vk.Device, p_pool: vk.QueryPool, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { +pub export fn apeDestroyQueryPool(p_device: vk.Device, p_pool: vk.QueryPool, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkDestroyQueryPool); defer entryPointEndLogTrace(); @@ -1207,7 +1207,7 @@ pub export fn strollDestroyQueryPool(p_device: vk.Device, p_pool: vk.QueryPool, non_dispatchable.intrusiveDestroy(allocator); } -pub export fn strollDestroyRenderPass(p_device: vk.Device, p_pass: vk.RenderPass, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { +pub export fn apeDestroyRenderPass(p_device: vk.Device, p_pass: vk.RenderPass, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkDestroyRenderPass); defer entryPointEndLogTrace(); @@ -1218,7 +1218,7 @@ pub export fn strollDestroyRenderPass(p_device: vk.Device, p_pass: vk.RenderPass non_dispatchable.intrusiveDestroy(allocator); } -pub export fn strollDestroySampler(p_device: vk.Device, p_sampler: vk.Sampler, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { +pub export fn apeDestroySampler(p_device: vk.Device, p_sampler: vk.Sampler, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkDestroySampler); defer entryPointEndLogTrace(); @@ -1229,7 +1229,7 @@ pub export fn strollDestroySampler(p_device: vk.Device, p_sampler: vk.Sampler, c non_dispatchable.intrusiveDestroy(allocator); } -pub export fn strollDestroySemaphore(p_device: vk.Device, p_semaphore: vk.Semaphore, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { +pub export fn apeDestroySemaphore(p_device: vk.Device, p_semaphore: vk.Semaphore, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkDestroySemaphore); defer entryPointEndLogTrace(); @@ -1240,7 +1240,7 @@ pub export fn strollDestroySemaphore(p_device: vk.Device, p_semaphore: vk.Semaph non_dispatchable.intrusiveDestroy(allocator); } -pub export fn strollDestroyShaderModule(p_device: vk.Device, p_module: vk.ShaderModule, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { +pub export fn apeDestroyShaderModule(p_device: vk.Device, p_module: vk.ShaderModule, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkDestroyShaderModule); defer entryPointEndLogTrace(); @@ -1251,7 +1251,7 @@ pub export fn strollDestroyShaderModule(p_device: vk.Device, p_module: vk.Shader non_dispatchable.intrusiveDestroy(allocator); } -pub export fn strollDeviceWaitIdle(p_device: vk.Device) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeDeviceWaitIdle(p_device: vk.Device) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkDeviceWaitIdle); defer entryPointEndLogTrace(); @@ -1260,7 +1260,7 @@ pub export fn strollDeviceWaitIdle(p_device: vk.Device) callconv(vk.vulkan_call_ return .success; } -pub export fn strollFlushMappedMemoryRanges(p_device: vk.Device, count: u32, p_ranges: [*]const vk.MappedMemoryRange) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeFlushMappedMemoryRanges(p_device: vk.Device, count: u32, p_ranges: [*]const vk.MappedMemoryRange) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkFlushMappedMemoryRanges); defer entryPointEndLogTrace(); @@ -1273,7 +1273,7 @@ pub export fn strollFlushMappedMemoryRanges(p_device: vk.Device, count: u32, p_r return .success; } -pub export fn strollFreeCommandBuffers(p_device: vk.Device, p_pool: vk.CommandPool, count: u32, p_cmds: [*]const vk.CommandBuffer) callconv(vk.vulkan_call_conv) void { +pub export fn apeFreeCommandBuffers(p_device: vk.Device, p_pool: vk.CommandPool, count: u32, p_cmds: [*]const vk.CommandBuffer) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkFreeCommandBuffers); defer entryPointEndLogTrace(); @@ -1284,7 +1284,7 @@ pub export fn strollFreeCommandBuffers(p_device: vk.Device, p_pool: vk.CommandPo pool.freeCommandBuffers(cmds[0..count]) catch |err| return errorLogger(err); } -pub export fn strollFreeDescriptorSets(p_device: vk.Device, p_pool: vk.CommandPool, count: u32, p_sets: [*]const vk.DescriptorSet) callconv(vk.vulkan_call_conv) void { +pub export fn apeFreeDescriptorSets(p_device: vk.Device, p_pool: vk.CommandPool, count: u32, p_sets: [*]const vk.DescriptorSet) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkFreeDescriptorSets); defer entryPointEndLogTrace(); @@ -1300,7 +1300,7 @@ pub export fn strollFreeDescriptorSets(p_device: vk.Device, p_pool: vk.CommandPo } } -pub export fn strollFreeMemory(p_device: vk.Device, p_memory: vk.DeviceMemory, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { +pub export fn apeFreeMemory(p_device: vk.Device, p_memory: vk.DeviceMemory, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkFreeMemory); defer entryPointEndLogTrace(); @@ -1311,7 +1311,7 @@ pub export fn strollFreeMemory(p_device: vk.Device, p_memory: vk.DeviceMemory, c non_dispatchable.intrusiveDestroy(allocator); } -pub export fn strollGetBufferMemoryRequirements(p_device: vk.Device, p_buffer: vk.Buffer, requirements: *vk.MemoryRequirements) callconv(vk.vulkan_call_conv) void { +pub export fn apeGetBufferMemoryRequirements(p_device: vk.Device, p_buffer: vk.Buffer, requirements: *vk.MemoryRequirements) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkGetBufferMemoryRequirements); defer entryPointEndLogTrace(); @@ -1321,7 +1321,7 @@ pub export fn strollGetBufferMemoryRequirements(p_device: vk.Device, p_buffer: v buffer.getMemoryRequirements(requirements); } -pub export fn strollGetDeviceMemoryCommitment(p_device: vk.Device, p_memory: vk.DeviceMemory, committed_memory: *vk.DeviceSize) callconv(vk.vulkan_call_conv) void { +pub export fn apeGetDeviceMemoryCommitment(p_device: vk.Device, p_memory: vk.DeviceMemory, committed_memory: *vk.DeviceSize) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkGetDeviceMemoryCommitment); defer entryPointEndLogTrace(); @@ -1335,7 +1335,7 @@ pub export fn strollGetDeviceMemoryCommitment(p_device: vk.Device, p_memory: vk. _ = committed_memory; } -pub export fn strollGetDeviceProcAddr(p_device: vk.Device, p_name: ?[*:0]const u8) callconv(vk.vulkan_call_conv) vk.PfnVoidFunction { +pub export fn apeGetDeviceProcAddr(p_device: vk.Device, p_name: ?[*:0]const u8) callconv(vk.vulkan_call_conv) vk.PfnVoidFunction { defer entryPointEndLogTrace(); if (p_name == null) return null; @@ -1347,7 +1347,7 @@ pub export fn strollGetDeviceProcAddr(p_device: vk.Device, p_name: ?[*:0]const u return null; } -pub export fn strollGetDeviceQueue(p_device: vk.Device, queue_family_index: u32, queue_index: u32, p_queue: *vk.Queue) callconv(vk.vulkan_call_conv) void { +pub export fn apeGetDeviceQueue(p_device: vk.Device, queue_family_index: u32, queue_index: u32, p_queue: *vk.Queue) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkGetDeviceQueue); defer entryPointEndLogTrace(); @@ -1366,7 +1366,7 @@ pub export fn strollGetDeviceQueue(p_device: vk.Device, queue_family_index: u32, } } -pub export fn strollGetEventStatus(p_device: vk.Device, p_event: vk.Event) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeGetEventStatus(p_device: vk.Device, p_event: vk.Event) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkGetEventStatus); defer entryPointEndLogTrace(); @@ -1377,7 +1377,7 @@ pub export fn strollGetEventStatus(p_device: vk.Device, p_event: vk.Event) callc return .success; } -pub export fn strollGetFenceStatus(p_device: vk.Device, p_fence: vk.Fence) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeGetFenceStatus(p_device: vk.Device, p_fence: vk.Fence) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkGetFenceStatus); defer entryPointEndLogTrace(); @@ -1388,7 +1388,7 @@ pub export fn strollGetFenceStatus(p_device: vk.Device, p_fence: vk.Fence) callc return .event_set; } -pub export fn strollGetImageMemoryRequirements(p_device: vk.Device, p_image: vk.Image, requirements: *vk.MemoryRequirements) callconv(vk.vulkan_call_conv) void { +pub export fn apeGetImageMemoryRequirements(p_device: vk.Device, p_image: vk.Image, requirements: *vk.MemoryRequirements) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkGetImageMemoryRequirements); defer entryPointEndLogTrace(); @@ -1398,7 +1398,7 @@ pub export fn strollGetImageMemoryRequirements(p_device: vk.Device, p_image: vk. image.getMemoryRequirements(requirements) catch |err| return errorLogger(err); } -pub export fn strollGetImageSparseMemoryRequirements(p_device: vk.Device, p_image: vk.Image, requirements: *vk.SparseImageMemoryRequirements) callconv(vk.vulkan_call_conv) void { +pub export fn apeGetImageSparseMemoryRequirements(p_device: vk.Device, p_image: vk.Image, requirements: *vk.SparseImageMemoryRequirements) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkGetImageSparseMemoryRequirements); defer entryPointEndLogTrace(); @@ -1412,7 +1412,7 @@ pub export fn strollGetImageSparseMemoryRequirements(p_device: vk.Device, p_imag _ = requirements; } -pub export fn strollGetImageSubresourceLayout(p_device: vk.Device, p_image: vk.Image, subresource: *const vk.ImageSubresource, layout: *vk.SubresourceLayout) callconv(vk.vulkan_call_conv) void { +pub export fn apeGetImageSubresourceLayout(p_device: vk.Device, p_image: vk.Image, subresource: *const vk.ImageSubresource, layout: *vk.SubresourceLayout) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkGetImageSubresourceLayout); defer entryPointEndLogTrace(); @@ -1422,7 +1422,7 @@ pub export fn strollGetImageSubresourceLayout(p_device: vk.Device, p_image: vk.I layout.* = image.getSubresourceLayout(subresource.*) catch |err| return errorLogger(err); } -pub export fn strollGetPipelineCacheData(p_device: vk.Device, p_cache: vk.PipelineCache, size: *usize, data: *anyopaque) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeGetPipelineCacheData(p_device: vk.Device, p_cache: vk.PipelineCache, size: *usize, data: *anyopaque) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkGetPipelineCacheData); defer entryPointEndLogTrace(); @@ -1437,7 +1437,7 @@ pub export fn strollGetPipelineCacheData(p_device: vk.Device, p_cache: vk.Pipeli return .success; } -pub export fn strollGetQueryPoolResults( +pub export fn apeGetQueryPoolResults( p_device: vk.Device, p_pool: vk.QueryPool, first: u32, @@ -1465,7 +1465,7 @@ pub export fn strollGetQueryPoolResults( return .error_unknown; } -pub export fn strollGetRenderAreaGranularity(p_device: vk.Device, p_pass: vk.RenderPass, granularity: *vk.Extent2D) callconv(vk.vulkan_call_conv) void { +pub export fn apeGetRenderAreaGranularity(p_device: vk.Device, p_pass: vk.RenderPass, granularity: *vk.Extent2D) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkGetRenderAreaGranularity); defer entryPointEndLogTrace(); @@ -1477,7 +1477,7 @@ pub export fn strollGetRenderAreaGranularity(p_device: vk.Device, p_pass: vk.Ren _ = granularity; } -pub export fn strollInvalidateMappedMemoryRanges(p_device: vk.Device, count: u32, p_ranges: [*]const vk.MappedMemoryRange) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeInvalidateMappedMemoryRanges(p_device: vk.Device, count: u32, p_ranges: [*]const vk.MappedMemoryRange) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkInvalidateMappedMemoryRanges); defer entryPointEndLogTrace(); @@ -1490,7 +1490,7 @@ pub export fn strollInvalidateMappedMemoryRanges(p_device: vk.Device, count: u32 return .success; } -pub export fn strollMapMemory(p_device: vk.Device, p_memory: vk.DeviceMemory, offset: vk.DeviceSize, size: vk.DeviceSize, _: vk.MemoryMapFlags, pp_data: *?*anyopaque) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeMapMemory(p_device: vk.Device, p_memory: vk.DeviceMemory, offset: vk.DeviceSize, size: vk.DeviceSize, _: vk.MemoryMapFlags, pp_data: *?*anyopaque) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkMapMemory); defer entryPointEndLogTrace(); @@ -1501,7 +1501,7 @@ pub export fn strollMapMemory(p_device: vk.Device, p_memory: vk.DeviceMemory, of return .success; } -pub export fn strollMergePipelineCaches(p_device: vk.Device, p_dst: vk.PipelineCache, count: u32, p_srcs: [*]const vk.PipelineCache) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeMergePipelineCaches(p_device: vk.Device, p_dst: vk.PipelineCache, count: u32, p_srcs: [*]const vk.PipelineCache) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkMergePipelineCaches); defer entryPointEndLogTrace(); @@ -1516,7 +1516,7 @@ pub export fn strollMergePipelineCaches(p_device: vk.Device, p_dst: vk.PipelineC return .error_unknown; } -pub export fn strollResetCommandPool(p_device: vk.Device, p_pool: vk.CommandPool, flags: vk.CommandPoolResetFlags) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeResetCommandPool(p_device: vk.Device, p_pool: vk.CommandPool, flags: vk.CommandPoolResetFlags) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkResetCommandPool); defer entryPointEndLogTrace(); @@ -1526,7 +1526,7 @@ pub export fn strollResetCommandPool(p_device: vk.Device, p_pool: vk.CommandPool return .success; } -pub export fn strollResetDescriptorPool(p_device: vk.Device, p_pool: vk.DescriptorPool, flags: vk.DescriptorPoolResetFlags) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeResetDescriptorPool(p_device: vk.Device, p_pool: vk.DescriptorPool, flags: vk.DescriptorPoolResetFlags) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkResetDescriptorPool); defer entryPointEndLogTrace(); @@ -1536,7 +1536,7 @@ pub export fn strollResetDescriptorPool(p_device: vk.Device, p_pool: vk.Descript return .success; } -pub export fn strollResetEvent(p_device: vk.Device, p_event: vk.Fence) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeResetEvent(p_device: vk.Device, p_event: vk.Fence) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkResetEvent); defer entryPointEndLogTrace(); @@ -1547,7 +1547,7 @@ pub export fn strollResetEvent(p_device: vk.Device, p_event: vk.Fence) callconv( return .success; } -pub export fn strollResetFences(p_device: vk.Device, count: u32, p_fences: [*]const vk.Fence) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeResetFences(p_device: vk.Device, count: u32, p_fences: [*]const vk.Fence) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkResetFences); defer entryPointEndLogTrace(); @@ -1560,7 +1560,7 @@ pub export fn strollResetFences(p_device: vk.Device, count: u32, p_fences: [*]co return .success; } -pub export fn strollSetEvent(p_device: vk.Device, p_event: vk.Fence) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeSetEvent(p_device: vk.Device, p_event: vk.Fence) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkSetEvent); defer entryPointEndLogTrace(); @@ -1571,7 +1571,7 @@ pub export fn strollSetEvent(p_device: vk.Device, p_event: vk.Fence) callconv(vk return .success; } -pub export fn strollUnmapMemory(p_device: vk.Device, p_memory: vk.DeviceMemory) callconv(vk.vulkan_call_conv) void { +pub export fn apeUnmapMemory(p_device: vk.Device, p_memory: vk.DeviceMemory) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkUnmapMemory); defer entryPointEndLogTrace(); @@ -1581,7 +1581,7 @@ pub export fn strollUnmapMemory(p_device: vk.Device, p_memory: vk.DeviceMemory) device_memory.unmap(); } -pub export fn strollUpdateDescriptorSets(p_device: vk.Device, write_count: u32, writes: [*]const vk.WriteDescriptorSet, copy_count: u32, copies: [*]const vk.CopyDescriptorSet) callconv(vk.vulkan_call_conv) void { +pub export fn apeUpdateDescriptorSets(p_device: vk.Device, write_count: u32, writes: [*]const vk.WriteDescriptorSet, copy_count: u32, copies: [*]const vk.CopyDescriptorSet) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkUpdateDescriptorSets); defer entryPointEndLogTrace(); @@ -1599,7 +1599,7 @@ pub export fn strollUpdateDescriptorSets(p_device: vk.Device, write_count: u32, } } -pub export fn strollWaitForFences(p_device: vk.Device, count: u32, p_fences: [*]const vk.Fence, waitForAll: vk.Bool32, timeout: u64) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeWaitForFences(p_device: vk.Device, count: u32, p_fences: [*]const vk.Fence, waitForAll: vk.Bool32, timeout: u64) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkWaitForFences); defer entryPointEndLogTrace(); @@ -1615,7 +1615,7 @@ pub export fn strollWaitForFences(p_device: vk.Device, count: u32, p_fences: [*] // Command Buffer functions =================================================================================================================================== -pub export fn strollBeginCommandBuffer(p_cmd: vk.CommandBuffer, info: *const vk.CommandBufferBeginInfo) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeBeginCommandBuffer(p_cmd: vk.CommandBuffer, info: *const vk.CommandBufferBeginInfo) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkBeginCommandBuffer); defer entryPointEndLogTrace(); @@ -1627,7 +1627,7 @@ pub export fn strollBeginCommandBuffer(p_cmd: vk.CommandBuffer, info: *const vk. return .success; } -pub export fn strollCmdBeginQuery(p_cmd: vk.CommandBuffer, p_pool: vk.QueryPool, query: u32, flags: vk.QueryControlFlags) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdBeginQuery(p_cmd: vk.CommandBuffer, p_pool: vk.QueryPool, query: u32, flags: vk.QueryControlFlags) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdBeginQuery); defer entryPointEndLogTrace(); @@ -1641,7 +1641,7 @@ pub export fn strollCmdBeginQuery(p_cmd: vk.CommandBuffer, p_pool: vk.QueryPool, _ = flags; } -pub export fn strollCmdBeginRenderPass(p_cmd: vk.CommandBuffer, info: *const vk.RenderPassBeginInfo, contents: vk.SubpassContents) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdBeginRenderPass(p_cmd: vk.CommandBuffer, info: *const vk.RenderPassBeginInfo, contents: vk.SubpassContents) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdBeginRenderPass); defer entryPointEndLogTrace(); @@ -1657,7 +1657,7 @@ pub export fn strollCmdBeginRenderPass(p_cmd: vk.CommandBuffer, info: *const vk. _ = contents; } -pub export fn strollCmdBindDescriptorSets( +pub export fn apeCmdBindDescriptorSets( p_cmd: vk.CommandBuffer, bind_point: vk.PipelineBindPoint, layout: vk.PipelineLayout, @@ -1676,7 +1676,7 @@ pub export fn strollCmdBindDescriptorSets( _ = layout; } -pub export fn strollCmdBindIndexBuffer(p_cmd: vk.CommandBuffer, p_buffer: vk.Buffer, offset: vk.DeviceSize, index_type: vk.IndexType) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdBindIndexBuffer(p_cmd: vk.CommandBuffer, p_buffer: vk.Buffer, offset: vk.DeviceSize, index_type: vk.IndexType) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdBindIndexBuffer); defer entryPointEndLogTrace(); @@ -1685,7 +1685,7 @@ pub export fn strollCmdBindIndexBuffer(p_cmd: vk.CommandBuffer, p_buffer: vk.Buf cmd.bindIndexBuffer(buffer, offset, index_type) catch |err| return errorLogger(err); } -pub export fn strollCmdBindPipeline(p_cmd: vk.CommandBuffer, bind_point: vk.PipelineBindPoint, p_pipeline: vk.Pipeline) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdBindPipeline(p_cmd: vk.CommandBuffer, bind_point: vk.PipelineBindPoint, p_pipeline: vk.Pipeline) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdBindPipeline); defer entryPointEndLogTrace(); @@ -1694,7 +1694,7 @@ pub export fn strollCmdBindPipeline(p_cmd: vk.CommandBuffer, bind_point: vk.Pipe cmd.bindPipeline(bind_point, pipeline) catch |err| return errorLogger(err); } -pub export fn strollCmdBindVertexBuffers(p_cmd: vk.CommandBuffer, first: u32, count: u32, p_buffers: [*]const vk.Buffer, offsets: [*]const vk.DeviceSize) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdBindVertexBuffers(p_cmd: vk.CommandBuffer, first: u32, count: u32, p_buffers: [*]const vk.Buffer, offsets: [*]const vk.DeviceSize) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdBindVertexBuffer); defer entryPointEndLogTrace(); @@ -1705,7 +1705,7 @@ pub export fn strollCmdBindVertexBuffers(p_cmd: vk.CommandBuffer, first: u32, co } } -pub export fn strollCmdBlitImage( +pub export fn apeCmdBlitImage( p_cmd: vk.CommandBuffer, p_src_image: vk.Image, src_layout: vk.ImageLayout, @@ -1725,7 +1725,7 @@ pub export fn strollCmdBlitImage( cmd.blitImage(src, src_layout, dst, dst_layout, regions[0..count], filter) catch |err| return errorLogger(err); } -pub export fn strollCmdClearAttachments(p_cmd: vk.CommandBuffer, attachment_count: u32, attachments: [*]const vk.ClearAttachment, rect_count: u32, rects: [*]const vk.ClearRect) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdClearAttachments(p_cmd: vk.CommandBuffer, attachment_count: u32, attachments: [*]const vk.ClearAttachment, rect_count: u32, rects: [*]const vk.ClearRect) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdClearAttachments); defer entryPointEndLogTrace(); @@ -1737,7 +1737,7 @@ pub export fn strollCmdClearAttachments(p_cmd: vk.CommandBuffer, attachment_coun } } -pub export fn strollCmdClearColorImage(p_cmd: vk.CommandBuffer, p_image: vk.Image, layout: vk.ImageLayout, color: *const vk.ClearColorValue, count: u32, ranges: [*]const vk.ImageSubresourceRange) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdClearColorImage(p_cmd: vk.CommandBuffer, p_image: vk.Image, layout: vk.ImageLayout, color: *const vk.ClearColorValue, count: u32, ranges: [*]const vk.ImageSubresourceRange) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdClearColorImage); defer entryPointEndLogTrace(); @@ -1746,7 +1746,7 @@ pub export fn strollCmdClearColorImage(p_cmd: vk.CommandBuffer, p_image: vk.Imag cmd.clearColorImage(image, layout, color, ranges[0..count]) catch |err| return errorLogger(err); } -pub export fn strollCmdClearDepthStencilImage(p_cmd: vk.CommandBuffer, p_image: vk.Image, layout: vk.ImageLayout, value: *const vk.ClearDepthStencilValue, count: u32, ranges: [*]const vk.ImageSubresourceRange) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdClearDepthStencilImage(p_cmd: vk.CommandBuffer, p_image: vk.Image, layout: vk.ImageLayout, value: *const vk.ClearDepthStencilValue, count: u32, ranges: [*]const vk.ImageSubresourceRange) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdClearDepthStencilImage); defer entryPointEndLogTrace(); @@ -1755,7 +1755,7 @@ pub export fn strollCmdClearDepthStencilImage(p_cmd: vk.CommandBuffer, p_image: cmd.clearDepthStencilImage(image, layout, value, ranges[0..count]) catch |err| return errorLogger(err); } -pub export fn strollCmdCopyBuffer(p_cmd: vk.CommandBuffer, p_src: vk.Buffer, p_dst: vk.Buffer, count: u32, regions: [*]const vk.BufferCopy) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdCopyBuffer(p_cmd: vk.CommandBuffer, p_src: vk.Buffer, p_dst: vk.Buffer, count: u32, regions: [*]const vk.BufferCopy) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdCopyBuffer); defer entryPointEndLogTrace(); @@ -1765,7 +1765,7 @@ pub export fn strollCmdCopyBuffer(p_cmd: vk.CommandBuffer, p_src: vk.Buffer, p_d cmd.copyBuffer(src, dst, regions[0..count]) catch |err| return errorLogger(err); } -pub export fn strollCmdCopyBufferToImage(p_cmd: vk.CommandBuffer, p_src: vk.Buffer, p_dst: vk.Image, layout: vk.ImageLayout, count: u32, regions: [*]const vk.BufferImageCopy) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdCopyBufferToImage(p_cmd: vk.CommandBuffer, p_src: vk.Buffer, p_dst: vk.Image, layout: vk.ImageLayout, count: u32, regions: [*]const vk.BufferImageCopy) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdCopyBufferToImage); defer entryPointEndLogTrace(); @@ -1776,7 +1776,7 @@ pub export fn strollCmdCopyBufferToImage(p_cmd: vk.CommandBuffer, p_src: vk.Buff cmd.copyBufferToImage(src, dst, layout, regions[0..count]) catch |err| return errorLogger(err); } -pub export fn strollCmdCopyImage(p_cmd: vk.CommandBuffer, p_src: vk.Image, src_layout: vk.ImageLayout, p_dst: vk.Image, dst_layout: vk.ImageLayout, count: u32, regions: [*]const vk.ImageCopy) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdCopyImage(p_cmd: vk.CommandBuffer, p_src: vk.Image, src_layout: vk.ImageLayout, p_dst: vk.Image, dst_layout: vk.ImageLayout, count: u32, regions: [*]const vk.ImageCopy) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdCopyImage); defer entryPointEndLogTrace(); @@ -1786,7 +1786,7 @@ pub export fn strollCmdCopyImage(p_cmd: vk.CommandBuffer, p_src: vk.Image, src_l cmd.copyImage(src, src_layout, dst, dst_layout, regions[0..count]) catch |err| return errorLogger(err); } -pub export fn strollCmdCopyImageToBuffer(p_cmd: vk.CommandBuffer, p_src: vk.Image, layout: vk.ImageLayout, p_dst: vk.Buffer, count: u32, regions: [*]const vk.BufferImageCopy) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdCopyImageToBuffer(p_cmd: vk.CommandBuffer, p_src: vk.Image, layout: vk.ImageLayout, p_dst: vk.Buffer, count: u32, regions: [*]const vk.BufferImageCopy) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdCopyImageToBuffer); defer entryPointEndLogTrace(); @@ -1796,7 +1796,7 @@ pub export fn strollCmdCopyImageToBuffer(p_cmd: vk.CommandBuffer, p_src: vk.Imag cmd.copyImageToBuffer(src, layout, dst, regions[0..count]) catch |err| return errorLogger(err); } -pub export fn strollCmdCopyQueryPoolResults(p_cmd: vk.CommandBuffer, p_pool: vk.QueryPool, first: u32, count: u32, p_dst: vk.Buffer, offset: vk.DeviceSize, stride: vk.DeviceSize, flags: vk.QueryResultFlags) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdCopyQueryPoolResults(p_cmd: vk.CommandBuffer, p_pool: vk.QueryPool, first: u32, count: u32, p_dst: vk.Buffer, offset: vk.DeviceSize, stride: vk.DeviceSize, flags: vk.QueryResultFlags) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdCopyQueryPoolResults); defer entryPointEndLogTrace(); @@ -1815,7 +1815,7 @@ pub export fn strollCmdCopyQueryPoolResults(p_cmd: vk.CommandBuffer, p_pool: vk. _ = flags; } -pub export fn strollCmdDispatch(p_cmd: vk.CommandBuffer, group_count_x: u32, group_count_y: u32, group_count_z: u32) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdDispatch(p_cmd: vk.CommandBuffer, group_count_x: u32, group_count_y: u32, group_count_z: u32) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdDispatch); defer entryPointEndLogTrace(); @@ -1823,7 +1823,7 @@ pub export fn strollCmdDispatch(p_cmd: vk.CommandBuffer, group_count_x: u32, gro cmd.dispatch(group_count_x, group_count_y, group_count_z) catch |err| return errorLogger(err); } -pub export fn strollCmdDispatchIndirect(p_cmd: vk.CommandBuffer, p_buffer: vk.Buffer, offset: vk.DeviceSize) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdDispatchIndirect(p_cmd: vk.CommandBuffer, p_buffer: vk.Buffer, offset: vk.DeviceSize) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdDispatchIndirect); defer entryPointEndLogTrace(); @@ -1832,7 +1832,7 @@ pub export fn strollCmdDispatchIndirect(p_cmd: vk.CommandBuffer, p_buffer: vk.Bu cmd.dispatchIndirect(buffer, offset) catch |err| return errorLogger(err); } -pub export fn strollCmdDraw(p_cmd: vk.CommandBuffer, vertex_count: u32, instance_count: u32, first_vertex: u32, first_instance: u32) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdDraw(p_cmd: vk.CommandBuffer, vertex_count: u32, instance_count: u32, first_vertex: u32, first_instance: u32) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdDraw); defer entryPointEndLogTrace(); @@ -1840,7 +1840,7 @@ pub export fn strollCmdDraw(p_cmd: vk.CommandBuffer, vertex_count: u32, instance cmd.draw(vertex_count, instance_count, first_vertex, first_instance) catch |err| return errorLogger(err); } -pub export fn strollCmdDrawIndexed(p_cmd: vk.CommandBuffer, index_count: u32, instance_count: u32, first_index: u32, vertex_offset: i32, first_instance: u32) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdDrawIndexed(p_cmd: vk.CommandBuffer, index_count: u32, instance_count: u32, first_index: u32, vertex_offset: i32, first_instance: u32) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdDrawIndexed); defer entryPointEndLogTrace(); @@ -1848,7 +1848,7 @@ pub export fn strollCmdDrawIndexed(p_cmd: vk.CommandBuffer, index_count: u32, in cmd.drawIndexed(index_count, instance_count, first_index, vertex_offset, first_instance) catch |err| return errorLogger(err); } -pub export fn strollCmdDrawIndexedIndirect(p_cmd: vk.CommandBuffer, p_buffer: vk.Buffer, offset: vk.DeviceSize, count: u32, stride: u32) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdDrawIndexedIndirect(p_cmd: vk.CommandBuffer, p_buffer: vk.Buffer, offset: vk.DeviceSize, count: u32, stride: u32) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdDrawIndexedIndirect); defer entryPointEndLogTrace(); @@ -1857,7 +1857,7 @@ pub export fn strollCmdDrawIndexedIndirect(p_cmd: vk.CommandBuffer, p_buffer: vk cmd.drawIndexedIndirect(buffer, offset, count, stride) catch |err| return errorLogger(err); } -pub export fn strollCmdDrawIndirect(p_cmd: vk.CommandBuffer, p_buffer: vk.Buffer, offset: vk.DeviceSize, count: u32, stride: u32) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdDrawIndirect(p_cmd: vk.CommandBuffer, p_buffer: vk.Buffer, offset: vk.DeviceSize, count: u32, stride: u32) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdDrawIndirect); defer entryPointEndLogTrace(); @@ -1866,7 +1866,7 @@ pub export fn strollCmdDrawIndirect(p_cmd: vk.CommandBuffer, p_buffer: vk.Buffer cmd.drawIndirect(buffer, offset, count, stride) catch |err| return errorLogger(err); } -pub export fn strollCmdEndQuery(p_cmd: vk.CommandBuffer, p_pool: vk.QueryPool, query: u32) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdEndQuery(p_cmd: vk.CommandBuffer, p_pool: vk.QueryPool, query: u32) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdEndQuery); defer entryPointEndLogTrace(); @@ -1879,7 +1879,7 @@ pub export fn strollCmdEndQuery(p_cmd: vk.CommandBuffer, p_pool: vk.QueryPool, q _ = query; } -pub export fn strollCmdEndRenderPass(p_cmd: vk.CommandBuffer) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdEndRenderPass(p_cmd: vk.CommandBuffer) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdEndRenderPass); defer entryPointEndLogTrace(); @@ -1887,7 +1887,7 @@ pub export fn strollCmdEndRenderPass(p_cmd: vk.CommandBuffer) callconv(vk.vulkan cmd.endRenderPass() catch |err| return errorLogger(err); } -pub export fn strollCmdExecuteCommands(p_cmd: vk.CommandBuffer, count: u32, p_cmds: [*]const vk.CommandBuffer) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdExecuteCommands(p_cmd: vk.CommandBuffer, count: u32, p_cmds: [*]const vk.CommandBuffer) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdExecuteCommands); defer entryPointEndLogTrace(); @@ -1898,7 +1898,7 @@ pub export fn strollCmdExecuteCommands(p_cmd: vk.CommandBuffer, count: u32, p_cm } } -pub export fn strollCmdFillBuffer(p_cmd: vk.CommandBuffer, p_buffer: vk.Buffer, offset: vk.DeviceSize, size: vk.DeviceSize, data: u32) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdFillBuffer(p_cmd: vk.CommandBuffer, p_buffer: vk.Buffer, offset: vk.DeviceSize, size: vk.DeviceSize, data: u32) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdFillBuffer); defer entryPointEndLogTrace(); @@ -1907,7 +1907,7 @@ pub export fn strollCmdFillBuffer(p_cmd: vk.CommandBuffer, p_buffer: vk.Buffer, cmd.fillBuffer(buffer, offset, size, data) catch |err| return errorLogger(err); } -pub export fn strollCmdNextSubpass(p_cmd: vk.CommandBuffer, contents: vk.SubpassContents) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdNextSubpass(p_cmd: vk.CommandBuffer, contents: vk.SubpassContents) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdNextSubpass); defer entryPointEndLogTrace(); @@ -1915,7 +1915,7 @@ pub export fn strollCmdNextSubpass(p_cmd: vk.CommandBuffer, contents: vk.Subpass cmd.nextSubpass(contents) catch |err| return errorLogger(err); } -pub export fn strollCmdPipelineBarrier( +pub export fn apeCmdPipelineBarrier( p_cmd: vk.CommandBuffer, src_stage_mask: vk.PipelineStageFlags, dst_stage_mask: vk.PipelineStageFlags, @@ -1941,7 +1941,7 @@ pub export fn strollCmdPipelineBarrier( ) catch |err| return errorLogger(err); } -pub export fn strollCmdPushConstants(p_cmd: vk.CommandBuffer, layout: vk.PipelineLayout, flags: vk.ShaderStageFlags, offset: u32, size: u32, data: [*]const u8) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdPushConstants(p_cmd: vk.CommandBuffer, layout: vk.PipelineLayout, flags: vk.ShaderStageFlags, offset: u32, size: u32, data: [*]const u8) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdPushConstants); defer entryPointEndLogTrace(); @@ -1951,7 +1951,7 @@ pub export fn strollCmdPushConstants(p_cmd: vk.CommandBuffer, layout: vk.Pipelin _ = layout; // Pipelines embed their layout which is more trustworthy } -pub export fn strollCmdResetQueryPool(p_cmd: vk.CommandBuffer, p_pool: vk.QueryPool, first: u32, count: u32) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdResetQueryPool(p_cmd: vk.CommandBuffer, p_pool: vk.QueryPool, first: u32, count: u32) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdResetQueryPool); defer entryPointEndLogTrace(); @@ -1965,7 +1965,7 @@ pub export fn strollCmdResetQueryPool(p_cmd: vk.CommandBuffer, p_pool: vk.QueryP _ = count; } -pub export fn strollCmdResetEvent(p_cmd: vk.CommandBuffer, p_event: vk.Event, stage_mask: vk.PipelineStageFlags) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdResetEvent(p_cmd: vk.CommandBuffer, p_event: vk.Event, stage_mask: vk.PipelineStageFlags) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdResetEvent); defer entryPointEndLogTrace(); @@ -1974,7 +1974,7 @@ pub export fn strollCmdResetEvent(p_cmd: vk.CommandBuffer, p_event: vk.Event, st cmd.resetEvent(event, stage_mask) catch |err| return errorLogger(err); } -pub export fn strollCmdResolveImage( +pub export fn apeCmdResolveImage( p_cmd: vk.CommandBuffer, p_src: vk.Image, src_layout: vk.ImageLayout, @@ -1992,7 +1992,7 @@ pub export fn strollCmdResolveImage( cmd.resolveImage(src, src_layout, dst, dst_layout, regions[0..count]) catch |err| return errorLogger(err); } -pub export fn strollCmdSetBlendConstants(p_cmd: vk.CommandBuffer, p_constants: [*]f32) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdSetBlendConstants(p_cmd: vk.CommandBuffer, p_constants: [*]f32) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdSetBlendConstants); defer entryPointEndLogTrace(); @@ -2005,7 +2005,7 @@ pub export fn strollCmdSetBlendConstants(p_cmd: vk.CommandBuffer, p_constants: [ _ = constants; } -pub export fn strollCmdSetDepthBias(p_cmd: vk.CommandBuffer, constant_factor: f32, clamp: f32, slope_factor: f32) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdSetDepthBias(p_cmd: vk.CommandBuffer, constant_factor: f32, clamp: f32, slope_factor: f32) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdSetDepthBias); defer entryPointEndLogTrace(); @@ -2019,7 +2019,7 @@ pub export fn strollCmdSetDepthBias(p_cmd: vk.CommandBuffer, constant_factor: f3 _ = slope_factor; } -pub export fn strollCmdSetDepthBounds(p_cmd: vk.CommandBuffer, min: f32, max: f32) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdSetDepthBounds(p_cmd: vk.CommandBuffer, min: f32, max: f32) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdSetDepthBounds); defer entryPointEndLogTrace(); @@ -2032,7 +2032,7 @@ pub export fn strollCmdSetDepthBounds(p_cmd: vk.CommandBuffer, min: f32, max: f3 _ = max; } -pub export fn strollCmdSetEvent(p_cmd: vk.CommandBuffer, p_event: vk.Event, stage_mask: vk.PipelineStageFlags) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdSetEvent(p_cmd: vk.CommandBuffer, p_event: vk.Event, stage_mask: vk.PipelineStageFlags) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdSetEvent); defer entryPointEndLogTrace(); @@ -2041,7 +2041,7 @@ pub export fn strollCmdSetEvent(p_cmd: vk.CommandBuffer, p_event: vk.Event, stag cmd.setEvent(event, stage_mask) catch |err| return errorLogger(err); } -pub export fn strollCmdSetLineWidth(p_cmd: vk.CommandBuffer, width: f32) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdSetLineWidth(p_cmd: vk.CommandBuffer, width: f32) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdSetLineWidth); defer entryPointEndLogTrace(); @@ -2053,7 +2053,7 @@ pub export fn strollCmdSetLineWidth(p_cmd: vk.CommandBuffer, width: f32) callcon _ = width; } -pub export fn strollCmdSetScissor(p_cmd: vk.CommandBuffer, first: u32, count: u32, scissors: [*]const vk.Rect2D) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdSetScissor(p_cmd: vk.CommandBuffer, first: u32, count: u32, scissors: [*]const vk.Rect2D) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdSetScissor); defer entryPointEndLogTrace(); @@ -2061,7 +2061,7 @@ pub export fn strollCmdSetScissor(p_cmd: vk.CommandBuffer, first: u32, count: u3 cmd.setScissor(first, scissors[0..count]) catch |err| return errorLogger(err); } -pub export fn strollCmdSetStencilCompareMask(p_cmd: vk.CommandBuffer, face_mask: vk.StencilFaceFlags, compare_mask: u32) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdSetStencilCompareMask(p_cmd: vk.CommandBuffer, face_mask: vk.StencilFaceFlags, compare_mask: u32) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdSetStencilCompareMask); defer entryPointEndLogTrace(); @@ -2074,7 +2074,7 @@ pub export fn strollCmdSetStencilCompareMask(p_cmd: vk.CommandBuffer, face_mask: _ = compare_mask; } -pub export fn strollCmdSetStencilReference(p_cmd: vk.CommandBuffer, face_mask: vk.StencilFaceFlags, reference: u32) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdSetStencilReference(p_cmd: vk.CommandBuffer, face_mask: vk.StencilFaceFlags, reference: u32) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdSetStencilReference); defer entryPointEndLogTrace(); @@ -2087,7 +2087,7 @@ pub export fn strollCmdSetStencilReference(p_cmd: vk.CommandBuffer, face_mask: v _ = reference; } -pub export fn strollCmdSetStencilWriteMask(p_cmd: vk.CommandBuffer, face_mask: vk.StencilFaceFlags, write_mask: u32) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdSetStencilWriteMask(p_cmd: vk.CommandBuffer, face_mask: vk.StencilFaceFlags, write_mask: u32) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdSetStencilWriteMask); defer entryPointEndLogTrace(); @@ -2100,7 +2100,7 @@ pub export fn strollCmdSetStencilWriteMask(p_cmd: vk.CommandBuffer, face_mask: v _ = write_mask; } -pub export fn strollCmdSetViewport(p_cmd: vk.CommandBuffer, first: u32, count: u32, viewports: [*]const vk.Viewport) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdSetViewport(p_cmd: vk.CommandBuffer, first: u32, count: u32, viewports: [*]const vk.Viewport) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdSetViewport); defer entryPointEndLogTrace(); @@ -2108,7 +2108,7 @@ pub export fn strollCmdSetViewport(p_cmd: vk.CommandBuffer, first: u32, count: u cmd.setViewport(first, viewports[0..count]) catch |err| return errorLogger(err); } -pub export fn strollCmdUpdateBuffer(p_cmd: vk.CommandBuffer, p_buffer: vk.Buffer, offset: vk.DeviceSize, size: vk.DeviceSize, data: *const anyopaque) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdUpdateBuffer(p_cmd: vk.CommandBuffer, p_buffer: vk.Buffer, offset: vk.DeviceSize, size: vk.DeviceSize, data: *const anyopaque) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdUpdateBuffer); defer entryPointEndLogTrace(); @@ -2124,7 +2124,7 @@ pub export fn strollCmdUpdateBuffer(p_cmd: vk.CommandBuffer, p_buffer: vk.Buffer _ = data; } -pub export fn strollCmdWaitEvents( +pub export fn apeCmdWaitEvents( p_cmd: vk.CommandBuffer, count: u32, p_events: [*]const vk.Event, @@ -2154,7 +2154,7 @@ pub export fn strollCmdWaitEvents( } } -pub export fn strollCmdWriteTimestamp(p_cmd: vk.CommandBuffer, stage: vk.PipelineStageFlags, p_pool: vk.QueryPool, query: u32) callconv(vk.vulkan_call_conv) void { +pub export fn apeCmdWriteTimestamp(p_cmd: vk.CommandBuffer, stage: vk.PipelineStageFlags, p_pool: vk.QueryPool, query: u32) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkCmdWriteTimestamp); defer entryPointEndLogTrace(); @@ -2168,7 +2168,7 @@ pub export fn strollCmdWriteTimestamp(p_cmd: vk.CommandBuffer, stage: vk.Pipelin _ = query; } -pub export fn strollEndCommandBuffer(p_cmd: vk.CommandBuffer) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeEndCommandBuffer(p_cmd: vk.CommandBuffer) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkEndCommandBuffer); defer entryPointEndLogTrace(); @@ -2177,7 +2177,7 @@ pub export fn strollEndCommandBuffer(p_cmd: vk.CommandBuffer) callconv(vk.vulkan return .success; } -pub export fn strollResetCommandBuffer(p_cmd: vk.CommandBuffer, flags: vk.CommandBufferResetFlags) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeResetCommandBuffer(p_cmd: vk.CommandBuffer, flags: vk.CommandBufferResetFlags) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkResetCommandBuffer); defer entryPointEndLogTrace(); @@ -2188,7 +2188,7 @@ pub export fn strollResetCommandBuffer(p_cmd: vk.CommandBuffer, flags: vk.Comman // WSI functions =================================================================================================================================== -pub export fn strollAcquireNextImageKHR(p_device: vk.Device, p_swapchain: vk.SwapchainKHR, timeout: u64, p_semaphore: vk.Semaphore, p_fence: vk.Fence, image_index: *u32) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeAcquireNextImageKHR(p_device: vk.Device, p_swapchain: vk.SwapchainKHR, timeout: u64, p_semaphore: vk.Semaphore, p_fence: vk.Fence, image_index: *u32) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkAcquireNextImageKHR); defer entryPointEndLogTrace(); @@ -2201,7 +2201,7 @@ pub export fn strollAcquireNextImageKHR(p_device: vk.Device, p_swapchain: vk.Swa return .success; } -pub export fn strollCreateSwapchainKHR(p_device: vk.Device, info: *const vk.SwapchainCreateInfoKHR, callbacks: ?*const vk.AllocationCallbacks, p_swapchain: *vk.SwapchainKHR) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeCreateSwapchainKHR(p_device: vk.Device, info: *const vk.SwapchainCreateInfoKHR, callbacks: ?*const vk.AllocationCallbacks, p_swapchain: *vk.SwapchainKHR) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkCreateSwapchainKHR); defer entryPointEndLogTrace(); @@ -2222,7 +2222,7 @@ pub export fn strollCreateSwapchainKHR(p_device: vk.Device, info: *const vk.Swap return .success; } -pub export fn strollCreateWaylandSurfaceKHR(p_instance: vk.Instance, info: *const vk.WaylandSurfaceCreateInfoKHR, callbacks: ?*const vk.AllocationCallbacks, p_surface: *vk.SurfaceKHR) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeCreateWaylandSurfaceKHR(p_instance: vk.Instance, info: *const vk.WaylandSurfaceCreateInfoKHR, callbacks: ?*const vk.AllocationCallbacks, p_surface: *vk.SurfaceKHR) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkCreateWaylandSurfaceKHR); defer entryPointEndLogTrace(); @@ -2236,7 +2236,7 @@ pub export fn strollCreateWaylandSurfaceKHR(p_instance: vk.Instance, info: *cons return .success; } -pub export fn strollDestroySurfaceKHR(p_instance: vk.Instance, p_surface: vk.SurfaceKHR, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { +pub export fn apeDestroySurfaceKHR(p_instance: vk.Instance, p_surface: vk.SurfaceKHR, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkDestroySurfaceKHR); defer entryPointEndLogTrace(); @@ -2247,7 +2247,7 @@ pub export fn strollDestroySurfaceKHR(p_instance: vk.Instance, p_surface: vk.Sur non_dispatchable.intrusiveDestroy(allocator); } -pub export fn strollDestroySwapchainKHR(p_device: vk.Device, p_swapchain: vk.SwapchainKHR, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { +pub export fn apeDestroySwapchainKHR(p_device: vk.Device, p_swapchain: vk.SwapchainKHR, callbacks: ?*const vk.AllocationCallbacks) callconv(vk.vulkan_call_conv) void { entryPointBeginLogTrace(.vkDestroySwapchainKHR); defer entryPointEndLogTrace(); @@ -2258,7 +2258,7 @@ pub export fn strollDestroySwapchainKHR(p_device: vk.Device, p_swapchain: vk.Swa non_dispatchable.intrusiveDestroy(allocator); } -pub export fn strollGetPhysicalDeviceSurfaceCapabilitiesKHR(p_physical_device: vk.PhysicalDevice, p_surface: vk.SurfaceKHR, capabilities: *vk.SurfaceCapabilitiesKHR) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeGetPhysicalDeviceSurfaceCapabilitiesKHR(p_physical_device: vk.PhysicalDevice, p_surface: vk.SurfaceKHR, capabilities: *vk.SurfaceCapabilitiesKHR) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkGetPhysicalDeviceSurfaceCapabilitiesKHR); defer entryPointEndLogTrace(); @@ -2268,7 +2268,7 @@ pub export fn strollGetPhysicalDeviceSurfaceCapabilitiesKHR(p_physical_device: v return .success; } -pub export fn strollGetPhysicalDeviceSurfaceFormatsKHR(p_physical_device: vk.PhysicalDevice, p_surface: vk.SurfaceKHR, count: *u32, p_formats: ?[*]vk.SurfaceFormatKHR) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeGetPhysicalDeviceSurfaceFormatsKHR(p_physical_device: vk.PhysicalDevice, p_surface: vk.SurfaceKHR, count: *u32, p_formats: ?[*]vk.SurfaceFormatKHR) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkGetPhysicalDeviceSurfaceFormatsKHR); defer entryPointEndLogTrace(); @@ -2278,7 +2278,7 @@ pub export fn strollGetPhysicalDeviceSurfaceFormatsKHR(p_physical_device: vk.Phy return .success; } -pub export fn strollGetPhysicalDeviceSurfacePresentModesKHR(p_physical_device: vk.PhysicalDevice, p_surface: vk.SurfaceKHR, count: *u32, p_modes: ?[*]vk.PresentModeKHR) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeGetPhysicalDeviceSurfacePresentModesKHR(p_physical_device: vk.PhysicalDevice, p_surface: vk.SurfaceKHR, count: *u32, p_modes: ?[*]vk.PresentModeKHR) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkGetPhysicalDeviceSurfacePresentModesKHR); defer entryPointEndLogTrace(); @@ -2288,7 +2288,7 @@ pub export fn strollGetPhysicalDeviceSurfacePresentModesKHR(p_physical_device: v return .success; } -pub export fn strollGetPhysicalDeviceSurfaceSupportKHR(p_physical_device: vk.PhysicalDevice, queue_family_index: u32, p_surface: vk.SurfaceKHR, p_supported: *vk.Bool32) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeGetPhysicalDeviceSurfaceSupportKHR(p_physical_device: vk.PhysicalDevice, queue_family_index: u32, p_surface: vk.SurfaceKHR, p_supported: *vk.Bool32) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkGetPhysicalDeviceSurfaceSupportKHR); defer entryPointEndLogTrace(); @@ -2299,7 +2299,7 @@ pub export fn strollGetPhysicalDeviceSurfaceSupportKHR(p_physical_device: vk.Phy } /// TODO: proper implementation when adding new drivers -pub export fn strollGetPhysicalDeviceWaylandPresentationSupportKHR(p_physical_device: vk.PhysicalDevice, _: u32, _: *anyopaque) callconv(vk.vulkan_call_conv) vk.Bool32 { +pub export fn apeGetPhysicalDeviceWaylandPresentationSupportKHR(p_physical_device: vk.PhysicalDevice, _: u32, _: *anyopaque) callconv(vk.vulkan_call_conv) vk.Bool32 { entryPointBeginLogTrace(.vkGetPhysicalDeviceWaylandPresentationSupportKHR); defer entryPointEndLogTrace(); @@ -2307,7 +2307,7 @@ pub export fn strollGetPhysicalDeviceWaylandPresentationSupportKHR(p_physical_de return .true; } -pub export fn strollGetSwapchainImagesKHR(p_device: vk.Device, p_swapchain: vk.SwapchainKHR, count: *u32, p_images: ?[*]vk.Image) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeGetSwapchainImagesKHR(p_device: vk.Device, p_swapchain: vk.SwapchainKHR, count: *u32, p_images: ?[*]vk.Image) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkGetSwapchainImagesKHR); defer entryPointEndLogTrace(); @@ -2324,7 +2324,7 @@ pub export fn strollGetSwapchainImagesKHR(p_device: vk.Device, p_swapchain: vk.S return .success; } -pub export fn strollQueuePresentKHR(p_queue: vk.Queue, info: *const vk.PresentInfoKHR) callconv(vk.vulkan_call_conv) vk.Result { +pub export fn apeQueuePresentKHR(p_queue: vk.Queue, info: *const vk.PresentInfoKHR) callconv(vk.vulkan_call_conv) vk.Result { entryPointBeginLogTrace(.vkQueuePresentKHR); defer entryPointEndLogTrace(); diff --git a/src/vulkan/logger.zig b/src/vulkan/logger.zig index a27a7fa..db088c4 100644 --- a/src/vulkan/logger.zig +++ b/src/vulkan/logger.zig @@ -87,7 +87,7 @@ pub fn log(comptime level: std.log.Level, comptime scope: @EnumLiteral(), compti }; term.setColor(.magenta) catch {}; - writer.writeAll("[StrollDriver") catch continue; + writer.writeAll("[ApeDriver") catch continue; if (!builtin.is_test) { term.setColor(.cyan) catch {}; writer.writeAll(" " ++ root.DRIVER_NAME ++ " ") catch continue; diff --git a/src/vulkan/wsi/WaylandSurfaceKHR.zig b/src/vulkan/wsi/WaylandSurfaceKHR.zig index d3863fa..9b7193b 100644 --- a/src/vulkan/wsi/WaylandSurfaceKHR.zig +++ b/src/vulkan/wsi/WaylandSurfaceKHR.zig @@ -156,7 +156,7 @@ pub fn presentImage(interface: *Interface, allocator: std.mem.Allocator, image: } fn createShmFile(size: usize) VkError!std.posix.fd_t { - const name = "stroll_vk_wayland_surface"; + const name = "ape_vk_wayland_surface"; const fd = std.posix.memfd_create(name, std.posix.FD_CLOEXEC) catch return VkError.Unknown; errdefer std.c.close(fd);