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
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-