diff --git a/build.zig b/build.zig index 466a919..17b8214 100644 --- a/build.zig +++ b/build.zig @@ -1,5 +1,5 @@ const std = @import("std"); -const sdl = @import("libs/sdl/build.zig"); +const sdl = @import("sdl"); const vkgen = @import("vulkan_zig"); pub fn build(b: *std.Build) void { @@ -34,7 +34,7 @@ pub fn build(b: *std.Build) void { // SDL2 const sdl_sdk = sdl.init(b, null, null); - sdl_sdk.link(exe, .dynamic, sdl.Library.SDL2); + sdl_sdk.link(exe, .dynamic, .SDL2); exe.root_module.addImport("sdl2", sdl_sdk.getWrapperModuleVulkan(vkzig_bindings)); // zmath diff --git a/build.zig.zon b/build.zig.zon index 5c30a28..911ff6c 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -9,15 +9,18 @@ .url = "https://github.com/Snektron/vulkan-zig/archive/9f6e6177b1fdb3ed22231d9216a24480e84cfa5e.tar.gz", .hash = "1220f2961df224f7d35dee774b26194b8b937cc252fa8e4023407776c58521d53e38", }, - // .sdl = .{ - // .url = "https://github.com/ikskuh/SDL.zig/archive/9663dc70c19b13afcb4b9f596c928d7b2838e548.tar.gz", - // .hash = "12202141beb92d68ef5088538ff761d5c3ecd2d4e11867c89fbbdcd9f814b8cba8ee", - // }, + .sdl = .{ + .url = "https://github.com/MasterQ32/SDL.zig/archive/1432ed3f6a020973906fbc996868131ae1d631be.tar.gz", + .hash = "1220ebeeaade31e207a56977aff537a65e6338cddc68d50217ddf30bbc58fb27d367", + }, }, .paths = .{ "build.zig", "build.zig.zon", "src", + // For example... + //"LICENSE", + //"README.md", }, } diff --git a/libs/sdl b/libs/sdl deleted file mode 160000 index 9663dc7..0000000 --- a/libs/sdl +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 9663dc70c19b13afcb4b9f596c928d7b2838e548 diff --git a/src/Mesh.zig b/src/Mesh.zig index 0ba7b58..fb46b79 100644 --- a/src/Mesh.zig +++ b/src/Mesh.zig @@ -6,11 +6,11 @@ const Utilities = @import("utilities.zig"); const Vertex = Utilities.Vertex; const Device = @import("vulkan_renderer.zig").Device; const Instance = @import("vulkan_renderer.zig").Instance; -const Model = @import("vulkan_renderer.zig").Model; +const UboModel = @import("vulkan_renderer.zig").UboModel; const Self = @This(); -ubo_model: Model, +ubo_model: UboModel, vertex_count: u32, vertex_buffer: vk.Buffer, diff --git a/src/shaders/shader.vert b/src/shaders/shader.vert index baad5c6..27aa613 100644 --- a/src/shaders/shader.vert +++ b/src/shaders/shader.vert @@ -3,18 +3,18 @@ layout(location = 0) in vec3 pos; layout(location = 1) in vec3 col; -layout(location = 0) out vec3 fragCol; - layout(binding = 0) uniform UboViewProjection { mat4 projection; mat4 view; } uboViewProjection; -layout(push_constant) uniform PushModel { +layout(binding = 1) uniform UboModel { mat4 model; -} pushModel; +} uboModel; + +layout(location = 0) out vec3 fragCol; void main() { - gl_Position = uboViewProjection.projection * uboViewProjection.view * pushModel.model * vec4(pos, 1.0); + gl_Position = uboViewProjection.projection * uboViewProjection.view * uboModel.model * vec4(pos, 1.0); fragCol = col; } diff --git a/src/vulkan_renderer.zig b/src/vulkan_renderer.zig index 5b7da9f..f2c9401 100644 --- a/src/vulkan_renderer.zig +++ b/src/vulkan_renderer.zig @@ -43,7 +43,7 @@ const UboViewProjection = struct { view: zm.Mat align(16), }; -pub const Model = struct { +pub const UboModel = struct { model: zm.Mat align(16), }; @@ -81,7 +81,6 @@ pub const VulkanRenderer = struct { // Descriptors descriptor_set_layout: vk.DescriptorSetLayout, - push_constant_range: vk.PushConstantRange, descriptor_pool: vk.DescriptorPool, descriptor_sets: []vk.DescriptorSet, @@ -89,6 +88,9 @@ pub const VulkanRenderer = struct { vp_uniform_buffer: []vk.Buffer, vp_uniform_buffer_memory: []vk.DeviceMemory, + model_duniform_buffer: []vk.Buffer, + model_duniform_buffer_memory: []vk.DeviceMemory, + // Pipeline graphics_pipeline: vk.Pipeline, pipeline_layout: vk.PipelineLayout, @@ -101,6 +103,10 @@ pub const VulkanRenderer = struct { swapchain_image_format: vk.Format, extent: vk.Extent2D, + min_uniform_buffer_offset: vk.DeviceSize, + model_uniform_alignment: usize, + model_transfer_space: [MAX_OBJECTS]UboModel, + // Synchronisation image_available: [MAX_FRAME_DRAWS]vk.Semaphore, render_finished: [MAX_FRAME_DRAWS]vk.Semaphore, @@ -128,7 +134,6 @@ pub const VulkanRenderer = struct { try self.createSwapchain(); try self.createRenderPass(); try self.createDescriptorSetLayout(); - try self.createPushConstantRange(); try self.createGraphicsPipeline(); try self.createFramebuffers(); try self.createCommandPool(); @@ -196,10 +201,12 @@ pub const VulkanRenderer = struct { self.meshes = [_]Mesh{ first_mesh, second_mesh }; try self.createCommandBuffers(); + try self.allocateDynamicBufferTransferSpace(); try self.createUniformBuffers(); try self.createDescriptorPool(); try self.createDescriptorSets(); + try self.recordCommands(); try self.createSynchronisation(); return self; @@ -213,12 +220,7 @@ pub const VulkanRenderer = struct { pub fn draw(self: *Self) !void { // Wait for given fence to signal (open) from last draw before continuing - _ = try self.device.waitForFences( - 1, - @ptrCast(&self.draw_fences[self.current_frame]), - vk.TRUE, - std.math.maxInt(u64), - ); + _ = try self.device.waitForFences(1, @ptrCast(&self.draw_fences[self.current_frame]), vk.TRUE, std.math.maxInt(u64)); // Manually reset (close) fences try self.device.resetFences(1, @ptrCast(&self.draw_fences[self.current_frame])); @@ -231,7 +233,6 @@ pub const VulkanRenderer = struct { .null_handle, ); - try self.recordCommands(image_index_result.image_index); try self.updateUniformBuffers(image_index_result.image_index); // -- Submit command buffer to render @@ -280,9 +281,13 @@ pub const VulkanRenderer = struct { for (0..self.swapchain_images.len) |i| { self.device.destroyBuffer(self.vp_uniform_buffer[i], null); self.device.freeMemory(self.vp_uniform_buffer_memory[i], null); + self.device.destroyBuffer(self.model_duniform_buffer[i], null); + self.device.freeMemory(self.model_duniform_buffer_memory[i], null); } self.allocator.free(self.vp_uniform_buffer); self.allocator.free(self.vp_uniform_buffer_memory); + self.allocator.free(self.model_duniform_buffer); + self.allocator.free(self.model_duniform_buffer_memory); self.allocator.free(self.descriptor_sets); for (self.meshes) |mesh| { @@ -571,7 +576,16 @@ pub const VulkanRenderer = struct { .p_immutable_samplers = null, // For texture: can make smapler data immutable by specifying in layout }; - const layout_bindings = [_]vk.DescriptorSetLayoutBinding{vp_layout_binding}; + // Model binding info + const model_layout_binding: vk.DescriptorSetLayoutBinding = .{ + .binding = 1, + .descriptor_type = .uniform_buffer_dynamic, + .descriptor_count = 1, + .stage_flags = .{ .vertex_bit = true }, + .p_immutable_samplers = null, + }; + + const layout_bindings = [_]vk.DescriptorSetLayoutBinding{ vp_layout_binding, model_layout_binding }; // Create descriptor set layout with given bindings const layout_create_info: vk.DescriptorSetLayoutCreateInfo = .{ @@ -583,15 +597,6 @@ pub const VulkanRenderer = struct { self.descriptor_set_layout = try self.device.createDescriptorSetLayout(&layout_create_info, null); } - fn createPushConstantRange(self: *Self) !void { - // Define push constant values (no 'create' needed) - self.push_constant_range = .{ - .stage_flags = .{ .vertex_bit = true }, // Shader stage push constant will go to - .offset = 0, // Offset into given data to pass to push constant - .size = @sizeOf(Model), // Size of data being passed - }; - } - fn createGraphicsPipeline(self: *Self) !void { // Create shader modules const vert = try self.device.createShaderModule(&.{ @@ -752,8 +757,6 @@ pub const VulkanRenderer = struct { const pipeline_layout_create_info: vk.PipelineLayoutCreateInfo = .{ .set_layout_count = 1, .p_set_layouts = @ptrCast(&self.descriptor_set_layout), - .push_constant_range_count = 1, - .p_push_constant_ranges = @ptrCast(&self.push_constant_range), }; self.pipeline_layout = try self.device.createPipelineLayout(&pipeline_layout_create_info, null); @@ -817,7 +820,6 @@ pub const VulkanRenderer = struct { const pool_create_info: vk.CommandPoolCreateInfo = .{ // Queue family type that buffers from this command pool will use .queue_family_index = queue_family_indices.graphics_family.?, - .flags = .{ .reset_command_buffer_bit = true }, }; // Create a graphics queue family command pool @@ -859,9 +861,14 @@ pub const VulkanRenderer = struct { // View projection buffer size const vp_buffer_size: vk.DeviceSize = @sizeOf(UboViewProjection); + // Model buffer size + const model_buffer_size: vk.DeviceSize = self.model_uniform_alignment * MAX_OBJECTS; + // One uniform buffer for each image (and by extension, command buffer) self.vp_uniform_buffer = try self.allocator.alloc(vk.Buffer, self.swapchain_images.len); self.vp_uniform_buffer_memory = try self.allocator.alloc(vk.DeviceMemory, self.swapchain_images.len); + self.model_duniform_buffer = try self.allocator.alloc(vk.Buffer, self.swapchain_images.len); + self.model_duniform_buffer_memory = try self.allocator.alloc(vk.DeviceMemory, self.swapchain_images.len); // Create the uniform buffers for (0..self.vp_uniform_buffer.len) |i| { @@ -875,6 +882,17 @@ pub const VulkanRenderer = struct { &self.vp_uniform_buffer[i], &self.vp_uniform_buffer_memory[i], ); + + try Utilities.createBuffer( + self.physical_device, + self.instance, + self.device, + model_buffer_size, + .{ .uniform_buffer_bit = true }, + .{ .host_visible_bit = true, .host_coherent_bit = true }, + &self.model_duniform_buffer[i], + &self.model_duniform_buffer_memory[i], + ); } } @@ -886,8 +904,14 @@ pub const VulkanRenderer = struct { .descriptor_count = @intCast(self.vp_uniform_buffer.len), }; + // Model pool (dynamic) + const model_pool_size: vk.DescriptorPoolSize = .{ + .type = .uniform_buffer_dynamic, + .descriptor_count = @intCast(self.model_duniform_buffer.len), + }; + // List of pool sizes - const descriptor_pool_sizes = [_]vk.DescriptorPoolSize{vp_pool_size}; + const descriptor_pool_sizes = [_]vk.DescriptorPoolSize{ vp_pool_size, model_pool_size }; // Data to create descriptor pool const pool_create_info: vk.DescriptorPoolCreateInfo = .{ @@ -942,8 +966,27 @@ pub const VulkanRenderer = struct { .p_texel_buffer_view = undefined, }; + // -- Model descriptor + // Model buffer binding info + const model_buffer_info: vk.DescriptorBufferInfo = .{ + .buffer = self.model_duniform_buffer[i], + .offset = 0, + .range = self.model_uniform_alignment, + }; + + const model_set_write: vk.WriteDescriptorSet = .{ + .dst_set = self.descriptor_sets[i], + .dst_binding = 1, + .dst_array_element = 0, + .descriptor_type = .uniform_buffer_dynamic, + .descriptor_count = 1, + .p_buffer_info = @ptrCast(&model_buffer_info), + .p_image_info = undefined, + .p_texel_buffer_view = undefined, + }; + // List of descriptor set writes - const set_writes = [_]vk.WriteDescriptorSet{vp_set_write}; + const set_writes = [_]vk.WriteDescriptorSet{ vp_set_write, model_set_write }; // Update the descriptor sets with new buffer/binding info self.device.updateDescriptorSets(@intCast(set_writes.len), &set_writes, 0, null); @@ -952,7 +995,7 @@ pub const VulkanRenderer = struct { fn updateUniformBuffers(self: *Self, image_index: u32) !void { // Copy VP data - const data = try self.device.mapMemory( + var data = try self.device.mapMemory( self.vp_uniform_buffer_memory[image_index], 0, @sizeOf(UboViewProjection), @@ -962,9 +1005,26 @@ pub const VulkanRenderer = struct { const vp_data: *UboViewProjection = @ptrCast(@alignCast(data)); vp_data.* = self.ubo_view_projection; self.device.unmapMemory(self.vp_uniform_buffer_memory[image_index]); + + // Copy model data + for (self.meshes, 0..) |mesh, i| { + self.model_transfer_space[i] = mesh.ubo_model; + } + + // Map the list of model data + data = try self.device.mapMemory( + self.model_duniform_buffer_memory[image_index], + 0, + self.model_uniform_alignment * self.meshes.len, + .{}, + ); + + const model_data: [*]UboModel = @ptrCast(@alignCast(data)); + @memcpy(model_data, self.model_transfer_space[0..self.meshes.len]); + self.device.unmapMemory(self.model_duniform_buffer_memory[image_index]); } - fn recordCommands(self: *Self, current_image: u32) !void { + fn recordCommands(self: *Self) !void { // Information about how to begin each command const buffer_begin_info: vk.CommandBufferBeginInfo = .{ // Buffer can be resubmitted when it has already been submitted and is awaiting execution @@ -987,64 +1047,59 @@ pub const VulkanRenderer = struct { .framebuffer = undefined, }; - render_pass_begin_info.framebuffer = self.swapchain_framebuffers[current_image]; - const command_buffer = self.command_buffers[current_image]; + for (self.command_buffers, 0..) |command_buffer, i| { + render_pass_begin_info.framebuffer = self.swapchain_framebuffers[i]; - // Start recording commands to command buffer - try command_buffer.beginCommandBuffer(&buffer_begin_info); + // Start recording commands to command buffer + try command_buffer.beginCommandBuffer(&buffer_begin_info); - { - // Begin render pass - command_buffer.beginRenderPass(&render_pass_begin_info, vk.SubpassContents.@"inline"); + { + // Begin render pass + command_buffer.beginRenderPass(&render_pass_begin_info, vk.SubpassContents.@"inline"); - // Needed when using dynamic state - command_buffer.setViewport(0, 1, @ptrCast(&self.viewport)); - command_buffer.setScissor(0, 1, @ptrCast(&self.scissor)); + // Needed when using dynamic state + command_buffer.setViewport(0, 1, @ptrCast(&self.viewport)); + command_buffer.setScissor(0, 1, @ptrCast(&self.scissor)); - for (self.meshes) |mesh| { - // Bind pipeline to be used in render pass - command_buffer.bindPipeline(.graphics, self.graphics_pipeline); + for (self.meshes, 0..) |mesh, j| { + // Bind pipeline to be used in render pass + command_buffer.bindPipeline(.graphics, self.graphics_pipeline); - // Buffers to bind - const vertex_buffers = [_]vk.Buffer{mesh.vertex_buffer}; - // Offsets into buffers being bound - const offsets = [_]vk.DeviceSize{0}; - // Command to bind vertex buffer before drawing with them - command_buffer.bindVertexBuffers(0, 1, &vertex_buffers, &offsets); + // Buffers to bind + const vertex_buffers = [_]vk.Buffer{mesh.vertex_buffer}; + // Offsets into buffers being bound + const offsets = [_]vk.DeviceSize{0}; + // Command to bind vertex buffer before drawing with them + command_buffer.bindVertexBuffers(0, 1, &vertex_buffers, &offsets); - // Bind mesh index buffer, with 0 offset and using the uint32 type - command_buffer.bindIndexBuffer(mesh.index_buffer, 0, .uint32); + // Bind mesh index buffer, with 0 offset and using the uint32 type + command_buffer.bindIndexBuffer(mesh.index_buffer, 0, .uint32); - // Push constants to given shader stage directly (no buffer) - command_buffer.pushConstants( - self.pipeline_layout, - .{ .vertex_bit = true }, // Stage to push constants to - 0, // Offset of push constants to update - @sizeOf(Model), // Size of data being pushed - @ptrCast(&mesh.ubo_model.model), // Actual data being pushed (can be array) - ); + // Dynamic offset amount + const dynamic_offset: u32 = @intCast(self.model_uniform_alignment * j); - // Bind descriptor sets - command_buffer.bindDescriptorSets( - .graphics, - self.pipeline_layout, - 0, - 1, - @ptrCast(&self.descriptor_sets[current_image]), - 0, - null, - ); + // Bind descriptor sets + command_buffer.bindDescriptorSets( + .graphics, + self.pipeline_layout, + 0, + 1, + @ptrCast(&self.descriptor_sets[i]), + 1, + @ptrCast(&dynamic_offset), + ); - // Execute a pipeline - command_buffer.drawIndexed(mesh.index_count, 1, 0, 0, 0); + // Execute a pipeline + command_buffer.drawIndexed(mesh.index_count, 1, 0, 0, 0); + } + + // End render pass + command_buffer.endRenderPass(); } - // End render pass - command_buffer.endRenderPass(); + // Stop recording to command buffer + try command_buffer.endCommandBuffer(); } - - // Stop recording to command buffer - try command_buffer.endCommandBuffer(); } fn getPhysicalDevice(self: *Self) !void { @@ -1065,6 +1120,21 @@ pub const VulkanRenderer = struct { // TODO Obviously needs to be something else unreachable; } + + // Get properties of our new device + const device_props = self.instance.getPhysicalDeviceProperties(self.physical_device); + + self.min_uniform_buffer_offset = device_props.limits.min_uniform_buffer_offset_alignment; + } + + fn allocateDynamicBufferTransferSpace(self: *Self) !void { + // TODO Needed in zig (we have align())? + // Calculate alignment of model data + self.model_uniform_alignment = + (@sizeOf(UboModel) + self.min_uniform_buffer_offset - 1) & ~(self.min_uniform_buffer_offset - 1); + + // Create space in memory to hold dynamic buffer that is aligned to our required alignment and holds MAX_OBJECTS + // self.model_transfer_space = try self.allocator.create(UboModel); } fn getRequiredExtensions(self: Self) ![][*:0]const u8 { diff --git a/vk.xml b/vk.xml index 3633256..adb80de 100644 --- a/vk.xml +++ b/vk.xml @@ -55,7 +55,7 @@ branch of the member gitlab server. - + @@ -175,11 +175,11 @@ branch of the member gitlab server. #define VKSC_API_VERSION_1_0 VK_MAKE_API_VERSION(VKSC_API_VARIANT, 1, 0, 0)// Patch version should always be set to 0 // Version of this file -#define VK_HEADER_VERSION 291 +#define VK_HEADER_VERSION 288 // Complete version of this file #define VK_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(0, 1, 3, VK_HEADER_VERSION) // Version of this file -#define VK_HEADER_VERSION 15 +#define VK_HEADER_VERSION 14 // Complete version of this file #define VK_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(VKSC_API_VARIANT, 1, 0, VK_HEADER_VERSION) @@ -784,8 +784,6 @@ typedef void* MTLSharedEvent_id; - - @@ -798,7 +796,6 @@ typedef void* MTLSharedEvent_id; - WSI extensions @@ -1878,7 +1875,7 @@ typedef void* MTLSharedEvent_id; uint32_t maxImageDimension1Dmax 1D image dimension uint32_t maxImageDimension2Dmax 2D image dimension uint32_t maxImageDimension3Dmax 3D image dimension - uint32_t maxImageDimensionCubemax cube map image dimension + uint32_t maxImageDimensionCubemax cubemap image dimension uint32_t maxImageArrayLayersmax layers for image arrays uint32_t maxTexelBufferElementsmax texel buffer size (fstexels) uint32_t maxUniformBufferRangemax uniform buffer range (bytes) @@ -2100,7 +2097,7 @@ typedef void* MTLSharedEvent_id; uint32_t planeStackIndexThe z-order of the plane. VkSurfaceTransformFlagBitsKHR transformTransform to apply to the images as part of the scanout operation float globalAlphaGlobal alpha value. Must be between 0 and 1, inclusive. Ignored if alphaMode is not VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR - VkDisplayPlaneAlphaFlagBitsKHR alphaModeThe type of alpha blending to use. Must be one of the bits from VkDisplayPlaneCapabilitiesKHR::supportedAlpha for this display plane + VkDisplayPlaneAlphaFlagBitsKHR alphaModeWhat type of alpha blending to use. Must be a bit from vkGetDisplayPlanePropertiesKHR::supportedAlpha. VkExtent2D imageExtentsize of the images to use with this surface @@ -2969,9 +2966,9 @@ typedef void* MTLSharedEvent_id; VkStructureType sType void* pNext - VkBool32 multiviewMultiple views in a render pass - VkBool32 multiviewGeometryShaderMultiple views in a render pass w/ geometry shader - VkBool32 multiviewTessellationShaderMultiple views in a render pass w/ tessellation shader + VkBool32 multiviewMultiple views in a renderpass + VkBool32 multiviewGeometryShaderMultiple views in a renderpass w/ geometry shader + VkBool32 multiviewTessellationShaderMultiple views in a renderpass w/ tessellation shader @@ -3737,42 +3734,6 @@ typedef void* MTLSharedEvent_id; uint32_t maxCombinedImageSamplerDescriptorCount VkBool32 fragmentShadingRateClampCombinerInputs - - VkStructureType sType - void* pNext - VkBool32 maintenance7 - - - VkStructureType sType - void* pNext - VkBool32 robustFragmentShadingRateAttachmentAccess - VkBool32 separateDepthStencilAttachmentAccess - uint32_t maxDescriptorSetTotalUniformBuffersDynamic - uint32_t maxDescriptorSetTotalStorageBuffersDynamic - uint32_t maxDescriptorSetTotalBuffersDynamic - uint32_t maxDescriptorSetUpdateAfterBindTotalUniformBuffersDynamic - uint32_t maxDescriptorSetUpdateAfterBindTotalStorageBuffersDynamic - uint32_t maxDescriptorSetUpdateAfterBindTotalBuffersDynamic - - - VkStructureType sType - void* pNext - uint32_t layeredApiCount - VkPhysicalDeviceLayeredApiPropertiesKHR* pLayeredApisOutput list of layered implementations underneath the physical device - - - VkStructureType sType - void* pNext - uint32_t vendorID - uint32_t deviceID - VkPhysicalDeviceLayeredApiKHR layeredAPI - char deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE] - - - VkStructureType sType - void* pNext - VkPhysicalDeviceProperties2 properties - VkStructureType sType const void* pNext @@ -5484,9 +5445,9 @@ typedef void* MTLSharedEvent_id; VkBool32 uniformAndStorageBuffer16BitAccess16-bit integer/floating-point variables supported in BufferBlock and Block VkBool32 storagePushConstant1616-bit integer/floating-point variables supported in PushConstant VkBool32 storageInputOutput1616-bit integer/floating-point variables supported in shader inputs and outputs - VkBool32 multiviewMultiple views in a render pass - VkBool32 multiviewGeometryShaderMultiple views in a render pass w/ geometry shader - VkBool32 multiviewTessellationShaderMultiple views in a render pass w/ tessellation shader + VkBool32 multiviewMultiple views in a renderpass + VkBool32 multiviewGeometryShaderMultiple views in a renderpass w/ geometry shader + VkBool32 multiviewTessellationShaderMultiple views in a renderpass w/ tessellation shader VkBool32 variablePointersStorageBuffer VkBool32 variablePointers VkBool32 protectedMemory @@ -6703,12 +6664,12 @@ typedef void* MTLSharedEvent_id; VkStructureType sType void* pNext - VkFormat format - VkComponentMapping componentMapping - VkImageCreateFlags imageCreateFlags - VkImageType imageType - VkImageTiling imageTiling - VkImageUsageFlags imageUsageFlags + VkFormat format + VkComponentMapping componentMapping + VkImageCreateFlags imageCreateFlags + VkImageType imageType + VkImageTiling imageTiling + VkImageUsageFlags imageUsageFlags VkStructureType sType @@ -6720,16 +6681,16 @@ typedef void* MTLSharedEvent_id; VkStructureType sType - void* pNext - VkVideoCapabilityFlagsKHR flags - VkDeviceSize minBitstreamBufferOffsetAlignment - VkDeviceSize minBitstreamBufferSizeAlignment - VkExtent2D pictureAccessGranularity - VkExtent2D minCodedExtent - VkExtent2D maxCodedExtent - uint32_t maxDpbSlots - uint32_t maxActiveReferencePictures - VkExtensionProperties stdHeaderVersion + void* pNext + VkVideoCapabilityFlagsKHR flags + VkDeviceSize minBitstreamBufferOffsetAlignment + VkDeviceSize minBitstreamBufferSizeAlignment + VkExtent2D pictureAccessGranularity + VkExtent2D minCodedExtent + VkExtent2D maxCodedExtent + uint32_t maxDpbSlots + uint32_t maxActiveReferencePictures + VkExtensionProperties stdHeaderVersion VkStructureType sType @@ -6762,7 +6723,7 @@ typedef void* MTLSharedEvent_id; VkStructureType sType void* pNext - VkVideoDecodeCapabilityFlagsKHR flags + VkVideoDecodeCapabilityFlagsKHR flags VkStructureType sType @@ -6797,9 +6758,27 @@ typedef void* MTLSharedEvent_id; #include "vk_video/vulkan_video_codec_h264std.h" + + + + + + + + + + + + + + + + #include "vk_video/vulkan_video_codec_h264std_decode.h" + + VkStructureType sType const void* pNext @@ -6808,9 +6787,9 @@ typedef void* MTLSharedEvent_id; VkStructureType sType - void* pNext - StdVideoH264LevelIdc maxLevelIdc - VkOffset2D fieldOffsetGranularity + void* pNext + StdVideoH264LevelIdc maxLevelIdc + VkOffset2D fieldOffsetGranularity @@ -6846,10 +6825,25 @@ typedef void* MTLSharedEvent_id; + + + + + + + + + + + + + #include "vk_video/vulkan_video_codec_h265std_decode.h" + + VkStructureType sType const void* pNext @@ -6858,7 +6852,7 @@ typedef void* MTLSharedEvent_id; VkStructureType sType void* pNext - StdVideoH265LevelIdc maxLevelIdc + StdVideoH265LevelIdc maxLevelIdc VkStructureType sType @@ -6906,7 +6900,7 @@ typedef void* MTLSharedEvent_id; VkStructureType sType void* pNext - StdVideoAV1Level maxLevel + StdVideoAV1Level maxLevel VkStructureType sType @@ -7045,30 +7039,30 @@ typedef void* MTLSharedEvent_id; VkStructureType sType void* pNext - VkVideoEncodeCapabilityFlagsKHR flags - VkVideoEncodeRateControlModeFlagsKHR rateControlModes - uint32_t maxRateControlLayers - uint64_t maxBitrate - uint32_t maxQualityLevels - VkExtent2D encodeInputPictureGranularity - VkVideoEncodeFeedbackFlagsKHR supportedEncodeFeedbackFlags + VkVideoEncodeCapabilityFlagsKHR flags + VkVideoEncodeRateControlModeFlagsKHR rateControlModes + uint32_t maxRateControlLayers + uint64_t maxBitrate + uint32_t maxQualityLevels + VkExtent2D encodeInputPictureGranularity + VkVideoEncodeFeedbackFlagsKHR supportedEncodeFeedbackFlags VkStructureType sType void* pNext - VkVideoEncodeH264CapabilityFlagsKHR flags - StdVideoH264LevelIdc maxLevelIdc - uint32_t maxSliceCount - uint32_t maxPPictureL0ReferenceCount - uint32_t maxBPictureL0ReferenceCount - uint32_t maxL1ReferenceCount - uint32_t maxTemporalLayerCount - VkBool32 expectDyadicTemporalLayerPattern - int32_t minQp - int32_t maxQp - VkBool32 prefersGopRemainingFrames - VkBool32 requiresGopRemainingFrames - VkVideoEncodeH264StdFlagsKHR stdSyntaxFlags + VkVideoEncodeH264CapabilityFlagsKHR flags + StdVideoH264LevelIdc maxLevelIdc + uint32_t maxSliceCount + uint32_t maxPPictureL0ReferenceCount + uint32_t maxBPictureL0ReferenceCount + uint32_t maxL1ReferenceCount + uint32_t maxTemporalLayerCount + VkBool32 expectDyadicTemporalLayerPattern + int32_t minQp + int32_t maxQp + VkBool32 prefersGopRemainingFrames + VkBool32 requiresGopRemainingFrames + VkVideoEncodeH264StdFlagsKHR stdSyntaxFlags VkStructureType sType @@ -7087,6 +7081,13 @@ typedef void* MTLSharedEvent_id; + + + + + + + VkStructureType sType const void* pNext @@ -7186,22 +7187,22 @@ typedef void* MTLSharedEvent_id; VkStructureType sType void* pNext - VkVideoEncodeH265CapabilityFlagsKHR flags - StdVideoH265LevelIdc maxLevelIdc - uint32_t maxSliceSegmentCount - VkExtent2D maxTiles - VkVideoEncodeH265CtbSizeFlagsKHR ctbSizes - VkVideoEncodeH265TransformBlockSizeFlagsKHR transformBlockSizes - uint32_t maxPPictureL0ReferenceCount - uint32_t maxBPictureL0ReferenceCount - uint32_t maxL1ReferenceCount - uint32_t maxSubLayerCount - VkBool32 expectDyadicTemporalSubLayerPattern - int32_t minQp - int32_t maxQp - VkBool32 prefersGopRemainingFrames - VkBool32 requiresGopRemainingFrames - VkVideoEncodeH265StdFlagsKHR stdSyntaxFlags + VkVideoEncodeH265CapabilityFlagsKHR flags + StdVideoH265LevelIdc maxLevelIdc + uint32_t maxSliceSegmentCount + VkExtent2D maxTiles + VkVideoEncodeH265CtbSizeFlagsKHR ctbSizes + VkVideoEncodeH265TransformBlockSizeFlagsKHR transformBlockSizes + uint32_t maxPPictureL0ReferenceCount + uint32_t maxBPictureL0ReferenceCount + uint32_t maxL1ReferenceCount + uint32_t maxSubLayerCount + VkBool32 expectDyadicTemporalSubLayerPattern + int32_t minQp + int32_t maxQp + VkBool32 prefersGopRemainingFrames + VkBool32 requiresGopRemainingFrames + VkVideoEncodeH265StdFlagsKHR stdSyntaxFlags VkStructureType sType @@ -7216,9 +7217,14 @@ typedef void* MTLSharedEvent_id; uint32_t preferredMaxL1ReferenceCount #include "vk_video/vulkan_video_codec_h265std_encode.h" + + + + + VkStructureType sType const void* pNext @@ -8788,24 +8794,6 @@ typedef void* MTLSharedEvent_id; VkDeviceOrHostAddressConstAMDX infos uint64_t stride - - VkStructureType sType - void* pNext - VkBool32 antiLag - - - VkStructureType sType - const void* pNext - VkAntiLagModeAMD mode - uint32_t maxFPS - const VkAntiLagPresentationInfoAMD* pPresentationInfo - - - VkStructureType sType - void* pNext - VkAntiLagStageAMD stage - uint64_t frameIndex - VkStructureType sType const void* pNext @@ -9749,15 +9737,6 @@ typedef void* MTLSharedEvent_id; - - - - - - - - - Flags @@ -11286,13 +11265,6 @@ typedef void* MTLSharedEvent_id; - - - - - - - @@ -12947,35 +12919,35 @@ typedef void* MTLSharedEvent_id; VkDevice device const VkImportFenceFdInfoKHR* pImportFenceFdInfo - + VkResult vkGetFenceSciSyncFenceNV VkDevice device const VkFenceGetSciSyncInfoNV* pGetSciSyncHandleInfo void* pHandle - + VkResult vkGetFenceSciSyncObjNV VkDevice device const VkFenceGetSciSyncInfoNV* pGetSciSyncHandleInfo void* pHandle - + VkResult vkImportFenceSciSyncFenceNV VkDevice device const VkImportFenceSciSyncInfoNV* pImportFenceSciSyncInfo - + VkResult vkImportFenceSciSyncObjNV VkDevice device const VkImportFenceSciSyncInfoNV* pImportFenceSciSyncInfo - + VkResult vkGetSemaphoreSciSyncObjNV VkDevice device const VkSemaphoreGetSciSyncInfoNV* pGetSciSyncInfo void* pHandle - + VkResult vkImportSemaphoreSciSyncObjNV VkDevice device const VkImportSemaphoreSciSyncInfoNV* pImportSemaphoreSciSyncInfo @@ -14258,11 +14230,6 @@ typedef void* MTLSharedEvent_id; VkDevice device const VkPipelineIndirectDeviceAddressInfoNV* pInfo - - void vkAntiLagUpdateAMD - VkDevice device - const VkAntiLagDataAMD* pData - void vkCmdSetCullMode VkCommandBuffer commandBuffer @@ -17112,7 +17079,7 @@ typedef void* MTLSharedEvent_id; - + @@ -17894,7 +17861,7 @@ typedef void* MTLSharedEvent_id; - + @@ -18237,7 +18204,7 @@ typedef void* MTLSharedEvent_id; - + @@ -18249,7 +18216,7 @@ typedef void* MTLSharedEvent_id; - + @@ -18335,7 +18302,7 @@ typedef void* MTLSharedEvent_id; - + @@ -18371,7 +18338,7 @@ typedef void* MTLSharedEvent_id; - + @@ -18391,7 +18358,7 @@ typedef void* MTLSharedEvent_id; - + @@ -18410,9 +18377,9 @@ typedef void* MTLSharedEvent_id; - + - + @@ -18692,14 +18659,14 @@ typedef void* MTLSharedEvent_id; - + - + @@ -18891,7 +18858,7 @@ typedef void* MTLSharedEvent_id; - + @@ -18909,7 +18876,7 @@ typedef void* MTLSharedEvent_id; - + @@ -18971,7 +18938,7 @@ typedef void* MTLSharedEvent_id; - + @@ -19217,7 +19184,7 @@ typedef void* MTLSharedEvent_id; - + @@ -19319,7 +19286,7 @@ typedef void* MTLSharedEvent_id; - + @@ -19441,7 +19408,7 @@ typedef void* MTLSharedEvent_id; - + @@ -19610,7 +19577,7 @@ typedef void* MTLSharedEvent_id; - + @@ -19642,7 +19609,7 @@ typedef void* MTLSharedEvent_id; - + @@ -19696,7 +19663,7 @@ typedef void* MTLSharedEvent_id; - + @@ -19746,7 +19713,7 @@ typedef void* MTLSharedEvent_id; - + @@ -19770,7 +19737,7 @@ typedef void* MTLSharedEvent_id; - + @@ -20043,7 +20010,7 @@ typedef void* MTLSharedEvent_id; - + @@ -20163,7 +20130,7 @@ typedef void* MTLSharedEvent_id; - + @@ -20294,7 +20261,7 @@ typedef void* MTLSharedEvent_id; - + @@ -20468,7 +20435,7 @@ typedef void* MTLSharedEvent_id; - + @@ -20556,7 +20523,7 @@ typedef void* MTLSharedEvent_id; - + @@ -20581,7 +20548,7 @@ typedef void* MTLSharedEvent_id; - + @@ -20631,7 +20598,7 @@ typedef void* MTLSharedEvent_id; - + @@ -20815,7 +20782,7 @@ typedef void* MTLSharedEvent_id; - + @@ -20897,7 +20864,7 @@ typedef void* MTLSharedEvent_id; - + @@ -20932,7 +20899,7 @@ typedef void* MTLSharedEvent_id; - + @@ -20947,7 +20914,7 @@ typedef void* MTLSharedEvent_id; - + @@ -20955,7 +20922,7 @@ typedef void* MTLSharedEvent_id; - + @@ -20965,7 +20932,7 @@ typedef void* MTLSharedEvent_id; - + @@ -21668,7 +21635,7 @@ typedef void* MTLSharedEvent_id; - + VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT and @@ -21716,7 +21683,7 @@ typedef void* MTLSharedEvent_id; - + @@ -21732,7 +21699,7 @@ typedef void* MTLSharedEvent_id; - + @@ -21801,7 +21768,7 @@ typedef void* MTLSharedEvent_id; - + VkPhysicalDevice4444FormatsFeaturesEXT and @@ -21862,7 +21829,7 @@ typedef void* MTLSharedEvent_id; - + @@ -22227,7 +22194,7 @@ typedef void* MTLSharedEvent_id; - + @@ -22268,7 +22235,7 @@ typedef void* MTLSharedEvent_id; - + @@ -22728,7 +22695,7 @@ typedef void* MTLSharedEvent_id; - + @@ -22959,8 +22926,8 @@ typedef void* MTLSharedEvent_id; - - + + @@ -23442,19 +23409,10 @@ typedef void* MTLSharedEvent_id; - + - - - - - - - - - - - + + @@ -23756,7 +23714,7 @@ typedef void* MTLSharedEvent_id; - + @@ -23830,7 +23788,6 @@ typedef void* MTLSharedEvent_id; - @@ -24043,7 +24000,7 @@ typedef void* MTLSharedEvent_id; - + @@ -24117,7 +24074,7 @@ typedef void* MTLSharedEvent_id; - + @@ -24126,7 +24083,7 @@ typedef void* MTLSharedEvent_id; - + @@ -24189,7 +24146,7 @@ typedef void* MTLSharedEvent_id; - + @@ -24307,8 +24264,6 @@ typedef void* MTLSharedEvent_id; - - @@ -24337,7 +24292,7 @@ typedef void* MTLSharedEvent_id; - + @@ -24363,23 +24318,10 @@ typedef void* MTLSharedEvent_id; - + - - - - - - - - - - - - - - - + + @@ -24448,7 +24390,6 @@ typedef void* MTLSharedEvent_id; - @@ -24514,7 +24455,7 @@ typedef void* MTLSharedEvent_id; - + @@ -24543,8 +24484,6 @@ typedef void* MTLSharedEvent_id; - - @@ -24596,43 +24535,6 @@ typedef void* MTLSharedEvent_id; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -27143,86 +27045,4 @@ typedef void* MTLSharedEvent_id; VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -